4358 lines
167 KiB
JavaScript
4358 lines
167 KiB
JavaScript
const l1liiii1 = require("https"),
|
||
IliilIlI = require("axios"),
|
||
iIl1llII = require("qs"),
|
||
II11il11 = require("crypto-js"),
|
||
iiliilll = require("base-64"),
|
||
i111lii1 = require("node-rsa"),
|
||
l1I11II1 = require("fs"),
|
||
ilI1il = require("path"),
|
||
{
|
||
format: i1I1IlI1
|
||
} = require("date-fns"),
|
||
Il1ii11 = require("./jdCookie.js"),
|
||
{
|
||
HttpsProxyAgent: IIIlIII1
|
||
} = require("https-proxy-agent"),
|
||
l1ii1ii1 = require("tls"),
|
||
lIl1ii = require("cheerio"),
|
||
llillIi1 = require("yaml"),
|
||
lIIII11l = require("url"),
|
||
liIliiiI = require("./sendNotify"),
|
||
iIl1111 = require("winston"),
|
||
IIiI11l1 = require("events"),
|
||
ilIiilII = new IIiI11l1(),
|
||
{
|
||
AbortController: li1Iil1
|
||
} = require("abort-controller");
|
||
let i1il1i1l = ["来晚了", "已发完", "参数缺失或无效", "超出活动计划时间", "奖品发送失败", "发放完", "全部被领取", "余额不足", "已结束", "活动已经结束", "未开始", "此京豆计划已经结束", "已经发完", "活动不存在"];
|
||
process.env.B_WX_STOP_KEYWORD ? process.env.B_WX_STOP_KEYWORD.split(/[@,&|]/).forEach(iII1i1Ii => i1il1i1l.push(iII1i1Ii)) : "";
|
||
let ill1iIl = ["京豆", "红包", "券", "再来一次", "客服"],
|
||
IillIl11 = ["下单满", "签收后", "收到货后", "成功购买任意", "必须购买店铺内"];
|
||
process.env.B_WX_ADDRESS_STOP_KEYWORD ? process.env.B_WX_ADDRESS_STOP_KEYWORD.split(/[@,&|]/).forEach(l1liI => ill1iIl.push(l1liI)) : "";
|
||
process.env.B_WX_ADDRESS_STOP_KEYWORD_RULE ? process.env.B_WX_ADDRESS_STOP_KEYWORD_RULE.split(/[@,&|]/).forEach(I1I1liIi => IillIl11.push(I1I1liIi)) : "";
|
||
let ilIii1l1 = [];
|
||
process.env.B_WX_WHITELIST ? process.env.B_WX_WHITELIST.split(/[@,&|]/).forEach(iI1I11iI => ilIii1l1.push(iI1I11iI.includes("-") ? iI1I11iI : iI1I11iI * 1)) : [];
|
||
let ilIi1IiI = ["10052"];
|
||
process.env.B_WX_OPEN_CARD_TYPES ? process.env.B_WX_OPEN_CARD_TYPES.split(/[@,&|]/).forEach(ii1ili1l => ilIi1IiI.push(ii1ili1l)) : "";
|
||
const iIl1IlI1 = {
|
||
"wxProxyEnable": parseInt(process.env.M_WX_PROXY_ENABLE || "2"),
|
||
"wxProxyUrl": process.env.B_WX_PROXY_URL || "",
|
||
"wxProxySmart": parseInt(process.env.M_WX_PROXY_SMART || "2"),
|
||
"wxProxyInterval": parseInt(process.env.M_WX_PROXY_INTERVAL || 120),
|
||
"wxProxyMode": parseInt(process.env.M_WX_PROXY_MODE || "1"),
|
||
"wxProxyCheck": parseInt(process.env.M_WX_PROXY_CHECK || "1"),
|
||
"proxyRegx": process.env.M_WX_PROXY_ENABLE_REGEXP ? process.env.M_WX_PROXY_ENABLE_REGEXP : "(Request failed with status code (403|407|493|429|497|500|502|503|504))|certificate|timeout|ECONNRESET|ECONNREFUSED|ETIMEDOUT|(tunneling socket could not be established)|(socket hang up)|(CONNECT response)|(socket disconnected)",
|
||
"isvObfuscatorRetry": parseInt(process.env?.["M_WX_ISVOBFUSCATOR_RETRY"] || 1),
|
||
"isvObfuscatorRetryWait": parseInt(process.env?.["M_WX_ISVOBFUSCATOR_RETRY_WAIT"] || 2),
|
||
"notInitPinTokenRegx": /lorealjdcampaign-rc.isvjcloud.com|interaction/,
|
||
"messageMasked": parseInt(process.env.M_WX_MESSAGE_MASKED || "2"),
|
||
"messageSingle": parseInt(process.env.M_WX_MESSAGE_SINGLE || "2"),
|
||
"addressUseNum": parseInt(process.env.M_WX_ADDRESS_USE_NUM || "0"),
|
||
"saveAddressMode": parseInt(process.env.M_WX_SAVE_ADDRESS_MODE || "1"),
|
||
"wxBlockRegx": process.env.M_WX_BLOCK_PIN_REGX || "",
|
||
"wxEnableOtherEnv": parseInt(process.env.M_WX_ENABLE_OTHER_ENV || "1"),
|
||
"timeoutDuration": parseInt(process.env.M_WX_TIMEOUT_DURATION || "30"),
|
||
"reTryRegx": "(哎呀活动火爆,请稍后再试|活动太火爆了|活动过于火爆|服务器数据忙|奖品与您擦肩而过了哟)",
|
||
"retryCount": parseInt(process.env.B_RETRY_COUNT || "20"),
|
||
"proxyRetryCount": parseInt(process.env.B_PROXY_RETRY_COUNT || "5"),
|
||
"immediatelyExit": parseInt(process.env.B_IMMEDIATE_EXIT || "0"),
|
||
"showProxyRetryLog": parseInt(process.env.B_SHOW_PROXY_RETRY_LOG || "1"),
|
||
"redisCacheEnable": parseInt(process.env.B_REDIS_CACHE_ENABLE || "2"),
|
||
"redisUrl": process.env.B_REDIS || "",
|
||
"logger": null,
|
||
"logToFile": parseInt(process.env.B_LOG_TO_FILE || "2"),
|
||
"stopKeywords": i1il1i1l,
|
||
"addressStopKeywords": ill1iIl,
|
||
"addressStopKeywordsRule": IillIl11,
|
||
"wxWhitelist": ilIii1l1,
|
||
"openCardTypes": ilIi1IiI
|
||
},
|
||
iiIll1i = {
|
||
"M_WX_PROXY_ENABLE": "wxProxyEnable",
|
||
"M_WX_PROXY_URL": "wxProxyUrl",
|
||
"M_WX_PROXY_SMART": "wxProxySmart",
|
||
"M_WX_PROXY_INTERVAL": "wxProxyInterval",
|
||
"M_WX_PROXY_MODE": "wxProxyMode",
|
||
"M_WX_PROXY_CHECK": "wxProxyCheck",
|
||
"M_WX_PROXY_ENABLE_REGEXP": "proxyRegx",
|
||
"M_WX_ISVOBFUSCATOR_RETRY": "isvObfuscatorRetry",
|
||
"M_WX_ISVOBFUSCATOR_RETRY_WAIT": "isvObfuscatorRetryWait",
|
||
"M_WX_MESSAGE_MASKED": "messageMasked",
|
||
"M_WX_MESSAGE_SINGLE": "messageSingle",
|
||
"M_WX_ADDRESS_USE_NUM": "addressUseNum",
|
||
"M_WX_SAVE_ADDRESS_MODE": "saveAddressMode",
|
||
"M_WX_BLOCK_PIN_REGX": "wxBlockRegx",
|
||
"M_WX_ENABLE_OTHER_ENV": "wxEnableOtherEnv",
|
||
"M_WX_TIMEOUT_DURATION": "timeoutDuration",
|
||
"M_WX_STOP_KEYWORD": "__stopKeywords__",
|
||
"M_WX_ADDRESS_STOP_KEYWORD": "__addressStopKeywords__",
|
||
"M_WX_ADDRESS_STOP_KEYWORD_RULE": "__addressStopKeywordsRule__",
|
||
"M_WX_WHITELIST": "__wxWhitelist",
|
||
"M_WX_OPEN_CARD_TYPES": "__openCardTypes__",
|
||
"B_RETRY_COUNT": "retryCount",
|
||
"B_PROXY_RETRY_COUNT": "proxyRetryCount",
|
||
"B_SHOW_PROXY_RETRY_LOG": "showProxyRetryLog",
|
||
"B_REDIS_CACHE_ENABLE": "redisCacheEnable",
|
||
"B_REDIS": "redisUrl",
|
||
"B_LOG_TO_FILE": "logToFile"
|
||
},
|
||
iI111l1i = {
|
||
"mode": __dirname.includes("bear"),
|
||
"wxRunMode": parseInt(process.env.M_WX_RUN_MODE || "1"),
|
||
"wxScheduledNotify": parseInt(process.env.M_WX_SCHEDULE || "1"),
|
||
"apiToken": process.env.B_API_TOKEN ? process.env.B_API_TOKEN : "",
|
||
"showDebugInfo": parseInt(process.env.M_WX_DEBUG_INFO || "2"),
|
||
"hdbTypes": ["hdb-isv.isvjcloud.com", "jingyun-rc.isvjcloud.com"],
|
||
"pushUserDetail": process.env.PUSH_USER_DETAIL || "",
|
||
"pushTgBotToken": process.env.PUSH_TG_BOT_TOKEN || "",
|
||
"scheduleTgBotToken": process.env.SCHEDULE_TG_BOT_TOKEN || "",
|
||
"scheduleTgUserId": process.env.SCHEDULE_TG_USER_ID || "",
|
||
"urlPrefixes": {
|
||
"/prod/cc/interactsaas": /interactsaas/,
|
||
"/crm-proya/apps/interact": /crm-proya/,
|
||
"/apps/interac": /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\/v1/,
|
||
"/prod/cc/interaction/v2": /interaction\/v2/
|
||
},
|
||
"jdAppTlsOptions": {
|
||
"secureProtocol": "TLSv1_2_method",
|
||
"ciphers": "TLS_GREASE 0x4a 0x4a:TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384:TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256:TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256:TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA:TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA:TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA:TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA:TLS_RSA_WITH_AES_256_GCM_SHA384:TLS_RSA_WITH_AES_128_GCM_SHA256:TLS_RSA_WITH_AES_256_CBC_SHA:TLS_RSA_WITH_AES_128_CBC_SHA:TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA:TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA:TLS_RSA_WITH_3DES_EDE_CBC_SHA"
|
||
}
|
||
},
|
||
iIliIIII = {
|
||
"M_WX_RUN_MODE": "wxRunMode",
|
||
"M_WX_SCHEDULE": "wxScheduledNotify",
|
||
"B_API_TOKEN": "apiToken",
|
||
"M_WX_DEBUG_INFO": "showDebugInfo",
|
||
"PUSH_USER_DETAIL": "pushUserDetail",
|
||
"PUSH_TG_BOT_TOKEN": "pushTgBotToken",
|
||
"SCHEDULE_TG_BOT_TOKEN": "scheduleTgBotToken",
|
||
"SCHEDULE_TG_USER_ID": "scheduleTgUserId"
|
||
};
|
||
iI111l1i.mode && (iIl1IlI1.wxEnableOtherEnv = 2);
|
||
let I1lli11i;
|
||
try {
|
||
I1lli11i = require("ioredis");
|
||
} catch (iI1lllI) {
|
||
console.log("未安装redis依赖,禁用redis缓存");
|
||
iIl1IlI1.redisRequire = 2;
|
||
}
|
||
class iiiIIIll extends Error {
|
||
constructor(liiliII1) {
|
||
super(liiliII1);
|
||
this.name = "customAssert";
|
||
}
|
||
}
|
||
class i1I1IiII extends Error {
|
||
constructor(lI11II1) {
|
||
super(lI11II1);
|
||
this.name = "customStop";
|
||
}
|
||
}
|
||
class lllli1iI extends Error {
|
||
constructor(IlilillI) {
|
||
super(IlilillI);
|
||
this.name = "Aborted";
|
||
}
|
||
}
|
||
function liI1l1II(...liliil) {
|
||
const I1l1iiI = new Date(),
|
||
I1ll1IIl = i1I1IlI1(I1l1iiI, "yyyy-MM-dd HH:mm:ss.SSS"),
|
||
l1IliI1 = liliil.map(I1ll1iii => {
|
||
if (I1ll1iii && I1ll1iii.constructor === Object) return JSON.stringify(I1ll1iii);
|
||
return I1ll1iii;
|
||
});
|
||
console.log(I1ll1IIl, ...l1IliI1);
|
||
}
|
||
function i1l1ilIl(II1Iliii = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") {
|
||
return II1Iliii.replace(/[xy]/g, function (iillil1i) {
|
||
const lill1lI = 16 * Math.random() | 0,
|
||
iiiiilli = "x" === iillil1i ? lill1lI : 3 & lill1lI | 8;
|
||
return iiiiilli.toString(36);
|
||
});
|
||
}
|
||
class liiIIll {
|
||
constructor(IiiIliI = {}) {
|
||
const IliIII1 = iIl1111.format.printf(({
|
||
level: I1iil1ii,
|
||
message: l1lllIl1,
|
||
timestamp: lIll111I,
|
||
tag: I1iliI1l
|
||
}) => {
|
||
const iIlilll = i1I1IlI1(lIll111I, "HH:mm:ss.SSS"),
|
||
liI1l1i = 5,
|
||
lii11lli = I1iil1ii.toUpperCase().padEnd(liI1l1i, " ");
|
||
return iIlilll + "|" + lii11lli + "|" + l1lllIl1;
|
||
}),
|
||
IlIil1il = [new iIl1111.transports.Console()];
|
||
if (IiiIliI.logToFile) {
|
||
const lil1IIl1 = IiiIliI.filename || i1I1IlI1(new Date(), "yyyy-MM-dd_HH-mm-ss");
|
||
IlIil1il.push(new iIl1111.transports.File({
|
||
"filename": "./logs/" + lil1IIl1 + ".log"
|
||
}));
|
||
}
|
||
this.logger = iIl1111.createLogger({
|
||
"level": IiiIliI.level || "debug",
|
||
"format": iIl1111.format.combine(iIl1111.format.timestamp(), IliIII1),
|
||
"transports": IlIil1il
|
||
});
|
||
["error", "warn", "info", "debug"].forEach(IIi1lii => {
|
||
this[IIi1lii] = (...lllIil1I) => {
|
||
const lIi1i1I = lllIil1I.map(lll1l => {
|
||
if (lll1l === undefined) return "undefined"; else {
|
||
if (lll1l === null) {
|
||
return "null";
|
||
} else {
|
||
if (typeof lll1l === "object") return JSON.stringify(lll1l); else {
|
||
return lll1l;
|
||
}
|
||
}
|
||
}
|
||
}).join(" ");
|
||
this.logger.log(IIi1lii, lIi1i1I);
|
||
};
|
||
});
|
||
}
|
||
}
|
||
class Iiii1li1 {
|
||
static ["ivs"] = ["13.2", "13.5", "14.4", "15.1", "15.1.1", "15.2", "15.2.1", "15.3", "15.3.1", "15.4", "15.4.1", "15.5", "16.0", "16.1", "16.6", "16.6.1", "16.7", "17.0", "17.1", "17.1.2", "17.2", "17.3", "17.4", "17.5"];
|
||
static ["phones"] = [{
|
||
"model": "X",
|
||
"screen": "1125*2436",
|
||
"tf": "10,3",
|
||
"ivsRange": [0, 17]
|
||
}, {
|
||
"model": "XS",
|
||
"screen": "1125*2436",
|
||
"tf": "11,2",
|
||
"ivsRange": [0, 24]
|
||
}, {
|
||
"model": "XsMax",
|
||
"screen": "1242*2688",
|
||
"tf": "11,4",
|
||
"ivsRange": [0, 24]
|
||
}, {
|
||
"model": "XR",
|
||
"screen": "828*1792",
|
||
"tf": "11,8",
|
||
"ivsRange": [0, 24]
|
||
}, {
|
||
"model": "11",
|
||
"screen": "828*1792",
|
||
"tf": "12,1",
|
||
"ivsRange": [0, 24]
|
||
}, {
|
||
"model": "11Pro",
|
||
"screen": "1125*2436",
|
||
"tf": "12,3",
|
||
"ivsRange": [0, 24]
|
||
}, {
|
||
"model": "11ProMax",
|
||
"screen": "1242*2688",
|
||
"tf": "12,5",
|
||
"ivsRange": [0, 24]
|
||
}, {
|
||
"model": "12",
|
||
"screen": "1170*2532",
|
||
"tf": "13,2",
|
||
"ivsRange": [2, 24]
|
||
}, {
|
||
"model": "12Pro",
|
||
"screen": "1170*2532",
|
||
"tf": "13,3",
|
||
"ivsRange": [2, 24]
|
||
}, {
|
||
"model": "12ProMax",
|
||
"screen": "1284*2778",
|
||
"tf": "13,4",
|
||
"ivsRange": [2, 24]
|
||
}, {
|
||
"model": "13",
|
||
"screen": "1170*2532",
|
||
"tf": "14,5",
|
||
"ivsRange": [3, 24]
|
||
}, {
|
||
"model": "13Pro",
|
||
"screen": "1170*2532",
|
||
"tf": "14,2",
|
||
"ivsRange": [3, 24]
|
||
}, {
|
||
"model": "13ProMax",
|
||
"screen": "1284*2778",
|
||
"tf": "14,3",
|
||
"ivsRange": [3, 24]
|
||
}, {
|
||
"model": "14",
|
||
"screen": "1170*2532",
|
||
"tf": "14,7",
|
||
"ivsRange": [12, 24]
|
||
}, {
|
||
"model": "14Plus",
|
||
"screen": "1284*2778",
|
||
"tf": "14,8",
|
||
"ivsRange": [12, 24]
|
||
}, {
|
||
"model": "14Pro",
|
||
"screen": "1179*2556",
|
||
"tf": "15,2",
|
||
"ivsRange": [12, 24]
|
||
}, {
|
||
"model": "14ProMax",
|
||
"screen": "1290*2796",
|
||
"tf": "15,3",
|
||
"ivsRange": [12, 24]
|
||
}, {
|
||
"model": "15",
|
||
"screen": "1170*2532",
|
||
"tf": "15,4",
|
||
"ivsRange": [17, 24]
|
||
}, {
|
||
"model": "15Plus",
|
||
"screen": "1179*2556",
|
||
"tf": "15,5",
|
||
"ivsRange": [17, 24]
|
||
}, {
|
||
"model": "15Pro",
|
||
"screen": "1179*2556",
|
||
"tf": "16,1",
|
||
"ivsRange": [17, 24]
|
||
}, {
|
||
"model": "15ProMax",
|
||
"screen": "1290*2796",
|
||
"tf": "16,2",
|
||
"ivsRange": [17, 24]
|
||
}];
|
||
static ["generatePhoneInfo"](IiIliiIl = null) {
|
||
const I1iII1ll = this.phones[Math.floor(Math.random() * this.phones.length)],
|
||
i1l1IIiI = this.ivs.slice(I1iII1ll.ivsRange[0], I1iII1ll.ivsRange[1]),
|
||
lii1II1I = i1l1IIiI[Math.floor(Math.random() * i1l1IIiI.length)],
|
||
I1llIii = {
|
||
"12.4.2": "169143",
|
||
"12.4.3": "169159",
|
||
"12.4.4": "169175",
|
||
"12.6.0": "169204",
|
||
"12.6.2": "169227"
|
||
},
|
||
Iil1i = Object.keys(I1llIii),
|
||
li1i111 = IiIliiIl === null ? Iil1i[Math.floor(Math.random() * Iil1i.length)] : IiIliiIl;
|
||
return {
|
||
"phone": I1iII1ll.model,
|
||
"screen": I1iII1ll.screen,
|
||
"tf": I1iII1ll.tf,
|
||
"iv": lii1II1I,
|
||
"clientVersion": li1i111,
|
||
"build": I1llIii[li1i111],
|
||
"uuid": i1l1ilIl()
|
||
};
|
||
}
|
||
}
|
||
function i11IIIli(lIl11iIi, I1ll1llI, i1Il1lii) {
|
||
const illiliI = ["B6dB3QqGZP1lKNICTaiAeNJSHKNepO5GGgtL6FUceqSlpFZCdx2SZ5MPPbzrgy91HeR0dnJazcMrvMgPF7bhFrfsGaApJKk4JohEEhoJ4kKJpAaGsfrFhb7FPgMvrMczaJnd0ReH19ygrzbPPM5ZS2xdCZFplSqecUF6LtgGG5OpeNKHSJNeAiaTCINKl1PZGqQ3Bd6B", "EUhzJoyKP7VydtpyBwNUGU2tqzI0QB0LIpQ10Fk3hX2ZcPoGRpACqmzcTQbKd98i3U7raFz2rMl2kys0ODgtAh22E3i57wmh38RbbR83hmw75i3E22hAtgDO0syk2lMr2zFar7U3i89dKbQTczmqCApRGoPcZ2Xh3kF01QpIL0BQ0Izqt2UGUNwByptdyV7PKyoJzhUE", "xexcHoyVwOs5TYTQVvU0iXn56ryKVdWedLTpq3KEKmbUHfwzuZjIpZOPVXMEappFhjdqwtp1bBrWaRBCfPFwCq2W8SsyvwqZ6sIGGIs6ZqwvysS8W2qCwFPfCBRaWrBb1ptwqdjhFppaEMXVPOZpIjZuzwfHUbmKEK3qpTLdeWdVKyr65nXi0UvVQTYT5sOwVyoHcxex", "2Llnegc5i4flqd4HZPFK210yh61boBxRSdnNVMeudKimx92Qi4aPuHP12HmEImbWrXjLgBGqy1bSnKvLhqMqhknyuse4nFoeLTkJJkTLeoFn4esuynkhqMqhLvKnSb1yqGBgLjXrWbmIEmH21PHuPa4iQ29xmiKdueMVNndSRxBob16hy012KFPZH4dqlf4i5cgenlL2", "dZzoMZF6xtt3voTFDbPzEZ7GeM8t7uY05d4K4xfhtdxELh96dDRB4oRYA2smET5dy1dafGkXOz2V7tNOVi0vSqfuhI99IKprVK6QQ6KVrpKI99IhufqSv0iVONt7V2zOXkGfad1yd5TEms2AYRo4BRDd69hLExdthfx4K4d50Yu7t8MeG7ZEzPbDFTov3ttx6FZMozZd", "SNYr3bWMtQulWZO2FEwuhSFp3EXPR1TujPRJwUFlxBh9Pvf2MeTEpR7a3dU6e9rNUMyBh2osDdK4Vdm4gZ0XcRCoHZPi2jiXT2dCCd2TXij2iPZHoCRcX0Zg4mdV4KdDso2hByMUNr9e6Ud3a7RpETeM2fvP9hBxlFUwJRPjuT1RPXE3pFShuwEF2OZWluQtMWb3rYNS", "4viQ2FrYHcrH44gqvPLo6KtiFu56AW1eXbDBZrBepzdLKE33Ey4TwFERnkVLnbHAXbKqAi0HFP9Eu7yg8WNlI7q2dvXGGiPaMbrBBrbMaPiGGXvd2q7IlNW8gy7uE9PFH0iAqKbXAHbnLVknREFwT4yE33EKLdzpeBrZBDbXe1WA65uFitK6oLPvqg44HrcHYrF2Qiv4", "0VIoSHBNVAW8De7NquFyEUm0o9xNnQJGn2OR1yOK9djWALhyP3a1XoQEwTnXuzypRuwsaLPUlertksOY6LYmnbQmPgdDQRXXKdKooKdKXXRQDdgPmQbnmYL6YOsktrelUPLaswuRpyzuXnTwEQoX1a3PyhLAWjd9KOy1RO2nGJQnNx9o0mUEyFuqN7eD8WAVNBHSoIV0", "fdJPBiTra9E0qg2HJrobeEC2SkOfSzbw6nG5J5ACx42GQDBsCyGfxNlHHYhl7EmkdvYaKAXUVXSKcTT1KhyYaj9Q4YtyhnOA7cLrrLc7AOnhytY4Q9jaYyhK1TTcKSXVUXAKaYvdkmE7lhYHHlNxfGyCsBDQG24xCA5J5Gn6wbzSfOkS2CEeborJH2gq0E9arTiBPJdf", "kLOA93PyUOX3QdlLuZ9JgNq1peyIITAQSnKzuLBZ2NthOSseAJMGCecvSLVKAww61Y31hJ4l7kAOcjLmtqQNJlNyJb5yu9d9vqWUUWqv9d9uy5bJyNlJNQqtmLjcOAk7l4Jh13Y16wwAKVLSvceCGMJAesSOhtN2ZBLuzKnSQATIIyep1qNgJ9ZuLldQ3XOUyP39AOLk"];
|
||
function lI1I11il(iilIlli1) {
|
||
iilIlli1 = iilIlli1.split("").reverse().join("");
|
||
const liiIl1I = new Uint8Array(12),
|
||
IlIlil1I = new TextEncoder().encode(iilIlli1);
|
||
for (let iiiIi1ii = 0; iiiIi1ii < IlIlil1I.length; iiiIi1ii += 2) {
|
||
let lii1il1i = IlIlil1I[iiiIi1ii] << 5 | IlIlil1I[iiiIi1ii + 1] & 255;
|
||
lii1il1i %= 63;
|
||
liiIl1I[iiiIi1ii >> 1] = lii1il1i;
|
||
}
|
||
let iIiiIIl1 = "";
|
||
for (let llill1ll = 0; llill1ll < liiIl1I.length; llill1ll++) {
|
||
iIiiIIl1 += (liiIl1I[llill1ll] + 256).toString(2).slice(1);
|
||
}
|
||
let il11IllI = "",
|
||
Il1l111 = "";
|
||
for (let II111iil = 0; II111iil < 16; II111iil++) {
|
||
if (II111iil !== 0) {
|
||
const ililllll = II111iil * 6,
|
||
iIIIiIl = iIiiIIl1.substring(ililllll, ililllll + 6);
|
||
let I11iIii1 = parseInt(iIIIiIl, 2);
|
||
const liiI1llI = Il1l111.split("");
|
||
for (let iI1iiIIi = 0; iI1iiIIi < liiI1llI.length; iI1iiIIi++) {
|
||
liiI1llI[iI1iiIIi] === "1" && (I11iIii1 = (I11iIii1 >> 6 - iI1iiIIi | I11iIii1 << iI1iiIIi) & 63);
|
||
}
|
||
Il1l111 = (I11iIii1 & 63).toString(2).padStart(6, "0");
|
||
} else Il1l111 = iIiiIIl1.substring(0, 6);
|
||
il11IllI += Il1l111;
|
||
}
|
||
for (let Il1lIlII = 0; Il1lIlII < 12; Il1lIlII++) {
|
||
const lilii1I1 = Il1lIlII * 8;
|
||
liiIl1I[Il1lIlII] = parseInt(il11IllI.substring(lilii1I1, lilii1I1 + 8), 2);
|
||
}
|
||
const iilIi1li = btoa(String.fromCharCode.apply(null, liiIl1I));
|
||
return iilIi1li;
|
||
}
|
||
let I1illil1 = Date.now() + parseInt(i1Il1lii);
|
||
typeof lIl11iIi != "object" && (lIl11iIi = JSON.parse(lIl11iIi));
|
||
lIl11iIi.nowTime = I1illil1;
|
||
let liiiiIil = I1ll1llI + I1illil1;
|
||
const l1llllI1 = liiiiIil.substring(0, liiiiIil.length - 5);
|
||
let il1iI1l = "";
|
||
for (let l1111ilI = 0; l1111ilI < l1llllI1.length; l1111ilI++) {
|
||
let IIi1Iii = l1llllI1.charCodeAt(l1111ilI),
|
||
I1i1I = IIi1Iii % 10,
|
||
llili1 = illiliI[I1i1I][l1111ilI];
|
||
il1iI1l += llili1;
|
||
}
|
||
var iilIlill = il1iI1l.length,
|
||
lIi1lIII = Math.floor(iilIlill / 24),
|
||
i11llil1 = "";
|
||
for (var ll1iIiI1 = 0; ll1iIiI1 < 24; ll1iIiI1++) {
|
||
var lIllIll1 = (ll1iIiI1 + 1) * lIi1lIII;
|
||
if (ll1iIiI1 === 23) {
|
||
lIllIll1 = iilIlill;
|
||
}
|
||
var lllIilIl = il1iI1l.substring(ll1iIiI1 * lIi1lIII, lIllIll1),
|
||
IiIii111 = [];
|
||
for (var llii11I1 = 0; llii11I1 < lllIilIl.length; llii11I1++) {
|
||
IiIii111.push(lllIilIl.charCodeAt(llii11I1));
|
||
}
|
||
var IIiiiil1 = IiIii111.reduce(function (iliiliIl, I1iiIiIi) {
|
||
return iliiliIl + I1iiIiIi;
|
||
}, 0),
|
||
Iil11Iii = Math.floor(IIiiiil1 / IiIii111.length);
|
||
i11llil1 += String.fromCharCode(Iil11Iii);
|
||
}
|
||
il1iI1l = i11llil1;
|
||
const llI1iI1l = lI1I11il(il1iI1l),
|
||
i11I1lli = II11il11.enc.Utf8.parse(llI1iI1l),
|
||
illli111 = II11il11.enc.Utf8.parse(""),
|
||
iIIii1l = II11il11.AES.encrypt(JSON.stringify(lIl11iIi), i11I1lli, {
|
||
"iv": illli111,
|
||
"mode": II11il11.mode.ECB,
|
||
"padding": II11il11.pad.Pkcs7
|
||
});
|
||
return iIIii1l.toString();
|
||
}
|
||
function I1II1lIl(Iil1i1I1 = {}) {
|
||
const l1ili1I = {
|
||
"method": "get",
|
||
"timeout": 30000
|
||
},
|
||
iIlI111I = Object.assign({}, l1ili1I, Iil1i1I1),
|
||
Iil11ilI = IliilIlI.CancelToken.source(),
|
||
llII1i11 = iIlI111I.timeout || 20000,
|
||
IiI11li1 = setTimeout(() => {
|
||
Iil11ilI.cancel("Request canceled due to timeout (" + llII1i11 + " ms)");
|
||
}, llII1i11);
|
||
return IliilIlI({
|
||
...iIlI111I,
|
||
"cancelToken": Iil11ilI.token
|
||
}).then(liIii1Ii => {
|
||
return clearTimeout(IiI11li1), liIii1Ii;
|
||
}).catch(l1i1lI1 => {
|
||
clearTimeout(IiI11li1);
|
||
throw l1i1lI1;
|
||
});
|
||
}
|
||
function II1li1II(ll11ilii) {
|
||
if (ll11ilii.proxy) {
|
||
const IIIlII1I = new IIIlIII1(ll11ilii.proxy),
|
||
l11llil1 = IIIlII1I.addRequest;
|
||
return IIIlII1I.addRequest = function (ilI1ii, iIll1II1, lI11II1l) {
|
||
return Object.assign(iIll1II1, ll11ilii.tlsOptions, {
|
||
"ciphers": ll11ilii.tlsOptions?.["ciphers"] || l1ii1ii1.DEFAULT_CIPHERS
|
||
}), l11llil1.call(this, ilI1ii, iIll1II1, lI11II1l);
|
||
}, IIIlII1I;
|
||
}
|
||
const II1iIl11 = new l1liiii1.Agent({
|
||
...ll11ilii.tlsOptions,
|
||
"ciphers": ll11ilii.tlsOptions?.["ciphers"] || l1ii1ii1.DEFAULT_CIPHERS
|
||
});
|
||
return II1iIl11;
|
||
}
|
||
class l11i111 {
|
||
constructor(ll1lIi1i, lI11Ii1) {
|
||
this.ua = ll1lIi1i;
|
||
this.pin = lI11Ii1;
|
||
this.av = ll1lIi1i.slice(ll1lIi1i.indexOf("/") + 1);
|
||
this.sua = ll1lIi1i.substring(ll1lIi1i.indexOf("(") + 1, ll1lIi1i.indexOf(")"));
|
||
this.random = this.#randomString(10, true);
|
||
this.cacheInfo = {};
|
||
}
|
||
#getRandomString(iIil1Iii, IlliilIi) {
|
||
let iiIiIiIi = "",
|
||
lllili1i = iIil1Iii.split("");
|
||
for (let IIilllI = 0; IIilllI < IlliilIi; IIilllI++) {
|
||
let liI1IiIl = Math.floor(Math.random() * lllili1i.length);
|
||
iiIiIiIi += lllili1i[liI1IiIl];
|
||
}
|
||
return iiIiIiIi;
|
||
}
|
||
#randomString(lillIlll, iiIliIl1) {
|
||
var Illiil1I = "",
|
||
l1I1iiil = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||
for (var liIl1ii1 = 0; liIl1ii1 < lillIlll; liIl1ii1++) {
|
||
var lIli11lI = l1I1iiil;
|
||
liIl1ii1 === 0 && iiIliIl1 && (lIli11lI = l1I1iiil.slice(1));
|
||
var l11li11I = Math.round(Math.random() * (lIli11lI.length - 1));
|
||
Illiil1I += lIli11lI.substring(l11li11I, l11li11I + 1);
|
||
}
|
||
return Illiil1I;
|
||
}
|
||
#generateFp(ii1ii11I) {
|
||
let iIll1liI = 3,
|
||
iIiIlili = "0123456789",
|
||
IIilIili = 12;
|
||
if (ii1ii11I === "4.4") iIll1liI = 4, iIiIlili = "1uct6d0jhq", IIilIili = 11; else {
|
||
if (ii1ii11I === "4.3") {
|
||
iIll1liI = 3;
|
||
iIiIlili = "kl9i1uct6d";
|
||
IIilIili = 12;
|
||
} else {
|
||
if (ii1ii11I == "4.2") iIll1liI = 4, iIiIlili = "6d0jhqw3pa", IIilIili = 11; else ii1ii11I == "4.1" && (iIll1liI = 6, iIiIlili = "uct6d0jhqw", IIilIili = 9);
|
||
}
|
||
}
|
||
let iilIl1ii,
|
||
iiil1Iii = "";
|
||
do {
|
||
iilIl1ii = this.#getRandomString(iIiIlili, 1);
|
||
iiil1Iii.indexOf(iilIl1ii) == -1 && (iiil1Iii += iilIl1ii);
|
||
} while (iiil1Iii.length < iIll1liI);
|
||
for (let l1IiiIi of iiil1Iii.slice()) {
|
||
iIiIlili = iIiIlili.replace(l1IiiIi, "");
|
||
}
|
||
let li11iliI = Math.floor(Math.random() * 10),
|
||
IilIi1Il = this.#getRandomString(iIiIlili, li11iliI) + iiil1Iii + this.#getRandomString(iIiIlili, IIilIili - li11iliI) + li11iliI,
|
||
lII11i1I = IilIi1Il.split(""),
|
||
IliII11;
|
||
if (ii1ii11I === "4.4") {
|
||
let IlIiiI1i = lII11i1I.slice(0, 8),
|
||
lli1li11 = lII11i1I.slice(8),
|
||
i1iIilIi = IlIiiI1i.reverse();
|
||
IliII11 = i1iIilIi.map(i11Iil1i => (35 - parseInt(i11Iil1i, 36)).toString(36));
|
||
IliII11.push(...lli1li11);
|
||
} else {
|
||
if (ii1ii11I === "4.3") {
|
||
let IiIlI1il = lII11i1I.slice(0, 10),
|
||
l1Iill1I = lII11i1I.slice(10),
|
||
lIlll1II = IiIlI1il.reverse();
|
||
IliII11 = lIlll1II.map(llIiII1I => (35 - parseInt(llIiII1I, 36)).toString(36));
|
||
IliII11.push(...l1Iill1I);
|
||
} else {
|
||
if (ii1ii11I === "4.1" || ii1ii11I === "4.2") {
|
||
let l1iIl11l = lII11i1I.slice(0, 14),
|
||
li1iill = lII11i1I.slice(14),
|
||
IlllIlll = l1iIl11l.reverse();
|
||
IliII11 = IlllIlll.map(ilIll1Il => (35 - parseInt(ilIll1Il, 36)).toString(36));
|
||
IliII11.push(...li1iill);
|
||
} else IliII11 = lII11i1I.reverse().map(IIii11ll => 9 - parseInt(IIii11ll));
|
||
}
|
||
}
|
||
let IiIIlIl1 = IliII11.join("");
|
||
return IiIIlIl1;
|
||
}
|
||
#generateExpandParams(iii11ili, IIl1ii11, lli11li1) {
|
||
let i1IiiiIl = {};
|
||
if (lli11li1 === "4.4") i1IiiiIl = {
|
||
"wc": 0,
|
||
"wd": 0,
|
||
"l": "zh-CN",
|
||
"ls": "zh-CN,zh,zh-TW,en-US,en",
|
||
"ml": 0,
|
||
"pl": 0,
|
||
"av": this.av,
|
||
"ua": this.ua,
|
||
"sua": this.sua,
|
||
"pp": {
|
||
"p1": this.pin,
|
||
"p2": this.pin
|
||
},
|
||
"extend": {
|
||
"wd": 0,
|
||
"l": 0,
|
||
"ls": 0,
|
||
"wk": 0,
|
||
"bu1": "0.1.9",
|
||
"bu2": 0,
|
||
"bu3": 16,
|
||
"bu4": 0,
|
||
"bu5": 0
|
||
},
|
||
"pp1": "",
|
||
"bu1": "",
|
||
"w": 390,
|
||
"h": 844,
|
||
"ow": 390,
|
||
"oh": 844,
|
||
"url": "",
|
||
"og": "",
|
||
"pr": 1.25,
|
||
"re": "h",
|
||
"random": this.random,
|
||
"referer": "",
|
||
"v": "h5_file_v4.4.0",
|
||
"ai": iii11ili,
|
||
"fp": IIl1ii11
|
||
}; else {
|
||
if (lli11li1 === "4.3") {
|
||
i1IiiiIl = {
|
||
"wc": 0,
|
||
"wd": 0,
|
||
"l": "zh-CN",
|
||
"ls": "zh-CN,zh,zh-TW,en-US,en",
|
||
"ml": 0,
|
||
"pl": 0,
|
||
"av": this.av,
|
||
"ua": this.ua,
|
||
"sua": this.sua,
|
||
"pp": {
|
||
"p2": this.pin
|
||
},
|
||
"extend": {
|
||
"wd": 0,
|
||
"l": 0,
|
||
"ls": 0,
|
||
"wk": 0,
|
||
"bu1": "0.1.7",
|
||
"bu2": 0,
|
||
"bu3": 35
|
||
},
|
||
"pp1": "",
|
||
"w": 400,
|
||
"h": 700,
|
||
"ow": 400,
|
||
"oh": 700,
|
||
"url": "",
|
||
"og": "",
|
||
"pr": 1.25,
|
||
"re": "",
|
||
"random": this.random,
|
||
"referer": "",
|
||
"v": "h5_file_v4.3.1",
|
||
"ai": iii11ili,
|
||
"fp": IIl1ii11
|
||
};
|
||
} else {
|
||
if (lli11li1 === "4.2") i1IiiiIl = {
|
||
"wc": 0,
|
||
"wd": 0,
|
||
"l": "zh-CN",
|
||
"ls": "zh-CN",
|
||
"ml": 0,
|
||
"pl": 0,
|
||
"av": this.av,
|
||
"ua": this.ua,
|
||
"sua": this.sua,
|
||
"pp": {},
|
||
"extend": {
|
||
"pm": 0,
|
||
"wd": 0,
|
||
"l": 0,
|
||
"ls": 0,
|
||
"wk": 0,
|
||
"bu1": "0.1.9"
|
||
},
|
||
"pp1": "",
|
||
"pm": {
|
||
"ps": "prompt",
|
||
"np": "default"
|
||
},
|
||
"w": 390,
|
||
"h": 844,
|
||
"ow": 390,
|
||
"oh": 844,
|
||
"url": "",
|
||
"og": "",
|
||
"pr": 1.25,
|
||
"re": "",
|
||
"random": this.random,
|
||
"referer": "",
|
||
"v": "h5_file_v4.2.0",
|
||
"ai": iii11ili,
|
||
"fp": IIl1ii11
|
||
}; else lli11li1 === "4.1" ? i1IiiiIl = {
|
||
"wc": 0,
|
||
"wd": 0,
|
||
"l": "zh-CN",
|
||
"ls": "zh-CN,zh,zh-TW,en-US,en",
|
||
"ml": 0,
|
||
"pl": 0,
|
||
"av": this.av,
|
||
"ua": this.ua,
|
||
"sua": this.sua,
|
||
"pp": {
|
||
"p2": this.pin
|
||
},
|
||
"pp1": "",
|
||
"pm": {
|
||
"ps": "prompt",
|
||
"np": "default"
|
||
},
|
||
"w": 360,
|
||
"h": 740,
|
||
"ow": 360,
|
||
"oh": 740,
|
||
"url": "",
|
||
"og": "",
|
||
"pr": 4,
|
||
"re": "",
|
||
"random": this.random,
|
||
"referer": "",
|
||
"v": "v0.1.6",
|
||
"ai": iii11ili,
|
||
"fp": IIl1ii11
|
||
} : i1IiiiIl = {
|
||
"wc": 0,
|
||
"wd": 0,
|
||
"l": "zh-CN",
|
||
"ls": "zh-CN,zh,zh-TW,en-US,en",
|
||
"ml": 0,
|
||
"pl": 0,
|
||
"av": this.av,
|
||
"ua": this.ua,
|
||
"sua": this.sua,
|
||
"pp": {
|
||
"p2": this.pin
|
||
},
|
||
"pp1": "",
|
||
"pm": {
|
||
"ps": "prompt",
|
||
"np": "default"
|
||
},
|
||
"w": 360,
|
||
"h": 740,
|
||
"ow": 360,
|
||
"oh": 740,
|
||
"url": "",
|
||
"og": "",
|
||
"pr": 4,
|
||
"re": "",
|
||
"ai": iii11ili,
|
||
"fp": IIl1ii11
|
||
};
|
||
}
|
||
}
|
||
return II11il11.AES.encrypt(JSON.stringify(i1IiiiIl, null, 2), II11il11.enc.Utf8.parse("wm0!@w-s#ll1flo("), {
|
||
"iv": II11il11.enc.Utf8.parse("0102030405060708"),
|
||
"mode": II11il11.mode.CBC,
|
||
"padding": II11il11.pad.Pkcs7
|
||
}).ciphertext.toString(II11il11.enc.Hex);
|
||
}
|
||
async #getAlgo(II1iil1i, IIiiI11, ii1I1Iii, i1llIlIi, lliiIlii = 0) {
|
||
let Ii1llIII = "",
|
||
llll1ili = {
|
||
"version": i1llIlIi,
|
||
"fp": IIiiI11,
|
||
"fv": "v3.2.0",
|
||
"appId": II1iil1i,
|
||
"timestamp": Date.now(),
|
||
"platform": "web",
|
||
"expandParams": ii1I1Iii
|
||
};
|
||
if (i1llIlIi === "4.4") llll1ili.fv = "h5_file_v4.4.0"; else {
|
||
if (i1llIlIi === "4.3") llll1ili.fv = "h5_file_v4.3.1"; else {
|
||
if (i1llIlIi === "4.2") llll1ili.fv = "h5_file_v4.2.0"; else i1llIlIi === "4.1" && (llll1ili.fv = "v1.6.1");
|
||
}
|
||
}
|
||
try {
|
||
let IIll1l1 = await IliilIlI({
|
||
"url": "https://cactus.jd.com/request_algo?g_ty=ajax",
|
||
"method": "post",
|
||
"data": llll1ili,
|
||
"headers": {
|
||
"User-Agent": this.ua
|
||
}
|
||
});
|
||
if (IIll1l1.status == 200) {
|
||
let iIIllI1I = IIll1l1.data.data.result;
|
||
Ii1llIII = {
|
||
"tk": iIIllI1I.tk,
|
||
"fp": iIIllI1I.fp,
|
||
"rd": /(?<=rd=')[^']*/.exec(iIIllI1I.algo)[0],
|
||
"algo": /(?<=algo\.)[^(]*/.exec(iIIllI1I.algo)[0]
|
||
};
|
||
}
|
||
return Ii1llIII;
|
||
} catch (i11lili) {
|
||
console.log("algo error");
|
||
if (lliiIlii < 3) {
|
||
return this.#getAlgo(II1iil1i, IIiiI11, ii1I1Iii, i1llIlIi, lliiIlii + 1);
|
||
}
|
||
throw i11lili;
|
||
}
|
||
}
|
||
#test(li1ii1ll, I1i1l111, ll11lIiI, Iiii11l1, I1ilI1, iiilIilI, lIliIli) {
|
||
let l1lilill = lIliIli === "4.4" ? "88" : lIliIli === "4.3" ? "22" : lIliIli === "4.2" ? "74" : lIliIli === "4.1" ? "04" : "",
|
||
ili1i1li = "" + I1i1l111 + li1ii1ll + ll11lIiI + l1lilill + Iiii11l1 + I1ilI1;
|
||
return II11il11[iiilIilI](ili1i1li, I1i1l111).toString(II11il11.enc.Hex);
|
||
}
|
||
async ["encrypt"](Iil1li1, llIllilI, il1lllIi, lIiIi1l1, IIi1I1ii, l1iIIiI, l11lIiIl, ill1iIIl) {
|
||
if (!(Iil1li1 in this.cacheInfo)) {
|
||
let iiii11iI = this.#generateFp(ill1iIIl);
|
||
const iIilIl1 = this.#generateExpandParams(Iil1li1, iiii11iI, ill1iIIl);
|
||
let iIlI11I1 = 0,
|
||
iiIiIi1l;
|
||
while (iIlI11I1 < 3) {
|
||
iiIiIi1l = await this.#getAlgo(Iil1li1, iiii11iI, iIilIl1, ill1iIIl);
|
||
if (iiIiIi1l !== "") break;
|
||
iIlI11I1++;
|
||
}
|
||
this.cacheInfo[Iil1li1] = iiIiIi1l;
|
||
}
|
||
const {
|
||
tk: I11iII1,
|
||
rd: lii11lll,
|
||
fp: lI11I1i,
|
||
algo: lI1i1l
|
||
} = this.cacheInfo[Iil1li1],
|
||
ll111i11 = new Date(),
|
||
I1i1i1I1 = i1I1IlI1(ll111i11, "yyyyMMddHHmmssSSS"),
|
||
li1IIIli = this.#test(lI11I1i, I11iII1, I1i1i1I1, Iil1li1, lii11lll, lI1i1l, ill1iIIl),
|
||
iiiI11lI = typeof il1lllIi == "object" ? JSON.stringify(il1lllIi) : il1lllIi,
|
||
IlliI1i1 = II11il11.SHA256(iiiI11lI).toString(II11il11.enc.Hex);
|
||
let iIli1ii1 = "appid:" + lIiIi1l1 + "&body:" + IlliI1i1;
|
||
IIi1I1ii != null && (iIli1ii1 += "&client:" + IIi1I1ii);
|
||
l1iIIiI != null && (iIli1ii1 += "&clientVersion:" + l1iIIiI);
|
||
iIli1ii1 += "&functionId:" + llIllilI;
|
||
l11lIiIl != null && (iIli1ii1 += "&t:" + l11lIiIl);
|
||
let lIIIliI1, IiI1lI1i, IilIl1i1;
|
||
if (ill1iIIl === "4.4") IiI1lI1i = {
|
||
"sua": this.sua,
|
||
"pp": {
|
||
"p1": this.pin
|
||
},
|
||
"extend": {
|
||
"wd": 0,
|
||
"l": 0,
|
||
"ls": 0,
|
||
"wk": 0,
|
||
"bu1": "0.1.9",
|
||
"bu2": -1,
|
||
"bu3": 15,
|
||
"bu4": 0,
|
||
"bu5": 0
|
||
},
|
||
"random": this.random,
|
||
"v": "h5_file_v4.4.0",
|
||
"fp": lI11I1i,
|
||
"bu1": "0.1.9"
|
||
}, IilIl1i1 = "r1T.6Vinpb.k+/a)", lIIIliI1 = II11il11.MD5("" + li1IIIli + iIli1ii1 + li1IIIli).toString(II11il11.enc.Hex); else {
|
||
if (ill1iIIl === "4.3") lIIIliI1 = II11il11.HmacSHA256(iIli1ii1, li1IIIli).toString(II11il11.enc.Hex), IiI1lI1i = {
|
||
"sua": this.sua,
|
||
"pp": {
|
||
"p2": this.pin
|
||
},
|
||
"extend": {
|
||
"wd": 0,
|
||
"l": 0,
|
||
"ls": 0,
|
||
"wk": 0,
|
||
"bu1": "0.1.7",
|
||
"bu2": 0,
|
||
"bu3": 33
|
||
},
|
||
"random": this.random,
|
||
"referer": "",
|
||
"v": "h5_file_v4.3.1",
|
||
"fp": lI11I1i
|
||
}, IilIl1i1 = "&d74&yWoV.EYbWbZ"; else {
|
||
if (ill1iIIl === "4.2") lIIIliI1 = II11il11.SHA256("" + li1IIIli + iIli1ii1 + li1IIIli).toString(II11il11.enc.Hex), IiI1lI1i = {
|
||
"sua": this.sua,
|
||
"pp": {
|
||
"p2": this.pin
|
||
},
|
||
"extend": {
|
||
"pm": 0,
|
||
"wd": 0,
|
||
"l": 0,
|
||
"ls": 0,
|
||
"wk": 0,
|
||
"bu1": "0.1.9"
|
||
},
|
||
"random": this.random,
|
||
"referer": "",
|
||
"v": "h5_file_v4.2.0",
|
||
"fp": lI11I1i
|
||
}, IilIl1i1 = "DNiHi703B0&17hh1"; else ill1iIIl === "4.1" ? (lIIIliI1 = II11il11.MD5("" + li1IIIli + iIli1ii1 + li1IIIli).toString(II11il11.enc.Hex), IiI1lI1i = {
|
||
"sua": this.sua,
|
||
"pp": {
|
||
"p2": this.pin
|
||
},
|
||
"random": this.random,
|
||
"referer": "",
|
||
"v": "v0.1.6",
|
||
"fp": lI11I1i
|
||
}, IilIl1i1 = "HL4|FW#Chc3#q?0)") : (lIIIliI1 = II11il11.HmacSHA256(iIli1ii1, li1IIIli).toString(II11il11.enc.Hex), IiI1lI1i = {
|
||
"sua": this.sua,
|
||
"pp": {
|
||
"p1": this.pin
|
||
},
|
||
"fp": lI11I1i
|
||
}, IilIl1i1 = "wm0!@w_s#ll1flo(");
|
||
}
|
||
}
|
||
const li1i1lii = II11il11.AES.encrypt(JSON.stringify(IiI1lI1i, null, 2), II11il11.enc.Utf8.parse(IilIl1i1), {
|
||
"iv": II11il11.enc.Utf8.parse("0102030405060708"),
|
||
"mode": II11il11.mode.CBC,
|
||
"padding": II11il11.pad.Pkcs7
|
||
}).ciphertext.toString(II11il11.enc.Hex),
|
||
l1iiiIIl = I1i1i1I1 + ";" + lI11I1i + ";" + Iil1li1 + ";" + I11iII1 + ";" + lIIIliI1 + ";" + ill1iIIl + ";" + ll111i11.getTime() + ";" + li1i1lii;
|
||
let II11iIl1 = {
|
||
"functionId": llIllilI,
|
||
"body": iiiI11lI,
|
||
"appid": lIiIi1l1,
|
||
"client": IIi1I1ii,
|
||
"clientVersion": l1iIIiI,
|
||
"h5st": l1iiiIIl,
|
||
"t": l11lIiIl
|
||
};
|
||
return l11lIiIl == null && delete II11iIl1.t, IIi1I1ii == null && delete II11iIl1.client, l1iIIiI == null && delete II11iIl1.clientVersion, II11iIl1;
|
||
}
|
||
}
|
||
class i1l1iil {
|
||
constructor() { }
|
||
static #get_uuid(I1Iii1iI = 40) {
|
||
if (I1Iii1iI === 0) return "0"; else {
|
||
const llll1il = this.#get_uuid(I1Iii1iI - 1).replace(/^0+/, ""),
|
||
iiiiIII = "0123456789abcdef";
|
||
return llll1il + iiiiIII[Math.floor(Math.random() * (iiiiIII.length - 6))];
|
||
}
|
||
}
|
||
static #_md5(i1lI1i) {
|
||
const llIllIll = II11il11.MD5(i1lI1i);
|
||
return llIllIll.toString(II11il11.enc.Hex);
|
||
}
|
||
static #sub_v2(iliIl1) {
|
||
const iI1l1llI = [55, 146, 68, 104, 165, 61, 204, 127, 187, 15, 217, 136, 238, 154, 233, 90],
|
||
i111llI1 = Buffer.from("80306f4370b39fd5630ad0529f77adb6", "utf-8");
|
||
let iIIlilIi = new Array(i111llI1.length).fill(0);
|
||
for (let II1Il11 in iliIl1) {
|
||
let l1I11I1 = Number(iliIl1[II1Il11]),
|
||
ilIIII1I = iI1l1llI[II1Il11 & 15],
|
||
lilil1l = Number(i111llI1[II1Il11 & 7]);
|
||
l1I11I1 = ilIIII1I ^ l1I11I1;
|
||
l1I11I1 = l1I11I1 ^ lilil1l;
|
||
l1I11I1 = l1I11I1 + ilIIII1I;
|
||
ilIIII1I = ilIIII1I ^ l1I11I1;
|
||
let ii11l1li = Number(i111llI1[II1Il11 & 7]);
|
||
ilIIII1I = ilIIII1I ^ ii11l1li;
|
||
iIIlilIi[II1Il11] = ilIIII1I & 255;
|
||
}
|
||
return iIIlilIi;
|
||
}
|
||
static #getSign(il111i11, l1IIlI, lii1l11I, l11Il1l1, lIiiIII) {
|
||
let llli1Ii = Date.now().toString(),
|
||
lll1IIIl = [[0, 2], [1, 1], [2, 0]],
|
||
ii11il1l = lll1IIIl[Math.floor(Math.random() * lll1IIIl.length)],
|
||
l1lllIi1 = "1" + ii11il1l[0] + ii11il1l[1],
|
||
l11Iii1l = "functionId=" + il111i11 + "&body=" + l1IIlI + "&openudid=" + lii1l11I + "&client=" + l11Il1l1 + "&clientVersion=" + lIiiIII + "&st=" + llli1Ii + "&sv=" + l1lllIi1,
|
||
IIl11Ill = this.#sub_v2(Buffer.from(l11Iii1l, "utf-8")),
|
||
I1li1IIl = this.#_md5(Buffer.from(IIl11Ill).toString("base64"));
|
||
return [llli1Ii, l1lllIi1, I1li1IIl];
|
||
}
|
||
static ["getSignData"](iiI1I11i, iI1lll11, l1li1II1) {
|
||
iI1lll11 = JSON.stringify(iI1lll11);
|
||
const {
|
||
screen: ilil1lII,
|
||
tf: i1iiii1I,
|
||
iv: iIiiI1iI,
|
||
clientVersion: IIIiI1II,
|
||
build: iIi1ll1i,
|
||
uuid: Ii1Ii1II
|
||
} = l1li1II1;
|
||
let lI1Il1ll = "apple",
|
||
llliliii = this.#getSign(iiI1I11i, iI1lll11, Ii1Ii1II, lI1Il1ll, IIIiI1II),
|
||
lillilil = llliliii[0],
|
||
IliIIi1I = llliliii[1],
|
||
iIi1I1Ii = llliliii[2];
|
||
const lI1ll11i = {
|
||
"hdid": "JM9F1ywUPwflvMIpYPok0tt5k9kW4ArJEU3lfLhxBqw=",
|
||
"ts": Math.floor(Date.now() / 1000),
|
||
"ridx": -1,
|
||
"cipher": {
|
||
"screen": this.#base64Encode(ilil1lII),
|
||
"uuid": this.#base64Encode(Ii1Ii1II),
|
||
"osVersion": this.#base64Encode(iIiiI1iI),
|
||
"openudid": this.#base64Encode(Ii1Ii1II),
|
||
"area": this.#base64Encode(this.#generateRandomString(2, "123456789") + "_" + this.#generateRandomString(4, "123456789") + "_" + this.#generateRandomString(4, "123456789") + "_" + this.#generateRandomString(4, "123456789"))
|
||
},
|
||
"ciphertype": 5,
|
||
"version": "1.0.3",
|
||
"appname": "com.360buy.jdmobile"
|
||
},
|
||
lIi1lIi = "eidAd71c8121f9s8+" + this.#generateRandomString(20) + "fqJmY9A07YRSnQkMEOU2Z7Jq3GnZeeGG0FqhUU0MoA1PiifL5yWcPJxtp1Cb/b/GsK0GqxuDyDfYZx6";
|
||
return {
|
||
"functionId": iiI1I11i,
|
||
"body": iI1lll11,
|
||
"build": iIi1ll1i,
|
||
"client": lI1Il1ll,
|
||
"clientVersion": IIIiI1II,
|
||
"d_brand": "apple",
|
||
"d_model": "iPhone" + i1iiii1I,
|
||
"st": lillilil,
|
||
"sv": IliIIi1I,
|
||
"sign": iIi1I1Ii,
|
||
"ef": 1,
|
||
"ep": JSON.stringify(lI1ll11i),
|
||
"eid": lIi1lIi,
|
||
"joycious": 73,
|
||
"partner": "apple",
|
||
"lang": "zh_CN",
|
||
"networkType": "wifi",
|
||
"networklibtype": "JDNetworkBaseAF",
|
||
"ext": JSON.stringify({
|
||
"prstate": "0",
|
||
"pvcStu": "1"
|
||
}),
|
||
"uemps": "0-0-2"
|
||
};
|
||
}
|
||
static #generateRandomString(l1iII1ll, lIliIili = null) {
|
||
const il11I1Il = lIliIili == null ? "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" : lIliIili;
|
||
let I1ii1ilI = "";
|
||
for (let llliiIll = 0; llliiIll < l1iII1ll; llliiIll++) {
|
||
const IIiilIil = Math.floor(Math.random() * il11I1Il.length);
|
||
I1ii1ilI += il11I1Il.charAt(IIiilIil);
|
||
}
|
||
return I1ii1ilI;
|
||
}
|
||
static #base64Encode(i11Ii1Il) {
|
||
const i1i111I = "KLMNOPQRSTABCDEFGHIJUVWXYZabcdopqrstuvwxefghijklmnyz0123456789+/",
|
||
li1I1lIl = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
|
||
lliliiIi = iiliilll.encode(i11Ii1Il),
|
||
liilIII = lliliiIi.split("").map(II1llI1l => {
|
||
const i1I1lIll = i1i111I.indexOf(II1llI1l);
|
||
return i1I1lIll !== -1 ? li1I1lIl[i1I1lIll] : II1llI1l;
|
||
}).join("");
|
||
return liilIII;
|
||
}
|
||
}
|
||
class I11I1l1I {
|
||
constructor(lIIlIlII) {
|
||
const lllii1ii = {
|
||
...lIIlIlII,
|
||
"retryStrategy"(iIli111I) {
|
||
return null;
|
||
},
|
||
"maxRetriesPerRequest": 1
|
||
};
|
||
this.redis = new I1lli11i(lllii1ii);
|
||
this.expiryCache = new Set();
|
||
this.redis.on("error", il111ilI => {
|
||
iIl1IlI1.redisConnect = 2;
|
||
});
|
||
this.connected = new Promise((Illl1, iIii1i1I) => {
|
||
this.redis.on("ready", Illl1);
|
||
this.redis.on("error", Illl1);
|
||
});
|
||
}
|
||
async ["set"](Il11I11i, iilillil, i11ilIIi) {
|
||
if (i11ilIIi) {
|
||
await this.redis.set(Il11I11i, iilillil, "EX", i11ilIIi);
|
||
} else {
|
||
await this.redis.set(Il11I11i, iilillil);
|
||
}
|
||
}
|
||
async ["get"](liIliiIi) {
|
||
return await this.redis.get(liIliiIi);
|
||
}
|
||
async ["del"](ilIi1llI) {
|
||
return await this.redis.del(ilIi1llI);
|
||
}
|
||
async ["exists"](lII1Ii1) {
|
||
return await this.redis.exists(lII1Ii1);
|
||
}
|
||
async ["incr"](lllili1) {
|
||
return await this.redis.incr(lllili1);
|
||
}
|
||
async ["decr"](lI11l1il) {
|
||
return await this.redis.decr(lI11l1il);
|
||
}
|
||
async ["expire"](iilIIlI1, l1i1liii) {
|
||
return await this.redis.expire(iilIIlI1, l1i1liii);
|
||
}
|
||
async ["ttl"](IIIIi1lI) {
|
||
return await this.redis.ttl(IIIIi1lI);
|
||
}
|
||
async ["hset"](iiIIIIIi, iIlli111, iIIiil1l) {
|
||
return await this.redis.hset(iiIIIIIi, iIlli111, iIIiil1l);
|
||
}
|
||
async ["hget"](lll1IlII, lilll1li) {
|
||
return await this.redis.hget(lll1IlII, lilll1li);
|
||
}
|
||
async ["hdel"](il1i1lli, lI1liIiI) {
|
||
return await this.redis.hdel(il1i1lli, lI1liIiI);
|
||
}
|
||
async ["hgetall"](i11illii) {
|
||
return await this.redis.hgetall(i11illii);
|
||
}
|
||
async ["rpush"](I11IIliI, iIlI1II1) {
|
||
return await this.redis.rpush(I11IIliI, iIlI1II1);
|
||
}
|
||
async ["lpush"](I11iIlIi, l1lIi11) {
|
||
return await this.redis.lpush(I11iIlIi, l1lIi11);
|
||
}
|
||
async ["lpop"](i1II) {
|
||
return await this.redis.lpop(i1II);
|
||
}
|
||
async ["rpop"](I1lIi1ll) {
|
||
return await this.redis.rpop(I1lIi1ll);
|
||
}
|
||
async ["lrange"](I1I1l1I1, Ill1iili, IIi1) {
|
||
return await this.redis.lrange(I1I1l1I1, Ill1iili, IIi1);
|
||
}
|
||
async ["llen"](i1li1iiI) {
|
||
return await this.redis.llen(i1li1iiI);
|
||
}
|
||
async ["quit"]() {
|
||
return await this.redis.quit();
|
||
}
|
||
async ["sadd"](iii1l1ii, il11i11l, liI1iii1) {
|
||
const iIiIlIi1 = await this.redis.sadd(iii1l1ii, il11i11l);
|
||
return liI1iii1 && !this.expiryCache.has(iii1l1ii) && (await this.redis.expire(iii1l1ii, liI1iii1), this.expiryCache.add(iii1l1ii)), iIiIlIi1;
|
||
}
|
||
async ["sismember"](iIlIiIII, l11Il1Ii) {
|
||
return await this.redis.sismember(iIlIiIII, l11Il1Ii);
|
||
}
|
||
}
|
||
class IlIIlIli {
|
||
static ["activity"] = {};
|
||
static ["msg"] = [];
|
||
static ["proxyIp"] = null;
|
||
static ["proxyIpTime"] = null;
|
||
static ["addressList"] = [];
|
||
static ["isSaveAddress"] = false;
|
||
static ["redis"] = null;
|
||
constructor(II1IlI1I, iliIIIi1) {
|
||
Object.assign(this, Iii1iI1i.activity);
|
||
this.cookie = iliIIIi1;
|
||
this.savedCookies = {};
|
||
this.ticket = "";
|
||
this.index = II1IlI1I;
|
||
this.pin = this.userPin(iliIIIi1);
|
||
this.remarks = "";
|
||
this.tg_id = "";
|
||
this.address = null;
|
||
this.phoneInfo = Iiii1li1.generatePhoneInfo();
|
||
this.ua = this.userAgent();
|
||
this.headers = {
|
||
"Cookie": iliIIIi1,
|
||
"User-Agent": this.ua.app
|
||
};
|
||
this.retryCount = iIl1IlI1.retryCount;
|
||
this.proxyRetryCount = iIl1IlI1.proxyRetryCount;
|
||
this.proxyIp = "";
|
||
this.proxyIpTime = null;
|
||
this.lzkjOpenCard = false;
|
||
this.addressInit();
|
||
this.defenseUrls = [];
|
||
this.sendMsg = [];
|
||
this.prizeList = [];
|
||
this.canNotOpenCard = false;
|
||
this.needHelp = true;
|
||
this.canHelp = true;
|
||
this.isUse = false;
|
||
this.isInviter = false;
|
||
this.onlyInvite = false;
|
||
this.openCardTypes = iIl1IlI1.openCardTypes;
|
||
this.otherHeaders = {};
|
||
this.h5st = new l11i111(this.headers["User-Agent"], this.pin);
|
||
}
|
||
["reseInviteStatus"]() {
|
||
this.isUse = false;
|
||
this.canHelp = true;
|
||
}
|
||
["reseCookieStatus"]() {
|
||
this.canHelp = false;
|
||
this.needHelp = false;
|
||
this.isUse = true;
|
||
}
|
||
["reseInveterStatus"]() {
|
||
this.isInviter = false;
|
||
}
|
||
["getActivityId"](l1iII11 = this.activityUrl) {
|
||
const liIi1Il1 = new URLSearchParams(new URL(l1iII11).search),
|
||
IIIll1li = ["activityId", "giftId", "actId", "token", "code", "a", "id"];
|
||
let i1Iillil = "";
|
||
for (let I1iIlIIi of IIIll1li) {
|
||
i1Iillil = liIi1Il1.get(I1iIlIIi);
|
||
if (i1Iillil) break;
|
||
}
|
||
return !i1Iillil && (i1Iillil = this.match(/\/(dz[a-zA-Z0-9]{28,32})/, l1iII11)), this.activityId = i1Iillil, this.activityId;
|
||
}
|
||
["log"](...I1Il1lI) {
|
||
iIl1IlI1.logger.info("main |" + ("" + (this.index + 1)).padEnd(Iii1iI1i.paddedStringEndCount, " ") + "|" + (this.remarks || this.pin) + "|", ...I1Il1lI);
|
||
}
|
||
["debug"](...lI1illiI) {
|
||
iIl1IlI1.logger.debug("main |" + ("" + (this.index + 1)).padEnd(Iii1iI1i.paddedStringEndCount, " ") + "|" + (this.remarks || this.pin) + "|", ...lI1illiI);
|
||
}
|
||
["error"](...I11I1) {
|
||
iIl1IlI1.logger.error("main |" + ("" + (this.index + 1)).padEnd(Iii1iI1i.paddedStringEndCount, " ") + "|" + (this.remarks || this.pin) + "|", ...I11I1);
|
||
}
|
||
["warn"](...l1i11II1) {
|
||
iIl1IlI1.logger.warn("main |" + ("" + (this.index + 1)).padEnd(Iii1iI1i.paddedStringEndCount, " ") + "|" + (this.remarks || this.pin) + "|", ...l1i11II1);
|
||
}
|
||
["putMsg"](iIIi1l1l, il1IlIl1 = false) {
|
||
if (!iIIi1l1l) return;
|
||
iIIi1l1l += "";
|
||
this.log(iIIi1l1l);
|
||
let illi1iii = [
|
||
[" ", ""],
|
||
["豆", "豆💰"],
|
||
["红包", "红包🧧"],
|
||
["E卡", "E卡💎"],
|
||
["优惠券", "券"],
|
||
["东券", "券"],
|
||
["店铺", ""],
|
||
["恭喜", ""],
|
||
["获得", ""],
|
||
["空气", ""],
|
||
["已领取", ""],
|
||
["没有抽奖次数", ""],
|
||
["已达到单日最大抽奖次数", ""],
|
||
["无抽奖次数", ""],
|
||
["当天只能签到一次", ""],
|
||
["活动太火爆,还是去买买买吧", ""],
|
||
["登录失败", ""],
|
||
["黑名单", ""],
|
||
["签满7天后不能再参加了", ""],
|
||
["您的积分不足!", ""],
|
||
["积分不足", ""],
|
||
["已达到活动期间最大抽奖次数", ""],
|
||
["已超过最大抽奖次数,不允许再进行抽奖!", ""],
|
||
];
|
||
for (let lIi1lilI of illi1iii) {
|
||
iIIi1l1l = iIIi1l1l.replace(lIi1lilI[0], lIi1lilI[1]);
|
||
}
|
||
if (!iIIi1l1l) return;
|
||
this.sendMsg.push(iIIi1l1l);
|
||
}
|
||
["union"](iIliiiil, iIlll11I) {
|
||
return iIliiiil.concat(iIlll11I.filter(I1iIlIll => !iIliiiil.includes(I1iIlIll)));
|
||
}
|
||
["intersection"](l1II1i11, ll1I1i1I) {
|
||
return l1II1i11.filter(ii1l1ii => ll1I1i1I.includes(ii1l1ii));
|
||
}
|
||
["different"](iIi1iII, iIi1li1l) {
|
||
return iIi1iII.concat(iIi1li1l).filter(Illl1ili => iIi1iII.includes(Illl1ili) && !iIi1li1l.includes(Illl1ili));
|
||
}
|
||
["unique"](iIiIl1i) {
|
||
return Array.from(new Set(iIiIl1i));
|
||
}
|
||
["formatDate"](i11ilI11, IIlIlli) {
|
||
return i1I1IlI1(typeof i11ilI11 === "object" ? i11ilI11 : new Date(typeof i11ilI11 === "string" ? i11ilI11 * 1 : i11ilI11), IIlIlli || "yyyy-MM-dd");
|
||
}
|
||
["dateStringToTimestamp"](I1lliIlI, i1il1111) {
|
||
const lIiiillI = parse(I1lliIlI, i1il1111 || "yyyy-MM-dd HH:mm", new Date()),
|
||
i11Iil11 = lIiiillI.getTime();
|
||
return i11Iil11;
|
||
}
|
||
["match"](II1lIlIi, lI1ilIIl) {
|
||
II1lIlIi = II1lIlIi instanceof Array ? II1lIlIi : [II1lIlIi];
|
||
for (let I1iiiIi1 of II1lIlIi) {
|
||
const I1li1lli = I1iiiIi1.exec(lI1ilIIl);
|
||
if (I1li1lli) {
|
||
const l1iIiIIl = I1li1lli.length;
|
||
if (l1iIiIIl === 1) return I1li1lli; else {
|
||
if (l1iIiIIl === 2) {
|
||
return I1li1lli[1];
|
||
} else {
|
||
const iI11iIIi = [];
|
||
for (let Iill1il1 = 1; Iill1il1 < l1iIiIIl; Iill1il1++) {
|
||
iI11iIIi.push(I1li1lli[Iill1il1]);
|
||
}
|
||
return iI11iIIi;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return "";
|
||
}
|
||
["matchAll"](ili11IIi, Illi111l) {
|
||
ili11IIi = ili11IIi instanceof Array ? ili11IIi : [ili11IIi];
|
||
let iiI11III,
|
||
l1IiIii1 = [];
|
||
for (let IiIlli1I of ili11IIi) {
|
||
while ((iiI11III = IiIlli1I.exec(Illi111l)) != null) {
|
||
let iiIiIl1i = iiI11III.length;
|
||
if (iiIiIl1i === 1) l1IiIii1.push(iiI11III); else {
|
||
if (iiIiIl1i === 2) l1IiIii1.push(iiI11III[1]); else {
|
||
let iliIiIil = [];
|
||
for (let IiIlllI1 = 1; IiIlllI1 < iiIiIl1i; IiIlllI1++) {
|
||
iliIiIil.push(iiI11III[IiIlllI1]);
|
||
}
|
||
l1IiIii1.push(iliIiIil);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return l1IiIii1;
|
||
}
|
||
["haskey"](l1lI11ii, Il1IIlil) {
|
||
const IlliI1l1 = Il1IIlil.split(".");
|
||
let l1II111l = l1lI11ii;
|
||
for (const i111lIi1 of IlliI1l1) {
|
||
if (l1II111l && l1II111l.hasOwnProperty(i111lIi1)) l1II111l = l1II111l[i111lIi1]; else return undefined;
|
||
}
|
||
return l1II111l;
|
||
}
|
||
["parseJSON"](lliiiIi) {
|
||
try {
|
||
const IiiIlili = JSON.parse(lliiiIi);
|
||
return IiiIlili;
|
||
} catch (l1iiliil) {
|
||
return false;
|
||
}
|
||
}
|
||
["json2Str"](iIIl11i) {
|
||
try {
|
||
return JSON.stringify(iIIl11i);
|
||
} catch (ilI1I1l) {
|
||
return "";
|
||
}
|
||
}
|
||
["str2Json"](i11I1Iil) {
|
||
try {
|
||
return JSON.parse(i11I1Iil);
|
||
} catch (iIiiliii) {
|
||
return i11I1Iil;
|
||
}
|
||
}
|
||
["textToHtml"](IIIlIiI1) {
|
||
return lIl1ii.load(IIIlIiI1);
|
||
}
|
||
["encodeChineseParamsInUrl"](li1ilIlI) {
|
||
const Il1lI11l = lIIII11l.parse(li1ilIlI, true);
|
||
let ll1liii1 = Il1lI11l.query || {};
|
||
if (typeof ll1liii1 !== "object" || Array.isArray(ll1liii1)) {
|
||
ll1liii1 = {};
|
||
}
|
||
const i1ilIII = {};
|
||
Object.keys(ll1liii1).forEach(lIlli111 => {
|
||
const Illli = ll1liii1[lIlli111];
|
||
if (typeof Illli === "string" && /[\u4e00-\u9fa5]/.test(Illli)) i1ilIII[lIlli111] = encodeURIComponent(Illli); else {
|
||
i1ilIII[lIlli111] = Illli;
|
||
}
|
||
});
|
||
const il1IIl11 = Object.keys(i1ilIII).map(lii11lIi => encodeURIComponent(lii11lIi) + "=" + i1ilIII[lii11lIi]).join("&");
|
||
let I1ll11I = Il1lI11l.protocol + "//" + Il1lI11l.host + Il1lI11l.pathname;
|
||
if (il1IIl11) {
|
||
I1ll11I += "?" + il1IIl11;
|
||
}
|
||
return I1ll11I;
|
||
}
|
||
["encodeChineseParams"](lIIl11i) {
|
||
const II111iIi = new URL(lIIl11i),
|
||
II1i111i = new URLSearchParams(II111iIi.search);
|
||
for (const [il11I1l, i1lI1] of II1i111i) {
|
||
/[\u4e00-\u9fa5]/.test(i1lI1) && II1i111i.set(il11I1l, encodeURIComponent(i1lI1));
|
||
}
|
||
return II111iIi.search = II1i111i.toString(), II111iIi.toString();
|
||
}
|
||
["sleep"](iIiIlll1, i1i1IIli) {
|
||
let I11IlIll = iIiIlll1;
|
||
if (i1i1IIli !== undefined) {
|
||
I11IlIll = Math.floor(Math.random() * (i1i1IIli - iIiIlll1 + 1)) + iIiIlll1;
|
||
}
|
||
return new Promise(IIliIIil => setTimeout(IIliIIil, I11IlIll));
|
||
}
|
||
["wait"](llli111l, liIIi1l) {
|
||
if (llli111l < 0) {
|
||
return;
|
||
}
|
||
if (liIIi1l) {
|
||
return new Promise(Ii1iIil => setTimeout(Ii1iIil, this.random(llli111l, liIIi1l)));
|
||
} else {
|
||
return new Promise(lI1I111I => setTimeout(lI1I111I, llli111l));
|
||
}
|
||
}
|
||
["stop"]() {
|
||
this.immediatelyExit();
|
||
throw new i1I1IiII();
|
||
}
|
||
async ["immediatelyExit"]() {
|
||
if (iIl1IlI1.immediatelyExit === 1) {
|
||
while (IlIIlIli.isSaveAddress) {
|
||
await this.sleep(1000);
|
||
}
|
||
process.exit(0);
|
||
}
|
||
}
|
||
["exit"]() {
|
||
throw new iiiIIIll();
|
||
}
|
||
["random"](I1l1lIli, iliI11ii) {
|
||
return Math.min(Math.floor(I1l1lIli + Math.random() * (iliI11ii - I1l1lIli)), iliI11ii);
|
||
}
|
||
["randomNum"](l1l1l1II) {
|
||
l1l1l1II = l1l1l1II || 32;
|
||
let lI1Ii1li = "0123456789",
|
||
IiIlI = lI1Ii1li.length,
|
||
IIII1Il = "";
|
||
for (let iII1lll = 0; iII1lll < l1l1l1II; iII1lll++) {
|
||
IIII1Il += lI1Ii1li.charAt(Math.floor(Math.random() * IiIlI));
|
||
}
|
||
return IIII1Il;
|
||
}
|
||
["randomArray"](IIiIilli, llIiiI) {
|
||
llIiiI = llIiiI || IIiIilli.length;
|
||
let IIlll1ii = IIiIilli.slice(0),
|
||
lllilI1l = IIiIilli.length,
|
||
il1iIl1I = lllilI1l - llIiiI,
|
||
I1111I1i,
|
||
l1lillIi;
|
||
while (lllilI1l-- > il1iIl1I) {
|
||
l1lillIi = Math.floor((lllilI1l + 1) * Math.random());
|
||
I1111I1i = IIlll1ii[l1lillIi];
|
||
IIlll1ii[l1lillIi] = IIlll1ii[lllilI1l];
|
||
IIlll1ii[lllilI1l] = I1111I1i;
|
||
}
|
||
return IIlll1ii.slice(il1iIl1I);
|
||
}
|
||
["timestamp"]() {
|
||
return Date.now();
|
||
}
|
||
["getMilliSecondsUntilTomorrow"]() {
|
||
let li1IilII = new Date(),
|
||
IlillII = new Date();
|
||
IlillII.setHours(24, 0, 0, 0);
|
||
let I1llI11 = IlillII - li1IilII;
|
||
return I1llI11;
|
||
}
|
||
["getQueryString"](IiI11Ili, IIllIll1) {
|
||
let lllIlll1 = new RegExp("(^|[&?])" + IIllIll1 + "=([^&]*)(&|$)"),
|
||
ii1I1i1I = IiI11Ili.match(lllIlll1);
|
||
if (ii1I1i1I != null) return unescape(ii1I1i1I[2]);
|
||
return "";
|
||
}
|
||
["ensureDirectoryExistence"](I1i1l1lI) {
|
||
!l1I11II1.existsSync(I1i1l1lI) && (this.ensureDirectoryExistence(ilI1il.dirname(I1i1l1lI)), l1I11II1.mkdirSync(I1i1l1lI));
|
||
}
|
||
["readFileSync"](i111l1Il) {
|
||
try {
|
||
return l1I11II1.readFileSync(i111l1Il, "utf-8").toString();
|
||
} catch (lliiliI) {
|
||
return "";
|
||
}
|
||
}
|
||
["writeFileSync"](IiiIiil1, Ii1I1li, IlIiiIl1) {
|
||
const ll1iIi1I = ilI1il.join(__dirname, IiiIiil1);
|
||
this.ensureDirectoryExistence(ll1iIi1I);
|
||
const lI1il111 = ilI1il.join(ll1iIi1I, Ii1I1li);
|
||
try {
|
||
l1I11II1.writeFileSync(lI1il111, IlIiiIl1, "utf-8");
|
||
} catch (l1l1il1l) {
|
||
this.log("写入文件时出错:", l1l1il1l);
|
||
}
|
||
}
|
||
async ["writeFileSyncByLock"](IiIi1liI, iiliIl1l, ii1iil11) {
|
||
const llilIl = ilI1il.join(__dirname, IiIi1liI),
|
||
l1iiiI1I = ilI1il.join(llilIl, iiliIl1l);
|
||
try {
|
||
await writeFileAsync(l1iiiI1I, ii1iil11);
|
||
} catch (II1IIiII) {
|
||
this.log("写入文件时出错:", II1IIiII);
|
||
}
|
||
}
|
||
["readYamlSync"](iii1iI1l) {
|
||
try {
|
||
return llillIi1.parse(this.readFileSync(iii1iI1l)) ?? {};
|
||
} catch (liliIliI) {
|
||
return {};
|
||
}
|
||
}
|
||
["writeYamlSync"](IIii1, Ii1li1lI, ll1lli1l) {
|
||
try {
|
||
this.writeFileSync(IIii1, Ii1li1lI, llillIi1.stringify(ll1lli1l));
|
||
} catch (IIiiIiii) {
|
||
this.log("写入文件时出错:", IIiiIiii);
|
||
}
|
||
}
|
||
["appendFileSync"](l1li1l, iiliIlII, II1l111) {
|
||
const lI1IIi1l = ilI1il.join(__dirname, l1li1l);
|
||
this.ensureDirectoryExistence(lI1IIi1l);
|
||
const IIlI1Ii1 = ilI1il.join(lI1IIi1l, iiliIlII);
|
||
try {
|
||
l1I11II1.appendFileSync(IIlI1Ii1, II1l111, "utf-8");
|
||
} catch (ililIIl1) {
|
||
this.log("写入文件时出错:", ililIIl1);
|
||
}
|
||
}
|
||
async ["writeLongCache"](IIl1llii = this.activityId, iiiI1lli = this.pin, ll1i1ll = "list") {
|
||
try {
|
||
if (IlIIlIli.redis) {
|
||
ll1i1ll.toLowerCase() === "list" ? await IlIIlIli.redis.sadd(IIl1llii, iiiI1lli) : await IlIIlIli.redis.set(IIl1llii, iiiI1lli);
|
||
return;
|
||
}
|
||
this.appendFileSync("cache/" + Iii1iI1i.envInfo.runName, "" + IIl1llii, iiiI1lli + "\n");
|
||
} catch (II1lI1I) {
|
||
if (II1lI1I instanceof iiiIIIll || II1lI1I instanceof i1I1IiII) throw II1lI1I;
|
||
this.log("writeLongCache:", II1lI1I.message);
|
||
}
|
||
}
|
||
async ["writeDayCache"](i1Iii111 = this.activityId, Ii1IIilI = this.pin) {
|
||
try {
|
||
if (IlIIlIli.redis) {
|
||
await IlIIlIli.redis.sadd(i1Iii111, Ii1IIilI, Math.floor(this.getMilliSecondsUntilTomorrow() / 1000) - 5);
|
||
return;
|
||
}
|
||
this.appendFileSync("cache/" + Iii1iI1i.envInfo.runName, i1Iii111 + "_" + this.formatDate(this.timestamp()), Ii1IIilI + "\n");
|
||
} catch (IiiiII) {
|
||
if (IiiiII instanceof iiiIIIll || IiiiII instanceof i1I1IiII) throw IiiiII;
|
||
this.log("writeDayCache:", IiiiII.message);
|
||
}
|
||
}
|
||
async ["readDayCache"](l11IlIl1 = this.activityId) {
|
||
try {
|
||
if (IlIIlIli.redis) {
|
||
return await IlIIlIli.redis.get(l11IlIl1);
|
||
}
|
||
if (IlIIlIli.activity["dayCache_" + l11IlIl1 + "_" + this.formatDate(this.timestamp())]) return IlIIlIli?.["activity"]?.["dayCache_" + l11IlIl1 + "_" + this.formatDate(this.timestamp())];
|
||
let IiIiI11I = this.readFileSync("cache/" + Iii1iI1i.envInfo.runName + "/" + l11IlIl1 + "_" + this.formatDate(this.timestamp())).split("\n").filter(lIIi1i1 => lIIi1i1 && lIIi1i1.trim());
|
||
return IlIIlIli.activity["dayCache_" + l11IlIl1 + "_" + this.formatDate(this.timestamp())] = IiIiI11I, IlIIlIli?.["activity"]?.["dayCache_" + l11IlIl1 + "_" + this.formatDate(this.timestamp())];
|
||
} catch (i1l11Iii) {
|
||
if (i1l11Iii instanceof iiiIIIll || i1l11Iii instanceof i1I1IiII) throw i1l11Iii;
|
||
this.log("readLongCache:", i1l11Iii.message);
|
||
}
|
||
}
|
||
async ["readLongCache"](liiIil = this.activityId) {
|
||
try {
|
||
if (IlIIlIli.redis) return await IlIIlIli.redis.get(liiIil);
|
||
if (IlIIlIli.activity["longCache_" + liiIil]) return IlIIlIli?.["activity"]?.["longCache_" + liiIil];
|
||
let IiIiliI1 = this.readFileSync("cache/" + Iii1iI1i.envInfo.runName + "/" + liiIil).split("\n").filter(iIlIlIi => iIlIlIi && iIlIlIi.trim());
|
||
return IlIIlIli.activity["longCache_" + liiIil] = IiIiliI1, IlIIlIli?.["activity"]?.["longCache_" + liiIil];
|
||
} catch (IiIlliI1) {
|
||
if (IiIlliI1 instanceof iiiIIIll || IiIlliI1 instanceof i1I1IiII) throw IiIlliI1;
|
||
this.log("readLongCache:", IiIlliI1.message);
|
||
}
|
||
}
|
||
async ["hitCache"](i11i1ili = this.activityId, Iilil1ii = this.pin, liIilili = "hit cache", l1l1iI1i = false) {
|
||
try {
|
||
if (IlIIlIli.redis) {
|
||
if (await IlIIlIli.redis.sismember(i11i1ili, Iilil1ii)) return l1l1iI1i ? this.log(liIilili) : this.putMsg(liIilili), this.exit();
|
||
return;
|
||
}
|
||
if (IlIIlIli.activity["longCache_" + i11i1ili]) {
|
||
if (IlIIlIli?.["activity"]?.["longCache_" + i11i1ili]?.["includes"](Iilil1ii)) return l1l1iI1i ? this.log(liIilili) : this.putMsg(liIilili), this.exit();
|
||
return;
|
||
}
|
||
let IlliIi1 = this.readFileSync("cache/" + Iii1iI1i.envInfo.runName + "/" + i11i1ili).split("\n").filter(iiIIil1I => iiIIil1I && iiIIil1I.trim());
|
||
IlIIlIli.activity["longCache_" + i11i1ili] = IlliIi1;
|
||
if (IlIIlIli?.["activity"]?.["longCache_" + i11i1ili]?.["includes"](Iilil1ii)) return l1l1iI1i ? this.log(liIilili) : this.putMsg(liIilili), this.exit();
|
||
} catch (iiliiiI1) {
|
||
if (iiliiiI1 instanceof iiiIIIll || iiliiiI1 instanceof i1I1IiII) throw iiliiiI1;
|
||
this.log("hitCache:", iiliiiI1.message);
|
||
}
|
||
}
|
||
async ["hitDayCache"](iiI111i = this.activityId, lIIl1l1l = this.pin, i11IIIlI = "hit cache", I1IIIlil = false, I1IIIi11 = true) {
|
||
try {
|
||
if (IlIIlIli.redis) {
|
||
if (await IlIIlIli.redis.sismember(iiI111i, lIIl1l1l)) return I1IIIlil ? this.log(i11IIIlI) : this.putMsg(i11IIIlI), I1IIIi11 && this.exit(), true;
|
||
return false;
|
||
}
|
||
if (IlIIlIli.activity["dayCache_" + iiI111i + "_" + this.formatDate(this.timestamp())]) {
|
||
if (IlIIlIli?.["activity"]?.["dayCache_" + iiI111i + "_" + this.formatDate(this.timestamp())]?.["includes"](lIIl1l1l)) return I1IIIlil ? this.log(i11IIIlI) : this.putMsg(i11IIIlI), I1IIIi11 && this.exit(), true;
|
||
return false;
|
||
}
|
||
let Il1i1111 = this.readFileSync("cache/" + Iii1iI1i.envInfo.runName + "/" + iiI111i + "_" + this.formatDate(this.timestamp())).split("\n").filter(liiIIill => liiIIill && liiIIill.trim());
|
||
IlIIlIli.activity["dayCache_" + iiI111i + "_" + this.formatDate(this.timestamp())] = Il1i1111;
|
||
if (IlIIlIli?.["activity"]?.["dayCache_" + iiI111i + "_" + this.formatDate(this.timestamp())]?.["includes"](lIIl1l1l)) {
|
||
return I1IIIlil ? this.log(i11IIIlI) : this.putMsg(i11IIIlI), I1IIIi11 && this.exit(), true;
|
||
}
|
||
return false;
|
||
} catch (iIl1Ii1I) {
|
||
if (iIl1Ii1I instanceof iiiIIIll || iIl1Ii1I instanceof i1I1IiII) throw iIl1Ii1I;
|
||
this.log("hitCache:", iIl1Ii1I.message);
|
||
}
|
||
}
|
||
async ["writeLongCacheByStop"]() {
|
||
try {
|
||
if (IlIIlIli.redis) return this.activityId && (await IlIIlIli.redis.sadd("activity_stop", this.activityId));
|
||
this.appendFileSync("cache/stop", "id", this.activityId + "\n");
|
||
} catch (l111Iili) {
|
||
if (l111Iili instanceof iiiIIIll || l111Iili instanceof i1I1IiII) throw l111Iili;
|
||
this.log("writeLongCacheByStop:", l111Iili.message);
|
||
}
|
||
}
|
||
["readLongCacheByStop"]() {
|
||
let lIli11i = this.readFileSync("cache/stop/id").split("\n").filter(ilIii1lI => ilIii1lI && ilIii1lI.trim());
|
||
IlIIlIli.activity.stopIds = lIli11i;
|
||
}
|
||
["md5"](lliIIii1) {
|
||
const ilIiI1l1 = II11il11.MD5(lliIIii1);
|
||
return ilIiI1l1.toString(II11il11.enc.Hex);
|
||
}
|
||
["hmacSHA256"](i1l111i, l1Ii1i11) {
|
||
const llI1li1 = II11il11.HmacSHA256(l1Ii1i11, i1l111i);
|
||
return llI1li1.toString(II11il11.enc.Hex);
|
||
}
|
||
["hmacMD5"](II1lii1l, lIlIiIIi) {
|
||
const I11IliIi = II11il11.HmacMD5(lIlIiIIi, II1lii1l);
|
||
return I11IliIi.toString(II11il11.enc.Hex);
|
||
}
|
||
["rsaEncrypt"](I111lilI, llI1lIlI, lI11I1l1) {
|
||
I111lilI = "-----BEGIN PUBLIC KEY-----\n" + I111lilI + "\n-----END PUBLIC KEY-----";
|
||
const I11ili = new i111lii1(I111lilI);
|
||
I11ili.setOptions(llI1lIlI);
|
||
const ii11I1I = I11ili.encrypt(lI11I1l1, "base64");
|
||
return ii11I1I;
|
||
}
|
||
["encryptCrypto"](liIIIi, lIiIl1lI, i1lIliI1, iiiillli, llI1iI1, i111liII, l111i1i1 = false) {
|
||
return II11il11[liIIIi].encrypt(II11il11.enc.Utf8.parse(llI1iI1), II11il11.enc.Utf8.parse(i111liII), {
|
||
"mode": II11il11.mode[lIiIl1lI],
|
||
"padding": II11il11.pad[i1lIliI1],
|
||
"iv": II11il11.enc.Utf8.parse(iiiillli)
|
||
}).ciphertext.toString(l111i1i1 ? II11il11.enc.Hex : II11il11.enc.Base64);
|
||
}
|
||
["decryptCrypto"](iIl1lI1l, iI1ilil, IiliIl1l, Il111Ii1, IliiIiil, llllll1i, iIi1lilI = false) {
|
||
const lll1iIl = II11il11[iIl1lI1l].decrypt({
|
||
"ciphertext": iIi1lilI ? II11il11.enc.Hex.parse(IliiIiil) : II11il11.enc.Base64.parse(IliiIiil)
|
||
}, II11il11.enc.Utf8.parse(llllll1i), {
|
||
"iv": II11il11.enc.Utf8.parse(Il111Ii1),
|
||
"mode": II11il11.mode[iI1ilil],
|
||
"padding": II11il11.pad[IiliIl1l]
|
||
}).toString(II11il11.enc.Utf8);
|
||
return lll1iIl;
|
||
}
|
||
#base64Encode(iIi1II) {
|
||
const l1Iii1i1 = "KLMNOPQRSTABCDEFGHIJUVWXYZabcdopqrstuvwxefghijklmnyz0123456789+/",
|
||
lliliII = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
|
||
Ilili1Il = II11il11.enc.Utf8.parse(iIi1II),
|
||
III1IIl1 = II11il11.enc.Base64.stringify(Ilili1Il),
|
||
IIiiii1i = III1IIl1.split("").map(llllli1l => {
|
||
const illi1llI = l1Iii1i1.indexOf(llllli1l);
|
||
return illi1llI !== -1 ? lliliII[illi1llI] : llllli1l;
|
||
}).join("");
|
||
return IIiiii1i;
|
||
}
|
||
["generateStringArray"](lIl1ilIi, lllIIIIl) {
|
||
const Ii11ll1l = Array(lIl1ilIi).fill(lllIIIIl),
|
||
IIl1l1ii = Ii11ll1l.join("");
|
||
return IIl1l1ii;
|
||
}
|
||
["uuid"](Illl = 40) {
|
||
return i1l1ilIl(this.generateStringArray(Illl, "x"));
|
||
}
|
||
["userAgent"]() {
|
||
const {
|
||
screen: iillli1I,
|
||
tf: iii1I1i,
|
||
iv: Ili1i1l1,
|
||
clientVersion: lIi1lil,
|
||
build: lillIIIi,
|
||
uuid: IiIi1i1i
|
||
} = this.phoneInfo,
|
||
lIIil1l = {
|
||
"ciphertype": 5,
|
||
"cipher": {
|
||
"ud": this.#base64Encode(IiIi1i1i),
|
||
"sv": this.#base64Encode(iii1I1i),
|
||
"iad": ""
|
||
},
|
||
"ts": Date.now(),
|
||
"hdid": "JM9F1ywUPwflvMIpYPok0tt5k9kW4ArJEU3lfLhxBqw=",
|
||
"version": "1.0.3",
|
||
"appname": "com.360buy.jdmobile",
|
||
"ridx": -1
|
||
};
|
||
return {
|
||
"jd4": "JD4iPhone/" + lillIIIi + "%20(iPhone;%20iOS;%20Scale/3.00);jdmall;iphone;version/" + lIi1lil + ";build/" + lillIIIi + ";network/wifi;screen/" + iillli1I.replace("*", "x") + ";os/" + Ili1i1l1,
|
||
"app": "jdapp;iPhone;" + lIi1lil + ";;;M/5.0;appBuild/" + lillIIIi + ";jdSupportDarkMode/1;ef/1;ep/" + encodeURIComponent(JSON.stringify(lIIil1l)) + ";Mozilla/5.0 (iPhone; CPU iPhone OS " + Ili1i1l1.replaceAll(".", "_") + " like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1;"
|
||
};
|
||
}
|
||
["jdJE"]() {
|
||
const {
|
||
build: l1iIiiil
|
||
} = this.phoneInfo,
|
||
lli1IIi1 = {
|
||
"ciphertype": 5,
|
||
"cipher": {
|
||
"pin": this.#base64Encode(this.pin)
|
||
},
|
||
"ts": parseInt(this.timestamp() / 1000),
|
||
"hdid": "JM9F1ywUPwflvMIpYPok0tt5k9kW4ArJEU3lfLhxBqw=",
|
||
"version": "1.0.3",
|
||
"appname": "com.360buy.jdmobile",
|
||
"ridx": -1
|
||
},
|
||
l111IIIi = {
|
||
"ciphertype": 5,
|
||
"cipher": {
|
||
"User-Agent": "JD4iPhone/" + l1iIiiil + "%20(iPhone;%20iOS;%20Scale/3.00)"
|
||
},
|
||
"ts": parseInt(this.timestamp() / 1000),
|
||
"hdid": "JM9F1ywUPwflvMIpYPok0tt5k9kW4ArJEU3lfLhxBqw=",
|
||
"version": "1.0.3",
|
||
"appname": "com.360buy.jdmobile",
|
||
"ridx": -1
|
||
};
|
||
return {
|
||
"j-e-c": encodeURIComponent(JSON.stringify(lli1IIi1)),
|
||
"j-e-h": encodeURIComponent(JSON.stringify(l111IIIi))
|
||
};
|
||
}
|
||
["userPin"](l1liI1i = this.cookie) {
|
||
if (!l1liI1i) {
|
||
return;
|
||
}
|
||
const Iiil1i = l1liI1i.split(";");
|
||
for (const Il1lii1l of Iiil1i) {
|
||
const [il1il11i, iiIIl1] = Il1lii1l.split("=");
|
||
if (il1il11i === "pt_pin") return iiIIl1;
|
||
}
|
||
return null;
|
||
}
|
||
["getLastSegmentOfUrl"](iIl1iI1) {
|
||
try {
|
||
if (!iIl1iI1) return null;
|
||
const IlliiiIl = new URL(iIl1iI1),
|
||
IiliII1l = IlliiiIl.pathname,
|
||
Ili1l1I1 = IiliII1l.substring(IiliII1l.lastIndexOf("/") + 1);
|
||
return Ili1l1I1;
|
||
} catch (llIilil1) {
|
||
return null;
|
||
}
|
||
}
|
||
["getCookieByName"](l1iiIi) {
|
||
return this.savedCookies[l1iiIi];
|
||
}
|
||
["handleSetCookieHeaders"](il111IIi) {
|
||
let iIllIiII = {};
|
||
const IIiiIil = il111IIi["set-cookie"];
|
||
if (IIiiIil) {
|
||
IIiiIil.forEach(i1lilIii => {
|
||
const li1111ll = i1lilIii.match(/([^=]+)(?:=([^;]*))?/);
|
||
if (li1111ll) {
|
||
const II1iIIii = li1111ll[1].trim(),
|
||
l11I11i = li1111ll[2] ? li1111ll[2].trim() : "";
|
||
iIllIiII[II1iIIii] = l11I11i;
|
||
}
|
||
});
|
||
}
|
||
this.savedCookies = {
|
||
...this.savedCookies,
|
||
...iIllIiII
|
||
};
|
||
this.ticket = "";
|
||
Object.entries(this.savedCookies).forEach(([II1I1lII, liII1111]) => {
|
||
this.ticket += II1I1lII + "=" + liII1111 + ";";
|
||
});
|
||
}
|
||
#handleHeaders(lIIIi1II) {
|
||
if (this.mode === "hdb") {
|
||
if (!lIIIi1II._s) return;
|
||
let IiII1l1i = {
|
||
"nonce": lIIIi1II._nonce ?? "",
|
||
"s": lIIIi1II._s ?? "",
|
||
"ts": lIIIi1II._ts ?? ""
|
||
};
|
||
this.otherHeaders = {
|
||
...this.otherHeaders,
|
||
...IiII1l1i
|
||
};
|
||
}
|
||
}
|
||
["request"](l1III11) {
|
||
const l11il1i1 = {
|
||
"method": "get",
|
||
"timeout": 20000
|
||
},
|
||
Ill1i = Object.assign({}, l11il1i1, l1III11);
|
||
return new Promise((Illll1l1, il1llIII) => {
|
||
I1II1lIl(Ill1i).then(lIIl11Ii => {
|
||
const Iii1lI1 = lIIl11Ii.data,
|
||
I1iIIill = lIIl11Ii.headers;
|
||
Illll1l1({
|
||
"data": Iii1lI1,
|
||
"headers": I1iIIill
|
||
});
|
||
}).catch(iiiIllll => {
|
||
il1llIII(iiiIllll);
|
||
});
|
||
});
|
||
}
|
||
async #checkProxy(l1ii1l1i) {
|
||
try {
|
||
return await I1II1lIl({
|
||
"url": this.activityUrl || "https://www.jd.com",
|
||
"headers": {
|
||
"User-Agent": this.ua.app
|
||
},
|
||
"httpsAgent": l1ii1l1i,
|
||
"timeout": 4000
|
||
}), true;
|
||
} catch (IllililI) {
|
||
return false;
|
||
}
|
||
}
|
||
async #getProxyIp(l1IIllII = 10) {
|
||
if (!Iii1iI1i.proxy.proxyState) return null;
|
||
if (iIl1IlI1.wxProxyMode === 1) {
|
||
if (IlIIlIli.proxyIp && IlIIlIli.proxyIpTime + iIl1IlI1.wxProxyInterval * 1000 > this.timestamp()) return IlIIlIli.proxyIp;
|
||
let lll1lI11 = await Iii1iI1i.proxy.getCurrentProxy();
|
||
if (!lll1lI11) return null;
|
||
return IlIIlIli.proxyIp = lll1lI11, IlIIlIli.proxyIpTime = this.timestamp(), lll1lI11;
|
||
} else {
|
||
if (iIl1IlI1.wxProxyMode === 2) {
|
||
if (this.proxyIp && this.proxyIpTime + iIl1IlI1.wxProxyInterval * 1000 > this.timestamp()) {
|
||
return this.proxyIp;
|
||
}
|
||
let i11I1ll1 = await Iii1iI1i.proxy.getCurrentProxy();
|
||
if (!i11I1ll1) return null;
|
||
return this.log("获取到的ip:" + i11I1ll1), this.proxyIp = i11I1ll1, this.proxyIpTime = this.timestamp(), i11I1ll1;
|
||
} else this.log("代理模式错误");
|
||
}
|
||
return null;
|
||
}
|
||
async #handleRequestParams(i1il1iI) {
|
||
const IIilIII = {
|
||
...this.headers
|
||
};
|
||
!i1il1iI?.["noReferer"] && this.activityUrl && (IIilIII.Referer = this.activityUrl);
|
||
const iliIi1l1 = {
|
||
"url": "https://api.m.jd.com/",
|
||
"method": "get",
|
||
"headers": {
|
||
...IIilIII,
|
||
...i1il1iI?.["headers"],
|
||
...this.otherHeaders
|
||
},
|
||
"timeout": iIl1IlI1.timeoutDuration * 1000
|
||
};
|
||
delete i1il1iI.headers;
|
||
i1il1iI = Object.assign({}, iliIi1l1, i1il1iI);
|
||
this.haskey(i1il1iI, "api") && (i1il1iI.url += i1il1iI.api);
|
||
if (this.haskey(i1il1iI, "json")) i1il1iI.data = i1il1iI.json, i1il1iI.headers = {
|
||
...i1il1iI.headers,
|
||
"Content-Type": "application/json;charset=UTF-8"
|
||
}, i1il1iI.method = "post"; else {
|
||
if (this.haskey(i1il1iI, "data")) {
|
||
i1il1iI.headers = {
|
||
...i1il1iI.headers,
|
||
"Content-Type": "application/x-www-form-urlencoded"
|
||
};
|
||
i1il1iI.method = "post";
|
||
}
|
||
}
|
||
const ii1il1li = i1il1iI?.["functionId"] || "",
|
||
llilli1l = i1il1iI?.["body"] || "";
|
||
if (this.haskey(i1il1iI, "sign")) {
|
||
let Iliilili = i1l1iil.getSignData(ii1il1li, llilli1l, this.phoneInfo);
|
||
i1il1iI.method == "get" ? i1il1iI.params = Object.assign({}, i1il1iI.params, Iliilili) : i1il1iI.data = Object.assign({}, i1il1iI.data, Iliilili);
|
||
}
|
||
let l1liI1 = false,
|
||
lI1ill1l;
|
||
if (this.haskey(i1il1iI, "h5st31")) l1liI1 = true, lI1ill1l = "3.1"; else {
|
||
if (this.haskey(i1il1iI, "h5st41")) l1liI1 = true, lI1ill1l = "4.1"; else {
|
||
if (this.haskey(i1il1iI, "h5st42")) l1liI1 = true, lI1ill1l = "4.2"; else {
|
||
if (this.haskey(i1il1iI, "h5st43")) l1liI1 = true, lI1ill1l = "4.3"; else this.haskey(i1il1iI, "h5st44") && (l1liI1 = true, lI1ill1l = "4.4");
|
||
}
|
||
}
|
||
}
|
||
if (l1liI1) {
|
||
let ii1I1il1 = await this.h5st.encrypt(i1il1iI.appId, i1il1iI.functionId, i1il1iI.body, i1il1iI.appid, i1il1iI.client, i1il1iI.clientVersion, i1il1iI.t, lI1ill1l);
|
||
i1il1iI.method == "get" ? i1il1iI.params = Object.assign({}, i1il1iI.params, ii1I1il1) : i1il1iI.data = Object.assign({}, i1il1iI.data, ii1I1il1);
|
||
}
|
||
i1il1iI = this.#checkAndEncryptParameters(i1il1iI);
|
||
i1il1iI?.["headers"]["Content-Type"] === "application/x-www-form-urlencoded" && (i1il1iI.data = iIl1llII.stringify(i1il1iI.data));
|
||
if (i1il1iI?.["jdje"]) {
|
||
i1il1iI.headers = {
|
||
...i1il1iI.headers,
|
||
...this.jdJE(),
|
||
"x-referer-package": "com.360buy.jdmobile",
|
||
"x-rp-client": "ios_4.0.0"
|
||
};
|
||
}
|
||
i1il1iI?.["headers"]?.["Referer"] && (i1il1iI.headers.Referer = this.encodeChineseParams(i1il1iI.headers.Referer));
|
||
let I1lliII = {
|
||
"url": i1il1iI.url,
|
||
"method": i1il1iI.method,
|
||
"params": i1il1iI?.["params"] || {},
|
||
"data": i1il1iI?.["data"] || {},
|
||
"headers": i1il1iI?.["headers"] || {},
|
||
"timeout": i1il1iI?.["timeout"] || 30000,
|
||
"maxRedirects": i1il1iI?.["maxRedirects"] || 5
|
||
};
|
||
if (!i1il1iI?.["noUseProxy"]) {
|
||
const liI1iI1l = I1lliII.url.includes("https://") && I1lliII.url.includes("api.m.jd.com") ? iI111l1i.jdAppTlsOptions : {},
|
||
l1liiII = await this.#getProxyIp();
|
||
I1lliII.httpsAgent = II1li1II({
|
||
"proxy": l1liiII ? "http://" + l1liiII : null,
|
||
"tlsOptions": liI1iI1l
|
||
});
|
||
}
|
||
return I1lliII;
|
||
}
|
||
#tlsOptions(lllllIll, Ilii1l1 = false) {
|
||
!Ilii1l1 && lllllIll?.["url"]["includes"]("https") && lllllIll?.["url"]?.["includes"]("api.m.jd.com") && (l1liiii1.globalAgent = new l1liiii1.Agent(tlsOptions));
|
||
Ilii1l1 && l1liiii1.globalAgent.options && Object.keys(tlsOptions).forEach(l1ii11i1 => delete l1liiii1.globalAgent.options[l1ii11i1]);
|
||
}
|
||
#checkAndEncryptParameters(liIiI1l) {
|
||
if (this.defenseUrls.some(lIIIii1i => liIiI1l.url.includes(lIIIii1i))) {
|
||
if (this.mode === "wx") {
|
||
liIiI1l.data = {
|
||
"ecyText": i11IIIli({
|
||
...liIiI1l.data,
|
||
"actId": this.activityId
|
||
}, this.getCookieByName("pToken"), this.getCookieByName("te"))
|
||
};
|
||
liIiI1l.headers["Content-Type"] = "application/json;charset=UTF-8";
|
||
} else {
|
||
if (this.mode === "100") {
|
||
liIiI1l.data.actId = this.activityId;
|
||
liIiI1l.data = {
|
||
"ecyText": i11IIIli(liIiI1l.data, this.getCookieByName("pToken"), this.getCookieByName("te"))
|
||
};
|
||
}
|
||
}
|
||
}
|
||
if (this.mode == "hdb" && liIiI1l.method === "post" && iI111l1i.hdbTypes.some(iliiiI1I => liIiI1l.url.includes(iliiiI1I))) {
|
||
liIiI1l.data.sysParams = {
|
||
"sysmethod": liIiI1l.data.appJsonParams.method,
|
||
"sign": "111111",
|
||
"timestamp": 123456
|
||
};
|
||
}
|
||
return liIiI1l;
|
||
}
|
||
async #proxyRequiredCheck(iliIi1ll, llliIIl) {
|
||
if (iIl1IlI1.wxProxyEnable === 2 && iIl1IlI1.wxProxyUrl && iliIi1ll.match(iIl1IlI1.proxyRegx)) {
|
||
if (iIl1IlI1.wxProxyMode === 1 && IlIIlIli.proxyIp && IlIIlIli.proxyIpTime && llliIIl && llliIIl < IlIIlIli.proxyIpTime) return true;
|
||
return iIl1IlI1.wxProxySmart === 1 && Iii1iI1i.proxy.updateProxyEnable(true), this.proxyIp = null, IlIIlIli.proxyIp = null, Iii1iI1i.proxy.cleanProxy(), true;
|
||
}
|
||
return false;
|
||
}
|
||
#handleMatchingResponse(iiI1IliI) {
|
||
if (iiI1IliI && iiI1IliI.constructor === Object) {
|
||
iiI1IliI = JSON.stringify(iiI1IliI);
|
||
iiI1IliI.includes("AUTH.FAILED.BLACK") && (this.black = true, this.putMsg("AUTH BLACK"), this.reseCookieStatus(), this.exit());
|
||
if (iiI1IliI.match(iIl1IlI1.reTryRegx) && !iiI1IliI.includes("AUTH.FAILED.BLACK")) {
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
#retryOnEmptyStringResponse(iiIiii11, i1i111lI) {
|
||
if (!i1i111lI && this.defenseUrls.some(liI11111 => iiIiii11.url.includes(liI11111))) return true;
|
||
return false;
|
||
}
|
||
async ["jd_api"](ii1i111i, il1il11l = true, ili1i1I1 = 0, IIi1iIl = 0) {
|
||
let lIliill = Object.assign({}, ii1i111i),
|
||
II1liI1l = ii1i111i?.["functionId"],
|
||
iilIIIIl = await this.#handleRequestParams(ii1i111i),
|
||
i1li1l1I = this.timestamp();
|
||
try {
|
||
let {
|
||
data: iIllii1i,
|
||
headers: iI1i1l1
|
||
} = await this.request(iilIIIIl);
|
||
il1il11l && this.handleSetCookieHeaders(iI1i1l1);
|
||
this.#handleHeaders(iI1i1l1);
|
||
if (ili1i1I1 < this.retryCount && this.#retryOnEmptyStringResponse(iilIIIIl, iIllii1i)) {
|
||
return this.log("空数据重试" + ili1i1I1), await this.initPinToken(), await this.jd_api(lIliill, true, ili1i1I1 + 1, IIi1iIl);
|
||
}
|
||
if (ili1i1I1 < this.retryCount && this.#handleMatchingResponse(iIllii1i)) return this.debug(iIllii1i), this.log("重试" + ili1i1I1), await this.jd_api(lIliill, true, ili1i1I1 + 1, IIi1iIl);
|
||
let ll1ilIli = this.json2Str(iIllii1i);
|
||
if (ili1i1I1 < this.retryCount && iIllii1i && ll1ilIli && /您点的太快了|操作过于频繁/.test(ll1ilIli)) return this.debug(iIllii1i), this.log("等待重试" + ili1i1I1), await this.sleep(1500), await this.jd_api(lIliill, true, ili1i1I1 + 1, IIi1iIl);
|
||
return iIllii1i;
|
||
} catch (lii1Illl) {
|
||
if (lii1Illl instanceof i1I1IiII || lii1Illl instanceof iiiIIIll) throw lii1Illl;
|
||
const i1iiiIl1 = lii1Illl?.["response"]?.["status"],
|
||
iIII111l = [301, 302];
|
||
if (this.retryStatusRegex?.["test"](i1iiiIl1) && ili1i1I1 < this.retryCount) return await this.jd_api(lIliill, true, ili1i1I1 + 1, IIi1iIl);
|
||
if ([404, ...iIII111l].includes(i1iiiIl1) && ii1i111i?.["url"]?.["includes"]("getDefenseUrls")) return [];
|
||
if (ii1i111i?.["maxRedirects"] === 0 && il1il11l && iIII111l.includes(i1iiiIl1)) return this.handleSetCookieHeaders(lii1Illl?.["response"]?.["headers"]), lii1Illl?.["response"]?.["headers"];
|
||
if (this.blackRegx?.["test"](i1iiiIl1)) return this.putMsg(lii1Illl.response?.["data"]?.["message"] || "黑号"), this.exit();
|
||
this.debug(lii1Illl.response?.["data"]);
|
||
const I1IIll1i = lii1Illl.message;
|
||
if (lii1Illl?.["response"]?.["status"] === 500 && this.defenseUrls.some(IiI1l1ii => iilIIIIl.url.includes(IiI1l1ii)) && ili1i1I1 < this.retryCount) {
|
||
return await this.initPinToken(), this.log("500重试" + ili1i1I1), await this.jd_api(lIliill, true, ili1i1I1 + 1, IIi1iIl);
|
||
}
|
||
const IlIi1Ii = II1liI1l?.["includes"]("isvObfuscator");
|
||
if (IlIi1Ii && IIi1iIl > iIl1IlI1.isvObfuscatorRetry) return undefined;
|
||
if (IIi1iIl < this.proxyRetryCount && (await this.#proxyRequiredCheck(I1IIll1i, i1li1l1I))) return iIl1IlI1.showProxyRetryLog && this.log("" + (IlIi1Ii ? "isvObfuscator " : "") + (lii1Illl?.["response"]?.["status"] ?? "") + "代理重试" + IIi1iIl), IlIi1Ii && (await this.sleep(iIl1IlI1.isvObfuscatorRetryWait * 1000)), await this.jd_api(lIliill, true, ili1i1I1, IIi1iIl + 1);
|
||
return this.error("[" + (II1liI1l ?? lIliill?.["params"]?.["functionId"] ?? lIliill?.["data"]?.["functionId"] ?? lIliill?.["json"]?.["functionId"] ?? this.getLastSegmentOfUrl(ii1i111i?.["url"])) + "]请求失败," + (i1iiiIl1 ? "状态码[" + i1iiiIl1 + "]" : I1IIll1i)), undefined;
|
||
}
|
||
}
|
||
async ["taskGet"](li1l, lIIil11I = {}) {
|
||
let i1iiliil = li1l.startsWith("http") ? li1l : "https://" + this.domain + (this.prefix ? ("/" + this.prefix).replace(/\/\//g, "/") : "") + ("/" + li1l).replace(/\/\//g, "/"),
|
||
iiIiiIl = {
|
||
"url": i1iiliil,
|
||
"method": "get",
|
||
"params": lIIil11I,
|
||
"headers": {
|
||
"Referer": this.activityUrl,
|
||
"Cookie": this.isvToken ? "IsvToken=" + this.isvToken + ";" + this.ticket : this.cookie
|
||
}
|
||
};
|
||
return await this.jd_api(iiIiiIl);
|
||
}
|
||
async ["taskPost"](l1ll1I1I, IliiIi1i = {}, iIiIIlli = {}, iIIlIIi = false) {
|
||
let lIiIiIIl = this.prefix ? (this.domain + "/" + this.prefix + "/" + l1ll1I1I).replace(/\/\//g, "/") : (this.domain + "/" + l1ll1I1I).replace(/\/\//g, "/"),
|
||
I1III1l1 = "https://" + lIiIiIIl,
|
||
IlIili = {
|
||
"url": I1III1l1,
|
||
"method": "post",
|
||
"headers": {
|
||
"Referer": this.activityUrl,
|
||
"Cookie": this.isvToken ? "IsvToken=" + this.isvToken + ";" + this.ticket : this.cookie,
|
||
...iIiIIlli
|
||
}
|
||
};
|
||
return iIIlIIi ? IlIili.json = IliiIi1i : IlIili.data = IliiIi1i, await this.jd_api(IlIili);
|
||
}
|
||
async["taskPostByJson"](i1IIlii1, Il111ll1 = {}, ll1ii1il = {}) {
|
||
return await this.taskPost(i1IIlii1, Il111ll1, ll1ii1il, true);
|
||
}
|
||
["wxStop"](Iil11l) {
|
||
if (!Iil11l) return;
|
||
for (let Il11II1l of iIl1IlI1.stopKeywords) {
|
||
if (Iil11l.includes(Il11II1l)) {
|
||
throw new i1I1IiII("退出");
|
||
}
|
||
}
|
||
}
|
||
async["wxStopSync"](I1iIli1I) {
|
||
if (!I1iIli1I) return;
|
||
if (/已结束/.exec(I1iIli1I)) {
|
||
await this.writeLongCacheByStop();
|
||
}
|
||
for (let llii1 of iIl1IlI1.stopKeywords) {
|
||
if (I1iIli1I.includes(llii1)) throw new i1I1IiII("退出");
|
||
}
|
||
}
|
||
async["wxCommonInfo"](liI11Iil = true, IIIiiIil = 3) {
|
||
let IlI1ilii = await this.taskGet(this.activityUrl);
|
||
if (IlI1ilii && IlI1ilii.includes("活动已经结束") && liI11Iil) {
|
||
this.putMsg("活动已经结束,手动确认");
|
||
this.stop();
|
||
return;
|
||
}
|
||
(this.domain.includes("lzkj") || this.domain.includes("lzdz1")) && (await this.taskGet("/wxCommonInfo/token"));
|
||
if (!this.ticket.includes("LZ_TOKEN_KEY")) {
|
||
this.debug(this.ticket);
|
||
IIIiiIil <= 0 && (this.putMsg("初始化LZ_TOKEN_KEY失败"), this.exit());
|
||
this.log("初始化LZ_TOKEN_KEY失败,正在重试...");
|
||
this.ticket = "";
|
||
return await this.wxCommonInfo(liI11Iil, IIIiiIil - 1);
|
||
}
|
||
}
|
||
["addressInit"]() {
|
||
for (let i1l11lli of IlIIlIli.addressList) {
|
||
if (i1l11lli.pt_pin === this.pin) {
|
||
this.address = i1l11lli.address;
|
||
this.remarks = i1l11lli.remarks;
|
||
this.tg_id = i1l11lli.tg_id;
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
["getAddress"]() {
|
||
if (this.address) return;
|
||
if (IlIIlIli.addressList.length === 0) {
|
||
this.address = "";
|
||
return;
|
||
}
|
||
if (iIl1IlI1.saveAddressMode === 2) {
|
||
const lIIil1i1 = IlIIlIli.addressList.find(iiIiii1I => !iiIiii1I.use);
|
||
lIIil1i1 ? (this.address = lIIil1i1.address, lIIil1i1.use = true) : (IlIIlIli.addressList.forEach(iiIllIlI => iiIllIlI.use = false), this.address = IlIIlIli.addressList[0].address, IlIIlIli.addressList[0].use = true);
|
||
return;
|
||
}
|
||
const i1II1II1 = li1iI1I => li1iI1I.pt_pin.includes("默认地址"),
|
||
ill11iIl = IiI111ii => !IiI111ii.useNum || IiI111ii.useNum < iIl1IlI1.addressUseNum || iIl1IlI1.addressUseNum === 0,
|
||
iIIlilII = IlIIlIli.addressList.filter(iii11ii1 => i1II1II1(iii11ii1) && ill11iIl(iii11ii1)),
|
||
i1liIi1I = IlIIlIli.addressList.filter(III1l1Ii => !i1II1II1(III1l1Ii) && ill11iIl(III1l1Ii));
|
||
if (iIIlilII.length > 0) {
|
||
const Illi11II = Math.floor(Math.random() * iIIlilII.length),
|
||
i1i1i1l1 = iIIlilII[Illi11II];
|
||
this.address = i1i1i1l1.address;
|
||
i1i1i1l1.useNum ? i1i1i1l1.useNum += 1 : i1i1i1l1.useNum = 1;
|
||
} else {
|
||
if (i1liIi1I.length > 0) {
|
||
const IiiIili = Math.floor(Math.random() * i1liIi1I.length),
|
||
lili1llI = i1liIi1I[IiiIili];
|
||
this.address = lili1llI.address;
|
||
lili1llI.useNum ? lili1llI.useNum += 1 : lili1llI.useNum = 1;
|
||
}
|
||
}
|
||
}
|
||
async["getShopOpenCardInfo"](iI1lIl11 = this.venderId || this.shopId) {
|
||
let l1iIlilI = {
|
||
"venderId": iI1lIl11,
|
||
"payUpShop": true,
|
||
"queryVersion": "10.5.2",
|
||
"appid": "27004",
|
||
"needSecurity": true,
|
||
"bizId": "shopmember_m_jd_com",
|
||
"channel": "8018006"
|
||
},
|
||
IIlii1l = await this.jd_api({
|
||
"url": "https://api.m.jd.com/client.action",
|
||
"method": "post",
|
||
"body": l1iIlilI,
|
||
"data": {
|
||
"functionId": "getShopOpenCardInfo",
|
||
"body": l1iIlilI,
|
||
"uuid": "88888"
|
||
},
|
||
"functionId": "getShopOpenCardInfo",
|
||
"headers": {
|
||
"Referer": "https://shop.m.jd.com/"
|
||
},
|
||
"appid": "shopmember_m_jd_com",
|
||
"appId": "27004",
|
||
"clientVersion": "9.2.0",
|
||
"client": "H5",
|
||
"t": Date.now(),
|
||
"h5st43": true
|
||
}, false);
|
||
if (IIlii1l && IIlii1l.success) {
|
||
let Illl1iI1 = IIlii1l?.["result"][0],
|
||
IliI1Iii = Illl1iI1?.["interestsRuleList"] ?? [];
|
||
this.openCardStatus = Illl1iI1?.["userInfo"]?.["openCardStatus"] ?? 0;
|
||
this.giftList = IliI1Iii;
|
||
if (IliI1Iii.length > 0) this.giftActId = IliI1Iii?.[0]?.["interestsInfo"]["activityId"] ?? ""; else {
|
||
this.giftActId = "";
|
||
}
|
||
} else this.giftActId = "";
|
||
return IIlii1l;
|
||
}
|
||
async["bindWithVender"](Ili1il1i = this.venderId || this.shopId) {
|
||
let IIliliI = {
|
||
"venderId": Ili1il1i,
|
||
"bindByVerifyCodeFlag": 1,
|
||
"registerExtend": {},
|
||
"writeChildFlag": 0,
|
||
"channel": "8018006",
|
||
"activityId": this.giftActId,
|
||
"appid": "27004",
|
||
"needSecurity": true,
|
||
"bizId": "shopmember_m_jd_com"
|
||
},
|
||
llilI1II = await this.jd_api({
|
||
"url": "https://api.m.jd.com/client.action",
|
||
"method": "post",
|
||
"body": IIliliI,
|
||
"data": {
|
||
"functionId": "bindWithVender",
|
||
"appid": "shopmember_m_jd_com",
|
||
"body": IIliliI,
|
||
"uuid": "88888"
|
||
},
|
||
"appid": "shopmember_m_jd_com",
|
||
"appId": "27004",
|
||
"functionId": "bindWithVender",
|
||
"headers": {
|
||
"Referer": "https://shop.m.jd.com/"
|
||
},
|
||
"clientVersion": "9.2.0",
|
||
"client": "H5",
|
||
"t": Date.now(),
|
||
"h5st43": true
|
||
}, false);
|
||
this.debug(llilI1II);
|
||
if (llilI1II && llilI1II.code === 0) {
|
||
if (llilI1II.busiCode === "0") {
|
||
if (llilI1II.result?.["giftInfo"]?.["giftList"]) {
|
||
let iIlI1ill = llilI1II.result.giftInfo.giftList.map(il1lii11 => "" + il1lii11.discountString + il1lii11.prizeName).join(",");
|
||
this.log("加入店铺[" + Ili1il1i + "]会员成功,获得" + iIlI1ill);
|
||
} else this.log("加入店铺[" + Ili1il1i + "]会员成功");
|
||
} else {
|
||
this.log(llilI1II?.["message"]);
|
||
if (llilI1II?.["message"]?.["includes"]("已经是本店会员")) { } else this.canNotOpenCard = true;
|
||
}
|
||
} else this.log("加入店铺[" + Ili1il1i + "]会员失败", llilI1II?.["message"]), this.canNotOpenCard = true;
|
||
return llilI1II;
|
||
}
|
||
async["isvObfuscator"]() {
|
||
if (IlIIlIli.redis) {
|
||
let iIilIIi = await IlIIlIli.redis.get("" + this.pin);
|
||
if (iIilIIi) {
|
||
return this.isvToken = iIilIIi, {
|
||
"code": "0",
|
||
"token": this.isvToken
|
||
};
|
||
}
|
||
} else {
|
||
let iI1lI11i = this.readFileSync("./tokens/" + this.pin),
|
||
iIi1Ilil = iI1lI11i ? JSON.parse(iI1lI11i) : {};
|
||
if (iIi1Ilil && iIi1Ilil?.["expireTime"] > this.timestamp() - this.random(0, 2 * 60 * 1000) && iIi1Ilil?.["token"]) {
|
||
return this.isvToken = iIi1Ilil.token, {
|
||
"code": "0",
|
||
"token": this.isvToken
|
||
};
|
||
}
|
||
}
|
||
const ii11lll1 = {
|
||
"url": "https://" + this.domain,
|
||
"id": ""
|
||
},
|
||
IiiillI = await this.jd_api({
|
||
"url": "https://api.m.jd.com/client.action",
|
||
"method": "post",
|
||
"functionId": "isvObfuscator",
|
||
"body": ii11lll1,
|
||
"data": {},
|
||
"headers": {
|
||
...this.headers,
|
||
"User-Agent": this.ua.jd4
|
||
},
|
||
"sign": true,
|
||
"noReferer": true,
|
||
"jdje": true
|
||
}, false);
|
||
if (IiiillI && IiiillI?.["code"] === "0" && IiiillI?.["token"]) {
|
||
let illIi111 = IiiillI.token;
|
||
this.isvToken = illIi111;
|
||
IlIIlIli.redis ? await IlIIlIli.redis.set("" + this.pin, illIi111, this.random(25, 28) * 60) : this.writeFileSync("tokens", this.pin, JSON.stringify({
|
||
"expireTime": this.timestamp() + this.random(20, 26) * 60 * 1000,
|
||
"token": illIi111
|
||
}));
|
||
} else IiiillI?.["code"] === "3" && IiiillI?.["errcode"] === 264 ? (this.putMsg("ck过期"), this.reseCookieStatus(), this.exit()) : this.log(IiiillI);
|
||
if (!this.isvToken) {
|
||
this.putMsg("获取Token失败");
|
||
this.reseCookieStatus();
|
||
this.exit();
|
||
}
|
||
return IiiillI;
|
||
}
|
||
async["getShopInfo"](lIIIi11i = this.venderId, Iilili11 = this.shopId) {
|
||
if (IlIIlIli.activity.shopName) {
|
||
this.shopName = IlIIlIli.activity.shopName;
|
||
this.venderId = IlIIlIli.activity.venderId;
|
||
this.shopId = IlIIlIli.activity.shopId;
|
||
return;
|
||
}
|
||
let IiliIlll = await this.jd_api({
|
||
"api": "pages_jd_com",
|
||
"method": "post",
|
||
"data": {},
|
||
"functionId": "shopDetail",
|
||
"body": {
|
||
"shopId": Iilili11?.["toString"](),
|
||
"source": "appClient",
|
||
"venderId": lIIIi11i?.["toString"]()
|
||
},
|
||
"headers": {
|
||
"User-Agent": this.ua.jd4,
|
||
"jdgs": "-3107",
|
||
"x-rp-client": "ios_4.0.0",
|
||
"x-referer-package": "com.360buy.jdmobile"
|
||
},
|
||
"sign": true,
|
||
"jdje": true,
|
||
"noReferer": true
|
||
});
|
||
return IiliIlll && IiliIlll.code === "0" && IiliIlll.isSuccess && (this.shopName = IiliIlll.result.shopBaseInfo.shopName, this.venderId = IiliIlll.result.shopBaseInfo.venderId, this.shopId = IiliIlll.result.shopBaseInfo.shopId, IlIIlIli.activity = Object.assign(IlIIlIli.activity, {
|
||
"shopName": this.shopName,
|
||
"shopId": this.shopId,
|
||
"venderId": this.venderId
|
||
})), IiliIlll;
|
||
}
|
||
async["follow"](lliIilll = this.shopId) {
|
||
let ilIi1i1 = await this.jd_api({
|
||
"api": "client.action",
|
||
"method": "post",
|
||
"data": {},
|
||
"functionId": "followShop",
|
||
"body": {
|
||
"member": "true",
|
||
"follow": "true",
|
||
"shopId": lliIilll.toString(),
|
||
"award": "false",
|
||
"sourceRpc": "shop_app_home_follow"
|
||
},
|
||
"headers": {
|
||
"User-Agent": this.ua.jd4,
|
||
"jdgs": "-3107",
|
||
"x-rp-client": "ios_4.0.0",
|
||
"x-referer-package": "com.360buy.jdmobile"
|
||
},
|
||
"sign": true,
|
||
"jdje": true,
|
||
"noReferer": true
|
||
});
|
||
this.debug(ilIi1i1);
|
||
if (ilIi1i1 && ilIi1i1.code === "0") return this.log(ilIi1i1.msg || "关注成功"), true;
|
||
return this.log(ilIi1i1), false;
|
||
}
|
||
async["unfollow"](lil1IIII = this.shopId || this.venderId) {
|
||
let ll1lilli = await this.jd_api({
|
||
"api": "client.action",
|
||
"method": "post",
|
||
"data": {},
|
||
"functionId": "followShop",
|
||
"body": {
|
||
"follow": "false",
|
||
"shopId": lil1IIII.toString(),
|
||
"award": "false",
|
||
"sourceRpc": "shop_app_home_follow"
|
||
},
|
||
"headers": {
|
||
"User-Agent": this.ua.jd4,
|
||
"jdgs": "-3107",
|
||
"x-rp-client": "ios_4.0.0",
|
||
"x-referer-package": "com.360buy.jdmobile"
|
||
},
|
||
"sign": true,
|
||
"jdje": true,
|
||
"noReferer": true
|
||
});
|
||
if (ll1lilli && ll1lilli.code === "0") {
|
||
return this.log(ll1lilli.msg || "取消关注成功"), true;
|
||
}
|
||
return this.log(ll1lilli), false;
|
||
}
|
||
async["wxApi"](illI1lII, IIIIiI = {}) {
|
||
return await this.taskPost(illI1lII, {
|
||
"activityId": this.activityId,
|
||
...IIIIiI
|
||
});
|
||
}
|
||
async["getSimpleActInfoVo"](i1Il1II1 = "customer/getSimpleActInfoVo") {
|
||
if (IlIIlIli.activity.activityType) {
|
||
this.type = IlIIlIli.activity.type;
|
||
this.venderId = IlIIlIli.activity?.["venderId"];
|
||
this.shopId = IlIIlIli.activity?.["shopId"];
|
||
this.activityType = IlIIlIli.activity?.["activityType"];
|
||
return;
|
||
}
|
||
let ii1lilii = await this.wxApi(i1Il1II1);
|
||
if (ii1lilii && ii1lilii?.["result"] && ii1lilii?.["data"]) {
|
||
IlIIlIli.activity = Object.assign(IlIIlIli.activity, ii1lilii?.["data"]);
|
||
this.venderId = ii1lilii?.["data"]?.["venderId"];
|
||
this.shopId = ii1lilii?.["data"]?.["shopId"];
|
||
this.activityType = ii1lilii?.["data"]?.["activityType"];
|
||
const iII11IIl = {
|
||
5: "wxCollectionActivity",
|
||
6: "wxCollectionActivity",
|
||
7: "wxGameActivity",
|
||
11: "wxDrawActivity",
|
||
12: "wxDrawActivity",
|
||
13: "wxDrawActivity",
|
||
15: "sign",
|
||
16: "daily",
|
||
17: "wxShopFollowActivity",
|
||
18: "sevenDay",
|
||
20: "wxKnowledgeActivity",
|
||
24: "wxShopGift",
|
||
25: "wxShareActivity",
|
||
26: "wxPointDrawActivity",
|
||
42: "wxCollectCard",
|
||
46: "wxTeam",
|
||
65: "wxBuildActivity",
|
||
69: "wxFansInterActionActivity",
|
||
70: "wxCartKoi/cartkoi",
|
||
71: "wxSecond",
|
||
73: "wxShopGift",
|
||
100: "wxTeam",
|
||
102: "wxTeam",
|
||
103: "mc/wxMcLevelAndBirthGifts",
|
||
104: "mc/wxMcLevelAndBirthGifts",
|
||
119: "mc/wxMcLevelAndBirthGifts",
|
||
124: "wxScratchActive",
|
||
125: "wxPointBlindBox",
|
||
128: "wxGashaponActive",
|
||
129: "wxDollGrabbing",
|
||
204: "wxPointShop",
|
||
1001: "wxgame",
|
||
1002: "wxgame",
|
||
2001: "drawCenter",
|
||
2002: "drawCenter",
|
||
2003: "drawCenter",
|
||
2004: "drawCenter",
|
||
2006: "drawCenter"
|
||
};
|
||
if (iII11IIl[this.activityType]) this.type = iII11IIl[this.activityType]; else {
|
||
this.type = "wxDrawActivity";
|
||
}
|
||
IlIIlIli.activity.type = this.type;
|
||
} else {
|
||
this.putMsg("手动确认,活动不存在或者已结束");
|
||
this.stop();
|
||
}
|
||
return ii1lilii;
|
||
}
|
||
async["activityContent"](lIi1llIl = {}, lii11ll1 = "") {
|
||
let I1l1Iill = await this.wxApi(this.type + "/activityContent", {
|
||
"activityId": this.activityId,
|
||
"pin": this.secretPin,
|
||
...lIi1llIl
|
||
});
|
||
|
||
if (I1l1Iill && I1l1Iill?.["data"]) {
|
||
let ll11iiII = lii11ll1 ? I1l1Iill.data[lii11ll1] : I1l1Iill.data,
|
||
il1IIi1i = ll11iiII?.["startTime"],
|
||
I11ili1i = ll11iiII?.["endTime"];
|
||
const iiilIiiI = ll11iiII?.["rule"] || ll11iiII?.["actRule"] || "";
|
||
try {
|
||
if (!il1IIi1i || !I11ili1i) {
|
||
const IIIlllI = /\d{4}-\d{2}-\d{2} \d{2}:\d{2}/g,
|
||
iIIi1Il = iiilIiiI.match(IIIlllI);
|
||
if (iIIi1Il) {
|
||
il1IIi1i = new Date(iIIi1Il[0]).getTime();
|
||
I11ili1i = new Date(iIIi1Il[1]).getTime();
|
||
}
|
||
}
|
||
this.rule = iiilIiiI;
|
||
IlIIlIli.activity.prizeList = this.rule.match(/奖品名称(:|:)(\S+)( |,)数量(:|:)(\d+)(个|份)/g) || this.rule.match(/[\u4E00-\u9FFF]等奖:(\S+) (\d+)份/g) || I11ili1i;
|
||
|
||
IlIIlIli.activity.timeStr = this.formatDate(il1IIi1i, "yyyy-MM-dd HH:mm:ss") + "至" + this.formatDate(I11ili1i, "yyyy-MM-dd HH:mm:ss");
|
||
IlIIlIli.activity.startTime = il1IIi1i;
|
||
IlIIlIli.activity.endTime = I11ili1i;
|
||
} catch (l11i1l11) { }
|
||
il1IIi1i && il1IIi1i > Date.now() && (this.putMsg("活动未开始"), IlIIlIli.activity.noStart = true, this.stop());
|
||
I11ili1i && I11ili1i < Date.now() && (this.putMsg("活动已结束"), await this.writeLongCacheByStop(), this.stop());
|
||
}
|
||
return I1l1Iill;
|
||
}
|
||
async["getGiveContent"]() {
|
||
let Il1liii = await this.wxApi("wxDrawActivity/getGiveContent", {
|
||
"pin": this.secretPin
|
||
});
|
||
|
||
if (Il1liii && Il1liii?.["data"]) { }
|
||
return Il1liii;
|
||
}
|
||
async["initPinToken"](i111l1 = this.venderId, IlI1Ii = this.shopId) {
|
||
let illlli1l = {
|
||
"activityId": this.activityId,
|
||
"jdToken": this.isvToken,
|
||
"source": "01",
|
||
"uuid": this.phoneInfo.uuid,
|
||
"clientTime": Date.now()
|
||
},
|
||
iiiii1Il = "";
|
||
this.mode === "100" ? (illlli1l = {
|
||
...illlli1l,
|
||
"shareUserId": "",
|
||
"shopId": IlI1Ii,
|
||
"status": 1
|
||
}, iiiii1Il = "https://" + this.domain + this.prefix + "/api/user-info/initPinToken") : (illlli1l = {
|
||
...illlli1l,
|
||
"venderId": i111l1,
|
||
"fromType": "APP",
|
||
"riskType": 1,
|
||
"client": "iOS",
|
||
"clientVersion": this.phoneInfo.clientVersion,
|
||
"osVersion": this.phoneInfo.iv,
|
||
"model": "iPhone" + this.phoneInfo.tf,
|
||
"userAgent": this.ua.app
|
||
}, iiiii1Il = "https://" + this.domain + "/customer/initPinToken");
|
||
let iiillI1 = await this.taskGet(this.mode === "wx" ? "customer/initPinToken" : "api/user-info/initPinToken", illlli1l);
|
||
if (this.mode === "wx" && iiillI1 && iiillI1.result) this.secretPin = encodeURIComponent(iiillI1.data?.["secretPin"]), this.nickname = iiillI1.data?.["nickname"]; else this.mode === "100" && iiillI1 && iiillI1.resp_code === 0 ? this.pinToken = JSON.parse(iiillI1.data)?.["data"]?.["pinToken"] : (this.putMsg(iiillI1?.["errorMessage"] || iiillI1?.["data"] || iiillI1?.["resp_msg"]), this.wxStop(iiillI1?.["errorMessage"] || iiillI1?.["data"] || iiillI1?.["resp_msg"]), this.reseCookieStatus(), this.exit());
|
||
return iiillI1;
|
||
}
|
||
async["getMyPing"](ill11Ii = "customer/getMyPing", iIllI11I = this.isvToken, lI11IlIi = this.venderId) {
|
||
let lIli1li1 = await this.wxApi(ill11Ii, {
|
||
"userId": lI11IlIi,
|
||
"token": iIllI11I,
|
||
"fromType": "APP"
|
||
});
|
||
if (lIli1li1 && lIli1li1?.["result"]) this.secretPin = lIli1li1.data?.["secretPin"], this.nickname = lIli1li1.data?.["nickname"]; else {
|
||
let lllllIIi = lIli1li1?.["errorMessage"] || "获取pin失败";
|
||
this.putMsg(lllllIIi);
|
||
this.wxStop(lllllIIi);
|
||
lllllIIi.includes("请联系商家") && this.stop();
|
||
this.reseCookieStatus();
|
||
this.exit();
|
||
}
|
||
return lIli1li1;
|
||
}
|
||
async["accessLog"](i1iiI1 = this.secretPin) {
|
||
let I1IlIIIi = this.domain.includes("cjhy") ? "accessLog" : "accessLogWithAD";
|
||
await this.wxApi("common/" + I1IlIIIi, {
|
||
"venderId": this.venderId,
|
||
"code": this.activityType,
|
||
"pin": i1iiI1,
|
||
"activityId": this.activityId,
|
||
"pageUrl": this.activityUrl,
|
||
"subType": "app",
|
||
"uuid": this.phoneInfo.uuid
|
||
});
|
||
}
|
||
async["saveAddress"](IlIl1ll1 = this.addressId, iI1liIi1 = this.prizeName) {
|
||
IlIIlIli.isSaveAddress = true;
|
||
this.getAddress();
|
||
if (!this.address) {
|
||
this.putMsg("未配置地址或所有地址已达使用上限,退出填地址");
|
||
return;
|
||
}
|
||
if (iIl1IlI1.addressStopKeywords && iIl1IlI1.addressStopKeywords.some(iiIlli1i => {
|
||
return iI1liIi1?.["includes"](iiIlli1i);
|
||
})) {
|
||
this.putMsg("触发关键词不填地址");
|
||
return;
|
||
}
|
||
if (iIl1IlI1.addressStopKeywordsRule && iIl1IlI1.addressStopKeywordsRule.some(II1iliii => {
|
||
return this.rule?.["includes"](II1iliii);
|
||
})) {
|
||
this.putMsg("触发规则不填地址");
|
||
return;
|
||
}
|
||
this.log("使用地址", this.address);
|
||
let liIIl1iI = false;
|
||
if (this.mode == "wx") {
|
||
this.address.generateId = IlIl1ll1;
|
||
let iI1IliIi = await this.wxApi("wxAddress/save", {
|
||
...this.address,
|
||
"venderId": this.venderId,
|
||
"pin": this.secretPin,
|
||
"activityId": this.activityId,
|
||
"actType": this.activityType,
|
||
"prizeName": iI1liIi1,
|
||
"personalEmail": ""
|
||
});
|
||
this.log(iI1IliIi);
|
||
iI1IliIi && iI1IliIi.result ? (this.putMsg("已填地址"), liIIl1iI = true) : (this.putMsg("填地址失败"), this.putMsg(iI1IliIi.errorMessage));
|
||
} else {
|
||
if (this.mode === "100") {
|
||
const {
|
||
phone: lIll1iiI,
|
||
address: lIII1iIl,
|
||
receiver: l1lll111,
|
||
city: IlI111ll,
|
||
county: liIliIii,
|
||
province: i1I1i1ll
|
||
} = this.address;
|
||
let iI1li1Ii = {
|
||
"mobile": lIll1iiI,
|
||
"address": lIII1iIl,
|
||
"realName": l1lll111,
|
||
"city": IlI111ll,
|
||
"county": liIliIii,
|
||
"orderCode": IlIl1ll1,
|
||
"province": i1I1i1ll
|
||
},
|
||
illll1li = await this.lzkjApi("api/my/prize/update", iI1li1Ii);
|
||
if (illll1li.resp_code === 0) this.putMsg("已填地址"), liIIl1iI = true; else {
|
||
this.putMsg("填地址失败");
|
||
this.putMsg(illll1li.resp_msg);
|
||
}
|
||
} else {
|
||
if (this.mode === "hdb") {
|
||
const {
|
||
phone: ll1lil1,
|
||
address: liiIllil,
|
||
receiver: IiliIlil,
|
||
city: l1llIli1,
|
||
county: i1li1III,
|
||
province: lIil1l1
|
||
} = this.address;
|
||
let l1ii1ilI = {
|
||
"province": lIil1l1,
|
||
"city": l1llIli1,
|
||
"area": i1li1III,
|
||
"detailAddress": liiIllil,
|
||
"address": "" + lIil1l1 + l1llIli1 + i1li1III + liiIllil,
|
||
"mobile": ll1lil1,
|
||
"receiveName": IiliIlil,
|
||
"activityLogId": IlIl1ll1
|
||
},
|
||
iill1lii = await this.hdbApi("postDeliveryInfo", l1ii1ilI);
|
||
this.log(iill1lii);
|
||
if (iill1lii && iill1lii.succ) this.putMsg("已填地址"), liIIl1iI = true; else {
|
||
this.putMsg("填地址失败");
|
||
this.putMsg(iill1lii?.["message"]);
|
||
}
|
||
} else {
|
||
if (this.mode === "hzbz") {
|
||
const {
|
||
phone: ll11iIli,
|
||
address: I111111i,
|
||
receiver: i1i1I1I1,
|
||
city: liIilIi1,
|
||
county: IiIiIiii,
|
||
province: iII1Illi
|
||
} = this.address;
|
||
let ilil1lI1 = {
|
||
"addressRegion": iII1Illi + "-" + liIilIi1 + "-" + IiIiIiii,
|
||
"address": I111111i,
|
||
"mobile": ll11iIli,
|
||
"name": i1i1I1I1,
|
||
"condtionId": ""
|
||
},
|
||
I1111Iil = await this.hzbzApi("SaveUserInfo.json", ilil1lI1);
|
||
this.log(I1111Iil);
|
||
I1111Iil && I1111Iil.code === 0 ? (this.putMsg("已填地址"), liIIl1iI = true) : (this.putMsg("填地址失败"), this.putMsg(I1111Iil?.["txt"]));
|
||
} else {
|
||
if (this.mode === "jinggeng") {
|
||
const {
|
||
phone: l11i1I,
|
||
address: illiI1II,
|
||
receiver: liIll1,
|
||
city: lilIi1i1,
|
||
county: liiillli,
|
||
province: i1ii11l1
|
||
} = this.address;
|
||
let IiIii1ll = await this.jinggengApi("postBuyerInfo", {
|
||
"receiverName": liIll1,
|
||
"mobile": l11i1I,
|
||
"address": i1ii11l1.replace("省", "").replace("市", "") + " " + lilIi1i1.replace("市", "") + " " + liiillli + illiI1II,
|
||
"log_id": IlIl1ll1
|
||
});
|
||
this.log(IiIii1ll);
|
||
IiIii1ll && IiIii1ll.succ ? (this.putMsg("已填地址"), liIIl1iI = true) : (this.putMsg("填地址失败"), this.putMsg(IiIii1ll?.["msg"]));
|
||
} else {
|
||
if (this.mode === "v2") {
|
||
if (!this.activityPrizeId) return this.putMsg("activityPrizeId不存在,退出填地址");
|
||
const {
|
||
phone: iii1lIlI,
|
||
address: illIl1II,
|
||
receiver: IIiliIlI,
|
||
city: lI1lil1,
|
||
county: lIl111II,
|
||
province: l1lillli
|
||
} = this.address;
|
||
let li111lI = await this.v2Api("api/" + this.activityType + "/userAddressInfo", {
|
||
"addressId": IlIl1ll1,
|
||
"address": illIl1II,
|
||
"county": lIl111II,
|
||
"city": lI1lil1,
|
||
"province": l1lillli,
|
||
"mobile": iii1lIlI,
|
||
"realName": IIiliIlI,
|
||
"activityPrizeId": this.activityPrizeId
|
||
});
|
||
this.log(li111lI);
|
||
li111lI && li111lI.code === 200 ? (this.putMsg("已填地址"), liIIl1iI = true) : (this.putMsg("填地址失败"), this.putMsg(li111lI?.["message"]));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (liIIl1iI) {
|
||
let iI1II1li = this.formatDate(Date.now(), "yyyy-MM-dd HH:mm:ss") + "," + iI1liIi1 + "," + this.pin + "," + this.address?.["phone"] + "," + this.address?.["address"] + "," + Iii1iI1i.envInfo.name + "," + (this.shopName ?? this.venderId) + "," + this.activityUrl + "\n";
|
||
this.appendFileSync("", "gifts.csv", iI1II1li);
|
||
}
|
||
IlIIlIli.isSaveAddress = false;
|
||
}
|
||
async["getPrize"](iI11Iil = false) {
|
||
let Ill1li1i = await this.wxApi(this.type + "/getPrize", {
|
||
"activityId": this.activityId,
|
||
"pin": this.secretPin
|
||
});
|
||
this.debug(Ill1li1i);
|
||
if (Ill1li1i && Ill1li1i.result && Ill1li1i.data?.["drawOk"]) {
|
||
this.putMsg(Ill1li1i.data.name || "空气");
|
||
iI11Iil && (await this.writeLongCache());
|
||
return;
|
||
}
|
||
let lIlIil = Ill1li1i?.["errorMessage"] || Ill1li1i?.["data"]?.["errorMessage"];
|
||
if (!lIlIil) return;
|
||
return this.putMsg(lIlIil), this.wxStop(lIlIil), Ill1li1i;
|
||
}
|
||
async["login"](iiIlIilI = true, iliilIIi = this.isvToken) {
|
||
if (this.mode === "100") {
|
||
let I1IiliIl = {
|
||
"activityId": this.activityId,
|
||
"tokenPin": iliilIIi,
|
||
"status": 1,
|
||
"source": "01",
|
||
"shareUserId": "",
|
||
"uuid": this.phoneInfo.uuid,
|
||
"client": "iOS",
|
||
"clientVersion": this.phoneInfo.clientVersion,
|
||
"osVersion": this.phoneInfo.iv,
|
||
"model": "iPhone" + this.phoneInfo.tf,
|
||
"userAgent": this.ua.app
|
||
};
|
||
if (this.domain.includes("lzkj")) { }
|
||
let i1i1iliI = await this.taskPostByJson("api/user-info/login", I1IiliIl);
|
||
if (i1i1iliI && i1i1iliI.resp_code === 0) {
|
||
this.token = i1i1iliI.data.token;
|
||
this.headers.token = i1i1iliI.data.token;
|
||
let liIllIl1 = this.haskey(i1i1iliI, "data.joinInfo.joinCodeInfo.joinCode");
|
||
this.joinDes = i1i1iliI.data.joinInfo.joinCodeInfo.joinDes;
|
||
this.log("登录成功|" + liIllIl1 + "|" + this.joinDes);
|
||
IlIIlIli.activity.shopId = i1i1iliI.data.shopId;
|
||
this.shopId = i1i1iliI.data.shopId;
|
||
this.joinCode = liIllIl1;
|
||
const I1ii1l1 = /venderId=(\d+)/,
|
||
iI1I1ll = i1i1iliI.data.joinInfo?.["openCardUrl"];
|
||
this.venderId = iI1I1ll ? iI1I1ll.match(I1ii1l1)[1] : this.shopId;
|
||
IlIIlIli.activity = {
|
||
...IlIIlIli.activity,
|
||
"shopId": this.shopId,
|
||
"venderId": this.venderId
|
||
};
|
||
if (liIllIl1 === "1003" || this.lzkjOpenCard && ["1005", "1002", "1006"].includes(liIllIl1) && !this.openCardTypes.includes(this.activityType)) return this.putMsg(this.joinDes), this.exit();
|
||
await this.lzkjApi("api/task/followShop/follow");
|
||
iiIlIilI && (await this.lzkjBaseInfo());
|
||
} else this.putMsg(i1i1iliI?.["resp_msg"] || "登录失败"), this.wxStop(i1i1iliI?.["resp_msg"]), this.exit();
|
||
return i1i1iliI;
|
||
} else {
|
||
if (["hdb"].includes(this.mode)) {
|
||
let l11li1li = await this.taskPostByJson("front/fans/login", {
|
||
"appJsonParams": {
|
||
"id": this.activityId,
|
||
"source": "01",
|
||
"userId": this.userId,
|
||
"token": iliilIIi,
|
||
"method": "/front/fans/login"
|
||
},
|
||
"sysParams": {
|
||
"sign": "111111",
|
||
"timestamp": 123456,
|
||
"sysmethod": "/front/fans/login"
|
||
}
|
||
});
|
||
if (l11li1li && l11li1li?.["code"] == 200) this.buyerNick = l11li1li?.["result"]?.["buyerNick"], this.aesBuyerNick = l11li1li?.["result"]?.["aesBuyerNick"], this.userId = l11li1li?.["result"]?.["userId"], this.openCard = l11li1li?.["result"]?.["openCard"], IlIIlIli.activity.shopId = this.userId, IlIIlIli.activity.venderId = this.userId; else {
|
||
if (l11li1li?.["message"]?.["includes"]("商家订购过期")) this.putMsg("商家订购过期"), this.stop(); else {
|
||
this.putMsg(l11li1li?.["message"] || "登录失败");
|
||
this.exit();
|
||
}
|
||
}
|
||
return l11li1li;
|
||
} else {
|
||
if (this.mode === "v2") {
|
||
let Il1IiIl = await this.v2Api("api/user/login", {
|
||
"token": iliilIIi,
|
||
"source": "01",
|
||
"activityType": this.activityType,
|
||
"templateCode": this.templateCode,
|
||
"activityId": this.activityId,
|
||
"shopId": this.shopId,
|
||
"uuid": this.phoneInfo.uuid,
|
||
"timestamp": this.timestamp()
|
||
});
|
||
if (Il1IiIl && Il1IiIl?.["code"] === 200) {
|
||
this.headers["Pin-Token"] = Il1IiIl?.["data"]?.["pinToken"];
|
||
this.headers["Activity-Id"] = this.activityId;
|
||
this.headers["Shop-Id"] = this.shopId;
|
||
this.headers["Activity-Type"] = this.activityType;
|
||
this.headers["Template-Code"] = this.templateCode;
|
||
this.secretPin = Il1IiIl?.["data"]?.["encryptPin"];
|
||
await this.getActivityBase();
|
||
} else this.putMsg(Il1IiIl?.["message"] || "登录失败"), this.exit();
|
||
return Il1IiIl;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
async["lzkjBaseInfo"]() {
|
||
this.needPinToken && (await this.initPinToken());
|
||
await this.basicInfo();
|
||
await this.getPrizeList();
|
||
let activityContent = await this.lzkjApi("api/task/daySign/activity");
|
||
if (activityContent.data?.signPiize) {
|
||
IlIIlIli.activity.daysign = activityContent.data?.signPiize
|
||
}
|
||
let prizeList1 = await this.lzkjApi("/api/task/sign/prizeList");
|
||
if (prizeList1.data?.prizeInfo) {
|
||
IlIIlIli.activity.prizeList1 = prizeList1.data?.prizeInfo
|
||
}
|
||
this.prizeList && this.prizeList.length > 0 && this.prizeList.filter(iIllii1l => ![2].includes(iIllii1l.prizeType) && iIllii1l.leftNum !== 0).length === 0 && (this.putMsg("垃圾活动"), this.stop());
|
||
if (!["1001", "1004"].includes(this.joinCode) && this.openCardTypes.includes(this.activityType)) return await this.bindWithVender(), await this.login(false);
|
||
if (this.joinCode === "1004") await this.login(false);
|
||
}
|
||
async["basicInfo"]() {
|
||
let IIIi1lII = await this.taskPostByJson("api/active/basicInfo", {
|
||
"activityId": this.activityId
|
||
});
|
||
if (IIIi1lII && IIIi1lII.resp_code === 0) {
|
||
const ll1ililI = {
|
||
10001: {
|
||
"name": "签到抽奖",
|
||
"api": "sign"
|
||
},
|
||
10002: {
|
||
"name": "签到抽奖",
|
||
"api": "sign"
|
||
},
|
||
10003: {
|
||
"name": "签到抽奖",
|
||
"api": "sign"
|
||
},
|
||
10004: {
|
||
"name": "签到抽奖",
|
||
"api": "sign"
|
||
},
|
||
10006: {
|
||
"name": "邀好友",
|
||
"api": "member"
|
||
},
|
||
10011: {
|
||
"name": "答题有礼",
|
||
"api": "knowledge"
|
||
},
|
||
10020: {
|
||
"name": "幸运抽奖",
|
||
"api": "jiugongge"
|
||
},
|
||
10021: {
|
||
"name": "幸运抽奖",
|
||
"api": "jiugongge"
|
||
},
|
||
10022: {
|
||
"name": "每日抢好礼",
|
||
"api": "dailyGrabs"
|
||
},
|
||
10023: {
|
||
"name": "签到有礼",
|
||
"api": "daySign"
|
||
},
|
||
10024: {
|
||
"name": "加购有礼",
|
||
"api": "addSku"
|
||
},
|
||
10025: {
|
||
"name": "关注店铺",
|
||
"api": "followShop"
|
||
},
|
||
10026: {
|
||
"name": "积分抽奖",
|
||
"api": "points"
|
||
},
|
||
10027: {
|
||
"name": "积分PK",
|
||
"api": "integralPk"
|
||
},
|
||
10030: {
|
||
"name": "下单有礼",
|
||
"api": "orderGift"
|
||
},
|
||
10031: {
|
||
"name": "幸运抽奖",
|
||
"api": "niudanji"
|
||
},
|
||
10032: {
|
||
"name": "集卡有礼",
|
||
"api": "collectCard"
|
||
},
|
||
10033: {
|
||
"name": "组队瓜分",
|
||
"api": "organizeTeam"
|
||
},
|
||
10034: {
|
||
"name": "神券裂变",
|
||
"api": "fissionCoupon"
|
||
},
|
||
10035: {
|
||
"name": "秒读手速",
|
||
"api": "dmpss"
|
||
},
|
||
10036: {
|
||
"name": "购物车锦鲤",
|
||
"api": "addSkuPrice"
|
||
},
|
||
10040: {
|
||
"name": "签到有礼",
|
||
"api": "daySign"
|
||
},
|
||
10041: {
|
||
"name": "幸运抽奖",
|
||
"api": "lotteryCenter"
|
||
},
|
||
10042: {
|
||
"name": "幸运抽奖",
|
||
"api": "lotteryCenter"
|
||
},
|
||
10043: {
|
||
"name": "分享有礼",
|
||
"api": "sharePolitely"
|
||
},
|
||
10044: {
|
||
"name": "投票抽奖",
|
||
"api": "votePolitely"
|
||
},
|
||
10045: {
|
||
"name": "买家秀",
|
||
"api": "buyersShow"
|
||
},
|
||
10046: {
|
||
"name": "幸运抽奖",
|
||
"api": "lotteryCenter"
|
||
},
|
||
10047: {
|
||
"name": "盖楼有礼",
|
||
"api": "building"
|
||
},
|
||
10048: {
|
||
"name": "限时抢券",
|
||
"api": "robCoupon"
|
||
},
|
||
10049: {
|
||
"name": "完善信息",
|
||
"api": "perfectInfo"
|
||
},
|
||
10053: {
|
||
"name": "关注商品",
|
||
"api": "followGoods"
|
||
},
|
||
10054: {
|
||
"name": "上上签抽奖",
|
||
"api": "upperSign"
|
||
},
|
||
10058: {
|
||
"name": "店铺礼包",
|
||
"api": "shopGift"
|
||
},
|
||
10059: {
|
||
"name": "合成大赢家",
|
||
"api": "bigwinner"
|
||
},
|
||
10060: {
|
||
"name": "新人优惠券",
|
||
"api": "couponMarketing"
|
||
},
|
||
10063: {
|
||
"name": "翻牌抽奖",
|
||
"api": "lotteryCenter"
|
||
},
|
||
10062: {
|
||
"name": "翻牌抽奖",
|
||
"api": "lotteryCenter"
|
||
},
|
||
10068: {
|
||
"name": "邀请关注",
|
||
"api": "inviteFollowShop"
|
||
},
|
||
10069: {
|
||
"name": "关注有礼",
|
||
"api": "lkFollowShop"
|
||
},
|
||
10070: {
|
||
"name": "邀请入会",
|
||
"api": "member"
|
||
},
|
||
10073: {
|
||
"name": "幸运抽奖",
|
||
"api": "lotteryCenter"
|
||
},
|
||
10077: {
|
||
"name": "首购有礼",
|
||
"api": "first/buy"
|
||
},
|
||
10078: {
|
||
"name": "满额有礼",
|
||
"api": "consumptionGift"
|
||
},
|
||
10079: {
|
||
"name": "积分兑换",
|
||
"api": "pointsExchange"
|
||
},
|
||
10080: {
|
||
"name": "积分刮刮乐",
|
||
"api": "points"
|
||
},
|
||
10081: {
|
||
"name": "答题有礼",
|
||
"api": "questionnaire"
|
||
},
|
||
10082: {
|
||
"name": "互动游戏",
|
||
"api": "game"
|
||
},
|
||
10084: {
|
||
"name": "互动游戏",
|
||
"api": "game"
|
||
},
|
||
10086: {
|
||
"name": "互动游戏",
|
||
"api": "game"
|
||
},
|
||
10089: {
|
||
"name": "互动游戏",
|
||
"api": "game"
|
||
},
|
||
10091: {
|
||
"name": "互动游戏",
|
||
"api": "game"
|
||
},
|
||
10092: {
|
||
"name": "互动游戏",
|
||
"api": "game"
|
||
},
|
||
10093: {
|
||
"name": "互动游戏",
|
||
"api": "game"
|
||
},
|
||
10094: {
|
||
"name": "互动游戏",
|
||
"api": "game"
|
||
},
|
||
10095: {
|
||
"name": "互动游戏",
|
||
"api": "game"
|
||
},
|
||
335: {
|
||
"name": "入会有礼",
|
||
"api": "rights"
|
||
}
|
||
},
|
||
{
|
||
shopName: IliIIIiI,
|
||
startTime: II1illi1,
|
||
endTime: IIIi1i1I,
|
||
actType: iIl111li
|
||
} = IIIi1lII.data;
|
||
this.actType = iIl111li;
|
||
this.type = ll1ililI[iIl111li]?.["api"];
|
||
this.shopName = IliIIIiI;
|
||
const ii11Ii11 = this.formatDate(II1illi1, "yyyy-MM-dd HH:mm:ss") + "至" + this.formatDate(IIIi1i1I, "yyyy-MM-dd HH:mm:ss");
|
||
IlIIlIli.activity = {
|
||
...IlIIlIli.activity,
|
||
"shopName": IliIIIiI,
|
||
"actType": iIl111li,
|
||
"startTime": II1illi1,
|
||
"endTime": IIIi1i1I,
|
||
"timeStr": ii11Ii11
|
||
};
|
||
II1illi1 && II1illi1 > Date.now() && (this.putMsg("活动未开始"), IlIIlIli.activity.noStart = true, this.stop());
|
||
IIIi1i1I && IIIi1i1I < Date.now() && (this.putMsg("活动已结束"), await this.writeLongCacheByStop(), this.stop());
|
||
if (!this.type) {
|
||
this.putMsg("未知类型");
|
||
this.exit();
|
||
return;
|
||
}
|
||
}
|
||
return IIIi1lII;
|
||
}
|
||
async["getDefenseUrls"]() {
|
||
if (IlIIlIli.activity.defenseUrls) return this.defenseUrls = IlIIlIli.activity.defenseUrls;
|
||
const {
|
||
domain: Iil11ll1,
|
||
mode: IilllIil
|
||
} = this;
|
||
let lili1lll;
|
||
if (IilllIil === "wx") lili1lll = "https://" + Iil11ll1 + "/customer/getDefenseUrls"; else {
|
||
if (IilllIil === "100") lili1lll = "https://" + this.domain + this.prefix + "/api/user-info/getDefenseUrls"; else {
|
||
this.defenseUrls = [];
|
||
return;
|
||
}
|
||
}
|
||
let iiillIII = await this.jd_api({
|
||
"url": lili1lll,
|
||
"maxRedirects": 0
|
||
}, false);
|
||
if (this.haskey(iiillIII, "data")) {
|
||
this.defenseUrls = IilllIil === "wx" ? iiillIII.data : iiillIII.data.map(l11lii => l11lii.interfaceName);
|
||
} else {
|
||
this.defenseUrls = [];
|
||
}
|
||
IlIIlIli.activity.defenseUrls = this.defenseUrls;
|
||
}
|
||
async["getPrizeList"]() {
|
||
if (IlIIlIli.activity.prizeList) {
|
||
this.prizeList = IlIIlIli.activity.prizeList;
|
||
return;
|
||
}
|
||
let liIi1I11 = await this.lzkjApi("api/prize/drawPrize");
|
||
liIi1I11 && liIi1I11.resp_code === 0 && (this.prizeList = liIi1I11.data?.["prizeInfo"] ?? [], IlIIlIli.activity.prizeList = this.prizeList);
|
||
}
|
||
async["getUserId"]() {
|
||
let lii1I111 = await this.lzkjApi("api/task/share/getUserId");
|
||
return lii1I111 && lii1I111.resp_code === 0 && (this.shareUserId = lii1I111.data?.["shareUserId"]), lii1I111;
|
||
}
|
||
async["lzkjToDo"](illi11ii, Ii1ill1 = "", IIiIl1Ii = 0) {
|
||
let iii11I = {
|
||
1: "关注店铺",
|
||
2: "浏览店铺",
|
||
3: "浏览商品",
|
||
4: "浏览会场/直播",
|
||
5: "关注商品",
|
||
6: "预约商品",
|
||
7: "加购商品",
|
||
8: "购买商品",
|
||
9: "分享商品",
|
||
10: "分享店铺",
|
||
11: "分享会场",
|
||
12: "分享活动",
|
||
13: "会员开卡",
|
||
14: "每日签到",
|
||
15: "邀请助力",
|
||
22: "购买商品"
|
||
},
|
||
III1I1ii = await this.lzkjApi("api/basic/task/toDo", {
|
||
"taskId": illi11ii,
|
||
"skuId": Ii1ill1
|
||
});
|
||
if (III1I1ii && III1I1ii.resp_code === 0) {
|
||
return this.log("任务[" + (iii11I[IIiIl1Ii] || illi11ii || IIiIl1Ii) + "]完成"), true;
|
||
}
|
||
return false;
|
||
}
|
||
async["lzkjTask"](ilIl11i = []) {
|
||
try {
|
||
if (ilIl11i.length > 0) {
|
||
for (let liIli1li of ilIl11i) {
|
||
if (liIli1li.status === 1) continue;
|
||
const {
|
||
taskType: iIi1ll1I,
|
||
taskId: iIllll,
|
||
completeCount: I1I11il1,
|
||
oneClickPurchase: iIi1i1ii,
|
||
finishNum: Il1IIIi1,
|
||
maxNum: iIi1II11,
|
||
oneClickFollowPurchase: l1liI1Ii,
|
||
activeLimit = {}
|
||
} = liIli1li;
|
||
if ([8, 13, 15, 22].includes(iIi1ll1I)) continue;
|
||
if ([1, 14].includes(iIi1ll1I)) {
|
||
await this.lzkjToDo(iIllll, "", iIi1ll1I);
|
||
continue;
|
||
}
|
||
if (iIi1i1ii === 0 || l1liI1Ii === 0) {
|
||
await this.lzkjToDo(iIllll, "", iIi1ll1I);
|
||
continue;
|
||
}
|
||
let ilIIi1iI = liIli1li.shareCount || liIli1li.completeCount || 0,
|
||
IIli1II = (iIi1II11 ?? activeLimit?.["limitNum"] ?? 1) * Il1IIIi1;
|
||
if (ilIIi1iI < IIli1II) {
|
||
let I1iliili = liIli1li?.["skuInfoVO"]?.["filter"](liliiIi => liliiIi?.["status"] === 0);
|
||
for (let lllIl1li = 0; lllIl1li < IIli1II; lllIl1li++) {
|
||
await this.lzkjToDo(iIllll, I1iliili?.[lllIl1li]?.["skuId"] || "", iIi1ll1I);
|
||
ilIIi1iI++;
|
||
if (ilIIi1iI >= IIli1II) break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
} catch (i11l1iii) {
|
||
this.log(i11l1iii.message);
|
||
}
|
||
}
|
||
async["acquire"](l1ii1l1l) {
|
||
let iI1I11l = await this.lzkjApi("api/prize/receive/acquire", {
|
||
"prizeInfoId": l1ii1l1l,
|
||
"status": 1
|
||
});
|
||
if (iI1I11l && iI1I11l.resp_code === 0) {
|
||
this.putMsg(iI1I11l.data?.["prizeName"]);
|
||
iI1I11l.data.prizeType === 3 && (this.addressId = iI1I11l.data?.["addressId"], this.prizeName = iI1I11l.data?.["prizeName"], await this.saveAddress());
|
||
return;
|
||
}
|
||
this.putMsg(iI1I11l?.["resp_msg"]);
|
||
this.wxStop(iI1I11l?.["resp_msg"]);
|
||
}
|
||
async["lzkjApi"](i1i1Ilil, IiIIiIlI = {}) {
|
||
return await this.taskPostByJson(i1i1Ilil, IiIIiIlI, {
|
||
"token": this.token
|
||
});
|
||
}
|
||
["getHmacSha256Sign"](il1II1i1, i1IlliIl) {
|
||
const ilIiil1l = "actid" + this.activityId + "buyernick" + this.aesBuyerNick + "sysmethod" + il1II1i1 + "timestamp" + i1IlliIl;
|
||
return this.hmacSHA256(this.getCookieByName("_sk") || "1111", ilIiil1l);
|
||
}
|
||
async["hdbApi"](li11liiI, liIiIi1i = {}, Il11lii1 = false, Iiill1ll = true) {
|
||
let IiIi1iIi = Il11lii1 ? "/front/task/" + li11liiI : "/front/activity/" + li11liiI,
|
||
iIlI1i1I = await this.taskPostByJson(IiIi1iIi, {
|
||
"appJsonParams": {
|
||
"id": this.activityId,
|
||
"userId": this.userId,
|
||
"method": IiIi1iIi,
|
||
"buyerNick": this.aesBuyerNick,
|
||
...liIiIi1i
|
||
}
|
||
});
|
||
if (iIlI1i1I && /数字签名不匹配|数字签名已失效|用户未登录/.exec(iIlI1i1I?.["message"]) && Iiill1ll) return await this.login(), await this.hdbApi(li11liiI, liIiIi1i, Il11lii1, false);
|
||
return iIlI1i1I;
|
||
}
|
||
async["loadFrontAct"]() {
|
||
let iIlIi11I = await this.hdbApi("loadFrontAct");
|
||
if (iIlIi11I && iIlIi11I?.["succ"]) {
|
||
IlIIlIli.activity.shopName = iIlIi11I?.["result"]?.["activity"]?.["shopTitle"];
|
||
let ll1lilll = iIlIi11I.result?.["activity"]?.["startTime"],
|
||
i1I11I1I = iIlIi11I.result?.["activity"]?.["endTime"],
|
||
IiIiIll1 = iIlIi11I.result?.["user"]?.["shopId"],
|
||
I11Ilil = iIlIi11I.result?.["user"]?.["venderId"];
|
||
this.shopId = IiIiIll1;
|
||
this.venderId = I11Ilil;
|
||
IlIIlIli.activity.actType = iIlIi11I.result?.["activity"]?.["actType"];
|
||
IlIIlIli.activity = {
|
||
...IlIIlIli.activity,
|
||
"shopId": IiIiIll1,
|
||
"venderId": I11Ilil,
|
||
"startTime": ll1lilll,
|
||
"endTime": i1I11I1I
|
||
};
|
||
let prizedata = iIlIi11I.result.activity.remark;
|
||
IlIIlIli.activity.hdbprizedata = prizedata;
|
||
await this.loadFrontAward(this.hdbPrefix + "front/activity/loadFrontAward");
|
||
ll1lilll && ll1lilll > Date.now() && (this.putMsg("活动未开始"), IlIIlIli.activity.noStart = true, this.stop());
|
||
if (i1I11I1I && i1I11I1I < Date.now()) {
|
||
this.putMsg("活动已结束");
|
||
await this.writeLongCacheByStop();
|
||
this.stop();
|
||
}
|
||
}
|
||
}
|
||
async["reportPVUV"]() {
|
||
await this.hdbApi("reportPVUV");
|
||
}
|
||
async["loadFrontAward"]() {
|
||
let IIIilIlI = await this.hdbApi("loadFrontAward");
|
||
if (IIIilIlI && IIIilIlI.succ) {
|
||
// this.prizeList = IIIilIlI.result ?? [];
|
||
let prizes = IIIilIlI.result || []
|
||
IlIIlIli.activity.prizeList = prizes;
|
||
IlIIlIli.activity.prizeList.length > 0 && IlIIlIli.activity.prizeList.filter(IIIIiIil => !["JD_D_COUPON"].includes(IIIIiIil.awardType)).length === 0 && (this.putMsg("垃圾活动"), this.stop());
|
||
}
|
||
return IIIilIlI;
|
||
}
|
||
["formatDateString"](llliliIl) {
|
||
if (llliliIl?.["match"](/\d{4}年\d{1,2}月\d{1,2}日\d{2}:\d{2}:\d{2}/)) return llliliIl.replace(/(\d{4})年(\d{1,2})月(\d{1,2})日(\d{2}:\d{2}:\d{2})/, "$1-$2-$3 $4");
|
||
return llliliIl;
|
||
}
|
||
async["getRuleSETime"](illiIli1 = this.rule) {
|
||
const IlilIiii = /(\d{4}-\d{1,2}-\d{1,2} \d{2}:\d{2}|\d{4}-\d{1,2}-\d{1,2}\s\d{2}:\d{2}:\d{2}|\d{4}年\d{1,2}月\d{1,2}日\d{2}:\d{2}:\d{2})/g,
|
||
I1IlI1li = illiIli1.match(IlilIiii);
|
||
if (I1IlI1li) {
|
||
const illI11lI = this.formatDateString(I1IlI1li[0]),
|
||
Il11ll = this.formatDateString(I1IlI1li[1]);
|
||
this.startTime = new Date(illI11lI).getTime();
|
||
this.endTime = new Date(Il11ll).getTime();
|
||
IlIIlIli.activity.startTime = this.startTime;
|
||
IlIIlIli.activity.endTime = this.endTime;
|
||
this.startTime && this.startTime > Date.now() && (this.putMsg("活动未开始"), IlIIlIli.activity.noStart = true, this.stop());
|
||
this.endTime && this.endTime < Date.now() && (this.putMsg("活动已结束"), await this.writeLongCacheByStop(), this.stop());
|
||
}
|
||
}
|
||
async["jinggengShopInfo"]() {
|
||
let iiilIlII = await this.taskGet(this.activityUrl);
|
||
if (iiilIlII) {
|
||
let lIlll = lIl1ii.load(iiilIlII);
|
||
const lii1llli = lIlll("#shop_sid").attr("value"),
|
||
l1illi1l = lIlll("#shop_title").attr("value"),
|
||
actType = lIlll("#actType").attr("value"),
|
||
lIIiI1lI = lIlll("#description").text();
|
||
this.debug("shop_sid", lii1llli);
|
||
this.shopId = lii1llli;
|
||
this.venderId = this.userId;
|
||
this.shopName = l1illi1l;
|
||
this.rule = lIIiI1lI;
|
||
this.buyerSign = lIlll('#buyerSign')?.val() || '';
|
||
if (this.activityUrl.includes("loadBlindBox")) {
|
||
IlIIlIli.activity.prizeList = JSON.parse(lIlll('#jdEquityList').attr("value"));
|
||
}
|
||
if (this.activityUrl.includes("showDrawOne")) {
|
||
IlIIlIli.activity.prizeList = JSON.parse(lIlll('#awards', 'body').text());
|
||
}
|
||
if (this.activityUrl.includes("showSign")) {
|
||
let description = this.rule.replace(/;/g, '\n');
|
||
let dailySignIn = [];
|
||
let continuousSignIn = [];
|
||
for (const item of description.split("\n")) {
|
||
let dailySignInMatch = item.match(/每日签到赠送(\d+)([\u4e00-\u9fa5]{2})/);
|
||
if (dailySignInMatch) {
|
||
dailySignIn.push({
|
||
type: "每日签到",
|
||
quantity: parseInt(dailySignInMatch[1]),
|
||
unit: (dailySignInMatch[2])
|
||
});
|
||
}
|
||
let continuousSignInMatch = item.match(/连续签到(\d+)天,赠送(\d+)([\u4e00-\u9fa5]{2})/);
|
||
if (continuousSignInMatch) {
|
||
continuousSignIn.push({
|
||
type: "连续签到",
|
||
dayNum: parseInt(continuousSignInMatch[1]),
|
||
quantity: parseInt(continuousSignInMatch[2]),
|
||
unit: continuousSignInMatch[3]
|
||
});
|
||
}
|
||
}
|
||
IlIIlIli.activity.prizeList = [...dailySignIn, ...continuousSignIn];
|
||
}
|
||
const IllIll11 = lIlll("title").text();
|
||
return IlIIlIli.activity.shopName = this.shopName, IlIIlIli.activity.shopId = this.shopId, IlIIlIli.activity.venderId = this.venderId, IlIIlIli.activity.actType = actType, await this.getRuleSETime(lIIiI1lI), IllIll11?.["includes"]("已结束") && (this.putMsg("活动已结束"), await this.writeLongCacheByStop(), this.stop()), lIlll;
|
||
}
|
||
return undefined;
|
||
}
|
||
async["setMixNick"](IllillI = this.isvToken) {
|
||
let IlII1i1 = await this.taskPost("front/setMixNick", {
|
||
"strTMMixNick": IllillI,
|
||
"userId": this.userId,
|
||
"source": "01"
|
||
});
|
||
return this.debug(IlII1i1), IlII1i1 && IlII1i1.succ && (this.mixNick = IlII1i1?.["msg"]), IlII1i1 && IlII1i1?.["msg"]?.["includes"]("商家token过期") && (this.putMsg("商家token过期"), this.stop()), !this.mixNick && (this.putMsg("获取mixNick失败"), this.exit()), IlII1i1;
|
||
}
|
||
async["jinggengApi"](Iill1llI, I1illiI = {}) {
|
||
let I1Il1l1I = await this.taskPost("ql/front/" + Iill1llI, {
|
||
"act_id": this.activityId,
|
||
"user_id": this.userId,
|
||
...I1illiI
|
||
}, {
|
||
"buyerSign": this.buyerSign
|
||
});
|
||
return I1Il1l1I;
|
||
}
|
||
async["gzslApi"](l1lliil1, i1lIiiI = {}, Illl1lII = false) {
|
||
let Iil1l1 = {
|
||
"token": this.isvToken,
|
||
"source": "01",
|
||
"id": this.activityId,
|
||
...i1lIiiI
|
||
};
|
||
|
||
Illl1lII && (Iil1l1.wxToken = this.isvToken);
|
||
let li1II1il = await this.taskPostByJson("wuxian/user/" + l1lliil1 + "/" + this.activityId + (Illl1lII ? "?wxToken=" + encodeURIComponent(this.isvToken) : ""), Iil1l1);
|
||
return li1II1il;
|
||
}
|
||
async["hzbzInfo"]() {
|
||
let lI1liilI = await this.taskGet(this.activityUrl);
|
||
if (!lI1liilI) return;
|
||
let lIiliI11 = this.textToHtml(lI1liilI),
|
||
i1il1Ili = lIiliI11("#draw_info").text();
|
||
i1il1Ili = this.parseJSON(i1il1Ili);
|
||
let iIIiI111 = i1il1Ili?.["stime"] || 0,
|
||
IIlIll1I = i1il1Ili?.["etime"] || 0;
|
||
this.shopName = i1il1Ili?.["shopName"];
|
||
this.shopId = i1il1Ili?.["shopId"];
|
||
this.rule = i1il1Ili?.["drawRule"];
|
||
IlIIlIli.activity.shopId = this.shopId;
|
||
IlIIlIli.activity.venderId = this.shopId;
|
||
IlIIlIli.activity.shopName = this.shopName;
|
||
IlIIlIli.activity.startTime = iIIiI111;
|
||
IlIIlIli.activity.endTime = IIlIll1I;
|
||
if (iIIiI111 && iIIiI111 > this.timestamp()) {
|
||
this.putMsg("活动未开始");
|
||
this.stop();
|
||
return;
|
||
}
|
||
if (IIlIll1I && IIlIll1I < this.timestamp()) {
|
||
this.putMsg("活动已结束");
|
||
await this.writeLongCacheByStop();
|
||
this.stop();
|
||
return;
|
||
}
|
||
return lIiliI11;
|
||
}
|
||
async["hzbzApi"](lilli1i1, liI1liI = {}) {
|
||
let l1iilI1 = await this.taskPost("bigdraw/" + lilli1i1, liI1liI);
|
||
return l1iilI1;
|
||
}
|
||
// async ["v2Api"](llII1iI, I1IIiiii = undefined) {
|
||
// let ii1Ii1li = await this.taskPostByJson(llII1iI, this.encryptCrypto("AES", "CBC", "Pkcs7", "2JjUvJEAsA2Yog==", JSON.stringify(I1IIiiii, null, 2), "Hd5W5ONsYKmGm9QA"));
|
||
// return ii1Ii1li && ii1Ii1li.data && (ii1Ii1li.data = ii1Ii1li?.["data"] ? this.str2Json(this.decryptCrypto("AES", "CBC", "Pkcs7", "2JjUvJEAsA2Yog==", ii1Ii1li.data, "Hd5W5ONsYKmGm9QA")) : ii1Ii1li.data), ii1Ii1li;
|
||
// }
|
||
async["v2Api"](I1111lii, l11llII = undefined) {
|
||
let I1Ill = await this.taskPostByJson(I1111lii, this.encryptCrypto("AES", "CBC", "Pkcs7", "2JjUvJEAsA2Yog==", JSON.stringify(l11llII, null, 2), "Hd5W5ONsYKmGm9QA"));
|
||
return I1Ill && I1Ill.data && (I1Ill.data = I1Ill?.["data"] ? this.str2Json(this.isDataEncrypted(I1Ill.data) ? this.decryptCrypto("AES", "CBC", "Pkcs7", "2JjUvJEAsA2Yog==", I1Ill.data, "Hd5W5ONsYKmGm9QA") : I1Ill.data) : I1Ill.data), I1Ill;
|
||
}
|
||
|
||
["isDataEncrypted"](str) {
|
||
try {
|
||
// 尝试对字符串进行Base64解码
|
||
const decodedStr = atob(str);
|
||
// 检查解码后的字符串是否包含可读字符
|
||
return !/ ^ [\x00 -\x7F] *$/.test(decodedStr); // 如果不全是ASCII字符,则可能是加密的
|
||
}
|
||
catch (err) {
|
||
// 如果解码失败,说明不是有效的Base64字符串
|
||
return false;
|
||
}
|
||
}
|
||
async["getActivityBase"]() {
|
||
let Iiii1iil = await this.v2Api("api/common/getActivityBase");
|
||
// this.debug(Iiii1iil);
|
||
if (Iiii1iil && Iiii1iil.code === 200) {
|
||
this.shopName = Iiii1iil.data.shopName;
|
||
let IiilIil1 = Iiii1iil.data.startTime,
|
||
IliIliIl = Iiii1iil.data.endTime,
|
||
jdActivityType = Iiii1iil.data.jdActivityType,
|
||
IIlIli = Iiii1iil.data.openCardLink ?? "";
|
||
this.venderId = this.getQueryString(IIlIli, "venderId") ?? this.shopId;
|
||
IiilIil1 && IiilIil1 > this.timestamp() && (this.putMsg("活动未开始"), IlIIlIli.activity.noStart = true, this.stop());
|
||
IliIliIl && IliIliIl < this.timestamp() && (this.putMsg("活动已结束"), await this.writeLongCacheByStop(), this.stop());
|
||
let li1Ii11I = Iiii1iil.data.thresholdResponseList ?? [];
|
||
for (let illi1l11 of li1Ii11I) {
|
||
if (illi1l11?.["type"] === 2 || illi1l11?.["type"] === 1) {
|
||
await this.v2Api("api/common/followShop");
|
||
if (illi1l11?.["type"] === 1) this.openCard = false;
|
||
continue;
|
||
}
|
||
}
|
||
IlIIlIli.activity.shopName = this.shopName;
|
||
IlIIlIli.activity.startTime = IiilIil1;
|
||
IlIIlIli.activity.endTime = IliIliIl;
|
||
IlIIlIli.activity.shopId = this.shopId;
|
||
IlIIlIli.activity.venderId = this.venderId;
|
||
IlIIlIli.activity.activityType = jdActivityType;
|
||
return;
|
||
}
|
||
this.putMsg(Iiii1iil?.["message"] || "获取活动信息失败");
|
||
this.wxStop(Iiii1iil?.["message"]);
|
||
this.exit();
|
||
}
|
||
async["v2getRule"]() {
|
||
let Iiii1iil = await this.taskGet("api/common/getRule");
|
||
if (Iiii1iil && Iiii1iil.code === 200) {
|
||
let prizedata = Iiii1iil.data;
|
||
IlIIlIli.activity.prizedata = prizedata;
|
||
return;
|
||
}
|
||
this.exit();
|
||
}
|
||
async["v2getPrizes"]() {
|
||
let Iiii1iil = await this.v2Api("api/" + this.activityType + "/getPrizes");
|
||
this.debug(Iiii1iil);
|
||
if (Iiii1iil && Iiii1iil.code === 200) {
|
||
let prizeList = Iiii1iil.data;
|
||
IlIIlIli.activity.prizeList = prizeList;
|
||
return;
|
||
}
|
||
this.exit();
|
||
}
|
||
async["v2getPrizeList"]() {
|
||
let Iiii1iil = await this.v2Api("api/" + this.activityType + "/getPrizeList");
|
||
this.debug(Iiii1iil);
|
||
if (Iiii1iil && Iiii1iil.code === 200) {
|
||
let prizeList = Iiii1iil.data;
|
||
IlIIlIli.activity.prizeList = prizeList;
|
||
return;
|
||
}
|
||
this.exit();
|
||
}
|
||
async["v2Task"]() {
|
||
let l11lIii = await this.v2Api("api/" + this.activityType + "/getTask");
|
||
this.debug(l11lIii);
|
||
if (l11lIii && l11lIii.code === 200) {
|
||
let llI1lIll = l11lIii?.["data"] || [];
|
||
for (let liIIiIli of llI1lIll) {
|
||
if (liIIiIli.taskFinishGiveAllLotteryCount >= liIIiIli.totalLimit) continue;
|
||
switch (liIIiIli.taskType) {
|
||
case 2:
|
||
case 10:
|
||
case 12:
|
||
await this.v2ToDoTask(liIIiIli.taskType);
|
||
break;
|
||
case 5:
|
||
case 7:
|
||
case 9:
|
||
if ([5, 7].includes(liIIiIli.taskType) && liIIiIli.optWay === 2) {
|
||
this.debug("一键任务");
|
||
await this.v2ToDoTask(liIIiIli.taskType);
|
||
break;
|
||
}
|
||
let IiI1il1l = liIIiIli.taskType === 5 ? "getFollowSkuTaskSkuList" : liIIiIli.taskType === 7 ? "getTaskAddSku" : "getShareSkuTaskSkuList",
|
||
i11Iilll = await this.v2Api("api/" + this.activityType + "/" + IiI1il1l),
|
||
i1Iili1 = [5, 9].includes(liIIiIli.taskType) ? i11Iilll?.["data"]?.["filter"](lIli1II => !lIli1II.isOperated) || [] : i11Iilll?.["data"]?.["filter"](ll1Iil11 => ll1Iil11.status === 0) || [];
|
||
for (let l1I1l1il = liIIiIli.taskUnitFinishCount || 0; l1I1l1il < Math.min(liIIiIli.perOperateCount * liIIiIli.limit, i1Iili1.length); l1I1l1il++) {
|
||
await this.v2ToDoTask(liIIiIli.taskType, i1Iili1.shift().skuId);
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
async["v2ToDoTask"](liil1iII, liliI11I = "", iiIiIIii = null) {
|
||
let IllII1il = {
|
||
2: "浏览店铺",
|
||
5: "关注商品",
|
||
7: "加购商品",
|
||
8: "购买商品",
|
||
9: "分享商品",
|
||
10: "分享店铺",
|
||
12: "分享活动"
|
||
},
|
||
lIi1lI1 = iiIiIIii ?? {
|
||
2: "browseShop",
|
||
5: "followSku",
|
||
7: "addSku",
|
||
9: "shareSku",
|
||
10: "shareShop",
|
||
12: "shareActivity"
|
||
},
|
||
il11iil = await this.v2Api("api/" + this.activityType + "/" + lIi1lI1[liil1iII], {
|
||
"skuId": liliI11I
|
||
});
|
||
this.debug(il11iil, "api/" + this.activityType + "/" + lIi1lI1[liil1iII], liliI11I);
|
||
if (il11iil && il11iil.code === 200) return this.log("任务[" + (IllII1il[liil1iII] || liliI11I || liil1iII) + "]完成"), il11iil.data;
|
||
}
|
||
}
|
||
class lI1l11l1 {
|
||
constructor(iIillIii) {
|
||
this.activityUrl = iIillIii;
|
||
this.switchInterval = iIl1IlI1.wxProxyInterval;
|
||
this.proxyEnable = false;
|
||
this.proxyState = true;
|
||
this.wxProxyMode = iIl1IlI1.wxProxyMode;
|
||
this.proxie = null;
|
||
this.currentIndex = 0;
|
||
this.isLocked = false;
|
||
this.wxProxyCheck = iIl1IlI1.wxProxyCheck;
|
||
this.subscriptionUrls = typeof iIl1IlI1.wxProxyUrl === "string" ? iIl1IlI1.wxProxyUrl.split("@").filter(i1lIil1i => i1lIil1i && i1lIil1i.trim()).map((l1iIi1i, IIiI1Iii) => {
|
||
return {
|
||
"name": IIiI1Iii + 1,
|
||
"url": l1iIi1i,
|
||
"priority": 1,
|
||
"enabled": true
|
||
};
|
||
}) : iIl1IlI1.wxProxyUrl.filter(Ii1iI1 => Ii1iI1.enabled).sort((illiii11, ll11IIIl) => ll11IIIl.priority - illiii11.priority);
|
||
}
|
||
["log"](...Il1iIlIl) {
|
||
iIl1IlI1.logger.info("proxy|", ...Il1iIlIl);
|
||
}
|
||
["updateProxyEnable"](Iiillii) {
|
||
!Iiillii && (this.proxie = null, this.proxyState = false);
|
||
this.proxyEnable = Iiillii;
|
||
}
|
||
async ["acquireLock"]() {
|
||
if (!this.isLocked) return this.isLocked = true, {};
|
||
while (this.isLocked) {
|
||
await new Promise(iilI1l => setTimeout(iilI1l, 100));
|
||
}
|
||
return {};
|
||
}
|
||
["releaseLock"]() {
|
||
this.isLocked = false;
|
||
}
|
||
async ["fetchProxies"](liI111li = 10) {
|
||
if (this.subscriptionUrls.length === 0) return this.log("没有启用的代理订阅地址"), false;
|
||
let lll1111 = 0;
|
||
const {
|
||
name = lll1111,
|
||
url: iilI1Il1
|
||
} = this.subscriptionUrls[lll1111];
|
||
try {
|
||
const Ii1lIIIl = await IliilIlI.get(iilI1Il1),
|
||
il11l1Ii = typeof Ii1lIIIl.data === "object" && Ii1lIIIl.data !== null ? JSON.stringify(Ii1lIIIl.data) : Ii1lIIIl.data,
|
||
i111IlIl = /((\w+:\w+@\w+\.\w+:\d+)|(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d+)|([\w-]+\.[\w.-]+:\d+))(?![\u4e00-\u9fa5])/g,
|
||
i1lIIil1 = il11l1Ii.match(i111IlIl);
|
||
if (i1lIIil1) {
|
||
this.log("已成功从[" + name + "]提取[" + i1lIIil1.length + "]ip");
|
||
if (this.wxProxyMode === 2) this.proxie = i1lIIil1; else {
|
||
this.proxie = [i1lIIil1[0]];
|
||
this.log("获取到的ip:" + this.proxie[0]);
|
||
if (this.wxProxyCheck === 1 && !(await this.checkPing(this.proxie[0]))) {
|
||
if (liI111li > 0) {
|
||
return this.log(this.proxie[0] + "不通,正在重新获取..."), await new Promise(iliII111 => setTimeout(iliII111, 2000)), await this.fetchProxies(liI111li - 1);
|
||
} else return false;
|
||
}
|
||
}
|
||
return true;
|
||
} else {
|
||
this.log(il11l1Ii);
|
||
const illllIi1 = "[" + name + "]提取ip失败";
|
||
this.subscriptionUrls.splice(lll1111, 1);
|
||
if (this.subscriptionUrls.length === 0) return this.log(illllIi1 + ",已无可用代理地址,退出代理"), false;
|
||
return this.log(illllIi1 + ",降级提取"), await this.fetchProxies(liI111li - 1);
|
||
}
|
||
} catch (I1IliI1l) {
|
||
const lI11i11l = "[" + name + "]订阅地址失效";
|
||
this.subscriptionUrls.splice(lll1111, 1);
|
||
if (this.subscriptionUrls.length === 0) {
|
||
return this.log(lI11i11l + ",已无可用代理地址,退出代理"), false;
|
||
}
|
||
return this.log(lI11i11l + ",降级提取"), await this.fetchProxies(liI111li);
|
||
}
|
||
}
|
||
async ["setCurrentProxy"](lIlliIII = false) {
|
||
if (!this.proxyState) return false;
|
||
if (!lIlliIII && this.wxProxyMode === 2 && this.proxie?.["length"] > 0) return true;
|
||
if (!this.isLocked) {
|
||
this.lock = await this.acquireLock();
|
||
try {
|
||
if (this.subscriptionUrls.length === 0) return false;
|
||
if (!(await this.fetchProxies())) return this.log("获取代理ip失败,退出代理"), this.updateProxyEnable(false), false;
|
||
return true;
|
||
} finally {
|
||
this.releaseLock();
|
||
}
|
||
} else return await this.acquireLock(), true;
|
||
}
|
||
async ["getProxy"](Ill1Ili = 10) {
|
||
let i111ll1 = this.proxie.shift();
|
||
if (!i111ll1 && Ill1Ili <= 0) return null;
|
||
if (!i111ll1) return await this.setCurrentProxy(), await this.getProxy(Ill1Ili - 1);
|
||
if (this.wxProxyCheck === 1 && !(await this.checkPing(i111ll1))) return Ill1Ili > 0 ? (this.log(i111ll1 + "不通,正在重新获取..."), await this.getProxy(Ill1Ili - 1)) : null;
|
||
return i111ll1;
|
||
}
|
||
["cleanProxy"]() {
|
||
this.proxie = null;
|
||
}
|
||
async ["getCurrentProxy"]() {
|
||
if (!this.proxyEnable) {
|
||
return null;
|
||
}
|
||
return (!this.proxie || this.proxie?.["length"] === 0) && (await this.setCurrentProxy()), this.proxie ? this.proxie.length === 1 && this.wxProxyMode === 1 ? this.proxie[0] : await this.getProxy() : null;
|
||
}
|
||
async ["checkPing"](liI1iiii) {
|
||
try {
|
||
const liil1li = liI1iiii.split(":");
|
||
if (liil1li.length !== 2) return false;
|
||
return await I1II1lIl({
|
||
"url": this.activityUrl || "https://www.jd.com",
|
||
"headers": {
|
||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
|
||
},
|
||
"httpsAgent": new IIIlIII1("http://" + liI1iiii),
|
||
"timeout": 4000
|
||
}), true;
|
||
} catch (ii1I1IIl) {
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
class iIIIili1 {
|
||
constructor(iI111iii, Illliill) {
|
||
this.cookies = iI111iii;
|
||
this.TaskClass = Illliill;
|
||
this._tasks = {};
|
||
}
|
||
*["taskGenerator"]() {
|
||
for (let i1IIllii = 0; i1IIllii < this.cookies.length; i1IIllii++) {
|
||
!(i1IIllii in this._tasks) && (this._tasks[i1IIllii] = new this.TaskClass(i1IIllii, this.cookies[i1IIllii]));
|
||
yield this._tasks[i1IIllii];
|
||
}
|
||
}
|
||
["getTask"](iiI1li1i) {
|
||
return !(iiI1li1i in this._tasks) && iiI1li1i < this.cookies.length && (this._tasks[iiI1li1i] = new this.TaskClass(iiI1li1i, this.cookies[iiI1li1i])), this._tasks[iiI1li1i];
|
||
}
|
||
get ["cookie_all_obj"]() {
|
||
const li11llli = this;
|
||
return new Proxy([], {
|
||
"get"(iIiilIi, Ill11li1) {
|
||
if (Ill11li1 === "length") return li11llli.cookies.length;
|
||
if (typeof Ill11li1 === "string" && !isNaN(Ill11li1)) {
|
||
const Il1I1lIl = Number(Ill11li1);
|
||
if (Il1I1lIl < li11llli.cookies.length) {
|
||
return li11llli.getTask(Il1I1lIl);
|
||
}
|
||
}
|
||
return iIiilIi[Ill11li1];
|
||
},
|
||
"ownKeys"() {
|
||
return Array.from({
|
||
"length": li11llli.cookies.length
|
||
}, (i11lIii, iliIll1l) => String(iliIll1l));
|
||
},
|
||
"getOwnPropertyDescriptor"(ll1lII1, IlIiiI1I) {
|
||
if (typeof IlIiiI1I === "string" && !isNaN(IlIiiI1I)) {
|
||
const lllliiI = Number(IlIiiI1I);
|
||
if (lllliiI < li11llli.cookies.length) {
|
||
return {
|
||
"configurable": true,
|
||
"enumerable": true,
|
||
"get": () => li11llli.cookie_all_obj[lllliiI],
|
||
"set": lI1lliI => {
|
||
li11llli.cookie_all_obj[lllliiI] = lI1lliI;
|
||
}
|
||
};
|
||
}
|
||
}
|
||
return undefined;
|
||
}
|
||
});
|
||
}
|
||
["filter"](li1iii) {
|
||
const lilIlili = [];
|
||
for (let l1i1li1 = 0; l1i1li1 < this.cookies.length; l1i1li1++) {
|
||
const Il1IIIIl = this.getTask(l1i1li1);
|
||
li1iii(Il1IIIIl) && lilIlili.push(Il1IIIIl);
|
||
}
|
||
return lilIlili;
|
||
}
|
||
["map"](ll1ii1iI) {
|
||
const lIlllIl1 = [];
|
||
for (let l11IlI1i = 0; l11IlI1i < this.cookies.length; l11IlI1i++) {
|
||
const lIl1II11 = this.getTask(l11IlI1i);
|
||
lIlllIl1.push(ll1ii1iI(lIl1II11));
|
||
}
|
||
return lIlllIl1;
|
||
}
|
||
["forEach"](il1ilI1I) {
|
||
for (let ili1lI1i = 0; ili1lI1i < this.cookies.length; ili1lI1i++) {
|
||
const l1iIlll1 = this.getTask(ili1lI1i);
|
||
il1ilI1I(l1iIlll1);
|
||
}
|
||
}
|
||
["find"](l1I11li1) {
|
||
for (let II1iiII = 0; II1iiII < this.cookies.length; II1iiII++) {
|
||
const liIlllIi = this.getTask(II1iiII);
|
||
if (l1I11li1(liIlllIi)) {
|
||
return liIlllIi;
|
||
}
|
||
}
|
||
return undefined;
|
||
}
|
||
}
|
||
class Iii1iI1i {
|
||
static ["activity"] = {};
|
||
static ["msg"] = [];
|
||
static ["proxy"];
|
||
static ["running"] = true;
|
||
static ["cookies"] = [];
|
||
static ["paddedStringEndCount"] = 0;
|
||
static ["concurrencyLimit"] = 0;
|
||
static ["version"] = "3.0.6";
|
||
static ["envInfo"] = {};
|
||
static ["cookieInit"]() {
|
||
let ii111i1l = [],
|
||
iiIII1i1 = [];
|
||
Object.keys(Il1ii11).forEach(iiI1lli1 => {
|
||
ii111i1l.push(Il1ii11[iiI1lli1]);
|
||
});
|
||
if (iIl1IlI1.wxEnableOtherEnv === 2) {
|
||
let iI1IiIli = this.readFileSync("./env/ck.txt");
|
||
iiIII1i1 = iI1IiIli.split("\n").map(lI1lIiI => lI1lIiI.trim()).filter(iliii1ii => iliii1ii !== "");
|
||
ii111i1l = ii111i1l.concat(iiIII1i1.filter(l11111iI => !ii111i1l.includes(l11111iI)));
|
||
}
|
||
let IiI111Il = this.readFileSync("./env/invite_ck.txt"),
|
||
I1I1llI1 = IiI111Il.split("\n").map(II111ill => II111ill.trim()).filter(Il1ilII1 => Il1ilII1 !== "");
|
||
return [ii111i1l, I1I1llI1];
|
||
}
|
||
static ["log"](...iIl1I1) {
|
||
iIl1IlI1.logger.info("run |", ...iIl1I1);
|
||
}
|
||
static ["readFileSync"](ll1llIll) {
|
||
try {
|
||
return l1I11II1.readFileSync(ll1llIll, "utf-8").toString();
|
||
} catch (I111IIiI) {
|
||
return "";
|
||
}
|
||
}
|
||
static async ["runTasksConcurrentlyWithDelay"](ii1ilIl1, Iiiliill, iI1ili1, IiI1Iii = false, ilIl1l1 = true) {
|
||
const liliiiI1 = [],
|
||
lliiIliI = new Set();
|
||
let ll111lI1 = this;
|
||
async function liI1lIii(Ilil111) {
|
||
try {
|
||
await new Promise(llI11IIi => setTimeout(llI11IIi, iI1ili1));
|
||
const I111iili = await Ilil111();
|
||
liliiiI1.push(I111iili);
|
||
} catch (ii1Illi1) {
|
||
if (ii1Illi1 instanceof i1I1IiII) {
|
||
ll111lI1.running = false;
|
||
ll111lI1.centralReject(new i1I1IiII());
|
||
} else {
|
||
if (ii1Illi1 instanceof iiiIIIll) { } else ll111lI1.log(ii1Illi1?.["message"] || ii1Illi1);
|
||
}
|
||
}
|
||
}
|
||
for (const il1llIlI of ii1ilIl1) {
|
||
if (!this.running && ilIl1l1) break;
|
||
const lI1lIii1 = IiI1Iii ? this.concurrencyLimit : Iiiliill;
|
||
lliiIliI.size >= lI1lIii1 && (await Promise.race(lliiIliI));
|
||
const iIiIi1li = liI1lIii(il1llIlI);
|
||
lliiIliI.add(iIiIi1li);
|
||
iIiIi1li.then(() => lliiIliI.delete(iIiIi1li));
|
||
}
|
||
const l1ll111 = new Promise((IiilII11, IIlIIil1) => {
|
||
ll111lI1.centralResolve = IiilII11;
|
||
ll111lI1.centralReject = IIlIIil1;
|
||
});
|
||
return l1ll111.then(() => {
|
||
lliiIliI.forEach(iIiiIll1 => iIiiIll1.catch(() => { }));
|
||
}).catch(() => { }), await Promise.all(lliiIliI), liliiiI1;
|
||
}
|
||
static ["get_mains_obj"]() {
|
||
try {
|
||
let IIl1lli1 = this.taskManager.find(ill1iil1 => ill1iil1.index < this.cookieLength && ill1iil1.needHelp && !ill1iil1.isInviter);
|
||
if (iIl1IlI1.leaderNum && IIl1lli1.index >= iIl1IlI1.leaderNum) return null;
|
||
return IIl1lli1.isInviter = true, IIl1lli1;
|
||
} catch (i1Il1IIl) {
|
||
return null;
|
||
}
|
||
}
|
||
static ["get_Invite_obj"](liii1iiI = null, iiII1i1i = []) {
|
||
try {
|
||
if (liii1iiI?.["inviteMode"] === 2) {
|
||
let I1i1li = this.taskManager.find(llll1l1 => !llll1l1.isUse && llll1l1.canHelp && llll1l1.pin !== liii1iiI.pin);
|
||
return I1i1li.isUse = true, I1i1li;
|
||
} else {
|
||
if (liii1iiI?.["inviteMode"] === 1) {
|
||
const i1i1iili = iiII1i1i.map(IllIl1l => IllIl1l.pin);
|
||
let llllli1 = this.taskManager.find(lI1ilII1 => liii1iiI.pin != lI1ilII1.pin && lI1ilII1.canHelp && !i1i1iili.includes(lI1ilII1.pin));
|
||
return llllli1;
|
||
} else {
|
||
let lI1il11i = this.taskManager.find(iliIl1I1 => !iliIl1I1.isUse && iliIl1I1.canHelp && !iliIl1I1.isInviter);
|
||
return lI1il11i.isUse = true, lI1il11i;
|
||
}
|
||
}
|
||
} catch (iiI11lIi) {
|
||
return null;
|
||
}
|
||
}
|
||
static ["stopAllThreads"]() {
|
||
ilIiilII.emit("stopAllThreads");
|
||
}
|
||
static async ["checkAbortSignal"](Ii11lil, iiI1lIII) {
|
||
return new Promise((Il1I1il1, lIIll1ll) => {
|
||
iiI1lIII.addEventListener("abort", () => {
|
||
lIIll1ll(new lllli1iI("Aborted"));
|
||
});
|
||
Ii11lil.then(Il1I1il1).catch(lIIll1ll);
|
||
});
|
||
}
|
||
static async ["async_thread"](iiI1I111, II1Iili) {
|
||
const i1li1Ill = new li1Iil1(),
|
||
i1ll11il = i1li1Ill.signal;
|
||
ilIiilII.on("stopAllThreads", () => {
|
||
i1li1Ill.abort();
|
||
});
|
||
while (this.running) {
|
||
let lilIiIii = this.get_mains_obj();
|
||
if (!lilIiIii) return;
|
||
try {
|
||
await this.checkAbortSignal(lilIiIii.userTask(), i1ll11il);
|
||
if (II1Iili?.["inviteTask"]) {
|
||
if (!lilIiIii.isBlack) {
|
||
if (lilIiIii.needHelp) {
|
||
lilIiIii.log("开始邀请");
|
||
let i11lII11 = [];
|
||
while (lilIiIii.needHelp) {
|
||
let iliI1ilI = [];
|
||
if (lilIiIii.helpedCount >= IlIIlIli.activity.maxHelpCount) {
|
||
lilIiIii.needHelp = false;
|
||
lilIiIii.log("助力已满");
|
||
break;
|
||
}
|
||
for (let iIIlIiIl = 0; iIIlIiIl < Math.abs(Math.min(...[IlIIlIli.activity.maxHelpCount - lilIiIii.helpedCount, II1Iili?.["thread"] || 1, IlIIlIli.activity.customThread].filter(Il1II1li => typeof Il1II1li === "number"))); iIIlIiIl++) {
|
||
let lIlI1Iil = this.get_Invite_obj(lilIiIii, i11lII11);
|
||
lIlI1Iil && (iliI1ilI.push(lIlI1Iil), i11lII11.push(lIlI1Iil));
|
||
}
|
||
if (iliI1ilI.length === 0) {
|
||
lilIiIii.log("已无助力号,退出线程 threads[" + iiI1I111 + "]");
|
||
return;
|
||
}
|
||
let l1IliiIl = [];
|
||
for (let iiiIl11 of iliI1ilI) {
|
||
l1IliiIl.push(() => iiiIl11.inviteTask(lilIiIii));
|
||
}
|
||
await this.runTasksConcurrentlyWithDelay(l1IliiIl, l1IliiIl.length, 10);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
} catch (iIl1IlIi) {
|
||
if (iIl1IlIi instanceof lllli1iI) { } else {
|
||
if (iIl1IlIi instanceof i1I1IiII) {
|
||
this.running = false;
|
||
this.stopAllThreads();
|
||
} else {
|
||
if (iIl1IlIi instanceof iiiIIIll) { } else this.log(iIl1IlIi?.["message"] || iIl1IlIi);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
static ["formatDate"](lIlIii1l, I1II1i1) {
|
||
return i1I1IlI1(typeof lIlIii1l === "object" ? lIlIii1l : new Date(typeof lIlIii1l === "string" ? lIlIii1l * 1 : lIlIii1l), I1II1i1 || "yyyy-MM-dd");
|
||
}
|
||
static ["maskString"](iIIi, I11liI1, ll1ill, IiI1Ilii = 4) {
|
||
if (iIIi.length <= I11liI1 + ll1ill) {
|
||
return iIIi;
|
||
}
|
||
const i11IIlll = iIIi.slice(0, I11liI1),
|
||
Ili1I1i = iIIi.slice(-ll1ill),
|
||
Iil1llIi = "*".repeat(IiI1Ilii);
|
||
return i11IIlll + Iil1llIi + Ili1I1i;
|
||
}
|
||
static async ["notify"](I1lili1i, i1ilIi1 = {}) {
|
||
if (i1ilIi1?.["noPush"]) return;
|
||
const lIIllllI = Iii1iI1i.envInfo.name;
|
||
|
||
let body = IlIIlIli.activity
|
||
console.log(body)
|
||
let prize = "";
|
||
let lIliI1Ii = this.taskManager.filter(ll1Il1II => ll1Il1II.index < this.cookieLength && ll1Il1II.sendMsg?.["length"] > 0).map(IIII1iII => IIII1iII.index + 1 + "【" + (iIl1IlI1.messageMasked === 1 && !IIII1iII.remarks ? this.maskString(IIII1iII.pin, 2, 3, 4) : IIII1iII.remarks || IIII1iII.pin) + "】" + IIII1iII.sendMsg.join(",")).join("\n") + "\n\n";
|
||
|
||
if (IlIIlIli.activity.shopName) {
|
||
lIliI1Ii += "#" + IlIIlIli.activity.shopName + "\n";
|
||
}
|
||
if (IlIIlIli.activity.shopId || IlIIlIli.activity.venderId) {
|
||
lIliI1Ii += "店铺信息:" + IlIIlIli.activity.shopId + "_" + IlIIlIli.activity.venderId + "\n";
|
||
}
|
||
|
||
IlIIlIli.activity.timeStr && (lIliI1Ii += "活动时间:" + IlIIlIli.activity.timeStr + "\n");
|
||
if (!IlIIlIli.activity.timeStr && IlIIlIli.activity.startTime && IlIIlIli.activity.endTime) {
|
||
lIliI1Ii += "活动时间:" + this.formatDate(IlIIlIli.activity.startTime, "yyyy-MM-dd HH:mm:ss") + "至" + this.formatDate(IlIIlIli.activity.endTime, "yyyy-MM-dd HH:mm:ss") + "\n";
|
||
}
|
||
if ((Array.isArray(body.prizeList) && body.prizeList.length > 0)) {
|
||
let msg = ["空气", "谢谢参与", "谢谢参与!", "再来一次"];
|
||
|
||
for (let i = 0; i < body.prizeList.length; i++) {
|
||
let list = body.prizeList[i];
|
||
if (IlIIlIli.activity.daysign && i < IlIIlIli.activity.daysign.length) { // 确保索引在范围内
|
||
this.daysign = IlIIlIli.activity.daysign[i]; // 使用索引 i
|
||
}
|
||
if (IlIIlIli.activity.prizeList1 && i < IlIIlIli.activity.prizeList1.length) { // 确保索引在范围内
|
||
this.daysign1 = IlIIlIli.activity.prizeList1[i]; // 使用索引 i
|
||
}
|
||
if (body.actType) {
|
||
switch (body.actType) {
|
||
case "dzp":
|
||
case "jgg":
|
||
case "blind":
|
||
case "addCart":
|
||
case "gashapon":
|
||
case "pointDraw":
|
||
case "bestTicket":
|
||
case "interestSignAct":
|
||
lIliI1Ii += " " + list.awardName + " 剩" + list.awardSurplusQuantity + "份\n";
|
||
break;
|
||
case "calendarSignAct":
|
||
lIliI1Ii += " " + list.awardName + " 剩" + list.awardTotalQuantity + "份\n";
|
||
break;
|
||
case "Draw":
|
||
case "TaskDraw":
|
||
if (msg.includes(list.equityName)) continue;
|
||
if (list.equityName == "京豆") list.equityName = list.denomination + "京豆"
|
||
if (list.equityName == "京东") list.equityName = list.denomination + "京豆"
|
||
if (list.equityName == "积分") list.equityName = list.denomination + "积分"
|
||
if (list.equityName == "优惠券") list.equityName = list.denomination + "优惠券"
|
||
lIliI1Ii += " " + list.equityName + " 共" + list.availableQuantity + "/" + list.freezeQuantity + "份\n";
|
||
break;
|
||
case "gzsl":
|
||
if (list.detail.includes("自定义奖品")) {
|
||
lIliI1Ii += " " + list.name + " 共" + list.totalNum + "份\n";
|
||
} else {
|
||
lIliI1Ii += " " + list.detail + " 共" + list.totalNum + "份\n";
|
||
}
|
||
break;
|
||
case "SignAct":
|
||
if (list.dayNum) {
|
||
lIliI1Ii += " " + list.type + " " + list.dayNum + "天, " + list.quantity + list.unit + "\n";
|
||
} else {
|
||
lIliI1Ii += " " + list.type + ", " + list.quantity + list.unit + "\n";
|
||
}
|
||
break;
|
||
case "CartItem":
|
||
lIliI1Ii += " " + list.replace(/[^(加购)\d+]\S+(?=\d+)/g, "件 ") + "\n";
|
||
break;
|
||
case 10002:
|
||
case 10003:
|
||
lIliI1Ii += " " + this.daysign1.days + "天 " + list.prizeName + " 剩" + list.leftNum + "份\n";
|
||
break;
|
||
case 10023:
|
||
case 10040:
|
||
lIliI1Ii += " " + this.daysign.signNumber + "天 " + list.prizeName + " 剩" + list.leftNum + "份\n";
|
||
break;
|
||
default:
|
||
lIliI1Ii += " " + list.prizeName + " 剩" + list.leftNum + "份\n";
|
||
}
|
||
}
|
||
if (body.activityType) {
|
||
switch (body.activityType) {
|
||
case 3:
|
||
case 4:
|
||
if (msg.includes(list.name)) continue;
|
||
lIliI1Ii += " " + "奖品名称:" + list.name + ",数量:" + list.totalNum + "\n";
|
||
break;
|
||
case 5:
|
||
case 6:
|
||
case 12:
|
||
case 13:
|
||
case 124:
|
||
case 125:
|
||
case 128:
|
||
case 129:
|
||
if (list.name) {
|
||
list = list.name;
|
||
if (msg.includes(list)) continue
|
||
}
|
||
lIliI1Ii += " " + list + "\n";
|
||
break;
|
||
case 26:
|
||
lIliI1Ii += " 加" + list.skuNum + "件," + list.prizeName + ",共" + list.surplus + "份,今日剩余" + list.todayNum + "份\n";
|
||
break;
|
||
case 15:
|
||
case 18:
|
||
case 133:
|
||
if (list.gift)
|
||
lIliI1Ii += " " + (list.dayNum) + "天 " + (list.gift.giftName) + " " + (list.gift.giftTotal) + "份 " + (list.gift.insufficient ? "已发完\n" : "\n");
|
||
break;
|
||
case 10020:
|
||
case 30003:
|
||
if (msg.includes(list.prizeName)) continue
|
||
lIliI1Ii += " " + list.prizeName + "\n";
|
||
break;
|
||
case 25:
|
||
case 28:
|
||
lIliI1Ii += " " + list.prizeName + "\n";
|
||
break;
|
||
case 27:
|
||
let name = "未知",
|
||
days = list.signDays;
|
||
if (list.signDays == 0) days = "每";
|
||
if (list.prizeImg.includes("2089.png")) name = "积分";
|
||
if (list.prizeImg.includes("4146.png")) name = "京豆";
|
||
if (list.prizeImg.includes("1612.png")) name = "优惠券";
|
||
if (list.prizeImg.includes("jpg")) name = "实物";
|
||
lIliI1Ii += " " + days + "天 " + name + " 剩" + list.remainNum + "份\n";
|
||
break;
|
||
default:
|
||
lIliI1Ii += " " + list + "\n";
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (IlIIlIli.activity.prizedata) {
|
||
let info = IlIIlIli.activity.prizedata;
|
||
let match = info.match(/符合.*?(?=\n\d+|$)/s);
|
||
if (match) {
|
||
let info1 = match[0].trim();
|
||
let match1 = info1.match(/(1).*?(?=\n\d+|$)/s);
|
||
let prizedata = match1[0].trim();
|
||
lIliI1Ii += "活动规则:\n" + prizedata + "\n";
|
||
}
|
||
}
|
||
if (IlIIlIli.activity.hdbprizedata) {
|
||
let info = IlIIlIli.activity.hdbprizedata;
|
||
let match = info.match(/奖项设置.*?:\s*(.*?)\n\s*\d+\./s);
|
||
if (match) {
|
||
let prizedata = match[1].trim();
|
||
lIliI1Ii += "活动规则:\n" + prizedata + "\n";
|
||
}
|
||
}
|
||
IlIIlIli.activity.drawTimeStr && (lIliI1Ii += "开奖时间:" + IlIIlIli.activity.drawTimeStr + "\n"), this.activity.activityUrl && !i1ilIi1?.["noPushUrl"] && (lIliI1Ii += prize += "export " + Iii1iI1i.envInfo.env + "=\"" + this.activity.activityUrl + "\"\n\n"), IlIIlIli.activity.shopId && (lIliI1Ii += "https://shop.m.jd.com/shop/home?shopId=" + IlIIlIli.activity.shopId + "\n\n"), lIliI1Ii += "时间:" + i1I1IlI1(Date.now(), "yyyy-MM-dd HH:mm:ss.SSS") + " 时长:" + I1lili1i + "s\n小熊京东活动通知", await liIliiiI.sendNotify(lIIllllI, lIliI1Ii), lIliI1Ii;
|
||
}
|
||
static async ["sendMessage"](i1llil, il1llI1, II1i1111, l11111 = 0, iIIlIl1I = 1) {
|
||
let illiil1l = {
|
||
"url": "https://" + (process.env.TG_API_HOST ?? "api.telegram.org") + "/bot" + i1llil + "/sendMessage",
|
||
"data": {
|
||
"chat_id": il1llI1,
|
||
"text": II1i1111,
|
||
"disable_web_page_preview": true
|
||
},
|
||
"headers": {
|
||
"Content-Type": "application/json",
|
||
"Cookie": "10089"
|
||
},
|
||
"timeout": 15000
|
||
},
|
||
{
|
||
data: il111l1l
|
||
} = await IliilIlI(illiil1l);
|
||
this.log("发送数据", II1i1111);
|
||
il111l1l.ok && (await this.checkWriteToRedis(II1i1111, l11111));
|
||
if (!il111l1l?.["ok"] && iIIlIl1I === 1) {
|
||
this.log("重试中", II1i1111);
|
||
await this.sendMessage(il1llI1, II1i1111, l11111, iIIlIl1I++);
|
||
}
|
||
}
|
||
static #universalCaesarCipher(ll1illi1, Ii1I1ill) {
|
||
return ll1illi1.split("").map(l1I1lIl1 => this.#shiftCharUniversal(l1I1lIl1, Ii1I1ill)).join("");
|
||
}
|
||
static #shiftCharUniversal(lilIii1, il1lIl1I) {
|
||
const i1l1liIl = lilIii1.charCodeAt(0);
|
||
if (i1l1liIl >= 32 && i1l1liIl <= 126) return String.fromCharCode((i1l1liIl - 32 + il1lIl1I) % 95 + 32);
|
||
return lilIii1;
|
||
}
|
||
static ["timestampToCron"](Iili1iI) {
|
||
const lIII1Ill = new Date(Iili1iI),
|
||
liI1I1iI = lIII1Ill.getSeconds(),
|
||
liI1iiI1 = lIII1Ill.getMinutes(),
|
||
li1lI = lIII1Ill.getHours(),
|
||
IIII11II = lIII1Ill.getDate(),
|
||
i1iiliI = lIII1Ill.getMonth() + 1,
|
||
ll1iii = liI1I1iI + " " + liI1iiI1 + " " + li1lI + " " + IIII11II + " " + i1iiliI + " *";
|
||
return ll1iii;
|
||
}
|
||
static ["sendTimeNotify"]() {
|
||
let i1lIlI = [];
|
||
return IlIIlIli.activity.sendStartFiexd && i1lIlI.push(() => this.sendMessage(iI111l1i.scheduleTgBotToken, iI111l1i.scheduleTgUserId, "spy定时插队 " + this.timestampToCron(IlIIlIli.activity.startTime - 3000) + " " + this.activity.activityUrl, 0)), IlIIlIli.activity.sendDrawFiexd && i1lIlI.push(() => this.sendMessage(iI111l1i.scheduleTgBotToken, iI111l1i.scheduleTgUserId, "spy定时插队 " + this.timestampToCron(IlIIlIli.activity.drawTime - 3000) + " " + this.activity.activityUrl, 1)), i1lIlI;
|
||
}
|
||
static ["sendNotifyToUser"]() {
|
||
let Ii1I1i1i = [];
|
||
if (iIl1IlI1.messageSingle === 1 && iI111l1i.pushTgBotToken) {
|
||
const Ii11iiI = /计划余额不足|无法发放|当天已经兑完/,
|
||
IiillIii = Iii1iI1i.envInfo.name,
|
||
i1Illlll = this.activity.activityUrl ? "活动链接:" + this.activity.activityUrl + "\n\n" : "",
|
||
lIIl1I = "通知时间: " + i1I1IlI1(Date.now(), "yyyy-MM-dd HH:mm:ss.SSS") + "\nBy: 京东通知";
|
||
for (let IiiiI1iI of this.taskManager.cookie_all_obj) {
|
||
if (IiiiI1iI.tg_id && IiiiI1iI.sendMsg.length > 0 && IiiiI1iI.sendMsg.some(i1IiIi1I => i1IiIi1I.match(iIl1IlI1.pushRuleRegx) && !Ii11iiI.test(i1IiIi1I))) {
|
||
let I11iIi1 = "【" + IiiiI1iI.pin + "】" + IiiiI1iI.sendMsg.join(",") + "\n\n",
|
||
l1llIlI1 = iI111l1i.pushUserDetail?.["split"]("|")?.["includes"](IiiiI1iI.pin) ? IiillIii + "\n\n" + I11iIi1 + i1Illlll : I11iIi1;
|
||
l1llIlI1 += lIIl1I;
|
||
Ii1I1i1i.push(() => this.sendMessage(iI111l1i.pushTgBotToken, IiiiI1iI.tg_id, l1llIlI1));
|
||
}
|
||
}
|
||
}
|
||
return Ii1I1i1i;
|
||
}
|
||
static ["__as"](IlIIllll) {
|
||
const IllIIi1I = [];
|
||
for (let IllliIiI of IlIIllll) {
|
||
if (typeof IllliIiI === "string") {
|
||
const iili1IlI = IllliIiI.split("-"),
|
||
Iii11III = parseInt(iili1IlI[0], 10),
|
||
lIliIIii = parseInt(iili1IlI[1], 10);
|
||
if (lIliIIii - Iii11III === 1) {
|
||
IllIIi1I.push(Iii11III, lIliIIii);
|
||
} else {
|
||
let i1lI1i1 = Array.from({
|
||
"length": lIliIIii - Iii11III + 1
|
||
}, (illlIiI, ii1i1IiI) => Iii11III + ii1i1IiI);
|
||
IllIIi1I.push(...i1lI1i1);
|
||
}
|
||
} else {
|
||
IllIIi1I.push(IllliIiI);
|
||
}
|
||
}
|
||
return IllIIi1I;
|
||
}
|
||
static async #au() {
|
||
try {
|
||
let l111llIl = await IliilIlI({
|
||
"url": this.#universalCaesarCipher("kwws=227:143<14661;7=:<:<2dxwk0ehdu", -3),
|
||
"method": "POST",
|
||
"data": {
|
||
"fn": this.envInfo.runName
|
||
},
|
||
"headers": {
|
||
"Content-Type": "application/json",
|
||
"token": iI111l1i.apiToken,
|
||
"_ts": Date.now(),
|
||
"_vs": this.version,
|
||
"_isv": this.envInfo.version,
|
||
}
|
||
});
|
||
l111llIl && l111llIl.data && l111llIl.data.success ? this.auth = l111llIl.data?.["data"]?.["auth"] ?? 0 : (this.log(l111llIl?.["data"]?.["msg"] || "鉴权失败"), process.exit(0));
|
||
} catch (IIilllI1) {
|
||
this.log("鉴权失败,请联系作者", IIilllI1.message);
|
||
process.exit(0);
|
||
}
|
||
}
|
||
static #overwriteConfig(ii1ii1i) {
|
||
if (this.auth !== 1 && ii1ii1i.inviteTask) {
|
||
ii1ii1i.main_thread = 1;
|
||
iIl1IlI1.leaderNum = Math.min(iIl1IlI1.leaderNum, 10);
|
||
}
|
||
}
|
||
static ["match"](ll11i1li, i1I1l11) {
|
||
ll11i1li = ll11i1li instanceof Array ? ll11i1li : [ll11i1li];
|
||
for (let l1l11i1I of ll11i1li) {
|
||
const IIl1IIi1 = l1l11i1I.exec(i1I1l11);
|
||
if (IIl1IIi1) {
|
||
const iliilIlI = IIl1IIi1.length;
|
||
if (iliilIlI === 1) {
|
||
return IIl1IIi1;
|
||
} else {
|
||
if (iliilIlI === 2) return IIl1IIi1[1]; else {
|
||
const l11l11i = [];
|
||
for (let i1liIiII = 1; i1liIiII < iliilIlI; i1liIiII++) {
|
||
l11l11i.push(IIl1IIi1[i1liIiII]);
|
||
}
|
||
return l11l11i;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return "";
|
||
}
|
||
static ["getActivityId"](llliIl1l = this.activity.activityUrl) {
|
||
const l1I1lIiI = new URLSearchParams(new URL(llliIl1l).search),
|
||
IIiIIlli = ["activityId", "giftId", "actId", "code", "a", "id", "token"];
|
||
let l1il11II = "";
|
||
for (let lIIIlliI of IIiIIlli) {
|
||
l1il11II = l1I1lIiI.get(lIIIlliI);
|
||
if (l1il11II) break;
|
||
}
|
||
return !l1il11II && (l1il11II = this.match(/\/(dz[a-zA-Z0-9]{28,32})/, llliIl1l)), this.activity.activityId = l1il11II, this.activity.activityId;
|
||
}
|
||
static ["getQueryString"](i1I1II1i, IlIIIliI) {
|
||
let i1iiIll1 = new RegExp("(^|[&?])" + IlIIIliI + "=([^&]*)(&|$)"),
|
||
lliIl11i = i1I1II1i.match(i1iiIll1);
|
||
if (lliIl11i != null) return unescape(lliIl11i[2]);
|
||
return "";
|
||
}
|
||
static async ["runActInfo"]() {
|
||
let I1ili1i = {};
|
||
if (this.activity.activityUrl) {
|
||
I1ili1i.domain = this.activity.activityUrl.match(/^(?:https?:\/\/)?([^/]+)\//)[1];
|
||
I1ili1i.activityId = this.getQueryString(this.activity.activityUrl, "activityId");
|
||
I1ili1i.prefix = Object.keys(iI111l1i.urlPrefixes).find(illll1 => this.activity.activityUrl.match(iI111l1i.urlPrefixes[illll1])) || "";
|
||
if (/yq-hd-rc/.test(this.activity.activityUrl)) I1ili1i.mode = "yqhd", I1ili1i.activityId = this.getQueryString(this.activity.activityUrl, "activityId"); else {
|
||
if (/interaction\/v2/.test(this.activity.activityUrl)) {
|
||
I1ili1i.mode = "v2";
|
||
let liiIli1l = this.activity.activityUrl.match(/\/v2\/(\d+)\/(\d+)\//);
|
||
I1ili1i.activityType = liiIli1l[1];
|
||
I1ili1i.shopId = this.activity.activityUrl.match(/shopId=(\d+)/)[1];
|
||
I1ili1i.templateCode = liiIli1l[2];
|
||
} else {
|
||
if (/activityType=\d+/.test(this.activity.activityUrl)) I1ili1i.mode = "100", I1ili1i.activityType = this.activity.activityUrl.match(/activityType=([^&]+)/)[1]; else {
|
||
if (/(hdb|jingyun)/.test(this.activity.activityUrl)) I1ili1i.mode = "hdb", I1ili1i.activityId = this.getQueryString(this.activity.activityUrl, "id"), I1ili1i.userId = this.getQueryString(this.activity.activityUrl, "userId"); else {
|
||
if (/jinggeng/.test(this.activity.activityUrl)) I1ili1i.mode = "jinggeng", I1ili1i.activityId = this.getQueryString(this.activity.activityUrl, "id"), I1ili1i.userId = this.getQueryString(this.activity.activityUrl, "user_id"); else {
|
||
if (/gzsl/.test(this.activity.activityUrl)) I1ili1i.mode = "gzsl", I1ili1i.activityId = this.getQueryString(this.activity.activityUrl, "activityId"); else {
|
||
if (/hzbz-isv|hdds-isv/.test(this.activity.activityUrl)) I1ili1i.mode = "hzbz", I1ili1i.activityId = this.getQueryString(this.activity.activityUrl, "id"); else /txzj-isv/.test(this.activity.activityUrl) ? (I1ili1i.mode = "txzj", I1ili1i.activityId = this.getQueryString(this.activity.activityUrl, "a")) : I1ili1i.mode = "wx";
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
I1ili1i.needPinToken = !iIl1IlI1.notInitPinTokenRegx.test(this.activity.activityUrl);
|
||
I1ili1i.activityId = this.getActivityId();
|
||
I1ili1i.activityUrl = this.activity.activityUrl;
|
||
// if (IlIIlIli.redis) I1ili1i.activityId && (await IlIIlIli.redis.sismember("activity_stop", I1ili1i.activityId)) && (this.log("hit cache,stop"), process.exit(0)); else {
|
||
// let llI1ll1I = this.readFileSync("cache/stop/id");
|
||
// I1ili1i.activityId && llI1ll1I.includes(I1ili1i.activityId) && (this.log("hit cache,stop"), process.exit(0));
|
||
// }
|
||
}
|
||
this.activity = Object.assign(this.activity, I1ili1i);
|
||
}
|
||
static ["envCheck"](iIiiI1ll = {}) {
|
||
console.log("当前版本:v" + this.envInfo.version + ",依赖版本:v" + this.version);
|
||
const IiIIlIl = require.main.filename,
|
||
IIIl111i = IiIIlIl.match(/[^\\\/]+(?=\.\w+$)/)[0],
|
||
IlliIilI = llillIi1.parse(this.readFileSync("./config/config.yaml")) || {},
|
||
IlIl1I1l = Object.assign({}, iIl1IlI1, iI111l1i),
|
||
IlliIiiI = Object.assign({}, iiIll1i, iIliIIII),
|
||
IIl1li11 = IIiIi => IlliIilI[IIIl111i + "_" + IIiIi] ?? IlliIilI[IIiIi] ?? process.env[IIIl111i + "_" + IIiIi] ?? IlIl1I1l[IlliIiiI[IIiIi].replace(/^__|__$/g, "")];
|
||
for (let IillIlII in iiIll1i) {
|
||
let i1lIIlI = IIl1li11(IillIlII),
|
||
IIi1illl = iiIll1i[IillIlII].replace(/^__|__$/g, "");
|
||
if (/^__.*__$/.test(iiIll1i[IillIlII]) && typeof i1lIIlI === "string") {
|
||
i1lIIlI.split(/[@,&|]/).forEach(lililIii => iIl1IlI1[IIi1illl].push(lililIii));
|
||
continue;
|
||
}
|
||
if (/^__(?!_)/.test(iiIll1i[IillIlII]) && typeof i1lIIlI === "string") {
|
||
i1lIIlI.split(/[@,&|]/).forEach(iIIIiI11 => iIl1IlI1[IIi1illl].push(iIIIiI11.includes("-") ? iIIIiI11 : iIIIiI11 * 1));
|
||
continue;
|
||
}
|
||
iIl1IlI1[IIi1illl] = typeof iIl1IlI1[IIi1illl] === "number" ? parseInt(i1lIIlI) : i1lIIlI;
|
||
}
|
||
for (let il1Il1I1 in iIliIIII) {
|
||
let i11il1ii = IIl1li11(il1Il1I1),
|
||
ill1I1I = iIliIIII[il1Il1I1].replace(/^__|__$/g, "");
|
||
iI111l1i[iIliIIII[il1Il1I1]] = typeof iI111l1i[ill1I1I] === "number" ? parseInt(i11il1ii) : i11il1ii;
|
||
}
|
||
iIiiI1ll.thread = parseInt(IlliIilI[IIIl111i + "_B_THREAD"] ?? IlliIilI.B_THREAD ?? process.env[IIIl111i + "_B_THREAD"] ?? process.env.B_THREAD ?? iIiiI1ll?.["thread"] ?? 50);
|
||
iIiiI1ll.main_thread = parseInt(IlliIilI[IIIl111i + "_B_MAIN_THREAD"] ?? IlliIilI.B_MAIN_THREAD ?? process.env[IIIl111i + "_B_MAIN_THREAD"] ?? process.env.B_MAIN_THREAD ?? iIiiI1ll?.["main_thread"] ?? 50);
|
||
iIiiI1ll.inviteTask && (iIiiI1ll.main_thread = parseInt(IlliIilI[IIIl111i + "_B_INVITE_MAIN_THREAD"] ?? IlliIilI.B_INVITE_MAIN_THREAD ?? process.env[IIIl111i + "_B_INVITE_MAIN_THREAD"] ?? process.env.B_INVITE_MAIN_THREAD ?? 50));
|
||
if (iIl1IlI1.leaderNum) iIiiI1ll.main_thread = Math.min(iIiiI1ll.main_thread, iIl1IlI1.leaderNum);
|
||
iIl1IlI1.wxProxyCheck = iIiiI1ll?.["wxProxyCheck"] ?? iIl1IlI1.wxProxyCheck;
|
||
iIl1IlI1.wxProxySmart = iIiiI1ll?.["wxProxySmart"] ?? iIl1IlI1.wxProxySmart;
|
||
console.log("当前token A_API_TOKEN=\"" + iI111l1i.apiToken + "\"");
|
||
console.log("运行参数:", iIiiI1ll);
|
||
console.log(Iii1iI1i.envInfo.name, IiIIlIl, "开始运行...");
|
||
IlIIlIli.addressList = JSON.parse(this.readFileSync("./account.json") || "[]");
|
||
iIl1IlI1.logger = new liiIIll({
|
||
"level": iI111l1i.mode || iI111l1i.showDebugInfo === 1 ? "debug" : "info",
|
||
"filename": IIIl111i + "/" + i1I1IlI1(Date.now(), "yyyy-MM-dd_HH-mm-ss-SSS"),
|
||
"logToFile": iIl1IlI1.logToFile === 1
|
||
});
|
||
ilIiilII.setMaxListeners(iIiiI1ll.main_thread);
|
||
}
|
||
static async ["redis"]() {
|
||
if (iIl1IlI1.redisCacheEnable === 2) return;
|
||
if (iIl1IlI1.redisRequire === 2) {
|
||
this.log("redis依赖未安装,禁用");
|
||
return;
|
||
}
|
||
if (!iIl1IlI1.redisUrl) {
|
||
this.log("未配置redis变量,禁用");
|
||
return;
|
||
}
|
||
try {
|
||
let ll1lii11 = iIl1IlI1.redisUrl.split("/"),
|
||
iilIliil = ll1lii11[0].split(":"),
|
||
iIll1II = new I11I1l1I({
|
||
"host": iilIliil[0],
|
||
"port": iilIliil[1],
|
||
"password": ll1lii11[1],
|
||
"db": ll1lii11[2]
|
||
});
|
||
await iIll1II.connected;
|
||
if (iIl1IlI1.redisConnect === 2) {
|
||
this.log("redis连接失败,禁用");
|
||
IlIIlIli.redis = null;
|
||
return;
|
||
}
|
||
this.log("启用redis缓存");
|
||
IlIIlIli.redis = iIll1II;
|
||
} catch (l1IilIi) {
|
||
console.log(l1IilIi);
|
||
}
|
||
}
|
||
static async ["checkSendFiexd"]() {
|
||
if (iI111l1i.wxScheduledNotify === 2 && iI111l1i.scheduleTgBotToken && iI111l1i.scheduleTgUserId) {
|
||
IlIIlIli.activity.noStart && IlIIlIli.activity.startTime && !(await IlIIlIli?.["redis"]?.["sismember"]("activity_corn", this.activity.activityId)) && (IlIIlIli.activity.sendStartFiexd = true);
|
||
IlIIlIli.activity.noDraw && IlIIlIli.activity.drawTime && !(await IlIIlIli?.["redis"]?.["sismember"]("activity_draw_corn", this.activity.activityId)) && (IlIIlIli.activity.sendDrawFiexd = true);
|
||
}
|
||
}
|
||
static async ["checkWriteToRedis"](i1ilIIl1, I11ll1ii) {
|
||
i1ilIIl1.includes("spy定时") && (await IlIIlIli?.["redis"]?.["sadd"](I11ll1ii === 0 ? "activity_corn" : "activity_draw_corn", this.activity.activityId));
|
||
}
|
||
static async ["run"](ll1lili1) {
|
||
this.runBefore();
|
||
this.envCheck(ll1lili1);
|
||
this.activity.activityUrl && console.log("活动链接:", this.activity.activityUrl);
|
||
let iI1iil = this.cookieInit(),
|
||
IiIillI = iI1iil[0],
|
||
illIlII = iI1iil[1];
|
||
console.log("原始ck长度", IiIillI.length);
|
||
const iii1iI11 = iIl1IlI1.wxWhitelist?.["length"] > 0 ? iIl1IlI1.wxWhitelist : ll1lili1?.["whitelist"],
|
||
iiI11Iil = new Set(this.__as(iii1iI11).map(IiiI1i1l => IiiI1i1l - 1));
|
||
IiIillI = IiIillI.filter((I1lIilll, lIllilIi) => iiI11Iil.has(lIllilIi));
|
||
console.log("设置白名单后ck长度", IiIillI.length);
|
||
try {
|
||
if (iIl1IlI1.wxBlockRegx) {
|
||
const II1Il1l1 = iIl1IlI1.wxBlockRegx.split(";").map(III1I1i => {
|
||
const [lI1l11li, l1lIilIl] = III1I1i.split("@"),
|
||
lII1Ii1i = l1lIilIl.split("|");
|
||
return {
|
||
"regx": new RegExp(lI1l11li),
|
||
"blist": lII1Ii1i
|
||
};
|
||
}),
|
||
IilIll11 = this.activity?.["activityUrl"];
|
||
IiIillI = IiIillI.filter(I1iIiIII => {
|
||
for (const {
|
||
regx: I11i1iIl,
|
||
blist: ll1IIi1I
|
||
} of II1Il1l1) {
|
||
if (I11i1iIl.test(IilIll11) && ll1IIi1I.some(lI1Ilil1 => I1iIiIII.includes(lI1Ilil1))) return false;
|
||
}
|
||
return true;
|
||
});
|
||
}
|
||
} catch (Illli1iI) {
|
||
this.log("排除黑名单Error", Illli1iI);
|
||
}
|
||
console.log("排除PIN黑名单后ck长度", IiIillI.length);
|
||
this.cookies = IiIillI;
|
||
this.cookieLength = IiIillI.length;
|
||
this.inviteCookieLength = illIlII.length;
|
||
this.paddedStringEndCount = String(this.cookieLength).length;
|
||
if (this.cookieLength === 0) return this.log("没有可运行的ck");
|
||
//await this.#au();
|
||
this.#overwriteConfig(ll1lili1);
|
||
await this.redis();
|
||
await this.runActInfo();
|
||
this.proxy = new lI1l11l1(this.activity.activityUrl);
|
||
if (iIl1IlI1.wxProxyEnable === 2 && iIl1IlI1.wxProxySmart === 2) {
|
||
if (this.proxy.subscriptionUrls.length === 0) return this.log("没有可用的代理");
|
||
this.proxy.updateProxyEnable(true);
|
||
}
|
||
this.taskManager = new iIIIili1([...this.cookies, ...illIlII], this.TaskClass);
|
||
const liI1illi = Date.now();
|
||
try {
|
||
if (iI111l1i.wxRunMode === 1 && !ll1lili1?.["inviteTask"]) try {
|
||
await this.get_mains_obj().userTask();
|
||
} catch (lIiliIiI) {
|
||
if (lIiliIiI instanceof i1I1IiII) this.running = false; else {
|
||
if (lIiliIiI instanceof iiiIIIll) { } else {
|
||
this.log(lIiliIiI.message || lIiliIiI);
|
||
}
|
||
}
|
||
}
|
||
const I111IiIl = [];
|
||
for (let llllliil = 0; llllliil < Math.min(this.taskManager.cookie_all_obj.length, ll1lili1?.["main_thread"] || 1); llllliil++) {
|
||
I111IiIl.push(() => this.async_thread(llllliil, ll1lili1));
|
||
}
|
||
let IlliI111 = ll1lili1?.["enableDynamic"] || false;
|
||
IlliI111 && (this.concurrencyLimit = ll1lili1?.["main_thread"] || 1);
|
||
await this.runTasksConcurrentlyWithDelay(I111IiIl, ll1lili1?.["main_thread"] || 1, 10, IlliI111);
|
||
} catch (iI1l11l1) {
|
||
iI1l11l1 instanceof i1I1IiII && (this.running = false);
|
||
}
|
||
const II1ii1i1 = Date.now(),
|
||
iIiliiiI = (Math.abs(II1ii1i1 - liI1illi) / 1000).toFixed(2);
|
||
console.log("" + Iii1iI1i.envInfo.name, "运行结束,耗时" + (II1ii1i1 - liI1illi) + "ms");
|
||
await this.checkSendFiexd();
|
||
const ll1111I = [() => this.notify(iIiliiiI, ll1lili1), ...this.sendTimeNotify(), ...this.sendNotifyToUser()];
|
||
await this.runTasksConcurrentlyWithDelay(ll1111I, ll1111I.length, 10, false, false);
|
||
process.exit(0);
|
||
}
|
||
static ["runBefore"]() { }
|
||
}
|
||
process.on("uncaughtException", lI1IiIl1 => {
|
||
console.error("未捕获的异常:", lI1IiIl1);
|
||
});
|
||
module.exports = {
|
||
"UserMode": IlIIlIli,
|
||
"RunMode": Iii1iI1i,
|
||
"CryptoJS": II11il11,
|
||
"baseCommonEnv": iIl1IlI1,
|
||
"baseCommonEnvKey": iiIll1i,
|
||
"tools": i1l1iil
|
||
}; |