EVE/magic.js
2024-12-26 10:59:15 +08:00

2316 lines
114 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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&reg=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&reg=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
};