// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%BE%97%E6%97%A0%E5%BC%80%E6%BA%90.js
// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%BE%97%E6%97%A0%E5%BC%80%E6%BA%90.js
// # Repo: jdqlscript/toulu
// # Path: 得无开源.js
// # UploadedAt: 2025-06-28T11:18:42+08:00
// # SHA256: d10a36e3bce740fda3d426f6787830dc5d82f20ed3f6f6e5b8d83028ec3ae80b
// # Category: 微信小程序/抓包版
// # Evidence: appid/openid/session_key/encryptedData等小程序字段
// 

/**
 * cron 10 11 * * *
 * 依赖 crypto-js & jsencrypt 
 * 得物APP 探索中的玩一玩 所有游戏的入口都在那里  请跑任务之前手动玩一次
 * --------------------------------------------------
 * 变量名:dewuCK
 * 变量值:抓app.dewu.com   请求头Headers中的x-auth-token  去掉Bearer # 连接cookie中dutoken得值 可以直接搜dutoken  # 连接SK
 * 三个值 x-auth-token的值去掉Bearer#dutoken的值#SK的值
 * UA的变量名UAdefult_dewu
 * export UAdefult_dewu="Mozilla/5.0 (.....UA"
 * 例如ejxxxxx...#d41d8cd9|16...2233|17...|4sasasasa...#9xxxxxxxx
 * 多账号& 或换行 或新建同名变量
 * -------------------------------------------------
 * --------------------------------------------------
 * new Env("得物")
 */

let ckName = "dewuCK";//CK变量名字


const version = "testV1"
const isPromiseAll = process.env["isPromiseAll"] ? process.env["isPromiseAll"] : "true";//是否开启并发
let UAdefult = "Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/80.0.3987.99 Mobile Safari/537.36/duapp/5.39.1(android;10)"
let UA = process.env["UAdefult_dewu"] ? process.env["UAdefult_dewu"] : UAdefult
let SK = process.env["SKdefult_dewu"] ? process.env["SKdefult_dewu"] : ""

const $ = new Env("得物农场");
const notify = $.isNode() ? require('./sendNotify') : '';
let envSplitor = ["&", "\n"]; //多账号分隔符
let strSplitor = "#"; //多变量分隔符
let userIdx = 0;
let userList = [];
let authShareCodeList = []
let stationShareCodesList = []
let zeroLotteryShareCodesModeGetList = []
let helpCode = ""
const CryptoJS = require("crypto-js");
async function main() {
    $.log(`并发状态:${isPromiseAll == "true" ? "[true]" : "[false]"}`)
    let { body: shareCode } = await $.httpRequest({ timeout: 10000, method: "get", url: "https://gitee.com/smallfawn/Note/raw/main/updateTeam/dwnc.json", headers: { "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_1_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148/duapp/5.38.6" } })
    $.log(`当前版本:${version} 最新版本${shareCode.v}`)
    if (version != shareCode.v) {
        $.log(`当前版本和最新版本不一致`)
        return
    }
    $.log(`[${shareCode.notice}]`);
    authShareCodeList = shareCode.treeShareCodesList
    stationShareCodesList = shareCode.stationShareCodesList
    zeroLotteryShareCodesModeGetList = shareCode.zeroLotteryShareCodesModeGetList
    let taskall = [];
    $.log(`======= 🌳初始化邀请码 =======`)
    for (let user in userList) {
        if (userList[user].ckStatus) {
            //如果user处于数组第一 那么则await 否则则promiseAll
            if (user == 0) {
                await userList[0].UserInit();
            } else {
                if (isPromiseAll == "true") {
                    taskall.push(userList[user].UserInit());
                } else {
                    taskall.push(await userList[user].UserInit());
                }
            }
        }
    }
    await Promise.all(taskall);
    $.log(`======= 🌳果园 =======`)
    for (let user of userList) {
        if (user.ckStatus) {
            if (isPromiseAll == "true") {
                taskall.push(user.tree());
            } else { taskall.push(await user.tree()); }
        }
    }
    await Promise.all(taskall);
    taskall = [];
    $.log(`======= 🐟鱼厂 =======`)

    for (let user of userList) {
        if (user.ckStatus) {
            if (isPromiseAll == "true") {
                taskall.push(user.fish());
            } else {
                taskall.push(await user.fish());
            }
        }
    }
    await Promise.all(taskall);
    taskall = [];
    $.log(`======= 上上签💴 =======`)
    for (let user of userList) {
        if (user.ckStatus) {
            if (isPromiseAll == "true") {
                taskall.push(user.station());
            } else {
                taskall.push(await user.station());
            }

        }
    }
    await Promise.all(taskall);
    taskall = [];
    $.log(`======= 0元抽💴 =======`)
    for (let user of userList) {
        if (user.ckStatus) {
            if (isPromiseAll == "true") {
                taskall.push(user.zeroLottery());
            } else {
                taskall.push(await user.zeroLottery());
            }
        }
    }
    await Promise.all(taskall);
    taskall = [];
    $.log(`=======  抽盲盒  =======`)
    for (let user of userList) {
        if (user.ckStatus) {
            if (isPromiseAll == "true") {
                taskall.push(user.buZhou());
            } else {
                taskall.push(await user.buZhou());
            }
        }
    }
    await Promise.all(taskall);
    $.log(`======= 潮金币 =======`)
    taskall = [];
    for (let user of userList) {
        if (user.ckStatus) {
            if (isPromiseAll == "true") {
                taskall.push(user.point());
            } else {
                taskall.push(await user.point());

            }
        }
    }
    await Promise.all(taskall);

}
class Task {
    constructor(str) {
        this.index = ++userIdx;
        this.ck = str.split(strSplitor)[0]; //单账号多变量分隔符
        this.ckStatus = true;
        this.taskListTree = []
        this.doWaterStatus = true
        this.taskListFish = []
        this.fishFeedStatus = true
        this.fishId = ""
        this.fishType = ""
        this.stationList = [];
        this.duToken = str.split(strSplitor)[1];
        this.sk = str.split(strSplitor)[2];
        this.prizeLocations = []
        this.BuZhouRefreshStatus = false
        this.chanceCount = 0
        this.waitPrizeLocations = []
        this.ua = UA
        //this.sk = SK
    }
    async tree() {
        await this.Dowater()
        await $.wait(2500)
        await this.TreeInviteReward()
        await $.wait(1500)
        await this.Get_Tree_Info()
        await $.wait(1500)
        await this.TreeInfo()
        await $.wait(1500)
        await this.SignListTree()
        await $.wait(1500)
        await this.TaskListTree();
        await $.wait(1500)
        await this.Droplet_Get_Generate_Droplet()
        await $.wait(1500)
        await this.Droplet_ExtraInfo()
    }
    async fish() {
        await this.SignListFish()
        await $.wait(2500)
        await this.TaskListFish()
        await $.wait(2500)
        await this.UserFinshInfo()




    }
    async station() {
        for (let i of stationShareCodesList) {
            await $.wait(1500)
            let shareKey = await this.ShareCodesGet(i)
            if (shareKey != '') {
                let id = shareKey.split("id=")[1].split("&")[0]
                let userId = shareKey.split("shareUserId=")[1].split("&")[0]
                let status = await this.StationAssist(id, userId)
                if (status) {
                    break;
                }
            } else {
            }

        }
        await this.StationList()
        for (let j of this.stationList) {
            await $.wait(2000)
            await this.StationEgnageIn(j.id)
        }

    }
    async zeroLottery() {
        await this.zeroLotteryWinList()
        await this.zeroLotteryList()
        for (let j of zeroLotteryShareCodesModeGetList) {
            await $.wait(1500)
            let shareKey = await this.ShareCodesGet(j)
            if (shareKey != '') {
                shareKey = decodeURIComponent(shareKey.split("shareKey=")[1].split("&")[0])
                let status = await this.zeroLotteryShare(shareKey)
                if (status) {
                    break;
                }
            } else {
            }
        }

    }
    async buZhou() {
        await this.BuZhouTaskList()
        await $.wait(2000)
        await this.BuZhouInfo()
        await $.wait(2000)
        await this.BuZhouInfo()
    }
    async point() {
        await this.PonitSignIn()
        await this.PointTaskList()
    }
    async DoTask(body) {
        try {
            let taskStatusResult = {};
            let commitBody = {};
            let preStatus = false
            if (body.taskType == 50) {
                taskStatusResult = await this.taskRequest_task("get", `https://app.dewu.com/hacking-task/v1/task/status?taskId=${body.taskId}&taskType=50&sign=94fd23c93d62ae0f75108f94c093b198`)
                if (taskStatusResult.code == 200) {
                    if (taskStatusResult.data.status == 1) {
                        //$.log(`账号[${this.index}] 开始任务成功🎉`)
                        commitBody = { "taskId": body.taskId, "taskType": String(body.taskType), "btd": 0, spuId: 0 }
                        preStatus = true
                    }
                }
            }
            if (body.taskType == 1) {
                if ("classify" in body) {
                    if (body.classify == 2) {
                        taskStatusResult = await this.taskRequest_task("post", `https://app.dewu.com/hacking-task/v1/task/pre_commit?sign=b7382f4d908e04356f9646688afe096c`, { taskId: body.taskId, taskType: body.taskType, btn: 0 })
                        //console.log(taskStatusResult);
                        if (taskStatusResult.code == 200) {
                            if (taskStatusResult.data.isOk == true) {
                                //$.log(`账号[${this.index}] 开始任务成功🎉`)
                                $.log(`延迟${body.countdownTime + 1}秒浏览${body.taskName}`)
                                await $.wait((body.countdownTime + 1) * 1000)
                                commitBody = { "taskId": body.taskId, "taskType": String(body.taskType), "activityType": null, "activityId": null, "taskSetId": null, "venueCode": null, "venueUnitStyle": null, "taskScene": null, "btd": 0 }
                                preStatus = true
                            }
                        } else {
                            $.log(`❌账号[${this.index}] 开始任务失败[${taskStatusResult.msg}]`);
                        }
                    }
                } else {
                    /*taskStatusResult = await this.taskRequest_task("post", `https://app.dewu.com/hacking-task/v1/task/pre_commit?sign=b7382f4d908e04356f9646688afe096c`, { taskId: body.taskId, taskType: body.taskType, btn: 0 })
                    if (taskStatusResult.code == 200) {
                        if (taskStatusResult.data.isOk == true) {
                            //$.log(`账号[${this.index}] 开始任务成功🎉`)
                            await $.wait(16000)
                            commitBody = { "taskId": body.taskId, "taskType": body.taskType, "activityType": null, "activityId": null, "taskSetId": null, "venueCode": null, "venueUnitStyle": null, "taskScene": null, "btd": 0 }
                            preStatus = true
                        }
                    } else {
                        $.log(`❌账号[${this.index}] 开始任务失败[${taskStatusResult.msg}]`);
                    }*/
                }


            }
            if (body.taskType == 123 || body.taskType == 124) {
                commitBody = { "taskType": String(body.taskType) }
                preStatus = true
            }
            //console.log(taskStatusResult)
            if (preStatus == true) {
                let commitResult = await this.taskRequest_task("post", `https://app.dewu.com/hacking-task/v1/task/commit?sign=826988b593cd8cd75162b6d3b7dade15`, commitBody)
                //console.log(commitResult)
                if (commitResult.code == 200) {
                    if (commitResult.data.status == 2) {
                        $.log(`账号[${this.index}] [${body.taskName}]任务成功🎉`)
                        return true
                    } else {
                        $.log(`账号[${this.index}] [${body.taskName}]任务失败🎉`)
                    }
                } else {
                    $.log(`账号[${this.index}] [${body.taskName}]任务失败🎉`)
                }
            } else {
                return false
            }
        } catch (e) {
            console.log(e);
        }

    }
    async StationAssist(id, shareUserId) {
        let body = { "id": id, "shareUserId": shareUserId }
        try {
            let result = await this.taskRequest("post", `https://app.dewu.com/api/v1/h5/delicate-sell-interfaces/dsell/station/assist?sign=${this.calculateSign(body)}`, body)
            if (result.code == 200) {
                //$.log(`账号[${this.index}] 助力参与作者组队上上签成功🎉`)
                return true
            } else {
                //$.log(`❌账号[${this.index}] 助力参与作者组队上上签失败[${result.msg}]`);
                return false
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async zeroLotteryEgnageIn(id) {
        let body = { "id": id, "source": "wotab" }
        try {
            let result = await this.taskRequest_task("post", `https://app.dewu.com/hacking-zero-lottery/v1/activity/engage-in?sign=${this.calculateSign(body)}`, body)
            if (result.code == 200) {
                $.log(`账号[${this.index}] 0元抽签参与成功[${result.data.title}]🎉`)
            } else {
                $.log(`❌账号[${this.index}] 0元抽签0参与失败[${result.msg}]`);
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async ShareCodesGet(key) {
        try {
            let result = await this.taskRequest_task("get", `https://app.dewu.com/hacking-keyword/v1/common/keyword/share-info?keyword=${key}`)
            if (result.code == 200) {
                if (result.data !== null) {

                    return result.data.activityInfo.enterUrl



                } else {
                    return ''
                }
            } else {

                $.log(`❌账号[${this.index}] 助力参与0元购失败[${result.msg}]🎉`)
                return ''
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async zeroLotteryShare(key) {

        let body = { "shareKey": key }
        try {
            let result = await this.taskRequest_task("post", `https://app.dewu.com/hacking-zero-lottery/v1/activity/report-keyword?sign=${this.calculateSign(body)}`, body)
            if (result.code == 200) {
                //$.log(`账号[${this.index}] 助力参与0元购成功🎉`)
                return true
            } else {
                //$.log(`❌账号[${this.index}] 助力参与0元购失败[${result.msg}]🎉`)
                return false
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async zeroLotteryWinList() {
        let body = { "limit": 10, "lastId": 0 }
        try {
            let result = await this.taskRequest_task("post", `https://app.dewu.com/hacking-zero-lottery/v1/activity/engage-in-list`, body)
            if (result.code == 200) {
                if (result.data?.list) {
                    for (let i of result.data.list) {
                        // ...
                        if (i.win == true) {
                            $.log(`账号[${this.index}] 恭喜中签[${i.name}]🎉🎉🎉🎉🎉🎉🎉🎉`)
                        }
                    }
                }


            } else {
                $.log(`❌账号[${this.index}] 获取0元购列表失败[${result.msg}]🎉`)
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async zeroLotteryList() {
        let body = { "source": "wotab" }
        try {
            let result = await this.taskRequest_task("post", `https://app.dewu.com/api/v1/h5/zero-lottery-interfaces/zl/activity/query-today?sign=${this.calculateSign(body)}`, body)
            if (result.code == 200) {
                for (let i of result.data.activityList) {
                    let taskStatus = false
                    if (i.status == 0) {
                        if ("taskVo" in i) {
                            await this.DoTask(i.taskVo)

                        } else {
                            await this.zeroLotteryEgnageIn(i.id)
                        }
                    }
                }
            } else {
                $.log(`❌账号[${this.index}] 获取0元购列表失败[${result.msg}]🎉`)
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async StationEgnageIn(id) {
        let body = { "id": id }
        try {
            let result = await this.taskRequest_task("post", `https://app.dewu.com/api/v1/h5/delicate-sell-interfaces/dsell/station/egnage-in?sign=${this.calculateSign(body)}`, body)
            if (result.code == 200) {
                $.log(`账号[${this.index}] 参与上上签成功🎉`)
            } else {
                $.log(`❌账号[${this.index}] 参与上上签失败[${result.msg}]`);
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async StationList() {
        let body = { "student": false, "source": "" }
        try {
            let result = await this.taskRequest_task("post", `https://app.dewu.com/api/v1/h5/delicate-sell-interfaces/dsell/query/ongoing-list?sign=${this.calculateSign(body)}`, body)
            if (result.code == 200) {
                for (let i of result.data.records) {
                    if (i.userPartakeStatus == 10) {
                        this.stationList.push(i)
                    }
                }
            } else {
                $.log(`❌账号[${this.index}] 获取上上签列表失败[${result.msg}]🎉`);
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async BuZhouInfo() {
        let body = { "benefitId": 1, "additionPresent": 0, "source": "gamecentertask" }
        try {
            let result = await this.taskRequest_task("post", `https://app.dewu.com/api/v1/h5/mount-buzhou-interfaces/gk/index?sign=${this.calculateSign(body)}`, body)
            if (result.code == 200) {
                //console.log(result.data);
                $.log(`账号[${this.index}] 盲盒赛季[${result.data.seasonName}] 当前抽奖机会[${result.data.chanceCount}] 🎉`)
                if ("prizeLocations" in result.data) {
                    $.log(`已开盲盒位置[${result.data.prizeLocations}]`)
                    this.prizeLocations = result.data.prizeLocations
                } else {
                    this.prizeLocations = []
                }
                this.chanceCount = result.data.chanceCount
                //console.log(result.data.hasDraw);
                if (this.chanceCount != 0) {
                    this.waitPrizeLocations = this.findMissingNumbers(this.prizeLocations)
                    //加一个条件 如果waitPriz...... 小于 chence 则 刷新
                    if (this.waitPrizeLocations.length == 0 && this.chanceCount > 0) {
                        await $.wait(2500)
                        await this.BuZhouRefresh(result.data.seasonId)
                    }
                    this.waitPrizeLocations = this.findMissingNumbers(this.prizeLocations)
                    //如果长度大于等于chence  则不刷新

                    let max = this.waitPrizeLocations.length >= this.chanceCount ? this.chanceCount : this.waitPrizeLocations.length
                    for (let i = 0; i < max; i++) {
                        let prizeLocation = this.waitPrizeLocations[i]
                        $.log("开始第" + (i + 1) + "次抽奖")
                        await $.wait(2500)
                        await this.BuZhouLottery(result.data.seasonId, prizeLocation)
                    }
                    await $.wait(2500)
                    await this.BuZhouRefresh(result.data.seasonId)
                }




            } else {
                $.log(`❌账号[${this.index}] 盲盒获取失败[${result.msg}]`);
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async BuZhouLottery(seasonId, prizeLocation) {
        let body = { "benefitId": 1, "seasonId": seasonId, "prizeLocation": prizeLocation, "source": "gamecentertask" }
        try {
            let result = await this.taskRequest_task("post", `https://app.dewu.com/api/v1/h5/mount-buzhou-interfaces/gk/lottery?sign=${this.calculateSign(body)}`, body)
            if (result.code == 200) {
                $.log(`账号[${this.index}] 盲盒抽取[${result.data.gkLotteryVo.gkName}]碎片`);
            } else {
                $.log(`❌账号[${this.index}] 盲盒抽取失败[${result.msg}]`);
                //console.log(seasonId, prizeLocation);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async BuZhouRefresh(seasonId) {
        let body = { "seasonId": seasonId }
        try {
            let result = await this.taskRequest_task("post", `https://app.dewu.com/api/v1/h5/mount-buzhou-interfaces/gk/refresh?sign=${this.calculateSign(body)}`, body)
            if (result.code == 200) {
                $.log(`账号[${this.index}] 刷新盲盒成功`);
                this.BuZhouRefreshStatus = true;
                this.prizeLocations = []
            } else {
                $.log(`❌账号[${this.index}] 刷新盲盒失败[${result.msg}]`);
                //console.log(result);
                this.BuZhouRefreshStatus = false;
            }
        } catch (e) {
            console.log(e);
        }
    }
    async BuZhouTaskList() {
        let body = { "source": "gamecentertask" }
        try {
            let result = await this.taskRequest_task("get", `https://app.dewu.com/api/v1/h5/mount-buzhou-interfaces/gk/task-list?source=gamecentertask&sign=${this.calculateSign(body)}`)
            if (result.code == 200) {
                for (let i of result.data.taskVoList) {
                    let taskStatus = false
                    if (i.isComplete == false) {
                        if (i.taskType == 1) {
                            if (i.classify == 2) {
                                //浏览  

                                taskStatus = await this.DoTask(i)
                            }
                        }
                        if (i.taskType == 50) {
                            await $.wait(2500)

                            taskStatus = await this.DoTask(i)
                            //收藏
                        }
                    } else if (i.isComplete == true && i.isReceiveReward == false) {
                        await $.wait(2500)
                        await this.TaskReceiveBuZhou(i)
                    }
                    if (taskStatus == true) {
                        await $.wait(2500)
                        await this.TaskReceiveBuZhou(i)
                    }
                }
            } else {
                $.log(`❌账号[${this.index}] 盲盒任务获取失败[${result.msg}]`);
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async TaskReceivePoint(body) {
        try {
            let RequestBody = { taskId: body.taskId, taskType: body.taskType }

            let result = await this.taskRequest("post", `https://app.dewu.com/hacking-game-center/v1/sign/task_receive?sign=${this.calculateSign(RequestBody)}`, RequestBody)
            //console.log(JSON.stringify(result));
            if (result.code == 200) {
                $.log(`账号[${this.index}]  领取任务奖励[${result.msg}] --- [${result.data.amount}]金币🎉`)
            } else {
                //console.log(body.taskId);
                $.log(`❌账号[${this.index}]  领取任务奖励失败[${result.msg}]`);
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async TaskReceiveBuZhou(body) {
        try {
            let RequestBody = { taskId: body.taskId, classify: body.classify }
            let result = await this.taskRequest("post", `https://app.dewu.com/api/v1/h5/mount-buzhou-interfaces/gk/task-receive?sign=${this.calculateSign(RequestBody)}`, RequestBody)
            //console.log(JSON.stringify(result));
            if (result.code == 200) {
                $.log(`账号[${this.index}]  领取任务奖励[${result.msg}] --- [${result.data.count}]次数🎉`)
            } else {
                //console.log(body.taskId);
                $.log(`❌账号[${this.index}]  领取任务奖励失败[${result.msg}]`);
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async FishFeed() {
        let body = { "feedTimes": 1, "fishId": this.fishId, "fishType": this.fishType }
        try {
            let result = await this.taskRequest("post", `https://app.dewu.com/hacking-fish/v1/fish/feed?sign=63a26f09f6d985b73299f92506f6e986`, body)
            if (result.code == 200) {
                $.log(`账号[${this.index}] 喂食🐟成功🎉`)
                this.fishFeedStatus = true
            } else {
                this.fishFeedStatus = false
                $.log(`❌账号[${this.index}] 喂食🐟失败[${result.msg}]`);
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async Dowater() {
        if (this.droplet > 0) {
            $.log(`账号[${this.index}]  可浇水${parseInt(this.droplet / 100)}次,开始浇水`);
            if (this.treeMode == 0) {
                for (let i = 0; i < parseInt(this.droplet / 100); i++) {
                    if (this.doWaterStatus) {
                        await this.DoWaterApi()
                        //随机延迟random
                        await $.wait(this.randomNumber(1000, 2000))
                    }
                }
            } else if (this.treeMode == 1) {
                $.log(`账号[${this.index}] 组队浇水 =>`)
                for (let i = 0; i < parseInt(this.droplet / 100); i++) {
                    if (this.doWaterStatus) {
                        await this.DoWaterTeamApi(this.treeId)
                        //随机延迟random
                        await $.wait(this.randomNumber(1000, 2000))
                    }
                }
                await this.TeamInfo()
            }

        }
    }
    async DoWaterApi() {
        let body = {}
        try {
            let result = await this.taskRequest("post", `https://app.dewu.com/hacking-tree/v1/tree/watering?sign=fe26befc49444d362c8f17463630bdba`, body)
            if (result.code == 200) {
                $.log(`账号[${this.index}] 浇水成功🎉`)
                this.doWaterStatus = true
            } else {
                this.doWaterStatus = false
                $.log(`❌账号[${this.index}] 浇水失败[${result.msg}]`);
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async DoWaterTeamApi(teamTreeId) {
        let body = { "teamTreeId": teamTreeId }
        try {
            let result = await this.taskRequest("post", `https://app.dewu.com/hacking-tree/v1/team/tree/watering?sign=b5ee2c7e8d1aaf214886c438c4f25cd9`, body)
            if (result.code == 200) {
                $.log(`账号[${this.index}] 浇水成功🎉`)
                if (result.data.coupons !== null) {
                    $.log(`账号[${this.index}] 浇水成功获得${result.data.coupons[0].limitDesc}🎉`)

                }
                this.doWaterStatus = true
            } else {
                this.doWaterStatus = false
                $.log(`❌账号[${this.index}] 浇水失败[${result.msg}]`);

                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async TreeInfo() {
        try {
            let result = await this.taskRequest("get", `https://app.dewu.com/hacking-tree/v1/user/target/info`)
            //console.log(result);
            if (result.code == 200) {
                $.log(`账号[${this.index}] [${result.data.name}] Lv[${result.data.level}]🎉`)

            } else {
                $.log(`❌账号[${this.index}]  获取🌳信息失败[${result.msg}]`);
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async TaskListTree() {
        try {
            let result = await this.taskRequest("get", `https://app.dewu.com/hacking-tree/v1/task/list`)
            //console.log(result);
            if (result.code == 200) {
                $.log(`账号[${this.index}] 获取任务列表成功 采集/领取 集到[${result.data.taskList.length}]条任务🎉`)
                for (let i of result.data.taskList) {
                    this.taskListTree.push(i)
                }
                for (let i of this.taskListTree) {
                    let taskStatus = false
                    if (i.isComplete == false) {
                        await $.wait(2500)
                        if (i.taskType == 1) {
                            if (i.classify == 2) {
                                //浏览  

                                taskStatus = await this.DoTask(i)
                            }
                            if (i.classify == 1) {
                                //完成固定次数浇灌 默认5次
                            }
                        }
                        if (i.taskType == 10) {
                            //固定时间段领取 40g
                        }
                        if (i.taskType == 123) {
                            taskStatus = await this.DoTask(i)
                            //从桌面组件访问
                        }
                        if (i.taskType == 50) {
                            taskStatus = await this.DoTask(i)
                            //收藏
                        }
                        if (i.taskType == 201) {
                            //逛95分
                        }
                        if (i.taskType == 4) {
                            //收集一次水滴生产
                        }
                    } else if (i.isComplete == true && i.isReceiveReward == false) {
                        await $.wait(2500)
                        await this.TaskReceiveTree(i)
                    }
                    if (taskStatus) {
                        await $.wait(2500)
                        await this.TaskReceiveTree(i)
                    }
                }
            } else {
                $.log(`❌账号[${this.index}]  获取任务列表成功🎉失败[${result.msg}]`);
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async SignListTree() {
        try {
            let result = await this.taskRequest("get", `https://app.dewu.com/hacking-tree/v1/sign/list`)
            //console.log(JSON.stringify(result));
            if (result.code == 200) {
                $.log(`账号[${this.index}]  今日${result.data.status == 1 ? "未签到" : "已签到"}🎉`)
                if (result.data.status == 1) {
                    let SignInResult = await this.taskRequest("post", `https://app.dewu.com/hacking-tree/v1/sign/sign_in`, {})
                    if (SignInResult.code == 200) {
                        $.log(`账号[${this.index}]  签到领取水滴[${SignInResult.msg}] --- [${SignInResult.data.Num}]🎉`)
                    } else {
                        $.log(`账号[${this.index}]  签到领取水滴[${SignInResult.msg}]`)
                    }
                }
            } else {
                $.log(`❌账号[${this.index}]  获取签到列表失败[${result.msg}]`);
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async SignListFish() {
        try {
            let result = await this.taskRequest_task("get", `https://app.dewu.com/hacking-fish/v1/daily_sign/list`)
            //console.log(JSON.stringify(result));
            if (result.code == 200) {
                $.log(`账号[${this.index}]  今日${result.data.status == 1 ? "未签到" : "已签到"}🎉`)
                if (result.data.status == 1) {
                    let SignInResult = await this.taskRequest("post", `https://app.dewu.com/hacking-fish/v1/daily_sign/receive`, {})
                    if (SignInResult.code == 200) {
                        $.log(`账号[${this.index}]  签到领取鱼食[${SignInResult.msg}] --- [${SignInResult.data.Num}]🎉`)
                    } else {
                        $.log(`账号[${this.index}]  签到领取鱼食[${SignInResult.msg}]`)
                    }
                }
            } else {
                $.log(`❌账号[${this.index}]  获取签到列表失败[${result.msg}]`);
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async PointInfo() {
        try {
            let result = await this.taskRequest_task("get", `https://app.dewu.com/hacking-game-center/v1/gold/balance`)
            //console.log(JSON.stringify(result));
            if (result.code == 200) {
                $.log(`账号[${this.index}] 潮金币[${result.data.coinDetailList[0].value}]`);
            } else {
                $.log(`❌账号[${this.index}] 获取潮金币信息失败[${result.msg}]`);
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async PointTaskList() {
        try {
            let result = await this.taskRequest_task("get", `https://app.dewu.com/hacking-game-center/v1/sign/task_list`)
            //console.log(JSON.stringify(result));
            if (result.code == 200) {
                for (let i of result.data.list) {
                    let taskStatus = false
                    if (i.isComplete == false) {
                        if (i.taskType == 1) {
                            i.classify = 2
                            taskStatus = await this.DoTask(i)
                        }
                        if (i.taskType == 50) {
                            await $.wait(2500)
                            taskStatus = await this.DoTask(i)
                            //收藏
                        }
                    } else if (i.isComplete == true && i.isReceiveReward == false) {
                        await $.wait(2500)
                        await this.TaskReceivePoint(i)
                    }
                    if (taskStatus == true) {
                        await $.wait(2500)
                        await this.TaskReceivePoint(i)
                    }
                }
            } else {
                $.log(`❌账号[${this.index}] 获取潮金币任务列表失败[${result.msg}]`);
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async PonitSignIn() {
        try {
            let result = await this.taskRequest("post", `https://app.dewu.com/hacking-game-center/v1/sign/sign`, {})
            //console.log(JSON.stringify(result));
            if (result.code == 200) {
                $.log(`账号[${this.index}]  外部活动潮币签到成功 获得[${result.data.coins}g💧]🎉`)
            } else {
                $.log(`❌账号[${this.index}]  外部活动潮币签到失败[${result.msg}]`);
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async Droplet_ExtraInfo() {
        try {
            let result = await this.taskRequest("get", `https://app.dewu.com/hacking-tree/v1/droplet-extra/info`)
            //console.log(JSON.stringify(result));
            if (result.code == 200) {
                $.log(`账号[${this.index}]  气泡水滴 可领取 ---  💧🎉`)
                let receiveResult = await this.taskRequest("post", `https://app.dewu.com/hacking-tree/v1/droplet-extra/receive`, {})
                //console.log(JSON.stringify(result));
                if (receiveResult.code == 200) {
                    $.log(`账号[${this.index}]  领取气泡水滴[${receiveResult.msg}] --- [${receiveResult.data.totalDroplet}g]💧🎉`)
                } else {
                    $.log(`❌账号[${this.index}]  领取气泡失败[${receiveResult.msg}]`);
                    //console.log(result);
                }
            } else {
                $.log(`❌账号[${this.index}]  气泡水滴获取失败[${result.msg}]`);
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async Droplet_Get_Generate_Droplet() {
        try {
            let result = await this.taskRequest("post", `https://app.dewu.com/hacking-tree/v1/droplet/get_generate_droplet`, {})
            //console.log(JSON.stringify(result));
            if (result.code == 200) {
                $.log(`账号[${this.index}]  领取小木桶积攒水滴[${result.msg}] --- [${result.data.droplet}g]💧🎉`)
            } else {
                $.log(`❌账号[${this.index}]  领取小木桶积攒水滴失败[${result.msg}]`);
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async TaskReceiveFish(body) {
        try {
            let result = await this.taskRequest("post", `https://app.dewu.com/hacking-fish/v1/task/receive?sign=ee632e4b8e24d2526737bca0b7c0c678`, { taskId: body.taskId, classify: body.classify })
            //console.log(JSON.stringify(result));
            if (result.code == 200) {
                $.log(`账号[${this.index}]  领取任务奖励[${result.msg}] --- [${result.data.num}g]💧🎉`)

            } else {
                $.log(`❌账号[${this.index}]  领取任务奖励失败[${result.msg}]`);
                //console.log(body.taskId);
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async TaskReceiveTree(body) {
        try {
            let result = await this.taskRequest("post", `https://app.dewu.com/hacking-tree/v1/task/receive?sign=15c051cc7af50c30318c05b539e434e7`, { taskId: body.taskId, classify: body.classify })
            //console.log(JSON.stringify(result));
            if (result.code == 200) {
                $.log(`账号[${this.index}]  领取任务奖励[${result.msg}] --- [${result.data.num}g]💧🎉`)
            } else {
                //console.log(body.taskId);
                $.log(`❌账号[${this.index}]  领取任务奖励失败[${result.msg}]`);
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async Get_Tree_Info() {
        try {
            let result = await this.taskRequest("get", `https://app.dewu.com/hacking-tree/v1/tree/get_tree_info`)
            //console.log(JSON.stringify(result));
            if (result.code == 200) {
                $.log(`账号[${this.index}]  [${result.data.treeId}] 成熟进度 --- [${result.data.userWateringDroplet}/${result.data.currentLevelNeedWateringDroplet}g]💧🎉`)

            } else {
                $.log(`❌账号[${this.index}]  获取🌳成长信息失败[${result.msg}]`);
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async TaskListFish() {
        try {
            let result = await this.taskRequest("get", `https://app.dewu.com/hacking-fish/v1/task/list`)
            //console.log(JSON.stringify(result));
            if (result.code == 200) {
                $.log(`账号[${this.index}] 获取任务列表成功 采集/领取 [${result.data.taskList.length}]条任务🎉`)
                for (let i of result.data.taskList) {
                    this.taskListFish.push(i)
                }
                for (let i of this.taskListFish) {
                    let taskStatus = false
                    if (i.isComplete == false) {
                        await $.wait(2500)
                        if (i.taskType == 1) {
                            if (i.classify == 2) {
                                //浏览  

                                taskStatus = await this.DoTask(i)
                            }
                            if (i.classify == 1) {
                                //完成固定次数浇灌 默认5次
                            }
                        }
                        if (i.taskType == 100001) {
                            //喂养5次
                        }
                        if (i.taskType == 124) {
                            taskStatus = await this.DoTask(i)
                            //从桌面组件访问
                        }
                        if (i.taskType == 50) {
                            taskStatus = await this.DoTask(i)
                            //收藏
                        }
                        if (i.taskType == 201) {
                            //逛95分
                        }
                        if (i.taskType == 100002) {
                            //30g鱼食 每日9点/13点/17点/21点各领一次
                        }
                    } else if (i.isComplete == true && i.isReceiveReward == false) {
                        await $.wait(3000)
                        await this.TaskReceiveFish(i)
                    }
                    if (taskStatus) {
                        await $.wait(3000)
                        await this.TaskReceiveFish(i)
                    }
                }
            } else {
                $.log(`❌账号[${this.index}]  获取任务🐟失败[${result.msg}]`);
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    async UserInit() {
        let result = {
            code: 0,
            msg: "获取🌳信息失败",
        }
        try {
            let authHelpCode = "";
            if (this.index == 1) {
                for (let j of authShareCodeList) {
                    authHelpCode = j
                    result = await this.taskRequest("post", `https://app.dewu.com/hacking-tree/v1/user/init?sign=d25c30ebdf1adeb29ca10ccb825bbf66`, { "keyword": "", "source": "wotab04", "koc": 0, "ffOfflineFlag": "", "keywordType": 0 })
                    if (result.code == 200) {
                        if ("inviteRes" in result.data) {
                            if (result.data.inviteRes.indexOf("成功") != -1) {
                                $.log(`首账号助力作者成功`)
                                break
                            }
                        }
                    }
                }
                let helpCodeResult = await this.taskRequest("post", "https://app.dewu.com/hacking-tree/v1/keyword/gen?sign=fe26befc49444d362c8f17463630bdba", {})
                if (helpCodeResult.code == 200) {
                    let kw = helpCodeResult.data.keyword
                    helpCode = kw.split("œ")[1]
                    $.log(`首账号助力码[${helpCode}]`)
                }
            } else {
                result = await this.taskRequest("post", `https://app.dewu.com/hacking-tree/v1/user/init?sign=d25c30ebdf1adeb29ca10ccb825bbf66`, { "keyword": "", "source": "wotab04", "koc": 0, "ffOfflineFlag": "", "keywordType": 0 })
            }
            if (result.code == 200) {
                $.log(`账号[${this.index}]  [${result.msg}]  剩余水滴[${result.data.droplet}g] 助力[${this.index == 1 ? "作者:" + authHelpCode : helpCode}][${"inviteRes" in result.data ? result.data.inviteRes : "未成功"}]🎉`)
                this.treeId = result.data.treeId
                this.droplet = result.data.droplet
                this.treeMode = result.data.mode


            } else {
                $.log(`❌账号[${this.index}]  获取🌳信息失败[${result.msg}]`);
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }

    async TreeInviteReward() {
        try {
            let result = await this.taskRequest("get", `https://app.dewu.com/hacking-tree/v1/invite/list`, `sign=fe26befc49444d362c8f17463630bdba`)

            if (result.code == 200) {
                if (result.data?.list) {
                    for (let i of result.data.list) {
                        if (i.status == 0) {
                            let body = { "inviteeUserId": i.inviteeUserId }
                            let rewardResult = await this.taskRequest("post", `https://app.dewu.com/hacking-tree/v1/invite/reward`, body)
                            if (rewardResult.code == 200) {
                                $.log(`账号[${this.index}] 领取邀请奖励成功 获取[${rewardResult.data.droplet}]g`);
                            }

                        }
                    }
                }


            }
        } catch (e) {
            console.log(e);
        }
    }
    async TeamInfo() {
        try {
            let result = await this.taskRequest("get", `https://app.dewu.com/hacking-tree/v1/team/info`)
            //console.log(result);
            if (result.code == 200) {
                for (let i of result.data.member) {
                    if (i.isCaptain == true) {
                        $.log(`账号[${this.index}] 组队队长[${i.name}] 今日是否上线[${i.status == 1 ? '是' : '否'}]`)
                    } else {
                        $.log(`账号[${this.index}] 组员[${i.name}] 今日是否上线[${i.status == 1 ? '是' : '否'}]`)
                    }
                }
            } else {
                $.log(`❌账号[${this.index}]  获取队伍🌳🎉失败[${result.msg}]`);
                //console.log(result);
            }



        } catch (e) {
            console.log(e);
        }
    }
    async UserFinshInfo() {
        try {
            let result = await this.taskRequest_task("get", `https://app.dewu.com/hacking-fish/v1/user/home?userSelectFishId=0&sign=5d75086e825f0fcea4b2cbdf5e6d940f`)
            //console.log(result);
            let fishName = ""
            let lv = ""
            let progress = ""
            if (result.code == 200) {
                this.fishId = result.data.selectFishId
                for (let j of result.data.fishList) {
                    if (this.fishId == j.fishId) {
                        this.fishType = j.type
                        fishName = j.typeData.name
                        lv = j.level
                        progress = j.progress
                        break;
                    }
                }
                $.log(`账号[${this.index}]  [${fishName}]等级[${lv}] [${progress}/1000000]  剩余※鱼食🐟[${result.data.balance}g]🎉`)
                if (result.data.balance > 0) {
                    $.log(`账号[${this.index}]  喂食🐟${parseInt(result.data.balance / 10)}次,开始喂食`);
                    for (let i = 0; i < parseInt(result.data.balance / 10); i++) {
                        if (this.fishFeedStatus) {
                            await this.FishFeed()
                            //随机延迟random
                            await $.wait(this.randomNumber(1000, 2000))
                        }
                    }
                }

            } else {
                $.log(`❌账号[${this.index}]  获取用户信息成功🎉失败[${result.msg}]`);
                //console.log(result);
            }
        } catch (e) {
            console.log(e);
        }
    }
    findMissingNumbers(arr) {
        const nums = [0, 1, 2, 3, 4, 5, 6, 7, 8];
        const missing = [];

        for (const num of nums) {
            if (!arr.includes(num)) {
                missing.push(num);
            }
        }

        return missing;
    }
    //randominit
    randomNumber(min, max) {
        return Math.floor(Math.random() * (max - min)) + min;
    }
    async taskRequest(method, url, body = {}) {
        //

        let headers = {
            "Host": "app.dewu.com",

            "SK": this.sk,

            "x-auth-token": "Bearer " + this.ck,

            "duToken": "" + this.duToken,

            "cookieToken": "" + this.duToken,
            "traceparent": this.generateIds(),
            "User-Agent": this.ua,

            "sks": "1,hdw3",


            "Cookie": "duToken=" + this.duToken
        }
        const reqeuestOptions = {
            url: url,
            method: method,
            headers: headers

        }
        //console.log(body);
        let { enData, n } = this.createEncryptedBody(JSON.stringify(body))
        reqeuestOptions.headers["a"] = n
        //console.log(enData);
        method == "get" ? (reqeuestOptions.url.split("?")[1] != undefined ? reqeuestOptions.url += "&data=" + encodeURIComponent(enData.data) : reqeuestOptions.url += "?data=" + encodeURIComponent(enData.data)) : Object.assign(reqeuestOptions, { body: JSON.stringify({ data: enData.data }) })
        //console.log(reqeuestOptions)
        try {
            let { body: result } = await $.httpRequest(reqeuestOptions)
            if (!$.isJson(result)) {
                result = JSON.parse(this.decryptResponseBody(result, n))
            }
            //console.log(result);
            return result

        } catch (error) {
            //console.log(error);
            // $.log(`接口请求失败 `)
            return { code: 0, msg: "接口请求失败" }
        }

    }
    generateIds() {
        var Uo = Array(32);
        var oe = "0000000000000000";

        function Ho(e) {
            for (var t = 0; t < 2 * e; t++)
                Uo[t] = Math.floor(16 * Math.random()) + 48,
                    Uo[t] >= 58 && (Uo[t] += 39);
            return String.fromCharCode.apply(null, Uo.slice(0, 2 * e));
        }

        var Mo = "00000000000000000000000000000000"; // Assuming Mo is defined somewhere else in your code

        var generateSpanId = function () {
            return function (e) {
                var t = e(8);
                if (t === oe)
                    return Mo;
                return t;
            }(Ho);
        };

        var generateTraceId = function () {
            return function (e) {
                var t = Math.floor(Date.now() / 1e3).toString(16),
                    n = e(8),
                    r = e(3);
                return "f5" + r + t + n;
            }(Ho);
        };

        return "00-" + generateTraceId() + "-" + generateSpanId() + "-01"
    };

    async taskRequest_task(method, url, body = "") {


        let headers = {
            "Host": "app.dewu.com",
            "Connection": "keep-alive",
            //"Content-Length": "62",
            //"ua": "duapp/5.37.0(android;10)",
            //"Origin": "https://cdn-m.dewu.com",
            //"appid": "h5",
            "SK": this.sk,
            /*"shumeiId": "20240229101108a9d7deaedd9e5e305209da327c58c8fc21a0fe159c45b78d",*/
            /*"deviceTrait": "MI+8+Lite",*/
            "x-auth-token": "Bearer " + this.ck,
            /*"Sec-Fetch-Dest": "empty",
            "channel": "xiaomi",
            "duToken": "d41d8cd9|1630362958|1711360875|4bf085e789d085b0",
            "appVersion": "5.37.0",
            "emu": "0",*/
            //"cookieToken": "d41d8cd9|1630362958|1711360875|4bf085e789d085b0",
            "traceparent": this.generateIds(),
            /*"dudeliveryid": "79F073E7555D2BD9490AF2270549ADBABDFE24914A4EEF24D4D5C25559243BDD",*/
            "User-Agent": this.ua,
            //"duproductid": "0BC86B71CB9BA08726EDD70256925177BDFE24914A4EEF24D4D5C25559243BDD",
            "Content-Type": "application/json",
            /*"isRoot": "0",
            "imei": "",
            "duid": "0BC86B71CB9BA08726EDD70256925177BDFE24914A4EEF24D4D5C25559243BDD",
            "platform": "h5",
            "isProxy": "0",
            */
            /*"X-Requested-With": "com.shizhuang.duapp",
            "Sec-Fetch-Site": "same-site",
            "Sec-Fetch-Mode": "cors",
            "Referer": "https://cdn-m.dewu.com/h5-growth/game-task?gameTaskFlag=true&taskId=Nr52k&taskType=50&countdownIcon=%7B%22countdownIcon%22%3A%22https%3A%2F%2Fcdn.poizon.com%2Fnode-common%2F28c7b3d4060e086551dcc84eca7bfbeb.png%22%2C%22hideCountdownIcon%22%3A%22https%3A%2F%2Fcdn.poizon.com%2Fnode-common%2Fa8b472c7622a53454d82745345cefa71.png%22%2C%22coordinate%22%3A%2212%2C600%22%7D&scrollbarColor=%2301C1C2&fontColor=%23FFFFFF&btd=83500&goodsCollect=goodsDetail&popId=0",
            "Accept-Encoding": "gzip, deflate",
            "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",*/
            "Cookie": `duToken=${this.duToken};`
        }
        const reqeuestOptions = {
            url: url,
            method: method,
            headers: headers

        }
        body == "" ? "" : Object.assign(reqeuestOptions, { body: JSON.stringify(body) })
        //console.log(reqeuestOptions)
        try {
            let { body: result } = await $.httpRequest(reqeuestOptions)
            return result
        } catch (error) {
            // $.log(`接口请求失败 `)
            return { code: 0, msg: "接口请求失败" }
        }
        //

    }
    createEncryptedBody(data) {
        const key2 = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANMGZPlLobHYWoZyMvHD0a6emIjEmtf5Z6Q++VIBRulxsUfYvcczjB0fMVvAnd1douKmOX4G690q9NZ6Q7z/TV8CAwEAAQ==";
        const publicKeyPem = '-----BEGIN PUBLIC KEY-----\n' +
            key2 +
            '-----END PUBLIC KEY-----';

        global["window"] = {}
        const jsencrypt = require("jsencrypt")
        const crypt = new jsencrypt()
        crypt.setKey(publicKeyPem)
        const n = this.randomStr(48, 16);
        const encrypted = crypt.encrypt(n)
        const enBody = CryptoJS.enc.Utf8.parse(data);
        const enResult = CryptoJS.AES.encrypt(enBody, CryptoJS.enc.Utf8.parse(n.substr(10, 16)), {
            iv: CryptoJS.enc.Utf8.parse(n.substr(20, 16)),
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7,
        });
        //console.log(encrypted);
        //console.log(hexToBase64(encrypted));
        const newBody = {
            data: encrypted + "​" + enResult.ciphertext.toString().toUpperCase(),
        };
        newBody.sign = this.calculateSign(newBody);
        return { enData: newBody, n };
        function hexToBase64(hexString) {
            const buffer = Buffer.from(hexString, 'hex');
            const base64String = buffer.toString('base64');
            return base64String;
        }
    }
    randomStr(length, charset) { var tmp1, tmp2, data = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""), result = []; if (((charset = charset || data["length"]), length)) for (tmp1 = 0; tmp1 < length; tmp1++)result[tmp1] = data[0 | (Math.random() * charset)]; else for (result[8] = result[13] = result[18] = result[23] = "-", result[14] = "4", tmp1 = 0; tmp1 < 36; tmp1++)result[tmp1] || ((tmp2 = 0 | (16 * Math["random"]())), (result[tmp1] = data[19 === tmp1 ? (3 & tmp2) | 8 : tmp2])); return result["join"]("") }
    decryptResponseBody(result, n) {
        try {
            const de1 = CryptoJS.enc.Hex.parse(result),
                de2 = CryptoJS.enc.Base64.stringify(de1);
            const decrypted = CryptoJS.AES.decrypt(de2, CryptoJS.enc.Utf8.parse(n.substr(10, 16)), {
                iv: CryptoJS.enc.Utf8.parse(n.substr(20, 16)),
                mode: CryptoJS.mode.CBC,
                padding: CryptoJS.pad.Pkcs7,
            }).toString(CryptoJS.enc.Utf8);
            return decrypted;
        } catch (error) {
            n = "987654321012345678901234567890123456789012345678"
            const de1 = CryptoJS.enc.Hex.parse(result),
                de2 = CryptoJS.enc.Base64.stringify(de1);
            const decrypted = CryptoJS.AES.decrypt(de2, CryptoJS.enc.Utf8.parse(n.substr(10, 16)), {
                iv: CryptoJS.enc.Utf8.parse(n.substr(20, 16)),
                mode: CryptoJS.mode.CBC,
                padding: CryptoJS.pad.Pkcs7,
            }).toString(CryptoJS.enc.Utf8);
            return decrypted;
        }

    }
    //修复自 修改处理后 空值删除得情况 改为不删除
    calculateSign(requestBody) { const sortedKeys = Object.keys(requestBody).sort(); let signContent = sortedKeys.reduce((acc, key) => { const value = requestBody[key]; if (value === null) { return acc } if (typeof value === 'object' && !Array.isArray(value)) { return acc.concat(key).concat(JSON.stringify(value)) } if (Array.isArray(value)) { if (value.length > 0) { let typeOfFirstItem = typeof value[0]; if (typeOfFirstItem === 'object') { let arrayStr = ''; value.forEach((item, index) => { arrayStr += JSON.stringify(item) + (index !== value.length - 1 ? ',' : '') }); return acc.concat(key).concat(arrayStr) } } return acc.concat(key).concat(value.toString()) } return acc.concat(key).concat(value.toString()) }, ''); const secretKey = "048a9c4943398714b356a696503d2d36"; const hashedContent = CryptoJS.MD5(signContent.concat(secretKey)).toString(); return hashedContent }

    getRandomUA() {
        // 生成 iOS 版本号
        const iOSVersion = (Math.floor(Math.random() * (161 - 120) + 120) / 10).toFixed(1);

        // 生成 AppleWebKit 版本号
        const AppleWebKitVersion = `${Math.floor(Math.random() * (605 - 500) + 500)}.${Math.floor(Math.random() * 10)}.${Math.floor(Math.random() * 20)}`;

        // 生成 Mobile 版本号
        const mobileVersion = `${Math.floor(Math.random() * 10)}${String.fromCharCode(65 + Math.floor(Math.random() * 26))}${Math.floor(Math.random() * 10)}`;

        // 生成 User-Agent 字符串
        const userAgent = `Mozilla/5.0 (iPhone; CPU iPhone OS ${iOSVersion} like Mac OS X) AppleWebKit/${AppleWebKitVersion} (KHTML, like Gecko) Mobile/${mobileVersion}/duapp/5.38.6`;

        return userAgent;
    }

}




!(async () => {
    if (!(await checkEnv())) return;
    if (userList.length > 0) {
        await main()

    }
    await $.sendMsg($.logs.join("\n"))
})()
    .catch((e) => console.log(e))
    .finally(() => $.done());

//********************************************************
/**
 * @returns
 */
async function checkEnv() {
    let userCookie = ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "";
    if (userCookie) {
        let e = envSplitor[0];
        for (let o of envSplitor) {
            if (userCookie.indexOf(o) > -1) {
                e = o;
                break;
            }
        }

        for (let n of userCookie.split(e)) {

            n && userList.push(new Task(n));
        }
    } else {
        console.log(`未找到CK变量名【${ckName}】`);
        return;
    }
    return console.log(`共找到${userList.length}个账号`), true; //true == !0
}
//Env Api =============================
/*
*   @modifyAuthor @smallfawn 
*   @modifyTime 2024-03-25
*   @modifyInfo 重写请求函数 在got环境或axios环境都可以请求 删除不必要的函数
*/
function Env(t, s) {
    return new (class {
        constructor(t, s) {
            this.name = t;
            this.data = null;
            this.dataFile = "box.dat";
            this.logs = [];
            this.logSeparator = "\n";
            this.startTime = new Date().getTime();
            Object.assign(this, s);
            this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`);
        }
        isNode() {
            return "undefined" != typeof module && !!module.exports;
        }
        isQuanX() {
            return "undefined" != typeof $task;
        }
        isSurge() {
            return "undefined" != typeof $httpClient && "undefined" == typeof $loon;
        }
        isLoon() {
            return "undefined" != typeof $loon;
        }
        async loaddata() {
            if (!this.isNode()) return {};
            this.fs = this.fs ? this.fs : require("fs");
            this.path = this.path ? this.path : require("path");
            const t = this.path.resolve(this.dataFile),
                s = this.path.resolve(process.cwd(), this.dataFile),
                e = this.fs.existsSync(t),
                i = !e && this.fs.existsSync(s);
            if (!e && !i) this.writeFile(this.dataFile, JSON.stringify([]));
            const pt = e ? t : s;
            let r = await this.readFile(pt);
            return r
        }
        async writedata() {
            if (!this.isNode()) return;
            this.fs = this.fs ? this.fs : require("fs");
            this.path = this.path ? this.path : require("path");
            const t = this.path.resolve(this.dataFile),
                s = this.path.resolve(process.cwd(), this.dataFile),
                e = this.fs.existsSync(t),
                i = !e && this.fs.existsSync(s);
            const o = JSON.stringify(this.data, null, 2);
            const pt = e ? t : i ? s : t;
            await writeFile(pt, o)
        }
        readFile(pt) {
            this.fs = this.fs ? this.fs : require("fs");
            return new Promise((resolve, reject) => {
                this.fs.readFile(pt, "utf8", (r, o) => {
                    if (r) reject({});
                    else o = this.isJSONString(o) ? JSON.parse(o) : o;
                    resolve(o);
                });
            });
        }
        writeFile(pt, o) {
            this.fs = this.fs ? this.fs : require("fs");
            return new Promise((resolve, reject) => {
                this.fs.writeFile(pt, o, (r) => {
                    if (r) reject(r);
                    else resolve();
                });
            });
        }
        async getval(t) {
            if (this.isSurge() || this.isLoon()) {
                return $persistentStore.read(t);
            } else if (this.isQuanX()) {
                return $prefs.valueForKey(t);
            } else if (this.isNode()) {
                this.data = await this.loaddata();
                return await this.data[t];
            } else {
                return (this.data && this.data[t]) || null;
            }
        }
        async setval(t, s) {
            if (this.isSurge() || this.isLoon()) {
                return $persistentStore.write(t, s);
            } else if (this.isQuanX()) {
                return $prefs.setValueForKey(t, s);
            } else if (this.isNode()) {
                this.data = await this.loaddata();
                this.data[s] = t;
                await this.writedata();
                return true;
            } else {
                return (this.data && this.data[s]) || null;
            }
        }
        initRequestEnv(t) {
            try {
                require.resolve("got") &&
                    ((this.requset = require("got")), (this.requestModule = "got"));
            } catch (e) { }
            try {
                require.resolve("axios") &&
                    ((this.requset = require("axios")), (this.requestModule = "axios"));
            } catch (e) { }
            this.cktough = this.cktough ? this.cktough : require("tough-cookie");
            this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar();
            if (t) {
                t.headers = t.headers ? t.headers : {};
                if (
                    typeof t.headers.Cookie === "undefined" &&
                    typeof t.cookieJar === "undefined"
                ) {
                    t.cookieJar = this.ckjar;
                }
            }
        }
        queryStr(options) {
            return Object.entries(options)
                .map(
                    ([key, value]) =>
                        `${key}=${typeof value === "object" ? JSON.stringify(value) : value
                        }`
                )
                .join("&");
        }
        getURLParams(url) {
            const params = {};
            const queryString = url.split("?")[1];
            if (queryString) {
                const paramPairs = queryString.split("&");
                paramPairs.forEach((pair) => {
                    const [key, value] = pair.split("=");
                    params[key] = value;
                });
            }
            return params;
        }
        isJSONString(str) {
            try {
                return JSON.parse(str) && typeof JSON.parse(str) === "object";
            } catch (e) {
                return false;
            }
        }
        isJson(obj) {
            var isjson =
                typeof obj == "object" &&
                Object.prototype.toString.call(obj).toLowerCase() ==
                "[object object]" &&
                !obj.length;
            return isjson;
        }
        async sendMsg(message) {
            if (!message) return;
            if ($.isNode()) {
                await notify.sendNotify($.name, message);
            } else {
                $.msg($.name, "", message);
            }
        }
        async httpRequest(options) {
            let t = { ...options };
            t.headers = t.headers || {};
            if (t.params) {
                t.url += "?" + this.queryStr(t.params);
            }
            t.method = t.method.toLowerCase();
            if (t.method === "get") {
                delete t.headers["Content-Type"];
                delete t.headers["Content-Length"];
                delete t.headers["content-type"];
                delete t.headers["content-length"];
                delete t.body;
            } else if (t.method === "post") {
                let ContentType;
                if (!t.body) {
                    t.body = "";
                } else if (typeof t.body === "string") {
                    ContentType = this.isJSONString(t.body)
                        ? "application/json"
                        : "application/x-www-form-urlencoded";
                } else if (this.isJson(t.body)) {
                    t.body = JSON.stringify(t.body);
                    ContentType = "application/json";
                }
                if (!t.headers["Content-Type"] && !t.headers["content-type"]) {
                    t.headers["Content-Type"] = ContentType;
                }
            }
            if (this.isNode()) {
                this.initRequestEnv(t);
                if (this.requestModule === "axios" && t.method === "post") {
                    t.data = t.body;
                    delete t.body;
                }
                let httpResult;
                if (this.requestModule === "got") {
                    httpResult = await this.requset(t);
                    if (this.isJSONString(httpResult.body)) {
                        httpResult.body = JSON.parse(httpResult.body);
                    }
                } else if (this.requestModule === "axios") {
                    httpResult = await this.requset(t);
                    httpResult.body = httpResult.data;
                }
                return httpResult;
            }
            if (this.isQuanX()) {
                t.method = t.method.toUpperCase();
                return new Promise((resolve, reject) => {
                    $task.fetch(t).then((response) => {
                        if (this.isJSONString(response.body)) {
                            response.body = JSON.parse(response.body);
                        }
                        resolve(response);
                    });
                });
            }
        }
        randomNumber(length) {
            const characters = "0123456789";
            return Array.from(
                { length },
                () => characters[Math.floor(Math.random() * characters.length)]
            ).join("");
        }
        randomString(length) {
            const characters = "abcdefghijklmnopqrstuvwxyz0123456789";
            return Array.from(
                { length },
                () => characters[Math.floor(Math.random() * characters.length)]
            ).join("");
        }
        timeStamp() {
            return new Date().getTime();
        }
        uuid() {
            return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(
                /[xy]/g,
                function (c) {
                    var r = (Math.random() * 16) | 0,
                        v = c == "x" ? r : (r & 0x3) | 0x8;
                    return v.toString(16);
                }
            );
        }
        time(t) {
            let s = {
                "M+": new Date().getMonth() + 1,
                "d+": new Date().getDate(),
                "H+": new Date().getHours(),
                "m+": new Date().getMinutes(),
                "s+": new Date().getSeconds(),
                "q+": Math.floor((new Date().getMonth() + 3) / 3),
                S: new Date().getMilliseconds(),
            };
            /(y+)/.test(t) &&
                (t = t.replace(
                    RegExp.$1,
                    (new Date().getFullYear() + "").substr(4 - RegExp.$1.length)
                ));
            for (let e in s)
                new RegExp("(" + e + ")").test(t) &&
                    (t = t.replace(
                        RegExp.$1,
                        1 == RegExp.$1.length
                            ? s[e]
                            : ("00" + s[e]).substr(("" + s[e]).length)
                    ));
            return t;
        }
        msg(s = t, e = "", i = "", o) {
            const h = (t) =>
                !t || (!this.isLoon() && this.isSurge())
                    ? t
                    : "string" == typeof t
                        ? this.isLoon()
                            ? t
                            : this.isQuanX()
                                ? { "open-url": t }
                                : void 0
                        : "object" == typeof t && (t["open-url"] || t["media-url"])
                            ? this.isLoon()
                                ? t["open-url"]
                                : this.isQuanX()
                                    ? t
                                    : void 0
                            : void 0;
            this.isMute ||
                (this.isSurge() || this.isLoon()
                    ? $notification.post(s, e, i, h(o))
                    : this.isQuanX() && $notify(s, e, i, h(o)));
            let logs = ["", "==============📣系统通知📣=============="];
            logs.push(t);
            e ? logs.push(e) : "";
            i ? logs.push(i) : "";
            console.log(logs.join("\n"));
            this.logs = this.logs.concat(logs);
        }
        log(...t) {
            t.length > 0 && (this.logs = [...this.logs, ...t]),
                console.log(t.join(this.logSeparator));
        }
        logErr(t, s) {
            const e = !this.isSurge() && !this.isQuanX() && !this.isLoon();
            e
                ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack)
                : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t);
        }
        wait(t) {
            return new Promise((s) => setTimeout(s, t));
        }
        done(t = {}) {
            const s = new Date().getTime(),
                e = (s - this.startTime) / 1e3;
            this.log(
                "",
                `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`
            );
            this.log();
            if (this.isNode()) {
                process.exit(1);
            }
            if (this.isQuanX()) {
                $done(t);
            }
        }
    })(t, s);
}
