@cexy/hoonfca 1.0.7 → 2.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 (191) hide show
  1. package/LICENSE +3 -0
  2. package/examples/login-with-cookies.js +102 -0
  3. package/examples/verify.js +70 -0
  4. package/index.js +2 -8
  5. package/package.json +82 -61
  6. package/src/{api/action → apis}/addExternalModule.js +24 -25
  7. package/src/apis/addUserToGroup.js +108 -0
  8. package/src/apis/changeAdminStatus.js +148 -0
  9. package/src/apis/changeArchivedStatus.js +61 -0
  10. package/src/apis/changeAvatar.js +103 -0
  11. package/src/apis/changeBio.js +69 -0
  12. package/src/apis/changeBlockedStatus.js +54 -0
  13. package/src/apis/changeGroupImage.js +136 -0
  14. package/src/apis/changeThreadColor.js +116 -0
  15. package/src/apis/changeThreadEmoji.js +53 -0
  16. package/src/apis/comment.js +207 -0
  17. package/src/apis/createAITheme.js +129 -0
  18. package/src/apis/createNewGroup.js +79 -0
  19. package/src/apis/createPoll.js +73 -0
  20. package/src/apis/deleteMessage.js +44 -0
  21. package/src/apis/deleteThread.js +52 -0
  22. package/src/apis/e2ee.js +17 -0
  23. package/src/apis/editMessage.js +70 -0
  24. package/src/apis/emoji.js +124 -0
  25. package/src/apis/fetchThemeData.js +82 -0
  26. package/src/apis/follow.js +81 -0
  27. package/src/apis/forwardMessage.js +52 -0
  28. package/src/apis/friend.js +243 -0
  29. package/src/apis/gcmember.js +122 -0
  30. package/src/apis/gcname.js +123 -0
  31. package/src/apis/gcrule.js +119 -0
  32. package/src/apis/getAccess.js +111 -0
  33. package/src/apis/getBotInfo.js +88 -0
  34. package/src/apis/getBotInitialData.js +43 -0
  35. package/src/apis/getFriendsList.js +79 -0
  36. package/src/apis/getMessage.js +423 -0
  37. package/src/apis/getTheme.js +95 -0
  38. package/src/apis/getThemeInfo.js +116 -0
  39. package/src/apis/getThreadHistory.js +239 -0
  40. package/src/apis/getThreadInfo.js +267 -0
  41. package/src/apis/getThreadList.js +232 -0
  42. package/src/apis/getThreadPictures.js +58 -0
  43. package/src/apis/getUserID.js +117 -0
  44. package/src/apis/getUserInfo.js +513 -0
  45. package/src/{api/users → apis}/getUserInfoV2.js +146 -134
  46. package/src/apis/handleMessageRequest.js +50 -0
  47. package/src/apis/httpGet.js +63 -0
  48. package/src/apis/httpPost.js +89 -0
  49. package/src/apis/httpPostFormData.js +69 -0
  50. package/src/apis/listenMqtt.js +1236 -0
  51. package/src/apis/listenSpeed.js +179 -0
  52. package/src/apis/logout.js +87 -0
  53. package/src/apis/markAsDelivered.js +47 -0
  54. package/src/{api/messaging → apis}/markAsRead.js +99 -88
  55. package/src/apis/markAsReadAll.js +40 -0
  56. package/src/apis/markAsSeen.js +70 -0
  57. package/src/apis/mqttDeltaValue.js +278 -0
  58. package/src/apis/muteThread.js +45 -0
  59. package/src/apis/nickname.js +132 -0
  60. package/src/apis/notes.js +163 -0
  61. package/src/apis/pinMessage.js +150 -0
  62. package/src/apis/produceMetaTheme.js +180 -0
  63. package/src/apis/realtime.js +182 -0
  64. package/src/apis/removeUserFromGroup.js +117 -0
  65. package/src/apis/resolvePhotoUrl.js +58 -0
  66. package/src/apis/searchForThread.js +154 -0
  67. package/src/apis/sendMessage.js +354 -0
  68. package/src/apis/sendMessageMqtt.js +249 -0
  69. package/src/apis/sendTypingIndicator.js +91 -0
  70. package/src/apis/setMessageReaction.js +27 -0
  71. package/src/apis/setMessageReactionMqtt.js +61 -0
  72. package/src/apis/setThreadTheme.js +260 -0
  73. package/src/apis/setThreadThemeMqtt.js +94 -0
  74. package/src/apis/share.js +107 -0
  75. package/src/apis/shareContact.js +66 -0
  76. package/src/apis/stickers.js +257 -0
  77. package/src/apis/story.js +181 -0
  78. package/src/apis/theme.js +233 -0
  79. package/src/apis/unfriend.js +47 -0
  80. package/src/apis/unsendMessage.js +17 -0
  81. package/src/engine/client.js +92 -0
  82. package/src/engine/models/buildAPI.js +152 -0
  83. package/src/engine/models/loginHelper.js +519 -0
  84. package/src/engine/models/setOptions.js +88 -0
  85. package/src/security/e2ee.js +109 -0
  86. package/src/types/index.d.ts +498 -0
  87. package/src/utils/antiSuspension.js +506 -0
  88. package/src/utils/auth-helpers.js +149 -0
  89. package/src/utils/autoReLogin.js +336 -0
  90. package/src/utils/axios.js +436 -0
  91. package/src/utils/cache.js +54 -0
  92. package/src/utils/clients.js +282 -0
  93. package/src/utils/constants.js +410 -23
  94. package/src/utils/formatters/data/formatAttachment.js +370 -0
  95. package/src/utils/formatters/data/formatDelta.js +109 -0
  96. package/src/utils/formatters/index.js +159 -0
  97. package/src/utils/formatters/value/formatCookie.js +91 -0
  98. package/src/utils/formatters/value/formatDate.js +36 -0
  99. package/src/utils/formatters/value/formatID.js +16 -0
  100. package/src/utils/formatters.js +1373 -0
  101. package/src/utils/headers.js +214 -99
  102. package/src/utils/index.js +153 -0
  103. package/src/utils/monitoring.js +333 -0
  104. package/src/utils/rateLimiter.js +319 -0
  105. package/src/utils/tokenRefresh.js +657 -0
  106. package/src/utils/user-agents.js +238 -0
  107. package/src/utils/validation.js +157 -0
  108. package/CHANGELOG.md +0 -181
  109. package/DOCS.md +0 -2636
  110. package/LICENSE-MIT +0 -21
  111. package/README.md +0 -632
  112. package/func/checkUpdate.js +0 -233
  113. package/func/logger.js +0 -48
  114. package/index.d.ts +0 -746
  115. package/module/config.js +0 -67
  116. package/module/login.js +0 -154
  117. package/module/loginHelper.js +0 -1034
  118. package/module/options.js +0 -54
  119. package/src/api/action/changeAvatar.js +0 -137
  120. package/src/api/action/changeBio.js +0 -75
  121. package/src/api/action/enableAutoSaveAppState.js +0 -73
  122. package/src/api/action/getCurrentUserID.js +0 -7
  123. package/src/api/action/handleFriendRequest.js +0 -57
  124. package/src/api/action/logout.js +0 -76
  125. package/src/api/action/refreshFb_dtsg.js +0 -48
  126. package/src/api/action/setPostReaction.js +0 -106
  127. package/src/api/action/unfriend.js +0 -54
  128. package/src/api/http/httpGet.js +0 -46
  129. package/src/api/http/httpPost.js +0 -52
  130. package/src/api/http/postFormData.js +0 -47
  131. package/src/api/messaging/addUserToGroup.js +0 -68
  132. package/src/api/messaging/changeAdminStatus.js +0 -122
  133. package/src/api/messaging/changeArchivedStatus.js +0 -55
  134. package/src/api/messaging/changeBlockedStatus.js +0 -48
  135. package/src/api/messaging/changeGroupImage.js +0 -90
  136. package/src/api/messaging/changeNickname.js +0 -70
  137. package/src/api/messaging/changeThreadColor.js +0 -79
  138. package/src/api/messaging/changeThreadEmoji.js +0 -106
  139. package/src/api/messaging/createNewGroup.js +0 -88
  140. package/src/api/messaging/createPoll.js +0 -43
  141. package/src/api/messaging/createThemeAI.js +0 -98
  142. package/src/api/messaging/deleteMessage.js +0 -56
  143. package/src/api/messaging/deleteThread.js +0 -56
  144. package/src/api/messaging/editMessage.js +0 -68
  145. package/src/api/messaging/forwardAttachment.js +0 -51
  146. package/src/api/messaging/getEmojiUrl.js +0 -29
  147. package/src/api/messaging/getFriendsList.js +0 -82
  148. package/src/api/messaging/getMessage.js +0 -829
  149. package/src/api/messaging/getThemePictures.js +0 -62
  150. package/src/api/messaging/handleMessageRequest.js +0 -65
  151. package/src/api/messaging/markAsDelivered.js +0 -57
  152. package/src/api/messaging/markAsReadAll.js +0 -49
  153. package/src/api/messaging/markAsSeen.js +0 -61
  154. package/src/api/messaging/muteThread.js +0 -50
  155. package/src/api/messaging/removeUserFromGroup.js +0 -106
  156. package/src/api/messaging/resolvePhotoUrl.js +0 -43
  157. package/src/api/messaging/scheduler.js +0 -264
  158. package/src/api/messaging/searchForThread.js +0 -52
  159. package/src/api/messaging/sendMessage.js +0 -272
  160. package/src/api/messaging/sendTypingIndicator.js +0 -67
  161. package/src/api/messaging/setMessageReaction.js +0 -76
  162. package/src/api/messaging/setTitle.js +0 -119
  163. package/src/api/messaging/shareContact.js +0 -49
  164. package/src/api/messaging/threadColors.js +0 -128
  165. package/src/api/messaging/unsendMessage.js +0 -81
  166. package/src/api/messaging/uploadAttachment.js +0 -94
  167. package/src/api/socket/core/connectMqtt.js +0 -255
  168. package/src/api/socket/core/emitAuth.js +0 -106
  169. package/src/api/socket/core/getSeqID.js +0 -40
  170. package/src/api/socket/core/getTaskResponseData.js +0 -22
  171. package/src/api/socket/core/markDelivery.js +0 -12
  172. package/src/api/socket/core/parseDelta.js +0 -391
  173. package/src/api/socket/detail/buildStream.js +0 -208
  174. package/src/api/socket/detail/constants.js +0 -24
  175. package/src/api/socket/listenMqtt.js +0 -364
  176. package/src/api/socket/middleware/index.js +0 -216
  177. package/src/api/threads/getThreadHistory.js +0 -664
  178. package/src/api/threads/getThreadInfo.js +0 -438
  179. package/src/api/threads/getThreadList.js +0 -293
  180. package/src/api/threads/getThreadPictures.js +0 -78
  181. package/src/api/users/getUserID.js +0 -65
  182. package/src/api/users/getUserInfo.js +0 -327
  183. package/src/core/sendReqMqtt.js +0 -96
  184. package/src/database/models/index.js +0 -87
  185. package/src/database/models/thread.js +0 -45
  186. package/src/database/models/user.js +0 -46
  187. package/src/database/threadData.js +0 -98
  188. package/src/database/userData.js +0 -89
  189. package/src/utils/client.js +0 -320
  190. package/src/utils/format.js +0 -1115
  191. package/src/utils/request.js +0 -305
package/module/config.js DELETED
@@ -1,67 +0,0 @@
1
- const fs = require("fs");
2
- const path = require("path");
3
- const logger = require("../func/logger");
4
-
5
- const defaultConfig = {
6
- autoUpdate: false,
7
- mqtt: {
8
- enabled: true,
9
- reconnectInterval: 3600
10
- },
11
- autoLogin: true,
12
- credentials: {
13
- email: "",
14
- password: "",
15
- twofactor: ""
16
- }
17
- };
18
-
19
- function loadConfig() {
20
- const configPath = path.join(process.cwd(), "fca-config.json");
21
- let config = {};
22
-
23
- try {
24
- if (!fs.existsSync(configPath)) {
25
- config = { ...defaultConfig };
26
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
27
- } else {
28
- const fileContent = fs.readFileSync(configPath, "utf8");
29
- config = JSON.parse(fileContent);
30
-
31
- // Merge with defaults
32
- config = {
33
- ...defaultConfig,
34
- ...config,
35
- mqtt: {
36
- ...defaultConfig.mqtt,
37
- ...(config.mqtt || {})
38
- },
39
- credentials: {
40
- ...defaultConfig.credentials,
41
- ...(config.credentials || {})
42
- }
43
- };
44
-
45
- // Save updated config if new keys were added
46
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
47
- }
48
- } catch (err) {
49
- logger(`Config error: ${err.message}`, "error");
50
-
51
- config = { ...defaultConfig };
52
-
53
- try {
54
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
55
- } catch (_) {}
56
- }
57
-
58
- return {
59
- config,
60
- configPath
61
- };
62
- }
63
-
64
- module.exports = {
65
- loadConfig,
66
- defaultConfig
67
- };
package/module/login.js DELETED
@@ -1,154 +0,0 @@
1
- const { getType } = require("../src/utils/format");
2
- const { setOptions } = require("./options");
3
- const { loadConfig } = require("./config");
4
- const { checkAndUpdateVersion } = require("../func/checkUpdate");
5
- const loginHelper = require("./loginHelper");
6
- const logger = require("../func/logger");
7
-
8
- const { config } = loadConfig();
9
- global.fca = { config };
10
-
11
- // Global error handlers to prevent bot crashes
12
- // Handle unhandled promise rejections (e.g., fetch timeouts, network errors)
13
- if (!global.fca._errorHandlersInstalled) {
14
- global.fca._errorHandlersInstalled = true;
15
-
16
- process.on("unhandledRejection", (reason, promise) => {
17
- try {
18
- // Check if it's a fetch/network timeout error
19
- if (reason && typeof reason === "object") {
20
- const errorCode = reason.code || reason.cause?.code;
21
- const errorMessage = reason.message || String(reason);
22
-
23
- // Suppress Sequelize instance errors (handled gracefully in getBackupModel)
24
- if (errorMessage.includes("No Sequelize instance passed")) {
25
- return; // Silently ignore - already handled
26
- }
27
-
28
- // Handle fetch timeout errors gracefully
29
- if (errorCode === "UND_ERR_CONNECT_TIMEOUT" ||
30
- errorCode === "ETIMEDOUT" ||
31
- errorMessage.includes("Connect Timeout") ||
32
- errorMessage.includes("fetch failed")) {
33
- logger(`Network timeout error caught (non-fatal): ${errorMessage}`, "warn");
34
- return; // Don't crash, just log
35
- }
36
-
37
- // Handle other network errors
38
- if (errorCode === "ECONNREFUSED" ||
39
- errorCode === "ENOTFOUND" ||
40
- errorCode === "ECONNRESET" ||
41
- errorMessage.includes("ECONNREFUSED") ||
42
- errorMessage.includes("ENOTFOUND")) {
43
- logger(`Network connection error caught (non-fatal): ${errorMessage}`, "warn");
44
- return; // Don't crash, just log
45
- }
46
- }
47
-
48
- // For other unhandled rejections, log but don't crash
49
- logger(`Unhandled promise rejection (non-fatal): ${reason && reason.message ? reason.message : String(reason)}`, "error");
50
- } catch (e) {
51
- // Fallback if logger fails
52
- console.error("[FCA-ERROR] Unhandled promise rejection:", reason);
53
- }
54
- });
55
-
56
- // Handle uncaught exceptions (last resort)
57
- process.on("uncaughtException", (error) => {
58
- try {
59
- const errorMessage = error.message || String(error);
60
- const errorCode = error.code;
61
-
62
- // Suppress Sequelize instance errors (handled gracefully in getBackupModel)
63
- if (errorMessage.includes("No Sequelize instance passed")) {
64
- return; // Silently ignore - already handled
65
- }
66
-
67
- // Handle fetch/network errors
68
- if (errorCode === "UND_ERR_CONNECT_TIMEOUT" ||
69
- errorCode === "ETIMEDOUT" ||
70
- errorMessage.includes("Connect Timeout") ||
71
- errorMessage.includes("fetch failed")) {
72
- logger(`Uncaught network timeout error (non-fatal): ${errorMessage}`, "warn");
73
- return; // Don't crash
74
- }
75
-
76
- // For other uncaught exceptions, log but try to continue
77
- logger(`Uncaught exception (attempting to continue): ${errorMessage}`, "error");
78
- // Note: We don't exit here to allow bot to continue running
79
- // In production, you might want to restart the process instead
80
- } catch (e) {
81
- // Fallback if logger fails
82
- console.error("[FCA-ERROR] Uncaught exception:", error);
83
- }
84
- });
85
- }
86
-
87
- function login(loginData, options, callback) {
88
- if (getType(options) === "Function" || getType(options) === "AsyncFunction") {
89
- callback = options;
90
- options = {};
91
- }
92
- const globalOptions = {
93
- selfListen: false,
94
- selfListenEvent: false,
95
- listenEvents: false,
96
- listenTyping: false,
97
- updatePresence: false,
98
- forceLogin: false,
99
- autoMarkDelivery: true,
100
- autoMarkRead: false,
101
- autoReconnect: true,
102
- online: true,
103
- emitReady: false,
104
- userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36"
105
- };
106
- setOptions(globalOptions, options);
107
- let prCallback = null;
108
- let rejectFunc = null;
109
- let resolveFunc = null;
110
- let returnPromise = null;
111
- if (getType(callback) !== "Function" && getType(callback) !== "AsyncFunction") {
112
- returnPromise = new Promise(function (resolve, reject) {
113
- resolveFunc = resolve;
114
- rejectFunc = reject;
115
- });
116
- prCallback = function (error, api) {
117
- if (error) return rejectFunc(error);
118
- return resolveFunc(api);
119
- };
120
- callback = prCallback;
121
- }
122
-
123
-
124
- const proceed = () =>
125
- loginHelper(
126
- loginData.appState,
127
- loginData.Cookie,
128
- loginData.email,
129
- loginData.password,
130
- globalOptions,
131
- callback,
132
- prCallback
133
- );
134
-
135
- // Login immediately
136
- proceed();
137
-
138
- // Run update check in background (never block login)
139
- if (config && config.autoUpdate) {
140
- setImmediate(async () => {
141
- try {
142
- await checkAndUpdateVersion();
143
- } catch (err) {
144
- logger(
145
- `Background update check failed: ${err.message || err}`,
146
- "warn"
147
- );
148
- }
149
- });
150
- }
151
- return returnPromise;
152
- }
153
-
154
- module.exports = login;