@cexy/hoonfca 1.0.0 → 1.0.1

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 (188) hide show
  1. package/LICENSE +3 -0
  2. package/README.md +451 -43
  3. package/examples/login-with-cookies.js +102 -0
  4. package/examples/verify.js +70 -0
  5. package/index.js +1 -466
  6. package/package.json +98 -6
  7. package/src/apis/addExternalModule.js +24 -0
  8. package/src/apis/addUserToGroup.js +108 -0
  9. package/src/apis/changeAdminStatus.js +148 -0
  10. package/src/apis/changeArchivedStatus.js +61 -0
  11. package/src/apis/changeAvatar.js +103 -0
  12. package/src/apis/changeBio.js +69 -0
  13. package/src/apis/changeBlockedStatus.js +54 -0
  14. package/src/apis/changeGroupImage.js +136 -0
  15. package/src/apis/changeThreadColor.js +116 -0
  16. package/src/{changeThreadEmoji.js → apis/changeThreadEmoji.js} +7 -8
  17. package/src/apis/comment.js +207 -0
  18. package/src/apis/createAITheme.js +129 -0
  19. package/src/apis/createNewGroup.js +79 -0
  20. package/src/apis/createPoll.js +73 -0
  21. package/src/apis/deleteMessage.js +44 -0
  22. package/src/apis/deleteThread.js +52 -0
  23. package/src/apis/e2ee.js +17 -0
  24. package/src/apis/editMessage.js +70 -0
  25. package/src/apis/emoji.js +124 -0
  26. package/src/apis/fetchThemeData.js +82 -0
  27. package/src/apis/follow.js +81 -0
  28. package/src/apis/forwardMessage.js +52 -0
  29. package/src/apis/friend.js +243 -0
  30. package/src/apis/gcmember.js +122 -0
  31. package/src/apis/gcname.js +123 -0
  32. package/src/apis/gcrule.js +119 -0
  33. package/src/apis/getAccess.js +111 -0
  34. package/src/apis/getBotInfo.js +88 -0
  35. package/src/apis/getBotInitialData.js +43 -0
  36. package/src/apis/getFriendsList.js +79 -0
  37. package/src/apis/getMessage.js +423 -0
  38. package/src/apis/getTheme.js +95 -0
  39. package/src/apis/getThemeInfo.js +116 -0
  40. package/src/apis/getThreadHistory.js +239 -0
  41. package/src/apis/getThreadInfo.js +267 -0
  42. package/src/apis/getThreadList.js +232 -0
  43. package/src/apis/getThreadPictures.js +58 -0
  44. package/src/apis/getUserID.js +117 -0
  45. package/src/apis/getUserInfo.js +513 -0
  46. package/src/apis/getUserInfoV2.js +146 -0
  47. package/src/apis/handleMessageRequest.js +50 -0
  48. package/src/apis/httpGet.js +63 -0
  49. package/src/apis/httpPost.js +89 -0
  50. package/src/apis/httpPostFormData.js +69 -0
  51. package/src/apis/listenMqtt.js +1236 -0
  52. package/src/apis/listenSpeed.js +179 -0
  53. package/src/apis/logout.js +87 -0
  54. package/src/apis/markAsDelivered.js +47 -0
  55. package/src/apis/markAsRead.js +99 -0
  56. package/src/apis/markAsReadAll.js +40 -0
  57. package/src/apis/markAsSeen.js +70 -0
  58. package/src/apis/mqttDeltaValue.js +278 -0
  59. package/src/apis/muteThread.js +45 -0
  60. package/src/apis/nickname.js +132 -0
  61. package/src/apis/notes.js +163 -0
  62. package/src/apis/pinMessage.js +150 -0
  63. package/src/apis/produceMetaTheme.js +180 -0
  64. package/src/apis/realtime.js +182 -0
  65. package/src/apis/removeUserFromGroup.js +117 -0
  66. package/src/apis/resolvePhotoUrl.js +58 -0
  67. package/src/apis/searchForThread.js +154 -0
  68. package/src/apis/sendMessage.js +354 -0
  69. package/src/apis/sendMessageMqtt.js +249 -0
  70. package/src/apis/sendTypingIndicator.js +91 -0
  71. package/src/apis/setMessageReaction.js +27 -0
  72. package/src/apis/setMessageReactionMqtt.js +61 -0
  73. package/src/apis/setThreadTheme.js +260 -0
  74. package/src/apis/setThreadThemeMqtt.js +94 -0
  75. package/src/apis/share.js +107 -0
  76. package/src/apis/shareContact.js +66 -0
  77. package/src/apis/stickers.js +257 -0
  78. package/src/apis/story.js +181 -0
  79. package/src/apis/theme.js +233 -0
  80. package/src/apis/unfriend.js +47 -0
  81. package/src/apis/unsendMessage.js +17 -0
  82. package/src/engine/client.js +92 -0
  83. package/src/engine/models/buildAPI.js +152 -0
  84. package/src/engine/models/loginHelper.js +519 -0
  85. package/src/engine/models/setOptions.js +88 -0
  86. package/src/security/e2ee.js +109 -0
  87. package/src/types/index.d.ts +498 -0
  88. package/src/utils/antiSuspension.js +506 -0
  89. package/src/utils/auth-helpers.js +149 -0
  90. package/src/utils/autoReLogin.js +336 -0
  91. package/src/utils/axios.js +436 -0
  92. package/src/utils/cache.js +54 -0
  93. package/src/utils/clients.js +282 -0
  94. package/src/utils/constants.js +410 -0
  95. package/src/utils/formatters/data/formatAttachment.js +370 -0
  96. package/src/utils/formatters/data/formatDelta.js +109 -0
  97. package/src/utils/formatters/index.js +159 -0
  98. package/src/utils/formatters/value/formatCookie.js +91 -0
  99. package/src/utils/formatters/value/formatDate.js +36 -0
  100. package/src/utils/formatters/value/formatID.js +16 -0
  101. package/src/utils/formatters.js +1373 -0
  102. package/src/utils/headers.js +230 -0
  103. package/src/utils/index.js +153 -0
  104. package/src/utils/monitoring.js +333 -0
  105. package/src/utils/rateLimiter.js +319 -0
  106. package/src/utils/tokenRefresh.js +657 -0
  107. package/src/utils/user-agents.js +238 -0
  108. package/src/utils/validation.js +157 -0
  109. package/replit.nix +0 -3
  110. package/src/addExternalModule.js +0 -25
  111. package/src/addUserToGroup.js +0 -98
  112. package/src/changeAdminStatus.js +0 -98
  113. package/src/changeArchivedStatus.js +0 -51
  114. package/src/changeAvatar.js +0 -89
  115. package/src/changeBio.js +0 -74
  116. package/src/changeBlockedStatus.js +0 -45
  117. package/src/changeBlockedStatusMqtt.js +0 -65
  118. package/src/changeCover.js +0 -92
  119. package/src/changeGroupImage.js +0 -110
  120. package/src/changeName.js +0 -106
  121. package/src/changeNickname.js +0 -58
  122. package/src/changeThreadColor.js +0 -62
  123. package/src/changeUsername.js +0 -80
  124. package/src/createCommentPost.js +0 -196
  125. package/src/createNewGroup.js +0 -81
  126. package/src/createPoll.js +0 -64
  127. package/src/createPost.js +0 -285
  128. package/src/data/getThreadInfo.json +0 -1
  129. package/src/deleteMessage.js +0 -55
  130. package/src/deleteThread.js +0 -55
  131. package/src/editMessage.js +0 -66
  132. package/src/follow.js +0 -71
  133. package/src/forwardAttachment.js +0 -57
  134. package/src/getAccess.js +0 -130
  135. package/src/getAvatarUser.js +0 -88
  136. package/src/getBotInitialData.js +0 -59
  137. package/src/getCtx.js +0 -5
  138. package/src/getCurrentUserID.js +0 -5
  139. package/src/getEmojiUrl.js +0 -18
  140. package/src/getFriendsList.js +0 -81
  141. package/src/getMessage.js +0 -827
  142. package/src/getOptions.js +0 -5
  143. package/src/getRegion.js +0 -7
  144. package/src/getThreadHistory.js +0 -496
  145. package/src/getThreadHistoryDeprecated.js +0 -95
  146. package/src/getThreadInfo.js +0 -194
  147. package/src/getThreadInfoDeprecated.js +0 -77
  148. package/src/getThreadList.js +0 -219
  149. package/src/getThreadListDeprecated.js +0 -86
  150. package/src/getThreadPictures.js +0 -85
  151. package/src/getUserID.js +0 -67
  152. package/src/getUserInfo.js +0 -89
  153. package/src/handleFriendRequest.js +0 -56
  154. package/src/handleMessageRequest.js +0 -65
  155. package/src/httpGet.js +0 -53
  156. package/src/httpPost.js +0 -53
  157. package/src/httpPostFormData.js +0 -58
  158. package/src/listenMqtt.js +0 -683
  159. package/src/listenNotification.js +0 -96
  160. package/src/logout.js +0 -77
  161. package/src/markAsDelivered.js +0 -53
  162. package/src/markAsRead.js +0 -74
  163. package/src/markAsReadAll.js +0 -46
  164. package/src/markAsSeen.js +0 -57
  165. package/src/muteThread.js +0 -49
  166. package/src/pinMessage.js +0 -60
  167. package/src/refreshFb_dtsg.js +0 -75
  168. package/src/removeUserFromGroup.js +0 -59
  169. package/src/resolvePhotoUrl.js +0 -47
  170. package/src/searchForThread.js +0 -55
  171. package/src/searchStickers.js +0 -59
  172. package/src/sendMessage.js +0 -444
  173. package/src/sendMessageMqtt.js +0 -326
  174. package/src/sendTypingIndicator.js +0 -54
  175. package/src/setMessageReaction.js +0 -126
  176. package/src/setMessageReactionMqtt.js +0 -74
  177. package/src/setPostReaction.js +0 -103
  178. package/src/setProfileGuard.js +0 -66
  179. package/src/setStoryReaction.js +0 -97
  180. package/src/setTitle.js +0 -100
  181. package/src/shareContact.js +0 -101
  182. package/src/shareLink.js +0 -105
  183. package/src/stopListenMqtt.js +0 -47
  184. package/src/threadColors.js +0 -119
  185. package/src/unfriend.js +0 -58
  186. package/src/unsendMessage.js +0 -51
  187. package/src/uploadAttachment.js +0 -98
  188. package/utils.js +0 -919
package/src/getAccess.js DELETED
@@ -1,130 +0,0 @@
1
- "use strict";
2
-
3
- const utils = require("../utils");
4
-
5
- module.exports = function (defaultFuncs, api, ctx) {
6
- return function getAccess(authCode = "", callback) {
7
- let cb;
8
- const url = "https://business.facebook.com/";
9
- const Referer = url + "security/twofactor/reauth/?twofac_next=" + encodeURIComponent(url + "content_management") + "&type=avoid_bypass&app_id=0&save_device=0";
10
-
11
- const rt = new Promise((resolve, reject) => {
12
- cb = (error, token) => (token ? resolve(token) : reject(error));
13
- });
14
-
15
- // ইনপুট ওভারলোড হ্যান্ডেল করা হচ্ছে
16
- if (typeof authCode === "function") {
17
- callback = authCode;
18
- authCode = "";
19
- }
20
- if (typeof callback === "function") {
21
- cb = callback;
22
- }
23
-
24
- // অলরেডি টোকেন থাকলে নতুন করে রিকোয়েস্ট না পাঠিয়ে সরাসরি রিটার্ন করা হচ্ছে
25
- if (ctx.access_token) {
26
- cb(null, ctx.access_token);
27
- return rt;
28
- }
29
-
30
- utils
31
- .get(url + "content_management", ctx.jar, null, ctx.globalOptions, null, {
32
- noRef: true,
33
- Origin: url,
34
- })
35
- .then((res) => {
36
- const html = res.body;
37
- return utils.getFrom(html, '["LSD",[],{"token":"', '"}');
38
- })
39
- .then((lsd) => {
40
-
41
- // ২FA কোড সাবমিট করার ইন্টারনাল হেল্পার ফাংশন
42
- function submitCode(code) {
43
- let pCb;
44
- const rtPromise = new Promise((resolve) => {
45
- pCb = (error, token) => resolve(cb(error, token));
46
- });
47
-
48
- if (typeof code !== "string") {
49
- pCb({
50
- error: "submitCode",
51
- lerror: "code must be string",
52
- continue: submitCode,
53
- });
54
- return rtPromise;
55
- }
56
-
57
- defaultFuncs
58
- .post(
59
- url + "security/twofactor/reauth/enter/",
60
- ctx.jar,
61
- {
62
- approvals_code: code,
63
- save_device: true,
64
- lsd,
65
- },
66
- ctx.globalOptions,
67
- null,
68
- { Referer, Origin: url }
69
- )
70
- .then((res) => {
71
- const responseText = res.body.split(";").pop() || "{}";
72
- const { payload } = JSON.parse(responseText);
73
-
74
- if (payload && !payload.codeConfirmed) {
75
- throw {
76
- error: "submitCode",
77
- lerror: payload.message,
78
- continue: submitCode,
79
- };
80
- }
81
- return;
82
- })
83
- .then(() => {
84
- return utils.get(url + "content_management", ctx.jar, null, ctx.globalOptions, null, { noRef: true });
85
- })
86
- .then((res) => {
87
- const html = res.body;
88
- const tokenExec = /"accessToken":"(\S+)","clientID":/g.exec(html);
89
- return [html, tokenExec];
90
- })
91
- .then((res) => {
92
- if (!res[1]) {
93
- throw {
94
- error: "token-undefined",
95
- htmlData: res[0],
96
- };
97
- }
98
- ctx.access_token = res[1][1];
99
- return pCb(null, res[1][1]);
100
- })
101
- .catch((err) => {
102
- utils.error("getAccess", err.error || err);
103
- return pCb(err);
104
- });
105
-
106
- return rtPromise;
107
- }
108
-
109
- const codeStr = authCode.toString();
110
- if (codeStr.length === 6 && !isNaN(codeStr)) {
111
- submitCode(codeStr);
112
- } else if (typeof callback === "function") {
113
- throw {
114
- error: "submitCode",
115
- continue: submitCode,
116
- };
117
- } else {
118
- throw {
119
- error: "authentication code must be string or number or callback must be a function to continue",
120
- };
121
- }
122
- })
123
- .catch((err) => {
124
- utils.error("getAccess", typeof callback === "function" ? err.error || err : err);
125
- return cb(err);
126
- });
127
-
128
- return rt;
129
- };
130
- };
@@ -1,88 +0,0 @@
1
- "use strict";
2
-
3
- const utils = require("../utils");
4
-
5
- module.exports = function (defaultFuncs, api, ctx) {
6
-
7
- // ইন্টারনাল হেল্পার ফাংশন: ইউজারের অ্যাভাটার ইউআরএল ফেচ করা
8
- function handleAvatar(userIDs, height, width) {
9
- let cb;
10
- const rtPromise = new Promise((resolve, reject) => {
11
- cb = (error, data) => (data ? resolve(data) : reject(error));
12
- });
13
-
14
- // map() ব্যবহার করে প্রতিটি ইউজারের জন্য গ্রাফ এপিআই রিকোয়েস্ট প্রমিজ তৈরি করা হচ্ছে
15
- const uploads = userIDs.map((v) => {
16
- return defaultFuncs
17
- .get(`https://graph.facebook.com/${v}/picture?height=${height}&width=${width}&redirect=false&access_token=${ctx.access_token}`, ctx.jar)
18
- .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
19
- .then((res) => ({
20
- userID: v,
21
- url: res?.data?.url || null
22
- }))
23
- .catch((err) => {
24
- // বাগ ফিক্স: কোনো নির্দিষ্ট আইডি এরর খেলে সম্পূর্ণ চেইন ব্রেক না করে নাল রিটার্ন করবে
25
- utils.error("getAvatarUser [Internal]", `Failed to fetch avatar for ${v}: ${err.message || err}`);
26
- return { userID: v, url: null };
27
- });
28
- });
29
-
30
- // Promise.all এর মাধ্যমে সব রিকোয়েস্ট একসাথে এক্সিকিউট করা হচ্ছে
31
- Promise.all(uploads)
32
- .then((res) => {
33
- const resultObj = res.reduce((Obj, { userID, url }) => {
34
- if (url) Obj[userID] = url; // শুধু ভ্যালিড ইউআরএলগুলো অবজেক্টে যোগ হবে
35
- return Obj;
36
- }, {});
37
- return cb(null, resultObj);
38
- })
39
- .catch((err) => cb(err));
40
-
41
- return rtPromise;
42
- }
43
-
44
- return function getAvatarUser(userIDs, size = [1500, 1500], callback) {
45
- let cb;
46
- const rtPromise = new Promise((resolve, reject) => {
47
- cb = (err, res) => (res ? resolve(res) : reject(err));
48
- });
49
-
50
- // সাইজ প্যারামিটার ফরম্যাটিং ও ভ্যালিডেশন
51
- if (typeof size === "string" || typeof size === "number") {
52
- size = [size, size];
53
- } else if (Array.isArray(size) && size.length === 1) {
54
- size = [size[0], size[0]];
55
- }
56
-
57
- if (typeof size === "function") {
58
- callback = size;
59
- size = [1500, 1500];
60
- }
61
-
62
- if (typeof callback === "function") {
63
- cb = callback;
64
- }
65
-
66
- if (!Array.isArray(userIDs)) {
67
- userIDs = [userIDs];
68
- }
69
-
70
- const [height, width] = size;
71
-
72
- // অ্যাক্সেস টোকেন চেক (EAAB টোকেন ছাড়া গ্রাফ এপিআই কাজ করবে না)
73
- if (!ctx.access_token) {
74
- utils.error("getAvatarUser", "Cant get access_token");
75
- cb("Cant get access_token");
76
- return rtPromise;
77
- }
78
-
79
- handleAvatar(userIDs, height, width)
80
- .then((res) => cb(null, res))
81
- .catch((err) => {
82
- utils.error("getAvatarUser", err);
83
- return cb(err);
84
- });
85
-
86
- return rtPromise;
87
- };
88
- };
@@ -1,59 +0,0 @@
1
- "use strict";
2
-
3
- const utils = require("../utils");
4
-
5
- module.exports = (defaultFuncs, api, ctx) => {
6
- return function getAccountInfo(callback) {
7
- let resolveFunc = () => {};
8
- let rejectFunc = () => {};
9
- const returnPromise = new Promise((resolve, reject) => {
10
- resolveFunc = resolve;
11
- rejectFunc = reject;
12
- });
13
-
14
- if (!callback) {
15
- callback = (err, data) => {
16
- if (err) return rejectFunc(err);
17
- resolveFunc(data);
18
- };
19
- }
20
-
21
- utils.log("Fetching account info...");
22
-
23
- // ফেসবুক প্রোফাইল পেজ থেকে সোর্স কোড নিয়ে আসা হচ্ছে
24
- api.httpGet(`https://www.facebook.com/profile.php?id=${ctx.userID}`, null, {
25
- customUserAgent: utils.windowsUserAgent
26
- }, (err, data) => {
27
- // বাগ ফিক্স: অ্যাসিনক্রোনাস ব্লকে সরাসরি throw করার বদলে কলব্যাকে এরর পাঠানো হচ্ছে
28
- if (err) {
29
- return callback(err);
30
- }
31
-
32
- // সোর্স কোড থেকে CurrentUserInitialData ম্যাচ করা হচ্ছে
33
- const profileMatch = data.match(/"CurrentUserInitialData",\[\],\{(.*?)\},(.*?)\]/);
34
-
35
- if (profileMatch && profileMatch[1]) {
36
- try {
37
- const accountJson = JSON.parse(`{${profileMatch[1]}}`);
38
-
39
- // প্রপার্টি ফরম্যাটিং
40
- accountJson.name = accountJson.NAME;
41
- accountJson.uid = accountJson.USER_ID;
42
-
43
- delete accountJson.NAME;
44
- delete accountJson.USER_ID;
45
-
46
- return callback(null, { ...accountJson });
47
- } catch (parseError) {
48
- return callback(parseError);
49
- }
50
- } else {
51
- return callback(null, {
52
- error: "Something went wrong. Maybe its possible that it has a limitation due to spam requests. You can try again later."
53
- });
54
- }
55
- }, true);
56
-
57
- return returnPromise;
58
- };
59
- };
package/src/getCtx.js DELETED
@@ -1,5 +0,0 @@
1
- "use strict";
2
-
3
- module.exports = (defaultFuncs, api, ctx) => {
4
- return (str) => ctx?.[str];
5
- };
@@ -1,5 +0,0 @@
1
- "use strict";
2
-
3
- module.exports = (defaultFuncs, api, ctx) => {
4
- return () => ctx?.userID;
5
- };
@@ -1,18 +0,0 @@
1
- "use strict";
2
-
3
- module.exports = function () {
4
- return function getEmojiUrl(c, size, pixelRatio = "1.0") {
5
- const codePointHex = c.codePointAt(0).toString(16);
6
-
7
- const ending = `${pixelRatio}/${size}/${codePointHex}.png`;
8
-
9
- let base = 317426846;
10
- for (let i = 0; i < ending.length; i++) {
11
- base = (((base << 5) - base) + ending.charCodeAt(i)) | 0;
12
- }
13
-
14
- const hashed = ((base & 255) >>> 0).toString(16);
15
-
16
- return `https://static.xx.fbcdn.net/images/emoji.php/v8/z${hashed}/${ending}`;
17
- };
18
- };
@@ -1,81 +0,0 @@
1
- "use strict";
2
-
3
- const utils = require("../utils");
4
-
5
- // ফেসবুকের জেন্ডার কনস্ট্যান্টস ম্যাপিং
6
- const GENDERS = {
7
- 0: "unknown",
8
- 1: "female_singular",
9
- 2: "male_singular",
10
- 3: "female_singular_guess",
11
- 4: "male_singular_guess",
12
- 5: "mixed",
13
- 6: "neuter_singular",
14
- 7: "unknown_singular",
15
- 8: "female_plural",
16
- 9: "male_plural",
17
- 10: "neuter_plural",
18
- 11: "unknown_plural",
19
- };
20
-
21
- // ফ্রেন্ড লিস্টের ডেটা ফরম্যাট করার হেল্পার ফাংশন
22
- function formatData(obj) {
23
- return Object.keys(obj).map(key => {
24
- const user = obj[key];
25
- return {
26
- alternateName: user.alternateName,
27
- firstName: user.firstName,
28
- gender: GENDERS[user.gender] || "unknown",
29
- userID: utils.formatID(user.id.toString()),
30
- isFriend: !!user.is_friend, // ডাবল নেগেশন ব্যবহার করে ক্লিন ট্রু/ফলস কনভার্সন
31
- fullName: user.name,
32
- profilePicture: user.thumbSrc,
33
- type: user.type,
34
- profileUrl: user.uri,
35
- vanity: user.vanity,
36
- isBirthday: !!user.is_birthday,
37
- };
38
- });
39
- }
40
-
41
- module.exports = function (defaultFuncs, api, ctx) {
42
- return function getFriendsList(callback) {
43
- let resolveFunc = () => {};
44
- let rejectFunc = () => {};
45
- const returnPromise = new Promise((resolve, reject) => {
46
- resolveFunc = resolve;
47
- rejectFunc = reject;
48
- });
49
-
50
- if (!callback) {
51
- callback = (err, friendList) => {
52
- if (err) return rejectFunc(err);
53
- resolveFunc(friendList);
54
- };
55
- }
56
-
57
- defaultFuncs
58
- .postFormData(
59
- "https://www.facebook.com/chat/user_info_all",
60
- ctx.jar,
61
- {},
62
- { viewer: ctx.userID }
63
- )
64
- .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
65
- .then(resData => {
66
- if (!resData) {
67
- throw { error: "getFriendsList returned empty object." };
68
- }
69
- if (resData.error) {
70
- throw resData;
71
- }
72
- return callback(null, formatData(resData.payload));
73
- })
74
- .catch(err => {
75
- utils.error("getFriendsList", err);
76
- return callback(err);
77
- });
78
-
79
- return returnPromise;
80
- };
81
- };