fca-smart-shankar 10.9.1 → 13.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 (169) hide show
  1. package/.replit +12 -3
  2. package/.upm/store.json +1 -1
  3. package/CHANGELOG.md +2 -0
  4. package/LICENSE-MIT +21 -0
  5. package/README.md +175 -30
  6. package/generated-icon.png +0 -0
  7. package/index.js +511 -414
  8. package/package.json +370 -85
  9. package/replit.nix +5 -0
  10. package/shankar-fca.json +4 -0
  11. package/src/addExternalModule.js +14 -5
  12. package/src/addUserToGroup.js +56 -20
  13. package/src/changeAdminStatus.js +44 -20
  14. package/src/changeArchivedStatus.js +25 -11
  15. package/src/changeAvatar.js +136 -0
  16. package/src/{changeAvt.js → changeAvatarV2.js} +3 -2
  17. package/src/changeBio.js +26 -15
  18. package/src/changeBlockedStatus.js +21 -8
  19. package/src/changeBlockedStatusMqtt.js +80 -0
  20. package/src/changeCover.js +73 -0
  21. package/src/changeGroupImage.js +53 -24
  22. package/src/changeName.js +79 -0
  23. package/src/changeNickname.js +27 -13
  24. package/src/changeThreadColor.js +22 -19
  25. package/src/changeThreadEmoji.js +24 -11
  26. package/src/changeUsername.js +59 -0
  27. package/src/createCommentPost.js +230 -0
  28. package/src/createNewGroup.js +38 -20
  29. package/src/createPoll.js +27 -16
  30. package/src/createPost.js +277 -0
  31. package/src/data/getThreadInfo.json +1 -0
  32. package/src/deleteMessage.js +24 -13
  33. package/src/deleteThread.js +25 -12
  34. package/src/editMessage.js +71 -53
  35. package/src/editMessageOld.js +67 -0
  36. package/src/follow.js +74 -0
  37. package/src/forwardAttachment.js +27 -15
  38. package/src/getAccess.js +112 -0
  39. package/src/getAvatarUser.js +78 -0
  40. package/src/getCurrentUserID.js +1 -1
  41. package/src/getEmojiUrl.js +10 -8
  42. package/src/getFriendsList.js +25 -15
  43. package/src/getMessage.js +813 -81
  44. package/src/getRegion.js +7 -0
  45. package/src/getThreadHistory.js +241 -98
  46. package/src/getThreadHistoryDeprecated.js +93 -0
  47. package/src/getThreadInfo.js +90 -287
  48. package/src/getThreadInfoDeprecated.js +80 -0
  49. package/src/getThreadList.js +214 -157
  50. package/src/getThreadListDeprecated.js +75 -0
  51. package/src/getThreadPictures.js +39 -19
  52. package/src/getUID.js +113 -50
  53. package/src/getUserID.js +18 -14
  54. package/src/getUserInfo.js +65 -71
  55. package/src/handleFriendRequest.js +24 -13
  56. package/src/handleMessageRequest.js +36 -20
  57. package/src/httpGet.js +34 -18
  58. package/src/httpPost.js +35 -18
  59. package/src/httpPostFormData.js +53 -24
  60. package/src/listenMqtt.js +680 -944
  61. package/src/listenNotification.js +85 -0
  62. package/src/logout.js +22 -15
  63. package/src/markAsDelivered.js +25 -15
  64. package/src/markAsRead.js +45 -27
  65. package/src/markAsReadAll.js +21 -14
  66. package/src/markAsSeen.js +28 -18
  67. package/src/muteThread.js +17 -12
  68. package/src/pinMessage.js +59 -0
  69. package/src/refreshFb_dtsg.js +89 -0
  70. package/src/removeUserFromGroup.js +47 -17
  71. package/src/resolvePhotoUrl.js +21 -13
  72. package/src/searchForThread.js +23 -13
  73. package/src/searchStickers.js +53 -0
  74. package/src/sendMessage.js +178 -117
  75. package/src/sendMessageMqtt.js +322 -0
  76. package/src/sendTypingIndicator.js +46 -16
  77. package/src/sendTypingIndicatorV2.js +28 -0
  78. package/src/setMessageReaction.js +33 -20
  79. package/src/setMessageReactionMqtt.js +62 -0
  80. package/src/setPostReaction.js +105 -95
  81. package/src/setProfileGuard.js +45 -0
  82. package/src/setStoryReaction.js +64 -0
  83. package/src/setTitle.js +34 -18
  84. package/src/shareContact.js +92 -37
  85. package/src/shareLink.js +5 -4
  86. package/src/stopListenMqtt.js +26 -0
  87. package/src/threadColors.js +110 -18
  88. package/src/unfriend.js +18 -9
  89. package/src/unsendMessage.js +31 -34
  90. package/src/uploadAttachment.js +94 -0
  91. package/test/data/shareAttach.js +1 -1
  92. package/test/test.js +1 -1
  93. package/utils.js +1393 -2918
  94. package/.cache/replit/env/latest +0 -56
  95. package/.cache/replit/env/latest.json +0 -1
  96. package/.cache/replit/modules/nodejs-14.res +0 -1
  97. package/.cache/replit/modules/replit.res +0 -1
  98. package/.cache/replit/modules/web.res +0 -1
  99. package/.cache/replit/modules.stamp +0 -0
  100. package/.cache/typescript/5.5/package.json +0 -1
  101. package/.config/configstore/update-notifier-npm.json +0 -4
  102. package/.gitattributes +0 -2
  103. package/Extra/Balancer.js +0 -49
  104. package/Extra/Bypass/956/index.js +0 -234
  105. package/Extra/Bypass/test/aaaa.json +0 -170
  106. package/Extra/Bypass/test/index.js +0 -188
  107. package/Extra/Database/index.js +0 -469
  108. package/Extra/ExtraAddons.js +0 -82
  109. package/Extra/ExtraFindUID.js +0 -62
  110. package/Extra/ExtraGetThread.js +0 -365
  111. package/Extra/ExtraScreenShot.js +0 -430
  112. package/Extra/ExtraUptimeRobot.js +0 -38
  113. package/Extra/Html/Classic/script.js +0 -119
  114. package/Extra/Html/Classic/style.css +0 -8
  115. package/Extra/Security/AES_256_GCM/index.js +0 -0
  116. package/Extra/Security/Base/Step_1.js +0 -6
  117. package/Extra/Security/Base/Step_2.js +0 -22
  118. package/Extra/Security/Base/Step_3.js +0 -22
  119. package/Extra/Security/Base/index.js +0 -191
  120. package/Extra/Security/Index.js +0 -5
  121. package/Extra/Security/Step_1.js +0 -6
  122. package/Extra/Security/Step_2.js +0 -22
  123. package/Extra/Security/Step_3.js +0 -22
  124. package/Extra/Src/Change_Environment.js +0 -24
  125. package/Extra/Src/Check_Update.js +0 -67
  126. package/Extra/Src/History.js +0 -115
  127. package/Extra/Src/Instant_Update.js +0 -65
  128. package/Extra/Src/Last-Run.js +0 -65
  129. package/Extra/Src/Premium.js +0 -81
  130. package/Extra/Src/Release_Memory.js +0 -160
  131. package/Extra/Src/Websocket.js +0 -213
  132. package/Extra/Src/image/checkmate.jpg +0 -0
  133. package/Extra/Src/test.js +0 -28
  134. package/Extra/Src/uuid.js +0 -137
  135. package/Func/AcceptAgreement.js +0 -31
  136. package/Func/ClearCache.js +0 -64
  137. package/Func/ReportV1.js +0 -54
  138. package/LICENSE +0 -678
  139. package/Language/index.json +0 -228
  140. package/Main.js +0 -1444
  141. package/SECURITY.md +0 -18
  142. package/broadcast.js +0 -44
  143. package/logger.js +0 -66
  144. package/src/Dev_Horizon_Data.js +0 -125
  145. package/src/Dev_getThreadInfoOLD.js +0 -422
  146. package/src/Dev_shareTest2.js +0 -68
  147. package/src/Dev_shareTest3.js +0 -71
  148. package/src/Premium.js +0 -25
  149. package/src/Screenshot.js +0 -83
  150. package/src/getAccessToken.js +0 -28
  151. package/src/getThreadInfoOLD.js +0 -422
  152. package/src/getThreadMain.js +0 -220
  153. package/src/getUserInfoMain.js +0 -65
  154. package/src/getUserInfoV2.js +0 -32
  155. package/src/getUserInfoV3.js +0 -63
  156. package/src/getUserInfoV4.js +0 -55
  157. package/src/getUserInfoV5.js +0 -61
  158. package/src/listenMqttV1.js +0 -846
  159. package/src/sendMqttMessage.js +0 -71
  160. package/src/unsendMqttMessage.js +0 -66
  161. package/test/Database_Test.js +0 -4
  162. package/test/Db2.js +0 -530
  163. package/test/Shankar_Database/A_README.md +0 -1
  164. package/test/Shankar_Database/Database.db +0 -0
  165. package/test/env/.env +0 -0
  166. package/test/example-db.db +0 -0
  167. package/test/memoryleak.js +0 -18
  168. package/test/testname.js +0 -1342
  169. package/test/testv2.js +0 -3
@@ -0,0 +1,85 @@
1
+ 'use strict';
2
+
3
+ var utils = require('../utils');
4
+ var log = require('npmlog');
5
+ var EventEmitter = require('node:events');
6
+
7
+ function format(res, globalCallback) {
8
+ var checkMinutes = (date_1, date_2) => {
9
+ let ms_1 = date_1.getTime();
10
+ let ms_2 = date_2.getTime();
11
+ return Math.ceil((ms_2 - ms_1) / (60 * 1000));
12
+ }
13
+
14
+ for (let index of res.notifications_page.edges) {
15
+ if (index.node.row_type !== 'NOTIFICATION') continue;
16
+
17
+ var timestamp = index.node.notif.creation_time.timestamp;
18
+ if (checkMinutes(new Date(timestamp * 1000), new Date()) <= 1)
19
+ globalCallback(null, {
20
+ id: res.node.notif.id,
21
+ noti_id: res.node.notif.notif_id,
22
+ body: index.node.notif.body.text,
23
+ url: index.node.notif.url,
24
+ timestamp: timestamp * 1000
25
+ });
26
+ }
27
+ }
28
+
29
+ module.exports = function (defaultFuncs, api, ctx) {
30
+ let globalCallback, interval;
31
+
32
+ function MessageRepeat() {
33
+ interval = setInterval(function () {
34
+ return defaultFuncs
35
+ .post('https://www.facebook.com/api/graphql/', ctx.jar, {
36
+ fb_api_req_friendly_name: 'CometNotificationsRootQuery',
37
+ doc_id: 6663491207045267,
38
+ variables: JSON.stringify({
39
+ count: 5,
40
+ environment: 'MAIN_SURFACE',
41
+ filter_tokens: ['Cg8CZnQPA2FsbAE='],
42
+ scale: 1
43
+ }),
44
+ server_timestamps: !0
45
+ })
46
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
47
+ .then(function (res) {
48
+ if (res.error || res.errors)
49
+ throw res;
50
+
51
+ return format(res.data.viewer, globalCallback);
52
+ })
53
+ .catch(function (err) {
54
+ log.error('listenNotification', err);
55
+ clearInterval(interval);
56
+ interval = void 0;
57
+ return globalCallback(err);
58
+ });
59
+ }, 60 * 1000);
60
+ }
61
+
62
+ return function notification(callback) {
63
+ class MessageEmitter extends EventEmitter {
64
+ stop() {
65
+ globalCallback = () => {}
66
+
67
+ if (interval) {
68
+ clearInterval(interval);
69
+ interval = void 0;
70
+ }
71
+ Message.emit('stop', new Date());
72
+ }
73
+ }
74
+
75
+ var Message = new MessageEmitter();
76
+
77
+ if (typeof callback == 'function')
78
+ globalCallback = callback;
79
+ else
80
+ globalCallback = (error, message) => error ? Message.emit('error', error) : Message.emit('message', message);
81
+
82
+ MessageRepeat();
83
+ return Message;
84
+ }
85
+ }
package/src/logout.js CHANGED
@@ -1,45 +1,50 @@
1
1
  "use strict";
2
2
 
3
- var utils = require("../utils");
4
- var log = require("npmlog");
3
+ const utils = require("../utils");
4
+ const log = require("npmlog");
5
5
 
6
6
  module.exports = function (defaultFuncs, api, ctx) {
7
7
  return function logout(callback) {
8
- var resolveFunc = function () { };
9
- var rejectFunc = function () { };
10
- var returnPromise = new Promise(function (resolve, reject) {
8
+ let resolveFunc = function () {};
9
+ let rejectFunc = function () {};
10
+ const returnPromise = new Promise(function (resolve, reject) {
11
11
  resolveFunc = resolve;
12
12
  rejectFunc = reject;
13
13
  });
14
14
 
15
15
  if (!callback) {
16
16
  callback = function (err, friendList) {
17
- if (err) return rejectFunc(err);
18
-
17
+ if (err) {
18
+ return rejectFunc(err);
19
+ }
19
20
  resolveFunc(friendList);
20
21
  };
21
22
  }
22
23
 
23
- var form = {
24
- pmid: "0"
24
+ const form = {
25
+ pmid: "0",
25
26
  };
26
27
 
27
28
  defaultFuncs
28
- .post("https://www.facebook.com/bluebar/modern_settings_menu/?help_type=364455653583099&show_contextual_help=1", ctx.jar, form)
29
+ .post(
30
+ "https://www.facebook.com/bluebar/modern_settings_menu/?help_type=364455653583099&show_contextual_help=1",
31
+ ctx.jar,
32
+ form,
33
+ )
29
34
  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
30
35
  .then(function (resData) {
31
- var elem = resData.jsmods.instances[0][2][0].filter(function (v) {
36
+ const elem = resData.jsmods.instances[0][2][0].filter(function (v) {
32
37
  return v.value === "logout";
33
38
  })[0];
34
39
 
35
- var html = resData.jsmods.markup.filter(function (v) {
40
+ const html = resData.jsmods.markup.filter(function (v) {
36
41
  return v[0] === elem.markup.__m;
37
42
  })[0][1].__html;
38
43
 
39
- var form = {
44
+ const form = {
40
45
  fb_dtsg: utils.getFrom(html, '"fb_dtsg" value="', '"'),
41
46
  ref: utils.getFrom(html, '"ref" value="', '"'),
42
- h: utils.getFrom(html, '"h" value="', '"')
47
+ h: utils.getFrom(html, '"h" value="', '"'),
43
48
  };
44
49
 
45
50
  return defaultFuncs
@@ -47,7 +52,9 @@ module.exports = function (defaultFuncs, api, ctx) {
47
52
  .then(utils.saveCookies(ctx.jar));
48
53
  })
49
54
  .then(function (res) {
50
- if (!res.headers) throw { error: "An error occurred when logging out." };
55
+ if (!res.headers) {
56
+ throw { error: "An error occurred when logging out." };
57
+ }
51
58
 
52
59
  return defaultFuncs
53
60
  .get(res.headers.location, ctx.jar)
@@ -1,45 +1,55 @@
1
1
  "use strict";
2
2
 
3
- var utils = require("../utils");
4
- var log = require("npmlog");
3
+ const utils = require("../utils");
4
+ const log = require("npmlog");
5
5
 
6
6
  module.exports = function (defaultFuncs, api, ctx) {
7
7
  return function markAsDelivered(threadID, messageID, callback) {
8
- var resolveFunc = function () { };
9
- var rejectFunc = function () { };
10
- var returnPromise = new Promise(function (resolve, reject) {
8
+ let resolveFunc = function () {};
9
+ let rejectFunc = function () {};
10
+ const returnPromise = new Promise(function (resolve, reject) {
11
11
  resolveFunc = resolve;
12
12
  rejectFunc = reject;
13
13
  });
14
14
 
15
15
  if (!callback) {
16
- callback = function (err, data) {
17
- if (err) return rejectFunc(err);
18
-
19
- resolveFunc(data);
16
+ callback = function (err, friendList) {
17
+ if (err) {
18
+ return rejectFunc(err);
19
+ }
20
+ resolveFunc(friendList);
20
21
  };
21
22
  }
22
23
 
23
- if (!threadID || !messageID) return callback("Error: messageID or threadID is not defined");
24
+ if (!threadID || !messageID) {
25
+ return callback("Error: messageID or threadID is not defined");
26
+ }
24
27
 
25
- var form = {};
28
+ const form = {};
26
29
 
27
30
  form["message_ids[0]"] = messageID;
28
31
  form["thread_ids[" + threadID + "][0]"] = messageID;
29
32
 
30
33
  defaultFuncs
31
- .post("https://www.facebook.com/ajax/mercury/delivery_receipts.php", ctx.jar, form)
34
+ .post(
35
+ "https://www.facebook.com/ajax/mercury/delivery_receipts.php",
36
+ ctx.jar,
37
+ form,
38
+ )
32
39
  .then(utils.saveCookies(ctx.jar))
33
40
  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
34
41
  .then(function (resData) {
35
- if (resData.error) throw resData;
42
+ if (resData.error) {
43
+ throw resData;
44
+ }
36
45
 
37
46
  return callback();
38
47
  })
39
48
  .catch(function (err) {
40
49
  log.error("markAsDelivered", err);
41
- if (utils.getType(err) == "Object" && err.error === "Not logged in.") ctx.loggedIn = false;
42
-
50
+ if (utils.getType(err) == "Object" && err.error === "Not logged in.") {
51
+ ctx.loggedIn = false;
52
+ }
43
53
  return callback(err);
44
54
  });
45
55
 
package/src/markAsRead.js CHANGED
@@ -1,21 +1,28 @@
1
1
  "use strict";
2
2
 
3
- var utils = require("../utils");
4
- var log = require("npmlog");
3
+ const utils = require("../utils");
4
+ const log = require("npmlog");
5
5
 
6
6
  module.exports = function (defaultFuncs, api, ctx) {
7
7
  return async function markAsRead(threadID, read, callback) {
8
- if (utils.getType(read) === 'Function' || utils.getType(read) === 'AsyncFunction') {
8
+ if (
9
+ utils.getType(read) === "Function" ||
10
+ utils.getType(read) === "AsyncFunction"
11
+ ) {
9
12
  callback = read;
10
13
  read = true;
11
14
  }
12
- if (read == undefined) read = true;
15
+ if (read == undefined) {
16
+ read = true;
17
+ }
13
18
 
14
- if (!callback) callback = () => { };
19
+ if (!callback) {
20
+ callback = () => {};
21
+ }
15
22
 
16
- var form = {};
23
+ const form = {};
17
24
 
18
- if (typeof ctx.globalOptions.pageID !== 'undefined') {
25
+ if (typeof ctx.globalOptions.pageID !== "undefined") {
19
26
  form["source"] = "PagesManagerMessagesInterface";
20
27
  form["request_user_id"] = ctx.globalOptions.pageID;
21
28
  form["ids[" + threadID + "]"] = read;
@@ -26,42 +33,53 @@ module.exports = function (defaultFuncs, api, ctx) {
26
33
 
27
34
  let resData;
28
35
  try {
29
- resData = await (
30
- defaultFuncs
31
- .post("https://www.facebook.com/ajax/mercury/change_read_status.php", ctx.jar, form)
32
- .then(utils.saveCookies(ctx.jar))
33
- .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
34
- );
35
- }
36
- catch (e) {
36
+ resData = await defaultFuncs
37
+ .post(
38
+ "https://www.facebook.com/ajax/mercury/change_read_status.php",
39
+ ctx.jar,
40
+ form,
41
+ )
42
+ .then(utils.saveCookies(ctx.jar))
43
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs));
44
+ } catch (e) {
37
45
  callback(e);
38
46
  return e;
39
47
  }
40
48
 
41
49
  if (resData.error) {
42
- let err = resData.error;
50
+ const err = resData.error;
43
51
  log.error("markAsRead", err);
44
- if (utils.getType(err) == "Object" && err.error === "Not logged in.") ctx.loggedIn = false;
52
+ if (utils.getType(err) == "Object" && err.error === "Not logged in.") {
53
+ ctx.loggedIn = false;
54
+ }
45
55
  callback(err);
46
56
  return err;
47
57
  }
48
58
 
49
59
  callback();
50
60
  return null;
51
- }
52
- else {
61
+ } else {
53
62
  try {
54
63
  if (ctx.mqttClient) {
55
- let err = await new Promise(r => ctx.mqttClient.publish("/mark_thread", JSON.stringify({
56
- threadID,
57
- mark: "read",
58
- state: read
59
- }), { qos: 1, retain: false }, r));
64
+ const err = await new Promise((r) =>
65
+ ctx.mqttClient.publish(
66
+ "/mark_thread",
67
+ JSON.stringify({
68
+ threadID,
69
+ mark: "read",
70
+ state: read,
71
+ }),
72
+ { qos: 1, retain: false },
73
+ r,
74
+ ),
75
+ );
60
76
  if (err) throw err;
77
+ } else {
78
+ throw {
79
+ error: "You can only use this function after you start listening.",
80
+ };
61
81
  }
62
- else throw { error: "You can only use this function after you start listening." };
63
- }
64
- catch (e) {
82
+ } catch (e) {
65
83
  callback(e);
66
84
  return e;
67
85
  }
@@ -1,35 +1,42 @@
1
1
  "use strict";
2
2
 
3
- var utils = require("../utils");
4
- var log = require("npmlog");
3
+ const utils = require("../utils");
4
+ const log = require("npmlog");
5
5
 
6
6
  module.exports = function (defaultFuncs, api, ctx) {
7
7
  return function markAsReadAll(callback) {
8
- var resolveFunc = function () { };
9
- var rejectFunc = function () { };
10
- var returnPromise = new Promise(function (resolve, reject) {
8
+ let resolveFunc = function () {};
9
+ let rejectFunc = function () {};
10
+ const returnPromise = new Promise(function (resolve, reject) {
11
11
  resolveFunc = resolve;
12
12
  rejectFunc = reject;
13
13
  });
14
14
 
15
15
  if (!callback) {
16
- callback = function (err, data) {
17
- if (err) return rejectFunc(err);
18
-
19
- resolveFunc(data);
16
+ callback = function (err, friendList) {
17
+ if (err) {
18
+ return rejectFunc(err);
19
+ }
20
+ resolveFunc(friendList);
20
21
  };
21
22
  }
22
23
 
23
- var form = {
24
- folder: 'inbox'
24
+ const form = {
25
+ folder: "inbox",
25
26
  };
26
27
 
27
28
  defaultFuncs
28
- .post("https://www.facebook.com/ajax/mercury/mark_folder_as_read.php", ctx.jar, form)
29
+ .post(
30
+ "https://www.facebook.com/ajax/mercury/mark_folder_as_read.php",
31
+ ctx.jar,
32
+ form,
33
+ )
29
34
  .then(utils.saveCookies(ctx.jar))
30
35
  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
31
36
  .then(function (resData) {
32
- if (resData.error) throw resData;
37
+ if (resData.error) {
38
+ throw resData;
39
+ }
33
40
 
34
41
  return callback();
35
42
  })
@@ -40,4 +47,4 @@ module.exports = function (defaultFuncs, api, ctx) {
40
47
 
41
48
  return returnPromise;
42
49
  };
43
- };
50
+ };
package/src/markAsSeen.js CHANGED
@@ -1,48 +1,58 @@
1
1
  "use strict";
2
2
 
3
- var utils = require("../utils");
4
- var log = require("npmlog");
3
+ const utils = require("../utils");
4
+ const log = require("npmlog");
5
5
 
6
6
  module.exports = function (defaultFuncs, api, ctx) {
7
- return function markAsSeen(seen_timestamp, callback) {
8
- if (utils.getType(seen_timestamp) == "Function" ||
9
- utils.getType(seen_timestamp) == "AsyncFunction") {
7
+ return function markAsRead(seen_timestamp, callback) {
8
+ if (
9
+ utils.getType(seen_timestamp) == "Function" ||
10
+ utils.getType(seen_timestamp) == "AsyncFunction"
11
+ ) {
10
12
  callback = seen_timestamp;
11
13
  seen_timestamp = Date.now();
12
14
  }
13
15
 
14
- var resolveFunc = function () { };
15
- var rejectFunc = function () { };
16
- var returnPromise = new Promise(function (resolve, reject) {
16
+ let resolveFunc = function () {};
17
+ let rejectFunc = function () {};
18
+ const returnPromise = new Promise(function (resolve, reject) {
17
19
  resolveFunc = resolve;
18
20
  rejectFunc = reject;
19
21
  });
20
22
 
21
23
  if (!callback) {
22
- callback = function (err, data) {
23
- if (err) return rejectFunc(err);
24
-
25
- resolveFunc(data);
24
+ callback = function (err, friendList) {
25
+ if (err) {
26
+ return rejectFunc(err);
27
+ }
28
+ resolveFunc(friendList);
26
29
  };
27
30
  }
28
31
 
29
- var form = {
30
- seen_timestamp: seen_timestamp
32
+ const form = {
33
+ seen_timestamp: seen_timestamp,
31
34
  };
32
35
 
33
36
  defaultFuncs
34
- .post("https://www.facebook.com/ajax/mercury/mark_seen.php", ctx.jar, form)
37
+ .post(
38
+ "https://www.facebook.com/ajax/mercury/mark_seen.php",
39
+ ctx.jar,
40
+ form,
41
+ )
35
42
  .then(utils.saveCookies(ctx.jar))
36
43
  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
37
44
  .then(function (resData) {
38
- if (resData.error) throw resData;
45
+ if (resData.error) {
46
+ throw resData;
47
+ }
39
48
 
40
49
  return callback();
41
50
  })
42
51
  .catch(function (err) {
43
52
  log.error("markAsSeen", err);
44
- if (utils.getType(err) == "Object" && err.error === "Not logged in.") ctx.loggedIn = false;
45
-
53
+ if (utils.getType(err) == "Object" && err.error === "Not logged in.") {
54
+ ctx.loggedIn = false;
55
+ }
46
56
  return callback(err);
47
57
  });
48
58
 
package/src/muteThread.js CHANGED
@@ -1,33 +1,38 @@
1
1
  "use strict";
2
2
 
3
- var utils = require("../utils");
4
- var log = require("npmlog");
3
+ const utils = require("../utils");
4
+ const log = require("npmlog");
5
5
 
6
6
  module.exports = function (defaultFuncs, api, ctx) {
7
7
  // muteSecond: -1=permanent mute, 0=unmute, 60=one minute, 3600=one hour, etc.
8
8
  return function muteThread(threadID, muteSeconds, callback) {
9
- var resolveFunc = function () { };
10
- var rejectFunc = function () { };
11
- var returnPromise = new Promise(function (resolve, reject) {
9
+ let resolveFunc = function () {};
10
+ let rejectFunc = function () {};
11
+ const returnPromise = new Promise(function (resolve, reject) {
12
12
  resolveFunc = resolve;
13
13
  rejectFunc = reject;
14
14
  });
15
15
 
16
16
  if (!callback) {
17
- callback = function (err, data) {
18
- if (err) return rejectFunc(err);
19
-
20
- resolveFunc(data);
17
+ callback = function (err, friendList) {
18
+ if (err) {
19
+ return rejectFunc(err);
20
+ }
21
+ resolveFunc(friendList);
21
22
  };
22
23
  }
23
24
 
24
- var form = {
25
+ const form = {
25
26
  thread_fbid: threadID,
26
- mute_settings: muteSeconds
27
+ mute_settings: muteSeconds,
27
28
  };
28
29
 
29
30
  defaultFuncs
30
- .post("https://www.facebook.com/ajax/mercury/change_mute_thread.php", ctx.jar, form)
31
+ .post(
32
+ "https://www.facebook.com/ajax/mercury/change_mute_thread.php",
33
+ ctx.jar,
34
+ form,
35
+ )
31
36
  .then(utils.saveCookies(ctx.jar))
32
37
  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
33
38
  .then(function (resData) {
@@ -0,0 +1,59 @@
1
+
2
+ 'use strict';
3
+
4
+ const { generateOfflineThreadingID } = require('../utils');
5
+
6
+ function isCallable(func) {
7
+ try {
8
+ Reflect.apply(func, null, []);
9
+ return true;
10
+ } catch (error) {
11
+ return false;
12
+ }
13
+ }
14
+
15
+ module.exports = function (defaultFuncs, api, ctx) {
16
+ return function pinMessage(pinMode, messageID, threadID, callback) {
17
+ if (!ctx.mqttClient) {
18
+ throw new Error('Not connected to MQTT');
19
+ }
20
+
21
+ ctx.wsReqNumber += 1;
22
+ ctx.wsTaskNumber += 1;
23
+
24
+ const taskLabel = pinMode ? '430' : '431';
25
+ const queueNamePrefix = pinMode ? 'pin_msg_v2_' : 'unpin_msg_v2_';
26
+
27
+ const taskPayload = {
28
+ thread_key: threadID,
29
+ message_id: messageID,
30
+ timestamp_ms: Date.now(),
31
+ };
32
+
33
+ const task = {
34
+ failure_count: null,
35
+ label: taskLabel,
36
+ payload: JSON.stringify(taskPayload),
37
+ queue_name: `${queueNamePrefix}${threadID}`,
38
+ task_id: ctx.wsTaskNumber,
39
+ };
40
+
41
+ const content = {
42
+ app_id: '2220391788200892',
43
+ payload: JSON.stringify({
44
+ data_trace_id: null,
45
+ epoch_id: parseInt(generateOfflineThreadingID()),
46
+ tasks: [task],
47
+ version_id: '25095469420099952',
48
+ }),
49
+ request_id: ctx.wsReqNumber,
50
+ type: 3,
51
+ };
52
+
53
+ if (isCallable(callback)) {
54
+ ctx.reqCallbacks[ctx.wsReqNumber] = callback;
55
+ }
56
+
57
+ ctx.mqttClient.publish('/ls_req', JSON.stringify(content), { qos: 1, retain: false });
58
+ };
59
+ };
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+
3
+ const utils = require("../utils");
4
+ const log = require("npmlog");
5
+
6
+ module.exports = function (defaultFuncs, api, ctx) {
7
+ /**
8
+ * Refreshes the fb_dtsg and jazoest values.
9
+ * @param {Function} callback
10
+ * @returns {Promise}
11
+ * @description if you don't update the value of fb_dtsg and jazoest for a long time an error "Please try closing and re-opening your browser window" will appear
12
+ * @description you should refresh it every 48h or less
13
+ */
14
+ return function refreshFb_dtsg(obj, callback) {
15
+ let resolveFunc = function () {};
16
+ let rejectFunc = function () {};
17
+ const returnPromise = new Promise(function (resolve, reject) {
18
+ resolveFunc = resolve;
19
+ rejectFunc = reject;
20
+ });
21
+
22
+ if (
23
+ utils.getType(obj) === "Function" ||
24
+ utils.getType(obj) === "AsyncFunction"
25
+ ) {
26
+ callback = obj;
27
+ obj = {};
28
+ }
29
+
30
+ if (!obj) {
31
+ obj = {};
32
+ }
33
+
34
+ if (utils.getType(obj) !== "Object") {
35
+ throw new utils.CustomError(
36
+ "the first parameter must be an object or a callback function",
37
+ );
38
+ }
39
+
40
+ if (!callback) {
41
+ callback = function (err, friendList) {
42
+ if (err) {
43
+ return rejectFunc(err);
44
+ }
45
+ resolveFunc(friendList);
46
+ };
47
+ }
48
+
49
+ if (Object.keys(obj).length == 0) {
50
+ utils
51
+ .get("https://m.facebook.com/", ctx.jar, null, ctx.globalOptions, {
52
+ noRef: true,
53
+ })
54
+ .then(function (resData) {
55
+ const html = resData.body;
56
+ const fb_dtsg = utils.getFrom(html, 'name="fb_dtsg" value="', '"');
57
+ const jazoest = utils.getFrom(html, 'name="jazoest" value="', '"');
58
+ if (!fb_dtsg) {
59
+ throw new utils.CustomError(
60
+ "Could not find fb_dtsg in HTML after requesting https://www.facebook.com/",
61
+ );
62
+ }
63
+ ctx.fb_dtsg = fb_dtsg;
64
+ ctx.jazoest = jazoest;
65
+ callback(null, {
66
+ data: {
67
+ fb_dtsg: fb_dtsg,
68
+ jazoest: jazoest,
69
+ },
70
+ message: "refreshed fb_dtsg and jazoest",
71
+ });
72
+ })
73
+ .catch(function (err) {
74
+ log.error("refreshFb_dtsg", err);
75
+ return callback(err);
76
+ });
77
+ } else {
78
+ Object.keys(obj).forEach(function (key) {
79
+ ctx[key] = obj[key];
80
+ });
81
+ callback(null, {
82
+ data: obj,
83
+ message: "refreshed " + Object.keys(obj).join(", "),
84
+ });
85
+ }
86
+
87
+ return returnPromise;
88
+ };
89
+ };