alicezetion 1.7.6 → 1.7.8
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.
- package/.cache/replit/__replit_disk_meta.json +1 -1
- package/.cache/replit/nix/env.json +1 -1
- package/.travis.yml +6 -0
- package/index.js +118 -654
- package/package.json +25 -37
- package/replit.nix +4 -3
- package/src/addExternalModule.js +5 -13
- package/src/addUserToGroup.js +12 -36
- package/src/changeAdminStatus.js +37 -85
- package/src/changeArchivedStatus.js +9 -15
- package/src/changeBio.js +8 -13
- package/src/changeBlockedStatus.js +8 -14
- package/src/changeGroupImage.js +13 -28
- package/src/changeNickname.js +11 -22
- package/src/changeThreadColor.js +10 -16
- package/src/changeThreadEmoji.js +9 -18
- package/src/chat.js +280 -401
- package/src/createNewGroup.js +10 -18
- package/src/createPoll.js +11 -17
- package/src/deleteMessage.js +10 -17
- package/src/deleteThread.js +10 -17
- package/src/forwardAttachment.js +9 -15
- package/src/forwardMessage.js +0 -0
- package/src/getCurrentUserID.js +1 -1
- package/src/getEmojiUrl.js +2 -3
- package/src/getFriendsList.js +10 -18
- package/src/getThreadHistory.js +59 -156
- package/src/getThreadHistoryDeprecated.js +15 -26
- package/src/getThreadInfo.js +42 -68
- package/src/getThreadInfoDeprecated.js +13 -25
- package/src/getThreadList.js +53 -112
- package/src/getThreadListDeprecated.js +12 -30
- package/src/getThreadPictures.js +13 -25
- package/src/getUserID.js +7 -9
- package/src/getUserInfo.js +10 -12
- package/src/handleFriendRequest.js +35 -36
- package/src/handleMessageRequest.js +10 -18
- package/src/httpGet.js +13 -20
- package/src/httpPost.js +13 -19
- package/src/{sendTypingIndicator.js → leiamnash.js} +19 -44
- package/src/listen.js +553 -0
- package/src/listenMqtt-Test.js +687 -0
- package/src/listenMqtt.js +621 -1224
- package/src/logout.js +13 -18
- package/src/markAsDelivered.js +10 -17
- package/src/markAsRead.js +24 -36
- package/src/markAsSeen.js +12 -22
- package/src/muteThread.js +9 -15
- package/src/react.js +9 -20
- package/src/removeUserFromGroup.js +11 -38
- package/src/resolvePhotoUrl.js +6 -9
- package/src/searchForThread.js +8 -14
- package/src/seen.js +10 -17
- package/src/setPostReaction.js +22 -63
- package/src/setTitle.js +12 -22
- package/src/threadColors.js +19 -17
- package/src/unfriend.js +9 -15
- package/src/{unsend.js → unsendMessage.js} +8 -9
- package/test/data/shareAttach.js +146 -0
- package/test/data/something.mov +0 -0
- package/test/data/test.png +0 -0
- package/test/data/test.txt +7 -0
- package/test/example-config.json +18 -0
- package/test/test-page.js +140 -0
- package/test/test.js +385 -0
- package/utils.js +27 -120
- package/Extra/Database/index.js +0 -399
- package/Extra/Database/methods.js +0 -286
- package/Extra/ExtraAddons.js +0 -213
- package/Extra/ExtraGetThread.js +0 -1
- package/Extra/ExtraUptimeRobot.js +0 -59
- package/Extra/PM2/ecosystem.config.js +0 -23
- package/Extra/Src/Last-Run.js +0 -48
- package/Language/index.json +0 -151
- package/StateCrypt.js +0 -22
- package/broadcast.js +0 -42
- package/logger.js +0 -21
- package/src/changeAvt.js +0 -91
- package/src/getAccessToken.js +0 -32
- package/src/getMessage.js +0 -84
- package/src/getUserInfoV2.js +0 -35
- package/src/httpPostFormData.js +0 -46
    
        package/index.js
    CHANGED
    
    | @@ -1,93 +1,13 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
            "use strict";
         | 
| 2 2 |  | 
| 3 | 
            -
             | 
| 3 | 
            +
            var utils = require("./utils");
         | 
| 4 | 
            +
            var cheerio = require("cheerio");
         | 
| 5 | 
            +
            var log = require("npmlog");
         | 
| 4 6 |  | 
| 5 | 
            -
            process.env.UV_THREADPOOL_SIZE = require('os').cpus().length;
         | 
| 6 | 
            -
             | 
| 7 | 
            -
            /!-[ Global Set ]-!/
         | 
| 8 | 
            -
             | 
| 9 | 
            -
            global.isThread = new Array();
         | 
| 10 | 
            -
            global.isUser = new Array();
         | 
| 11 | 
            -
            global.startTime = Date.now();
         | 
| 12 | 
            -
            global.getText =  require('gettext.js')();
         | 
| 13 | 
            -
             | 
| 14 | 
            -
            /!-[ Require All Package Need Use ]-!/
         | 
| 15 | 
            -
            /*globalThis.Fca = new Object({
         | 
| 16 | 
            -
                test: console,log("test"),
         | 
| 17 | 
            -
                Require: new Object({})
         | 
| 18 | 
            -
            });*/
         | 
| 19 | 
            -
            var utils = require("./utils"),
         | 
| 20 | 
            -
                cheerio = require("cheerio"),
         | 
| 21 | 
            -
                log = require("npmlog"),
         | 
| 22 | 
            -
            //{ getAccessToken } = require('./Extra/ExtraAddons'),
         | 
| 23 | 
            -
                logger = require('./logger'),
         | 
| 24 | 
            -
                fs = require('fs-extra'),
         | 
| 25 | 
            -
                getText = require('gettext.js')(),
         | 
| 26 | 
            -
                logger = require('./logger'),
         | 
| 27 | 
            -
                Fetch = require('got'),
         | 
| 28 | 
            -
                fs = require('fs-extra'),
         | 
| 29 | 
            -
                StateCrypt = require('./StateCrypt'),
         | 
| 30 | 
            -
                Client = require("@replit/database"),
         | 
| 31 | 
            -
                languageFile = require('./Language/index.json'),
         | 
| 32 | 
            -
                ObjFastConfig = {
         | 
| 33 | 
            -
                    "Language": "en",
         | 
| 34 | 
            -
                    "MainColor": "#9900FF",
         | 
| 35 | 
            -
                    "BroadCast": true,
         | 
| 36 | 
            -
                    "EncryptFeature": true,
         | 
| 37 | 
            -
                    "PreKey": "",
         | 
| 38 | 
            -
                    "Uptime": false
         | 
| 39 | 
            -
                };
         | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
            /!-[ Check File To Run Process ]-!/
         | 
| 43 | 
            -
             | 
| 44 | 
            -
            try {
         | 
| 45 | 
            -
                if (!fs.existsSync('./alice/alicezetion.json')) {
         | 
| 46 | 
            -
                    fs.writeFileSync("./alice/alicezetion.json", JSON.stringify(ObjFastConfig, null, "\t"));
         | 
| 47 | 
            -
                    process.exit(1);
         | 
| 48 | 
            -
                } else if (fs.existsSync('./alice/alicezetion.json')) {
         | 
| 49 | 
            -
                    try {
         | 
| 50 | 
            -
                        var DataLanguageSetting = require("./alice/alicezetion.json");
         | 
| 51 | 
            -
                    } catch (e) {
         | 
| 52 | 
            -
                        logger("Invalid Config Settings, Restoring Default...");
         | 
| 53 | 
            -
                        fs.writeFileSync("./alice/alicezetion.json", JSON.stringify(ObjFastConfig, null, "\t"));
         | 
| 54 | 
            -
                        process.exit(1);
         | 
| 55 | 
            -
                    }
         | 
| 56 | 
            -
                    try {
         | 
| 57 | 
            -
                        if (DataLanguageSetting && !DataLanguageSetting.PreKey) {
         | 
| 58 | 
            -
                            DataLanguageSetting.PreKey = "";
         | 
| 59 | 
            -
                            fs.writeFileSync("./alice/alicezetion.json", JSON.stringify(DataLanguageSetting, null, "\t"));
         | 
| 60 | 
            -
                        }
         | 
| 61 | 
            -
                    } catch (e) {
         | 
| 62 | 
            -
                        console.log(e);
         | 
| 63 | 
            -
                    }
         | 
| 64 | 
            -
                    if (!languageFile.some(i => i.Language == DataLanguageSetting.Language)) {
         | 
| 65 | 
            -
                        logger("Not Support Language: " + DataLanguageSetting.Language + " Only 'en' and 'vi'", "[ Alicezetion ]");
         | 
| 66 | 
            -
                        process.exit(0);
         | 
| 67 | 
            -
                    }
         | 
| 68 | 
            -
                    var Language = languageFile.find(i => i.Language == DataLanguageSetting.Language).Folder.Index;
         | 
| 69 | 
            -
                } else process.exit(1);
         | 
| 70 | 
            -
                if (utils.getType(DataLanguageSetting.BroadCast) != "Boolean" && DataLanguageSetting.BroadCast != undefined) {
         | 
| 71 | 
            -
                    log.warn("FastConfig-BroadCast", getText.gettext(Language.IsNotABoolean, DataLanguageSetting.BroadCast));
         | 
| 72 | 
            -
                    process.exit(0)
         | 
| 73 | 
            -
                } else if (DataLanguageSetting.BroadCast == undefined) {
         | 
| 74 | 
            -
                    fs.writeFileSync("./alice/alicezetion.json", JSON.stringify(ObjFastConfig, null, "\t"));
         | 
| 75 | 
            -
                    process.exit(1);
         | 
| 76 | 
            -
                }
         | 
| 77 | 
            -
             | 
| 78 | 
            -
                global.FastConfig = DataLanguageSetting;
         | 
| 79 | 
            -
             | 
| 80 | 
            -
            } catch (e) {
         | 
| 81 | 
            -
                console.log(e);
         | 
| 82 | 
            -
                logger.Error();
         | 
| 83 | 
            -
            }
         | 
| 84 | 
            -
             | 
| 85 | 
            -
            /!-[ Set Variable For Process ]-!/
         | 
| 86 | 
            -
             | 
| 87 | 
            -
            log.maxRecordSize = 100;
         | 
| 88 7 | 
             
            var checkVerified = null;
         | 
| 89 8 |  | 
| 90 | 
            -
             | 
| 9 | 
            +
            var defaultLogRecordSize = 100;
         | 
| 10 | 
            +
            log.maxRecordSize = defaultLogRecordSize;
         | 
| 91 11 |  | 
| 92 12 | 
             
            function setOptions(globalOptions, options) {
         | 
| 93 13 | 
             
                Object.keys(options).map(function(key) {
         | 
| @@ -155,23 +75,21 @@ function setOptions(globalOptions, options) { | |
| 155 75 | 
             
                });
         | 
| 156 76 | 
             
            }
         | 
| 157 77 |  | 
| 158 | 
            -
             | 
| 159 | 
            -
             | 
| 160 | 
            -
             | 
| 161 | 
            -
                 | 
| 78 | 
            +
            function buildAPI(globalOptions, html, jar) {
         | 
| 79 | 
            +
                var maybeCookie = jar.getCookies("https://www.facebook.com").filter(function(val) {
         | 
| 80 | 
            +
                    return val.cookieString().split("=")[0] === "c_user";
         | 
| 81 | 
            +
                });
         | 
| 162 82 |  | 
| 163 | 
            -
                if (maybeCookie.length === 0) throw { error:  | 
| 83 | 
            +
                if (maybeCookie.length === 0) throw { error: "Error retrieving userID. This can be caused by a lot of things, including getting blocked by Facebook for logging in from an unknown location. Try logging in with a browser to verify." };
         | 
| 164 84 |  | 
| 165 | 
            -
                if (html.indexOf("/checkpoint/block/?next") > -1) log.warn("login",  | 
| 85 | 
            +
                if (html.indexOf("/checkpoint/block/?next") > -1) log.warn("login", "Checkpoint detected. Please log in with a browser to verify.");
         | 
| 166 86 |  | 
| 167 87 | 
             
                var userID = maybeCookie[0].cookieString().split("=")[1].toString();
         | 
| 168 | 
            -
                 | 
| 88 | 
            +
                //log.info("login", `Logged in as ${userID}`);
         | 
| 169 89 |  | 
| 170 90 | 
             
                try {
         | 
| 171 91 | 
             
                    clearInterval(checkVerified);
         | 
| 172 | 
            -
                } catch ( | 
| 173 | 
            -
                    console.log(e);
         | 
| 174 | 
            -
                }
         | 
| 92 | 
            +
                } catch (_) {}
         | 
| 175 93 |  | 
| 176 94 | 
             
                var clientID = (Math.random() * 2147483648 | 0).toString(16);
         | 
| 177 95 |  | 
| @@ -185,34 +103,39 @@ async function buildAPI(globalOptions, html, jar) { | |
| 185 103 | 
             
                    irisSeqID = oldFBMQTTMatch[1];
         | 
| 186 104 | 
             
                    mqttEndpoint = oldFBMQTTMatch[2];
         | 
| 187 105 | 
             
                    region = new URL(mqttEndpoint).searchParams.get("region").toUpperCase();
         | 
| 188 | 
            -
                     | 
| 106 | 
            +
                    //log.info("login", `Got this account's message region: ${region}`);
         | 
| 189 107 | 
             
                } else {
         | 
| 190 108 | 
             
                    let newFBMQTTMatch = html.match(/{"app_id":"219994525426954","endpoint":"(.+?)","iris_seq_id":"(.+?)"}/);
         | 
| 191 109 | 
             
                    if (newFBMQTTMatch) {
         | 
| 192 110 | 
             
                        irisSeqID = newFBMQTTMatch[2];
         | 
| 193 111 | 
             
                        mqttEndpoint = newFBMQTTMatch[1].replace(/\\\//g, "/");
         | 
| 194 112 | 
             
                        region = new URL(mqttEndpoint).searchParams.get("region").toUpperCase();
         | 
| 113 | 
            +
                       // log.info("login", `Got this account's message region: ${region}`);
         | 
| 195 114 | 
             
                    } else {
         | 
| 196 115 | 
             
                        let legacyFBMQTTMatch = html.match(/(\["MqttWebConfig",\[\],{fbid:")(.+?)(",appID:219994525426954,endpoint:")(.+?)(",pollingEndpoint:")(.+?)(3790])/);
         | 
| 197 116 | 
             
                        if (legacyFBMQTTMatch) {
         | 
| 198 117 | 
             
                            mqttEndpoint = legacyFBMQTTMatch[4];
         | 
| 199 118 | 
             
                            region = new URL(mqttEndpoint).searchParams.get("region").toUpperCase();
         | 
| 200 | 
            -
             | 
| 201 | 
            -
                             | 
| 119 | 
            +
                           /* log.warn("login", `Cannot get sequence ID with new RegExp. Fallback to old RegExp (without seqID)...`);
         | 
| 120 | 
            +
                            log.info("login", `Got this account's message region: ${region}`);
         | 
| 121 | 
            +
                            log.info("login", `[Unused] Polling endpoint: ${legacyFBMQTTMatch[6]}`);*/
         | 
| 202 122 | 
             
                        } else {
         | 
| 203 | 
            -
                            log.warn("login",  | 
| 123 | 
            +
                            /*log.warn("login", "» Cannot get MQTT region & sequence ID.");
         | 
| 124 | 
            +
                            log.error("login", "» Please try closing and reopening your browser window or get new fbstate.");*/
         | 
| 204 125 | 
             
                            noMqttData = html;
         | 
| 126 | 
            +
                            process.exit();
         | 
| 205 127 | 
             
                        }
         | 
| 206 128 | 
             
                    }
         | 
| 207 129 | 
             
                }
         | 
| 208 130 |  | 
| 131 | 
            +
                // All data available to api functions
         | 
| 209 132 | 
             
                var ctx = {
         | 
| 210 133 | 
             
                    userID: userID,
         | 
| 211 134 | 
             
                    jar: jar,
         | 
| 212 135 | 
             
                    clientID: clientID,
         | 
| 213 136 | 
             
                    globalOptions: globalOptions,
         | 
| 214 137 | 
             
                    loggedIn: true,
         | 
| 215 | 
            -
                    access_token: ' | 
| 138 | 
            +
                    access_token: 'NONE',
         | 
| 216 139 | 
             
                    clientMutationId: 0,
         | 
| 217 140 | 
             
                    mqttClient: undefined,
         | 
| 218 141 | 
             
                    lastSeqId: irisSeqID,
         | 
| @@ -231,12 +154,66 @@ async function buildAPI(globalOptions, html, jar) { | |
| 231 154 |  | 
| 232 155 | 
             
                if (noMqttData) api["htmlData"] = noMqttData;
         | 
| 233 156 |  | 
| 234 | 
            -
                const apiFuncNames =  | 
| 157 | 
            +
                const apiFuncNames = [
         | 
| 158 | 
            +
                    'addExternalModule',
         | 
| 159 | 
            +
                    'addUserToGroup',
         | 
| 160 | 
            +
                    'changeAdminStatus',
         | 
| 161 | 
            +
                    'changeArchivedStatus',
         | 
| 162 | 
            +
                    'changeBio',
         | 
| 163 | 
            +
                    'changeBlockedStatus',
         | 
| 164 | 
            +
                    'changeGroupImage',
         | 
| 165 | 
            +
                    'changeNickname',
         | 
| 166 | 
            +
                    'chat',
         | 
| 167 | 
            +
                    'changeThreadColor',
         | 
| 168 | 
            +
                    'changeThreadEmoji',
         | 
| 169 | 
            +
                    'createNewGroup',
         | 
| 170 | 
            +
                    'createPoll',
         | 
| 171 | 
            +
                    'deleteMessage',
         | 
| 172 | 
            +
                    'deleteThread',
         | 
| 173 | 
            +
                    'forwardAttachment',
         | 
| 174 | 
            +
                    'getCurrentUserID',
         | 
| 175 | 
            +
                    'getEmojiUrl',
         | 
| 176 | 
            +
                    'getFriendsList',
         | 
| 177 | 
            +
                    'getThreadHistory',
         | 
| 178 | 
            +
                    'getThreadInfo',
         | 
| 179 | 
            +
                    'getThreadList',
         | 
| 180 | 
            +
                    'getThreadPictures',
         | 
| 181 | 
            +
                    'getUserID',
         | 
| 182 | 
            +
                    'getUserInfo',
         | 
| 183 | 
            +
                    'handleFriendRequest',
         | 
| 184 | 
            +
                    'handleMessageRequest',
         | 
| 185 | 
            +
                    'listenMqtt',
         | 
| 186 | 
            +
                    'logout',
         | 
| 187 | 
            +
                    'markAsDelivered',
         | 
| 188 | 
            +
                    'markAsRead',
         | 
| 189 | 
            +
                    'seen',
         | 
| 190 | 
            +
                    'markAsSeen',
         | 
| 191 | 
            +
                    'muteThread',
         | 
| 192 | 
            +
                    'removeUserFromGroup',
         | 
| 193 | 
            +
                    'resolvePhotoUrl',
         | 
| 194 | 
            +
                    'searchForThread',
         | 
| 195 | 
            +
                    'leiamnash',
         | 
| 196 | 
            +
                    'react',
         | 
| 197 | 
            +
                    'setTitle',
         | 
| 198 | 
            +
                    'threadColors',
         | 
| 199 | 
            +
                    'unsendMessage',
         | 
| 200 | 
            +
                    'unfriend',
         | 
| 201 | 
            +
             | 
| 202 | 
            +
                    // HTTP
         | 
| 203 | 
            +
                    'httpGet',
         | 
| 204 | 
            +
                    'httpPost',
         | 
| 205 | 
            +
             | 
| 206 | 
            +
                    // Deprecated features
         | 
| 207 | 
            +
                    "getThreadListDeprecated",
         | 
| 208 | 
            +
                    'getThreadHistoryDeprecated',
         | 
| 209 | 
            +
                    'getThreadInfoDeprecated',
         | 
| 210 | 
            +
                ];
         | 
| 235 211 |  | 
| 236 212 | 
             
                var defaultFuncs = utils.makeDefaults(html, userID, ctx);
         | 
| 237 213 |  | 
| 238 214 | 
             
                // Load all api functions in a loop
         | 
| 239 | 
            -
                apiFuncNames.map(v => api[v | 
| 215 | 
            +
                apiFuncNames.map(v => api[v] = require('./src/' + v)(defaultFuncs, api, ctx));
         | 
| 216 | 
            +
             | 
| 240 217 | 
             
                return [ctx, defaultFuncs, api];
         | 
| 241 218 | 
             
            }
         | 
| 242 219 |  | 
| @@ -281,15 +258,17 @@ function makeLogin(jar, email, password, loginOptions, callback, prCallback) { | |
| 281 258 | 
             
                    });
         | 
| 282 259 | 
             
                    // ---------- Very Hacky Part Ends -----------------
         | 
| 283 260 |  | 
| 261 | 
            +
                    //log.info("login", "Logging in...");
         | 
| 284 262 | 
             
                    return utils
         | 
| 285 263 | 
             
                        .post("https://www.facebook.com/login/device-based/regular/login/?login_attempt=1&lwv=110", jar, form, loginOptions)
         | 
| 286 264 | 
             
                        .then(utils.saveCookies(jar))
         | 
| 287 265 | 
             
                        .then(function(res) {
         | 
| 288 266 | 
             
                            var headers = res.headers;
         | 
| 289 | 
            -
                            if (!headers.location) throw { error:  | 
| 267 | 
            +
                            if (!headers.location) throw { error: "Wrong username/password." };
         | 
| 290 268 |  | 
| 291 269 | 
             
                            // This means the account has login approvals turned on.
         | 
| 292 270 | 
             
                            if (headers.location.indexOf('https://www.facebook.com/checkpoint/') > -1) {
         | 
| 271 | 
            +
                                log.info("login", "You have login approvals turned on.");
         | 
| 293 272 | 
             
                                var nextURL = 'https://www.facebook.com/checkpoint/?next=https%3A%2F%2Fwww.facebook.com%2Fhome.php';
         | 
| 294 273 |  | 
| 295 274 | 
             
                                return utils
         | 
| @@ -336,7 +315,7 @@ function makeLogin(jar, email, password, loginOptions, callback, prCallback) { | |
| 336 315 | 
             
                                                                if (error) {
         | 
| 337 316 | 
             
                                                                    throw {
         | 
| 338 317 | 
             
                                                                        error: 'login-approval',
         | 
| 339 | 
            -
                                                                        errordesc:  | 
| 318 | 
            +
                                                                        errordesc: "Invalid 2FA code.",
         | 
| 340 319 | 
             
                                                                        lerror: error,
         | 
| 341 320 | 
             
                                                                        continue: submit2FA
         | 
| 342 321 | 
             
                                                                    };
         | 
| @@ -346,13 +325,13 @@ function makeLogin(jar, email, password, loginOptions, callback, prCallback) { | |
| 346 325 | 
             
                                                                // Use the same form (safe I hope)
         | 
| 347 326 | 
             
                                                                delete form.no_fido;
         | 
| 348 327 | 
             
                                                                delete form.approvals_code;
         | 
| 349 | 
            -
                                                                form.name_action_selected = ' | 
| 328 | 
            +
                                                                form.name_action_selected = 'dont_save'; //'save_device';
         | 
| 350 329 |  | 
| 351 330 | 
             
                                                                return utils.post(nextURL, jar, form, loginOptions).then(utils.saveCookies(jar));
         | 
| 352 331 | 
             
                                                            })
         | 
| 353 332 | 
             
                                                            .then(function(res) {
         | 
| 354 333 | 
             
                                                                var headers = res.headers;
         | 
| 355 | 
            -
                                                                if (!headers.location && res.body.indexOf('Review Recent Login') > -1) throw { error:  | 
| 334 | 
            +
                                                                if (!headers.location && res.body.indexOf('Review Recent Login') > -1) throw { error: "Something went wrong with login approvals." };
         | 
| 356 335 |  | 
| 357 336 | 
             
                                                                var appState = utils.getAppState(jar);
         | 
| 358 337 |  | 
| @@ -381,6 +360,7 @@ function makeLogin(jar, email, password, loginOptions, callback, prCallback) { | |
| 381 360 | 
             
                                                                    JSON.parse(res.body.replace(/for\s*\(\s*;\s*;\s*\)\s*;\s*/, ""));
         | 
| 382 361 | 
             
                                                                } catch (ex) {
         | 
| 383 362 | 
             
                                                                    clearInterval(checkVerified);
         | 
| 363 | 
            +
                                                                    log.info("login", "Verified from browser. Logging in...");
         | 
| 384 364 | 
             
                                                                    if (callback === prCallback) {
         | 
| 385 365 | 
             
                                                                        callback = function(err, api) {
         | 
| 386 366 | 
             
                                                                            if (err) return prReject(err);
         | 
| @@ -400,7 +380,7 @@ function makeLogin(jar, email, password, loginOptions, callback, prCallback) { | |
| 400 380 | 
             
                                                }
         | 
| 401 381 | 
             
                                            };
         | 
| 402 382 | 
             
                                        } else {
         | 
| 403 | 
            -
                                            if (!loginOptions.forceLogin) throw { error:  | 
| 383 | 
            +
                                            if (!loginOptions.forceLogin) throw { error: "Couldn't login. Facebook might have blocked this account. Please login with a browser or enable the option 'forceLogin' and try again." };
         | 
| 404 384 |  | 
| 405 385 | 
             
                                            if (html.indexOf("Suspicious Login Attempt") > -1) form['submit[This was me]'] = "This was me";
         | 
| 406 386 | 
             
                                            else form['submit[This Is Okay]'] = "This Is Okay";
         | 
| @@ -435,496 +415,33 @@ function makeLogin(jar, email, password, loginOptions, callback, prCallback) { | |
| 435 415 | 
             
                };
         | 
| 436 416 | 
             
            }
         | 
| 437 417 |  | 
| 438 | 
            -
            function makeid(length) {
         | 
| 439 | 
            -
                var result = '';
         | 
| 440 | 
            -
                var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
         | 
| 441 | 
            -
                var charactersLength = characters.length;
         | 
| 442 | 
            -
                for (var i = 0; i < length; i++) {
         | 
| 443 | 
            -
                    result += characters.charAt(Math.floor(Math.random() * charactersLength));
         | 
| 444 | 
            -
                }
         | 
| 445 | 
            -
                return result;
         | 
| 446 | 
            -
            }
         | 
| 447 | 
            -
             | 
| 448 | 
            -
             | 
| 449 418 | 
             
            // Helps the login
         | 
| 450 | 
            -
             | 
| 419 | 
            +
            function loginHelper(appState, email, password, globalOptions, callback, prCallback) {
         | 
| 451 420 | 
             
                var mainPromise = null;
         | 
| 452 421 | 
             
                var jar = utils.getJar();
         | 
| 453 422 |  | 
| 454 423 | 
             
                // If we're given an appState we loop through it and save each cookie
         | 
| 455 424 | 
             
                // back into the jar.
         | 
| 456 | 
            -
                 | 
| 457 | 
            -
                     | 
| 458 | 
            -
                         | 
| 459 | 
            -
                         | 
| 460 | 
            -
             | 
| 461 | 
            -
                        //const os = require("os");
         | 
| 462 | 
            -
                        //const { execSync } = require('child_process');
         | 
| 463 | 
            -
                        // let rl = readline.createInterface({
         | 
| 464 | 
            -
                        // input: process.stdin,
         | 
| 465 | 
            -
                        // output: process.stdout,
         | 
| 466 | 
            -
                        // prompt: chalk.hex('#00CCCC').bold('[FCA-SUS] • ')
         | 
| 467 | 
            -
                        // });
         | 
| 468 | 
            -
                        // let type = {
         | 
| 469 | 
            -
                        //     1: {
         | 
| 470 | 
            -
                        //         "name": "Tạo Mật Khẩu Cho Appstate",
         | 
| 471 | 
            -
                        //          onRun: async function() {
         | 
| 472 | 
            -
                        //             try {
         | 
| 473 | 
            -
                        //                 rl.question("Hãy Nhập Mật Khẩu Bạn Muốn Đặt Cho Appstate !", (answer) => {
         | 
| 474 | 
            -
                        //                     console.log("Được Rồi Mật Khẩu Của Bạn Là: " + answer + ", Bạn Hãy Nhớ Kĩ Nhé !");
         | 
| 475 | 
            -
                        //                 process.env["FBKEY"] = answer;
         | 
| 476 | 
            -
                        //                     fs.writeFile('../.env', `FBKEY=${answer}`, function (err) {
         | 
| 477 | 
            -
                        //                         if (err) {
         | 
| 478 | 
            -
                        //                             submiterr(err)
         | 
| 479 | 
            -
                        //                             logger("Tạo File ENV Thất Bại !", "[ FCA-SUS ]")
         | 
| 480 | 
            -
                        //                             rl.pause();
         | 
| 481 | 
            -
                        //                         }
         | 
| 482 | 
            -
                        //                         else logger("Tạo Thành Công File ENV !","[ FCA-SUS ]")
         | 
| 483 | 
            -
                        //                         rl.pause();
         | 
| 484 | 
            -
                        //                     });
         | 
| 485 | 
            -
                        //                 })
         | 
| 486 | 
            -
                        //             }
         | 
| 487 | 
            -
                        //             catch (e) {
         | 
| 488 | 
            -
                        //                 console.log(e);
         | 
| 489 | 
            -
                        //                 logger("Đã Có Lỗi Khi Đang Try Tạo Ra Câu Hỏi =))", "[ FCA-SUS ]");
         | 
| 490 | 
            -
                        //                 rl.pause();
         | 
| 491 | 
            -
                        //             }
         | 
| 492 | 
            -
                        //         }
         | 
| 493 | 
            -
                        //     },
         | 
| 494 | 
            -
                        //     2: {
         | 
| 495 | 
            -
                        //         "name": "Tiếp Tục Chạy Fca Mà Không Cần Mã Hóa AppState",
         | 
| 496 | 
            -
                        //          onRun: async function () {
         | 
| 497 | 
            -
                        //             rl.pause();
         | 
| 498 | 
            -
                        //         }
         | 
| 499 | 
            -
                        //     },
         | 
| 500 | 
            -
                        //     3: {
         | 
| 501 | 
            -
                        //         "name": "Đổi Mật Khẩu AppState (Comming Soon..)",
         | 
| 502 | 
            -
                        //         onRun: async function () {
         | 
| 503 | 
            -
                        //             console.log(chalk.red.bold("Đã bảo là comming soon rồi mà >:v"));
         | 
| 504 | 
            -
                        //         }
         | 
| 505 | 
            -
                        //     }
         | 
| 506 | 
            -
                        // }
         | 
| 507 | 
            -
                        // const localbrand = JSON.parse(readFileSync('./package.json')).name;
         | 
| 508 | 
            -
                        // const localbrand2 = JSON.parse(readFileSync('./node_modules/fca-sus/package.json')).version;
         | 
| 509 | 
            -
                        // var axios = require('axios');
         | 
| 510 | 
            -
                        //     axios.get('https://raw.githubusercontent.com/amogusdevlol/fca-sus/main/package.json').then(async (res) => {
         | 
| 511 | 
            -
                        //         if (localbrand.toUpperCase() == 'HORIZON') {
         | 
| 512 | 
            -
                        //             console.group(chalk.bold.cyan('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'))
         | 
| 513 | 
            -
                        //                 console.log(chalk.bold.hex('#00FFCC')("[</>]") + chalk.bold.yellow(' => ') + "Hệ Điều Hành: " + chalk.bold.red(os.type()));
         | 
| 514 | 
            -
                        //                 console.log(chalk.bold.hex('#00FFCC')("[</>]") + chalk.bold.yellow(' => ') + "Thông Tin Máy: " + chalk.bold.red(os.version()));
         | 
| 515 | 
            -
                        //                 console.log(chalk.bold.hex('#00FFCC')("[</>]") + chalk.bold.yellow(' => ') + "Phiên Bản Hiện Tại: " + chalk.bold.red(localbrand2));
         | 
| 516 | 
            -
                        //                 console.log(chalk.bold.hex('#00FFCC')("[</>]") + chalk.bold.yellow(' => ')  + "Phiên Bản Mới Nhất: " + chalk.bold.red(res.data.version));
         | 
| 517 | 
            -
                        //             console.groupEnd();
         | 
| 518 | 
            -
                        //         }
         | 
| 519 | 
            -
                        //     else {
         | 
| 520 | 
            -
                        //         console.clear();
         | 
| 521 | 
            -
                        //         console.log(figlet.textSync('TeamHorizon', {font: 'ANSI Shadow',horizontalLayout: 'default',verticalLayout: 'default',width: 0,whitespaceBreak: true }))
         | 
| 522 | 
            -
                        //         console.log(chalk.hex('#9966CC')(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`));
         | 
| 523 | 
            -
                        //     }
         | 
| 524 | 
            -
                        // });
         | 
| 525 | 
            -
             | 
| 526 | 
            -
                        var backup = async(data) => {
         | 
| 527 | 
            -
                            if (fs.existsSync('./alicestate.json')) {
         | 
| 528 | 
            -
                                try {
         | 
| 529 | 
            -
                                    fs.writeFileSync('./alicestate.json', data);
         | 
| 530 | 
            -
                                } catch (e) {
         | 
| 531 | 
            -
                                    fs.writeFileSync('./alicestate.json', JSON.stringify(data, null, "\t"));
         | 
| 532 | 
            -
                                }
         | 
| 533 | 
            -
                                await new Promise(resolve => setTimeout(resolve, 5 * 1000));
         | 
| 534 | 
            -
                                process.exit(1);
         | 
| 535 | 
            -
                            } else return logger.Error();
         | 
| 536 | 
            -
                        }
         | 
| 537 | 
            -
             | 
| 538 | 
            -
                        switch (process.platform) {
         | 
| 539 | 
            -
                            case "win32":
         | 
| 540 | 
            -
                                {
         | 
| 541 | 
            -
                                    try {
         | 
| 542 | 
            -
                                        var { body } = await Fetch('https://decrypt-appstate-production.up.railway.app/getKey');
         | 
| 543 | 
            -
                                        process.env['FBKEY'] = JSON.parse(body).Data;
         | 
| 544 | 
            -
                                    } catch (e) {
         | 
| 545 | 
            -
                                        logger(Language.ErrGetPassWord);
         | 
| 546 | 
            -
                                        logger.Error();
         | 
| 547 | 
            -
                                        process.exit(1);
         | 
| 548 | 
            -
                                    }
         | 
| 549 | 
            -
                                }
         | 
| 550 | 
            -
                                break;
         | 
| 551 | 
            -
                            case "linux":
         | 
| 552 | 
            -
                                {
         | 
| 553 | 
            -
                                    if (process.env["REPL_ID"] == undefined) {
         | 
| 554 | 
            -
                                        try {
         | 
| 555 | 
            -
                                            var { body } = await Fetch.get('https://decrypt-appstate-production.up.railway.app/getKey');
         | 
| 556 | 
            -
                                            process.env['FBKEY'] = JSON.parse(body).Data;
         | 
| 557 | 
            -
                                        } catch (e) {
         | 
| 558 | 
            -
                                            logger.Error();
         | 
| 559 | 
            -
                                            process.exit(1);
         | 
| 560 | 
            -
                                        }
         | 
| 561 | 
            -
                                    } else {
         | 
| 562 | 
            -
                                       /* try {
         | 
| 563 | 
            -
                                            const client = new Client();
         | 
| 564 | 
            -
                                            let key = await client.get("FBKEY");
         | 
| 565 | 
            -
                                            if (!key) {
         | 
| 566 | 
            -
                                                await client.set("FBKEY", makeid(49));
         | 
| 567 | 
            -
                                                let key = await client.get("FBKEY");
         | 
| 568 | 
            -
                                                process.env['FBKEY'] = key;
         | 
| 569 | 
            -
                                            } else {
         | 
| 570 | 
            -
                                                process.env['FBKEY'] = key;
         | 
| 571 | 
            -
                                            }
         | 
| 572 | 
            -
                                        } catch (e) {
         | 
| 573 | 
            -
                                            logger(Language.ErrGenerateKey, '[ FCA-SUS ]');
         | 
| 574 | 
            -
                                            logger(e, '[ FCA-SUS ]');
         | 
| 575 | 
            -
                                            logger.Error();
         | 
| 576 | 
            -
                                            process.exit(0)
         | 
| 577 | 
            -
                                        }*/
         | 
| 578 | 
            -
                                    }
         | 
| 579 | 
            -
                                }
         | 
| 580 | 
            -
                                break;
         | 
| 581 | 
            -
                            case "android":
         | 
| 582 | 
            -
                                {
         | 
| 583 | 
            -
                                    try {
         | 
| 584 | 
            -
                                        var { body } = await Fetch.get('https://decrypt-appstate-production.up.railway.app/getKey');
         | 
| 585 | 
            -
                                        process.env['FBKEY'] = JSON.parse(body).Data;
         | 
| 586 | 
            -
                                    } catch (e) {
         | 
| 587 | 
            -
                                        
         | 
| 588 | 
            -
                                        return logger.Error();
         | 
| 589 | 
            -
                                    }
         | 
| 590 | 
            -
                                }
         | 
| 591 | 
            -
                                break;
         | 
| 592 | 
            -
                            default:
         | 
| 593 | 
            -
                                {
         | 
| 594 | 
            -
                                    
         | 
| 595 | 
            -
                                    logger.Error();
         | 
| 596 | 
            -
                                    process.exit(0);
         | 
| 597 | 
            -
                                }
         | 
| 598 | 
            -
                        }
         | 
| 599 | 
            -
             | 
| 600 | 
            -
                        try {
         | 
| 601 | 
            -
                            switch (require("./alice/alicezetion.json").EncryptFeature) {
         | 
| 602 | 
            -
                                case true:
         | 
| 603 | 
            -
                                    {
         | 
| 604 | 
            -
                                        appState = JSON.parse(JSON.stringify(appState, null, "\t"));
         | 
| 605 | 
            -
                                        switch (utils.getType(appState)) {
         | 
| 606 | 
            -
                                            case "Array":
         | 
| 607 | 
            -
                                                {
         | 
| 608 | 
            -
                                                  
         | 
| 609 | 
            -
                                                }
         | 
| 610 | 
            -
                                                break;
         | 
| 611 | 
            -
                                            case "String":
         | 
| 612 | 
            -
                                                {
         | 
| 613 | 
            -
                                                    try {
         | 
| 614 | 
            -
                                                        appState = StateCrypt.decryptState(appState, process.env['FBKEY']);
         | 
| 615 | 
            -
                                                        logger(Language.DecryptSuccess, '[ FCA-SUS ]');
         | 
| 616 | 
            -
                                                    } catch (e) {
         | 
| 617 | 
            -
                                                        if (process.env.Backup != undefined && process.env.Backup) {
         | 
| 618 | 
            -
                                                            backup(process.env.Backup);
         | 
| 619 | 
            -
                                                        } else switch (process.platform) {
         | 
| 620 | 
            -
                                                            case "win32":
         | 
| 621 | 
            -
                                                                {
         | 
| 622 | 
            -
                                                                    try {
         | 
| 623 | 
            -
                                                                        if (fs.existsSync('./backupappstate.json')) {
         | 
| 624 | 
            -
                                                                            let content = fs.readFileSync('./backupappstate.json', 'utf8');
         | 
| 625 | 
            -
                                                                            return backup(content);
         | 
| 626 | 
            -
                                                                        }
         | 
| 627 | 
            -
                                                                    } catch (e) {
         | 
| 628 | 
            -
                                                
         | 
| 629 | 
            -
                                                                        logger.Error();
         | 
| 630 | 
            -
                                                                        process.exit(0);
         | 
| 631 | 
            -
                                                                    }
         | 
| 632 | 
            -
                                                                }
         | 
| 633 | 
            -
                                                                break;
         | 
| 634 | 
            -
                                                            case "linux":
         | 
| 635 | 
            -
                                                                {
         | 
| 636 | 
            -
                                                                    if (process.env["REPL_ID"] == undefined) {
         | 
| 637 | 
            -
                                                                        try {
         | 
| 638 | 
            -
                                                                            if (fs.existsSync('./backupappstate.json')) {
         | 
| 639 | 
            -
                                                                                let content = fs.readFileSync('./backupappstate.json', 'utf8');
         | 
| 640 | 
            -
                                                                                return backup(content);
         | 
| 641 | 
            -
                                                                            }
         | 
| 642 | 
            -
                                                                        } catch (e) {
         | 
| 643 | 
            -
                                                                            //logger(Language.ErrBackup, '[ FCA-SUS ]');
         | 
| 644 | 
            -
                                                                            logger.Error();
         | 
| 645 | 
            -
                                                                            process.exit(0);
         | 
| 646 | 
            -
                                                                        }
         | 
| 647 | 
            -
                                                                    } else {
         | 
| 648 | 
            -
                                                                        try {
         | 
| 649 | 
            -
                                                                            const client = new Client();
         | 
| 650 | 
            -
                                                                            let key = await client.get("Backup");
         | 
| 651 | 
            -
                                                                            if (key) {
         | 
| 652 | 
            -
                                                                                return backup(JSON.stringify(key));
         | 
| 653 | 
            -
                                                                            } else {
         | 
| 654 | 
            -
                                                                                logger(Language.ErrBackup, '[ FCA-SUS ]');
         | 
| 655 | 
            -
                                                                            }
         | 
| 656 | 
            -
                                                                        } catch (e) {
         | 
| 657 | 
            -
                                                                            logger(Language.ErrBackup, '[ FCA-SUS ]');
         | 
| 658 | 
            -
                                                                        }
         | 
| 659 | 
            -
                                                                    }
         | 
| 660 | 
            -
                                                                }
         | 
| 661 | 
            -
                                                                break;
         | 
| 662 | 
            -
                                                            case "android":
         | 
| 663 | 
            -
                                                                {
         | 
| 664 | 
            -
                                                                    try {
         | 
| 665 | 
            -
                                                                        if (fs.existsSync('./backupappstate.json')) {
         | 
| 666 | 
            -
                                                                            let content = fs.readFileSync('./backupappstate.json', 'utf8');
         | 
| 667 | 
            -
                                                                            return backup(content);
         | 
| 668 | 
            -
                                                                        }
         | 
| 669 | 
            -
                                                                    } catch (e) {
         | 
| 670 | 
            -
                                                                        logger(Language.ErrBackup, '[ FCA-SUS ]');
         | 
| 671 | 
            -
                                                                        logger.Error();
         | 
| 672 | 
            -
                                                                        process.exit(0);
         | 
| 673 | 
            -
                                                                    }
         | 
| 674 | 
            -
                                                                }
         | 
| 675 | 
            -
                                                        }
         | 
| 676 | 
            -
                                                        logger(Language.DecryptFailed, '[ FCA-SUS ]');
         | 
| 677 | 
            -
                                                        return logger.Error();
         | 
| 678 | 
            -
                                                    }
         | 
| 679 | 
            -
                                                    logger(getText.gettext(Language.YourAppStatePass, process.env.FBKEY), '[ FCA-SUS ]');
         | 
| 680 | 
            -
                                                }
         | 
| 681 | 
            -
                                                break;
         | 
| 682 | 
            -
                                            default:
         | 
| 683 | 
            -
                                                {
         | 
| 684 | 
            -
                                                    logger(Language.InvaildAppState, "[ FCA-SUS ]");
         | 
| 685 | 
            -
                                                    process.exit(0)
         | 
| 686 | 
            -
                                                }
         | 
| 687 | 
            -
                                        }
         | 
| 688 | 
            -
                                    }
         | 
| 689 | 
            -
                                    break;
         | 
| 690 | 
            -
                                case false:
         | 
| 691 | 
            -
                                    {
         | 
| 692 | 
            -
                                        switch (utils.getType(appState)) {
         | 
| 693 | 
            -
                                            case "Array":
         | 
| 694 | 
            -
                                                {
         | 
| 695 | 
            -
                                                    logger(Language.EncryptStateOff, "[ FCA-SUS ]");
         | 
| 696 | 
            -
                                                }
         | 
| 697 | 
            -
                                                break;
         | 
| 698 | 
            -
                                            case "String":
         | 
| 699 | 
            -
                                                {
         | 
| 700 | 
            -
                                                    logger(Language.EncryptStateOff, "[ FCA-SUS ]");
         | 
| 701 | 
            -
                                                    try {
         | 
| 702 | 
            -
                                                        appState = StateCrypt.decryptState(appState, process.env['FBKEY']);
         | 
| 703 | 
            -
                                                        logger(Language.DecryptSuccess, '[ FCA-SUS ]');
         | 
| 704 | 
            -
                                                    } catch (e) {
         | 
| 705 | 
            -
                                                        if (process.env.Backup != undefined && process.env.Backup) {
         | 
| 706 | 
            -
                                                            backup(process.env.Backup);
         | 
| 707 | 
            -
                                                        } else switch (process.platform) {
         | 
| 708 | 
            -
                                                            case "win32":
         | 
| 709 | 
            -
                                                                {
         | 
| 710 | 
            -
                                                                    try {
         | 
| 711 | 
            -
                                                                        if (fs.existsSync('./backupappstate.json')) {
         | 
| 712 | 
            -
                                                                            let content = fs.readFileSync('./backupappstate.json', 'utf8');
         | 
| 713 | 
            -
                                                                            return backup(content);
         | 
| 714 | 
            -
                                                                        }
         | 
| 715 | 
            -
                                                                    } catch (e) {
         | 
| 716 | 
            -
                                                                        logger(Language.ErrBackup, '[ FCA-SUS ]');
         | 
| 717 | 
            -
                                                                        logger.Error();
         | 
| 718 | 
            -
                                                                        process.exit(0);
         | 
| 719 | 
            -
                                                                    }
         | 
| 720 | 
            -
                                                                }
         | 
| 721 | 
            -
                                                                break;
         | 
| 722 | 
            -
                                                            case "linux":
         | 
| 723 | 
            -
                                                                {
         | 
| 724 | 
            -
                                                                    if (process.env["REPL_ID"] == undefined) {
         | 
| 725 | 
            -
                                                                        try {
         | 
| 726 | 
            -
                                                                            if (fs.existsSync('./backupappstate.json')) {
         | 
| 727 | 
            -
                                                                                let content = fs.readFileSync('./backupappstate.json', 'utf8');
         | 
| 728 | 
            -
                                                                                return backup(content);
         | 
| 729 | 
            -
                                                                            }
         | 
| 730 | 
            -
                                                                        } catch (e) {
         | 
| 731 | 
            -
                                                                            logger(Language.ErrBackup, '[ FCA-SUS ]');
         | 
| 732 | 
            -
                                                                            logger.Error();
         | 
| 733 | 
            -
                                                                            process.exit(0);
         | 
| 734 | 
            -
                                                                        }
         | 
| 735 | 
            -
                                                                    } else {
         | 
| 736 | 
            -
                                                                        try {
         | 
| 737 | 
            -
                                                                            const client = new Client();
         | 
| 738 | 
            -
                                                                            let key = await client.get("Backup");
         | 
| 739 | 
            -
                                                                            if (key) {
         | 
| 740 | 
            -
                                                                                return backup(JSON.stringify(key));
         | 
| 741 | 
            -
                                                                            } else {
         | 
| 742 | 
            -
                                                                                logger(Language.ErrBackup, '[ FCA-SUS ]');
         | 
| 743 | 
            -
                                                                            }
         | 
| 744 | 
            -
                                                                        } catch (e) {
         | 
| 745 | 
            -
                                                                            logger(Language.ErrBackup, '[ FCA-SUS ]');
         | 
| 746 | 
            -
                                                                        }
         | 
| 747 | 
            -
                                                                    }
         | 
| 748 | 
            -
                                                                }
         | 
| 749 | 
            -
                                                                break;
         | 
| 750 | 
            -
                                                            case "android":
         | 
| 751 | 
            -
                                                                {
         | 
| 752 | 
            -
                                                                    try {
         | 
| 753 | 
            -
                                                                        if (fs.existsSync('./backupappstate.json')) {
         | 
| 754 | 
            -
                                                                            let content = fs.readFileSync('./backupappstate.json', 'utf8');
         | 
| 755 | 
            -
                                                                            return backup(content);
         | 
| 756 | 
            -
                                                                        }
         | 
| 757 | 
            -
                                                                    } catch (e) {
         | 
| 758 | 
            -
                                                                        logger(Language.ErrBackup, '[ FCA-SUS ]');
         | 
| 759 | 
            -
                                                                        logger.Error();
         | 
| 760 | 
            -
                                                                        process.exit(0);
         | 
| 761 | 
            -
                                                                    }
         | 
| 762 | 
            -
                                                                }
         | 
| 763 | 
            -
                                                        }
         | 
| 764 | 
            -
                                                        logger(Language.DecryptFailed, '[ FCA-SUS ]');
         | 
| 765 | 
            -
                                                        return logger.Error();
         | 
| 766 | 
            -
                                                    }
         | 
| 767 | 
            -
                                                }
         | 
| 768 | 
            -
                                                break;
         | 
| 769 | 
            -
                                            default:
         | 
| 770 | 
            -
                                                {
         | 
| 771 | 
            -
                                                    logger(Language.InvaildAppState, "[ FCA-SUS ]");
         | 
| 772 | 
            -
                                                    process.exit(0)
         | 
| 773 | 
            -
                                                }
         | 
| 774 | 
            -
                                        }
         | 
| 775 | 
            -
                                    }
         | 
| 776 | 
            -
                                    break;
         | 
| 777 | 
            -
                                default:
         | 
| 778 | 
            -
                                    {
         | 
| 779 | 
            -
                                        logger(getText.gettext(Language.IsNotABoolean, require("./alice/alicezetion.json").EncryptFeature), "[ FCA-SUS ]")
         | 
| 780 | 
            -
                                        process.exit(0);
         | 
| 781 | 
            -
                                    }
         | 
| 782 | 
            -
                            }
         | 
| 783 | 
            -
                        } catch (e) {
         | 
| 784 | 
            -
                            console.log(e);
         | 
| 785 | 
            -
                        }
         | 
| 786 | 
            -
             | 
| 787 | 
            -
                        try {
         | 
| 788 | 
            -
                            appState = JSON.parse(appState);
         | 
| 789 | 
            -
                        } catch (e) {
         | 
| 790 | 
            -
                            try {
         | 
| 791 | 
            -
                                appState = appState;
         | 
| 792 | 
            -
                            } catch (e) {
         | 
| 793 | 
            -
                                return logger.Error();
         | 
| 794 | 
            -
                            }
         | 
| 795 | 
            -
                        }
         | 
| 796 | 
            -
                        try {
         | 
| 797 | 
            -
                            appState.map(function(c) {
         | 
| 798 | 
            -
                                var str = c.key + "=" + c.value + "; expires=" + c.expires + "; domain=" + c.domain + "; path=" + c.path + ";";
         | 
| 799 | 
            -
                                jar.setCookie(str, "http://" + c.domain);
         | 
| 800 | 
            -
                            });
         | 
| 801 | 
            -
                            switch (process.platform) {
         | 
| 802 | 
            -
                                case "win32":
         | 
| 803 | 
            -
                                    {
         | 
| 804 | 
            -
                                        try {
         | 
| 805 | 
            -
                                            fs.writeFileSync("./backupappstate.json", JSON.stringify(appState, null, "\t"));
         | 
| 806 | 
            -
                                            process.env.Backup = JSON.stringify(appState, null, "\t");
         | 
| 807 | 
            -
                                        } catch (e) {
         | 
| 808 | 
            -
                                            logger(Language.BackupFailed, '[ FCA-SUS ]');
         | 
| 809 | 
            -
                                        }
         | 
| 810 | 
            -
                                    }
         | 
| 811 | 
            -
                                    break;
         | 
| 812 | 
            -
                                case "linux":
         | 
| 813 | 
            -
                                    {
         | 
| 814 | 
            -
                                        if (process.env["REPL_ID"] == undefined) {
         | 
| 815 | 
            -
                                            try {
         | 
| 816 | 
            -
                                                fs.writeFileSync("./backupappstate.json", JSON.stringify(appState, null, "\t"));
         | 
| 817 | 
            -
                                                process.env.Backup = JSON.stringify(appState, null, "\t");
         | 
| 818 | 
            -
                                            } catch (e) {
         | 
| 819 | 
            -
                                                logger(Language.BackupFailed, '[ FCA-SUS ]');
         | 
| 820 | 
            -
                                            }
         | 
| 821 | 
            -
                                        } else {
         | 
| 822 | 
            -
                                            try {
         | 
| 823 | 
            -
                                                if (fs.existsSync('./backupappstate.json')) {
         | 
| 824 | 
            -
                                                    fs.unlinkSync('./backupappstate.json');
         | 
| 825 | 
            -
                                                }
         | 
| 826 | 
            -
                                                const client = new Client();
         | 
| 827 | 
            -
                                                await client.set("Backup", appState);
         | 
| 828 | 
            -
                                                process.env.Backup = JSON.stringify(appState, null, "\t");
         | 
| 829 | 
            -
                                            } catch (e) {
         | 
| 830 | 
            -
                                                logger(Language.BackupFailed, '[ FCA-SUS ]');
         | 
| 831 | 
            -
                                            }
         | 
| 832 | 
            -
                                        }
         | 
| 833 | 
            -
                                    }
         | 
| 834 | 
            -
                                    break;
         | 
| 835 | 
            -
                                case "android":
         | 
| 836 | 
            -
                                    {
         | 
| 837 | 
            -
                                        try {
         | 
| 838 | 
            -
                                            fs.writeFileSync("./backupappstate.json", JSON.stringify(appState, null, "\t"));
         | 
| 839 | 
            -
                                            process.env.Backup = JSON.stringify(appState, null, "\t");
         | 
| 840 | 
            -
                                        } catch (e) {
         | 
| 841 | 
            -
                                            logger(Language.BackupFailed, '[ FCA-SUS ]');
         | 
| 842 | 
            -
                                        }
         | 
| 843 | 
            -
                                    }
         | 
| 844 | 
            -
                            }
         | 
| 845 | 
            -
             | 
| 846 | 
            -
                            mainPromise = utils.get('https://www.facebook.com/', jar, null, globalOptions, { noRef: true }).then(utils.saveCookies(jar));
         | 
| 847 | 
            -
                        } catch (e) {
         | 
| 848 | 
            -
             | 
| 849 | 
            -
                            if (process.env.Backup != undefined && process.env.Backup) {
         | 
| 850 | 
            -
                                return backup(process.env.Backup);
         | 
| 851 | 
            -
                            }
         | 
| 852 | 
            -
                            switch (process.platform) {
         | 
| 853 | 
            -
                                case "win32":
         | 
| 854 | 
            -
                                    {
         | 
| 855 | 
            -
                                        try {
         | 
| 856 | 
            -
                                            if (fs.existsSync('./backupappstate.json')) {
         | 
| 857 | 
            -
                                                let content = fs.readFileSync('./backupappstate.json', 'utf8');
         | 
| 858 | 
            -
                                                return backup(content);
         | 
| 859 | 
            -
                                            }
         | 
| 860 | 
            -
                                        } catch (e) {
         | 
| 861 | 
            -
                                            logger(Language.ErrBackup, '[ FCA-SUS ]');
         | 
| 862 | 
            -
                                            logger.Error();
         | 
| 863 | 
            -
                                            process.exit(0);
         | 
| 864 | 
            -
                                        }
         | 
| 865 | 
            -
                                    }
         | 
| 866 | 
            -
                                    break;
         | 
| 867 | 
            -
                                case "linux":
         | 
| 868 | 
            -
                                    {
         | 
| 869 | 
            -
                                        if (process.env["REPL_ID"] == undefined) {
         | 
| 870 | 
            -
                                            try {
         | 
| 871 | 
            -
                                                if (fs.existsSync('./backupappstate.json')) {
         | 
| 872 | 
            -
                                                    let content = fs.readFileSync('./backupappstate.json', 'utf8');
         | 
| 873 | 
            -
                                                    return backup(content);
         | 
| 874 | 
            -
                                                }
         | 
| 875 | 
            -
                                            } catch (e) {
         | 
| 876 | 
            -
                                                logger(Language.ErrBackup, '[ FCA-SUS ]');
         | 
| 877 | 
            -
                                                logger.Error();
         | 
| 878 | 
            -
                                                process.exit(0);
         | 
| 879 | 
            -
                                            }
         | 
| 880 | 
            -
                                        } else {
         | 
| 881 | 
            -
                                            try {
         | 
| 882 | 
            -
                                                const client = new Client();
         | 
| 883 | 
            -
                                                let key = await client.get("Backup");
         | 
| 884 | 
            -
                                                if (key) {
         | 
| 885 | 
            -
                                                    backup(JSON.stringify(key));
         | 
| 886 | 
            -
                                                } else {
         | 
| 887 | 
            -
                                                    logger(Language.ErrBackup, '[ FCA-SUS ]');
         | 
| 888 | 
            -
                                                }
         | 
| 889 | 
            -
                                            } catch (e) {
         | 
| 890 | 
            -
                                                logger(Language.ErrBackup, '[ FCA-SUS ]');
         | 
| 891 | 
            -
                                            }
         | 
| 892 | 
            -
                                        }
         | 
| 893 | 
            -
                                    }
         | 
| 894 | 
            -
                                    break;
         | 
| 895 | 
            -
                                case "android":
         | 
| 896 | 
            -
                                    {
         | 
| 897 | 
            -
                                        try {
         | 
| 898 | 
            -
                                            if (fs.existsSync('./backupappstate.json')) {
         | 
| 899 | 
            -
                                                let content = fs.readFileSync('./backupappstate.json', 'utf8');
         | 
| 900 | 
            -
                                                return backup(content);
         | 
| 901 | 
            -
                                            }
         | 
| 902 | 
            -
                                        } catch (e) {
         | 
| 903 | 
            -
                                            logger(Language.ErrBackup, '[ FCA-SUS ]');
         | 
| 904 | 
            -
                                            logger.Error();
         | 
| 905 | 
            -
                                            process.exit(0);
         | 
| 906 | 
            -
                                        }
         | 
| 907 | 
            -
                                    }
         | 
| 908 | 
            -
                                    break;
         | 
| 909 | 
            -
                            }
         | 
| 425 | 
            +
                if (appState) {
         | 
| 426 | 
            +
                    appState.map(function(c) {
         | 
| 427 | 
            +
                        var str = c.key + "=" + c.value + "; expires=" + c.expires + "; domain=" + c.domain + "; path=" + c.path + ";";
         | 
| 428 | 
            +
                        jar.setCookie(str, "http://" + c.domain);
         | 
| 429 | 
            +
                    });
         | 
| 910 430 |  | 
| 911 | 
            -
             | 
| 912 | 
            -
             | 
| 913 | 
            -
             | 
| 914 | 
            -
                     | 
| 915 | 
            -
             | 
| 916 | 
            -
             | 
| 917 | 
            -
                         | 
| 918 | 
            -
             | 
| 919 | 
            -
             | 
| 920 | 
            -
             | 
| 921 | 
            -
                            .then( | 
| 922 | 
            -
             | 
| 923 | 
            -
                            });
         | 
| 924 | 
            -
                    }
         | 
| 925 | 
            -
                } catch (e) {
         | 
| 926 | 
            -
                    console.log(e);
         | 
| 431 | 
            +
                    // Load the main page.
         | 
| 432 | 
            +
                    mainPromise = utils.get('https://www.facebook.com/', jar, null, globalOptions, { noRef: true }).then(utils.saveCookies(jar));
         | 
| 433 | 
            +
                } else {
         | 
| 434 | 
            +
                    // Open the main page, then we login with the given credentials and finally
         | 
| 435 | 
            +
                    // load the main page again (it'll give us some IDs that we need)
         | 
| 436 | 
            +
                    mainPromise = utils
         | 
| 437 | 
            +
                        .get("https://www.facebook.com/", null, null, globalOptions, { noRef: true })
         | 
| 438 | 
            +
                        .then(utils.saveCookies(jar))
         | 
| 439 | 
            +
                        .then(makeLogin(jar, email, password, globalOptions, callback, prCallback))
         | 
| 440 | 
            +
                        .then(function() {
         | 
| 441 | 
            +
                            return utils.get('https://www.facebook.com/', jar, null, globalOptions).then(utils.saveCookies(jar));
         | 
| 442 | 
            +
                        });
         | 
| 927 443 | 
             
                }
         | 
| 444 | 
            +
             | 
| 928 445 | 
             
                var ctx = null;
         | 
| 929 446 | 
             
                var _defaultFuncs = null;
         | 
| 930 447 | 
             
                var api = null;
         | 
| @@ -937,14 +454,15 @@ async function loginHelper(appState, email, password, globalOptions, callback, p | |
| 937 454 | 
             
                        if (redirect && redirect[1]) return utils.get(redirect[1], jar, null, globalOptions).then(utils.saveCookies(jar));
         | 
| 938 455 | 
             
                        return res;
         | 
| 939 456 | 
             
                    })
         | 
| 940 | 
            -
                    .then( | 
| 457 | 
            +
                    .then(function(res) {
         | 
| 941 458 | 
             
                        var html = res.body;
         | 
| 942 | 
            -
                        var stuff =  | 
| 459 | 
            +
                        var stuff = buildAPI(globalOptions, html, jar);
         | 
| 943 460 | 
             
                        ctx = stuff[0];
         | 
| 944 461 | 
             
                        _defaultFuncs = stuff[1];
         | 
| 945 462 | 
             
                        api = stuff[2];
         | 
| 946 463 | 
             
                        return res;
         | 
| 947 464 | 
             
                    });
         | 
| 465 | 
            +
             | 
| 948 466 | 
             
                // given a pageID we log in as a page
         | 
| 949 467 | 
             
                if (globalOptions.pageID) {
         | 
| 950 468 | 
             
                    mainPromise = mainPromise
         | 
| @@ -961,57 +479,13 @@ async function loginHelper(appState, email, password, globalOptions, callback, p | |
| 961 479 | 
             
                // At the end we call the callback or catch an exception
         | 
| 962 480 | 
             
                mainPromise
         | 
| 963 481 | 
             
                    .then(function() {
         | 
| 964 | 
            -
                         | 
| 965 | 
            -
                         | 
| 966 | 
            -
             | 
| 967 | 
            -
             | 
| 968 | 
            -
                        var { readFileSync } = require('fs-extra');
         | 
| 969 | 
            -
                        const { execSync } = require('child_process');
         | 
| 970 | 
            -
                        Fetch('https://raw.githubusercontent.com/amogusdevlol/node-ainzfb/main/package.json').then(async(res) => {
         | 
| 971 | 
            -
                            const localbrand = JSON.parse(readFileSync('./node_modules/node-ainzfb-new/package.json')).version;
         | 
| 972 | 
            -
                            if (Number(localbrand.replace(/\./g, "")) < Number(JSON.parse(res.body.toString()).version.replace(/\./g, ""))) {
         | 
| 973 | 
            -
                               // log.warn("[ FCA-SUS ] •", getText.gettext(Language.NewVersionFound, JSON.parse(readFileSync('./node_modules/node-ainzfb/package.json')).version, JSON.parse(res.body.toString()).version));
         | 
| 974 | 
            -
                                log.warn("[ FCA-SUS ] •", Language.AutoUpdate);
         | 
| 975 | 
            -
                                try {
         | 
| 976 | 
            -
                                    execSync('npm install node-ainzfb-new@latest', { stdio: 'inherit' });
         | 
| 977 | 
            -
                                    logger(Language.UpdateSuccess, "[ FCA-SUS ]")
         | 
| 978 | 
            -
                                    logger(Language.RestartAfterUpdate, '[ FCA-SUS ]');
         | 
| 979 | 
            -
                                    await new Promise(resolve => setTimeout(resolve, 5 * 1000));
         | 
| 980 | 
            -
                                    console.clear();
         | 
| 981 | 
            -
                                    process.exit(1);
         | 
| 982 | 
            -
                                } catch (err) {
         | 
| 983 | 
            -
                                    log.warn('Error Update: ' + err);
         | 
| 984 | 
            -
                                    logger(Language.UpdateFailed, "[ FCA-SUS ]");
         | 
| 985 | 
            -
                                    try {
         | 
| 986 | 
            -
                                        require.resolve('sus-support');
         | 
| 987 | 
            -
                                    } catch (e) {
         | 
| 988 | 
            -
                                        logger(Language.InstallSupportTool, "[ FCA-SUS ]");
         | 
| 989 | 
            -
                                        execSync('npm install git+https://github.com/amogusdevlol/sus-support.git', { stdio: 'inherit' });
         | 
| 990 | 
            -
                                        process.exit(1);
         | 
| 991 | 
            -
                                    }
         | 
| 992 | 
            -
                                    var fcasp = require('sus-support');
         | 
| 993 | 
            -
                                    try {
         | 
| 994 | 
            -
                                        fcasp.onError()
         | 
| 995 | 
            -
                                    } catch (e) {
         | 
| 996 | 
            -
                                        //logger(Language.NotiAfterUseToolFail, "[ Fca - Helper ]")
         | 
| 997 | 
            -
                                        //logger("rmdir ./node_modules then enter npm i && npm start", "[ Fca - Helper ]");
         | 
| 998 | 
            -
                                        process.exit(0);
         | 
| 999 | 
            -
                                    }
         | 
| 1000 | 
            -
             | 
| 1001 | 
            -
                                }
         | 
| 1002 | 
            -
                            } else {
         | 
| 1003 | 
            -
                                /*logger(getText.gettext(Language.LocalVersion, localbrand), "[ FCA-SUS ]");
         | 
| 1004 | 
            -
                                logger(Language.WishMessage[Math.floor(Math.random() * Language.WishMessage.length)], "[ FCA-SUS ]");*/
         | 
| 1005 | 
            -
                                require('./Extra/ExtraUptimeRobot')()
         | 
| 1006 | 
            -
                                await new Promise(resolve => setTimeout(resolve, 5 * 1000));
         | 
| 1007 | 
            -
                                callback(null, api);
         | 
| 1008 | 
            -
                            }
         | 
| 1009 | 
            -
                        });
         | 
| 1010 | 
            -
                    }).catch(function(e) {
         | 
| 482 | 
            +
                        //log.info("login", 'Done logging in.');
         | 
| 483 | 
            +
                        return callback(null, api);
         | 
| 484 | 
            +
                    })
         | 
| 485 | 
            +
                    .catch(function(e) {
         | 
| 1011 486 | 
             
                        log.error("login", e.error || e);
         | 
| 1012 487 | 
             
                        callback(e);
         | 
| 1013 488 | 
             
                    });
         | 
| 1014 | 
            -
                //!---------- Auto Check, Update END -----------------!//
         | 
| 1015 489 | 
             
            }
         | 
| 1016 490 |  | 
| 1017 491 | 
             
            function alice(loginData, options, callback) {
         | 
| @@ -1027,17 +501,14 @@ function alice(loginData, options, callback) { | |
| 1027 501 | 
             
                    updatePresence: false,
         | 
| 1028 502 | 
             
                    forceLogin: false,
         | 
| 1029 503 | 
             
                    autoMarkDelivery: false,
         | 
| 1030 | 
            -
                    autoMarkRead:  | 
| 504 | 
            +
                    autoMarkRead: true,
         | 
| 1031 505 | 
             
                    autoReconnect: true,
         | 
| 1032 | 
            -
                    logRecordSize:  | 
| 506 | 
            +
                    logRecordSize: defaultLogRecordSize,
         | 
| 1033 507 | 
             
                    online: false,
         | 
| 1034 508 | 
             
                    emitReady: false,
         | 
| 1035 | 
            -
                    userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X  | 
| 509 | 
            +
                    userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18"
         | 
| 1036 510 | 
             
                };
         | 
| 1037 511 |  | 
| 1038 | 
            -
                //! bằng 1 cách nào đó tắt online sẽ đánh lừa được facebook :v
         | 
| 1039 | 
            -
                //! phải có that có this chứ :v
         | 
| 1040 | 
            -
             | 
| 1041 512 | 
             
                setOptions(globalOptions, options);
         | 
| 1042 513 |  | 
| 1043 514 | 
             
                var prCallback = null;
         | 
| @@ -1058,11 +529,4 @@ function alice(loginData, options, callback) { | |
| 1058 529 | 
             
                return returnPromise;
         | 
| 1059 530 | 
             
            }
         | 
| 1060 531 |  | 
| 1061 | 
            -
            module.exports = alice;
         | 
| 1062 | 
            -
             | 
| 1063 | 
            -
             | 
| 1064 | 
            -
             | 
| 1065 | 
            -
             | 
| 1066 | 
            -
             | 
| 1067 | 
            -
             | 
| 1068 | 
            -
             | 
| 532 | 
            +
            module.exports = alice;
         |