rapido-fca 0.0.3 → 0.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 (79) hide show
  1. package/package.json +16 -15
  2. package/src/addExternalModule.js +19 -23
  3. package/src/addUserToGroup.js +99 -97
  4. package/src/changeAdminStatus.js +86 -62
  5. package/src/changeArchivedStatus.js +49 -49
  6. package/src/changeAvatar.js +118 -108
  7. package/src/changeAvatarV2.js +86 -0
  8. package/src/changeAvt.js +85 -0
  9. package/src/changeBio.js +63 -64
  10. package/src/changeBlockedStatus.js +40 -38
  11. package/src/changeBlockedStatusMqtt.js +80 -0
  12. package/src/changeCover.js +72 -0
  13. package/src/changeGroupImage.js +129 -126
  14. package/src/changeName.js +79 -0
  15. package/src/changeNickname.js +49 -49
  16. package/src/changeThreadColor.js +53 -53
  17. package/src/changeThreadEmoji.js +45 -45
  18. package/src/changeUsername.js +59 -0
  19. package/src/createCommentPost.js +230 -0
  20. package/src/createNewGroup.js +74 -72
  21. package/src/createPoll.js +59 -59
  22. package/src/createPost.js +276 -0
  23. package/src/deleteMessage.js +50 -50
  24. package/src/deleteThread.js +50 -50
  25. package/src/editMessage.js +51 -49
  26. package/src/editMessageOld.js +67 -0
  27. package/src/follow.js +74 -0
  28. package/src/forwardAttachment.js +54 -54
  29. package/src/getAccess.js +112 -0
  30. package/src/getAvatarUser.js +78 -0
  31. package/src/getCurrentUserID.js +3 -3
  32. package/src/getEmojiUrl.js +17 -17
  33. package/src/getFriendsList.js +67 -67
  34. package/src/getMessage.js +806 -767
  35. package/src/getRegion.js +7 -0
  36. package/src/getThreadHistory.js +656 -642
  37. package/src/getThreadHistoryDeprecated.js +71 -0
  38. package/src/getThreadInfo.js +1 -1
  39. package/src/getThreadInfoDeprecated.js +56 -0
  40. package/src/getThreadList.js +199 -227
  41. package/src/getThreadListDeprecated.js +46 -0
  42. package/src/getThreadPictures.js +51 -71
  43. package/src/getUID.js +119 -0
  44. package/src/getUserID.js +53 -58
  45. package/src/getUserInfo.js +52 -60
  46. package/src/handleFriendRequest.js +41 -65
  47. package/src/handleMessageRequest.js +42 -60
  48. package/src/httpGet.js +49 -57
  49. package/src/httpPost.js +48 -57
  50. package/src/listenMqtt.js +827 -895
  51. package/src/logout.js +61 -61
  52. package/src/markAsDelivered.js +42 -53
  53. package/src/markAsRead.js +59 -69
  54. package/src/markAsReadAll.js +32 -42
  55. package/src/markAsSeen.js +43 -54
  56. package/src/muteThread.js +40 -47
  57. package/src/refreshFb_dtsg.js +77 -69
  58. package/src/removeUserFromGroup.js +67 -67
  59. package/src/resolvePhotoUrl.js +34 -34
  60. package/src/searchForThread.js +43 -43
  61. package/src/searchStickers.js +53 -0
  62. package/src/sendMessage.js +80 -228
  63. package/src/sendMessageMqtt.js +322 -0
  64. package/src/sendTypingIndicator.js +86 -88
  65. package/src/sendTypingIndicatorV2.js +28 -0
  66. package/src/setMessageReaction.js +110 -109
  67. package/src/setMessageReactionMqtt.js +62 -0
  68. package/src/setPostReaction.js +90 -87
  69. package/src/setStoryReaction.js +64 -0
  70. package/src/setTitle.js +76 -72
  71. package/src/shareContact.js +110 -0
  72. package/src/shareLink.js +59 -0
  73. package/src/stopListenMqtt.js +23 -0
  74. package/src/threadColors.js +121 -121
  75. package/src/unfriend.js +43 -43
  76. package/src/unsendMessage.js +34 -38
  77. package/src/uploadAttachment.js +79 -81
  78. package/LICENSE +0 -21
  79. 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