rapido-fca 0.0.3 → 0.0.5

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 (80) hide show
  1. package/index.js +16 -23
  2. package/package.json +16 -15
  3. package/src/addExternalModule.js +19 -23
  4. package/src/addUserToGroup.js +99 -97
  5. package/src/changeAdminStatus.js +86 -62
  6. package/src/changeArchivedStatus.js +49 -49
  7. package/src/changeAvatar.js +118 -108
  8. package/src/changeAvatarV2.js +86 -0
  9. package/src/changeAvt.js +85 -0
  10. package/src/changeBio.js +63 -64
  11. package/src/changeBlockedStatus.js +40 -38
  12. package/src/changeBlockedStatusMqtt.js +80 -0
  13. package/src/changeCover.js +72 -0
  14. package/src/changeGroupImage.js +129 -126
  15. package/src/changeName.js +79 -0
  16. package/src/changeNickname.js +49 -49
  17. package/src/changeThreadColor.js +53 -53
  18. package/src/changeThreadEmoji.js +45 -45
  19. package/src/changeUsername.js +59 -0
  20. package/src/createCommentPost.js +230 -0
  21. package/src/createNewGroup.js +74 -72
  22. package/src/createPoll.js +59 -59
  23. package/src/createPost.js +276 -0
  24. package/src/deleteMessage.js +50 -50
  25. package/src/deleteThread.js +50 -50
  26. package/src/editMessage.js +51 -49
  27. package/src/editMessageOld.js +67 -0
  28. package/src/follow.js +74 -0
  29. package/src/forwardAttachment.js +54 -54
  30. package/src/getAccess.js +112 -0
  31. package/src/getAvatarUser.js +78 -0
  32. package/src/getCurrentUserID.js +3 -3
  33. package/src/getEmojiUrl.js +17 -17
  34. package/src/getFriendsList.js +67 -67
  35. package/src/getMessage.js +806 -767
  36. package/src/getRegion.js +7 -0
  37. package/src/getThreadHistory.js +656 -642
  38. package/src/getThreadHistoryDeprecated.js +71 -0
  39. package/src/getThreadInfo.js +1 -1
  40. package/src/getThreadInfoDeprecated.js +56 -0
  41. package/src/getThreadList.js +199 -227
  42. package/src/getThreadListDeprecated.js +46 -0
  43. package/src/getThreadPictures.js +51 -71
  44. package/src/getUID.js +119 -0
  45. package/src/getUserID.js +53 -58
  46. package/src/getUserInfo.js +52 -60
  47. package/src/handleFriendRequest.js +41 -65
  48. package/src/handleMessageRequest.js +42 -60
  49. package/src/httpGet.js +49 -57
  50. package/src/httpPost.js +48 -57
  51. package/src/listenMqtt.js +827 -895
  52. package/src/logout.js +61 -61
  53. package/src/markAsDelivered.js +42 -53
  54. package/src/markAsRead.js +59 -69
  55. package/src/markAsReadAll.js +32 -42
  56. package/src/markAsSeen.js +43 -54
  57. package/src/muteThread.js +40 -47
  58. package/src/refreshFb_dtsg.js +77 -69
  59. package/src/removeUserFromGroup.js +67 -67
  60. package/src/resolvePhotoUrl.js +34 -34
  61. package/src/searchForThread.js +43 -43
  62. package/src/searchStickers.js +53 -0
  63. package/src/sendMessage.js +80 -228
  64. package/src/sendMessageMqtt.js +322 -0
  65. package/src/sendTypingIndicator.js +86 -88
  66. package/src/sendTypingIndicatorV2.js +28 -0
  67. package/src/setMessageReaction.js +110 -109
  68. package/src/setMessageReactionMqtt.js +62 -0
  69. package/src/setPostReaction.js +90 -87
  70. package/src/setStoryReaction.js +64 -0
  71. package/src/setTitle.js +76 -72
  72. package/src/shareContact.js +110 -0
  73. package/src/shareLink.js +59 -0
  74. package/src/stopListenMqtt.js +23 -0
  75. package/src/threadColors.js +121 -121
  76. package/src/unfriend.js +43 -43
  77. package/src/unsendMessage.js +34 -38
  78. package/src/uploadAttachment.js +79 -81
  79. package/LICENSE +0 -21
  80. package/src/httpPostFormData.js +0 -63
@@ -1,121 +1,122 @@
1
1
  "use strict";
2
2
 
3
3
  const utils = require("../utils");
4
- const log = require("npmlog");
4
+ // @NethWs3Dev
5
5
 
6
6
  module.exports = function (defaultFuncs, api, ctx) {
7
- return function setMessageReaction(reaction, messageID, callback, forceCustomReaction) {
8
- let resolveFunc = function () { };
9
- let rejectFunc = function () { };
10
- const returnPromise = new Promise(function (resolve, reject) {
11
- resolveFunc = resolve;
12
- rejectFunc = reject;
13
- });
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
+ });
14
19
 
15
- if (!callback) {
16
- callback = function (err, friendList) {
17
- if (err) {
18
- return rejectFunc(err);
19
- }
20
- resolveFunc(friendList);
21
- };
22
- }
20
+ if (!callback) {
21
+ callback = function (err, friendList) {
22
+ if (err) {
23
+ return rejectFunc(err);
24
+ }
25
+ resolveFunc(friendList);
26
+ };
27
+ }
23
28
 
24
- if (ctx.i_userID) {
25
- throw { error: "Cannot set reaction as another profile." };
26
- }
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
+ }
27
81
 
28
- switch (reaction) {
29
- case "\uD83D\uDE0D": //:heart_eyes:
30
- case "\uD83D\uDE06": //:laughing:
31
- case "\uD83D\uDE2E": //:open_mouth:
32
- case "\uD83D\uDE22": //:cry:
33
- case "\uD83D\uDE20": //:angry:
34
- case "\uD83D\uDC4D": //:thumbsup:
35
- case "\uD83D\uDC4E": //:thumbsdown:
36
- case "\u2764": //:heart:
37
- case "\uD83D\uDC97": //:glowingheart:
38
- case "":
39
- //valid
40
- break;
41
- case ":heart_eyes:":
42
- case ":love:":
43
- reaction = "\uD83D\uDE0D";
44
- break;
45
- case ":laughing:":
46
- case ":haha:":
47
- reaction = "\uD83D\uDE06";
48
- break;
49
- case ":open_mouth:":
50
- case ":wow:":
51
- reaction = "\uD83D\uDE2E";
52
- break;
53
- case ":cry:":
54
- case ":sad:":
55
- reaction = "\uD83D\uDE22";
56
- break;
57
- case ":angry:":
58
- reaction = "\uD83D\uDE20";
59
- break;
60
- case ":thumbsup:":
61
- case ":like:":
62
- reaction = "\uD83D\uDC4D";
63
- break;
64
- case ":thumbsdown:":
65
- case ":dislike:":
66
- reaction = "\uD83D\uDC4E";
67
- break;
68
- case ":heart:":
69
- reaction = "\u2764";
70
- break;
71
- case ":glowingheart:":
72
- reaction = "\uD83D\uDC97";
73
- break;
74
- default:
75
- if (forceCustomReaction) {
76
- break;
77
- }
78
- return callback({ error: "Reaction is not a valid emoji." });
79
- }
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
+ };
80
91
 
81
- const variables = {
82
- data: {
83
- client_mutation_id: ctx.clientMutationId++,
84
- actor_id: ctx.i_userID || ctx.userID,
85
- action: reaction == "" ? "REMOVE_REACTION" : "ADD_REACTION",
86
- message_id: messageID,
87
- reaction: reaction
88
- }
89
- };
92
+ const qs = {
93
+ doc_id: "1491398900900362",
94
+ variables: JSON.stringify(variables),
95
+ dpr: 1,
96
+ };
90
97
 
91
- const qs = {
92
- doc_id: "1491398900900362",
93
- variables: JSON.stringify(variables),
94
- dpr: 1
95
- };
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
+ });
96
119
 
97
- defaultFuncs
98
- .postFormData(
99
- "https://www.facebook.com/webgraphql/mutation/",
100
- ctx.jar,
101
- {},
102
- qs
103
- )
104
- .then(utils.parseAndCheckLogin(ctx.jar, defaultFuncs))
105
- .then(function (resData) {
106
- if (!resData) {
107
- throw { error: "setReaction returned empty object." };
108
- }
109
- if (resData.error || resData.errors) {
110
- throw resData;
111
- }
112
- callback(null);
113
- })
114
- .catch(function (err) {
115
- log.error("setReaction", err);
116
- return callback(err);
117
- });
118
-
119
- return returnPromise;
120
- };
120
+ return returnPromise;
121
+ };
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
+ };
@@ -7,103 +7,106 @@
7
7
  "use strict";
8
8
 
9
9
  const utils = require("../utils");
10
- const log = require("npmlog");
10
+ // @NethWs3Dev
11
11
 
12
12
  function formatData(resData) {
13
- return {
14
- viewer_feedback_reaction_info: resData.feedback_react.feedback.viewer_feedback_reaction_info,
15
- supported_reactions: resData.feedback_react.feedback.supported_reactions,
16
- top_reactions: resData.feedback_react.feedback.top_reactions.edges,
17
- reaction_count: resData.feedback_react.feedback.reaction_count
18
- };
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
+ };
19
20
  }
20
21
 
21
22
  module.exports = function (defaultFuncs, api, ctx) {
22
- return function setPostReaction(postID, type, callback) {
23
- let resolveFunc = function () { };
24
- let rejectFunc = function () { };
25
- const returnPromise = new Promise(function (resolve, reject) {
26
- resolveFunc = resolve;
27
- rejectFunc = reject;
28
- });
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
+ });
29
30
 
30
- if (!callback) {
31
- if (utils.getType(type) === "Function" || utils.getType(type) === "AsyncFunction") {
32
- callback = type;
33
- type = 0;
34
- }
35
- else {
36
- callback = function (err, data) {
37
- if (err) {
38
- return rejectFunc(err);
39
- }
40
- resolveFunc(data);
41
- };
42
- }
43
- }
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
+ }
44
47
 
45
- const map = {
46
- unlike: 0,
47
- like: 1,
48
- heart: 2,
49
- love: 16,
50
- haha: 4,
51
- wow: 3,
52
- sad: 7,
53
- angry: 8
54
- };
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
+ };
55
58
 
56
- if (utils.getType(type) !== "Number" && utils.getType(type) === "String") {
57
- type = map[type.toLowerCase()];
58
- }
59
+ if (utils.getType(type) !== "Number" && utils.getType(type) === "String") {
60
+ type = map[type.toLowerCase()];
61
+ }
59
62
 
60
- if (utils.getType(type) !== "Number" && utils.getType(type) !== "String") {
61
- throw {
62
- error: "setPostReaction: Invalid reaction type"
63
- };
64
- }
63
+ if (utils.getType(type) !== "Number" && utils.getType(type) !== "String") {
64
+ throw {
65
+ error: "setPostReaction: Invalid reaction type",
66
+ };
67
+ }
65
68
 
66
- if (type != 0 && !type) {
67
- throw {
68
- error: "setPostReaction: Invalid reaction type"
69
- };
70
- }
69
+ if (type != 0 && !type) {
70
+ throw {
71
+ error: "setPostReaction: Invalid reaction type",
72
+ };
73
+ }
71
74
 
72
- const form = {
73
- av: ctx.i_userID || ctx.userID,
74
- fb_api_caller_class: "RelayModern",
75
- fb_api_req_friendly_name: "CometUFIFeedbackReactMutation",
76
- doc_id: "4769042373179384",
77
- variables: JSON.stringify({
78
- input: {
79
- actor_id: ctx.i_userID || ctx.userID,
80
- feedback_id: (new Buffer("feedback:" + postID)).toString("base64"),
81
- feedback_reaction: type,
82
- feedback_source: "OBJECT",
83
- is_tracking_encrypted: true,
84
- tracking: [],
85
- session_id: "f7dd50dd-db6e-4598-8cd9-561d5002b423",
86
- client_mutation_id: Math.round(Math.random() * 19).toString()
87
- },
88
- useDefaultActor: false,
89
- scale: 3
90
- })
91
- };
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
+ };
92
95
 
93
- defaultFuncs
94
- .post("https://www.facebook.com/api/graphql/", ctx.jar, form)
95
- .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
96
- .then(function (resData) {
97
- if (resData.errors) {
98
- throw resData;
99
- }
100
- return callback(null, formatData(resData.data));
101
- })
102
- .catch(function (err) {
103
- log.error("setPostReaction", err);
104
- return callback(err);
105
- });
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
+ });
106
109
 
107
- return returnPromise;
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