fca-priyan 15.0.0

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.

Potentially problematic release.


This version of fca-priyan might be problematic. Click here for more details.

Files changed (125) hide show
  1. package/.github/workflows/publish.yml +20 -0
  2. package/Extra/Balancer.js +49 -0
  3. package/Extra/Bypass/956/index.js +234 -0
  4. package/Extra/Bypass/test/aaaa.json +169 -0
  5. package/Extra/Bypass/test/index.js +188 -0
  6. package/Extra/Database/index.js +469 -0
  7. package/Extra/ExtraAddons.js +82 -0
  8. package/Extra/ExtraFindUID.js +62 -0
  9. package/Extra/ExtraGetThread.js +365 -0
  10. package/Extra/ExtraScreenShot.js +430 -0
  11. package/Extra/ExtraUptimeRobot.js +38 -0
  12. package/Extra/Html/Classic/script.js +119 -0
  13. package/Extra/Html/Classic/style.css +8 -0
  14. package/Extra/Security/AES_256_GCM/index.js +1 -0
  15. package/Extra/Security/Base/Step_1.js +6 -0
  16. package/Extra/Security/Base/Step_2.js +22 -0
  17. package/Extra/Security/Base/Step_3.js +22 -0
  18. package/Extra/Security/Base/index.js +191 -0
  19. package/Extra/Security/Step_1.js +6 -0
  20. package/Extra/Security/Step_2.js +22 -0
  21. package/Extra/Security/Step_3.js +22 -0
  22. package/Extra/Security/index.js +5 -0
  23. package/Extra/Src/Change_Environment.js +24 -0
  24. package/Extra/Src/Check_Update.js +67 -0
  25. package/Extra/Src/History.js +115 -0
  26. package/Extra/Src/Instant_Update.js +65 -0
  27. package/Extra/Src/Last-Run.js +65 -0
  28. package/Extra/Src/Premium.js +81 -0
  29. package/Extra/Src/Release_Memory.js +160 -0
  30. package/Extra/Src/Websocket.js +213 -0
  31. package/Extra/Src/image/62518eafb0670b697788ce4f9a4f71d1.jpg +0 -0
  32. package/Extra/Src/test.js +28 -0
  33. package/Extra/Src/uuid.js +137 -0
  34. package/Func/AcceptAgreement.js +31 -0
  35. package/Func/ClearCache.js +64 -0
  36. package/Func/ReportV1.js +54 -0
  37. package/LICENSE.txt +21 -0
  38. package/Language/index.json +228 -0
  39. package/Main.js +1289 -0
  40. package/README.md +22 -0
  41. package/SECURITY.md +17 -0
  42. package/broadcast.js +44 -0
  43. package/index.js +448 -0
  44. package/logger.js +66 -0
  45. package/package.json +98 -0
  46. package/src/Dev_Horizon_Data.js +125 -0
  47. package/src/Dev_getThreadInfoOLD.js +422 -0
  48. package/src/Dev_shareTest2.js +68 -0
  49. package/src/Dev_shareTest3.js +71 -0
  50. package/src/Premium.js +25 -0
  51. package/src/Screenshot.js +83 -0
  52. package/src/addExternalModule.js +16 -0
  53. package/src/addUserToGroup.js +79 -0
  54. package/src/changeAdminStatus.js +79 -0
  55. package/src/changeArchivedStatus.js +41 -0
  56. package/src/changeAvt.js +85 -0
  57. package/src/changeBio.js +65 -0
  58. package/src/changeBlockedStatus.js +36 -0
  59. package/src/changeGroupImage.js +106 -0
  60. package/src/changeNickname.js +45 -0
  61. package/src/changeThreadColor.js +62 -0
  62. package/src/changeThreadEmoji.js +42 -0
  63. package/src/createNewGroup.js +70 -0
  64. package/src/createPoll.js +60 -0
  65. package/src/deleteMessage.js +45 -0
  66. package/src/deleteThread.js +43 -0
  67. package/src/editMessage.js +53 -0
  68. package/src/forwardAttachment.js +48 -0
  69. package/src/getAccessToken.js +28 -0
  70. package/src/getCurrentUserID.js +7 -0
  71. package/src/getEmojiUrl.js +27 -0
  72. package/src/getFriendsList.js +73 -0
  73. package/src/getMessage.js +103 -0
  74. package/src/getThreadHistory.js +537 -0
  75. package/src/getThreadInfo.js +424 -0
  76. package/src/getThreadInfoOLD.js +422 -0
  77. package/src/getThreadList.js +213 -0
  78. package/src/getThreadMain.js +220 -0
  79. package/src/getThreadPictures.js +59 -0
  80. package/src/getUID.js +59 -0
  81. package/src/getUserID.js +62 -0
  82. package/src/getUserInfo.js +112 -0
  83. package/src/getUserInfoMain.js +65 -0
  84. package/src/getUserInfoV2.js +32 -0
  85. package/src/getUserInfoV3.js +63 -0
  86. package/src/getUserInfoV4.js +55 -0
  87. package/src/getUserInfoV5.js +61 -0
  88. package/src/handleFriendRequest.js +46 -0
  89. package/src/handleMessageRequest.js +49 -0
  90. package/src/httpGet.js +49 -0
  91. package/src/httpPost.js +48 -0
  92. package/src/httpPostFormData.js +41 -0
  93. package/src/listenMqtt.js +956 -0
  94. package/src/listenMqttV1.js +846 -0
  95. package/src/logout.js +68 -0
  96. package/src/markAsDelivered.js +48 -0
  97. package/src/markAsRead.js +70 -0
  98. package/src/markAsReadAll.js +43 -0
  99. package/src/markAsSeen.js +51 -0
  100. package/src/muteThread.js +47 -0
  101. package/src/removeUserFromGroup.js +49 -0
  102. package/src/resolvePhotoUrl.js +37 -0
  103. package/src/searchForThread.js +43 -0
  104. package/src/sendMessage.js +386 -0
  105. package/src/sendMqttMessage.js +71 -0
  106. package/src/sendTypingIndicator.js +80 -0
  107. package/src/setMessageReaction.js +109 -0
  108. package/src/setPostReaction.js +102 -0
  109. package/src/setTitle.js +74 -0
  110. package/src/shareContact.js +55 -0
  111. package/src/shareLink.js +58 -0
  112. package/src/threadColors.js +39 -0
  113. package/src/unfriend.js +43 -0
  114. package/src/unsendMessage.js +48 -0
  115. package/src/unsendMqttMessage.js +66 -0
  116. package/test/data/shareAttach.js +146 -0
  117. package/test/data/something.mov +1 -0
  118. package/test/data/test.png +1 -0
  119. package/test/data/test.txt +1 -0
  120. package/test/env/.env +1 -0
  121. package/test/example-config.json +18 -0
  122. package/test/test-page.js +140 -0
  123. package/test/test.js +385 -0
  124. package/test/testv2.js +3 -0
  125. package/utils.js +3077 -0
@@ -0,0 +1,102 @@
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
+ var utils = require("../utils");
10
+ var log = require("npmlog");
11
+
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
+ };
19
+ }
20
+
21
+ module.exports = function(defaultFuncs, api, ctx) {
22
+ return function setPostReaction(postID, type, callback) {
23
+ var resolveFunc = function(){};
24
+ var rejectFunc = function(){};
25
+ var returnPromise = new Promise(function (resolve, reject) {
26
+ resolveFunc = resolve;
27
+ rejectFunc = reject;
28
+ });
29
+
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
+ }
44
+
45
+ var 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
+ };
55
+
56
+ if (utils.getType(type) !== "Number" && utils.getType(type) === "String") {
57
+ type = map[type.toLowerCase()];
58
+ }
59
+ else {
60
+ throw {
61
+ error: "setPostReaction: Invalid reaction type"
62
+ };
63
+ }
64
+
65
+ var form = {
66
+ av: ctx.userID,
67
+ fb_api_caller_class: "RelayModern",
68
+ fb_api_req_friendly_name: "CometUFIFeedbackReactMutation",
69
+ doc_id: "4769042373179384",
70
+ variables: JSON.stringify({
71
+ input: {
72
+ actor_id: ctx.userID,
73
+ feedback_id: (new Buffer.from("feedback:" + postID)).toString("base64"),
74
+ feedback_reaction: type,
75
+ feedback_source: "OBJECT",
76
+ is_tracking_encrypted: true,
77
+ tracking: [],
78
+ session_id: "f7dd50dd-db6e-4598-8cd9-561d5002b423",
79
+ client_mutation_id: Math.round(Math.random() * 19).toString()
80
+ },
81
+ useDefaultActor: false,
82
+ scale: 3
83
+ })
84
+ };
85
+
86
+ defaultFuncs
87
+ .post("https://www.facebook.com/api/graphql/", ctx.jar, form)
88
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
89
+ .then(function(resData) {
90
+ if (resData.errors) {
91
+ throw resData;
92
+ }
93
+ return callback(null, formatData(resData.data));
94
+ })
95
+ .catch(function(err) {
96
+ log.error("setPostReaction", err);
97
+ return callback(err);
98
+ });
99
+
100
+ return returnPromise;
101
+ };
102
+ };
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+
3
+ var utils = require("../utils");
4
+ var log = require("npmlog");
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
+ ) throw { error: "please pass a threadID as a second argument." };
13
+
14
+
15
+ var resolveFunc = function () { };
16
+ var rejectFunc = function () { };
17
+ var returnPromise = new Promise(function (resolve, reject) {
18
+ resolveFunc = resolve;
19
+ rejectFunc = reject;
20
+ });
21
+
22
+ if (!callback) {
23
+ callback = function (err, data) {
24
+ if (err) return rejectFunc(err);
25
+ resolveFunc(data);
26
+ };
27
+ }
28
+
29
+ var messageAndOTID = utils.generateOfflineThreadingID();
30
+ var form = {
31
+ client: "mercury",
32
+ action_type: "ma-type:log-message",
33
+ author: "fbid:" + ctx.userID,
34
+ author_email: "",
35
+ coordinates: "",
36
+ timestamp: Date.now(),
37
+ timestamp_absolute: "Today",
38
+ timestamp_relative: utils.generateTimestampRelative(),
39
+ timestamp_time_passed: "0",
40
+ is_unread: false,
41
+ is_cleared: false,
42
+ is_forward: false,
43
+ is_filtered_content: false,
44
+ is_spoof_warning: false,
45
+ source: "source:chat:web",
46
+ "source_tags[0]": "source:chat",
47
+ status: "0",
48
+ offline_threading_id: messageAndOTID,
49
+ message_id: messageAndOTID,
50
+ threading_id: utils.generateThreadingID(ctx.clientID),
51
+ manual_retry_cnt: "0",
52
+ thread_fbid: threadID,
53
+ thread_name: newTitle,
54
+ thread_id: threadID,
55
+ log_message_type: "log:thread-name"
56
+ };
57
+
58
+ defaultFuncs
59
+ .post("https://www.facebook.com/messaging/set_thread_name/", ctx.jar, form)
60
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
61
+ .then(function (resData) {
62
+ if (resData.error && resData.error === 1545012) throw { error: "Cannot change chat title: Not member of chat." };
63
+ if (resData.error && resData.error === 1545003) throw { error: "Cannot set title of single-user chat." };
64
+ if (resData.error) throw resData;
65
+ return callback();
66
+ })
67
+ .catch(function (err) {
68
+ log.error("setTitle", err);
69
+ return callback(err);
70
+ });
71
+
72
+ return returnPromise;
73
+ };
74
+ };
@@ -0,0 +1,55 @@
1
+ /* eslint-disable linebreak-style */
2
+ "use strict";
3
+
4
+ var utils = require("../utils");
5
+
6
+ module.exports = function (defaultFuncs, api, ctx) {
7
+ return function shareContact(text, senderID, threadID, callback) {
8
+ var resolveFunc = function () { };
9
+ var rejectFunc = function () { };
10
+
11
+ var returnPromise = new Promise(function (resolve, reject) {
12
+ resolveFunc = resolve;
13
+ rejectFunc = reject;
14
+ });
15
+
16
+ if (!callback || utils.getType(callback) != "Function" && utils.getType(callback) != "AsyncFunction") {
17
+ callback = function (err, data) {
18
+ if (err) return rejectFunc(err);
19
+ resolveFunc(data);
20
+ };
21
+ }
22
+ ctx.mqttClient.publish('/ls_req',
23
+ JSON.stringify({
24
+ app_id: "2220391788200892",
25
+ payload: JSON.stringify({
26
+ tasks: [{
27
+ label: 359,
28
+ payload: JSON.stringify({
29
+ "contact_id": senderID,
30
+ "sync_group": 1,
31
+ "text": text || "",
32
+ "thread_id": threadID
33
+ }),
34
+ queue_name: 'xma_open_contact_share',
35
+ task_id: Math.random() * 1001 << 0,
36
+ failure_count: null,
37
+ }],
38
+ epoch_id: utils.generateOfflineThreadingID(),
39
+ version_id: '7214102258676893',
40
+ }),
41
+ request_id: ++ctx.req_ID,
42
+ type: 3
43
+ }),
44
+ {
45
+ qos: 1,
46
+ retain: false,
47
+ }
48
+ );
49
+ ctx.callback_Task[ctx.req_ID] = new Object({
50
+ callback,
51
+ type: "shareContact"
52
+ });
53
+ return returnPromise;
54
+ };
55
+ };
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+
3
+ var utils = require("../utils");
4
+ var log = require("npmlog");
5
+
6
+ module.exports = function (defaultFuncs, api, ctx) {
7
+ return async function shareLink(text, url, threadID, callback) {
8
+ var resolveFunc = function () { };
9
+ var rejectFunc = function () { };
10
+ var returnPromise = new Promise(function (resolve, reject) {
11
+ resolveFunc = resolve;
12
+ rejectFunc = reject;
13
+ });
14
+ if (!callback) {
15
+ callback = function (err, data) {
16
+ if (err) return rejectFunc(err);
17
+ resolveFunc(data);
18
+ };
19
+ }
20
+ mqttClient.publish('/ls_req',
21
+ JSON.stringify({
22
+ "app_id": "2220391788200892",
23
+ "payload": JSON.stringify({
24
+ tasks: [{
25
+ label: 46,
26
+ payload: JSON.stringify({
27
+ "otid": utils.generateOfflineThreadingID(),
28
+ "source": 524289,
29
+ "sync_group": 1,
30
+ "send_type": 6,
31
+ "mark_thread_read": 0,
32
+ "url": url || "https://www.facebook.com/Lazic.Kanzu",
33
+ "text": text || "",
34
+ "thread_id": threadID,
35
+ "initiating_source": 0
36
+ }),
37
+ queue_name: threadID,
38
+ task_id: Math.random() * 1001 << 0,
39
+ failure_count: null,
40
+ }],
41
+ epoch_id: utils.generateOfflineThreadingID(),
42
+ version_id: '7191105584331330',
43
+ }),
44
+ "request_id": ++ctx.req_ID,
45
+ "type": 3
46
+ }),
47
+ {
48
+ qos: 1,
49
+ retain: false,
50
+ }
51
+ )
52
+ ctx.callback_Task[ctx.req_ID] = new Object({
53
+ callback,
54
+ type: "shareLink"
55
+ });
56
+ return returnPromise;
57
+ };
58
+ };
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ module.exports = function(_defaultFuncs, _api, _ctx) {
4
+ // Currently the only colors that can be passed to api.changeThreadColor(); may change if Facebook adds more
5
+ return {
6
+ ////MessengerBlue: null,
7
+ ////Viking: "#44bec7",
8
+ ////GoldenPoppy: "#ffc300",
9
+ ////RadicalRed: "#fa3c4c",
10
+ ////Shocking: "#d696bb",
11
+ ////PictonBlue: "#6699cc",
12
+ ////FreeSpeechGreen: "#13cf13",
13
+ ////Pumpkin: "#ff7e29",
14
+ ////LightCoral: "#e68585",
15
+ ////MediumSlateBlue: "#7646ff",
16
+ ////DeepSkyBlue: "#20cef5",
17
+ ////Fern: "#67b868",
18
+ ////Cameo: "#d4a88c",
19
+ ////BrilliantRose: "#ff5ca1",
20
+ ////BilobaFlower: "#a695c7"
21
+ DefaultBlue: "196241301102133",
22
+ HotPink: "169463077092846",
23
+ AquaBlue: "2442142322678320",
24
+ BrightPurple: "234137870477637",
25
+ CoralPink: "980963458735625",
26
+ Orange: "175615189761153",
27
+ Green: "2136751179887052",
28
+ LavenderPurple: "2058653964378557",
29
+ Red: "2129984390566328",
30
+ Yellow: "174636906462322",
31
+ TealBlue: "1928399724138152",
32
+ Aqua: "417639218648241",
33
+ Mango: "930060997172551",
34
+ Berry: "164535220883264",
35
+ Citrus: "370940413392601",
36
+ Candy: "205488546921017",
37
+ StarWars: "809305022860427"
38
+ };
39
+ };
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+
3
+ var utils = require("../utils");
4
+ var log = require("npmlog");
5
+
6
+ module.exports = function (defaultFuncs, api, ctx) {
7
+ return function unfriend(userID, callback) {
8
+ var resolveFunc = function () { };
9
+ var rejectFunc = function () { };
10
+ var returnPromise = new Promise(function (resolve, reject) {
11
+ resolveFunc = resolve;
12
+ rejectFunc = reject;
13
+ });
14
+
15
+ if (!callback) {
16
+ callback = function (err, friendList) {
17
+ if (err) return rejectFunc(err);
18
+ resolveFunc(friendList);
19
+ };
20
+ }
21
+
22
+ var form = {
23
+ uid: userID,
24
+ unref: "bd_friends_tab",
25
+ floc: "friends_tab",
26
+ "nctr[_mod]": "pagelet_timeline_app_collection_" + ctx.userID + ":2356318349:2"
27
+ };
28
+
29
+ defaultFuncs
30
+ .post("https://www.facebook.com/ajax/profile/removefriendconfirm.php", ctx.jar, form)
31
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
32
+ .then(function (resData) {
33
+ if (resData.error) throw resData;
34
+ return callback();
35
+ })
36
+ .catch(function (err) {
37
+ log.error("unfriend", err);
38
+ return callback(err);
39
+ });
40
+
41
+ return returnPromise;
42
+ };
43
+ };
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+
3
+ const Balancer = require('../Extra/Balancer.js');
4
+ var utils = require("../utils");
5
+ var log = require("npmlog");
6
+
7
+ module.exports = function (defaultFuncs, api, ctx) {
8
+ //const BalancerInstance = new Balancer(api.unsendMessage, unsendMessage, 0.85);
9
+
10
+ function unsendMessage(messageID, threadID, callback) {
11
+ var resolveFunc = function () { };
12
+ var rejectFunc = function () { };
13
+ var returnPromise = new Promise(function (resolve, reject) {
14
+ resolveFunc = resolve;
15
+ rejectFunc = reject;
16
+ });
17
+
18
+ if (!callback) {
19
+ callback = function (err, friendList) {
20
+ if (err) return rejectFunc(err);
21
+ resolveFunc(friendList);
22
+ };
23
+ }
24
+
25
+ if (threadID) return api.unsendMqttMessage(threadID, messageID, callback);
26
+ else {
27
+ var form = {
28
+ message_id: messageID
29
+ };
30
+
31
+ defaultFuncs
32
+ .post("https://www.facebook.com/messaging/unsend_message/", ctx.jar, form)
33
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
34
+ .then(function (resData) {
35
+ if (resData.error) throw resData;
36
+ return callback();
37
+ })
38
+ .catch(function (err) {
39
+ log.error("unsendMessage", err);
40
+ return callback(err);
41
+ });
42
+
43
+ return returnPromise;
44
+ }
45
+ }
46
+
47
+ return unsendMessage;
48
+ };
@@ -0,0 +1,66 @@
1
+ /* eslint-disable linebreak-style */
2
+ "use strict";
3
+
4
+ var utils = require("../utils");
5
+
6
+ module.exports = function (defaultFuncs, api, ctx) {
7
+ return function(threadID, messageID ,callback) {
8
+ var resolveFunc = function () { };
9
+ var rejectFunc = function () { };
10
+
11
+ var returnPromise = new Promise(function (resolve, reject) {
12
+ resolveFunc = resolve;
13
+ rejectFunc = reject;
14
+ });
15
+
16
+ if (!callback && utils.getType(messageID) === "AsyncFunction" || !callback && utils.getType(messageID) === "Function") messageID = callback;
17
+
18
+ if (!callback) {
19
+ callback = function (err, data) {
20
+ if (err) return rejectFunc(err);
21
+ resolveFunc(data);
22
+ };
23
+ }
24
+
25
+ const Payload = {
26
+ message_id:messageID,
27
+ thread_key:threadID,
28
+ sync_group: 1
29
+ };
30
+
31
+ if (messageID != undefined || messageID != null) Payload.reply_metadata = {
32
+ reply_source_id: messageID,
33
+ reply_source_type: 1,
34
+ reply_type: 0
35
+ };
36
+
37
+ const Form = JSON.stringify({
38
+ app_id: "2220391788200892",
39
+ payload: JSON.stringify({
40
+ tasks: [{
41
+ label: 33,
42
+ payload: JSON.stringify(Payload),
43
+ queue_name: "unsend_message",
44
+ task_id: Math.random() * 1001 << 0,
45
+ failure_count: null,
46
+ }],
47
+ epoch_id: utils.generateOfflineThreadingID(),
48
+ version_id: '9094446350588544',
49
+
50
+ }),
51
+ request_id: ++ctx.req_ID,
52
+ type: 3
53
+ });
54
+
55
+ ctx.mqttClient.publish('/ls_req', Form,{
56
+ qos: 1,
57
+ retain: false,
58
+ });
59
+ ctx.callback_Task[ctx.req_ID] = new Object({
60
+ callback,
61
+ type: "unsendMqttMessage",
62
+ });
63
+
64
+ return returnPromise;
65
+ };
66
+ };
@@ -0,0 +1,146 @@
1
+ module.exports = {
2
+ "delta": {
3
+ "attachments": [
4
+ {
5
+ "fbid": "1522004821162174",
6
+ "id": "1522004821162174",
7
+ "mercury": {
8
+ "app_attribution": null,
9
+ "attach_type": "share",
10
+ "name": null,
11
+ "url": null,
12
+ "rel": null,
13
+ "preview_url": null,
14
+ "preview_width": null,
15
+ "preview_height": null,
16
+ "large_preview_url": null,
17
+ "large_preview_width": null,
18
+ "large_preview_height": null,
19
+ "icon_type": null,
20
+ "metadata": null,
21
+ "thumbnail_url": null,
22
+ "share": {
23
+ "description": null,
24
+ "media": {
25
+ "animated_image": null,
26
+ "animated_image_size": {
27
+ "height": null,
28
+ "width": null
29
+ },
30
+ "image": null,
31
+ "image_size": {
32
+ "height": null,
33
+ "width": null
34
+ },
35
+ "duration": null,
36
+ "playable": null,
37
+ "source": null
38
+ },
39
+ "source": "Dimon - testing",
40
+ "style_list": [
41
+ "business_message_items", "fallback"
42
+ ],
43
+ "title": "search engines",
44
+ "properties": null,
45
+ "uri": null,
46
+ "subattachments": [],
47
+ "deduplication_key": "abcde",
48
+ "action_links": [],
49
+ "share_id": "1522004821162174",
50
+ "target": {
51
+ "call_to_actions": [],
52
+ "items": [
53
+ {
54
+ "id": "629934437209008",
55
+ "name": "search engines",
56
+ "desc": "",
57
+ "thumb_url": null,
58
+ "item_url": null,
59
+ "title": "search engines",
60
+ "text": "",
61
+ "source": null,
62
+ "metalines": {
63
+ "metaline_1": "click to get redirected",
64
+ "metaline_2": null,
65
+ "metaline_3": null
66
+ },
67
+ "location": 12314,
68
+ "category": 69,
69
+ "call_to_actions": [
70
+ {
71
+ "action_link": "http://l.facebook.com/l.php?u=http%3A%2F%2Fgoogle.com%2F&h=ATNziCq_-6I3ZPYwwLluFdCrWMEwLLKvokFlXdEdS4LD2Lzsv2cR2SJYffJcDYBfB092Xeq8oRdftJk4husEYVduH24RnlP3HvVQOkOrciXDs2M7TkWYyNLBelvJ2Fc-mw8pbGy5NslGf_fkZ_A",
72
+ "action_type": 2,
73
+ "id": "FFD=",
74
+ "title": "Google",
75
+ "link_target_ids": [629934437209008],
76
+ "is_mutable_by_server": false,
77
+ "should_show_user_confirmation": false,
78
+ "confirmation_title": null,
79
+ "confirmation_message": null,
80
+ "confirmation_continue_label": null,
81
+ "confirmation_cancel_label": null,
82
+ "payment_metadata": {
83
+ "total_price": null,
84
+ "payment_module_config": null
85
+ },
86
+ "is_disabled": false
87
+ }, {
88
+ "action_link": "http://l.facebook.com/l.php?u=http%3A%2F%2Fyahoo.com%2F&h=ATNIuTf7iDGP5xXTWOAdhaGhRFfDf4eS09t_G9CrR0MDiBKpqtCDzPf_9y5Bq7TXMgmo6RttztsgeO0ReSc0PDvJDTa1fLMMK2CjrpkqC91_m-yaMXfeQ4aI6MbhZrOPnK3YFnQP4XvRx3N1udE",
89
+ "action_type": 2,
90
+ "id": "CDE=",
91
+ "title": "Yahoo",
92
+ "link_target_ids": [629934437209008],
93
+ "is_mutable_by_server": false,
94
+ "should_show_user_confirmation": false,
95
+ "confirmation_title": null,
96
+ "confirmation_message": null,
97
+ "confirmation_continue_label": null,
98
+ "confirmation_cancel_label": null,
99
+ "payment_metadata": {
100
+ "total_price": null,
101
+ "payment_module_config": null
102
+ },
103
+ "is_disabled": false
104
+ }, {
105
+ "action_link": "http://l.facebook.com/l.php?u=http%3A%2F%2Fbing.com%2F&h=ATMoMijAt6Da6WWIQ679DhZyZizWdxAViWwyl-RjKobFUG_x8GmB8LD6pPa3KP5K1-QTL9vuaFwjqB0itaMFWk4VwQ9uh56JgnbFnAo4qM_CrQufgLeHwwCnWSCnZt8IzYT4y6YULLLFA5bL1H4",
106
+ "action_type": 2,
107
+ "id": "ABC=",
108
+ "title": "Bing",
109
+ "link_target_ids": [629934437209008],
110
+ "is_mutable_by_server": false,
111
+ "should_show_user_confirmation": false,
112
+ "confirmation_title": null,
113
+ "confirmation_message": null,
114
+ "confirmation_continue_label": null,
115
+ "confirmation_cancel_label": null,
116
+ "payment_metadata": {
117
+ "total_price": null,
118
+ "payment_module_config": null
119
+ },
120
+ "is_disabled": false
121
+ }
122
+ ]
123
+ }
124
+ ],
125
+ "location": 132145,
126
+ "category": 69,
127
+ "message": "Aaa: search engines"
128
+ }
129
+ }
130
+ },
131
+ "otherUserFbIds": ["1521994257829897"],
132
+ "titanType": 1
133
+ }
134
+ ],
135
+ "messageMetadata": {
136
+ "actorFbId": "1345",
137
+ "messageId": "mid.12345:asdv",
138
+ "offlineThreadingId": "1345v1345",
139
+ "tags": ["source:messenger:commerce"],
140
+ "threadKey": {
141
+ "otherUserFbId": "13451345"
142
+ },
143
+ "timestamp": "1487078180265"
144
+ }
145
+ }
146
+ }
@@ -0,0 +1 @@
1
+ 1
@@ -0,0 +1 @@
1
+ .txt
@@ -0,0 +1 @@
1
+ .txt
package/test/env/.env ADDED
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,18 @@
1
+ // Instructions: Copy this file to test-config.json, fill in your test data
2
+ // and remove all comments (JSON doesn't support comments).
3
+ // Run the test with `npm test` after installing the devDependencies (mocha).
4
+ {
5
+ // Test user login information
6
+ "user" : {
7
+ "id" : "00000000000000",
8
+ "email" : "example@test.com",
9
+ "password" : "qwerty"
10
+ },
11
+ // Array of at least 2 other user IDs (not the same as the test user)
12
+ "userIDs" : [
13
+ "11111111111111",
14
+ "22222222222222"
15
+ ],
16
+ // Id of page to which test user is an admin
17
+ "pageID": "3333333333333"
18
+ }