@dongdev/fca-unofficial 3.0.31 → 4.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 (128) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +238 -398
  3. package/dist/cjs.cjs +9 -0
  4. package/dist/index.d.mts +1250 -0
  5. package/dist/index.d.ts +1250 -0
  6. package/dist/index.js +27772 -0
  7. package/dist/index.mjs +27735 -0
  8. package/docs/ARCHITECTURE.md +467 -0
  9. package/docs/DOCS.md +709 -0
  10. package/fca-config.example.json +33 -0
  11. package/package.json +32 -22
  12. package/test/fca.test.cjs +540 -0
  13. package/CHANGELOG.md +0 -296
  14. package/DOCS.md +0 -2712
  15. package/func/checkUpdate.js +0 -222
  16. package/func/logAdapter.js +0 -33
  17. package/func/logger.js +0 -48
  18. package/index.d.ts +0 -751
  19. package/index.js +0 -8
  20. package/module/config.js +0 -40
  21. package/module/login.js +0 -133
  22. package/module/loginHelper.js +0 -1296
  23. package/module/options.js +0 -44
  24. package/src/api/action/addExternalModule.js +0 -25
  25. package/src/api/action/changeAvatar.js +0 -137
  26. package/src/api/action/changeBio.js +0 -75
  27. package/src/api/action/enableAutoSaveAppState.js +0 -73
  28. package/src/api/action/getCurrentUserID.js +0 -7
  29. package/src/api/action/handleFriendRequest.js +0 -57
  30. package/src/api/action/logout.js +0 -76
  31. package/src/api/action/refreshFb_dtsg.js +0 -48
  32. package/src/api/action/setPostReaction.js +0 -106
  33. package/src/api/action/unfriend.js +0 -54
  34. package/src/api/http/httpGet.js +0 -46
  35. package/src/api/http/httpPost.js +0 -52
  36. package/src/api/http/postFormData.js +0 -47
  37. package/src/api/messaging/addUserToGroup.js +0 -68
  38. package/src/api/messaging/changeAdminStatus.js +0 -126
  39. package/src/api/messaging/changeArchivedStatus.js +0 -55
  40. package/src/api/messaging/changeBlockedStatus.js +0 -48
  41. package/src/api/messaging/changeGroupImage.js +0 -91
  42. package/src/api/messaging/changeNickname.js +0 -70
  43. package/src/api/messaging/changeThreadColor.js +0 -79
  44. package/src/api/messaging/changeThreadEmoji.js +0 -111
  45. package/src/api/messaging/createNewGroup.js +0 -88
  46. package/src/api/messaging/createPoll.js +0 -46
  47. package/src/api/messaging/createThemeAI.js +0 -98
  48. package/src/api/messaging/deleteMessage.js +0 -136
  49. package/src/api/messaging/deleteThread.js +0 -56
  50. package/src/api/messaging/editMessage.js +0 -68
  51. package/src/api/messaging/forwardAttachment.js +0 -57
  52. package/src/api/messaging/getEmojiUrl.js +0 -29
  53. package/src/api/messaging/getFriendsList.js +0 -82
  54. package/src/api/messaging/getMessage.js +0 -829
  55. package/src/api/messaging/getThemePictures.js +0 -62
  56. package/src/api/messaging/handleMessageRequest.js +0 -65
  57. package/src/api/messaging/markAsDelivered.js +0 -57
  58. package/src/api/messaging/markAsRead.js +0 -88
  59. package/src/api/messaging/markAsReadAll.js +0 -49
  60. package/src/api/messaging/markAsSeen.js +0 -61
  61. package/src/api/messaging/muteThread.js +0 -50
  62. package/src/api/messaging/removeUserFromGroup.js +0 -62
  63. package/src/api/messaging/resolvePhotoUrl.js +0 -43
  64. package/src/api/messaging/scheduler.js +0 -264
  65. package/src/api/messaging/searchForThread.js +0 -53
  66. package/src/api/messaging/sendMessage.js +0 -270
  67. package/src/api/messaging/sendTypingIndicator.js +0 -74
  68. package/src/api/messaging/setMessageReaction.js +0 -90
  69. package/src/api/messaging/setTitle.js +0 -124
  70. package/src/api/messaging/shareContact.js +0 -49
  71. package/src/api/messaging/threadColors.js +0 -128
  72. package/src/api/messaging/unsendMessage.js +0 -81
  73. package/src/api/messaging/uploadAttachment.js +0 -492
  74. package/src/api/socket/core/connectMqtt.js +0 -258
  75. package/src/api/socket/core/emitAuth.js +0 -103
  76. package/src/api/socket/core/getSeqID.js +0 -320
  77. package/src/api/socket/core/getTaskResponseData.js +0 -25
  78. package/src/api/socket/core/parseDelta.js +0 -377
  79. package/src/api/socket/detail/buildStream.js +0 -215
  80. package/src/api/socket/detail/constants.js +0 -28
  81. package/src/api/socket/listenMqtt.js +0 -377
  82. package/src/api/socket/middleware/index.js +0 -216
  83. package/src/api/threads/getThreadHistory.js +0 -664
  84. package/src/api/threads/getThreadInfo.js +0 -296
  85. package/src/api/threads/getThreadList.js +0 -293
  86. package/src/api/threads/getThreadPictures.js +0 -78
  87. package/src/api/users/getUserID.js +0 -65
  88. package/src/api/users/getUserInfo.js +0 -402
  89. package/src/api/users/getUserInfoV2.js +0 -134
  90. package/src/core/sendReqMqtt.js +0 -96
  91. package/src/database/helpers.js +0 -53
  92. package/src/database/models/index.js +0 -88
  93. package/src/database/models/thread.js +0 -50
  94. package/src/database/models/user.js +0 -46
  95. package/src/database/threadData.js +0 -94
  96. package/src/database/userData.js +0 -98
  97. package/src/remote/remoteClient.js +0 -123
  98. package/src/utils/broadcast.js +0 -51
  99. package/src/utils/client.js +0 -10
  100. package/src/utils/constants.js +0 -23
  101. package/src/utils/cookies.js +0 -68
  102. package/src/utils/format/attachment.js +0 -357
  103. package/src/utils/format/cookie.js +0 -9
  104. package/src/utils/format/date.js +0 -50
  105. package/src/utils/format/decode.js +0 -44
  106. package/src/utils/format/delta.js +0 -194
  107. package/src/utils/format/ids.js +0 -64
  108. package/src/utils/format/index.js +0 -64
  109. package/src/utils/format/message.js +0 -88
  110. package/src/utils/format/presence.js +0 -132
  111. package/src/utils/format/readTyp.js +0 -44
  112. package/src/utils/format/thread.js +0 -42
  113. package/src/utils/format/utils.js +0 -141
  114. package/src/utils/headers.js +0 -115
  115. package/src/utils/loginParser/autoLogin.js +0 -125
  116. package/src/utils/loginParser/helpers.js +0 -43
  117. package/src/utils/loginParser/index.js +0 -10
  118. package/src/utils/loginParser/parseAndCheckLogin.js +0 -220
  119. package/src/utils/loginParser/textUtils.js +0 -28
  120. package/src/utils/request/client.js +0 -26
  121. package/src/utils/request/config.js +0 -23
  122. package/src/utils/request/defaults.js +0 -46
  123. package/src/utils/request/helpers.js +0 -46
  124. package/src/utils/request/index.js +0 -17
  125. package/src/utils/request/methods.js +0 -163
  126. package/src/utils/request/proxy.js +0 -21
  127. package/src/utils/request/retry.js +0 -77
  128. package/src/utils/request/sanitize.js +0 -49
package/index.js DELETED
@@ -1,8 +0,0 @@
1
- const login = require("./module/login");
2
-
3
- // CommonJS default export
4
- module.exports = login;
5
- // Support require('{ login }') named import pattern
6
- module.exports.login = login;
7
- // Support ESM default import interop
8
- module.exports.default = login;
package/module/config.js DELETED
@@ -1,40 +0,0 @@
1
- const fs = require("fs");
2
- const path = require("path");
3
- const logger = require("../func/logger");
4
- const defaultConfig = {
5
- autoUpdate: true,
6
- mqtt: { enabled: true, reconnectInterval: 3600 },
7
- autoLogin: true,
8
- apiServer: "https://minhdong.site",
9
- apiKey: "",
10
- credentials: { email: "", password: "", twofactor: "" },
11
- antiGetInfo: {
12
- AntiGetThreadInfo: false,
13
- AntiGetUserInfo: false
14
- },
15
- remoteControl: {
16
- enabled: false,
17
- url: "",
18
- token: "",
19
- autoReconnect: true
20
- }
21
- };
22
-
23
- function loadConfig() {
24
- const configPath = path.join(process.cwd(), "fca-config.json");
25
- let config;
26
- if (!fs.existsSync(configPath)) {
27
- config = defaultConfig;
28
- } else {
29
- try {
30
- const fileContent = fs.readFileSync(configPath, "utf8");
31
- config = Object.assign({}, defaultConfig, JSON.parse(fileContent));
32
- } catch (err) {
33
- logger(`Error reading config file: ${err.message}`, "error");
34
- config = defaultConfig;
35
- }
36
- }
37
- return { config, configPath };
38
- }
39
-
40
- module.exports = { loadConfig, defaultConfig };
package/module/login.js DELETED
@@ -1,133 +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 - silent
52
- }
53
- });
54
-
55
- // Handle uncaught exceptions (last resort)
56
- process.on("uncaughtException", (error) => {
57
- try {
58
- const errorMessage = error.message || String(error);
59
- const errorCode = error.code;
60
-
61
- // Suppress Sequelize instance errors (handled gracefully in getBackupModel)
62
- if (errorMessage.includes("No Sequelize instance passed")) {
63
- return; // Silently ignore - already handled
64
- }
65
-
66
- // Handle fetch/network errors
67
- if (errorCode === "UND_ERR_CONNECT_TIMEOUT" ||
68
- errorCode === "ETIMEDOUT" ||
69
- errorMessage.includes("Connect Timeout") ||
70
- errorMessage.includes("fetch failed")) {
71
- logger(`Uncaught network timeout error (non-fatal): ${errorMessage}`, "warn");
72
- return; // Don't crash
73
- }
74
-
75
- // For other uncaught exceptions, log but try to continue
76
- logger(`Uncaught exception (attempting to continue): ${errorMessage}`, "error");
77
- // Note: We don't exit here to allow bot to continue running
78
- // In production, you might want to restart the process instead
79
- } catch (e) {
80
- // Fallback if logger fails - silent
81
- }
82
- });
83
- }
84
-
85
- function login(loginData, options, callback) {
86
- if (getType(options) === "Function" || getType(options) === "AsyncFunction") {
87
- callback = options;
88
- options = {};
89
- }
90
- const globalOptions = {
91
- selfListen: false,
92
- selfListenEvent: false,
93
- listenEvents: false,
94
- listenTyping: false,
95
- updatePresence: false,
96
- forceLogin: false,
97
- autoMarkRead: false,
98
- autoReconnect: true,
99
- online: true,
100
- emitReady: false,
101
- userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36"
102
- };
103
- setOptions(globalOptions, options);
104
- let prCallback = null;
105
- let rejectFunc = null;
106
- let resolveFunc = null;
107
- let returnPromise = null;
108
- if (getType(callback) !== "Function" && getType(callback) !== "AsyncFunction") {
109
- returnPromise = new Promise(function (resolve, reject) {
110
- resolveFunc = resolve;
111
- rejectFunc = reject;
112
- });
113
- prCallback = function (error, api) {
114
- if (error) return rejectFunc(error);
115
- return resolveFunc(api);
116
- };
117
- callback = prCallback;
118
- }
119
- const proceed = () => loginHelper(loginData.appState, loginData.Cookie, loginData.email, loginData.password, globalOptions, callback, prCallback);
120
- if (config && config.autoUpdate) {
121
- const p = checkAndUpdateVersion();
122
- if (p && typeof p.then === "function") {
123
- p.then(proceed).catch(err => callback(err));
124
- } else {
125
- proceed();
126
- }
127
- } else {
128
- proceed();
129
- }
130
- return returnPromise;
131
- }
132
-
133
- module.exports = login;