@vangbanlanhat/fca-unofficial 1.4.2

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 (115) hide show
  1. package/.gitattributes +2 -0
  2. package/.github/workflows/nodejs.yml +26 -0
  3. package/.github/workflows/npmpublish.yml +30 -0
  4. package/.travis.yml +6 -0
  5. package/CHANGELOG.md +2 -0
  6. package/DOCS.md +1932 -0
  7. package/LICENSE-MIT +21 -0
  8. package/README.md +198 -0
  9. package/jest.config.js +10 -0
  10. package/package.json +86 -0
  11. package/pnpm-workspace.yaml +3 -0
  12. package/src/actions/addExternalModule.js +34 -0
  13. package/src/actions/addUserToGroup.js +113 -0
  14. package/src/actions/changeAdminStatus.js +79 -0
  15. package/src/actions/changeArchivedStatus.js +55 -0
  16. package/src/actions/changeBio.js +77 -0
  17. package/src/actions/changeBlockedStatus.js +47 -0
  18. package/src/actions/changeGroupImage.js +129 -0
  19. package/src/actions/changeNickname.js +59 -0
  20. package/src/actions/changeThreadColor.js +71 -0
  21. package/src/actions/changeThreadEmoji.js +55 -0
  22. package/src/actions/createNewGroup.js +86 -0
  23. package/src/actions/createPoll.js +71 -0
  24. package/src/actions/deleteMessage.js +56 -0
  25. package/src/actions/deleteThread.js +56 -0
  26. package/src/actions/editMessage.js +81 -0
  27. package/src/actions/forwardAttachment.js +60 -0
  28. package/src/actions/getAvatarUser.js +77 -0
  29. package/src/actions/getCurrentUserID.js +11 -0
  30. package/src/actions/getEmojiUrl.js +37 -0
  31. package/src/actions/getFriendsList.js +84 -0
  32. package/src/actions/getMessage.js +833 -0
  33. package/src/actions/getRegion.js +11 -0
  34. package/src/actions/getThreadHistory.js +702 -0
  35. package/src/actions/getThreadHistoryDeprecated.js +93 -0
  36. package/src/actions/getThreadInfo.js +265 -0
  37. package/src/actions/getThreadInfoDeprecated.js +80 -0
  38. package/src/actions/getThreadList.js +274 -0
  39. package/src/actions/getThreadListDeprecated.js +91 -0
  40. package/src/actions/getThreadPictures.js +79 -0
  41. package/src/actions/getUserID.js +66 -0
  42. package/src/actions/getUserInfo.js +92 -0
  43. package/src/actions/handleFriendRequest.js +61 -0
  44. package/src/actions/handleMessageRequest.js +65 -0
  45. package/src/actions/httpGet.js +70 -0
  46. package/src/actions/httpPost.js +70 -0
  47. package/src/actions/index.js +69 -0
  48. package/src/actions/listenMqtt.js +818 -0
  49. package/src/actions/logout.js +136 -0
  50. package/src/actions/markAsDelivered.js +58 -0
  51. package/src/actions/markAsRead.js +92 -0
  52. package/src/actions/markAsReadAll.js +50 -0
  53. package/src/actions/markAsSeen.js +59 -0
  54. package/src/actions/muteThread.js +52 -0
  55. package/src/actions/pinMessage.js +86 -0
  56. package/src/actions/refreshFb_dtsg.js +89 -0
  57. package/src/actions/removeUserFromGroup.js +79 -0
  58. package/src/actions/resolvePhotoUrl.js +45 -0
  59. package/src/actions/searchForThread.js +53 -0
  60. package/src/actions/searchStickers.js +53 -0
  61. package/src/actions/sendMessage.js +490 -0
  62. package/src/actions/sendMessageMqtt.js +235 -0
  63. package/src/actions/sendTypingIndicator.js +59 -0
  64. package/src/actions/setMessageReaction.js +140 -0
  65. package/src/actions/setMessageReactionMqtt.js +72 -0
  66. package/src/actions/setPostReaction.js +76 -0
  67. package/src/actions/setTitle.js +86 -0
  68. package/src/actions/stopListenMqtt.js +63 -0
  69. package/src/actions/threadColors.js +57 -0
  70. package/src/actions/unfriend.js +52 -0
  71. package/src/actions/unsendMessage.js +61 -0
  72. package/src/index.js +659 -0
  73. package/src/service/uploadAttachment.js +318 -0
  74. package/src/utils/base-parts/auth.js +286 -0
  75. package/src/utils/base-parts/formatters.js +751 -0
  76. package/src/utils/base-parts/identity.js +169 -0
  77. package/src/utils/base-parts/network.js +159 -0
  78. package/src/utils/base-parts/parsing.js +53 -0
  79. package/src/utils/base-parts/type.js +9 -0
  80. package/src/utils/base.js +18 -0
  81. package/src/utils/defaults.js +10 -0
  82. package/src/utils/format-attachments.js +7 -0
  83. package/src/utils/format-core.js +8 -0
  84. package/src/utils/format-events.js +11 -0
  85. package/src/utils/format-messages.js +10 -0
  86. package/src/utils/format-presence.js +9 -0
  87. package/src/utils/format-threads.js +8 -0
  88. package/src/utils/formatters.js +18 -0
  89. package/src/utils/identity.js +12 -0
  90. package/src/utils/index.js +15 -0
  91. package/src/utils/network.js +12 -0
  92. package/src/utils/parsing.js +11 -0
  93. package/src/utils.js +3 -0
  94. package/test/config.env.example +30 -0
  95. package/test/data/shareAttach.js +146 -0
  96. package/test/data/something.mov +0 -0
  97. package/test/data/test.png +0 -0
  98. package/test/data/test.txt +7 -0
  99. package/test/example-appstate.txt +11 -0
  100. package/test/integration/actions.appstate.integration.test.js +233 -0
  101. package/test/integration/api.integration.test.js +387 -0
  102. package/test/integration/env-test-config.js +46 -0
  103. package/test/integration/login.appstate.integration.test.js +47 -0
  104. package/test/integration/page.integration.test.js +139 -0
  105. package/test/jest.setup.js +54 -0
  106. package/test/unit/actions/actions.basic.test.js +116 -0
  107. package/test/unit/actions/actions.registry.test.js +36 -0
  108. package/test/unit/index/index.test.js +109 -0
  109. package/test/unit/utils/base-parts/auth.test.js +92 -0
  110. package/test/unit/utils/base-parts/formatters.test.js +53 -0
  111. package/test/unit/utils/base-parts/identity.test.js +43 -0
  112. package/test/unit/utils/base-parts/parsing.test.js +38 -0
  113. package/test/unit/utils/base-parts/type.test.js +23 -0
  114. package/test/unit/utils/base.test.js +35 -0
  115. package/vangbanlanhat-fca-unofficial-1.4.2.tgz +0 -0
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+
3
+ function padZeros(val, len) {
4
+ val = String(val);
5
+ len = len || 2;
6
+ while (val.length < len) val = "0" + val;
7
+ return val;
8
+ }
9
+
10
+ function generateThreadingID(clientID) {
11
+ var k = Date.now();
12
+ var l = Math.floor(Math.random() * 4294967295);
13
+ var m = clientID;
14
+ return "<" + k + ":" + l + "-" + m + "@mail.projektitan.com>";
15
+ }
16
+
17
+ function binaryToDecimal(data) {
18
+ var ret = "";
19
+ while (data !== "0") {
20
+ var end = 0;
21
+ var fullName = "";
22
+ var i = 0;
23
+ for (; i < data.length; i++) {
24
+ end = 2 * end + parseInt(data[i], 10);
25
+ if (end >= 10) {
26
+ fullName += "1";
27
+ end -= 10;
28
+ } else {
29
+ fullName += "0";
30
+ }
31
+ }
32
+ ret = end.toString() + ret;
33
+ data = fullName.slice(fullName.indexOf("1"));
34
+ }
35
+ return ret;
36
+ }
37
+
38
+ function generateOfflineThreadingID() {
39
+ var ret = Date.now();
40
+ var value = Math.floor(Math.random() * 4294967295);
41
+ var str = ("0000000000000000000000" + value.toString(2)).slice(-22);
42
+ var msgs = ret.toString(2) + str;
43
+ return binaryToDecimal(msgs);
44
+ }
45
+
46
+ var h;
47
+ var i = {};
48
+ var j = {
49
+ _: "%",
50
+ A: "%2",
51
+ B: "000",
52
+ C: "%7d",
53
+ D: "%7b%22",
54
+ E: "%2c%22",
55
+ F: "%22%3a",
56
+ G: "%2c%22ut%22%3a1",
57
+ H: "%2c%22bls%22%3a",
58
+ I: "%2c%22n%22%3a%22%",
59
+ J: "%22%3a%7b%22i%22%3a0%7d",
60
+ K: "%2c%22pt%22%3a0%2c%22vis%22%3a",
61
+ L: "%2c%22ch%22%3a%7b%22h%22%3a%22",
62
+ M: "%7b%22v%22%3a2%2c%22time%22%3a1",
63
+ N: ".channel%22%2c%22sub%22%3a%5b",
64
+ O: "%2c%22sb%22%3a1%2c%22t%22%3a%5b",
65
+ P: "%2c%22ud%22%3a100%2c%22lc%22%3a0",
66
+ Q: "%5d%2c%22f%22%3anull%2c%22uct%22%3a",
67
+ R: ".channel%22%2c%22sub%22%3a%5b1%5d",
68
+ S: "%22%2c%22m%22%3a0%7d%2c%7b%22i%22%3a",
69
+ T: "%2c%22blc%22%3a1%2c%22snd%22%3a1%2c%22ct%22%3a",
70
+ U: "%2c%22blc%22%3a0%2c%22snd%22%3a1%2c%22ct%22%3a",
71
+ V: "%2c%22blc%22%3a0%2c%22snd%22%3a0%2c%22ct%22%3a",
72
+ W: "%2c%22s%22%3a0%2c%22blo%22%3a0%7d%2c%22bl%22%3a%7b%22ac%22%3a",
73
+ X: "%2c%22ri%22%3a0%7d%2c%22state%22%3a%7b%22p%22%3a0%2c%22ut%22%3a1",
74
+ Y:
75
+ "%2c%22pt%22%3a0%2c%22vis%22%3a1%2c%22bls%22%3a0%2c%22blc%22%3a0%2c%22snd%22%3a1%2c%22ct%22%3a",
76
+ Z:
77
+ "%2c%22sb%22%3a1%2c%22t%22%3a%5b%5d%2c%22f%22%3anull%2c%22uct%22%3a0%2c%22s%22%3a0%2c%22blo%22%3a0%7d%2c%22bl%22%3a%7b%22ac%22%3a"
78
+ };
79
+ (function () {
80
+ var l = [];
81
+ for (var m in j) {
82
+ i[j[m]] = m;
83
+ l.push(j[m]);
84
+ }
85
+ l.reverse();
86
+ h = new RegExp(l.join("|"), "g");
87
+ })();
88
+
89
+ function presenceEncode(str) {
90
+ return encodeURIComponent(str)
91
+ .replace(/([_A-Z])|%../g, function (m, n) {
92
+ return n ? "%" + n.charCodeAt(0).toString(16) : m;
93
+ })
94
+ .toLowerCase()
95
+ .replace(h, function (m) {
96
+ return i[m];
97
+ });
98
+ }
99
+
100
+ function generatePresence(userID) {
101
+ var time = Date.now();
102
+ return (
103
+ "E" +
104
+ presenceEncode(
105
+ JSON.stringify({
106
+ v: 3,
107
+ time: parseInt(time / 1000, 10),
108
+ user: userID,
109
+ state: {
110
+ ut: 0,
111
+ t2: [],
112
+ lm2: null,
113
+ uct2: time,
114
+ tr: null,
115
+ tw: Math.floor(Math.random() * 4294967295) + 1,
116
+ at: time
117
+ },
118
+ ch: {
119
+ ["p_" + userID]: 0
120
+ }
121
+ })
122
+ )
123
+ );
124
+ }
125
+
126
+ function generateAccessiblityCookie() {
127
+ var time = Date.now();
128
+ return encodeURIComponent(
129
+ JSON.stringify({
130
+ sr: 0,
131
+ "sr-ts": time,
132
+ jk: 0,
133
+ "jk-ts": time,
134
+ kb: 0,
135
+ "kb-ts": time,
136
+ hcm: 0,
137
+ "hcm-ts": time
138
+ })
139
+ );
140
+ }
141
+
142
+ function getGUID() {
143
+ var sectionLength = Date.now();
144
+ var id = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
145
+ var r = Math.floor((sectionLength + Math.random() * 16) % 16);
146
+ sectionLength = Math.floor(sectionLength / 16);
147
+ return (c == "x" ? r : (r & 7) | 8).toString(16);
148
+ });
149
+ return id;
150
+ }
151
+
152
+ function getSignatureID() {
153
+ return Math.floor(Math.random() * 2147483648).toString(16);
154
+ }
155
+
156
+ function generateTimestampRelative() {
157
+ var d = new Date();
158
+ return d.getHours() + ":" + padZeros(d.getMinutes());
159
+ }
160
+
161
+ module.exports = {
162
+ generateThreadingID,
163
+ generateOfflineThreadingID,
164
+ generatePresence,
165
+ generateAccessiblityCookie,
166
+ getGUID,
167
+ getSignatureID,
168
+ generateTimestampRelative
169
+ };
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+
3
+ var bluebird = require("bluebird");
4
+ var request = bluebird.promisify(require("request").defaults({ jar: true }));
5
+ var stream = require("stream");
6
+ var getType = require("./type").getType;
7
+
8
+ function setProxy(url) {
9
+ if (typeof url == undefined) {
10
+ return request = bluebird.promisify(require("request").defaults({ jar: true }));
11
+ }
12
+ return request = bluebird.promisify(require("request").defaults({
13
+ jar: true,
14
+ proxy: url
15
+ }));
16
+ }
17
+
18
+ function getHeaders(url, options, ctx, customHeader) {
19
+ var host;
20
+ try {
21
+ host = new URL(url).hostname;
22
+ } catch (_) {
23
+ host = url.replace("https://", "").split("/")[0];
24
+ }
25
+
26
+ var userAgent = customHeader && customHeader.customUserAgent
27
+ ? customHeader.customUserAgent
28
+ : options.userAgent;
29
+
30
+ var headers = {
31
+ host: host,
32
+ accept: "*/*",
33
+ "accept-language": "vi",
34
+ referer: "https://www.facebook.com/",
35
+ origin: "https://www.facebook.com",
36
+ connection: "keep-alive",
37
+ "Sec-Fetch-Site": "same-origin",
38
+ "Sec-Fetch-Mode": "cors",
39
+ "Sec-Fetch-Dest": "empty",
40
+ "Sec-Fetch-User": "?1",
41
+ "User-Agent": userAgent
42
+ };
43
+ if (customHeader) {
44
+ Object.assign(headers, customHeader);
45
+ if (customHeader.noRef) {
46
+ delete headers.referer;
47
+ }
48
+ delete headers.customUserAgent;
49
+ delete headers.noRef;
50
+ }
51
+ if (ctx && ctx.region) {
52
+ headers["X-MSGR-Region"] = ctx.region;
53
+ }
54
+
55
+ headers["x-asbd-id"] = (ctx && ctx.globalOptions && ctx.globalOptions.asbdID)
56
+ ? String(ctx.globalOptions.asbdID)
57
+ : "359341";
58
+
59
+ if (ctx && ctx.lsd) {
60
+ headers["x-fb-lsd"] = ctx.lsd;
61
+ }
62
+
63
+ return headers;
64
+ }
65
+
66
+ function isReadableStream(obj) {
67
+ return (
68
+ obj instanceof stream.Stream &&
69
+ (getType(obj._read) === "Function" ||
70
+ getType(obj._read) === "AsyncFunction") &&
71
+ getType(obj._readableState) === "Object"
72
+ );
73
+ }
74
+
75
+ function get(url, jar, qs, options, ctx, customHeader) {
76
+ if (getType(qs) === "Object") {
77
+ for (var prop in qs) {
78
+ if (Object.prototype.hasOwnProperty.call(qs, prop) && getType(qs[prop]) === "Object") {
79
+ qs[prop] = JSON.stringify(qs[prop]);
80
+ }
81
+ }
82
+ }
83
+ var op = {
84
+ headers: getHeaders(url, options, ctx, customHeader),
85
+ timeout: 60000,
86
+ qs: qs,
87
+ url: url,
88
+ method: "GET",
89
+ jar: jar,
90
+ gzip: true
91
+ };
92
+
93
+ return request(op).then(function (res) {
94
+ return res[0];
95
+ });
96
+ }
97
+
98
+ function post(url, jar, form, options, ctx, customHeader) {
99
+ var headers = getHeaders(url, options, ctx, customHeader);
100
+ if (!headers["content-type"] && !headers["Content-Type"]) {
101
+ headers["content-type"] = "application/x-www-form-urlencoded";
102
+ }
103
+
104
+ var op = {
105
+ headers: headers,
106
+ timeout: 60000,
107
+ url: url,
108
+ method: "POST",
109
+ form: form,
110
+ jar: jar,
111
+ gzip: true
112
+ };
113
+
114
+ return request(op).then(function (res) {
115
+ return res[0];
116
+ });
117
+ }
118
+
119
+ function postFormData(url, jar, form, qs, options, ctx) {
120
+ var headers = getHeaders(url, options, ctx);
121
+ var timeout = 60000;
122
+
123
+ if (typeof url === "string" && url.indexOf("/ajax/mercury/upload.php") !== -1) {
124
+ var customUploadTimeout = ctx && ctx.globalOptions
125
+ ? Number(ctx.globalOptions.uploadAttachmentTimeout)
126
+ : NaN;
127
+
128
+ if (!isNaN(customUploadTimeout) && customUploadTimeout > 0) {
129
+ timeout = customUploadTimeout;
130
+ } else {
131
+ timeout = 180000;
132
+ }
133
+ }
134
+
135
+ var op = {
136
+ headers: headers,
137
+ timeout: timeout,
138
+ url: url,
139
+ method: "POST",
140
+ formData: form,
141
+ qs: qs,
142
+ jar: jar,
143
+ gzip: true
144
+ };
145
+
146
+ return request(op).then(function (res) {
147
+ return res[0];
148
+ });
149
+ }
150
+
151
+ module.exports = {
152
+ setProxy,
153
+ getHeaders,
154
+ isReadableStream,
155
+ get,
156
+ post,
157
+ postFormData,
158
+ getJar: request.jar
159
+ };
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+
3
+ function getFrom(str, startToken, endToken) {
4
+ var start = str.indexOf(startToken) + startToken.length;
5
+ if (start < startToken.length) return "";
6
+
7
+ var lastHalf = str.substring(start);
8
+ var end = lastHalf.indexOf(endToken);
9
+ if (end === -1) {
10
+ throw Error(
11
+ "Could not find endTime `" + endToken + "` in the given string."
12
+ );
13
+ }
14
+ return lastHalf.substring(0, end);
15
+ }
16
+
17
+ function makeParsable(html) {
18
+ var withoutForLoop = html.replace(/for\s*\(\s*;\s*;\s*\)\s*;\s*/, "");
19
+ var maybeMultipleObjects = withoutForLoop.split(/\}\r\n *\{/);
20
+ if (maybeMultipleObjects.length === 1) return maybeMultipleObjects;
21
+
22
+ return "[" + maybeMultipleObjects.join("},{") + "]";
23
+ }
24
+
25
+ function arrayToObject(arr, getKey, getValue) {
26
+ return arr.reduce(function (acc, val) {
27
+ acc[getKey(val)] = getValue(val);
28
+ return acc;
29
+ }, {});
30
+ }
31
+
32
+ function arrToForm(form) {
33
+ return arrayToObject(
34
+ form,
35
+ function (v) {
36
+ return v.name;
37
+ },
38
+ function (v) {
39
+ return v.val;
40
+ }
41
+ );
42
+ }
43
+
44
+ function decodeClientPayload(payload) {
45
+ return JSON.parse(String.fromCharCode.apply(null, payload));
46
+ }
47
+
48
+ module.exports = {
49
+ getFrom,
50
+ makeParsable,
51
+ arrToForm,
52
+ decodeClientPayload
53
+ };
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ function getType(obj) {
4
+ return Object.prototype.toString.call(obj).slice(8, -1);
5
+ }
6
+
7
+ module.exports = {
8
+ getType
9
+ };
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ var type = require("./base-parts/type");
4
+ var network = require("./base-parts/network");
5
+ var parsing = require("./base-parts/parsing");
6
+ var identity = require("./base-parts/identity");
7
+ var formatters = require("./base-parts/formatters");
8
+ var auth = require("./base-parts/auth");
9
+
10
+ module.exports = Object.assign(
11
+ {},
12
+ network,
13
+ identity,
14
+ parsing,
15
+ auth,
16
+ formatters,
17
+ type
18
+ );
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ var base = require("./base");
4
+
5
+ module.exports = {
6
+ makeDefaults: base.makeDefaults,
7
+ parseAndCheckLogin: base.parseAndCheckLogin,
8
+ saveCookies: base.saveCookies,
9
+ getAppState: base.getAppState
10
+ };
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ var base = require("./base");
4
+
5
+ module.exports = {
6
+ _formatAttachment: base._formatAttachment
7
+ };
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ var base = require("./base");
4
+
5
+ module.exports = {
6
+ formatCookie: base.formatCookie,
7
+ formatDate: base.formatDate
8
+ };
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ var base = require("./base");
4
+
5
+ module.exports = {
6
+ formatDeltaEvent: base.formatDeltaEvent,
7
+ formatDeltaMessage: base.formatDeltaMessage,
8
+ formatDeltaReadReceipt: base.formatDeltaReadReceipt,
9
+ formatReadReceipt: base.formatReadReceipt,
10
+ formatRead: base.formatRead
11
+ };
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ var base = require("./base");
4
+
5
+ module.exports = {
6
+ formatHistoryMessage: base.formatHistoryMessage,
7
+ formatMessage: base.formatMessage,
8
+ formatTyp: base.formatTyp,
9
+ getAdminTextMessageType: base.getAdminTextMessageType
10
+ };
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ var base = require("./base");
4
+
5
+ module.exports = {
6
+ formatProxyPresence: base.formatProxyPresence,
7
+ formatPresence: base.formatPresence,
8
+ generateAccessiblityCookie: base.generateAccessiblityCookie
9
+ };
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ var base = require("./base");
4
+
5
+ module.exports = {
6
+ formatID: base.formatID,
7
+ formatThread: base.formatThread
8
+ };
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ var attachments = require("./format-attachments");
4
+ var messages = require("./format-messages");
5
+ var events = require("./format-events");
6
+ var threads = require("./format-threads");
7
+ var presence = require("./format-presence");
8
+ var core = require("./format-core");
9
+
10
+ module.exports = Object.assign(
11
+ {},
12
+ attachments,
13
+ messages,
14
+ events,
15
+ threads,
16
+ presence,
17
+ core
18
+ );
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ var base = require("./base");
4
+
5
+ module.exports = {
6
+ generateThreadingID: base.generateThreadingID,
7
+ generateOfflineThreadingID: base.generateOfflineThreadingID,
8
+ getGUID: base.getGUID,
9
+ getSignatureID: base.getSignatureID,
10
+ generateTimestampRelative: base.generateTimestampRelative,
11
+ generatePresence: base.generatePresence
12
+ };
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ var fs = require("fs");
4
+ var path = require("path");
5
+
6
+ var moduleFiles = fs
7
+ .readdirSync(__dirname)
8
+ .filter(function (name) {
9
+ return name.endsWith(".js") && name !== "index.js";
10
+ })
11
+ .sort();
12
+
13
+ module.exports = moduleFiles.reduce(function (acc, fileName) {
14
+ return Object.assign(acc, require(path.join(__dirname, fileName)));
15
+ }, {});
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ var base = require("./base");
4
+
5
+ module.exports = {
6
+ isReadableStream: base.isReadableStream,
7
+ get: base.get,
8
+ post: base.post,
9
+ postFormData: base.postFormData,
10
+ getJar: base.getJar,
11
+ setProxy: base.setProxy
12
+ };
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ var base = require("./base");
4
+
5
+ module.exports = {
6
+ getFrom: base.getFrom,
7
+ makeParsable: base.makeParsable,
8
+ arrToForm: base.arrToForm,
9
+ getType: base.getType,
10
+ decodeClientPayload: base.decodeClientPayload
11
+ };
package/src/utils.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+
3
+ module.exports = require("./utils/index.js");
@@ -0,0 +1,30 @@
1
+ # Copy this file to test/config.env and fill in real values.
2
+ # Integration tests auto-load test/config.env via dotenv.
3
+ # Shell env vars still take precedence if you need overrides.
4
+
5
+ # Login email for credential-based integration tests.
6
+ FCA_TEST_EMAIL=example@test.com
7
+
8
+ # Login password for credential-based integration tests.
9
+ FCA_TEST_PASSWORD=qwerty
10
+
11
+ # Expected current account ID after login (used for identity assertions).
12
+ FCA_TEST_USER_ID=00000000000000
13
+
14
+ # Comma-separated user thread IDs for direct-message send tests.
15
+ # The test will try these IDs in order.
16
+ FCA_TEST_USER_IDS=11111111111111,22222222222222
17
+
18
+ # Group thread ID used by group send-message tests.
19
+ FCA_TEST_GROUP_ID=3333333333333333
20
+
21
+ # E2EE direct chat target (numeric ID or full chat JID).
22
+ # If numeric, integration tests convert to <id>@msgr.
23
+ E2EE_TEST_USER_ID=1111111111111111
24
+
25
+ # E2EE group chat target (numeric ID or full chat JID).
26
+ # If numeric, integration tests convert to <id>@g.us.
27
+ E2EE_TEST_GROUP_ID=2222222222222222
28
+
29
+ # E2EE send tests require inbound activity from E2EE_TEST_USER_ID before sending.
30
+ # Send a message from this user to bot first to warm up session.