shadowx-fca 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/README.md +1066 -0
  2. package/build/messagix.dll +0 -0
  3. package/build/messagix.so +0 -0
  4. package/checkUpdate.js +393 -0
  5. package/config.json +17 -0
  6. package/e2ee.js +563 -0
  7. package/e2eetest.js +356 -0
  8. package/index.js +611 -0
  9. package/lib/index.mjs +1412 -0
  10. package/logger.js +500 -0
  11. package/package.json +65 -0
  12. package/src/GetBotInfo.js +66 -0
  13. package/src/OldMessage.js +182 -0
  14. package/src/Screenshot.js +83 -0
  15. package/src/addExternalModule.js +13 -0
  16. package/src/addUserToGroup.js +33 -0
  17. package/src/approveGroupJoinRequests.js +18 -0
  18. package/src/changeAdminStatus.js +16 -0
  19. package/src/changeArchivedStatus.js +17 -0
  20. package/src/changeAvatar.js +136 -0
  21. package/src/changeAvatarV2.js +86 -0
  22. package/src/changeAvt.js +85 -0
  23. package/src/changeBio.js +76 -0
  24. package/src/changeBlockedStatus.js +20 -0
  25. package/src/changeBlockedStatusMqtt.js +80 -0
  26. package/src/changeCover.js +72 -0
  27. package/src/changeGroupImage.js +16 -0
  28. package/src/changeName.js +79 -0
  29. package/src/changeNickname.js +16 -0
  30. package/src/changeThreadColor.js +15 -0
  31. package/src/changeThreadEmoji.js +15 -0
  32. package/src/changeThreadMemberNickname.js +6 -0
  33. package/src/changeUsername.js +59 -0
  34. package/src/createCommentPost.js +230 -0
  35. package/src/createNewGroup.js +38 -0
  36. package/src/createNote.js +35 -0
  37. package/src/createPoll.js +27 -0
  38. package/src/createPost.js +276 -0
  39. package/src/createThemeAI.js +129 -0
  40. package/src/data/cache/system/data.json +4 -0
  41. package/src/data/cache/system/datahandle.js +21 -0
  42. package/src/data/getThreadInfo.json +1 -0
  43. package/src/deleteComment.js +23 -0
  44. package/src/deleteMessage.js +15 -0
  45. package/src/deleteThread.js +15 -0
  46. package/src/denyGroupJoinRequests.js +18 -0
  47. package/src/e2ee/crypto.js +173 -0
  48. package/src/e2ee/index.js +144 -0
  49. package/src/e2ee/proto/ArmadilloApplication.proto +281 -0
  50. package/src/e2ee/proto/ArmadilloICDC.proto +14 -0
  51. package/src/e2ee/proto/ConsumerApplication.proto +232 -0
  52. package/src/e2ee/proto/MessageApplication.proto +82 -0
  53. package/src/e2ee/proto/MessageTransport.proto +77 -0
  54. package/src/e2ee/proto/WACommon.proto +66 -0
  55. package/src/e2ee/proto/WAMediaTransport.proto +176 -0
  56. package/src/e2ee/proto/proto-writer.ts +76 -0
  57. package/src/e2ee/protocol.js +196 -0
  58. package/src/e2ee/ratchet.js +219 -0
  59. package/src/e2ee/store.js +182 -0
  60. package/src/e2ee.js +8 -0
  61. package/src/editMessage.js +56 -0
  62. package/src/editMessageOld.js +67 -0
  63. package/src/enableReactions.js +24 -0
  64. package/src/follow.js +74 -0
  65. package/src/followUser.js +23 -0
  66. package/src/forwardAttachment.js +16 -0
  67. package/src/friendList.js +98 -0
  68. package/src/getAccess.js +112 -0
  69. package/src/getAppState.js +13 -0
  70. package/src/getAvatarUser.js +11 -0
  71. package/src/getBio.js +24 -0
  72. package/src/getBotInitialData.js +42 -0
  73. package/src/getCtx.js +5 -0
  74. package/src/getCurrentUserID.js +6 -0
  75. package/src/getEmojiUrl.js +29 -0
  76. package/src/getFriendsList.js +36 -0
  77. package/src/getMessage.js +37 -0
  78. package/src/getNotes.js +17 -0
  79. package/src/getOptions.js +5 -0
  80. package/src/getPinnedMessages.js +33 -0
  81. package/src/getPostInfo.js +17 -0
  82. package/src/getProfileInfo.js +17 -0
  83. package/src/getPublicData.js +25 -0
  84. package/src/getRegion.js +7 -0
  85. package/src/getRepInfo.js +17 -0
  86. package/src/getStickerPacks.js +25 -0
  87. package/src/getStickers.js +39 -0
  88. package/src/getStoryReactions.js +18 -0
  89. package/src/getThreadHistory.js +45 -0
  90. package/src/getThreadHistoryDeprecated.js +71 -0
  91. package/src/getThreadInfo.js +73 -0
  92. package/src/getThreadInfoDeprecated.js +56 -0
  93. package/src/getThreadList.js +76 -0
  94. package/src/getThreadListDeprecated.js +46 -0
  95. package/src/getThreadPictures.js +59 -0
  96. package/src/getThreadTheme.js +77 -0
  97. package/src/getUID.js +17 -0
  98. package/src/getUserID.js +17 -0
  99. package/src/getUserInfo.js +28 -0
  100. package/src/handleFriendRequest.js +21 -0
  101. package/src/handleMessageRequest.js +15 -0
  102. package/src/httpGet.js +13 -0
  103. package/src/httpPost.js +12 -0
  104. package/src/httpPostFormData.js +12 -0
  105. package/src/listenE2EE.js +75 -0
  106. package/src/listenMqtt.js +802 -0
  107. package/src/listenNotification.js +85 -0
  108. package/src/logout.js +22 -0
  109. package/src/markAsDelivered.js +17 -0
  110. package/src/markAsRead.js +14 -0
  111. package/src/markAsReadAll.js +15 -0
  112. package/src/markAsSeen.js +15 -0
  113. package/src/metaTheme.js +185 -0
  114. package/src/muteThread.js +52 -0
  115. package/src/note.js +228 -0
  116. package/src/pin.js +53 -0
  117. package/src/pinMessage.js +6 -0
  118. package/src/postComment.js +29 -0
  119. package/src/postFormData.js +46 -0
  120. package/src/reactToComment.js +31 -0
  121. package/src/reactToPost.js +32 -0
  122. package/src/refreshFb_dtsg.js +31 -0
  123. package/src/removeSuspiciousAccount.js +74 -0
  124. package/src/removeUserFromGroup.js +15 -0
  125. package/src/reply.js +442 -0
  126. package/src/resolvePhotoUrl.js +15 -0
  127. package/src/searchForThread.js +20 -0
  128. package/src/searchFriends.js +28 -0
  129. package/src/searchStickers.js +53 -0
  130. package/src/send.js +46 -0
  131. package/src/sendAudio.js +8 -0
  132. package/src/sendBroadcast.js +93 -0
  133. package/src/sendButtons.js +161 -0
  134. package/src/sendComment.js +159 -0
  135. package/src/sendEmoji.js +10 -0
  136. package/src/sendFile.js +9 -0
  137. package/src/sendFriendRequest.js +33 -0
  138. package/src/sendGif.js +24 -0
  139. package/src/sendImage.js +9 -0
  140. package/src/sendLocation.js +9 -0
  141. package/src/sendMessage.js +487 -0
  142. package/src/sendMessage1.js +309 -0
  143. package/src/sendMessageMqtt.js +68 -0
  144. package/src/sendSticker.js +8 -0
  145. package/src/sendTypingIndicator.js +36 -0
  146. package/src/sendTypingIndicatorV2.js +28 -0
  147. package/src/sendVideo.js +9 -0
  148. package/src/sessionGuard.js +130 -0
  149. package/src/setActiveStatus.js +16 -0
  150. package/src/setMessageReaction.js +61 -0
  151. package/src/setMessageReactionMqtt.js +62 -0
  152. package/src/setOptions.js +22 -0
  153. package/src/setPollVote.js +17 -0
  154. package/src/setPostReaction.js +112 -0
  155. package/src/setProfileGuard.js +44 -0
  156. package/src/setProfileLock.js +93 -0
  157. package/src/setStoryReaction.js +129 -0
  158. package/src/setStorySeen.js +99 -0
  159. package/src/setThreadTheme.js +17 -0
  160. package/src/setTitle.js +15 -0
  161. package/src/shareContact.js +33 -0
  162. package/src/shareLink.js +8 -0
  163. package/src/sharePost.js +31 -0
  164. package/src/stopListenMqtt.js +23 -0
  165. package/src/storyManager.js +353 -0
  166. package/src/suggestFriend.js +128 -0
  167. package/src/threadColors.js +131 -0
  168. package/src/unfollowUser.js +23 -0
  169. package/src/unfriend.js +15 -0
  170. package/src/unpinMessage.js +6 -0
  171. package/src/unsendMessage.js +14 -0
  172. package/src/uploadAttachment.js +58 -0
  173. package/src/uploadImageToImgbb.js +29 -0
  174. package/utils.js +2945 -0
@@ -0,0 +1,77 @@
1
+ /**
2
+ * ===========================================================
3
+ * 🔰 Owner & Developer
4
+ * -----------------------------------------------------------
5
+ * 🕊️ Respect the creator & give proper credits if reused.
6
+ * ===========================================================
7
+ */
8
+ "use strict";
9
+
10
+ const utils = require("../utils");
11
+ const log = require("npmlog");
12
+
13
+ module.exports = function (defaultFuncs, api, ctx) {
14
+ return function getThreadTheme(themeID, callback) {
15
+ let resolveFunc, rejectFunc;
16
+ const returnPromise = new Promise((resolve, reject) => {
17
+ resolveFunc = resolve;
18
+ rejectFunc = reject;
19
+ });
20
+
21
+ if (!callback) {
22
+ callback = function (err, data) {
23
+ if (err) return rejectFunc(err);
24
+ resolveFunc(data);
25
+ };
26
+ }
27
+
28
+ if (!themeID) {
29
+ return callback({ error: "themeID is required" });
30
+ }
31
+
32
+ const form = {
33
+ av: ctx.userID,
34
+ __user: ctx.userID,
35
+ __a: 1,
36
+ __req: utils.getSignatureID(),
37
+ fb_dtsg: ctx.fb_dtsg,
38
+ jazoest: ctx.ttstamp,
39
+ lsd: ctx.fb_dtsg,
40
+ fb_api_caller_class: "RelayModern",
41
+ fb_api_req_friendly_name: "MWPThreadThemeProviderQuery",
42
+ variables: JSON.stringify({
43
+ id: themeID.toString() // <-- THEME ID instead of threadID
44
+ }),
45
+ server_timestamps: true,
46
+ doc_id: "9734829906576883"
47
+ };
48
+
49
+ defaultFuncs
50
+ .post("https://www.facebook.com/api/graphql/", ctx.jar, form)
51
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
52
+ .then(function (resData) {
53
+ if (resData.errors) throw resData.errors;
54
+
55
+ if (resData.data && resData.data.messenger_thread_theme) {
56
+ const themeData = resData.data.messenger_thread_theme;
57
+ return callback(null, {
58
+ id: themeData.id,
59
+ name: themeData.accessibility_label,
60
+ description: themeData.description,
61
+ colors: themeData.gradient_colors || [themeData.fallback_color],
62
+ backgroundImage: themeData.background_asset
63
+ ? themeData.background_asset.image.uri
64
+ : null
65
+ });
66
+ } else {
67
+ throw new Error("No theme data found");
68
+ }
69
+ })
70
+ .catch(function (err) {
71
+ log.error("getThreadTheme", err);
72
+ return callback(err);
73
+ });
74
+
75
+ return returnPromise;
76
+ };
77
+ };
package/src/getUID.js ADDED
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var utils = require("../utils");
3
+ module.exports = function (defaultFuncs, api, ctx) {
4
+ return function getUID(url, callback) {
5
+ var { promise, callback: cb } = utils.wrapCallback(callback);
6
+ defaultFuncs.get(url, ctx.jar, {})
7
+ .then(res => {
8
+ var m = (res.body || "").match(/"profile_id":"(\d+)"/);
9
+ if (!m) m = (res.body || "").match(/"entity_id":"(\d+)"/);
10
+ if (!m) m = (res.body || "").match(/"userID":"(\d+)"/);
11
+ if (m && m[1]) return cb(null, m[1]);
12
+ cb({ error: "Could not extract UID from: " + url });
13
+ })
14
+ .catch(err => cb(err));
15
+ return promise;
16
+ };
17
+ };
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var utils = require("../utils");
3
+ module.exports = function (defaultFuncs, api, ctx) {
4
+ return function getUserID(name, callback) {
5
+ var { promise, callback: cb } = utils.wrapCallback(callback);
6
+ defaultFuncs.get("https://www.facebook.com/public/" + encodeURIComponent(name), ctx.jar, {})
7
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
8
+ .then(resData => {
9
+ var data = [];
10
+ var matches = (resData.body || "").matchAll(/"userID":"(\d+)"/g);
11
+ for (var m of matches) if (!data.includes(m[1])) data.push(m[1]);
12
+ cb(null, data);
13
+ })
14
+ .catch(err => cb(err));
15
+ return promise;
16
+ };
17
+ };
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var utils = require("../utils");
3
+ module.exports = function (defaultFuncs, api, ctx) {
4
+ return function getUserInfo(id, callback) {
5
+ var { promise, callback: cb } = utils.wrapCallback(callback);
6
+ if (utils.getType(id) !== "Array") id = [id];
7
+ var form = {};
8
+ id.forEach((v, i) => { form["ids[" + i + "]"] = v; });
9
+ defaultFuncs.post("https://www.facebook.com/chat/user_info/", ctx.jar, form)
10
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
11
+ .then(resData => {
12
+ if (resData.error) throw resData;
13
+ var profiles = resData.payload.profiles;
14
+ var ret = {};
15
+ for (var prop in profiles) {
16
+ var p = profiles[prop];
17
+ ret[prop] = {
18
+ name: p.name, firstName: p.firstName, vanity: p.vanity,
19
+ thumbSrc: p.thumbSrc, profileUrl: p.uri, gender: p.gender,
20
+ type: p.type, isFriend: p.is_friend, isBirthday: !!p.is_birthday
21
+ };
22
+ }
23
+ cb(null, ret);
24
+ })
25
+ .catch(err => cb(err));
26
+ return promise;
27
+ };
28
+ };
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var utils = require("../utils");
3
+ module.exports = function (defaultFuncs, api, ctx) {
4
+ return function handleFriendRequest(userID, accept, callback) {
5
+ var { promise, callback: cb } = utils.wrapCallback(callback);
6
+ defaultFuncs.post("https://www.facebook.com/requests/friends/ajax/", ctx.jar, {
7
+ viewer_id: ctx.userID,
8
+ "frefs[0]": "jwl",
9
+ floc: "friend_center_requests",
10
+ ref: "/reqs.php",
11
+ action: accept ? "confirm" : "reject"
12
+ })
13
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
14
+ .then(resData => {
15
+ if (resData.payload && resData.payload.err) throw { err: resData.payload.err };
16
+ cb(null, true);
17
+ })
18
+ .catch(err => cb(err));
19
+ return promise;
20
+ };
21
+ };
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ var utils = require("../utils");
3
+ module.exports = function (defaultFuncs, api, ctx) {
4
+ return function handleMessageRequest(threadID, accept, callback) {
5
+ var { promise, callback: cb } = utils.wrapCallback(callback);
6
+ defaultFuncs.post("https://www.facebook.com/ajax/mercury/filteredmessages.php", ctx.jar, {
7
+ action: accept ? "accept" : "ignore",
8
+ thread_fbids: Array.isArray(threadID) ? threadID : [threadID]
9
+ })
10
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
11
+ .then(resData => { if (resData.error) throw resData; cb(null, true); })
12
+ .catch(err => cb(err));
13
+ return promise;
14
+ };
15
+ };
package/src/httpGet.js ADDED
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var utils = require("../utils");
3
+ module.exports = function (defaultFuncs, api, ctx) {
4
+ return function httpGet(url, form, callback) {
5
+ if (typeof form === "function") { callback = form; form = {}; }
6
+ var { promise, callback: cb } = utils.wrapCallback(callback);
7
+ defaultFuncs.get(url, ctx.jar, form)
8
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
9
+ .then(data => cb(null, data))
10
+ .catch(err => cb(err));
11
+ return promise;
12
+ };
13
+ };
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ var utils = require("../utils");
3
+ module.exports = function (defaultFuncs, api, ctx) {
4
+ return function httpPost(url, form, callback) {
5
+ var { promise, callback: cb } = utils.wrapCallback(callback);
6
+ defaultFuncs.post(url, ctx.jar, form)
7
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
8
+ .then(data => cb(null, data))
9
+ .catch(err => cb(err));
10
+ return promise;
11
+ };
12
+ };
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ var utils = require("../utils");
3
+ module.exports = function (defaultFuncs, api, ctx) {
4
+ return function httpPostFormData(url, form, callback) {
5
+ var { promise, callback: cb } = utils.wrapCallback(callback);
6
+ defaultFuncs.postFormData(url, ctx.jar, form, {})
7
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
8
+ .then(data => cb(null, data))
9
+ .catch(err => cb(err));
10
+ return promise;
11
+ };
12
+ };
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+
3
+ var logger = require("../logger");
4
+ var EventEmitter = require("events");
5
+
6
+ /**
7
+ * listenE2EE — merges E2EE messages into the same event stream as MQTT.
8
+ *
9
+ * Usage (identical to api.listen):
10
+ * api.listenE2EE(callback) // Node-style callback(err, event)
11
+ * api.listenE2EE() // returns MessageEmitter
12
+ *
13
+ * Combines:
14
+ * - Regular MQTT messages (from api.listenMqtt)
15
+ * - E2EE encrypted messages (received via SHADOWX native Noise WebSocket)
16
+ *
17
+ * All events share the same shape (type, senderID, threadID, body, etc.),
18
+ * with E2EE events carrying `isE2EE: true`.
19
+ */
20
+ module.exports = function (defaultFuncs, api, ctx) {
21
+ return function listenE2EE(callback) {
22
+ class CombinedEmitter extends EventEmitter {
23
+ stopListening(cb) {
24
+ if (api._mqttEmitter && typeof api._mqttEmitter.stopListening === "function") {
25
+ api._mqttEmitter.stopListening(cb);
26
+ } else if (typeof cb === "function") {
27
+ cb([]);
28
+ }
29
+ if (ctx.e2ee && ctx.e2ee.connected) {
30
+ ctx.e2ee.disconnect().catch(() => {});
31
+ }
32
+ }
33
+ stopListeningAsync() {
34
+ return new Promise(res => this.stopListening(res));
35
+ }
36
+ }
37
+
38
+ var emitter = new CombinedEmitter();
39
+
40
+ var isCallbackMode = typeof callback === "function";
41
+ var globalCallback = isCallbackMode ? callback : function (err, event) {
42
+ if (err) return emitter.emit("error", err);
43
+ emitter.emit("message", event);
44
+ };
45
+
46
+ // Start regular MQTT listener
47
+ var mqttEmitter = api.listenMqtt(globalCallback);
48
+ api._mqttEmitter = mqttEmitter;
49
+
50
+ // Hook E2EE incoming messages (SHADOWX native Noise WebSocket)
51
+ var e2ee = api.e2ee || ctx.e2ee;
52
+ if (!e2ee || !e2ee.isConnected()) {
53
+ logger.warn(
54
+ "listenE2EE",
55
+ "E2EE not connected. E2EE messages will not be received. " +
56
+ "Call api.connectE2EE() before listenE2EE() to enable encrypted message reception."
57
+ );
58
+ } else {
59
+ e2ee.onMessage(function (err, event) {
60
+ if (err) return globalCallback(err, null);
61
+ if (!event) return;
62
+
63
+ // Filter self-messages unless selfListen is enabled
64
+ if (!ctx.globalOptions.selfListen && event.senderID === ctx.userID) return;
65
+
66
+ event.isE2EE = true;
67
+ globalCallback(null, event);
68
+ });
69
+
70
+ logger.success("listenE2EE", "Combined MQTT + E2EE (Signal/Noise) listener active.");
71
+ }
72
+
73
+ return emitter;
74
+ };
75
+ };