node-ainzfb-new 1.6.32-stable → 1.6.2210-test

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 (54) hide show
  1. package/index.js +1 -1
  2. package/package.json +3 -3
  3. package/src/addExternalModule.js +6 -13
  4. package/src/addUserToGroup.js +12 -35
  5. package/src/changeAdminStatus.js +16 -32
  6. package/src/changeArchivedStatus.js +9 -15
  7. package/src/changeBio.js +8 -12
  8. package/src/changeBlockedStatus.js +8 -14
  9. package/src/changeGroupImage.js +13 -27
  10. package/src/changeNickname.js +10 -19
  11. package/src/changeThreadColor.js +10 -15
  12. package/src/changeThreadEmoji.js +9 -17
  13. package/src/createNewGroup.js +10 -18
  14. package/src/createPoll.js +11 -16
  15. package/src/deleteMessage.js +10 -16
  16. package/src/deleteThread.js +10 -16
  17. package/src/forwardAttachment.js +9 -14
  18. package/src/getCurrentUserID.js +1 -1
  19. package/src/getEmojiUrl.js +2 -3
  20. package/src/getFriendsList.js +10 -18
  21. package/src/getMessage.js +48 -52
  22. package/src/getThreadHistory.js +59 -156
  23. package/src/getThreadHistoryDeprecated.js +15 -26
  24. package/src/getThreadInfoDeprecated.js +13 -25
  25. package/src/getThreadList.js +53 -112
  26. package/src/getThreadListDeprecated.js +12 -30
  27. package/src/getThreadPictures.js +13 -25
  28. package/src/getUserID.js +7 -8
  29. package/src/getUserInfo.js +9 -12
  30. package/src/handleFriendRequest.js +9 -10
  31. package/src/handleMessageRequest.js +10 -16
  32. package/src/httpGet.js +13 -18
  33. package/src/httpPost.js +13 -18
  34. package/src/httpPostFormData.js +9 -14
  35. package/src/listenMqtt.js +571 -1218
  36. package/src/logout.js +13 -18
  37. package/src/markAsDelivered.js +10 -16
  38. package/src/markAsRead.js +24 -36
  39. package/src/markAsReadAll.js +10 -14
  40. package/src/markAsSeen.js +11 -18
  41. package/src/muteThread.js +8 -12
  42. package/src/removeUserFromGroup.js +10 -33
  43. package/src/resolvePhotoUrl.js +6 -8
  44. package/src/searchForThread.js +8 -13
  45. package/src/sendMessage.js +78 -172
  46. package/src/sendTypingIndicator.js +14 -29
  47. package/src/setMessageReaction.js +8 -13
  48. package/src/setPostReaction.js +95 -97
  49. package/src/setTitle.js +12 -18
  50. package/src/threadColors.js +17 -17
  51. package/src/unfriend.js +9 -14
  52. package/src/unsendMessage.js +7 -7
  53. package/utils.js +19 -18
  54. package/src/changeAvt.js +0 -91
@@ -5,13 +5,11 @@ const log = require("npmlog");
5
5
 
6
6
  function createProfileUrl(url, username, id) {
7
7
  if (url) return url;
8
- return (
9
- "https://www.facebook.com/" + (username || utils.formatID(id.toString()))
10
- );
8
+ return "https://www.facebook.com/" + (username || utils.formatID(id.toString()));
11
9
  }
12
10
 
13
11
  function formatParticipants(participants) {
14
- return participants.edges.map(p => {
12
+ return participants.edges.map((p) => {
15
13
  p = p.node.messaging_actor;
16
14
  switch (p["__typename"]) {
17
15
  case "User":
@@ -23,7 +21,7 @@ function formatParticipants(participants) {
23
21
  gender: p.gender,
24
22
  url: p.url, // how about making it profileURL
25
23
  profilePicture: p.big_image_src.uri,
26
- username: p.username || null,
24
+ username: (p.username || null),
27
25
  // TODO: maybe better names for these?
28
26
  isViewerFriend: p.is_viewer_friend, // true/false
29
27
  isMessengerUser: p.is_messenger_user, // true/false
@@ -39,13 +37,13 @@ function formatParticipants(participants) {
39
37
  name: p.name,
40
38
  url: p.url,
41
39
  profilePicture: p.big_image_src.uri,
42
- username: p.username || null,
40
+ username: (p.username || null),
43
41
  // uhm... better names maybe?
44
42
  acceptsMessengerUserFeedback: p.accepts_messenger_user_feedback, // true/false
45
43
  isMessengerUser: p.is_messenger_user, // true/false
46
44
  isVerified: p.is_verified, // true/false
47
45
  isMessengerPlatformBot: p.is_messenger_platform_bot, // true/false
48
- isMessageBlockedByViewer: p.is_message_blocked_by_viewer // true/false
46
+ isMessageBlockedByViewer: p.is_message_blocked_by_viewer, // true/false
49
47
  };
50
48
  case "ReducedMessagingActor":
51
49
  case "UnavailableMessagingActor":
@@ -55,19 +53,15 @@ function formatParticipants(participants) {
55
53
  name: p.name,
56
54
  url: createProfileUrl(p.url, p.username, p.id), // in this case p.url is null all the time
57
55
  profilePicture: p.big_image_src.uri, // in this case it is default facebook photo, we could determine gender using it
58
- username: p.username || null, // maybe we could use it to generate profile URL?
59
- isMessageBlockedByViewer: p.is_message_blocked_by_viewer // true/false
56
+ username: (p.username || null), // maybe we could use it to generate profile URL?
57
+ isMessageBlockedByViewer: p.is_message_blocked_by_viewer, // true/false
60
58
  };
61
59
  default:
62
- log.warn(
63
- "getThreadList",
64
- "Found participant with unsupported typename. Please open an issue at https://github.com/Schmavery/facebook-chat-api/issues\n" +
65
- JSON.stringify(p, null, 2)
66
- );
60
+ log.warn("getThreadList", "Found participant with unsupported typename. Please open an issue at https://github.com/Schmavery/facebook-chat-api/issues\n" + JSON.stringify(p, null, 2));
67
61
  return {
68
62
  accountType: p["__typename"],
69
63
  userID: utils.formatID(p.id.toString()),
70
- name: p.name || `[unknown ${p["__typename"]}]` // probably it will always be something... but fallback to [unknown], just in case
64
+ name: p.name || `[unknown ${p["__typename"]}]`, // probably it will always be something... but fallback to [unknown], just in case
71
65
  };
72
66
  }
73
67
  });
@@ -84,40 +78,30 @@ function getThreadName(t) {
84
78
 
85
79
  for (let po of t.all_participants.edges) {
86
80
  let p = po.node;
87
- if (p.messaging_actor.id === t.thread_key.other_user_id)
88
- return p.messaging_actor.name;
81
+ if (p.messaging_actor.id === t.thread_key.other_user_id) return p.messaging_actor.name;
89
82
  }
90
83
  }
91
84
 
92
85
  function mapNicknames(customizationInfo) {
93
- return customizationInfo && customizationInfo.participant_customizations
94
- ? customizationInfo.participant_customizations.map(u => {
95
- return {
96
- userID: u.participant_id,
97
- nickname: u.nickname
98
- };
99
- })
100
- : [];
86
+ return (customizationInfo && customizationInfo.participant_customizations) ? customizationInfo.participant_customizations.map(u => {
87
+ return {
88
+ "userID": u.participant_id,
89
+ "nickname": u.nickname
90
+ };
91
+ }) : [];
101
92
  }
102
93
 
103
94
  function formatThreadList(data) {
104
95
  return data.map(t => {
105
- let lastMessageNode =
106
- t.last_message && t.last_message.nodes && t.last_message.nodes.length > 0
107
- ? t.last_message.nodes[0]
108
- : null;
96
+ let lastMessageNode = (t.last_message && t.last_message.nodes && t.last_message.nodes.length > 0) ? t.last_message.nodes[0] : null;
109
97
  return {
110
- threadID: t.thread_key
111
- ? utils.formatID(t.thread_key.thread_fbid || t.thread_key.other_user_id)
112
- : null, // shall never be null
98
+ threadID: t.thread_key ? utils.formatID(t.thread_key.thread_fbid || t.thread_key.other_user_id) : null, // shall never be null
113
99
  name: getThreadName(t),
114
100
  unreadCount: t.unread_count,
115
101
  messageCount: t.messages_count,
116
102
  imageSrc: t.image ? t.image.uri : null,
117
103
  emoji: t.customization_info ? t.customization_info.emoji : null,
118
- color: formatColor(
119
- t.customization_info ? t.customization_info.outgoing_bubble_color : null
120
- ),
104
+ color: formatColor(t.customization_info ? t.customization_info.outgoing_bubble_color : null),
121
105
  nicknames: mapNicknames(t.customization_info),
122
106
  muteUntil: t.mute_until,
123
107
  participants: formatParticipants(t.all_participants),
@@ -128,9 +112,7 @@ function formatThreadList(data) {
128
112
  // isPinProtected: t.is_pin_protected, // feature from future? always false (2018-04-04)
129
113
  customizationEnabled: t.customization_enabled, // false for ONE_TO_ONE with Page or ReducedMessagingActor
130
114
  participantAddMode: t.participant_add_mode_as_string, // "ADD" if "GROUP" and null if "ONE_TO_ONE"
131
- montageThread: t.montage_thread
132
- ? Buffer.from(t.montage_thread.id, "base64").toString()
133
- : null, // base64 encoded string "message_thread:0000000000000000"
115
+ montageThread: t.montage_thread ? Buffer.from(t.montage_thread.id, "base64").toString() : null, // base64 encoded string "message_thread:0000000000000000"
134
116
  // it is not userID nor any other ID known to me...
135
117
  // can somebody inspect it? where is it used?
136
118
  // probably Messenger Day uses it
@@ -142,109 +124,74 @@ function formatThreadList(data) {
142
124
  // isCanonicalUser: t.is_canonical_neo_user, // is it always false?
143
125
  // TODO: how about putting snippet in another object? current implementation does not handle every possibile message type etc.
144
126
  snippet: lastMessageNode ? lastMessageNode.snippet : null,
145
- snippetAttachments: lastMessageNode
146
- ? lastMessageNode.extensible_attachment
147
- : null, // TODO: not sure if it works
148
- snippetSender: lastMessageNode
149
- ? utils.formatID(
150
- (lastMessageNode.message_sender.messaging_actor.id || "").toString()
151
- )
152
- : null,
153
- lastMessageTimestamp: lastMessageNode
154
- ? lastMessageNode.timestamp_precise
127
+ snippetAttachments: lastMessageNode ? lastMessageNode.extensible_attachment : null, // TODO: not sure if it works
128
+ snippetSender: lastMessageNode ? utils.formatID((lastMessageNode.message_sender.messaging_actor.id || "").toString()) : null,
129
+ lastMessageTimestamp: lastMessageNode ? lastMessageNode.timestamp_precise : null, // timestamp in miliseconds
130
+ lastReadTimestamp: (t.last_read_receipt && t.last_read_receipt.nodes.length > 0)
131
+ ? (t.last_read_receipt.nodes[0] ? t.last_read_receipt.nodes[0].timestamp_precise : null)
155
132
  : null, // timestamp in miliseconds
156
- lastReadTimestamp:
157
- t.last_read_receipt && t.last_read_receipt.nodes.length > 0
158
- ? t.last_read_receipt.nodes[0]
159
- ? t.last_read_receipt.nodes[0].timestamp_precise
160
- : null
161
- : null, // timestamp in miliseconds
162
133
  cannotReplyReason: t.cannot_reply_reason, // TODO: inspect possible values
163
134
  approvalMode: Boolean(t.approval_mode),
164
135
 
165
136
  // @Legacy
166
- participantIDs: formatParticipants(t.all_participants).map(
167
- participant => participant.userID
168
- ),
137
+ participantIDs: formatParticipants(t.all_participants).map(participant => participant.userID),
169
138
  threadType: t.thread_type === "GROUP" ? 2 : 1 // "GROUP" or "ONE_TO_ONE"
170
139
  };
171
140
  });
172
141
  }
173
142
 
174
- module.exports = function(defaultFuncs, api, ctx) {
143
+ module.exports = function (defaultFuncs, api, ctx) {
175
144
  return function getThreadList(limit, timestamp, tags, callback) {
176
- if (
177
- !callback &&
178
- (utils.getType(tags) === "Function" ||
179
- utils.getType(tags) === "AsyncFunction")
180
- ) {
145
+ if (!callback && (utils.getType(tags) === "Function" || utils.getType(tags) === "AsyncFunction")) {
181
146
  callback = tags;
182
147
  tags = [""];
183
148
  }
184
- if (
185
- utils.getType(limit) !== "Number" ||
186
- !Number.isInteger(limit) ||
187
- limit <= 0
188
- )
189
- throw { error: "getThreadList: limit must be a positive integer" };
149
+ if (utils.getType(limit) !== "Number" || !Number.isInteger(limit) || limit <= 0) throw { error: "getThreadList: limit must be a positive integer" };
190
150
 
191
- if (
192
- utils.getType(timestamp) !== "Null" &&
193
- (utils.getType(timestamp) !== "Number" || !Number.isInteger(timestamp))
194
- )
195
- throw { error: "getThreadList: timestamp must be an integer or null" };
151
+ if (utils.getType(timestamp) !== "Null" && (utils.getType(timestamp) !== "Number" || !Number.isInteger(timestamp))) throw { error: "getThreadList: timestamp must be an integer or null" };
196
152
 
197
153
  if (utils.getType(tags) === "String") tags = [tags];
198
- if (utils.getType(tags) !== "Array")
199
- throw { error: "getThreadList: tags must be an array" };
154
+ if (utils.getType(tags) !== "Array") throw { error: "getThreadList: tags must be an array" };
200
155
 
201
- var resolveFunc = function() {};
202
- var rejectFunc = function() {};
203
- var returnPromise = new Promise(function(resolve, reject) {
156
+ var resolveFunc = function () { };
157
+ var rejectFunc = function () { };
158
+ var returnPromise = new Promise(function (resolve, reject) {
204
159
  resolveFunc = resolve;
205
160
  rejectFunc = reject;
206
161
  });
207
162
 
208
- if (
209
- utils.getType(callback) !== "Function" &&
210
- utils.getType(callback) !== "AsyncFunction"
211
- ) {
212
- callback = function(err, data) {
163
+ if (utils.getType(callback) !== "Function" && utils.getType(callback) !== "AsyncFunction") {
164
+ callback = function (err, data) {
213
165
  if (err) return rejectFunc(err);
214
166
  resolveFunc(data);
215
167
  };
216
168
  }
217
169
 
218
170
  const form = {
219
- av: ctx.globalOptions.pageID,
220
- queries: JSON.stringify({
221
- o0: {
171
+ "av": ctx.globalOptions.pageID,
172
+ "queries": JSON.stringify({
173
+ "o0": {
222
174
  // This doc_id was valid on 2020-07-20
223
- doc_id: "3336396659757871",
224
- query_params: {
225
- limit: limit + (timestamp ? 1 : 0),
226
- before: timestamp,
227
- tags: tags,
228
- includeDeliveryReceipts: true,
229
- includeSeqID: false
175
+ "doc_id": "3336396659757871",
176
+ "query_params": {
177
+ "limit": limit + (timestamp ? 1 : 0),
178
+ "before": timestamp,
179
+ "tags": tags,
180
+ "includeDeliveryReceipts": true,
181
+ "includeSeqID": false
230
182
  }
231
183
  }
232
184
  }),
233
- batch_name: "MessengerGraphQLThreadlistFetcher"
185
+ "batch_name": "MessengerGraphQLThreadlistFetcher"
234
186
  };
235
187
 
236
188
  defaultFuncs
237
189
  .post("https://www.facebook.com/api/graphqlbatch/", ctx.jar, form)
238
190
  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
239
- .then(resData => {
240
- if (resData[resData.length - 1].error_results > 0)
241
- throw resData[0].o0.errors;
191
+ .then((resData) => {
192
+ if (resData[resData.length - 1].error_results > 0) throw resData[0].o0.errors;
242
193
 
243
- if (resData[resData.length - 1].successful_results === 0)
244
- throw {
245
- error: "getThreadList: there was no successful_results",
246
- res: resData
247
- };
194
+ if (resData[resData.length - 1].successful_results === 0) throw { error: "getThreadList: there was no successful_results", res: resData };
248
195
 
249
196
  // When we ask for threads using timestamp from the previous request,
250
197
  // we are getting the last thread repeated as the first thread in this response.
@@ -254,16 +201,10 @@ module.exports = function(defaultFuncs, api, ctx) {
254
201
  // but after removing the duplicated one, it is again 10
255
202
  if (timestamp) resData[0].o0.data.viewer.message_threads.nodes.shift();
256
203
 
257
- callback(
258
- null,
259
- formatThreadList(resData[0].o0.data.viewer.message_threads.nodes)
260
- );
204
+ callback(null, formatThreadList(resData[0].o0.data.viewer.message_threads.nodes));
261
205
  })
262
- .catch(err => {
263
- log.error(
264
- "getThreadList",
265
- "Lỗi: getThreadList Có Thể Do Bạn Spam Quá Nhiều, Hãy Thử Lại !"
266
- );
206
+ .catch((err) => {
207
+ log.error("getThreadList", "Lỗi: getThreadList Có Thể Do Bạn Spam Quá Nhiều, Hãy Thử Lại !");
267
208
  return callback(err);
268
209
  });
269
210
 
@@ -3,31 +3,21 @@
3
3
  var utils = require("../utils");
4
4
  var log = require("npmlog");
5
5
 
6
- module.exports = function(defaultFuncs, api, ctx) {
6
+ module.exports = function (defaultFuncs, api, ctx) {
7
7
  return function getThreadList(start, end, type, callback) {
8
8
  if (utils.getType(callback) === "Undefined") {
9
- if (utils.getType(end) !== "Number")
10
- throw { error: "Please pass a number as a second argument." };
11
- else if (
12
- utils.getType(type) === "Function" ||
13
- utils.getType(type) === "AsyncFunction"
14
- ) {
9
+ if (utils.getType(end) !== "Number") throw { error: "Please pass a number as a second argument." };
10
+ else if (utils.getType(type) === "Function" || utils.getType(type) === "AsyncFunction") {
15
11
  callback = type;
16
12
  type = "inbox"; //default to inbox
17
- } else if (utils.getType(type) !== "String")
18
- throw {
19
- error:
20
- "Please pass a String as a third argument. Your options are: inbox, pending, and archived"
21
- };
13
+ }
14
+ else if (utils.getType(type) !== "String") throw { error: "Please pass a String as a third argument. Your options are: inbox, pending, and archived" };
22
15
  else throw { error: "getThreadList: need callback" };
23
16
  }
24
17
 
25
18
  if (type === "archived") type = "action:archived";
26
- else if (type !== "inbox" && type !== "pending" && type !== "other")
27
- throw {
28
- error:
29
- "type can only be one of the following: inbox, pending, archived, other"
30
- };
19
+ else if (type !== "inbox" && type !== "pending" && type !== "other") throw { error: "type can only be one of the following: inbox, pending, archived, other" };
20
+
31
21
 
32
22
  if (end <= start) end = start + 20;
33
23
 
@@ -38,25 +28,17 @@ module.exports = function(defaultFuncs, api, ctx) {
38
28
  form[type + "[offset]"] = start;
39
29
  form[type + "[limit]"] = end - start;
40
30
 
41
- if (ctx.globalOptions.pageID)
42
- form.request_user_id = ctx.globalOptions.pageID;
31
+ if (ctx.globalOptions.pageID) form.request_user_id = ctx.globalOptions.pageID;
43
32
 
44
33
  defaultFuncs
45
- .post(
46
- "https://www.facebook.com/ajax/mercury/threadlist_info.php",
47
- ctx.jar,
48
- form
49
- )
34
+ .post("https://www.facebook.com/ajax/mercury/threadlist_info.php", ctx.jar, form)
50
35
  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
51
- .then(function(resData) {
36
+ .then(function (resData) {
52
37
  if (resData.error) throw resData;
53
38
  log.verbose("getThreadList", JSON.stringify(resData.payload.threads));
54
- return callback(
55
- null,
56
- (resData.payload.threads || []).map(utils.formatThread)
57
- );
39
+ return callback(null, (resData.payload.threads || []).map(utils.formatThread));
58
40
  })
59
- .catch(function(err) {
41
+ .catch(function (err) {
60
42
  log.error("getThreadList", err);
61
43
  return callback(err);
62
44
  });
@@ -3,17 +3,17 @@
3
3
  var utils = require("../utils");
4
4
  var log = require("npmlog");
5
5
 
6
- module.exports = function(defaultFuncs, api, ctx) {
6
+ module.exports = function (defaultFuncs, api, ctx) {
7
7
  return function getThreadPictures(threadID, offset, limit, callback) {
8
- var resolveFunc = function() {};
9
- var rejectFunc = function() {};
10
- var returnPromise = new Promise(function(resolve, reject) {
8
+ var resolveFunc = function () { };
9
+ var rejectFunc = function () { };
10
+ var 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) {
16
+ callback = function (err, data) {
17
17
  if (err) return rejectFunc(err);
18
18
  resolveFunc(data);
19
19
  };
@@ -26,43 +26,31 @@ module.exports = function(defaultFuncs, api, ctx) {
26
26
  };
27
27
 
28
28
  defaultFuncs
29
- .post(
30
- "https://www.facebook.com/ajax/messaging/attachments/sharedphotos.php",
31
- ctx.jar,
32
- form
33
- )
29
+ .post("https://www.facebook.com/ajax/messaging/attachments/sharedphotos.php", ctx.jar, form)
34
30
  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
35
- .then(function(resData) {
31
+ .then(function (resData) {
36
32
  if (resData.error) throw resData;
37
33
  return Promise.all(
38
- resData.payload.imagesData.map(function(image) {
34
+ resData.payload.imagesData.map(function (image) {
39
35
  form = {
40
36
  thread_id: threadID,
41
37
  image_id: image.fbid
42
38
  };
43
39
  return defaultFuncs
44
- .post(
45
- "https://www.facebook.com/ajax/messaging/attachments/sharedphotos.php",
46
- ctx.jar,
47
- form
48
- )
40
+ .post("https://www.facebook.com/ajax/messaging/attachments/sharedphotos.php", ctx.jar, form)
49
41
  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
50
- .then(function(resData) {
42
+ .then(function (resData) {
51
43
  if (resData.error) throw resData;
52
44
  // the response is pretty messy
53
- var queryThreadID =
54
- resData.jsmods.require[0][3][1].query_metadata.query_path[0]
55
- .message_thread;
56
- var imageData =
57
- resData.jsmods.require[0][3][1].query_results[queryThreadID]
58
- .message_images.edges[0].node.image2;
45
+ var queryThreadID = resData.jsmods.require[0][3][1].query_metadata.query_path[0].message_thread;
46
+ var imageData = resData.jsmods.require[0][3][1].query_results[queryThreadID].message_images.edges[0].node.image2;
59
47
  return imageData;
60
48
  });
61
49
  })
62
50
  );
63
51
  })
64
52
  .then(resData => callback(null, resData))
65
- .catch(function(err) {
53
+ .catch(function (err) {
66
54
  log.error("Error in getThreadPictures", err);
67
55
  callback(err);
68
56
  });
package/src/getUserID.js CHANGED
@@ -17,17 +17,17 @@ function formatData(data) {
17
17
  };
18
18
  }
19
19
 
20
- module.exports = function(defaultFuncs, api, ctx) {
20
+ module.exports = function (defaultFuncs, api, ctx) {
21
21
  return function getUserID(name, callback) {
22
- var resolveFunc = function() {};
23
- var rejectFunc = function() {};
24
- var returnPromise = new Promise(function(resolve, reject) {
22
+ var resolveFunc = function () { };
23
+ var rejectFunc = function () { };
24
+ var returnPromise = new Promise(function (resolve, reject) {
25
25
  resolveFunc = resolve;
26
26
  rejectFunc = reject;
27
27
  });
28
28
 
29
29
  if (!callback) {
30
- callback = function(err, data) {
30
+ callback = function (err, data) {
31
31
  if (err) return rejectFunc(err);
32
32
  resolveFunc(data);
33
33
  };
@@ -45,16 +45,15 @@ module.exports = function(defaultFuncs, api, ctx) {
45
45
  defaultFuncs
46
46
  .get("https://www.facebook.com/ajax/typeahead/search.php", ctx.jar, form)
47
47
  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
48
- .then(function(resData) {
48
+ .then(function (resData) {
49
49
  if (resData.error) throw resData;
50
50
 
51
51
  var data = resData.payload.entries;
52
52
 
53
53
  callback(null, data.map(formatData));
54
54
  })
55
- .catch(function(err) {
55
+ .catch(function (err) {
56
56
  log.error("getUserID", err);
57
- console.log(err);
58
57
  return callback(err);
59
58
  });
60
59
 
@@ -27,17 +27,17 @@ function formatData(data) {
27
27
  return retObj;
28
28
  }
29
29
 
30
- module.exports = function(defaultFuncs, api, ctx) {
30
+ module.exports = function (defaultFuncs, api, ctx) {
31
31
  return function getUserInfo(id, callback) {
32
- var resolveFunc = function() {};
33
- var rejectFunc = function() {};
34
- var returnPromise = new Promise(function(resolve, reject) {
32
+ var resolveFunc = function () { };
33
+ var rejectFunc = function () { };
34
+ var returnPromise = new Promise(function (resolve, reject) {
35
35
  resolveFunc = resolve;
36
36
  rejectFunc = reject;
37
37
  });
38
38
 
39
39
  if (!callback) {
40
- callback = function(err, userInfo) {
40
+ callback = function (err, userInfo) {
41
41
  if (err) return rejectFunc(err);
42
42
  resolveFunc(userInfo);
43
43
  };
@@ -46,21 +46,18 @@ module.exports = function(defaultFuncs, api, ctx) {
46
46
  if (utils.getType(id) !== "Array") id = [id];
47
47
 
48
48
  var form = {};
49
- id.map(function(v, i) {
49
+ id.map(function (v, i) {
50
50
  form["ids[" + i + "]"] = v;
51
51
  });
52
52
  defaultFuncs
53
53
  .post("https://www.facebook.com/chat/user_info/", ctx.jar, form)
54
54
  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
55
- .then(function(resData) {
55
+ .then(function (resData) {
56
56
  if (resData.error) throw resData;
57
57
  return callback(null, formatData(resData.payload.profiles));
58
58
  })
59
- .catch(function(err) {
60
- log.error(
61
- "getUserInfo",
62
- "Lỗi: getUserInfo Có Thể Do Bạn Spam Quá Nhiều !,Hãy Thử Lại !"
63
- );
59
+ .catch(function (err) {
60
+ log.error("getUserInfo", "Lỗi: getUserInfo Có Thể Do Bạn Spam Quá Nhiều !,Hãy Thử Lại !");
64
61
  return callback(err);
65
62
  });
66
63
  return returnPromise;
@@ -3,20 +3,19 @@
3
3
  var utils = require("../utils");
4
4
  var log = require("npmlog");
5
5
 
6
- module.exports = function(defaultFuncs, api, ctx) {
6
+ module.exports = function (defaultFuncs, api, ctx) {
7
7
  return function handleFriendRequest(userID, accept, callback) {
8
- if (utils.getType(accept) !== "Boolean")
9
- throw { error: "Please pass a boolean as a second argument." };
8
+ if (utils.getType(accept) !== "Boolean") throw { error: "Please pass a boolean as a second argument." };
10
9
 
11
- var resolveFunc = function() {};
12
- var rejectFunc = function() {};
13
- var returnPromise = new Promise(function(resolve, reject) {
10
+ var resolveFunc = function () { };
11
+ var rejectFunc = function () { };
12
+ var returnPromise = new Promise(function (resolve, reject) {
14
13
  resolveFunc = resolve;
15
14
  rejectFunc = reject;
16
15
  });
17
16
 
18
17
  if (!callback) {
19
- callback = function(err, data) {
18
+ callback = function (err, data) {
20
19
  if (err) return rejectFunc(err);
21
20
  resolveFunc(data);
22
21
  };
@@ -27,17 +26,17 @@ module.exports = function(defaultFuncs, api, ctx) {
27
26
  "frefs[0]": "jwl",
28
27
  floc: "friend_center_requests",
29
28
  ref: "/reqs.php",
30
- action: accept ? "confirm" : "reject"
29
+ action: (accept ? "confirm" : "reject")
31
30
  };
32
31
 
33
32
  defaultFuncs
34
33
  .post("https://www.facebook.com/requests/friends/ajax/", ctx.jar, form)
35
34
  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
36
- .then(function(resData) {
35
+ .then(function (resData) {
37
36
  if (resData.payload.err) throw { err: resData.payload.err };
38
37
  return callback();
39
38
  })
40
- .catch(function(err) {
39
+ .catch(function (err) {
41
40
  log.error("handleFriendRequest", err);
42
41
  return callback(err);
43
42
  });
@@ -3,20 +3,19 @@
3
3
  var utils = require("../utils");
4
4
  var log = require("npmlog");
5
5
 
6
- module.exports = function(defaultFuncs, api, ctx) {
6
+ module.exports = function (defaultFuncs, api, ctx) {
7
7
  return function handleMessageRequest(threadID, accept, callback) {
8
- if (utils.getType(accept) !== "Boolean")
9
- throw { error: "Please pass a boolean as a second argument." };
8
+ if (utils.getType(accept) !== "Boolean") throw { error: "Please pass a boolean as a second argument." };
10
9
 
11
- var resolveFunc = function() {};
12
- var rejectFunc = function() {};
13
- var returnPromise = new Promise(function(resolve, reject) {
10
+ var resolveFunc = function () { };
11
+ var rejectFunc = function () { };
12
+ var returnPromise = new Promise(function (resolve, reject) {
14
13
  resolveFunc = resolve;
15
14
  rejectFunc = reject;
16
15
  });
17
16
 
18
17
  if (!callback) {
19
- callback = function(err, data) {
18
+ callback = function (err, data) {
20
19
  if (err) return rejectFunc(err);
21
20
  resolveFunc(data);
22
21
  };
@@ -30,22 +29,17 @@ module.exports = function(defaultFuncs, api, ctx) {
30
29
 
31
30
  var messageBox = accept ? "inbox" : "other";
32
31
 
33
- for (var i = 0; i < threadID.length; i++)
34
- form[messageBox + "[" + i + "]"] = threadID[i];
32
+ for (var i = 0; i < threadID.length; i++) form[messageBox + "[" + i + "]"] = threadID[i];
35
33
 
36
34
  defaultFuncs
37
- .post(
38
- "https://www.facebook.com/ajax/mercury/move_thread.php",
39
- ctx.jar,
40
- form
41
- )
35
+ .post("https://www.facebook.com/ajax/mercury/move_thread.php", ctx.jar, form)
42
36
  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
43
- .then(function(resData) {
37
+ .then(function (resData) {
44
38
  if (resData.error) throw resData;
45
39
 
46
40
  return callback();
47
41
  })
48
- .catch(function(err) {
42
+ .catch(function (err) {
49
43
  log.error("handleMessageRequest", err);
50
44
  return callback(err);
51
45
  });