stfca 1.0.2 → 1.0.4

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 (142) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +45 -2
  3. package/checkUpdate.js +109 -0
  4. package/index.js +460 -1
  5. package/package.json +22 -46
  6. package/src/OldMessage.js +234 -0
  7. package/src/{api/action/addExternalModule.js → addExternalModule.js} +25 -25
  8. package/src/addUserToGroup.js +115 -0
  9. package/src/changeAdminStatus.js +103 -0
  10. package/src/changeArchivedStatus.js +55 -0
  11. package/src/{api/action/changeAvatar.js → changeAvatar.js} +136 -137
  12. package/src/changeAvatarV2.js +86 -0
  13. package/src/changeAvt.js +85 -0
  14. package/src/{api/action/changeBio.js → changeBio.js} +76 -75
  15. package/src/{api/messaging/changeBlockedStatus.js → changeBlockedStatus.js} +49 -48
  16. package/src/changeBlockedStatusMqtt.js +80 -0
  17. package/src/changeCover.js +72 -0
  18. package/src/changeGroupImage.js +135 -0
  19. package/src/changeName.js +79 -0
  20. package/src/changeNickname.js +59 -0
  21. package/src/changeThreadColor.js +65 -0
  22. package/src/changeThreadEmoji.js +55 -0
  23. package/src/changeUsername.js +59 -0
  24. package/src/createCommentPost.js +230 -0
  25. package/src/{api/messaging/createNewGroup.js → createNewGroup.js} +88 -88
  26. package/src/createPoll.js +71 -0
  27. package/src/createPost.js +276 -0
  28. package/src/{api/messaging/deleteMessage.js → deleteMessage.js} +56 -56
  29. package/src/{api/messaging/deleteThread.js → deleteThread.js} +56 -56
  30. package/src/editMessage.js +68 -0
  31. package/src/editMessageOld.js +67 -0
  32. package/src/follow.js +74 -0
  33. package/src/forwardAttachment.js +60 -0
  34. package/src/getAccess.js +112 -0
  35. package/src/getAvatarUser.js +78 -0
  36. package/src/{api/action/getCurrentUserID.js → getCurrentUserID.js} +7 -7
  37. package/src/{api/messaging/getEmojiUrl.js → getEmojiUrl.js} +2 -2
  38. package/src/{api/messaging/getFriendsList.js → getFriendsList.js} +83 -82
  39. package/src/{api/messaging/getMessage.js → getMessage.js} +847 -829
  40. package/src/getRegion.js +7 -0
  41. package/src/{api/threads/getThreadHistory.js → getThreadHistory.js} +680 -664
  42. package/src/getThreadHistoryDeprecated.js +71 -0
  43. package/src/getThreadInfo.js +232 -0
  44. package/src/getThreadInfoDeprecated.js +56 -0
  45. package/src/getThreadList.js +213 -0
  46. package/src/getThreadListDeprecated.js +46 -0
  47. package/src/getThreadPictures.js +59 -0
  48. package/src/getUID.js +119 -0
  49. package/src/{api/users/getUserID.js → getUserID.js} +61 -65
  50. package/src/getUserInfo.js +66 -0
  51. package/src/handleFriendRequest.js +46 -0
  52. package/src/handleMessageRequest.js +47 -0
  53. package/src/httpGet.js +49 -0
  54. package/src/httpPost.js +48 -0
  55. package/src/listenMqtt.js +864 -0
  56. package/src/logout.js +75 -0
  57. package/src/markAsDelivered.js +47 -0
  58. package/src/markAsRead.js +70 -0
  59. package/src/markAsReadAll.js +40 -0
  60. package/src/markAsSeen.js +48 -0
  61. package/src/muteThread.js +45 -0
  62. package/src/refreshFb_dtsg.js +89 -0
  63. package/src/removeUserFromGroup.js +79 -0
  64. package/src/{api/messaging/resolvePhotoUrl.js → resolvePhotoUrl.js} +45 -43
  65. package/src/{api/messaging/searchForThread.js → searchForThread.js} +53 -52
  66. package/src/searchStickers.js +53 -0
  67. package/src/sendMessage.js +234 -0
  68. package/src/{api/messaging/sendMessageMqtt.js → sendMessageMqtt.js} +322 -323
  69. package/src/sendTypingIndicator.js +101 -0
  70. package/src/sendTypingIndicatorV2.js +28 -0
  71. package/src/setMessageReaction.js +122 -0
  72. package/src/setMessageReactionMqtt.js +62 -0
  73. package/src/{api/action/setPostReaction.js → setPostReaction.js} +112 -106
  74. package/src/setStoryReaction.js +64 -0
  75. package/src/setTitle.js +90 -0
  76. package/src/shareContact.js +110 -0
  77. package/src/shareLink.js +59 -0
  78. package/src/stopListenMqtt.js +23 -0
  79. package/src/{api/messaging/threadColors.js → threadColors.js} +131 -128
  80. package/src/{api/action/unfriend.js → unfriend.js} +52 -54
  81. package/src/unsendMessage.js +45 -0
  82. package/src/{api/messaging/uploadAttachment.js → uploadAttachment.js} +93 -95
  83. package/utils.js +2876 -0
  84. package/LICENSE-MIT +0 -4
  85. package/index.d.ts +0 -615
  86. package/module/config.js +0 -33
  87. package/module/login.js +0 -48
  88. package/module/loginHelper.js +0 -722
  89. package/module/options.js +0 -44
  90. package/src/api/action/handleFriendRequest.js +0 -57
  91. package/src/api/action/logout.js +0 -76
  92. package/src/api/action/refreshFb_dtsg.js +0 -71
  93. package/src/api/http/httpGet.js +0 -46
  94. package/src/api/http/httpPost.js +0 -52
  95. package/src/api/http/postFormData.js +0 -47
  96. package/src/api/messaging/addUserToGroup.js +0 -68
  97. package/src/api/messaging/changeAdminStatus.js +0 -122
  98. package/src/api/messaging/changeArchivedStatus.js +0 -55
  99. package/src/api/messaging/changeGroupImage.js +0 -90
  100. package/src/api/messaging/changeNickname.js +0 -70
  101. package/src/api/messaging/changeThreadColor.js +0 -79
  102. package/src/api/messaging/changeThreadEmoji.js +0 -106
  103. package/src/api/messaging/createPoll.js +0 -43
  104. package/src/api/messaging/editMessage.js +0 -68
  105. package/src/api/messaging/forwardAttachment.js +0 -51
  106. package/src/api/messaging/handleMessageRequest.js +0 -65
  107. package/src/api/messaging/markAsDelivered.js +0 -57
  108. package/src/api/messaging/markAsRead.js +0 -88
  109. package/src/api/messaging/markAsReadAll.js +0 -49
  110. package/src/api/messaging/markAsSeen.js +0 -61
  111. package/src/api/messaging/muteThread.js +0 -50
  112. package/src/api/messaging/removeUserFromGroup.js +0 -105
  113. package/src/api/messaging/sendMessage.js +0 -379
  114. package/src/api/messaging/sendTypingIndicator.js +0 -67
  115. package/src/api/messaging/setMessageReaction.js +0 -75
  116. package/src/api/messaging/setTitle.js +0 -119
  117. package/src/api/messaging/shareContact.js +0 -49
  118. package/src/api/messaging/unsendMessage.js +0 -81
  119. package/src/api/socket/core/connectMqtt.js +0 -179
  120. package/src/api/socket/core/getSeqID.js +0 -25
  121. package/src/api/socket/core/getTaskResponseData.js +0 -22
  122. package/src/api/socket/core/markDelivery.js +0 -12
  123. package/src/api/socket/core/parseDelta.js +0 -351
  124. package/src/api/socket/detail/buildStream.js +0 -208
  125. package/src/api/socket/detail/constants.js +0 -24
  126. package/src/api/socket/listenMqtt.js +0 -133
  127. package/src/api/threads/getThreadInfo.js +0 -358
  128. package/src/api/threads/getThreadList.js +0 -248
  129. package/src/api/threads/getThreadPictures.js +0 -78
  130. package/src/api/users/getUserInfo.js +0 -319
  131. package/src/api/users/getUserInfoV2.js +0 -133
  132. package/src/core/sendReqMqtt.js +0 -63
  133. package/src/database/models/index.js +0 -49
  134. package/src/database/models/thread.js +0 -31
  135. package/src/database/models/user.js +0 -32
  136. package/src/database/threadData.js +0 -98
  137. package/src/database/userData.js +0 -89
  138. package/src/utils/client.js +0 -214
  139. package/src/utils/constants.js +0 -23
  140. package/src/utils/format.js +0 -1111
  141. package/src/utils/headers.js +0 -41
  142. package/src/utils/request.js +0 -215
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+
3
+ const utils = require("../utils");
4
+ // @NethWs3Dev
5
+
6
+ module.exports = function (defaultFuncs, api, ctx) {
7
+ function makeTypingIndicator(typ, threadID, callback, isGroup) {
8
+ const form = {
9
+ typ: +typ,
10
+ to: "",
11
+ source: "mercury-chat",
12
+ thread: threadID,
13
+ };
14
+
15
+ // Check if thread is a single person chat or a group chat
16
+ // More info on this is in api.sendMessage
17
+ if (utils.getType(isGroup) == "Boolean") {
18
+ if (!isGroup) {
19
+ form.to = threadID;
20
+ }
21
+ defaultFuncs
22
+ .post("https://www.facebook.com/ajax/messaging/typ.php", ctx.jar, form)
23
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
24
+ .then(function (resData) {
25
+ if (resData.error) {
26
+ throw resData;
27
+ }
28
+
29
+ return callback();
30
+ })
31
+ .catch(function (err) {
32
+ console.error("sendTypingIndicator", err);
33
+ return callback(err);
34
+ });
35
+ } else {
36
+ api.getUserInfo(threadID, function (err, res) {
37
+ if (err) {
38
+ return callback(err);
39
+ }
40
+
41
+ // If id is single person chat
42
+ if (Object.keys(res).length > 0) {
43
+ form.to = threadID;
44
+ }
45
+
46
+ defaultFuncs
47
+ .post(
48
+ "https://www.facebook.com/ajax/messaging/typ.php",
49
+ ctx.jar,
50
+ form,
51
+ )
52
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
53
+ .then(function (resData) {
54
+ if (resData.error) {
55
+ throw resData;
56
+ }
57
+
58
+ return callback();
59
+ })
60
+ .catch(function (err) {
61
+ console.error("sendTypingIndicator", err);
62
+ return callback(err);
63
+ });
64
+ });
65
+ }
66
+ }
67
+
68
+ return function sendTypingIndicator(threadID, callback, isGroup) {
69
+ if (
70
+ utils.getType(callback) !== "Function" &&
71
+ utils.getType(callback) !== "AsyncFunction"
72
+ ) {
73
+ if (callback) {
74
+ console.warn(
75
+ "sendTypingIndicator",
76
+ "callback is not a function - ignoring.",
77
+ );
78
+ }
79
+ callback = () => {};
80
+ }
81
+
82
+ makeTypingIndicator(true, threadID, callback, isGroup);
83
+
84
+ return function end(cb) {
85
+ if (
86
+ utils.getType(cb) !== "Function" &&
87
+ utils.getType(cb) !== "AsyncFunction"
88
+ ) {
89
+ if (cb) {
90
+ console.warn(
91
+ "sendTypingIndicator",
92
+ "callback is not a function - ignoring.",
93
+ );
94
+ }
95
+ cb = () => {};
96
+ }
97
+
98
+ makeTypingIndicator(false, threadID, cb, isGroup);
99
+ };
100
+ };
101
+ };
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+
4
+
5
+ var utils = require("../utils");
6
+ // @NethWs3Dev
7
+
8
+ module.exports = function (defaultFuncs, api, ctx) {
9
+ return async function sendTypingIndicatorV2(sendTyping,threadID, callback) {
10
+ let count_req = 0
11
+ var wsContent = {
12
+ app_id: 2220391788200892,
13
+ payload: JSON.stringify({
14
+ label: 3,
15
+ payload: JSON.stringify({
16
+ thread_key: threadID.toString(),
17
+ is_group_thread: +(threadID.toString().length >= 16),
18
+ is_typing: +sendTyping,
19
+ attribution: 0
20
+ }),
21
+ version: 5849951561777440
22
+ }),
23
+ request_id: ++count_req,
24
+ type: 4
25
+ };
26
+ await new Promise((resolve, reject) => mqttClient.publish('/ls_req', JSON.stringify(wsContent), {}, (err, _packet) => err ? reject(err) : resolve()));
27
+ };
28
+ };
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+
3
+ const utils = require("../utils");
4
+ // @NethWs3Dev
5
+
6
+ module.exports = function (defaultFuncs, api, ctx) {
7
+ return function setMessageReaction(
8
+ reaction,
9
+ messageID,
10
+ callback,
11
+ forceCustomReaction,
12
+ ) {
13
+ let resolveFunc = function () {};
14
+ let rejectFunc = function () {};
15
+ const returnPromise = new Promise(function (resolve, reject) {
16
+ resolveFunc = resolve;
17
+ rejectFunc = reject;
18
+ });
19
+
20
+ if (!callback) {
21
+ callback = function (err, friendList) {
22
+ if (err) {
23
+ return rejectFunc(err);
24
+ }
25
+ resolveFunc(friendList);
26
+ };
27
+ }
28
+
29
+ switch (reaction) {
30
+ case "\uD83D\uDE0D": //:heart_eyes:
31
+ case "\uD83D\uDE06": //:laughing:
32
+ case "\uD83D\uDE2E": //:open_mouth:
33
+ case "\uD83D\uDE22": //:cry:
34
+ case "\uD83D\uDE20": //:angry:
35
+ case "\uD83D\uDC4D": //:thumbsup:
36
+ case "\uD83D\uDC4E": //:thumbsdown:
37
+ case "\u2764": //:heart:
38
+ case "\uD83D\uDC97": //:glowingheart:
39
+ case "":
40
+ //valid
41
+ break;
42
+ case ":heart_eyes:":
43
+ case ":love:":
44
+ reaction = "\uD83D\uDE0D";
45
+ break;
46
+ case ":laughing:":
47
+ case ":haha:":
48
+ reaction = "\uD83D\uDE06";
49
+ break;
50
+ case ":open_mouth:":
51
+ case ":wow:":
52
+ reaction = "\uD83D\uDE2E";
53
+ break;
54
+ case ":cry:":
55
+ case ":sad:":
56
+ reaction = "\uD83D\uDE22";
57
+ break;
58
+ case ":angry:":
59
+ reaction = "\uD83D\uDE20";
60
+ break;
61
+ case ":thumbsup:":
62
+ case ":like:":
63
+ reaction = "\uD83D\uDC4D";
64
+ break;
65
+ case ":thumbsdown:":
66
+ case ":dislike:":
67
+ reaction = "\uD83D\uDC4E";
68
+ break;
69
+ case ":heart:":
70
+ reaction = "\u2764";
71
+ break;
72
+ case ":glowingheart:":
73
+ reaction = "\uD83D\uDC97";
74
+ break;
75
+ default:
76
+ if (forceCustomReaction) {
77
+ break;
78
+ }
79
+ return callback({ error: "Reaction is not a valid emoji." });
80
+ }
81
+
82
+ const variables = {
83
+ data: {
84
+ client_mutation_id: ctx.clientMutationId++,
85
+ actor_id: ctx.userID,
86
+ action: reaction == "" ? "REMOVE_REACTION" : "ADD_REACTION",
87
+ message_id: messageID,
88
+ reaction: reaction,
89
+ },
90
+ };
91
+
92
+ const qs = {
93
+ doc_id: "1491398900900362",
94
+ variables: JSON.stringify(variables),
95
+ dpr: 1,
96
+ };
97
+
98
+ defaultFuncs
99
+ .postFormData(
100
+ "https://www.facebook.com/webgraphql/mutation/",
101
+ ctx.jar,
102
+ {},
103
+ qs,
104
+ )
105
+ .then(utils.parseAndCheckLogin(ctx.jar, defaultFuncs))
106
+ .then(function (resData) {
107
+ if (!resData) {
108
+ throw { error: "setReaction returned empty object." };
109
+ }
110
+ if (resData.error) {
111
+ throw resData;
112
+ }
113
+ callback(null);
114
+ })
115
+ .catch(function (err) {
116
+ console.error("setReaction", err);
117
+ return callback(err);
118
+ });
119
+
120
+ return returnPromise;
121
+ };
122
+ };
@@ -0,0 +1,62 @@
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 setMessageReactionMqtt(reaction, messageID, threadID, callback) {
17
+ if (!ctx.mqttClient) {
18
+ throw new Error('Not connected to MQTT');
19
+ }
20
+
21
+
22
+ ctx.wsReqNumber += 1;
23
+ ctx.wsTaskNumber += 1;
24
+
25
+ const taskPayload = {
26
+ thread_key: threadID,
27
+ timestamp_ms: Date.now(),
28
+ message_id: messageID,
29
+ reaction: reaction,
30
+ actor_id: ctx.userID,
31
+ reaction_style: null,
32
+ sync_group: 1,
33
+ send_attribution: Math.random() < 0.5 ? 65537 : 524289
34
+ };
35
+
36
+ const task = {
37
+ failure_count: null,
38
+ label: '29',
39
+ payload: JSON.stringify(taskPayload),
40
+ queue_name: JSON.stringify(['reaction', messageID]),
41
+ task_id: ctx.wsTaskNumber,
42
+ };
43
+
44
+ const content = {
45
+ app_id: '2220391788200892',
46
+ payload: JSON.stringify({
47
+ data_trace_id: null,
48
+ epoch_id: parseInt(generateOfflineThreadingID()),
49
+ tasks: [task],
50
+ version_id: '7158486590867448',
51
+ }),
52
+ request_id: ctx.wsReqNumber,
53
+ type: 3,
54
+ };
55
+
56
+ if (isCallable(callback)) {
57
+ ctx.reqCallbacks[ctx.wsReqNumber] = callback;
58
+ }
59
+
60
+ ctx.mqttClient.publish('/ls_req', JSON.stringify(content), { qos: 1, retain: false });
61
+ };
62
+ };
@@ -1,106 +1,112 @@
1
- "use strict";
2
-
3
- const log = require("npmlog");
4
- const { parseAndCheckLogin } = require("../../utils/client");
5
- const { getType } = require("../../utils/format");
6
- function formatData(resData) {
7
- return {
8
- viewer_feedback_reaction_info:
9
- resData.feedback_react.feedback.viewer_feedback_reaction_info,
10
- supported_reactions: resData.feedback_react.feedback.supported_reactions,
11
- top_reactions: resData.feedback_react.feedback.top_reactions.edges,
12
- reaction_count: resData.feedback_react.feedback.reaction_count
13
- };
14
- }
15
-
16
- module.exports = function(defaultFuncs, api, ctx) {
17
- return function setPostReaction(postID, type, callback) {
18
- let resolveFunc = function() {};
19
- let rejectFunc = function() {};
20
- const returnPromise = new Promise(function(resolve, reject) {
21
- resolveFunc = resolve;
22
- rejectFunc = reject;
23
- });
24
-
25
- if (!callback) {
26
- if (
27
- getType(type) === "Function" ||
28
- getType(type) === "AsyncFunction"
29
- ) {
30
- callback = type;
31
- type = 0;
32
- } else {
33
- callback = function(err, data) {
34
- if (err) {
35
- return rejectFunc(err);
36
- }
37
- resolveFunc(data);
38
- };
39
- }
40
- }
41
-
42
- const map = {
43
- unlike: 0,
44
- like: 1,
45
- heart: 2,
46
- love: 16,
47
- haha: 4,
48
- wow: 3,
49
- sad: 7,
50
- angry: 8
51
- };
52
-
53
- if (getType(type) !== "Number" && getType(type) === "String") {
54
- type = map[type.toLowerCase()];
55
- }
56
-
57
- if (getType(type) !== "Number" && getType(type) !== "String") {
58
- throw {
59
- error: "setPostReaction: Invalid reaction type"
60
- };
61
- }
62
-
63
- if (type != 0 && !type) {
64
- throw {
65
- error: "setPostReaction: Invalid reaction type"
66
- };
67
- }
68
-
69
- const form = {
70
- av: ctx.userID,
71
- fb_api_caller_class: "RelayModern",
72
- fb_api_req_friendly_name: "CometUFIFeedbackReactMutation",
73
- doc_id: "4769042373179384",
74
- variables: JSON.stringify({
75
- input: {
76
- actor_id: ctx.userID,
77
- feedback_id: Buffer.from("feedback:" + postID).toString("base64"),
78
- feedback_reaction: type,
79
- feedback_source: "OBJECT",
80
- is_tracking_encrypted: true,
81
- tracking: [],
82
- session_id: "f7dd50dd-db6e-4598-8cd9-561d5002b423",
83
- client_mutation_id: Math.round(Math.random() * 19).toString()
84
- },
85
- useDefaultActor: false,
86
- scale: 3
87
- })
88
- };
89
-
90
- defaultFuncs
91
- .post("https://www.facebook.com/api/graphql/", ctx.jar, form)
92
- .then(parseAndCheckLogin(ctx, defaultFuncs))
93
- .then(function(resData) {
94
- if (resData.errors) {
95
- throw resData;
96
- }
97
- return callback(null, formatData(resData.data));
98
- })
99
- .catch(function(err) {
100
- log.error("setPostReaction", err);
101
- return callback(err);
102
- });
103
-
104
- return returnPromise;
105
- };
106
- };
1
+ /**
2
+ * @fix by NTKhang
3
+ * update as Thursday, 10 February 2022
4
+ * do not remove the author name to get more updates
5
+ */
6
+
7
+ "use strict";
8
+
9
+ const utils = require("../utils");
10
+ // @NethWs3Dev
11
+
12
+ function formatData(resData) {
13
+ return {
14
+ viewer_feedback_reaction_info:
15
+ resData.feedback_react.feedback.viewer_feedback_reaction_info,
16
+ supported_reactions: resData.feedback_react.feedback.supported_reactions,
17
+ top_reactions: resData.feedback_react.feedback.top_reactions.edges,
18
+ reaction_count: resData.feedback_react.feedback.reaction_count,
19
+ };
20
+ }
21
+
22
+ module.exports = function (defaultFuncs, api, ctx) {
23
+ return function setPostReaction(postID, type, callback) {
24
+ let resolveFunc = function () {};
25
+ let rejectFunc = function () {};
26
+ const returnPromise = new Promise(function (resolve, reject) {
27
+ resolveFunc = resolve;
28
+ rejectFunc = reject;
29
+ });
30
+
31
+ if (!callback) {
32
+ if (
33
+ utils.getType(type) === "Function" ||
34
+ utils.getType(type) === "AsyncFunction"
35
+ ) {
36
+ callback = type;
37
+ type = 0;
38
+ } else {
39
+ callback = function (err, data) {
40
+ if (err) {
41
+ return rejectFunc(err);
42
+ }
43
+ resolveFunc(data);
44
+ };
45
+ }
46
+ }
47
+
48
+ const map = {
49
+ unlike: 0,
50
+ like: 1,
51
+ heart: 2,
52
+ love: 16,
53
+ haha: 4,
54
+ wow: 3,
55
+ sad: 7,
56
+ angry: 8,
57
+ };
58
+
59
+ if (utils.getType(type) !== "Number" && utils.getType(type) === "String") {
60
+ type = map[type.toLowerCase()];
61
+ }
62
+
63
+ if (utils.getType(type) !== "Number" && utils.getType(type) !== "String") {
64
+ throw {
65
+ error: "setPostReaction: Invalid reaction type",
66
+ };
67
+ }
68
+
69
+ if (type != 0 && !type) {
70
+ throw {
71
+ error: "setPostReaction: Invalid reaction type",
72
+ };
73
+ }
74
+
75
+ const form = {
76
+ av: ctx.userID,
77
+ fb_api_caller_class: "RelayModern",
78
+ fb_api_req_friendly_name: "CometUFIFeedbackReactMutation",
79
+ doc_id: "4769042373179384",
80
+ variables: JSON.stringify({
81
+ input: {
82
+ actor_id: ctx.userID,
83
+ feedback_id: new Buffer("feedback:" + postID).toString("base64"),
84
+ feedback_reaction: type,
85
+ feedback_source: "OBJECT",
86
+ is_tracking_encrypted: true,
87
+ tracking: [],
88
+ session_id: "f7dd50dd-db6e-4598-8cd9-561d5002b423",
89
+ client_mutation_id: Math.round(Math.random() * 19).toString(),
90
+ },
91
+ useDefaultActor: false,
92
+ scale: 3,
93
+ }),
94
+ };
95
+
96
+ defaultFuncs
97
+ .post("https://www.facebook.com/api/graphql/", ctx.jar, form)
98
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
99
+ .then(function (resData) {
100
+ if (resData.errors) {
101
+ throw resData;
102
+ }
103
+ return callback(null, formatData(resData.data));
104
+ })
105
+ .catch(function (err) {
106
+ console.error("setPostReaction", err);
107
+ return callback(err);
108
+ });
109
+
110
+ return returnPromise;
111
+ };
112
+ };
@@ -0,0 +1,64 @@
1
+ 'use strict';
2
+
3
+ var utils = require('../utils.js');
4
+ var log = require('npmlog');
5
+
6
+ module.exports = function(defaultFuncs, api, ctx) {
7
+ return function setStoryReaction(storyID, react, callback) {
8
+ var cb;
9
+ var returnPromise = new Promise(function(resolve, reject) {
10
+ cb = error => error ? reject(error) : resolve();
11
+ });
12
+
13
+ if (typeof react == 'function') {
14
+ callback = react;
15
+ react = 1;
16
+ }
17
+ if (typeof callback == 'function') cb = callback;
18
+ if (typeof Number(react) != 'number') react = 1;
19
+
20
+ var map = {
21
+ 1: '👍',
22
+ 2: '❤️',
23
+ 3: '🤗',
24
+ 4: '😆',
25
+ 5: '😮',
26
+ 6: '😢',
27
+ 7: '😡'
28
+ }
29
+ var form = {
30
+ fb_api_req_friendly_name: 'useStoriesSendReplyMutation',
31
+ variables: JSON.stringify({
32
+ input: {
33
+ attribution_id_v2: `StoriesCometSuspenseRoot.react,comet.stories.viewer,unexpected,${Date.now()},538296,,;CometHomeRoot.react,comet.home,via_cold_start,${Date.now()},850302,4748854339,`,
34
+ lightweight_reaction_actions: {
35
+ offsets: [0],
36
+ reaction: map[react] || map[1]
37
+ },
38
+ message: map[react] || map[1],
39
+ story_id: storyID,
40
+ story_reply_type: "LIGHT_WEIGHT",
41
+ actor_id: ctx.userID,
42
+ client_mutation_id: String(parseInt(Math.random() * 16))
43
+ }
44
+ }),
45
+ doc_id: '4826141330837571'
46
+ }
47
+
48
+ defaultFuncs
49
+ .post('https://www.facebook.com/api/graphql/', ctx.jar, form)
50
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
51
+ .then(function(res) {
52
+ if (res.errors) throw res;
53
+ return cb();
54
+ })
55
+ .catch(function(err) {
56
+ console.error('setPostReaction', err);
57
+ return cb(err);
58
+ });
59
+
60
+ return returnPromise;
61
+ }
62
+ }
63
+
64
+ //new update version 1.0.9
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+
3
+ const utils = require("../utils");
4
+ // @NethWs3Dev
5
+
6
+ module.exports = function (defaultFuncs, api, ctx) {
7
+ return function setTitle(newTitle, threadID, callback) {
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." };
14
+ }
15
+
16
+ let resolveFunc = function () {};
17
+ let rejectFunc = function () {};
18
+ const returnPromise = new Promise(function (resolve, reject) {
19
+ resolveFunc = resolve;
20
+ rejectFunc = reject;
21
+ });
22
+
23
+ if (!callback) {
24
+ callback = function (err, friendList) {
25
+ if (err) {
26
+ return rejectFunc(err);
27
+ }
28
+ resolveFunc(friendList);
29
+ };
30
+ }
31
+
32
+ const messageAndOTID = utils.generateOfflineThreadingID();
33
+ const form = {
34
+ client: "mercury",
35
+ action_type: "ma-type:log-message",
36
+ author: "fbid:" + (ctx.userID),
37
+ author_email: "",
38
+ coordinates: "",
39
+ timestamp: Date.now(),
40
+ timestamp_absolute: "Today",
41
+ timestamp_relative: utils.generateTimestampRelative(),
42
+ timestamp_time_passed: "0",
43
+ is_unread: false,
44
+ is_cleared: false,
45
+ is_forward: false,
46
+ is_filtered_content: false,
47
+ is_spoof_warning: false,
48
+ source: "source:chat:web",
49
+ "source_tags[0]": "source:chat",
50
+ status: "0",
51
+ offline_threading_id: messageAndOTID,
52
+ message_id: messageAndOTID,
53
+ threading_id: utils.generateThreadingID(ctx.clientID),
54
+ manual_retry_cnt: "0",
55
+ thread_fbid: threadID,
56
+ thread_name: newTitle,
57
+ thread_id: threadID,
58
+ log_message_type: "log:thread-name",
59
+ };
60
+
61
+ defaultFuncs
62
+ .post(
63
+ "https://www.facebook.com/messaging/set_thread_name/",
64
+ ctx.jar,
65
+ form,
66
+ )
67
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
68
+ .then(function (resData) {
69
+ if (resData.error && resData.error === 1545012) {
70
+ throw { error: "Cannot change chat title: Not member of chat." };
71
+ }
72
+
73
+ if (resData.error && resData.error === 1545003) {
74
+ throw { error: "Cannot set title of single-user chat." };
75
+ }
76
+
77
+ if (resData.error) {
78
+ throw resData;
79
+ }
80
+
81
+ return callback();
82
+ })
83
+ .catch(function (err) {
84
+ console.error("setTitle", err);
85
+ return callback(err);
86
+ });
87
+
88
+ return returnPromise;
89
+ };
90
+ };