@cexy/hoonfca 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/.travis.yml +6 -0
  2. package/LICENSE-MIT +21 -0
  3. package/index.d.ts +620 -0
  4. package/index.js +745 -433
  5. package/package.json +45 -6
  6. package/src/addExternalModule.js +14 -16
  7. package/src/addUserToGroup.js +45 -30
  8. package/src/changeAdminStatus.js +39 -42
  9. package/src/changeApprovalMode.js +79 -0
  10. package/src/changeArchivedStatus.js +19 -15
  11. package/src/changeBio.js +18 -16
  12. package/src/changeBlockedStatus.js +14 -12
  13. package/src/changeBlockedStatusMqtt.js +38 -17
  14. package/src/changeGroupImage.js +100 -77
  15. package/src/changeNickname.js +12 -11
  16. package/src/changeThreadColor.js +25 -16
  17. package/src/changeThreadEmoji.js +11 -10
  18. package/src/createNewGroup.js +21 -14
  19. package/src/createPoll.js +87 -21
  20. package/src/deleteMessage.js +18 -17
  21. package/src/deleteThread.js +18 -17
  22. package/src/editMessage.js +28 -31
  23. package/src/forwardAttachment.js +22 -19
  24. package/src/forwardMessage.js +63 -0
  25. package/src/getCurrentUserID.js +4 -2
  26. package/src/getEmojiUrl.js +20 -9
  27. package/src/getFriendsList.js +21 -18
  28. package/src/getGroupsList.js +83 -0
  29. package/src/getMarketplace.js +84 -0
  30. package/src/getNotifications.js +86 -0
  31. package/src/getPagesList.js +83 -0
  32. package/src/getStories.js +88 -0
  33. package/src/getThreadHistory.js +277 -126
  34. package/src/getThreadInfo.js +143 -115
  35. package/src/getThreadList.js +216 -143
  36. package/src/getThreadPictures.js +26 -32
  37. package/src/getUserID.js +13 -14
  38. package/src/getUserInfo.js +107 -68
  39. package/src/handleFriendRequest.js +16 -15
  40. package/src/handleMessageRequest.js +15 -15
  41. package/src/httpGet.js +36 -31
  42. package/src/httpPost.js +36 -31
  43. package/src/listenMqtt.js +705 -370
  44. package/src/logout.js +26 -28
  45. package/src/markAsDelivered.js +22 -17
  46. package/src/markAsRead.js +63 -49
  47. package/src/markAsReadAll.js +17 -13
  48. package/src/markAsSeen.js +23 -19
  49. package/src/muteThread.js +17 -14
  50. package/src/pinMessage.js +23 -22
  51. package/src/removeUserFromGroup.js +42 -22
  52. package/src/resolvePhotoUrl.js +15 -17
  53. package/src/searchForThread.js +18 -20
  54. package/src/searchUsers.js +89 -0
  55. package/src/sendComment.js +161 -0
  56. package/src/sendMessage.js +65 -52
  57. package/src/sendTypingIndicator.js +173 -48
  58. package/src/setBio.js +86 -0
  59. package/src/setMessageReaction.js +76 -16
  60. package/src/setPostReaction.js +29 -61
  61. package/src/setTheme.js +313 -0
  62. package/src/setTitle.js +27 -37
  63. package/src/shareContact.js +34 -82
  64. package/src/shareLink.js +56 -99
  65. package/src/threadColors.js +35 -97
  66. package/src/unfriend.js +15 -20
  67. package/src/unsendMessage.js +71 -18
  68. package/utils.js +1000 -472
  69. package/README.md +0 -83
  70. package/replit.nix +0 -3
  71. package/src/changeAvatar.js +0 -89
  72. package/src/changeCover.js +0 -92
  73. package/src/changeName.js +0 -106
  74. package/src/changeUsername.js +0 -80
  75. package/src/createCommentPost.js +0 -196
  76. package/src/createPost.js +0 -285
  77. package/src/data/getThreadInfo.json +0 -1
  78. package/src/follow.js +0 -71
  79. package/src/getAccess.js +0 -130
  80. package/src/getAvatarUser.js +0 -88
  81. package/src/getBotInitialData.js +0 -59
  82. package/src/getCtx.js +0 -5
  83. package/src/getMessage.js +0 -827
  84. package/src/getOptions.js +0 -5
  85. package/src/getRegion.js +0 -7
  86. package/src/getThreadHistoryDeprecated.js +0 -95
  87. package/src/getThreadInfoDeprecated.js +0 -77
  88. package/src/getThreadListDeprecated.js +0 -86
  89. package/src/httpPostFormData.js +0 -58
  90. package/src/listenNotification.js +0 -96
  91. package/src/refreshFb_dtsg.js +0 -75
  92. package/src/searchStickers.js +0 -59
  93. package/src/sendMessageMqtt.js +0 -326
  94. package/src/setMessageReactionMqtt.js +0 -74
  95. package/src/setProfileGuard.js +0 -66
  96. package/src/setStoryReaction.js +0 -97
  97. package/src/stopListenMqtt.js +0 -47
  98. package/src/uploadAttachment.js +0 -98
package/src/logout.js CHANGED
@@ -1,24 +1,27 @@
1
1
  "use strict";
2
2
 
3
- const utils = require("../utils");
3
+ var utils = require("../utils");
4
+ var log = require("npmlog");
4
5
 
5
6
  module.exports = function (defaultFuncs, api, ctx) {
6
7
  return function logout(callback) {
7
- let resolveFunc = () => {};
8
- let rejectFunc = () => {};
9
- const returnPromise = new Promise((resolve, reject) => {
8
+ var resolveFunc = function () {};
9
+ var rejectFunc = function () {};
10
+ var returnPromise = new Promise(function (resolve, reject) {
10
11
  resolveFunc = resolve;
11
12
  rejectFunc = reject;
12
13
  });
13
14
 
14
15
  if (!callback) {
15
- callback = (err, data) => {
16
- if (err) return rejectFunc(err);
17
- resolveFunc(data);
16
+ callback = function (err, friendList) {
17
+ if (err) {
18
+ return rejectFunc(err);
19
+ }
20
+ resolveFunc(friendList);
18
21
  };
19
22
  }
20
23
 
21
- const form = {
24
+ var form = {
22
25
  pmid: "0",
23
26
  };
24
27
 
@@ -29,32 +32,27 @@ module.exports = function (defaultFuncs, api, ctx) {
29
32
  form,
30
33
  )
31
34
  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
32
- .then(resData => {
33
- // অপশনাল চেইনিং ব্যবহার করে ক্র্যাশ সেফটি নিশ্চিত করা হলো
34
- const instances = resData?.jsmods?.instances?.[0]?.[2]?.[0] || [];
35
- const elem = instances.find(v => v.value === "logout");
36
-
37
- if (!elem) throw { error: "Logout element not found in settings." };
38
-
39
- const markupList = resData?.jsmods?.markup || [];
40
- const markupItem = markupList.find(v => v[0] === elem.markup.__m);
41
-
42
- if (!markupItem) throw { error: "Logout markup not found." };
35
+ .then(function (resData) {
36
+ var elem = resData.jsmods.instances[0][2][0].filter(function (v) {
37
+ return v.value === "logout";
38
+ })[0];
43
39
 
44
- const html = markupItem[1].__html;
40
+ var html = resData.jsmods.markup.filter(function (v) {
41
+ return v[0] === elem.markup.__m;
42
+ })[0][1].__html;
45
43
 
46
- const logoutForm = {
44
+ var form = {
47
45
  fb_dtsg: utils.getFrom(html, '"fb_dtsg" value="', '"'),
48
46
  ref: utils.getFrom(html, '"ref" value="', '"'),
49
47
  h: utils.getFrom(html, '"h" value="', '"'),
50
48
  };
51
49
 
52
50
  return defaultFuncs
53
- .post("https://www.facebook.com/logout.php", ctx.jar, logoutForm)
51
+ .post("https://www.facebook.com/logout.php", ctx.jar, form)
54
52
  .then(utils.saveCookies(ctx.jar));
55
53
  })
56
- .then(res => {
57
- if (!res?.headers?.location) {
54
+ .then(function (res) {
55
+ if (!res.headers) {
58
56
  throw { error: "An error occurred when logging out." };
59
57
  }
60
58
 
@@ -62,13 +60,13 @@ module.exports = function (defaultFuncs, api, ctx) {
62
60
  .get(res.headers.location, ctx.jar)
63
61
  .then(utils.saveCookies(ctx.jar));
64
62
  })
65
- .then(() => {
63
+ .then(function () {
66
64
  ctx.loggedIn = false;
67
- utils.log("logout", "Logged out successfully.");
65
+ log.info("logout", "Logged out successfully.");
68
66
  callback();
69
67
  })
70
- .catch(err => {
71
- utils.error("logout", err);
68
+ .catch(function (err) {
69
+ log.error("logout", err);
72
70
  return callback(err);
73
71
  });
74
72
 
@@ -1,20 +1,23 @@
1
1
  "use strict";
2
2
 
3
- const utils = require("../utils");
3
+ var utils = require("../utils");
4
+ var log = require("npmlog");
4
5
 
5
6
  module.exports = function (defaultFuncs, api, ctx) {
6
7
  return function markAsDelivered(threadID, messageID, callback) {
7
- let resolveFunc = () => {};
8
- let rejectFunc = () => {};
9
- const returnPromise = new Promise((resolve, reject) => {
8
+ var resolveFunc = function () {};
9
+ var rejectFunc = function () {};
10
+ var returnPromise = new Promise(function (resolve, reject) {
10
11
  resolveFunc = resolve;
11
12
  rejectFunc = reject;
12
13
  });
13
14
 
14
15
  if (!callback) {
15
- callback = (err, data) => {
16
- if (err) return rejectFunc(err);
17
- resolveFunc(data);
16
+ callback = function (err, friendList) {
17
+ if (err) {
18
+ return rejectFunc(err);
19
+ }
20
+ resolveFunc(friendList);
18
21
  };
19
22
  }
20
23
 
@@ -22,10 +25,10 @@ module.exports = function (defaultFuncs, api, ctx) {
22
25
  return callback("Error: messageID or threadID is not defined");
23
26
  }
24
27
 
25
- const form = {
26
- [`message_ids[0]`]: messageID,
27
- [`thread_ids[${threadID}][0]`]: messageID,
28
- };
28
+ var form = {};
29
+
30
+ form["message_ids[0]"] = messageID;
31
+ form["thread_ids[" + threadID + "][0]"] = messageID;
29
32
 
30
33
  defaultFuncs
31
34
  .post(
@@ -35,16 +38,18 @@ module.exports = function (defaultFuncs, api, ctx) {
35
38
  )
36
39
  .then(utils.saveCookies(ctx.jar))
37
40
  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
38
- .then(resData => {
39
- // রেসপন্সে এরর থাকলে থ্রো করা হচ্ছে
40
- if (resData?.error) {
41
+ .then(function (resData) {
42
+ if (resData.error) {
41
43
  throw resData;
42
44
  }
43
45
 
44
- return callback(null, true);
46
+ return callback();
45
47
  })
46
- .catch(err => {
47
- utils.error("markAsDelivered", err);
48
+ .catch(function (err) {
49
+ log.error("markAsDelivered", err);
50
+ if (utils.getType(err) == "Object" && err.error === "Not logged in.") {
51
+ ctx.loggedIn = false;
52
+ }
48
53
  return callback(err);
49
54
  });
50
55
 
package/src/markAsRead.js CHANGED
@@ -1,73 +1,87 @@
1
1
  "use strict";
2
2
 
3
- const utils = require("../utils");
3
+ var utils = require("../utils");
4
+ var log = require("npmlog");
4
5
 
5
6
  module.exports = function (defaultFuncs, api, ctx) {
6
7
  return async function markAsRead(threadID, read, callback) {
7
- // আর্গুমেন্ট শিফটিং ও ডিফল্ট ভ্যালু সেটআপ
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
-
13
- read = read === undefined ? true : read;
14
- callback = callback || (() => {});
15
+ if (read == undefined) {
16
+ read = true;
17
+ }
18
+
19
+ if (!callback) {
20
+ callback = () => {};
21
+ }
22
+
23
+ var form = {};
15
24
 
16
- // পেজ আইডি থাকলে HTTP রিকোয়েস্ট (Legacy method)
17
25
  if (typeof ctx.globalOptions.pageID !== "undefined") {
18
- const form = {
19
- source: "PagesManagerMessagesInterface",
20
- request_user_id: ctx.globalOptions.pageID,
21
- [`ids[${threadID}]`]: read,
22
- watermarkTimestamp: Date.now(),
23
- shouldSendReadReceipt: true,
24
- commerce_last_message_type: ""
25
- };
26
+ form["source"] = "PagesManagerMessagesInterface";
27
+ form["request_user_id"] = ctx.globalOptions.pageID;
28
+ form["ids[" + threadID + "]"] = read;
29
+ form["watermarkTimestamp"] = new Date().getTime();
30
+ form["shouldSendReadReceipt"] = true;
31
+ form["commerce_last_message_type"] = "";
32
+ //form["titanOriginatedThreadId"] = utils.generateThreadingID(ctx.clientID);
26
33
 
34
+ let resData;
27
35
  try {
28
- const resData = await defaultFuncs
29
- .post("https://www.facebook.com/ajax/mercury/change_read_status.php", ctx.jar, form)
36
+ resData = await defaultFuncs
37
+ .post(
38
+ "https://www.facebook.com/ajax/mercury/change_read_status.php",
39
+ ctx.jar,
40
+ form,
41
+ )
30
42
  .then(utils.saveCookies(ctx.jar))
31
43
  .then(utils.parseAndCheckLogin(ctx, defaultFuncs));
44
+ } catch (e) {
45
+ callback(e);
46
+ return e;
47
+ }
32
48
 
33
- if (resData?.error) {
34
- throw resData.error;
49
+ if (resData.error) {
50
+ let err = resData.error;
51
+ log.error("markAsRead", err);
52
+ if (utils.getType(err) == "Object" && err.error === "Not logged in.") {
53
+ ctx.loggedIn = false;
35
54
  }
36
-
37
- callback();
38
- return null;
39
- } catch (err) {
40
- utils.error("markAsRead", err);
41
55
  callback(err);
42
56
  return err;
43
57
  }
44
- }
45
- // MQTT এর মাধ্যমে রিড রিকোয়েস্ট (Modern method)
46
- else {
47
- try {
48
- if (!ctx.mqttClient) {
49
- throw { error: "You can only use this function after you start listening." };
50
- }
51
58
 
52
- await new Promise((resolve, reject) => {
53
- ctx.mqttClient.publish(
54
- "/mark_thread",
55
- JSON.stringify({
56
- threadID,
57
- mark: "read",
58
- state: read,
59
- }),
60
- { qos: 1, retain: false },
61
- (err) => (err ? reject(err) : resolve())
59
+ callback();
60
+ return null;
61
+ } else {
62
+ try {
63
+ if (ctx.mqttClient) {
64
+ let 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
+ ),
62
75
  );
63
- });
64
-
65
- callback();
66
- return null;
67
- } catch (err) {
68
- utils.error("markAsRead", err);
69
- callback(err);
70
- return err;
76
+ if (err) throw err;
77
+ } else {
78
+ throw {
79
+ error: "You can only use this function after you start listening.",
80
+ };
81
+ }
82
+ } catch (e) {
83
+ callback(e);
84
+ return e;
71
85
  }
72
86
  }
73
87
  };
@@ -1,24 +1,27 @@
1
1
  "use strict";
2
2
 
3
- const utils = require("../utils");
3
+ var utils = require("../utils");
4
+ var log = require("npmlog");
4
5
 
5
6
  module.exports = function (defaultFuncs, api, ctx) {
6
7
  return function markAsReadAll(callback) {
7
- let resolveFunc = () => {};
8
- let rejectFunc = () => {};
9
- const returnPromise = new Promise((resolve, reject) => {
8
+ var resolveFunc = function () {};
9
+ var rejectFunc = function () {};
10
+ var returnPromise = new Promise(function (resolve, reject) {
10
11
  resolveFunc = resolve;
11
12
  rejectFunc = reject;
12
13
  });
13
14
 
14
15
  if (!callback) {
15
- callback = (err, data) => {
16
- if (err) return rejectFunc(err);
17
- resolveFunc(data);
16
+ callback = function (err, friendList) {
17
+ if (err) {
18
+ return rejectFunc(err);
19
+ }
20
+ resolveFunc(friendList);
18
21
  };
19
22
  }
20
23
 
21
- const form = {
24
+ var form = {
22
25
  folder: "inbox",
23
26
  };
24
27
 
@@ -30,14 +33,15 @@ module.exports = function (defaultFuncs, api, ctx) {
30
33
  )
31
34
  .then(utils.saveCookies(ctx.jar))
32
35
  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
33
- .then(resData => {
34
- if (resData?.error) {
36
+ .then(function (resData) {
37
+ if (resData.error) {
35
38
  throw resData;
36
39
  }
37
- return callback(null, true);
40
+
41
+ return callback();
38
42
  })
39
- .catch(err => {
40
- utils.error("markAsReadAll", err);
43
+ .catch(function (err) {
44
+ log.error("markAsReadAll", err);
41
45
  return callback(err);
42
46
  });
43
47
 
package/src/markAsSeen.js CHANGED
@@ -1,31 +1,36 @@
1
1
  "use strict";
2
2
 
3
- const utils = require("../utils");
3
+ var utils = require("../utils");
4
+ var log = require("npmlog");
4
5
 
5
6
  module.exports = function (defaultFuncs, api, ctx) {
6
- return function markAsSeen(seen_timestamp, callback) {
7
- // আর্গুমেন্ট শিফটিং: যদি প্রথম আর্গুমেন্টটি ফাংশন হয়
8
- if (utils.getType(seen_timestamp) === "Function" || 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
+ ) {
9
12
  callback = seen_timestamp;
10
13
  seen_timestamp = Date.now();
11
14
  }
12
15
 
13
- let resolveFunc = () => {};
14
- let rejectFunc = () => {};
15
- const returnPromise = new Promise((resolve, reject) => {
16
+ var resolveFunc = function () {};
17
+ var rejectFunc = function () {};
18
+ var returnPromise = new Promise(function (resolve, reject) {
16
19
  resolveFunc = resolve;
17
20
  rejectFunc = reject;
18
21
  });
19
22
 
20
23
  if (!callback) {
21
- callback = (err, data) => {
22
- if (err) return rejectFunc(err);
23
- resolveFunc(data);
24
+ callback = function (err, friendList) {
25
+ if (err) {
26
+ return rejectFunc(err);
27
+ }
28
+ resolveFunc(friendList);
24
29
  };
25
30
  }
26
31
 
27
- const form = {
28
- seen_timestamp: seen_timestamp || Date.now(),
32
+ var form = {
33
+ seen_timestamp: seen_timestamp,
29
34
  };
30
35
 
31
36
  defaultFuncs
@@ -36,17 +41,16 @@ module.exports = function (defaultFuncs, api, ctx) {
36
41
  )
37
42
  .then(utils.saveCookies(ctx.jar))
38
43
  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
39
- .then(resData => {
40
- if (resData?.error) {
44
+ .then(function (resData) {
45
+ if (resData.error) {
41
46
  throw resData;
42
47
  }
43
48
 
44
- return callback(null, true);
49
+ return callback();
45
50
  })
46
- .catch(err => {
47
- utils.error("markAsSeen", err);
48
- // যদি লগইন সেশন এক্সপায়ার করে যায়
49
- if (utils.getType(err) === "Object" && err?.error === "Not logged in.") {
51
+ .catch(function (err) {
52
+ log.error("markAsSeen", err);
53
+ if (utils.getType(err) == "Object" && err.error === "Not logged in.") {
50
54
  ctx.loggedIn = false;
51
55
  }
52
56
  return callback(err);
package/src/muteThread.js CHANGED
@@ -1,25 +1,28 @@
1
1
  "use strict";
2
2
 
3
- const utils = require("../utils");
3
+ var utils = require("../utils");
4
+ var log = require("npmlog");
4
5
 
5
6
  module.exports = function (defaultFuncs, api, ctx) {
6
- // muteSeconds: -1 (permanent), 0 (unmute), 60 (1 min), 3600 (1 hour), etc.
7
+ // muteSecond: -1=permanent mute, 0=unmute, 60=one minute, 3600=one hour, etc.
7
8
  return function muteThread(threadID, muteSeconds, callback) {
8
- let resolveFunc = () => {};
9
- let rejectFunc = () => {};
10
- const returnPromise = new Promise((resolve, reject) => {
9
+ var resolveFunc = function () {};
10
+ var rejectFunc = function () {};
11
+ var returnPromise = new Promise(function (resolve, reject) {
11
12
  resolveFunc = resolve;
12
13
  rejectFunc = reject;
13
14
  });
14
15
 
15
16
  if (!callback) {
16
- callback = (err, data) => {
17
- if (err) return rejectFunc(err);
18
- resolveFunc(data);
17
+ callback = function (err, friendList) {
18
+ if (err) {
19
+ return rejectFunc(err);
20
+ }
21
+ resolveFunc(friendList);
19
22
  };
20
23
  }
21
24
 
22
- const form = {
25
+ var form = {
23
26
  thread_fbid: threadID,
24
27
  mute_settings: muteSeconds,
25
28
  };
@@ -32,15 +35,15 @@ module.exports = function (defaultFuncs, api, ctx) {
32
35
  )
33
36
  .then(utils.saveCookies(ctx.jar))
34
37
  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
35
- .then(resData => {
36
- if (resData?.error) {
38
+ .then(function (resData) {
39
+ if (resData.error) {
37
40
  throw resData;
38
41
  }
39
42
 
40
- return callback(null, true);
43
+ return callback();
41
44
  })
42
- .catch(err => {
43
- utils.error("muteThread", err);
45
+ .catch(function (err) {
46
+ log.error("muteThread", err);
44
47
  return callback(err);
45
48
  });
46
49
 
package/src/pinMessage.js CHANGED
@@ -1,25 +1,32 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
- const { generateOfflineThreadingID } = require('../utils');
3
+ const { generateOfflineThreadingID, getCurrentTimestamp } = require("../utils");
4
+
5
+ function isCallable(func) {
6
+ try {
7
+ Reflect.apply(func, null, []);
8
+ return true;
9
+ } catch (error) {
10
+ return false;
11
+ }
12
+ }
4
13
 
5
14
  module.exports = function (defaultFuncs, api, ctx) {
6
15
  return function pinMessage(pinMode, messageID, threadID, callback) {
7
- // কানেকশন চেক
8
- if (!ctx.mqttClient || !ctx.loggedIn) {
9
- const err = new Error('Not connected to MQTT or not logged in.');
10
- return typeof callback === 'function' ? callback(err) : console.error(err);
16
+ if (!ctx.mqttClient) {
17
+ throw new Error("Not connected to MQTT");
11
18
  }
12
19
 
13
20
  ctx.wsReqNumber += 1;
14
21
  ctx.wsTaskNumber += 1;
15
22
 
16
- const taskLabel = pinMode ? '430' : '431';
17
- const queueNamePrefix = pinMode ? 'pin_msg_v2_' : 'unpin_msg_v2_';
23
+ const taskLabel = pinMode ? "430" : "431";
24
+ const queueNamePrefix = pinMode ? "pin_msg_v2_" : "unpin_msg_v2_";
18
25
 
19
26
  const taskPayload = {
20
27
  thread_key: threadID,
21
28
  message_id: messageID,
22
- timestamp_ms: Date.now(),
29
+ timestamp_ms: getCurrentTimestamp(),
23
30
  };
24
31
 
25
32
  const task = {
@@ -31,30 +38,24 @@ module.exports = function (defaultFuncs, api, ctx) {
31
38
  };
32
39
 
33
40
  const content = {
34
- app_id: '2220391788200892',
41
+ app_id: "2220391788200892",
35
42
  payload: JSON.stringify({
36
43
  data_trace_id: null,
37
44
  epoch_id: parseInt(generateOfflineThreadingID()),
38
45
  tasks: [task],
39
- version_id: '25095469420099952',
46
+ version_id: "25095469420099952",
40
47
  }),
41
48
  request_id: ctx.wsReqNumber,
42
49
  type: 3,
43
50
  };
44
51
 
45
- // কলব্যাক রেজিস্টার করা
46
- if (typeof callback === 'function') {
47
- ctx.reqCallbacks[ctx.wsReqNumber] = callback;
52
+ if (isCallable(callback)) {
53
+ // to be implemented
48
54
  }
49
55
 
50
- // MQTT পাবলিশ
51
- ctx.mqttClient.publish('/ls_req', JSON.stringify(content), {
52
- qos: 1,
53
- retain: false
54
- }, (err) => {
55
- if (err && typeof callback === 'function') {
56
- callback(err);
57
- }
56
+ ctx.mqttClient.publish("/ls_req", JSON.stringify(content), {
57
+ qos: 1,
58
+ retain: false,
58
59
  });
59
60
  };
60
61
  };
@@ -1,37 +1,57 @@
1
1
  "use strict";
2
2
 
3
- const utils = require("../utils");
3
+ var utils = require("../utils");
4
+ var log = require("npmlog");
4
5
 
5
6
  module.exports = function (defaultFuncs, api, ctx) {
6
7
  return function removeUserFromGroup(userID, threadID, callback) {
7
- // ইনপুট ভ্যালিডেশন
8
- if (!callback && (utils.getType(threadID) === "Function" || utils.getType(threadID) === "AsyncFunction")) {
9
- throw { error: "Please pass a threadID as a second argument." };
8
+ if (
9
+ !callback &&
10
+ (utils.getType(threadID) === "Function" ||
11
+ utils.getType(threadID) === "AsyncFunction")
12
+ ) {
13
+ throw { error: "please pass a threadID as a second argument." };
10
14
  }
11
-
12
- if (utils.getType(threadID) !== "Number" && utils.getType(threadID) !== "String") {
13
- throw { error: `threadID should be Number or String, received ${utils.getType(threadID)}.` };
15
+ if (
16
+ utils.getType(threadID) !== "Number" &&
17
+ utils.getType(threadID) !== "String"
18
+ ) {
19
+ throw {
20
+ error:
21
+ "threadID should be of type Number or String and not " +
22
+ utils.getType(threadID) +
23
+ ".",
24
+ };
14
25
  }
15
-
16
- if (utils.getType(userID) !== "Number" && utils.getType(userID) !== "String") {
17
- throw { error: `userID should be Number or String, received ${utils.getType(userID)}.` };
26
+ if (
27
+ utils.getType(userID) !== "Number" &&
28
+ utils.getType(userID) !== "String"
29
+ ) {
30
+ throw {
31
+ error:
32
+ "userID should be of type Number or String and not " +
33
+ utils.getType(userID) +
34
+ ".",
35
+ };
18
36
  }
19
37
 
20
- let resolveFunc = () => {};
21
- let rejectFunc = () => {};
22
- const returnPromise = new Promise((resolve, reject) => {
38
+ var resolveFunc = function () {};
39
+ var rejectFunc = function () {};
40
+ var returnPromise = new Promise(function (resolve, reject) {
23
41
  resolveFunc = resolve;
24
42
  rejectFunc = reject;
25
43
  });
26
44
 
27
45
  if (!callback) {
28
- callback = (err, data) => {
29
- if (err) return rejectFunc(err);
30
- resolveFunc(data);
46
+ callback = function (err, friendList) {
47
+ if (err) {
48
+ return rejectFunc(err);
49
+ }
50
+ resolveFunc(friendList);
31
51
  };
32
52
  }
33
53
 
34
- const form = {
54
+ var form = {
35
55
  uid: userID,
36
56
  tid: threadID,
37
57
  };
@@ -39,18 +59,18 @@ module.exports = function (defaultFuncs, api, ctx) {
39
59
  defaultFuncs
40
60
  .post("https://www.facebook.com/chat/remove_participants", ctx.jar, form)
41
61
  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
42
- .then(resData => {
62
+ .then(function (resData) {
43
63
  if (!resData) {
44
64
  throw { error: "Remove from group failed." };
45
65
  }
46
- if (resData?.error) {
66
+ if (resData.error) {
47
67
  throw resData;
48
68
  }
49
69
 
50
- return callback(null, true);
70
+ return callback();
51
71
  })
52
- .catch(err => {
53
- utils.error("removeUserFromGroup", err);
72
+ .catch(function (err) {
73
+ log.error("removeUserFromGroup", err);
54
74
  return callback(err);
55
75
  });
56
76