| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | "use strict"; |
| |
|
| | const utils = require("../utils"); |
| | const log = require("npmlog"); |
| |
|
| | function formatData(resData) { |
| | return { |
| | viewer_feedback_reaction_info: resData.feedback_react.feedback.viewer_feedback_reaction_info, |
| | supported_reactions: resData.feedback_react.feedback.supported_reactions, |
| | top_reactions: resData.feedback_react.feedback.top_reactions.edges, |
| | reaction_count: resData.feedback_react.feedback.reaction_count |
| | }; |
| | } |
| |
|
| | module.exports = function (defaultFuncs, api, ctx) { |
| | return function setPostReaction(postID, type, callback) { |
| | let resolveFunc = function () { }; |
| | let rejectFunc = function () { }; |
| | const returnPromise = new Promise(function (resolve, reject) { |
| | resolveFunc = resolve; |
| | rejectFunc = reject; |
| | }); |
| |
|
| | if (!callback) { |
| | if (utils.getType(type) === "Function" || utils.getType(type) === "AsyncFunction") { |
| | callback = type; |
| | type = 0; |
| | } |
| | else { |
| | callback = function (err, data) { |
| | if (err) { |
| | return rejectFunc(err); |
| | } |
| | resolveFunc(data); |
| | }; |
| | } |
| | } |
| |
|
| | const map = { |
| | unlike: 0, |
| | like: 1, |
| | heart: 2, |
| | love: 16, |
| | haha: 4, |
| | wow: 3, |
| | sad: 7, |
| | angry: 8 |
| | }; |
| |
|
| | if (utils.getType(type) !== "Number" && utils.getType(type) === "String") { |
| | type = map[type.toLowerCase()]; |
| | } |
| |
|
| | if (utils.getType(type) !== "Number" && utils.getType(type) !== "String") { |
| | throw { |
| | error: "setPostReaction: Invalid reaction type" |
| | }; |
| | } |
| |
|
| | if (type != 0 && !type) { |
| | throw { |
| | error: "setPostReaction: Invalid reaction type" |
| | }; |
| | } |
| |
|
| | const form = { |
| | av: ctx.i_userID || ctx.userID, |
| | fb_api_caller_class: "RelayModern", |
| | fb_api_req_friendly_name: "CometUFIFeedbackReactMutation", |
| | doc_id: "4769042373179384", |
| | variables: JSON.stringify({ |
| | input: { |
| | actor_id: ctx.i_userID || ctx.userID, |
| | feedback_id: (new Buffer.from("feedback:" + postID)).toString("base64"), |
| | feedback_reaction: type, |
| | feedback_source: "OBJECT", |
| | is_tracking_encrypted: true, |
| | tracking: [], |
| | session_id: "f7dd50dd-db6e-4598-8cd9-561d5002b423", |
| | client_mutation_id: Math.round(Math.random() * 19).toString() |
| | }, |
| | useDefaultActor: false, |
| | scale: 3 |
| | }) |
| | }; |
| |
|
| | defaultFuncs |
| | .post("https://www.facebook.com/api/graphql/", ctx.jar, form) |
| | .then(utils.parseAndCheckLogin(ctx, defaultFuncs)) |
| | .then(function (resData) { |
| | if (resData.errors) { |
| | throw resData; |
| | } |
| | return callback(null, formatData(resData.data)); |
| | }) |
| | .catch(function (err) { |
| | log.error("setPostReaction", err); |
| | return callback(err); |
| | }); |
| |
|
| | return returnPromise; |
| | }; |
| | }; |