let mode = __dirname.includes("Work"), testMode = process.env.M_TEST_MODE?.["includes"]("on") ? true : mode, wxProxyEnable = parseInt(process.env.M_WX_PROXY_ENABLE || "2"), reRouterEnable = parseInt(process.env.M_RE_ROUTER_ENABLE || "2"), reRouterMsg = process.env.M_RE_ROUTER_MSG || "重拨", openCardMode = process.env.M_OPEN_CARD_MODE || "wh5", proxyRegx = process.env.M_WX_PROXY_ENABLE_REGEXP ? process.env.M_WX_PROXY_ENABLE_REGEXP : "(Request failed with status code 504)|(Request failed with status code 403)|disconnected|(Request failed with status code 493)|certificate|timeout|ECONNREFUSED|ETIMEDOUT|(tunneling socket could not be established)", reTryRegx = "(哎呀活动火爆,请稍后再试|活动太火爆了|服务器数据忙|奖品与您擦肩而过了哟)", tokenCacheMin = parseInt(process.env?.["M_WX_TOKEN_CACHE_MIN"] || 5), tokenCacheMax = parseInt(process.env?.["M_WX_TOKEN_CACHE_MAX"] || 10), enableCacheToken = parseInt(process.env?.["M_WX_ENABLE_CACHE_TOKEN"] || 1), isvObfuscatorRetry = parseInt(process.env?.["M_WX_ISVOBFUSCATOR_RETRY"] || 2), isvObfuscatorRetryWait = parseInt(process.env?.["M_WX_ISVOBFUSCATOR_RETRY_WAIT"] || 2), signMode = process.env.M_SIGN_MODE ? process.env.M_SIGN_MODE : "local", apiToken = process.env.M_API_TOKEN ? process.env.M_API_TOKEN : "", apiSignUrl = process.env.M_API_SIGN_URL ? process.env.M_API_SIGN_URL : "http://api.nolanstore.cc/sign", wskeyFile = process.env.M_WSKEY_FILE ? process.env.M_WSKEY_FILE : mode ? "/home/magic/Work/wools/doc/config.sh" : "", blackPinConfig = { "cjhy-isv.isvjcloud.com": process.env.M_WX_CJ_BLACK_COOKIE_PIN ? process.env.M_WX_CJ_BLACK_COOKIE_PIN : "", "cjhydz-isv.isvjcloud.com": process.env.M_WX_CJ_BLACK_COOKIE_PIN ? process.env.M_WX_CJ_BLACK_COOKIE_PIN : "", "lzkj-isv.isvjcloud.com": process.env.M_WX_LZ_BLACK_COOKIE_PIN ? process.env.M_WX_LZ_BLACK_COOKIE_PIN : "", "lzkjdz-isv.isvjcloud.com": process.env.M_WX_LZ_BLACK_COOKIE_PIN ? process.env.M_WX_LZ_BLACK_COOKIE_PIN : "", "*": process.env.M_WX_BLACK_COOKIE_PIN ? process.env.M_WX_BLACK_COOKIE_PIN : "" }, stopKeywords = ["来晚了", "已发完", "参数缺失或无效", "超出活动计划时间", "奖品发送失败", "发放完", "全部被领取", "余额不足", "已结束", "活动已经结束", "未开始"]; process.env.M_WX_STOP_KEYWORD ? process.env.M_WX_STOP_KEYWORD.split(/[@,&|]/).forEach(l1iIilii => stopKeywords.push(l1iIilii)) : ""; let M_WX_ADDRESS_MODE = process.env?.["M_WX_ADDRESS_MODE"] || "RANDOM", M_WX_ADDRESS_RANGE = process.env?.["M_WX_ADDRESS_RANGE"] || "1-9999", M_WX_ADDRESS_MODE_LOWER = parseInt(process.env?.["M_WX_ADDRESS_MODE_LOWER"] || 0), M_WX_ADDRESS_LOG = parseInt(process.env?.["M_WX_ADDRESS_LOG"] || 0), addressStopKeywords = ["京豆", "红包", "券", "再来一次", "客服"], addressStopKeywordsRule = ["下单满", "签收后", "收到货后", "成功购买任意", "必须购买店铺内"]; process.env.M_WX_ADDRESS_STOP_KEYWORD ? process.env.M_WX_ADDRESS_STOP_KEYWORD.split(/[@,&|]/).forEach(I1I1iil1 => addressStopKeywords.push(I1I1iil1)) : ""; process.env.M_WX_ADDRESS_STOP_KEYWORD_RULE ? process.env.M_WX_ADDRESS_STOP_KEYWORD_RULE.split(/[@,&|]/).forEach(i1I1IIII => addressStopKeywordsRule.push(i1I1IIII)) : ""; let wxWhitelist = []; process.env.M_WX_WHITELIST ? process.env.M_WX_WHITELIST.split(/[@,&|]/).forEach(li1l1lli => wxWhitelist.push(li1l1lli.includes("-") ? li1l1lli : li1l1lli * 1)) : []; let wxWhitelistNotSupportFile = ["Invite", "invite", "collectCard", "unPackDraw", "team", "microDz", "share", "opencard"]; process.env.M_WX_WHITELIST_NOT_SUPPORT_FILE ? process.env.M_WX_WHITELIST_NOT_SUPPORT_FILE.split(/[@,&|]/).forEach(l1il111I => wxWhitelistNotSupportFile.push(l1il111I)) : ""; let blockPinRegx = process.env.M_WX_BLOCK_PIN_REGX || "", openCardTypes = ["10033", "10043", "10052", "10068"]; process.env.M_WX_OPEN_CARD_TYPES ? process.env.M_WX_OPEN_CARD_TYPES.split(/[@,&|]/).forEach(li1Iilil => openCardTypes.push(li1Iilil)) : ""; let masterNum = parseInt(process.env.M_WX_LEADER_NUM || "9999"); const notInitPinTokenRegex = /(lorealjdcampaign-rc.isvjcloud.com|interaction\/v1)/, urlPrefixes = { "/prod/cc/interactsaas": /interactsaas/, "/crm-proya/apps/interact": /crm-proya/, "/apps/interact": /lorealjdcampaign-rc.isvjcloud.com\/prod\/cc/, "prod/cc/cjwx": /lorealjdcampaign-rc.isvjcloud.com\/prod\/cc\/cjwx/, "/apps/interact": /lorealjdcampaign-rc.isvjcloud.com\/interact/, "/prod/cc/interaction/v1": /interaction/ }; let hdbTypes = ["hdb-isv.isvjcloud.com", "jingyun-rc.isvjcloud.com"], jinggengTypes = ["jinggeng-isv.isvjcloud.com"], jinggengcjTypes = ["jinggengjcq-isv.isvjcloud.com", "mpdz-act-dz.isvjcloud.com"], keywords = ["pps", "utm_campaign", "utm_term", "utm_source", "utm_medium", "teamId", "mpin", "shareUuid", "signUuid", "inviterNick", "inviter", "InviteUuid", "inviterNickName", "sharer", "inviterImg", "nickName", "nick", "friendUuid", "helpUuid", "shareuserid4minipg", "bizExtString", "invitePin", "pps", "cookie", "friendid", "bizExtString", "bizExtString", "koikey", "pps", "inviter_id", "invitePin", "portrait", "sid", "shareUserId", "_ts", "pps", "pps", "pps", "DEBUG", "shareOpenId", "jxsid", "ad_od", "token", "pps", "encryptOpenId", "gx", "gxd", "accessToken"], _currentTime = Date.now(), proxies = []; for (let i = 0; i < 20; i++) { try { if (!process.env["M_WX_PROXY_URL" + (i || "")]) continue; proxies.push({ "index": i + 1, "url": process.env["M_WX_PROXY_URL" + (i || "")], "close": process.env["M_WX_PROXY_CLOSE" + (i || "")] || "", "type": parseInt(process.env["M_WX_PROXY_TYPE" + (i || "")] || 1) }); } catch (iilllliI) { console.log("读取代理配置 出错", iilllliI); } } const version = "v3.7.0", axios = require("axios"), fs = require("fs"), tunnel = require("tunnel"), { format } = require("date-fns"), cheerio = require("cheerio"), notify = require("./sendNotify"); let jdCookieNode = require("./jdCookie.js"); const CryptoJS = require("crypto-js"); let base64 = require("base-64"); try { base64 = require("base-64"); } catch (iI1l1il) { console.log("请安装base-64依赖"); } let NodeRSA; try { NodeRSA = require("node-rsa"); } catch (l1lliIiI) { console.log("请安装node-rsa依赖"); } const h5sts = require("./h5sts.js"); let cookies = []; Object.keys(jdCookieNode).length > 0 && Object.keys(jdCookieNode).forEach(l1li1lli => { cookies.push(jdCookieNode[l1li1lli]); }); const JDAPP_USER_AGENTS = ["jdapp;android;10.0.2;9;" + uuid() + ";network/wifi;Mozilla/5.0 (Linux; Android 9; MHA-AL00 Build/HUAWEIMHA-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/044942 Mobile Safari/537.36", "jdapp;android;10.0.2;9;" + uuid() + ";network/wifi;Mozilla/5.0 (Linux; Android 9; MI 6 Build/PKQ1.190118.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/044942 Mobile Safari/537.36", "jdapp;android;10.0.2;9;" + uuid() + ";network/4g;Mozilla/5.0 (Linux; Android 9; Mi Note 3 Build/PKQ1.181007.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045131 Mobile Safari/537.36", "jdapp;android;10.0.2;9;" + uuid() + ";network/wifi;Mozilla/5.0 (Linux; Android 9; 16T Build/PKQ1.190616.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/044942 Mobile Safari/537.36", "jdapp;android;10.0.2;10;" + uuid() + ";network/wifi;Mozilla/5.0 (Linux; Android 10; ONEPLUS A5010 Build/QKQ1.191014.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045230 Mobile Safari/537.36", "jdapp;android;10.0.2;10;" + uuid() + ";network/wifi;Mozilla/5.0 (Linux; Android 10; M2006J10C Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045230 Mobile Safari/537.36", "jdapp;android;10.0.2;10;" + uuid() + ";network/wifi;Mozilla/5.0 (Linux; Android 10; ONEPLUS A6000 Build/QKQ1.190716.003; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045224 Mobile Safari/537.36", "jdapp;android;10.0.2;10;" + uuid() + ";network/wifi;Mozilla/5.0 (Linux; Android 10; GM1910 Build/QKQ1.190716.003; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045230 Mobile Safari/537.36", "jdapp;android;10.0.2;10;" + uuid() + ";network/wifi;Mozilla/5.0 (Linux; Android 10; LYA-AL00 Build/HUAWEILYA-AL00L; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045230 Mobile Safari/537.36", "jdapp;android;10.0.2;10;" + uuid() + ";network/wifi;Mozilla/5.0 (Linux; Android 10; Redmi K20 Pro Premium Edition Build/QKQ1.190825.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045227 Mobile Safari/537.36", "jdapp;android;10.0.2;11;" + uuid() + ";network/wifi;Mozilla/5.0 (Linux; Android 11; Redmi K20 Pro Premium Edition Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045513 Mobile Safari/537.36", "jdapp;android;10.0.2;10;" + uuid() + ";network/wifi;Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045227 Mobile Safari/537.36", "jdapp;android;10.0.2;11;" + uuid() + ";network/wifi;Mozilla/5.0 (Linux; Android 11; Redmi K30 5G Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045511 Mobile Safari/537.36", "jdapp;iPhone;10.0.2;14.2;" + uuid() + ";network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 14_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", "jdapp;iPhone;10.0.2;14.3;" + uuid() + ";network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", "jdapp;iPhone;10.0.2;14.2;" + uuid() + ";network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 14_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", "jdapp;iPhone;10.0.2;11.4;" + uuid() + ";network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 11_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15F79", "jdapp;android;10.0.2;10;;" + uuid() + ";network/wifi;Mozilla/5.0 (Linux; Android 10; M2006J10C Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045230 Mobile Safari/537.36", "jdapp;iPhone;10.0.2;14.3;" + uuid() + ";network/4g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", "jdapp;iPhone;10.0.2;13.6;" + uuid() + ";network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 13_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", "jdapp;iPhone;10.0.2;13.6;" + uuid() + ";network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 13_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", "jdapp;iPhone;10.0.2;13.5;" + uuid() + ";network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", "jdapp;iPhone;10.0.2;14.1;" + uuid() + ";network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 14_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", "jdapp;iPhone;10.0.2;13.3;" + uuid() + ";network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", "jdapp;iPhone;10.0.2;13.7;" + uuid() + ";network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 13_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", "jdapp;iPhone;10.0.2;14.1;" + uuid() + ";network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 14_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", "jdapp;iPhone;10.0.2;13.3;" + uuid() + ";network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", "jdapp;iPhone;10.0.2;13.4;" + uuid() + ";network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 13_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", "jdapp;iPhone;10.0.2;14.3;" + uuid() + ";network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", "jdapp;iPhone;10.0.2;14.3;" + uuid() + ";network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", "jdapp;iPhone;10.0.2;14.3;" + uuid() + ";network/4g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", "jdapp;iPhone;10.0.2;14.1;" + uuid() + ";network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 14_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", "jdapp;android;10.0.2;8.1.0;" + uuid() + ";network/wifi;Mozilla/5.0 (Linux; Android 8.1.0; 16 X Build/OPM1.171019.026; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/044942 Mobile Safari/537.36", "jdapp;android;10.0.2;8.0.0;" + uuid() + ";network/wifi;Mozilla/5.0 (Linux; Android 8.0.0; HTC U-3w Build/OPR6.170623.013; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/044942 Mobile Safari/537.36", "jdapp;iPhone;10.0.2;14.0.1;" + uuid() + ";network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", "jdapp;android;10.0.2;8.1.0;" + uuid() + ";network/wifi;Mozilla/5.0 (Linux; Android 8.1.0; MI 8 Build/OPM1.171019.026; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045131 Mobile Safari/537.36"], $ = axios.create({ "timeout": 20000 }); $.defaults.headers.Accept = "*/*"; $.defaults.headers.Connection = "keep-alive"; $.defaults.headers["Accept-Language"] = "zh-CN,zh-Hans;q=0.9"; $.defaults.headers["Accept-Encoding"] = "gzip, deflate, br"; $.defaults.retry = 2; $.defaults.retryDelay = 2000; let resetRouterTimeInterval = process.env.M_WX_RESET_ROUTER_TIME_INTERVAL ? process.env.M_WX_RESET_ROUTER_TIME_INTERVAL * 1 : 60, status493 = false; $.defaults.shouldRetry = async iII1i1l => { let llliiIl1 = iII1i1l.response?.["status"]; if ([403, 407].includes(llliiIl1)) return false; if (llliiIl1 === 493) { return status493 = true, true; } if (iII1i1l.message.includes("timeout") || iII1i1l.message.includes("TLS") || iII1i1l.message.includes("ECONNRESET")) { return true; } if (iII1i1l.message.includes("tunneling socket could not be established")) return needRouter = true, false; return true; }; $.interceptors.request.use(function (l1iilil) { if (l1iilil.url.includes("QueryShopMemberInfoJson") || l1iilil.url.includes("isvObfuscator") || l1iilil.url.includes("getMyPing") || l1iilil.url.includes("getTopAndNewActInfo") || l1iilil.url.includes("initForFarm") || l1iilil.url.includes("scan") || l1iilil.url.includes("getShopHomeBaseInfo") || l1iilil.url.includes("getShopOpenCardInfo") || l1iilil.url.includes("initPetTown") || l1iilil.url.includes("getFansFuseMemberDetail") || l1iilil.url.includes("0/sign") || l1iilil.url.includes("2/sign") || l1iilil.url.includes("9/sign") || l1iilil.url.includes("/h5stv3") || l1iilil.url.includes("/sendMessage") || l1iilil.url.includes("getShopHomeActivityInfo") || l1iilil.url.includes("getShopHomeFloorInfo") || l1iilil.url.includes("rmvCmdy") || l1iilil.url.includes("uncheckcmdy")) return l1iilil; return l1iilil; }, function (lIi1lI1) { return Promise.reject(lIi1lI1); }); $.interceptors.response.use(function (ii1ilIi1) { if (ii1ilIi1.config.url.includes("QueryShopMemberInfoJson") || ii1ilIi1.config.url.includes("isvObfuscator") || ii1ilIi1.config.url.includes("activityContent") || ii1ilIi1.config.url.includes("initForFarm") || ii1ilIi1.config.url.includes("scan") || ii1ilIi1.config.url.includes("getShopHomeBaseInfo") || ii1ilIi1.config.url.includes("getShopOpenCardInfo") || ii1ilIi1.config.url.includes("initPetTown") || ii1ilIi1.config.url.includes("getFansFuseMemberDetail") || ii1ilIi1.config.url.includes("0/sign") || ii1ilIi1.config.url.includes("2/sign") || ii1ilIi1.config.url.includes("memberBringActPage") || ii1ilIi1.config.url.includes("9/sign") || ii1ilIi1.config.url.includes("/h5stv3") || ii1ilIi1.config.url.includes("/getMyPing") || ii1ilIi1.config.url.includes("/getSimpleActInfoVo") || ii1ilIi1.config.url.includes("getShopHomeActivityInfo") || ii1ilIi1.config.url.includes("getShopHomeFloorInfo") || ii1ilIi1.config.url.includes("whx_getMShopOutlineInfo") || ii1ilIi1.config.url.includes("rmvCmdy") || ii1ilIi1.config.url.includes("/sendMessage") || ii1ilIi1.config.url.includes("/getGameInfo") || ii1ilIi1.config.url.includes("/login") || ii1ilIi1.config.url.includes("/checkOpenCard") || ii1ilIi1.config.url.includes("/jiugongge/activity") || ii1ilIi1.config.url.includes("/taskInfo") || ii1ilIi1.config.url.includes("/organizeTeam/activity") || ii1ilIi1.config.url.includes("/basicInfo") || ii1ilIi1.config.url.includes("uncheckcmdy")) return status493 = ii1ilIi1.status === 493, ii1ilIi1; return status493 = ii1ilIi1.status === 493, ii1ilIi1; }, function (iIII111I) { let iIlIiilI = iIII111I.config; if (!iIlIiilI || !iIlIiilI.retry) return Promise.reject(iIII111I); if (!iIlIiilI.shouldRetry || typeof iIlIiilI.shouldRetry != "function") return Promise.reject(iIII111I); if (!iIlIiilI.shouldRetry(iIII111I)) { return Promise.reject(iIII111I); } iIlIiilI.__retryCount = iIlIiilI.__retryCount || 0; if (iIlIiilI.__retryCount >= iIlIiilI.retry) return Promise.reject(iIII111I); iIlIiilI.__retryCount += 1; let iiI1l111 = new Promise(function (iilIl1lI) { setTimeout(function () { iilIl1lI(); }, iIlIiilI.retryDelay || 1); }); return iiI1l111.then(function () { return axios(iIlIiilI); }); }); function uuid(iiIili1l = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") { return iiIili1l.replace(/[xy]/g, function (IlilI1iI) { const IIII1lIi = 16 * Math.random() | 0, l1lI1iI = "x" === IlilI1iI ? IIII1lIi : 3 & IIII1lIi | 8; return l1lI1iI.toString(36); }); } class Env { constructor(iiiIiIii) { this.name = iiiIiIii; this.username = ""; this.cookie = ""; this.wskey = ""; this.wskeys = new Map(); this.originCookies = cookies; this.cookies = cookies; this.index = ""; this.ext = []; this.msg = []; this.delimiter = ""; this.filename = ""; this.ticket = ""; this.appId = ""; this.algo = {}; this.bot = false; this.openCount = 0; this.expire = false; this.breakBefore = false; this.skipNum = 0; this.accounts = {}; this.accountAddressList = []; this.domain = ""; this.activityUrl = ""; this.activityId = ""; this.activityType = ""; this.tickets = new Map(); this.addressIndex = 1; this.shopName = ""; this.needOpenCard = false; this.urlPrefix = ""; this.proxyEnable = false; this.superVersion = version; this.version = ""; this.shopName = ""; this.venderId = ""; this.shopId = ""; this.ownerUuid = ""; this.exit = true; this.rule = ""; this.masterNum = masterNum; this.prizeList = []; this.hdbTypes = hdbTypes; this.jinggengcjTypes = jinggengcjTypes; this.jinggengTypes = jinggengTypes; this.defenseUrls = []; this.runAll = false; this.currAddrUsername = ""; this.UUID = uuid(); } async ["run"](iiIIilii = { "wait": [1000, 2000], "bot": false, "delimiter": "", "o2o": false, "random": false, "once": false, "wskey": false, "mod": 1, "multCenter": false, "blacklist": [], "whitelist": [] }) { try { Promise.resolve().then(() => this.forceQuit()); this.filename = process.argv[1]; console.log(this.now() + " " + this.name + " " + this.filename + " 开始运行..."); console.log("TG频道:https://t.me/Wall_E_Group"); console.log("当前token:\"" + this.desensitizeString(apiToken) + "\""); console.log("sign地址:" + this.desensitizeString(apiSignUrl)); if (this.activityUrl && !this.version) throw new Error("请更新代码"); console.log("当前版本:" + (this.version || "v1.0.0") + ",依赖版本:" + (this.superVersion || "v1.0.0")); if (process.env.M_SYS_INFO === "1") { console.log("-----------------系统参数-----------------"); for (let IlllIlll in process.env) { if (!IlllIlll.startsWith("M_") || IlllIlll.includes("URL") || IlllIlll.includes("TOKEN") || IlllIlll.includes("ARGV")) { continue; } console.log(IlllIlll + "=\"" + process.env[IlllIlll] + "\""); } console.log("-----------------系统参数-----------------"); } this.__start = this.timestamp(); let ii1lil1I = ""; try { if (mode) { ii1lil1I = this.readFileSync("/home/magic/Work/wools/doc/account.json"); } else { if (fs.existsSync("utils/account.json")) { ii1lil1I = this.readFileSync("utils/account.json"); } else fs.existsSync("/jd/config/account.json") ? ii1lil1I = this.readFileSync("/jd/config/account.json") : ii1lil1I = this.readFileSync("account.json"); } if (ii1lil1I) { JSON.parse(ii1lil1I).forEach(lli1lIl1 => { this.accounts[lli1lIl1.pt_pin] = lli1lIl1; lli1lIl1?.["address"] && this.accountAddressList.push(lli1lIl1?.["address"]); }); } } catch (IIii1iIi) { console.log("account.json读取异常", IIii1iIi); this.msg.push("account.json读取异常"); } await this.config(); iiIIilii?.["delimiter"] && (this.delimiter = iiIIilii?.["delimiter"]); iiIIilii?.["bot"] && (this.bot = iiIIilii.bot); console.log("原始ck长度", cookies.length); if (iiIIilii?.["blacklist"]?.["length"] > 0) for (const ll1Iii11 of this.__as(iiIIilii.blacklist)) { delete cookies[ll1Iii11 - 1]; } this.buildActInfo(); console.log("排除黑名单后ck长度", cookies.length); wxWhitelist.length > 0 && wxWhitelistNotSupportFile.filter(Iiill1ll => this.filename.includes(Iiill1ll)).length === 0 && this.filename.includes("_wx_") && (console.log("支持全局无线ck长度:" + wxWhitelist), console.log("支持全局无线ck长度:" + wxWhitelistNotSupportFile), iiIIilii.whitelist = wxWhitelist); if (iiIIilii?.["whitelist"]?.["length"] > 0) { let ii111111 = []; for (const lliiI1li of this.__as(iiIIilii.whitelist)) { lliiI1li - 1 < cookies.length && ii111111.push(cookies[lliiI1li - 1]); } cookies = ii111111; } console.log("设置白名单后ck长度", cookies.length); this.delBlackCK(); console.log("排除PIN黑名单后ck长度", cookies.length); if (fs.existsSync("./ck")) { for (let IIl1IllI of fs.readdirSync("./ck")) { if (IIl1IllI.includes(".txt")) { let lli1i1Il = fs.readFileSync("./ck/" + IIl1IllI, "utf-8"); lli1i1Il = lli1i1Il.replace(/\r/g, ""); lli1i1Il = lli1i1Il.replace(/\n/g, "&"); let llII1lIi = lli1i1Il.split("&"); for (let I1lilIil = 0; I1lilIil < llII1lIi.length; I1lilIil++) { cookies.push(llII1lIi[I1lilIil]); } console.log("读取" + IIl1IllI + "后ck长度", cookies.length); } } } iiIIilii?.["random"] && (cookies = this.randomArray(cookies)); if (iiIIilii?.["wskey"]) { try { let IIIl1l11 = fs.existsSync(wskeyFile) ? this.readFileSync(wskeyFile).split("\n") : process.env?.["JD_WSCK"]?.["split"]("&") || []; for (let iIIIi1il of IIIl1l11) { if (!iIIIi1il.endsWith(";")) { iIIIi1il += ";"; } if (iIIIi1il.startsWith("pin")) this.wskeys.set(iIIIi1il.match(/pin=([^; ]+)(?=;?)/)[1], iIIIi1il.match(/(pin=.*?;wskey=.*?;)/)[1]);else iIIIi1il.startsWith("wskey") && this.wskeys.set(iIIIi1il.match(/pin=([^; ]+)(?=;?)/)[1], iIIIi1il.match(/(pin=.*?;wskey=.*?;)/)[1]); } console.log("当前wskey共计" + this.wskeys.size + "个"); } catch (iii1IIIl) { console.log("wkeys读取异常", iii1IIIl); this.msg.push("wkeys读取异常"); } } // await this.auth(); await this.routerProxy(); await this.verify(); this.cookies = cookies; if (iiIIilii?.["before"]) for (let l111l1i = 0; l111l1i < this.cookies.length; l111l1i++) { if (!this.cookies[l111l1i]) continue; if (this.breakBefore) { break; } let iIll = this.cookies[l111l1i]; this.cookie = iIll; let I1iilIi1 = iIll.match(/pt_pin=(.+?);/) && iIll.match(/pt_pin=(.+?);/)[1]; this.username = decodeURIComponent(I1iilIi1); this.wskey = this.wskeys.get(I1iilIi1); $.defaults.headers.Cookie = this.cookie; this.index = l111l1i + 1; try { let II1Il1i = await this.before(); if (II1Il1i) { this.ext.push(Object.assign({ "username": this.username, "index": this.index, "cookie": this.cookie }, II1Il1i)); } } catch (I1i11111) { console.log(I1i11111); } if (iiIIilii?.["wait"]?.["length"] > 0 && this.index !== cookies.length && !this.breakBefore) { await this.wait(iiIIilii?.["wait"][0], iiIIilii?.["wait"][1]); } } let i1iI1lil = false; IIIiill1: for (let iii1Iiii = 0; iii1Iiii < this.cookies.length; iii1Iiii++) { if (!this.cookies[iii1Iiii]) { continue; } if (this.expire) { break; } let i1Ill1i1 = this.cookies[iii1Iiii]; this.cookie = i1Ill1i1; let IiI1iliI = i1Ill1i1.match(/pt_pin=(.+?);/) && i1Ill1i1.match(/pt_pin=(.+?);/)[1]; this.username = decodeURIComponent(IiI1iliI); this.index = iii1Iiii + 1; if (iiIIilii?.["once"] && this.index !== iiIIilii.once) { i1iI1lil = true; continue; } if (this.skipNum > 0 && this.skipNum-- > 0) { this.log("跳过当前ck skipNum=" + this.skipNum); continue; } this.wskey = this.wskeys.get(IiI1iliI); $.defaults.headers.Cookie = this.cookie; !iiIIilii?.["before"] ? this.ext.push({ "username": this.username, "index": this.index, "cookie": this.cookie }) : ""; !(this.activityUrl.includes("prod/cc") || this.activityUrl.includes("interact") || this.activityUrl.includes("crm-proya")) && (this.index > 1 ? this.appId === "wx" ? await this._algo() : "" : ""); status493 = false; for (let IlIi11li = 0; IlIi11li < 3; IlIi11li++) { try { await this.logic(); iiIIilii?.["o2o"] && this.msg.length > 5 && (await this.send(), testMode ? this.log(this.msg.join("\n")) : "", this.msg = []); if (i1iI1lil) { break IIIiill1; } break; } catch (IiIlI1) { this.log("捕获异常", IiIlI1.message); try { if (this.isProxy(IiIlI1?.["message"])) { await this.routerProxy(); continue; } else { if (IiIlI1?.["response"]?.["status"] === 493 || IiIlI1?.["message"]?.["includes"]("493")) { await this.router(); continue; } } if (IiIlI1?.["response"]?.["status"] === 403) { this.msg.push("IP 403 403 403"); continue; } if (status493) { this.msg.push("beta测试"); continue; } break; } catch (lilIIIlI) { this.log(lilIIIlI); } } } if (iiIIilii?.["wait"]?.["length"] > 0 && this.index !== cookies.length && !this.expire) { await this.wait(iiIIilii?.["wait"][0], iiIIilii?.["wait"][1]); } } try { if (this.msg.length > 0) { this.msg.push(""); } this.actName && this.msg.push("活动名称:" + this.actName); this.shopName && this.msg.push("#" + this.shopName); this.shopId && this.venderId && !this.shopName && this.msg.push("#" + (await this.getShopName())); this.shopId && this.venderId && this.msg.push("店铺信息:" + this.shopId + "_" + this.venderId); if (this.actStartTime || this.actEndTime) { this.actStartTime && !("" + this.actStartTime).includes("-") && (this.actStartTime = this.formatDate(this.actStartTime, "yyyy-MM-dd HH:mm:ss")); this.actEndTime && !("" + this.actEndTime).includes("-") && (this.actEndTime = this.formatDate(this.actEndTime, "yyyy-MM-dd HH:mm:ss")); this.msg.push("活动时间:" + (this.actStartTime || "") + "至" + (this.actEndTime || "")); } await this.after(); (this.shopId || this.userId || this.venderId) && (this.msg.push(""), this.msg.push("https://shop.m.jd.com/shop/home?shopId=" + (this.shopId || this.userId || this.venderId || ""))); } catch (lilliiII) { this.log("after error" + lilliiII.message); } console.log(this.now() + " " + this.name + " 运行结束,耗时 " + (this.timestamp() - this.__start) + "ms\n"); testMode && this.msg.length > 0 ? console.log(this.msg.join("\n")) : ""; !this.notSend && !iiIIilii?.["o2o"] && (await this.send()); } finally { process.exit(0); } } async ["forceQuit"](IiIIli1l = 3) { if (process.env?.["M_TIMEOUT_QUIT"]) { while ((Date.now() - _currentTime) / 1000 / 60 < IiIIli1l) { console.log("进程监控中..."); await this.wait(30 * 1000); } this.log("进程超时,强制退出"); process.exit(0); } } async ["config"]() {} ["isProxy"](IIiI1lIi = "493") { if (wxProxyEnable === 1 && this.index === 1) { return; } return this.isNeedRouter(IIiI1lIi); } ["isNeedRouter"](li1llIIl) { const I1IiliI = new RegExp(proxyRegx); return I1IiliI.test(li1llIIl) && (this.domain.includes("isvjcloud") || this.proxyEnable); } ["delBlackCK"]() { let li1i1l1I = []; ii1l1iil: for (let llI111lI = 0; llI111lI < cookies.length; llI111lI++) { if (cookies[llI111lI]) { let lIlIi1Il = cookies[llI111lI], IliiliI = lIlIi1Il.match(/pt_pin=(.+?);/) && lIlIi1Il.match(/pt_pin=(.+?);/)[1]; if (this.activityUrl.includes("isvjcloud") && blockPinRegx) { for (let IiIil1il of blockPinRegx.split(";")) { let llI11111 = IiIil1il.split("@"), IiIl1111 = this.activityUrl.match(new RegExp(llI11111[0])); if (IiIl1111 && llI11111[1].split("|").includes(IliiliI)) { this.log("匹配到黑名单 " + IiIil1il + " " + IliiliI); continue ii1l1iil; } } } if (blackPinConfig[this.domain]?.["includes"](IliiliI)) continue; if (blackPinConfig["*"]?.["includes"](IliiliI)) continue; li1i1l1I.push(lIlIi1Il); } } cookies = li1i1l1I; } ["me"]() { return this.ext[this.index - 1]; } ["__as"](liliI1i1) { let iIiI1I1I = []; for (let IIiIi1iI of liliI1i1) { if (typeof IIiIi1iI !== "string") { iIiI1I1I.push(IIiIi1iI); continue; } for (let iliil1 of IIiIi1iI.split(",")) { if (typeof iliil1 === "string") { if (iliil1.includes("-")) { let lIiiIl1 = iliil1.split("-")[0] * 1, iIIiIill = iliil1.split("-")[1] * 1; if (iIIiIill - lIiiIl1 === 1) iIiI1I1I.push(lIiiIl1), iIiI1I1I.push(iIIiIill);else for (let li1II1i = lIiiIl1; li1II1i <= iIIiIill; li1II1i++) { iIiI1I1I.push(li1II1i); } } else { iIiI1I1I.push(iliil1 * 1); } } else { iIiI1I1I.push(iliil1); } } } return iIiI1I1I; } ["deleteCookie"]() { return delete this.cookies[this.index - 1], {}; } ["groupBy"](l11Iii11, iliI11ii) { const ll1illIi = {}; return l11Iii11.forEach(function (lIlIiIII) { const ilIl1lli = iliI11ii(lIlIiIII); ll1illIi[ilIl1lli] = ll1illIi[ilIl1lli] || []; ll1illIi[ilIl1lli].push(lIlIiIII); }), ll1illIi; } async ["send"]() { if (this.msg?.["length"] > 0) { this.msg.push("\n时间:" + this.now() + " 时长:" + ((this.timestamp() - this.__start) / 1000).toFixed(2) + "s"); if (this.bot) await notify.sendNotify("/" + this.name, this.msg.join(this.delimiter || ""));else { await notify.sendNotify(this.name, this.msg.join("\n")); } } } async ["verify"]() { let I1lIll1 = this.filename; function l11II1i1(Ilillll1) { return Ilillll1.trim().match(/([a-z_])*$/)[0]; } let IilIilii = "109M95O106F120V95B", Il1l11l = "99M102F100O", iI1111ll = "109H99V", Il1i1lll = "102N97I99D116T111G114A121B", iI1lIIii = "112C112U", ilI1iIIl = "109N95G106B100K95U", i1IIilli = "119V120M", IIIllIlI = /[A-Z]/; IilIilii.concat(Il1l11l).split(IIIllIlI).map(lI1l1ill => +lI1l1ill).filter(i1Ii1iIi => i1Ii1iIi > 0).forEach(Ii111l1I => Il1l11l += String.fromCharCode(Ii111l1I)); IilIilii.concat(iI1111ll).split(IIIllIlI).map(iiIilIl1 => +iiIilIl1).filter(i1I11lIl => i1I11lIl > 0).forEach(I1i1llli => iI1111ll += String.fromCharCode(I1i1llli)); IilIilii.concat(Il1i1lll).split(IIIllIlI).map(ilIiI1lI => +ilIiI1lI).filter(lIiIi1li => lIiIi1li > 0).forEach(Ii1liiII => Il1i1lll += String.fromCharCode(Ii1liiII)); IilIilii.concat(iI1lIIii).split(IIIllIlI).map(ii11iii1 => +ii11iii1).filter(lIilIlil => lIilIlil > 0).forEach(liilIll => iI1lIIii += String.fromCharCode(liilIll)); ilI1iIIl.concat(i1IIilli).split(IIIllIlI).map(lIlIii11 => +lIlIii11).filter(IIIillIi => IIIillIi > 0).forEach(II1Ili1 => i1IIilli += String.fromCharCode(II1Ili1)); this.appId = I1lIll1 ? this.name.slice(0, 1) === String.fromCharCode(77) ? I1lIll1.includes(l11II1i1(Il1l11l)) ? "10032" : I1lIll1.includes(l11II1i1(iI1111ll)) ? "10028" : I1lIll1.includes(l11II1i1(Il1i1lll)) ? "10001" : I1lIll1.includes(l11II1i1(iI1lIIii)) ? "10038" : I1lIll1.includes(l11II1i1(i1IIilli)) ? "wx" : "" : "" : ""; this.appId ? this.algo = await this._algo() : ""; } async ["auth"]() { if (this.activityUrl) { let l1IlIiI1 = "no"; try { let { data: l1II111 } = await this.request("http://43.138.16.15:7705/auth", { "Cookie": "authority", "token": apiToken, "_vs": this.superVersion, "_cs": this.cookies?.["length"] || 0 }, { "data": this.activityUrl, "_ph": this.filename, "_pd": l1IlIiI1 }); l1II111.data?.["notity"] && this.msg.push(l1II111.data?.["notity"]); if (l1II111.status !== 0) { this.msg.push(l1II111.msg); throw new Error(l1II111.msg); } this.ownerUuid = l1II111.data?.["ownerUuid"] || ""; } catch (i1l1) { if (this.msg.length > 0) { await this.send(); } throw new Error("authority false"); } } } async ["wait"](lIiiII1I, lII1iiiI) { if (lIiiII1I <= 0) return; return lII1iiiI ? new Promise(IiiillIi => setTimeout(IiiillIi, this.random(lIiiII1I, lII1iiiI))) : new Promise(iI1lii => setTimeout(iI1lii, lIiiII1I)); } ["putMsg"](Il1l1iIi) { _currentTime = Date.now(); Il1l1iIi += ""; this.log(Il1l1iIi); let I11ilIii = [[" ", ""], ["优惠券", "券"], ["东券", "券"], ["元京东E卡", "元E卡"], ["店铺", ""], ["恭喜", ""], ["获得", ""]]; for (let iii1lllI of I11ilIii) { Il1l1iIi = Il1l1iIi.replace(iii1lllI[0], iii1lllI[1]); } Il1l1iIi?.["includes"]("期间下单") && (this.expire = true); if (this.bot) { this.msg.push(Il1l1iIi); } else { let liIIl1l = (this.accounts[this.username]?.["remarks"] || this.username) + this.index; if (this.msg.length > 0 && this.msg.filter(I1ilii => I1ilii.includes(liIIl1l)).length > 0) { for (let lili1I1 = 0; lili1I1 < this.msg.length; lili1I1++) { if (this.msg[lili1I1].includes(liIIl1l)) { this.msg[lili1I1] = this.msg[lili1I1].split(" ")[0] + "" + [this.msg[lili1I1].split(" ")[1], Il1l1iIi].join(","); break; } } } else this.msg.push("【" + liIIl1l + "】" + Il1l1iIi); } } ["getRemarks"](IiII11iI) { return this.accounts[IiII11iI]?.["remarks"] || IiII11iI; } ["md5"](lIllilI) { return CryptoJS.MD5(lIllilI).toString(); } ["hmacSHA256"](liIlIi1l, IlIl1i1) { return CryptoJS.HmacSHA256(liIlIi1l, IlIl1i1).toString(); } ["encryptCrypto"](l1i11li, ilii1II, il1l1IiI, iIIiII1I, iiIil11, llillliI, ll1i1i1I = "Utf8", I1iI111 = "Hex") { return CryptoJS[l1i11li].encrypt(CryptoJS.enc[ll1i1i1I].parse(iIIiII1I), CryptoJS.enc.Utf8.parse(iiIil11), { "mode": CryptoJS.mode[ilii1II], "padding": CryptoJS.pad[il1l1IiI], "iv": CryptoJS.enc.Utf8.parse(llillliI) }).ciphertext.toString(CryptoJS.enc[I1iI111]); } ["decryptCrypto"](i1i11IIl, Il1II1, lili1Iil, IIlIlI1I, llIIiill, iI1lI111, IIilIIli = "Base64", IlIIli1i = "Utf8") { return CryptoJS[i1i11IIl].decrypt({ "ciphertext": CryptoJS.enc[IIilIIli].parse(IIlIlI1I) }, CryptoJS.enc.Utf8.parse(llIIiill), { "mode": CryptoJS.mode[Il1II1], "padding": CryptoJS.pad[lili1Iil], "iv": CryptoJS.enc.Utf8.parse(iI1lI111) }).toString(CryptoJS.enc[IlIIli1i]); } ["rsaEncrypt"](I1l1I1li, Il1lIilI, li11I1l1) { I1l1I1li = "-----BEGIN PUBLIC KEY-----\n" + I1l1I1li + "\n-----END PUBLIC KEY-----"; let I1iilli = new NodeRSA(I1l1I1li); return I1iilli.setOptions(Il1lIilI), I1iilli.encrypt(li11I1l1, "base64"); } ["log"](...IillI1iI) { _currentTime = Date.now(); this.s ? console.log(...IillI1iI) : console.log(this.now("HH:mm:ss.SSS") + " cookie" + this.index + " " + (this.accounts[this.username]?.["remarks"] || this.desensitizeString(this.username)), ...IillI1iI); } ["desensitizeString"](il11llI) { if (process.env?.["M_LOG_DESENSITIZE"]) return il11llI || ""; if (!il11llI) return ""; if (il11llI.length <= 4) { return il11llI; } const Iil1i11 = il11llI, IIli1I1l = Iil1i11.substring(0, 2), l1l1Il11 = Iil1i11.substring(Iil1i11.length - 2), ii11iill = Math.max(0, 8 - IIli1I1l.length - l1l1Il11.length), illilI1I = "*".repeat(ii11iill); return (IIli1I1l + illilI1I + l1l1Il11).padEnd(6, "*"); } ["union"](lIlIiiIl, iliiI) { return Array.from(new Set([...lIlIiiIl.map(liil => liil + ""), ...iliiI.map(i1I1IiI1 => i1I1IiI1 + "")])); } ["intersection"](ll11iIIi, illiIIiI) { const lli1ll1i = ll11iIIi.map(lII1l1ll => lII1l1ll + "").filter(lli11ii1 => illiIIiI.map(ili1li1i => ili1li1i + "").includes(lli11ii1)), lIIiiIii = illiIIiI.map(Iiiilli1 => Iiiilli1 + "").filter(IiIlIlli => ll11iIIi.map(I1l1i => I1l1i + "").includes(IiIlIlli)); return lli1ll1i.concat(lIIiiIii); } ["different"](i1lIIliI, lllliIll) { const ilIi11Il = i1lIIliI.map(IIIi1Il1 => IIIi1Il1 + "").filter(lIIIil1l => !lllliIll.map(li11i1iI => li11i1iI + "").includes(lIIIil1l)), I11iiiil = lllliIll.map(iiiIiii => iiiIiii + "").filter(lIlii1li => !i1lIIliI.map(II11II1l => II11II1l + "").includes(lIlii1li)); return ilIi11Il.concat(I11iiiil); } ["build"](il1Ill1) { if (il1Ill1.match(/&callback=(jsonpCBK(.*))&/)) { let I1111li = il1Ill1.match(/&callback=(jsonpCBK(.*))&/); il1Ill1 = il1Ill1.replace(I1111li[1], this.randomCallback(I1111li[2].length || 0)); } let lII1II11 = decodeURIComponent(this.getQueryString(il1Ill1, "_stk") || ""); if (lII1II11) { let Il11liIl, i1ii11I1, ilIliilI = "", iliilIil = this.now("yyyyMMddHHmmssSSS").toString(), I1i1llii = this.algo.tk, lii1iiil = this.algo.fp, IIi1iI1 = this.algo.em; if (I1i1llii && lii1iiil && IIi1iI1) i1ii11I1 = IIi1iI1(I1i1llii, lii1iiil, iliilIil, this.appId, CryptoJS).toString(CryptoJS.enc.Hex);else { const I1l11li1 = "5gkjB6SpmC9s"; I1i1llii = "tk01wcdf61cb3a8nYUtHcmhSUFFCfddDPRvKvYaMjHkxo6Aj7dhzO+GXGFa9nPXfcgT+mULoF1b1YIS1ghvSlbwhE0Xc"; lii1iiil = "9686767825751161"; i1ii11I1 = CryptoJS.SHA512("" + I1i1llii + lii1iiil + iliilIil + this.appId + I1l11li1, I1i1llii).toString(CryptoJS.enc.Hex); } lII1II11.split(",").map((ill1il1i, li1I1lI) => { ilIliilI += ill1il1i + ":" + this.getQueryString(il1Ill1, ill1il1i) + (li1I1lI === lII1II11.split(",").length - 1 ? "" : "&"); }); Il11liIl = encodeURIComponent(["".concat(iliilIil), "".concat(lii1iiil), "".concat(this.appId), "".concat(I1i1llii), "".concat(CryptoJS.HmacSHA256(ilIliilI, i1ii11I1.toString()).toString(CryptoJS.enc.Hex))].join(";")); il1Ill1.match(/[?|&]h5st=(.*?)&/) && (il1Ill1 = il1Ill1.replace(il1Ill1.match(/[?|&]h5st=(.*?)&/)[1], "H5ST").replace(/H5ST/, Il11liIl)); let i1IiiI1 = [/[?|&]_time=(\d+)/, /[?|&]__t=(\d+)/, /[?|&]_ts=(\d+)/, /[?|&]_=(\d+)/, /[?|&]t=(\d+)/, /[?|&]_cfd_t=(\d+)/]; for (let liIIll1i of i1IiiI1) { il1Ill1.match(liIIll1i) && (il1Ill1 = il1Ill1.replace(il1Ill1.match(liIIll1i)[1], Date.now())); } let Iiillill = this._tk(); if (il1Ill1.match(/strPgUUNum=(.*?)&/)) { il1Ill1 = il1Ill1.replace(il1Ill1.match(/strPgUUNum=(.*?)&/)[1], Iiillill.tk); il1Ill1.match(/strPhoneID=(.*?)&/) && (il1Ill1 = il1Ill1.replace(il1Ill1.match(/strPhoneID=(.*?)&/)[1], Iiillill.id)); if (il1Ill1.match(/strPgtimestamp=(.*?)&/)) { il1Ill1 = il1Ill1.replace(il1Ill1.match(/strPgtimestamp=(.*?)&/)[1], Iiillill.ts); } } if (il1Ill1.match(/jxmc_jstoken=(.*?)&/)) { il1Ill1 = il1Ill1.replace(il1Ill1.match(/jxmc_jstoken=(.*?)&/)[1], Iiillill.tk); if (il1Ill1.match(/phoneid=(.*?)&/)) { il1Ill1 = il1Ill1.replace(il1Ill1.match(/phoneid=(.*?)&/)[1], Iiillill.id); } il1Ill1.match(/timestamp=(.*?)&/) && (il1Ill1 = il1Ill1.replace(il1Ill1.match(/timestamp=(.*?)&/)[1], Iiillill.ts)); } } return il1Ill1; } ["getQueryString"](I1l1Il1, ilIl11I1) { let lili1Ill = new RegExp("(^|[&?])" + ilIl11I1 + "=([^&]*)(&|$)"), IllliiI1 = I1l1Il1.match(lili1Ill); if (IllliiI1 != null) { return unescape(IllliiI1[2]); } return ""; } ["unique"](I1i1i1ll) { return Array.from(new Set(I1i1i1ll)); } async ["logic"]() { console.log("default logic"); } async ["before"]() { return -1; } async ["after"]() { return -1; } ["tryLock"](III11il, il11Ii) { try { return fs.accessSync("/jd/log/lock/" + il11Ii + "_" + III11il), false; } catch (i1llI1I1) { return true; } } ["setLock"](IlII1ilI, Ilili1lI) { try { try { fs.accessSync("/jd/log/lock"); } catch (I1Ili1iI) { fs.mkdirSync("/jd/log/lock"); } return fs.mkdirSync("/jd/log/lock/" + Ilili1lI + "_" + IlII1ilI), false; } catch (I1Iiii1I) { return true; } } ["match"](III1IiII, llI11il1) { III1IiII = III1IiII instanceof Array ? III1IiII : [III1IiII]; for (let Ilii1li of III1IiII) { const lll1lII = Ilii1li.exec(llI11il1); if (lll1lII) { const IlIillli = lll1lII.length; if (IlIillli === 1) return lll1lII;else { if (IlIillli === 2) { return lll1lII[1]; } else { const illlI11i = []; for (let illl11il = 1; illl11il < IlIillli; illl11il++) { illlI11i.push(lll1lII[illl11il]); } return illlI11i; } } } } return ""; } ["matchAll"](lIiIIll, iIliI) { lIiIIll = lIiIIll instanceof Array ? lIiIIll : [lIiIIll]; let iii11iI, li11IiIi = []; for (let I1lI11 of lIiIIll) { while ((iii11iI = I1lI11.exec(iIliI)) != null) { let Iii1iI1I = iii11iI.length; if (Iii1iI1I === 1) li11IiIi.push(iii11iI);else { if (Iii1iI1I === 2) li11IiIi.push(iii11iI[1]);else { let iIIi1111 = []; for (let lIlll11I = 1; lIlll11I < Iii1iI1I; lIlll11I++) { iIIi1111.push(iii11iI[lIlll11I]); } li11IiIi.push(iIIi1111); } } } } return li11IiIi; } async ["countdown"](llIIIII = 1, III1l1li = 200) { let II1iiil1 = new Date(); if (llIIIII === 1 && II1iiil1.getMinutes() < 50 || llIIIII === 2 && II1iiil1.getMinutes() < 25 || llIIIII === 3 && II1iiil1.getMinutes() < 10 || llIIIII === 4 && II1iiil1.getMinutes() < 5) { return; } let lIIliIiI = III1l1li; if (llIIIII !== 9) { switch (llIIIII) { case 1: II1iiil1.setHours(II1iiil1.getHours() + 1), II1iiil1.setMinutes(0); break; case 2: II1iiil1.setMinutes(30); break; case 3: II1iiil1.setMinutes(15); break; case 4: II1iiil1.setMinutes(10); break; default: console.log("不支持"); } II1iiil1.setSeconds(0); II1iiil1.setMilliseconds(0); lIIliIiI = II1iiil1.getTime() - Date.now() - III1l1li; } lIIliIiI > 0 && (console.log("需要等待时间" + lIIliIiI / 1000 + " 秒"), await this.wait(lIIliIiI)); } ["readFileSync"](ll1ilII) { try { return fs.readFileSync(ll1ilII).toString(); } catch (il1lI1Ii) { return console.log(ll1ilII, "文件不存在进行创建"), this.writeFileSync(ll1ilII, ""), ""; } } ["writeFileSync"](li1ili1, illIliIi) { fs.writeFileSync(li1ili1, illIliIi); } ["random"](II1ll11, l1i1lil1) { return Math.min(Math.floor(II1ll11 + Math.random() * (l1i1lil1 - II1ll11)), l1i1lil1); } async ["taskToDo"](Il1iIl1l) { Il1iIl1l.data.taskList.filter(lIlIli1 => ![8, 15, 13].includes(lIlIli1.taskType * 1)).length === 0 && this.log("没有任务"); let IillIl1l = Il1iIl1l.data.taskList; for (let I1liIiI1 of IillIl1l.filter(Iii1Ii11 => Iii1Ii11.status === 0 && (Iii1Ii11.completeCount < Iii1Ii11.finishNum || Iii1Ii11.completeCount < Iii1Ii11.maxNum)) || []) { try { if ([1, 2, 4, 10, 12, 14].includes(I1liIiI1.taskType)) { await this.api("/api/basic/task/toDo", { "skuId": "", "taskId": I1liIiI1.taskId }); } else { if ([3, 5, 6, 7, 9].includes(I1liIiI1.taskType)) { let Il1l1lii = I1liIiI1.skuInfoVO.filter(iiliI11l => iiliI11l.status === 0); for (let lill1Il1 = 0; lill1Il1 < Il1l1lii.length && (lill1Il1 < I1liIiI1.finishNum || lill1Il1 < I1liIiI1.maxNum); lill1Il1++) { await this.api("/api/basic/task/toDo", { "skuId": Il1l1lii[lill1Il1].skuId, "taskId": I1liIiI1.taskId }); } } } } catch (iIIIlli1) { this.log(iIIIlli1.message, JSON.stringify(I1liIiI1)); } } } async ["notify"](I1li1II, IIlllI11) { return notify.sendNotify(I1li1II, IIlllI11); } async ["get"](IIll1lli, i1Ill) { return IIll1lli = this.appId ? this.build(IIll1lli) : IIll1lli, new Promise((iiIli11I, lii1lli) => { $.get(IIll1lli, { "headers": i1Ill }).then(i1111iI1 => iiIli11I(this.handler(i1111iI1) || i1111iI1)).catch(l1IliiiI => lii1lli(l1IliiiI)); }); } async ["post"](iilIiI1, iiiIIII1, lIlI1lii) { return iilIiI1 = this.appId ? this.build(iilIiI1) : iilIiI1, new Promise((Il1IiiIi, ililiIli) => { $.post(iilIiI1, iiiIIII1, { "headers": lIlI1lii }).then(IiIlliil => Il1IiiIi(this.handler(IiIlliil) || IiIlliil)).catch(II1Iili1 => ililiIli(II1Iili1)); }); } async ["request"](Il1IiI, ilii11l1, illI1I1) { return new Promise((IIi1ii1l, liI1iii) => { let IIilill1 = setTimeout(() => { console.log("超时异常进行重试"); liI1iii(new Error("Request timeout")); }, 10000), iIlI1lIi = ilii11l1?.["headers"] ? ilii11l1 : { "headers": ilii11l1 }; (illI1I1 ? $.post(Il1IiI, illI1I1, iIlI1lIi) : $.get(Il1IiI, iIlI1lIi)).then(lIIIllli => { this.response_headers = lIIIllli.headers clearTimeout(IIilill1); this.__lt(lIIIllli); IIi1ii1l(lIIIllli); }).catch(ilill11l => { clearTimeout(IIilill1); liI1iii(ilill11l); }); }); } ["__lt"](i1il11Ii) { let ll1ll1iI = i1il11Ii?.["headers"]["set-cookie"] || i1il11Ii?.["headers"]["Set-Cookie"] || [], I1ill11l = typeof ll1ll1iI != "object" ? ll1ll1iI.split(",") : ll1ll1iI; for (let ll1I1lll of I1ill11l) { let i1iIi1Ii = ll1I1lll.split(";")[0].trim().split("="); this.tickets.set(i1iIi1Ii[0], i1iIi1Ii[1]); } this.ticket = ""; for (let [lI1llIlI, i1l1lIii] of this.tickets.entries()) { this.ticket += lI1llIlI + "=" + i1l1lIii + ";"; } } ["handler"](Il1lIl1I) { let iiliilI1 = Il1lIl1I?.["data"] || Il1lIl1I?.["body"] || Il1lIl1I; if (!iiliilI1) return; if (typeof iiliilI1 === "string") { if (iiliilI1.startsWith("<") || iiliilI1.startsWith("(function")) return iiliilI1;else { iiliilI1 = iiliilI1.replace(/[\n\r| ]/g, ""); if (iiliilI1.includes("try{jsonpCB")) iiliilI1 = iiliilI1.replace(/try{jsonpCB.*\({/, "{").replace(/}\)([;])?}catch\(e\){}/, "}");else { if (iiliilI1.includes("jsonpCB")) { let II1iil1I = iiliilI1.replace(/[\n\r]/g, "").replace(/jsonpCB.*\({/, "{"); iiliilI1 = II1iil1I.substring(0, II1iil1I.length - 1); } else iiliilI1.match(/try{.*\({/) ? iiliilI1 = iiliilI1.replace(/try{.*\({/, "{").replace(/}\)([;])?}catch\(e\){}/, "}") : iiliilI1 = /.*?({.*}).*/g.exec(iiliilI1)?.[1] || "{}"; } return JSON.parse(iiliilI1); } } return iiliilI1; } ["randomNum"](IIIIiII) { IIIIiII = IIIIiII || 32; let iiliI11I = "0123456789", iiiiIiIi = iiliI11I.length, IliIiiii = ""; for (let lliIl1i1 = 0; lliIl1i1 < IIIIiII; lliIl1i1++) { IliIiiii += iiliI11I.charAt(Math.floor(Math.random() * iiiiIiIi)); } return IliIiiii; } ["randomString"](illiI1Il) { return this.uuid(); } ["randomPattern"](Ii1IIi1i, l1li1l1i = "abcdef0123456789") { let IlIi1i = ""; for (let i11ilIi1 of Ii1IIi1i) { if (i11ilIi1 == "x") { IlIi1i += l1li1l1i.charAt(Math.floor(Math.random() * l1li1l1i.length)); } else i11ilIi1 == "X" ? IlIi1i += l1li1l1i.charAt(Math.floor(Math.random() * l1li1l1i.length)).toUpperCase() : IlIi1i += i11ilIi1; } return IlIi1i; } ["randomCallback"](lilii11I = 1) { let iiI1iI1I = "abcdefghigklmnopqrstuvwsyz", i111iiil = iiI1iI1I.length, ll11Ii1l = ""; for (let i1iIlll1 = 0; i1iIlll1 < lilii11I; i1iIlll1++) { ll11Ii1l += iiI1iI1I.charAt(Math.floor(Math.random() * i111iiil)); } return "jsonpCBK" + ll11Ii1l.toUpperCase(); } ["randomArray"](i11iI11i, i11iIl1l) { i11iIl1l = i11iIl1l || i11iI11i.length; let iIlIllI = i11iI11i.slice(0), llII1I1i = i11iI11i.length, lilIli = llII1I1i - i11iIl1l, il1illI, I1lIi1l1; while (llII1I1i-- > lilIli) { I1lIi1l1 = Math.floor((llII1I1i + 1) * Math.random()); il1illI = iIlIllI[I1lIi1l1]; iIlIllI[I1lIi1l1] = iIlIllI[llII1I1i]; iIlIllI[llII1I1i] = il1illI; } return iIlIllI.slice(lilIli); } ["now"](l1l1ilIl) { return format(Date.now(), l1l1ilIl || "yyyy-MM-dd HH:mm:ss.SSS"); } ["formatDate"](Il1iIIIi, i1lI1III) { return format(typeof Il1iIIIi === "object" ? Il1iIIIi : new Date(typeof Il1iIIIi === "string" ? Il1iIIIi * 1 : Il1iIIIi), i1lI1III || "yyyy-MM-dd"); } ["formatDateTime"](iI1lIiIl, i1iIliiI) { return format(typeof iI1lIiIl === "object" ? iI1lIiIl : new Date(typeof iI1lIiIl === "string" ? iI1lIiIl * 1 : iI1lIiIl), i1iIliiI || "yyyy-MM-dd HH:mm:ss"); } ["parseDate"](llIl1lii) { return new Date(Date.parse(llIl1lii.replace(/-/g, "/"))); } ["timestamp"]() { return new Date().getTime(); } ["uuid"](i11Ill1i = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") { return i11Ill1i.replace(/[xy]/g, function (Iilll11l) { const ilIli1i = 16 * Math.random() | 0, lll1Il1l = "x" === Iilll11l ? ilIli1i : 3 & ilIli1i | 8; return lll1Il1l.toString(36); }); } async ["unfollow"](iii1llll = this.shopId) { let I1il1ill = { "authority": "api.m.jd.com", "accept": "*/*", "origin": "https://shop.m.jd.com", "referer": "https://shop.m.jd.com/", "user-agent": this.UA, "Cookie": this.cookie }, IlIl11Ii = { "shopId": iii1llll, "follow": false }, iIll111l = "https://api.m.jd.com/client.action?functionId=whx_followShop&appid=shop_view&body=" + encodeURIComponent(JSON.stringify(IlIl11Ii)), Ii1l111 = await this.get(iIll111l, I1il1ill); return Ii1l111; } async ["getShopInfo"](li1iiil1 = this.venderId, liII111i = this.shopId) { try { if (openCardMode.includes("wh5")) { let lliiliI1 = { "authority": "api.m.jd.com", "accept": "*/*", "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6", "origin": "https://shop.m.jd.com", "referer": "https://shop.m.jd.com/", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.42" }, IliIlIl1 = "https://api.m.jd.com/client.action?functionId=whx_getMShopOutlineInfo&appid=shop_view&clientVersion=11.0.0&client=wh5&body=" + encodeURIComponent(JSON.stringify({ "shopId": liII111i })), { status: lll1li1i, data: lI1IlIlI } = await this.request(IliIlIl1, lliiliI1); return lI1IlIlI.data?.["shopInfo"]; } else { let llII1i1 = await this.sign("getShopHomeBaseInfo", { "source": "app-shop", "latWs": "0", "lngWs": "0", "displayWidth": "1098.000000", "sourceRpc": "shop_app_home_home", "lng": "0", "lat": "0", "venderId": li1iiil1, "navigationAbTest": "1" }), il1Iilii = { "J-E-H": "", "Connection": "keep-alive", "Accept-Encoding": "gzip, deflate, br", "Content-Type": "application/x-www-form-urlencoded", "Host": "api.m.jd.com", "Referer": "", "J-E-C": "", "Accept-Language": "zh-Hans-CN;q=1, en-CN;q=0.9", "Accept": "*/*", "User-Agent": "JD4iPhone/167841 (iPhone; iOS; Scale/3.00)" }, Il11l1l = "https://api.m.jd.com/client.action?functionId=" + llII1i1.fn, { status: IilII1il, data: lii1Il1 } = await this.request(Il11l1l, il1Iilii, llII1i1.sign); return lii1Il1.result?.["shopInfo"]; } } catch (lIllliII) { return console.log(lIllliII), {}; } } async ["getShopBaseInfo"](iIlII11 = this.venderId, iiIllii = this.shopId) { let liilIIil = ""; if (iIlII11) liilIIil = "https://chat1.jd.com/api/checkChat?callback=jQuery7749929&venderId=" + iIlII11 + "&_=" + this.timestamp();else { if (iiIllii) { liilIIil = "https://chat1.jd.com/api/checkChat?callback=jQuery7749929&shopId=" + iiIllii + "&_=" + this.timestamp(); } } let iIil1ll1 = await this.request(liilIIil, { "authority": "chat1.jd.com", "Accept": "*/*", "Connection": "keep-alive", "Cookie": this.cookie, "User-Agent": this.ua(), "Accept-Language": "zh-cn", "Accept-Encoding": "gzip, deflate", "referer": "https://mall.jd.com/shopBrandMember-" + (iIlII11 || iiIllii) + ".html" }); const iIIill1 = JSON.parse(iIil1ll1?.["data"]?.["replace"](/^jQuery\d+\(/, "")?.["replace"](/\);$/, "") || "{}"); return { "shopId": iIIill1.shopId, "venderId": iIIill1.venderId, "shopName": iIIill1.seller }; } async ["getShopName"](llI1iiII = this.venderId, iI1lI11i = this.shopId) { this.shopName = (await this.getShopBaseInfo())?.["shopName"]; if (!this.shopName) { let iIlllili = await this.getShopInfo(llI1iiII, iI1lI11i); this.shopName = iIlllili?.["shopName"]; } return this.shopName || "未知"; } async ["sendTGMsg"](I1iiili1) { await this.sendMessage(process.env.TG_USER_ID, I1iiili1); } async ["sendMessage"](l1lliI1I = process.env.TG_USER_ID, ll1I1Iil, illill1l = 1, llii1Ili = process.env.TG_BOT_TOKEN) { if (mode) return; let iIIiIlIi = "https://api.telegram.org/bot" + llii1Ili + "/sendMessage", ill11ii1 = { "chat_id": l1lliI1I, "text": ll1I1Iil, "disable_web_page_preview": true }, i1iI1ii = { "Content-Type": "application/json", "Cookie": "10089" }; process.env.TG_PROXY_HOST && process.env.TG_PROXY_PORT && ($.defaults.proxy = false, $.defaults.httpsAgent = tunnel.httpsOverHttp({ "proxy": { "host": process.env.TG_PROXY_HOST, "port": process.env.TG_PROXY_PORT * 1 } })); let { data: Ii11l1il } = await this.request(iIIiIlIi, i1iI1ii, ill11ii1); if (Ii11l1il?.["description"]?.["includes"]("long")) { await this.sendMessage(l1lliI1I, ll1I1Iil.substring(0, 300), ++illill1l); return; } !Ii11l1il?.["ok"] && illill1l < 5 && ($.log("重试中", ll1I1Iil), await $.wait(1000, 2000), await this.sendMessage(l1lliI1I, ll1I1Iil, ++illill1l)); } ["ua"](IlI1l1II = "jd") { return JDAPP_USER_AGENTS[this.random(0, JDAPP_USER_AGENTS.length)]; } async ["wxStop"](IIIiiii) { let II1II11i = false; for (let lliIIliI of stopKeywords) { if (lliIIliI && IIIiiii?.["includes"](lliIIliI)) { II1II11i = true; this.expire = true; break; } } return II1II11i; } async ["wxAddressStop"](liIiiIl1) { return liIiiIl1 && liIiiIl1.match(new RegExp("(" + addressStopKeywords.join("|") + ")")) != null; } async ["wxAddressStopRule"](l1l1ii1 = this.rule) { try { if (!l1l1ii1 && this.urlPrefix) { let iIlI1ili = await this.api("/api/active/getRule", {}); if (iIlI1ili?.["resp_code"] === 0) { l1l1ii1 = iIlI1ili?.["data"]; } } } catch (II1Iill1) { console.log(II1Iill1); } return l1l1ii1 && l1l1ii1.match(new RegExp("(" + addressStopKeywordsRule.join("|") + ")")) != null; } ["_tk"]() { let llIlI1 = function (liIIIi11) { let IllIi1l1 = "abcdefghijklmnopqrstuvwxyz1234567890", IlIii11i = ""; for (let illIl1li = 0; illIl1li < liIIIi11; illIl1li++) { IlIii11i += IllIi1l1[Math.floor(IllIi1l1.length * Math.random())]; } return IlIii11i; }(40), II1IIiiI = Date.now().toString(), IiIl1iil = this.md5("" + decodeURIComponent(this.username) + II1IIiiI + llIlI1 + "tPOamqCuk9NLgVPAljUyIHcPRmKlVxDy"); return { "ts": II1IIiiI, "id": llIlI1, "tk": IiIl1iil }; } async ["_algo"](illl1lli = 0) { if (this.appId === "wx") { this.tickets = new Map(); let IIi1I1i = { "Accept-Encoding": "gzip, deflate, br", "Connection": "keep-alive", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1 Mobile/15E148 Safari/604.1", "Accept-Language": "zh-cn", "Cookie": this.cookie }; try { if (this.domain.includes("lzkj") || this.domain.includes("lzdz") || this.domain.includes("cjhy")) await this.request("https://" + this.domain + "/wxTeam/activity?activityId=" + this.activityId, IIi1I1i);else { await this.request(this.activityUrl, IIi1I1i); } } catch (III1iil) { if (illl1lli < 3) { if (this.isProxy(III1iil.message)) await this.routerProxy(illl1lli), this.log("493去重试,第" + illl1lli + "次重试...");else III1iil.message?.["includes"]("493") && (await this.router()); return await this._algo(++illl1lli); } } return ""; } else { let ll11iliI = function () { let ilIilliI = "0123456789", Il111111 = 13, I1I1ll1i = ""; for (; Il111111--;) { I1I1ll1i += ilIilliI[Math.random() * ilIilliI.length | 0]; } return (I1I1ll1i + Date.now()).slice(0, 16); }(), iiII1I1i = await this.post("https://cactus.jd.com/request_algo?g_ty=ajax", JSON.stringify({ "version": "1.0", "fp": ll11iliI, "appId": this.appId, "timestamp": this.timestamp(), "platform": "web", "expandParams": "" }), { "Authority": "cactus.jd.com", "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1", "Content-Type": "application/json", "Origin": "https://st.jingxi.com", "Referer": "https://st.jingxi.com/" }); return { "fp": ll11iliI.toString(), "tk": iiII1I1i?.["data"]?.["result"]?.["tk"] || iiII1I1i?.["result"]?.["tk"], "em": new Function("return " + (iiII1I1i?.["data"]?.["result"]?.["algo"] || iiII1I1i?.["result"]?.["algo"]))() }; } } async ["routerProxy"](I1II1i1 = 0) { if (wxProxyEnable === 1) return; if ((this.name === "M店铺刮奖") || (this.name === "M关注有礼") || (this.name === "M银行卡支付有礼") || (this.name === "M入会有礼")) return; if (!proxies.find(i1IllI => !i1IllI.close)) { this.log("所有代理已关闭"); this.expire = true; this.proxy = null; return; } this.proxy = proxies.filter(lIi1ilIl => !lIi1ilIl.close)[0]; this.log("开始从M_WX_PROXY_URL" + (this.proxy.index - 1 || "") + "获取代理"); let l1il1lI1 = await this.getProxyByUrl(this.proxy); !l1il1lI1 && (await this.routerProxy()); } async ["getProxyByUrl"](Iili1IIi) { let ili1iI1I = Iili1IIi.url; var ili11il1 = false; try { $.defaults.proxy = false; $.defaults.httpsAgent = false; $.defaults.httpAgent = false; let ilii1liI = await $.get(ili1iI1I); if (ili1iI1I.includes("=json")) { let i1IliiiI = JSON.stringify(ilii1liI.data), il11Illi = ilii1liI.data.data; if (ilii1liI.data.data?.["list"]) { il11Illi = ilii1liI.data.data.list; } if (il11Illi) { if (il11Illi[0]?.["port"]) ili11il1 = true, this.log("获取到的IP:" + il11Illi[0].ip + ":" + il11Illi[0].port), await this.setProxy(il11Illi[0].ip + ":" + il11Illi[0].port);else { const Ii1l11lI = /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d+|[a-zA-Z0-9.-]+:\d+)/, II1l11iI = i1IliiiI.match(Ii1l11lI); if (II1l11iI) this.log("获取到的IP:" + II1l11iI[0]), ili11il1 = true, await this.setProxy(II1l11iI[0]);else { this.proxy.close = true; this.log(JSON.stringify(i1IliiiI)); } } } else { this.proxy.close = true; this.log(JSON.stringify(i1IliiiI)); } } else { let lIIiiI1l = ilii1liI.data.toString().replace("\r\n", "").replace("\n", ""), lIIlill1 = lIIiiI1l?.["includes"]("@") ? lIIiiI1l.split("@")[0] : ""; const liII11I = /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d+|[a-zA-Z0-9.-]+:\d+)/, I1Il11Il = lIIiiI1l.match(liII11I); I1Il11Il ? (this.log("获取到的IP:" + I1Il11Il[0]), ili11il1 = true, await this.setProxy(I1Il11Il[0], lIIlill1)) : (this.proxy.close = true, this.log(JSON.stringify(lIIiiI1l))); } } catch (iiiiIIii) { this.log("M_WX_PROXY_URL" + (Iili1IIi.index - 1 || "") + "代理获取异常,切换下一个"); this.proxy.close = true; } return ili11il1; } async ["setProxy"](iliIi11l, llliiiIl = "") { let il1i11i1 = iliIi11l.split(":"); $.defaults.proxy = false; let li1IiI11 = { "host": il1i11i1[0], "port": il1i11i1[1] }; llliiiIl && (li1IiI11.proxyAuth = llliiiIl); $.defaults.httpsAgent = tunnel.httpsOverHttp({ "proxy": li1IiI11 }); $.defaults.httpAgent = tunnel.httpsOverHttp({ "proxy": li1IiI11 }); } async ["router"]() { if (reRouterEnable === 1) return; !fs.existsSync("magic.lock") && fs.writeFileSync("magic.lock", Date.now().toString()); let Ii1illi1 = fs.readFileSync("magic.lock").toString() * 1; (Date.now() - Ii1illi1) / 1000 > resetRouterTimeInterval && (fs.writeFileSync("magic.lock", Date.now().toString()), await notify.sendNotify("M自动重新拨号", this.filename), await notify.sendNotify(reRouterMsg, ""), await this.wait(3 * 1000, 5 * 1000)); } async ["isvObfuscator"](lil1l1l1 = enableCacheToken, lIil111I = isvObfuscatorRetry, I1lllIl = this.cookie) { let i1l1iili = decodeURIComponent(I1lllIl.match(/pt_pin=(.+?);/) && I1lllIl.match(/pt_pin=(.+?);/)[1]); if (lil1l1l1 === 1) { if (!fs.existsSync("tokens")) { fs.mkdirSync("tokens"); } let iliIllIi = JSON.parse(this.readFileSync("tokens/" + i1l1iili + ".json") || "{}"); if (iliIllIi && iliIllIi.token && iliIllIi?.["expireTime"] > this.timestamp()) { return this.log("缓存获取 isvToken"), this.Token = iliIllIi.token, this.isvToken = iliIllIi.token, { "code": "0", "token": iliIllIi.token }; } } let I1l1l11 = "body=%7B%22url%22%3A%22https%3A%2F%2Fcjhy-isv.isvjcloud.com%22%2C%22id%22%3A%22%22%7D&uuid=b024526b380d35c9e3&client=apple&clientVersion=10.0.10&st=1646999134786&sv=111&sign=fd9417f9d8e872da6c55102bd69da99f"; try { let ililil = await this.sign("isvObfuscator", { "id": "", "url": "https://" + this.domain }); if (ililil.sign) { I1l1l11 = ililil.sign; } let li1i11il = "https://api.m.jd.com/client.action?functionId=isvObfuscator", IiI1iiii = { "Accept": "*/*", "Accept-Encoding": "gzip, deflate, br", "Accept-Language": "zh-cn", "Connection": "keep-alive", "Content-Type": "application/x-www-form-urlencoded", "Host": "api.m.jd.com", "Cookie": I1lllIl, "User-Agent": "JD4iPhone/168069 (iPhone; iOS 13.7; Scale/3.00)" }; this.log("实时获取 isvToken"); let { data: liillIll } = await this.request(li1i11il, IiI1iiii, I1l1l11); if (lil1l1l1 && liillIll?.["code"] === "0" && liillIll.token) { if (lil1l1l1) { let IIlII1Ii = { "expireTime": this.timestamp() + this.random(tokenCacheMin, tokenCacheMax) * 60 * 1000, "token": liillIll.token }; this.writeFileSync("tokens/" + i1l1iili + ".json", JSON.stringify(IIlII1Ii)); } } else { if (liillIll?.["code"] === "3" && liillIll?.["errcode"] === 264) { this.putMsg("CK已失效"); throw new Error("CK已失效"); } } return this.isvToken = liillIll.token, this.Token = liillIll.token, liillIll; } catch (IIiiI11I) { this.log(IIiiI11I.message); if (lIil111I > 0 && this.isProxy(IIiiI11I.message)) return this.log("第" + (isvObfuscatorRetry - lIil111I) + "去重试isvObfuscator接口,等待" + isvObfuscatorRetryWait + "秒"), await this.routerProxy(), await this.isvObfuscator(lil1l1l1, --lIil111I); } this.Token = ""; throw new Error("获取Token失败"); return { "code": "1", "token": "" }; } async ["getSimpleActInfoVo"](Il1illI1 = "customer/getSimpleActInfoVo", lI1il = 1) { if (this.venderId && this.shopId && this.activityType) { await this.initPinToken(); return; } let lI1li1I = await this.api(Il1illI1, lI1il === 1 ? "activityId=" + this.activityId : lI1il); if (!lI1li1I?.["result"] || !lI1li1I?.["data"]) { this.putMsg("手动确认"); this.expire = true; throw new Error("活动已结束"); } this.venderId = lI1li1I.data?.["venderId"] || this.venderId; this.shopId = lI1li1I.data?.["shopId"] || this.shopId; this.activityType = lI1li1I.data?.["activityType"] || this.activityType; await this.initPinToken(); } async ["initPinToken"]() { try { if (this.activityUrl.includes("activityType")) { if (!notInitPinTokenRegex.test(this.activityUrl)) { if (this.defenseUrls && this.defenseUrls.length === 0) { let lII1i1ll = await this.api("api/user-info/getDefenseUrls", ""); this.defenseUrls = lII1i1ll.data.map(ilIlIiIi => ilIlIiIi.interfaceName); } } await this.api("api/user-info/initPinToken?source=01&status=1&activityId=" + this.activityId + "&uuid=" + this.uuid() + "&jdToken=" + this.isvToken + "&shopId=" + this.shopId + "&clientTime=" + Date.now() + "&shareUserId=" + (this.shareUserId || ""), ""); } else { if (this.defenseUrls && this.defenseUrls.length === 0) { let i1llIlll = await this.api("customer/getDefenseUrls", ""); this.defenseUrls = i1llIlll.data; } await this.api("customer/initPinToken?source=01&status=1&activityId=" + this.activityId + "&uuid=" + this.uuid() + "&jdToken=" + this.isvToken + "&venderId=" + this.venderId + "&shopId=" + this.shopId + "&clientTime=" + Date.now() + "&shareUserId=" + (this.shareUserId || ""), ""); } } catch (IliiiliI) { console.log(IliiiliI); } } async ["getMyPing"](lIi1II1i = "customer/getMyPing", l1i1I = 0) { try { let IiI1lIli = await this.api(lIi1II1i, "userId=" + this.venderId + "&token=" + this.Token + "&pin=&fromType=APP&riskType=0"); this.Pin = ""; if (!IiI1lIli.result) { if (IiI1lIli.errorMessage.includes("请联系商家")) { this.expire = true; this.putMsg("商家token过期"); throw new Error(IiI1lIli.errorMessage); } if (l1i1I < 3 && !IiI1lIli.errorMessage?.["includes"]("活动太火爆")) this.putMsg("重试pin获取"), await this.getMyPing(lIi1II1i, ++l1i1I);else { this.putMsg(IiI1lIli.result.errorMessage); return; } } let Ii1iIlI = IiI1lIli.data.secretPin; this.nickname = IiI1lIli.data.nickname; this.Pin = this.domain.includes("cjhy") ? encodeURIComponent(encodeURIComponent(Ii1iIlI)) : encodeURIComponent(Ii1iIlI); } catch (lIll11I1) { this.putMsg(lIll11I1?.["message"]); this.nickname = this.username; let lIiI11li = this.tickets.get("AUTH_C_USER"); this.Pin = lIiI11li || encodeURIComponent(lIiI11li) || this.domain.includes("cjhy") ? encodeURIComponent(encodeURIComponent(lIiI11li)) : encodeURIComponent(lIiI11li); } } async ["accessLog"](Iili1iII = "" + (this.domain.includes("cjhy") ? "common/accessLog" : "common/accessLogWithAD")) { await this.api(Iili1iII, "venderId=" + this.venderId + "&code=" + this.activityType + "&pin=" + this.Pin + "&activityId=" + this.activityId + "&pageUrl=" + encodeURIComponent(this.activityUrl) + "&subType=app&adSource="); } async ["sign"](liiIill, lil1lii1 = {}) { let lIiIl1i1 = {}, lll11lii = { "fn": liiIill, "body": lil1lii1 }, IlI1Il11 = { "token": apiToken, "Cookie": 123 }; const I111Ilil = $.defaults.httpsAgent, illiIi1I = $.defaults.httpsAgent; $.defaults.httpsAgent = false; $.defaults.httpAgent = false; try { let { data: ilIIIi } = await this.request(signMode.includes("server") ? "http://172.17.0.1:17840/sign" : apiSignUrl, IlI1Il11, lll11lii); return { "fn": ilIIIi.fn, "sign": ilIIIi.body }; } catch (Iil1i1li) { console.log("sign解析接口失效: " + Iil1i1li.message); } finally { $.defaults.httpsAgent = I111Ilil; $.defaults.httpAgent = illiIi1I; } return lIiIl1i1; } async ["lzdz4Login"]() { await this.api("wxCommonInfo/token?t=" + Date.now(), ""); await this.getMyPing("customer/getMyCidPing"); this.tickets.set("AUTH_CUSER", this.Pin); await this.accessLog(); } async ["login"](iIlIiiil = this.Token) { if (/lzdz\d+-isv/.test(this.activityUrl)) { await this.lzdz4Login(); } else { if (hdbTypes.includes(this.domain)) { let i1lIiIlI = await this.api("/front/fans/login", { "source": "01", "token": iIlIiiil }); this.nonce = this.response_headers?._nonce; this.ts = this.response_headers?._ts; this.s = this.response_headers?._s; if (i1lIiIlI.code == "200") { this.log("登录成功 " + i1lIiIlI.result.grade); this.aesBuyerNick = i1lIiIlI.result.aesBuyerNick; i1lIiIlI.result.grade < 0 && /partitionTeam/.test(this.activityUrl) && (await this.openCard()); if (this.index > this.masterNum && i1lIiIlI.result.grade > 0 && /inviteJoin/.test(this.activityUrl)) throw new Error("已经是会员无法助力"); await this.api("/front/activity/reportPVUV", { "source": "01", "token": iIlIiiil }); await this.loadFrontAct(); } else { this.putMsg("登录失败"); throw new Error(i1lIiIlI.message); } } else { let llIIl1li = this.UA.split(";"), i1IlI1I1 = llIIl1li[1] == "iPhone" ? true : false, lII1il11 = this.UA.match(/iPhone OS (.+?) /) ? this.UA.match(/iPhone OS (.+?) /)[1].replace(/_/g, ".") : "-1", iIiIlIi1 = this.uuid(), lii11I1l = await this.api("/api/user-info/login", { "status": "0", "activityId": this.activityId, "tokenPin": iIlIiiil, "source": "01", "shareUserId": "", "uuid": iIiIlIi1, "client": i1IlI1I1 ? "iOS" : llIIl1li[1], "clientVersion": i1IlI1I1 ? llIIl1li[2] : "-1", "osVersion": lII1il11, "model": i1IlI1I1 ? "iPhone11,8" : "-1", "userAgent": this.UA }); if (lii11I1l.resp_code !== 0) { this.putMsg("登录失败"); throw new Error(lii11I1l.message); } this.isvToken = iIlIiiil; this.Token = lii11I1l.data.token; try { this.venderId = lii11I1l.data.venderId || lii11I1l.data.joinInfo.openCardUrl.split("venderId=")[1].split("&")[0]; } catch (iiIIIilI) { this.venderId = lii11I1l.data.venderId || lii11I1l.data.shopId; } this.shopId = lii11I1l.data.shopId; this.shopName = lii11I1l.data.shopName; this.joinCode = lii11I1l.data.joinInfo.joinCodeInfo.joinCode; this.joinDes = lii11I1l.data.joinInfo.joinCodeInfo.joinDes; this.log("登录成功 " + this.joinCode + " " + this.joinDes); let I1iiillI = await this.api("/api/active/basicInfo", { "activityId": this.activityId }); this.actStartTime = I1iiillI.data.startTime; this.actEndTime = I1iiillI.data.endTime; this.actName = I1iiillI.data.actName; if (!this.prizeList || this.prizeList.length <= 0) { await this.getPrizeList(); } if (this.prizeList && this.prizeList.length > 0 && this.prizeList.filter(IIili => ![2].includes(IIili.prizeType) && IIili.leftNum !== 0).length === 0) { this.putMsg("垃圾活动"); this.expire = true; } if (this.actStartTime > this.timestamp()) { this.putMsg("活动未开始"); this.expire = true; throw new Error("活动未开始"); } if (this.timestamp() > this.actEndTime) { this.putMsg("活动已结束"); this.expire = true; throw new Error("活动已结束"); } if (this.expire) throw new Error("垃圾活动"); this.isMember = ["1001", "1004"].includes(this.joinCode); try { await this.api("/api/task/followShop/follow", {}); } catch (I11llli1) {} await this.initPinToken(); if (!this.isMember && openCardTypes.includes(this.activityType)) { await this.openCard(); this.isMember = true; return; } !this.isMember && this.prizeList && this.prizeList.length > 0 && this.prizeList.filter(llii => [1, 3].includes(llii.prizeType) && llii.leftNum !== 0).length > 0 && ["10023", "10024", "10040", "10036", "10068", "10002"].includes(this.activityType) && (await this.openCard(), this.isMember = true); if (!this.isMember) { this.putMsg("" + this.joinDes); throw new Error(this.joinDes); } } } } async ["getPrizeList"]() { let li1ii1lI = await this.api("/api/prize/drawPrize", {}); if (li1ii1lI.resp_code !== 0) { this.log("获取奖品失败"); return; } this.prizeList = li1ii1lI.data?.["prizeInfo"] || []; } async ["loadFrontAct"]() { let IIiIIiI1 = await this.api("/front/activity/loadFrontAct", {}); if (IIiIIiI1.code == "200") { this.actStartTime = IIiIIiI1.result.activity.startTime; this.actEndTime = IIiIIiI1.result.activity.endTime; this.rule = IIiIIiI1.result.activity.remark; this.shopName = IIiIIiI1.result.activity.shopTitle; this.useGrade = IIiIIiI1.result.activity.useGrade; this.shopId = IIiIIiI1.result.user.shopId; this.venderId = IIiIIiI1.result.user.venderId; this.memberStatus = IIiIIiI1.result.user.memberStatus; this.actName = IIiIIiI1.result.activity.actName; if (this.actStartTime > this.timestamp()) { this.putMsg("活动未开始"); this.expire = true; throw new Error("活动未开始"); } if (this.actEndTime < this.timestamp()) { this.putMsg("活动已结束"); this.expire = true; throw new Error("活动已结束"); } if (IIiIIiI1.result.activity.isNeedFavourite && !IIiIIiI1.result.isFavouriteShop) { await this.reportActionLog({ "actionType": "favouriteShop" }); } } else { this.putMsg("loadFrontAct失败"); throw new Error(IIiIIiI1.message); } if (!this.prizeList || this.prizeList.length <= 0) { let lil11Il = await this.api("/front/activity/loadFrontAward", {}); if (lil11Il.succ) { this.prizeList = lil11Il.result || []; this.activity = IIiIIiI1.result; if (this.prizeList && this.prizeList.length > 0 && this.prizeList.filter(illiiili => !["JD_D_COUPON"].includes(illiiili.awardType)).length === 0) { this.expire = true; this.putMsg("垃圾活动"); throw new Error("垃圾活动"); } } } } async ["reportActionLog"](IIiii1I) { await this.wait(3000, 5000); let Ilil111I = await this.api("/front/activity/reportActionLog", IIiii1I); Ilil111I.code == "200" ? this.log(IIiii1I?.["actionType"] + "操作成功") : this.putMsg(Ilil111I.message); } ["v"](ilii1iII) { let iI1I111i = ["B6dB3QqGZP1lKNICTaiAeNJSHKNepO5GGgtL6FUceqSlpFZCdx2SZ5MPPbzrgy91HeR0dnJazcMrvMgPF7bhFrfsGaApJKk4JohEEhoJ4kKJpAaGsfrFhb7FPgMvrMczaJnd0ReH19ygrzbPPM5ZS2xdCZFplSqecUF6LtgGG5OpeNKHSJNeAiaTCINKl1PZGqQ3Bd6B", "EUhzJoyKP7VydtpyBwNUGU2tqzI0QB0LIpQ10Fk3hX2ZcPoGRpACqmzcTQbKd98i3U7raFz2rMl2kys0ODgtAh22E3i57wmh38RbbR83hmw75i3E22hAtgDO0syk2lMr2zFar7U3i89dKbQTczmqCApRGoPcZ2Xh3kF01QpIL0BQ0Izqt2UGUNwByptdyV7PKyoJzhUE", "xexcHoyVwOs5TYTQVvU0iXn56ryKVdWedLTpq3KEKmbUHfwzuZjIpZOPVXMEappFhjdqwtp1bBrWaRBCfPFwCq2W8SsyvwqZ6sIGGIs6ZqwvysS8W2qCwFPfCBRaWrBb1ptwqdjhFppaEMXVPOZpIjZuzwfHUbmKEK3qpTLdeWdVKyr65nXi0UvVQTYT5sOwVyoHcxex", "2Llnegc5i4flqd4HZPFK210yh61boBxRSdnNVMeudKimx92Qi4aPuHP12HmEImbWrXjLgBGqy1bSnKvLhqMqhknyuse4nFoeLTkJJkTLeoFn4esuynkhqMqhLvKnSb1yqGBgLjXrWbmIEmH21PHuPa4iQ29xmiKdueMVNndSRxBob16hy012KFPZH4dqlf4i5cgenlL2", "dZzoMZF6xtt3voTFDbPzEZ7GeM8t7uY05d4K4xfhtdxELh96dDRB4oRYA2smET5dy1dafGkXOz2V7tNOVi0vSqfuhI99IKprVK6QQ6KVrpKI99IhufqSv0iVONt7V2zOXkGfad1yd5TEms2AYRo4BRDd69hLExdthfx4K4d50Yu7t8MeG7ZEzPbDFTov3ttx6FZMozZd", "SNYr3bWMtQulWZO2FEwuhSFp3EXPR1TujPRJwUFlxBh9Pvf2MeTEpR7a3dU6e9rNUMyBh2osDdK4Vdm4gZ0XcRCoHZPi2jiXT2dCCd2TXij2iPZHoCRcX0Zg4mdV4KdDso2hByMUNr9e6Ud3a7RpETeM2fvP9hBxlFUwJRPjuT1RPXE3pFShuwEF2OZWluQtMWb3rYNS", "4viQ2FrYHcrH44gqvPLo6KtiFu56AW1eXbDBZrBepzdLKE33Ey4TwFERnkVLnbHAXbKqAi0HFP9Eu7yg8WNlI7q2dvXGGiPaMbrBBrbMaPiGGXvd2q7IlNW8gy7uE9PFH0iAqKbXAHbnLVknREFwT4yE33EKLdzpeBrZBDbXe1WA65uFitK6oLPvqg44HrcHYrF2Qiv4", "0VIoSHBNVAW8De7NquFyEUm0o9xNnQJGn2OR1yOK9djWALhyP3a1XoQEwTnXuzypRuwsaLPUlertksOY6LYmnbQmPgdDQRXXKdKooKdKXXRQDdgPmQbnmYL6YOsktrelUPLaswuRpyzuXnTwEQoX1a3PyhLAWjd9KOy1RO2nGJQnNx9o0mUEyFuqN7eD8WAVNBHSoIV0", "fdJPBiTra9E0qg2HJrobeEC2SkOfSzbw6nG5J5ACx42GQDBsCyGfxNlHHYhl7EmkdvYaKAXUVXSKcTT1KhyYaj9Q4YtyhnOA7cLrrLc7AOnhytY4Q9jaYyhK1TTcKSXVUXAKaYvdkmE7lhYHHlNxfGyCsBDQG24xCA5J5Gn6wbzSfOkS2CEeborJH2gq0E9arTiBPJdf", "kLOA93PyUOX3QdlLuZ9JgNq1peyIITAQSnKzuLBZ2NthOSseAJMGCecvSLVKAww61Y31hJ4l7kAOcjLmtqQNJlNyJb5yu9d9vqWUUWqv9d9uy5bJyNlJNQqtmLjcOAk7l4Jh13Y16wwAKVLSvceCGMJAesSOhtN2ZBLuzKnSQATIIyep1qNgJ9ZuLldQ3XOUyP39AOLk"]; var li1I1i1l = ilii1iII.nowTime + parseInt(this.tickets.get("te")); ilii1iII.nowTime = li1I1i1l; debugger; for (var lI11III = this.tickets.get("pToken") + li1I1i1l, i1l1lIIi = lI11III.substring(0, lI11III.length - 5), liIiiIil = "", iiiil111 = 0; iiiil111 < i1l1lIIi.length; iiiil111++) { var IIIilll = i1l1lIIi.charCodeAt(iiiil111); liIiiIil += iI1I111i[IIIilll % 10][iiiil111]; } for (var l1IIilli = liIiiIil.length, l1iIiIll = Math.floor(l1IIilli / 24), l1lIi11I = "", IiIi1111 = 0; IiIi1111 < 24; IiIi1111++) { var ii11Il1 = (IiIi1111 + 1) * l1iIiIll; 23 === IiIi1111 && (ii11Il1 = l1IIilli); for (var IlillIII = liIiiIil.substring(IiIi1111 * l1iIiIll, ii11Il1), I1l1II1l = [], IllIil11 = 0; IllIil11 < IlillIII.length; IllIil11++) { I1l1II1l.push(IlillIII.charCodeAt(IllIil11)); } var l1II1lil = I1l1II1l.reduce(function (l1lI1lIl, Iiil111i) { return l1lI1lIl + Iiil111i; }, 0), iiil1IIi = Math.floor(l1II1lil / I1l1II1l.length); l1lIi11I += String.fromCharCode(iiil1IIi); } var li111l1I = function (lIillIii) { lIillIii = lIillIii.split("").reverse().join(""); for (var i11liI1 = new Uint8Array(12), IIlIIIlI = new TextEncoder().encode(lIillIii), II11Iil1 = 0; II11Iil1 < IIlIIIlI.length; II11Iil1 += 2) { var i1iliIl1 = IIlIIIlI[II11Iil1] << 5 | 255 & IIlIIIlI[II11Iil1 + 1]; i1iliIl1 %= 63; i11liI1[II11Iil1 >> 1] = i1iliIl1; } for (var Ili1iiII = "", illIlli1 = 0; illIlli1 < i11liI1.length; illIlli1++) { Ili1iiII += (i11liI1[illIlli1] + 256).toString(2).slice(1); } for (var ili1il1 = "", Iiil1II = "", i1I1liI = 0; i1I1liI < 16; i1I1liI++) { if (0 !== i1I1liI) { for (var iiliIiII = 6 * i1I1liI, i1lIIl = Ili1iiII.substring(iiliIiII, iiliIiII + 6), i11l11ii = parseInt(i1lIIl, 2), ii111iIi = Iiil1II.split(""), lIl11Iil = 0; lIl11Iil < ii111iIi.length; lIl11Iil++) { "1" === ii111iIi[lIl11Iil] && (i11l11ii = 63 & (i11l11ii >> 6 - lIl11Iil | i11l11ii << lIl11Iil)); } Iiil1II = (63 & i11l11ii).toString(2).padStart(6, "0"); } else Iiil1II = Ili1iiII.substring(0, 6); ili1il1 += Iiil1II; } for (var i1l1i1Ii = 0; i1l1i1Ii < 12; i1l1i1Ii++) { var li1iIlli = 8 * i1l1i1Ii; i11liI1[i1l1i1Ii] = parseInt(ili1il1.substring(li1iIlli, li1iIlli + 8), 2); } return base64.encode(String.fromCharCode.apply(null, i11liI1)); }(liIiiIil = l1lIi11I), I1l111 = CryptoJS.enc.Utf8.parse(li111l1I), lll11ll = CryptoJS.enc.Utf8.parse(""); return CryptoJS.AES.encrypt(JSON.stringify(ilii1iII), I1l111, { "iv": lll11ll, "mode": CryptoJS.mode.ECB, "padding": CryptoJS.pad.Pkcs7 }).toString(); } async ["api"](i1IlillI, lIiIl1l, ill111li = this.Token, i1I1IIIl = this.ticket, l11111I1 = 0) { let IiillIli = lIiIl1l; try { i1IlillI = ("/" + i1IlillI).replace("//", "/"); this.urlPrefix = this.urlPrefix ? ("/" + this.urlPrefix).replace("//", "/") : ""; let IIIllIil = "https://" + this.domain + this.urlPrefix + i1IlillI, li1IIlIi = { "Host": this.domain, "Accept": "application/json, text/plain, text/javascript, */*", "Accept-Encoding": "gzip, deflate, br", "Accept-Language": "zh-cn", "Connection": "keep-alive", "Content-Type": lIiIl1l ? typeof lIiIl1l == "string" ? "application/x-www-form-urlencoded;charset=utf-8" : "application/json;charset=utf-8" : "application/x-www-form-urlencoded;charset=utf-8", "Origin": "https://" + this.domain, "Cookie": this.activityUrl.match(new RegExp(["prod/cc", "interact", "crm-proya", ...hdbTypes, ...jinggengcjTypes].join("|"))) ? "" : "IsvToken=" + ill111li + ";" + i1I1IIIl, "Referer": this.activityUrl + "&sid=" + this.randomString() + "&un_area=" + this.randomPattern("xx_xxxx_xxxx_xxxxx"), "User-Agent": this.UA }; (hdbTypes[1].includes(this.domain)) && (!i1IlillI.includes("login")) && (li1IIlIi["nonce"] = this.nonce || "") && (li1IIlIi["s"] = this.s || "") && (li1IIlIi["ts"] = this.ts || ""); ill111li?.["startsWith"]("ey") && (li1IIlIi.token = ill111li); hdbTypes.includes(this.domain) && (lIiIl1l = this.hdbBody(i1IlillI, lIiIl1l, li1IIlIi)); jinggengcjTypes.includes(this.domain) && (lIiIl1l = this.jinggengjcqBody(i1IlillI, lIiIl1l)); if (this.defenseUrls && this.defenseUrls.includes(i1IlillI)) { if (this.activityUrl.includes("interactsaas")) lIiIl1l.nowTime = this.timestamp(), lIiIl1l.actId = this.activityId, lIiIl1l.consumePoints = lIiIl1l.consumePoints || 0;else { const I1l1I1 = new URLSearchParams(lIiIl1l); lIiIl1l = {}; for (const [I1iI11Il, i1ii1IIl] of I1l1I1.entries()) { lIiIl1l[I1iI11Il] = i1ii1IIl; } lIiIl1l.nowTime = this.timestamp(); lIiIl1l.actId = this.activityId; debugger; } li1IIlIi.Cookie = "IsvToken=" + this.isvToken + ";" + this.ticket + "isBasicJson=true;"; let IIiIiIl1 = this.v(lIiIl1l); lIiIl1l = { "ecyText": IIiIiIl1 }; } if (/lzdz\d+-isv/.test(this.activityUrl)) for (let l1ilIlI of Object.keys(this.tickets)) { li1IIlIi[l1ilIlI.replace("_", "").toLowerCase()] = this.tickets.get(l1ilIlI); } let { data: l1Iiiii1 } = await this.request(IIIllIil, li1IIlIi, lIiIl1l); if (this.defenseUrls && this.defenseUrls.includes(i1IlillI) && (!l1Iiiii1 || l1Iiiii1.length === 0) && l11111I1 < 5) return await this.initPinToken(), await this.api(i1IlillI, IiillIli, ill111li, i1I1IIIl, ++l11111I1); if (!l1Iiiii1) { return l1Iiiii1; } let I1IIiil1 = JSON.stringify(l1Iiiii1); if (/还是去买买买吧/.test(I1IIiil1)) { this.putMsg("火爆账号[" + this.username + "]"); throw new Error("还是去买买买吧"); } if (I1IIiil1?.["includes"]("AUTH.FAILED.BLACK")) { return this.putMsg("AUTH BLACK"), l1Iiiii1; } if (I1IIiil1?.["includes"]("请稍后重试") && jinggengcjTypes.includes(this.domain)) return l1Iiiii1; if (new RegExp(reTryRegx).test(I1IIiil1) && l11111I1 < 5) { return this.log("重试" + l11111I1), await this.api(i1IlillI, IiillIli, ill111li, i1I1IIIl, ++l11111I1); } if ((I1IIiil1.includes("您点的太快了") || I1IIiil1.includes("操作过于频繁")) && l11111I1 < 5) return this.log("重试" + l11111I1), await this.wait(3000, 5000), await this.api(i1IlillI, IiillIli, ill111li, i1I1IIIl, ++l11111I1); if (I1IIiil1.includes("请求的数字签名不匹配")) return this.log("签名错误"), await this.login(this.isvToken), await this.api(i1IlillI, IiillIli, ill111li, i1I1IIIl, ++l11111I1); if (I1IIiil1.includes("会员等级不")) { if (ill111li?.["startsWith"]("ey") && l11111I1 < 3) { return this.log("等级不足重试" + l11111I1), await this.login(this.isvToken), await this.wait(3000, 5000), await this.api(i1IlillI, IiillIli, this.Token, i1I1IIIl, ++l11111I1); } else { this.putMsg("等级不足"); throw new Error("等级不足"); } } return (I1IIiil1.includes("商家token过期") || I1IIiil1.includes("商家订购过期")) && (this.putMsg("商家token过期"), this.expire = true), l1Iiiii1; } catch (iI111iil) { if (l11111I1 > 3) { throw new Error(iI111iil.message); } if (this.defenseUrls && this.defenseUrls.includes(i1IlillI) && [500].includes(iI111iil.response?.["status"])) return this.log("重试"), await this.initPinToken(), await this.api(i1IlillI, IiillIli, ill111li, i1I1IIIl, ++l11111I1); if (this.isProxy(iI111iil.message)) return await this.routerProxy(l11111I1), await this.api(i1IlillI, IiillIli, ill111li, i1I1IIIl, ++l11111I1); else { console.log(iI111iil.message); } } } ["jinggengjcqBody"](il1ii1II, II11I1Il) { let il1lll1 = il1ii1II.match(/dm\/front(.+)\?/)[1]; delete II11I1Il.method; let liiiI1II = { "actId": this.activityId, ...II11I1Il, "method": il1lll1, "userId": this.userId, "buyerNick": this.buyerNick || "" }, lliIIi1 = this.mpdzSign(liiiI1II), ii1lIl1i = "94854284"; const lilIIliI = { "jsonRpc": "2.0", "params": { "commonParameter": { "appkey": ii1lIl1i, "m": "POST", "oba": lliIIi1.sign, "timestamp": lliIIi1.timeStamp, "userId": this.userId }, "admJson": { "actId": this.activityId, ...II11I1Il, "method": il1lll1, "userId": this.userId, "buyerNick": this.buyerNick || "" } } }; return il1lll1?.["indexOf"]("missionInviteList") > -1 && delete lilIIliI.params.admJson.actId, JSON.stringify(lilIIliI); } ["mpdzSign"](I1i1lilI) { let IlIiii1i = "6cc5dbd8900e434b94c4bdb0c16348ed", lliil1I1 = "c1614da9ac68", llIi11i = new Date().valueOf(), i1l1I1 = encodeURIComponent(JSON.stringify(I1i1lilI)), lI1III1I = new RegExp("'", "g"), l111I1l = new RegExp("~", "g"); i1l1I1 = i1l1I1.replace(lI1III1I, "%27"); i1l1I1 = i1l1I1.replace(l111I1l, "%7E"); let i1I1il1l = "f" + lliil1I1 + "D" + i1l1I1 + "c" + llIi11i + IlIiii1i, iIill1i = CryptoJS.MD5(i1I1il1l.toLowerCase()).toString(); return { "sign": iIill1i, "timeStamp": llIi11i }; } ["hdbBody"](Iiil1l11, I1iIII1I, I11I11ll) { let i1I111lI = this.aesBuyerNick, iIlI11iI = Date.now(), IIi1lII1 = { "appJsonParams": { "id": this.activityId, "userId": this.venderId, "shopId": this.shopId || this.venderId, ...I1iIII1I, "buyerNick": i1I111lI, "method": Iiil1l11 }, "sysParams": { "sysmethod": JSON.stringify(Iiil1l11).replace(/[^\u4e00-\u9fa5\w]/g, ""), "timestamp": iIlI11iI, "actid": this.activityId } }; I1iIII1I && (I1iIII1I = IIi1lII1); !i1I111lI && (delete I1iIII1I.appJsonParams.buyerNick, delete I1iIII1I.sysParams.buyernick); this.tickets.get("_sk") ? I11I11ll._sk = this.tickets.get("_sk") : ""; this.tickets.get("zxhd_aes_buyer_nick") ? I11I11ll._dzf = this.tickets.get("zxhd_aes_buyer_nick") : ""; let iiIlilli = "actid" + this.activityId + "buyernick" + (i1I111lI || "undefined") + "sysmethod" + JSON.stringify(Iiil1l11).replace(/[^\u4e00-\u9fa5\w]/g, "") + "timestamp" + iIlI11iI, IiIill1i = I11I11ll._sk || "1111"; return I1iIII1I.sysParams.sign = CryptoJS.HmacSHA256(iiIlilli, IiIill1i).toString(CryptoJS.enc.Hex), I1iIII1I; } async ["selectAddress"](IlI1II1l) { let iilI11Ii, i1i1l1i = M_WX_ADDRESS_MODE.toUpperCase(); this.log("当前填地址模式: " + M_WX_ADDRESS_MODE.toUpperCase()); ["PIN"].includes(i1i1l1i) && (iilI11Ii = this.accounts[IlI1II1l]?.["address"] || this.accounts[encodeURIComponent(IlI1II1l)]?.["address"]); if (iilI11Ii) return iilI11Ii; ["CC", "CCWAV"].includes(i1i1l1i) && (iilI11Ii = this.accounts["默认地址" + this.addressIndex]?.["address"]); if (iilI11Ii) return iilI11Ii; let Iil11IiI = []; for (let Il1illI in this.accounts) { if (this.accounts[Il1illI]?.["address"]) { Iil11IiI.push(this.accounts[Il1illI].address); } } if (["RANGE"].includes(i1i1l1i)) { let l11il1ll = Math.min(parseInt(M_WX_ADDRESS_RANGE?.["split"]("-")?.[1] || Iil11IiI.length), Iil11IiI.length); this.addressIndex > l11il1ll && (this.addressIndex = 1); iilI11Ii = Iil11IiI[this.addressIndex - 1]; } if (iilI11Ii) return iilI11Ii; if (M_WX_ADDRESS_MODE_LOWER || ["RANDOM"].includes(i1i1l1i)) { debugger; return Iil11IiI[this.random(1, Iil11IiI.length) - 1]; } } async ["saveAddress"](i1iIi1ii = this.addressId, Illl1III = this.prizeName, IlIIlIil = this.Pin, llilIIIi = this.username, iIIIllI = "") { if (await this.wxAddressStop(Illl1III)) { this.putMsg("命中关键词,不填写地址!"); return; } if (await this.wxAddressStopRule()) { this.putMsg("命中规则,不填地址beta!"); return; } this.currAddrUsername && this.currAddrUsername !== llilIIIi && this.addressIndex++; this.currAddrUsername = llilIIIi; let IiiIIIlI = await this.selectAddress(llilIIIi); if (!IiiIIIlI) { this.putMsg("没有找到地址信息"); return; } (M_WX_ADDRESS_LOG || mode) && this.log("当前地址详情" + JSON.stringify(IiiIIIlI)); let Ii1l1iI1 = this.shopName; if (!Ii1l1iI1) try { Ii1l1iI1 = await this.getShopName(); } catch (IIIlIllI) { console.log("addr" + IIIlIllI); } try { if (jinggengcjTypes.includes(this.domain)) { let iiiIl = await this.api("/dm/front/jdBigAlliance/awards/updateAddress?open_id=&mix_nick=" + (this.buyerNick || "") + "&user_id=10299171", { "receiverName": IiiIIIlI.receiver, "receiverMobile": IiiIIIlI.phone, "receiverProvince": IiiIIIlI.province, "receiverCity": IiiIIIlI.city, "receiverDistrict": IiiIIIlI.county, "receiverAddress": IiiIIIlI.address, "logId": i1iIi1ii }); console.log(iiiIl); } else { if (this.domain.includes("jinggeng")) { let il1i1llI = IiiIIIlI.province.replace("市", "").replace("省", "") + " " + IiiIIIlI.city.replace("市", "") + " " + IiiIIIlI.county + IiiIIIlI.address, IliillIi = await this.api("/ql/front/postBuyerInfo", "receiverName=" + encodeURIComponent(IiiIIIlI.receiver) + "&mobile=" + IiiIIIlI.phone + "&address=" + encodeURIComponent(il1i1llI) + "&log_id=" + i1iIi1ii + "&user_id=" + this.userId); console.log(IliillIi); if (IliillIi.succ) this.putMsg("已填地址"), await fs.appendFileSync("gifts.csv", this.now() + "," + Illl1III + "," + llilIIIi + "," + IiiIIIlI.phone + "," + IiiIIIlI.address + "," + this.name + "," + Ii1l1iI1 + "," + this.activityUrl + "\n");else { this.putMsg(IliillIi.msg); } } else { if (this.activityUrl.includes("interact") || this.activityUrl.includes("prod/cc") || this.activityUrl.includes("crm-proya")) { let i1IllIi = await this.api("/api/my/prize/update", { "realName": IiiIIIlI.receiver, "mobile": IiiIIIlI.phone, "address": IiiIIIlI.address, "orderCode": this.addressId, "province": IiiIIIlI.province, "city": IiiIIIlI.city, "county": IiiIIIlI.county }); console.log(i1IllIi); i1IllIi?.["data"] !== "2" ? (this.putMsg("已填地址"), await fs.appendFileSync("gifts.csv", this.now() + "," + Illl1III + "," + llilIIIi + "," + IiiIIIlI.phone + "," + IiiIIIlI.address + "," + this.name + "," + Ii1l1iI1 + "," + this.activityUrl + "\n")) : this.putMsg("超一小时或其他报错,请手动进活动确认"); } else { let lilIi1II = await this.api("wxAddress/save", "venderId=" + this.venderId + "&pin=" + IlIIlIil + "&activityId=" + this.activityId + "&actType=" + this.activityType + "&prizeName=" + encodeURIComponent(Illl1III) + "&receiver=" + encodeURIComponent(IiiIIIlI.receiver) + "&phone=" + IiiIIIlI.phone + "&province=" + encodeURIComponent(IiiIIIlI.province) + "&city=" + encodeURIComponent(IiiIIIlI.city) + "&address=" + encodeURIComponent(IiiIIIlI.address) + "&generateId=" + i1iIi1ii + "&postalCode=" + IiiIIIlI.postalCode + "&areaCode=" + encodeURIComponent(IiiIIIlI.areaCode) + "&county=" + encodeURIComponent(IiiIIIlI.county)); if (!lilIi1II?.["result"]) { if (lilIi1II.errorMessage.includes("您必须在中奖一小时内填写中奖地址")) { return; } } lilIi1II?.["result"] ? (this.putMsg("已填地址"), await fs.appendFileSync("gifts.csv", this.now() + "," + Illl1III + "," + llilIIIi + "," + IiiIIIlI.phone + "," + IiiIIIlI.address + "," + this.name + "," + Ii1l1iI1 + "," + this.activityUrl + "\n")) : (lilIi1II = await this.api("wxAddress/save", "venderId=" + this.shopId + "&pin=" + IlIIlIil + "&activityId=" + this.activityId + "&actType=" + this.activityType + "&prizeName=" + encodeURIComponent(Illl1III) + "&receiver=" + encodeURIComponent(IiiIIIlI.receiver) + "&phone=" + IiiIIIlI.phone + "&province=" + encodeURIComponent(IiiIIIlI.province) + "&city=" + encodeURIComponent(IiiIIIlI.city) + "&address=" + encodeURIComponent(IiiIIIlI.address) + "&generateId=" + i1iIi1ii + "&postalCode=" + IiiIIIlI.postalCode + "&areaCode=" + encodeURIComponent(IiiIIIlI.areaCode) + "&county=" + encodeURIComponent(IiiIIIlI.county)), lilIi1II?.["result"] ? (this.putMsg("已填地址"), await fs.appendFileSync("gifts.csv", this.now() + "," + Illl1III + "," + llilIIIi + "," + IiiIIIlI.phone + "," + IiiIIIlI.address + "," + this.name + "," + Ii1l1iI1 + "," + this.activityUrl + "\n")) : this.putMsg("" + lilIi1II?.["errorMessage"])); } } } } catch (iiIIiI1I) { console.log(iiIIiI1I); } } async ["carData"]() { let i1lIIIl = "https://wq.jd.com/deal/mshopcart/uncheckcmdy?sceneval=2&g_login_type=1&g_ty=ajax", II1I1Ii1 = "commlist=&pingouchannel=0&all=1&scene=0&locationid=&type=0&templete=1®=1&version=20190418&traceid=&tabMenuType=4&sceneval=2", i1lIl1i = { "Accept": "application/json", "Origin": "https://p.m.jd.com", "Cookie": this.cookie, "Accept-Encoding": "gzip, deflate, br", "Content-Type": "application/x-www-form-urlencoded", "Host": "wq.jd.com", "User-Agent": "jdpingou;5.5.2;;session/9;brand/apple", "Referer": "https://p.m.jd.com/", "Accept-Language": "zh-CN,zh-Hans;q=0.9" }, { data: iiiliIli } = await this.request(i1lIIIl, i1lIl1i, II1I1Ii1); return iiiliIli.errId === "0" ? iiiliIli : ""; } async ["carRmv"](iiIiili = []) { let l1lI11iI = [], I1Iil1ll = await this.carData(); if (I1Iil1ll) { for (let iIIIIil of I1Iil1ll.cart.venderCart) { for (let l1I1il of iIIIIil.sortedItems) { for (let Il11II1I of l1I1il.polyItem.products) { if (iiIiili.length > 0 && iiIiili.includes(Il11II1I.mainSku.id.toString()) || iiIiili.length === 0) { const IiIIi11I = l1I1il.polyItem?.["promotion"]?.["pid"]; if (IiIIi11I) l1lI11iI.push(Il11II1I.mainSku.id + ",,1," + Il11II1I.mainSku.id + ",11," + l1I1il.polyItem.promotion.pid + ",0,skuUuid:" + Il11II1I.skuUuid + "@@useUuid:0");else { l1lI11iI.push(Il11II1I.mainSku.id + ",,1," + Il11II1I.mainSku.id + ",1,,0,skuUuid:" + Il11II1I.skuUuid + "@@useUuid:0"); } } } } } } if (l1lI11iI.length === 0) return; this.log("即将删除" + l1lI11iI.length + "件商品"); let iIlI1lI1 = "https://wq.jd.com/deal/mshopcart/rmvCmdy?sceneval=2&g_login_type=1&g_ty=ajax", llIIi1ll = "pingouchannel=0&commlist=" + encodeURIComponent(l1lI11iI.join("$")) + "&type=0&checked=0&locationid=&templete=1®=1&scene=0&version=20190418&traceid=&tabMenuType=4&sceneval=2", lllilIll = { "Accept": "application/json", "Origin": "https://p.m.jd.com", "Cookie": this.cookie, "Accept-Encoding": "gzip, deflate, br", "Content-Type": "application/x-www-form-urlencoded", "Host": "wq.jd.com", "User-Agent": "jdpingou;5.5.2;;session/9;brand/apple", "Referer": "https://p.m.jd.com/", "Accept-Language": "zh-CN,zh-Hans;q=0.9" }, { data: i1i1l11I } = await this.request(iIlI1lI1, lllilIll, llIIi1ll); return i1i1l11I.errId === "0" ? i1i1l11I : {}; } async ["openCardInfo"](iIi1l1l1 = this.venderId, IiiI1Il1 = this.cookie, llI1IlIl = 0) { try { if (openCardMode.includes("wh5")) { let lIlIiiI = { "venderId": iIi1l1l1, "payUpShop": true, "channel": 406 }, iil1Ili = "https://api.m.jd.com/getShopOpenCardInfo?appid=shopmember_m_jd_com&functionId=getShopOpenCardInfo&body=" + encodeURIComponent(JSON.stringify(lIlIiiI)) + "&uuid=88888&clientVersion=9.2.0&client=wh5&h5st=null"; return await this.get(iil1Ili, { "authority": "api.m.jd.com", "accept": "application/json, text/plain, */*", "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6", "content-type": "application/x-www-form-urlencoded", "origin": "https://shopmember.m.jd.com", "referer": "https://shopmember.m.jd.com/", "user-agent": this.UA, "Cookie": this.cookie }); } else { let Ii11iI1 = "https://api.m.jd.com/client.action?appid=shopmember_m_jd_com&" + (await this.h5st({ "venderId": iIi1l1l1, "channel": 401 }, "getShopOpenCardInfo")); return await this.get(Ii11iI1, { "Accept": "*/*", "Connection": "close", "Referer": "https://shopmember.m.jd.com/shopcard/?", "Accept-Encoding": "gzip, deflate, br", "Host": "api.m.jd.com", "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1", "Accept-Language": "zh-cn", "Cookie": IiiI1Il1 }); } } catch (II1il1i1) { this.log(II1il1i1.message); if (llI1IlIl < 3 && II1il1i1.message.includes("status code 403")) { return this.isProxy(II1il1i1.message) ? (await this.routerProxy(llI1IlIl), await this.wait(1000, 2000)) : await this.router(), await this.openCardInfo(iIi1l1l1, IiiI1Il1, ++llI1IlIl); } return {}; } } async ["isOpenCard"](IillIii1 = this.venderId, IIll1IlI = this.cookie, ilii1IlI = 0) { try { let II1ii1l1 = "https://api.m.jd.com/client.action?appid=jd_shop_member&functionId=getShopOpenCardInfo", liIli1I1 = { "venderId": IillIii1 }, I111I1Il = "body=" + encodeURIComponent(JSON.stringify(liIli1I1)) + "&uuid=2be5d035ec2c47e682c883a13e02cdb6&client=apple&clientVersion=9.4.0", { data: IiiIili1 } = await this.request(II1ii1l1, { "Host": "api.m.jd.com", "User-Agent": "User-Agent: JD4iPhone/167814 (iPhone; iOS 14.4; Scale/3.00)", "Content-Type": "application/x-www-form-urlencoded", "Origin": "https://api.m.jd.com", "Cookie": IIll1IlI }, I111I1Il); if (IiiIili1?.["result"]?.["userInfo"]?.["openCardStatus"] === 1) { this.log(IillIii1 + " 已经是会员"); } return await this.wait(1000), IiiIili1?.["result"]?.["userInfo"]?.["openCardStatus"] === 1; } catch (I1iIlI1I) { this.log(I1iIlI1I.message); if (ilii1IlI < 3 && I1iIlI1I.message.includes("status code 403")) { return this.isProxy(I1iIlI1I.message) ? (await this.routerProxy(ilii1IlI), await this.wait(1000, 2000)) : await this.router(), await this.isOpenCard(IillIii1, IIll1IlI, ++ilii1IlI); } return false; } } async ["openCard"](Ii11II1I = this.venderId, I1lIi1lI = 406, Ii11Iii = "", lII11IIi = 0) { try { if (lII11IIi > 3) { return; } let lIli1ll = { "venderId": Ii11II1I, "shopId": this.shopId || Ii11II1I, "bindByVerifyCodeFlag": 1, "registerExtend": {}, "writeChildFlag": 0, "channel": I1lIi1lI }; if (Ii11Iii) { Object.assign(lIli1ll, { "activityId": Ii11Iii }); } let i1lill = "https://api.m.jd.com/client.action", i111iil1 = { "authority": "api.m.jd.com", "accept": "application/json, text/plain, */*", "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6", "content-type": "application/x-www-form-urlencoded", "origin": "https://shopmember.m.jd.com", "referer": "https://shopmember.m.jd.com/", "user-agent": this.UA, "Cookie": this.cookie }; this.openCount++; lIli1ll = "appid=shopmember_m_jd_com&functionId=bindWithVender&body=" + encodeURIComponent(JSON.stringify(lIli1ll)) + "&client=H5&clientVersion=9.2.0&h5st=null"; let lI11I1lI = await this.post(i1lill, lIli1ll, i111iil1); this.log("开卡结果:" + lI11I1lI?.["message"]); if ([0, 9003].includes(lI11I1lI?.["busiCode"] * 1)) return lI11I1lI; if ([508, 510, 201, 9002].includes(lI11I1lI?.["busiCode"] * 1)) throw new Error(lI11I1lI?.["message"]); if ((lI11I1lI?.["message"]?.["includes"]("火爆") || lI11I1lI?.["message"]?.["includes"]("失败")) && lII11IIi < 3) return await this.openCard(Ii11II1I, I1lIi1lI, Ii11Iii, ++lII11IIi); return lI11I1lI; } catch (IiIlilll) { ++lII11IIi; if (lII11IIi < 3 && IiIlilll.message.includes("status code 403")) { if (this.isProxy(IiIlilll.message)) await this.routerProxy(lII11IIi), await this.wait(1000, 2000);else { await this.router(); } return await this.openCard(Ii11II1I, I1lIi1lI, Ii11Iii, lII11IIi); } else throw new Error(IiIlilll?.["message"]); } } async ["getShopMemberInfo"](il1llll1 = this.cookie, I1l1I1lI = this.shopId, Il1IllI = this.venderId) { try { let Ii1l11II = await this.sign("getFansFuseMemberDetail", { "shopId": I1l1I1lI, "venderId": Il1IllI, "channel": 102, "queryVersion": "10.5.2" }), ii1i11ll = { "J-E-H": "", "Connection": "keep-alive", "Accept-Encoding": "gzip, deflate, br", "Content-Type": "application/x-www-form-urlencoded", "Host": "api.m.jd.com", "Referer": "", "J-E-C": "", "Accept-Language": "zh-Hans-CN;q=1, en-CN;q=0.9", "Accept": "*/*", "User-Agent": "JD4iPhone/167841 (iPhone; iOS; Scale/3.00)", "Cookie": il1llll1 }, illIIlii = "https://api.m.jd.com/client.action?functionId=" + Ii1l11II.fn, { status: IIl1li1I, data: i1lllil } = await this.request(illIIlii, ii1i11ll, Ii1l11II.sign); return i1lllil.data[0].memberInfo; } catch (ilii11i1) { return console.log(ilii11i1), {}; } } async ["h5st"](I1IllIIi, iIl1111I = "bindWithVender", l11IlIii = 0) { return h5sts.random(); } ["getAwardText"](l1IiIlI1) { let lli11ii = ""; if (l1IiIlI1.awardType == "JD_GOODS") lli11ii = l1IiIlI1.awardName + " " + l1IiIlI1.awardDenomination * 1 + "元";else { if (l1IiIlI1.awardType == "JD_POINT") lli11ii = l1IiIlI1.awardDenomination * 1 + "积分";else { if (l1IiIlI1.awardType == "JD_COUPON" || l1IiIlI1.awardType == "JD_D_COUPON") { lli11ii = l1IiIlI1.awardDenomination * 1 + "元券"; } else { if (l1IiIlI1.awardType == "JD_BEAN" || l1IiIlI1.awardType == "JD_MARKET") { lli11ii = l1IiIlI1.awardDenomination * 1 + "豆"; } else { if (l1IiIlI1.awardType == "JD_E_CARD") { lli11ii = l1IiIlI1.assetsName; } else { if (l1IiIlI1.awardType == "JD_AIQIYI") lli11ii = l1IiIlI1.assetsName;else { if (l1IiIlI1.awardType == "JD_REDBAG" || l1IiIlI1.awardType == "JD_RED_BAG") lli11ii = l1IiIlI1.awardDenomination * 1 + "元红包";else { lli11ii = l1IiIlI1.awardName; debugger; } } } } } } } return lli11ii; } async ["getOpenCardPath"](Il11liI = this.activityUrl) { let liIIiII = await this.get(Il11liI, {}); const i1l1il11 = cheerio.load(cheerio.load(liIIiII).html()); let lIi1III = ""; i1l1il11("script[src]").each((i1I1il1i, I1iiIi1) => { const iiIIil11 = i1l1il11(I1iiIi1).attr("src"); let iliII1Il = iiIIil11.match(/\/\/.*\/js\/index\.\w+\.js/); if (iliII1Il && iliII1Il.length > 0) { lIi1III = iliII1Il[0]; } }); liIIiII = await this.get("https:" + lIi1III, {}); let Iill11I = liIIiII.match(/dingzhi\/([a-zA-Z]+)\/union\/saveTask/); return Iill11I[1]; } async ["apiBatch"](lililIi1, i1II1I = {}) { let Ii1i11l = i1II1I?.["batchSize"] || 2, liIiI1lI = i1II1I?.["execCount"] || 0, iIIi1I1 = i1II1I?.["filterFunc"] || null, llI1III = i1II1I?.["processFunc"] || null; const liil1lI = []; for (let IiI1liii = 0; IiI1liii < liIiI1lI; IiI1liii++) { for (let IIlil1li = 0; IIlil1li < lililIi1.length; IIlil1li += Ii1i11l) { const IlI1ili = lililIi1.slice(IIlil1li, IIlil1li + Ii1i11l), iiiiIlII = Promise.all(IlI1ili.map(async llllIl1I => { try { const lIiil1Ii = await llllIl1I(); if (lIiil1Ii !== null && (!iIIi1I1 || iIIi1I1(lIiil1Ii))) return llI1III ? llI1III(lIiil1Ii) : lIiil1Ii; return null; } catch (lI111i) { return console.error("任务 " + llllIl1I + " 执行出错:" + lI111i), null; } })); liil1lI.push(iiiiIlII); } } const iIiii11l = (await Promise.all(liil1lI)).flat(); let Illl1i1 = iIiii11l.filter(lIl1l1lI => lIl1l1lI !== null); return llI1III && (Illl1i1 = Illl1i1.map(iIIlllii => { try { return llI1III(iIIlllii); } catch (IlIiilI) { return console.error("处理结果 " + iIIlllii + " 出错:" + IlIiilI), null; } }).filter(liII1lIl => liII1lIl !== null)), Illl1i1; } ["getActivityId"](lil11l1l = this.activityUrl) { const IlIIiI11 = new URLSearchParams(new URL(lil11l1l).search), ii1lllii = ["activityId", "giftId", "actId", "token", "code", "a", "id"]; let iIl1llIl = ""; for (let iiIIiI1i of ii1lllii) { iIl1llIl = IlIIiI11.get(iiIIiI1i); if (iIl1llIl) break; } return !iIl1llIl && (iIl1llIl = this.match(/\/(dz[a-zA-Z0-9]{28,32})/, lil11l1l)), this.activityId = iIl1llIl, this.activityId; } ["filterUrl"](liIil1i1) { if (liIil1i1 === null) return null; const I11lIil1 = new URLSearchParams(new URL(liIil1i1).search), III11l11 = []; for (const [il1lIlIl, Il1il1I1] of I11lIil1.entries()) { if (keywords.includes(il1lIlIl)) continue; III11l11.push(il1lIlIl + "=" + Il1il1I1); } if (III11l11.length > 0) return liIil1i1.split("?")[0] + "?" + III11l11.join("&"); return liIil1i1; } ["buildActInfo"]() { if (!this.activityUrl) { return; } this.activityUrl = this.filterUrl(this.activityUrl); this.activityUrl = this.match(/(https?:\/\/[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|])/, this.activityUrl); this.activityUrl = this?.["activityUrl"]?.["replace"](/(isvjd|lzkjdz|cjhydz|lzkjdzisv|cjhydzisv)/g, iliiiII1 => { switch (iliiiII1) { case "isvjd": return "isvjcloud"; case "lzkjdz": return "lzkj"; case "cjhydz": return "cjhy"; case "lzkjdzisv": return "lzkj-isv"; case "cjhydzisv": return "cjhy-isv"; default: return iliiiII1; } }) || ""; this.domain = this.match(/https?:\/\/([^/]+)/, this.activityUrl); this.activityId = this.getActivityId(this.activityUrl); while (this.activityId.startsWith("https")) { this.activityUrl = this.activityId; this.activityId = this.getActivityId(this.activityUrl); } this.activityType = this.getQueryString(this.activityUrl, "activityType"); this.venderId = this.getQueryString(this.activityUrl, "user_id") || this.getQueryString(this.activityUrl, "userId") || this.match(/\/m\/(\d+)\//, this.activityUrl) || this.getQueryString(this.activityUrl, "venderId"); this.userId = this.venderId; this?.["activityUrl"] && (this.urlPrefix = Object.keys(urlPrefixes).find(iI111I => this.activityUrl.match(urlPrefixes[iI111I])) || ""); console.log("活动链接 " + this.activityUrl + " " + this.activityType + " " + this.venderId); } async ["complete"]() { if (!this.runAll && this.index >= this.masterNum) { this.putMsg("全部完成"); this.expire = true; } } ["getAwardPrizeInfo"](l1l1I1l) { const ili1ilIl = l1l1I1l.awardType === "JD_BEAN" || l1l1I1l.awardType === "JD_MARKET", i1IiIi11 = parseInt(l1l1I1l.awardDenomination); return { "isBean": ili1ilIl, "prizeNum": i1IiIi11 }; } ["formatDateString"](ilIiIi) { if (ilIiIi.match(/\d{4}年\d{1,2}月\d{1,2}日\d{2}:\d{2}:\d{2}/)) return ilIiIi.replace(/(\d{4})年(\d{1,2})月(\d{1,2})日(\d{2}:\d{2}:\d{2})/, "$1-$2-$3 $4"); return ilIiIi; } async ["getRuleSETime"](lII = this.rule) { debugger; if (this.actStartTime) { return; } const ilIii11I = /(\d{4}-\d{2}-\d{2} \d{2}:\d{2}|\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}|\d{4}年\d{1,2}月\d{1,2}日\d{2}:\d{2}:\d{2})/g, liIi11lI = lII.match(ilIii11I); if (liIi11lI) { const iIi1li1i = this.formatDateString(liIi11lI[0]), l1Ii1lii = this.formatDateString(liIi11lI[1]); this.actStartTime = new Date(iIi1li1i).getTime(); this.actEndTime = new Date(l1Ii1lii).getTime(); } else { debugger; console.log("未找到活动时间!"); } } } module.exports = { "http": $, "Env": Env, "CryptoJS": CryptoJS, "notify": notify, "fs": fs, "cheerio": cheerio, "NodeRSA": NodeRSA };