From f6d95afd768c28eeaeb83998e0ce75504446344b Mon Sep 17 00:00:00 2001 From: action Date: Fri, 28 Jun 2024 00:36:15 +0000 Subject: [PATCH] Add decoded output file --- output.js | 1744 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 1738 insertions(+), 6 deletions(-) diff --git a/output.js b/output.js index ce23aa83c..ddd0be2d8 100644 --- a/output.js +++ b/output.js @@ -1,6 +1,1738 @@ -(function (_0x24aa09, _0x2cb0eb) { - _0x24aa09.update = "2019年09月07日15:24:29更新"; - _0x2cb0eb.info = "这个是一个本站对JavaScript 脚本的一个高级加密,兼容性较强"; - _0x2cb0eb.feedback = "有问题请联系QQ 84034666"; -})(window, document); -_0xodA = "jsjiami.com.v6"; \ No newline at end of file +const fs = require("fs"), + path = require("path"), + https = require("https"), + axios = require("axios").default, + CryptoJS = require("crypto-js"), + querystring = require("querystring"); +class Common { + constructor() { + this._Cookie = ""; + this._UserAgent = ""; + this._UserAgentMap = new Map(); + this._defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1 Edg/122.0.0.0"; + this._appSignConfig = null; + this._requestDebugMode = false; + this._requestAxiosProxyConfig = null; + this._requestDynamicProxyConfig = null; + this._requestDynamicProxyShowAddress = false; + this._requestDynamicProxyPrintAddressFormat = "刷新动态代理配置:
"; + this._requestNoProxyList = null; + this._requestFailMessagesMap = { + 400: "请求错误 [400 Bad Request]", + 401: "未授权 [401 Unauthorized]", + 403: "禁止访问 [403 Forbidden]", + 493: "禁止访问 [493 Forbidden]", + 404: "资源未找到 [404 Not Found]", + 408: "请求超时 [408 Request Timeout]", + 429: "请求过多 [429 Too Many Requests]", + 500: "服务器内部错误 [500 Internal Server Error]", + 502: "网关错误 [502 Bad Gateway]", + 503: "服务不可用 [503 Service Unavailable]" + }; + this._requestErrorMessagesMap = { + ECONNABORTED: "请求被中断", + ECONNRESET: "连接被对方重置", + ECONNREFUSED: "服务器拒绝连接", + ETIMEDOUT: "网络请求超时", + ENOTFOUND: "无法解析的域名或地址", + EPROTO: "协议错误", + EHOSTUNREACH: "无法到达服务器主机", + ENETUNREACH: "无法到达网络", + EADDRINUSE: "网络地址已被使用", + EPIPE: "向已关闭的写入流进行写入", + ERR_BAD_OPTION_VALUE: "无效或不支持的配置选项值", + ERR_BAD_OPTION: "无效的配置选项", + ERR_NETWORK: "网络错误", + ERR_FR_TOO_MANY_REDIRECTS: "请求被重定向次数过多", + ERR_DEPRECATED: "使用了已弃用的特性或方法", + ERR_BAD_RESPONSE: "服务器响应无效或无法解析", + ERR_BAD_REQUEST: "请求无效或缺少必需参数", + ERR_CANCELED: "请求被用户取消", + ERR_NOT_SUPPORT: "当前环境不支持此特性或方法", + ERR_INVALID_URL: "请求的 URL 无效", + ERR_TLS_CERT_ALTNAME_INVALID: "TLS 证书的主机名无效", + ERR_TLS_CERT_REJECTED: "TLS 证书被拒绝", + ERR_HTTP2_STREAM_CANCEL: "HTTP2 流被取消", + ERR_HTTP2_SESSION_ERROR: "HTTP2 会话出错", + ERR_QUICSESSION_VERSION_NEGOTIATION: "QUIC 会话版本协商失败", + EAI_AGAIN: "DNS 查找超时" + }; + this._latestAppVersionData = { + build: "169370", + version: "13.1.0" + }; + this._latestLiteAppVersionData = { + build: "1676", + version: "6.26.0" + }; + this._latestIOSVersion = "17.5"; + this._appHttpsTlsOptions = { + ciphers: ["TLS_AES_128_GCM_SHA256", "TLS_AES_256_GCM_SHA384", "TLS_CHACHA20_POLY1305_SHA256", "ECDHE-RSA-AES128-GCM-SHA256", "ECDHE-RSA-AES256-GCM-SHA384", "ECDHE-ECDSA-AES128-GCM-SHA256", "ECDHE-ECDSA-AES256-GCM-SHA384", "ECDHE-ECDSA-CHACHA20-POLY1305", "ECDHE-RSA-CHACHA20-POLY1305"].join(":") + }; + this.Base64 = Base64Algorithm; + this.DataCache = LocalStorageCache; + this._shopMemberActivityIds = new Map(); + this._H5st = null; + this._Table = null; + this._HttpsProxyAgent = null; + this._genSignModelPath = __dirname + "/Rebels_Sign"; + this._jdCryptoModelPath = __dirname + "/Rebels_H"; + this._hasInitAppSignConfig = false; + this._initRequestConfig(); + } + _initRequestConfig() { + try { + const _0x329f97 = require.main.filename, + _0x152ebe = path.basename(_0x329f97, ".js"); + this._requestNoProxyList = (process.env[_0x152ebe + "_no_proxy"] || process.env.RS_NO_PROXY || "").split(",").filter(_0x54525c => _0x54525c !== ""); + const _0x4b8941 = process.env[_0x152ebe + "_proxy_tunnrl"] || process.env.RS_PROXY_TUNNRL || "", + _0x2a784d = (process.env.RS_TUNNRL_WHITRLIST || "").split("&").filter(Boolean); + let _0x6532e6 = false; + if (_0x4b8941 && _0x2a784d.length > 0) { + const _0x5f024f = _0x2a784d.some(_0x34b67a => process.mainModule.filename.includes(_0x34b67a)); + if (_0x5f024f) { + const _0x59d36d = this._getProxyConfigWithAddress(_0x4b8941); + _0x59d36d ? (this._requestAxiosProxyConfig = _0x59d36d, console.log("\n====================使用代理池模式(新)===================\n"), _0x6532e6 = true) : console.log("❌ 提供的代理地址无效,跳过启用全局静态代理"); + } + } + if (!_0x6532e6) { + const _0x157e97 = process.env[_0x152ebe + "_proxy_api"] || process.env.RS_PROXY_API || "", + _0x19f1b3 = (process.env.RS_API_WHITELIST || "").split("&").filter(Boolean); + if (_0x157e97 && _0x19f1b3.length > 0) { + const _0x331a50 = _0x19f1b3.some(_0x263310 => process.mainModule.filename.includes(_0x263310)); + if (_0x331a50) { + this._requestDynamicProxyConfig = { + api: null, + proxyConfig: null, + useLimit: null, + timeLimit: null, + fetchFailContinue: null, + extractTimestamp: null, + lastUseTimeStamp: null, + usedTimes: null + }; + this._requestDynamicProxyConfig.api = _0x157e97; + const _0x4db7ba = process.env[_0x152ebe + "_proxy_use_limit"] || process.env.RS_PROXY_USE_LIMIT || "0"; + try { + this._requestDynamicProxyConfig.useLimit = parseInt(_0x4db7ba); + } catch { + this._requestDynamicProxyConfig.useLimit = 1; + } + const _0x4c0ff3 = process.env[_0x152ebe + "_proxy_time_limit"] || process.env.RS_PROXY_TIME_LIMIT || "20000"; + try { + this._requestDynamicProxyConfig.timeLimit = parseInt(_0x4c0ff3); + } catch { + this._requestDynamicProxyConfig.timeLimit = 20000; + } + this._requestDynamicProxyConfig.fetchFailContinue = (process.env[_0x152ebe + "_proxy_fetch_fail_continue"] || process.env.RS_PROXY_FETCH_FAIL_CONTINUE || "true") === "true"; + this._requestDynamicProxyShowAddress = (process.env[_0x152ebe + "_proxy_show_address"] || process.env.RS_PROXY_HTTP_DYNAMIC_PROXY_SHOW_ADDRESS || "false") === "true"; + console.log("\n=====================使用API模式(新)=====================\n"); + _0x6532e6 = true; + } + } + } + Object.assign(axios.defaults, { + headers: { + common: { + "User-Agent": this._defaultUserAgent + } + }, + maxContentLength: Infinity, + maxBodyLength: Infinity, + maxRedirects: Infinity, + timeout: 60000, + transformResponse: [_0x79256f => { + try { + return JSON.parse(_0x79256f); + } catch {} + try { + const _0x174620 = /[\w$.]+\(\s*({[\s\S]*?})\s*\)\s*;?/; + if (_0x174620.test(_0x79256f)) { + const _0xc0fd2b = _0x79256f.match(_0x174620)[1]; + return JSON.parse(_0xc0fd2b); + } + } catch {} + return _0x79256f; + }] + }); + } catch (_0x2dc1d7) { + console.log("❌ 初始化 HTTP 请求配置时遇到了错误\n" + _0x2dc1d7); + } + } + _initAppSignConfig() { + const _0xfc36a4 = ["http://sign.257999.xyz/sign"], + _0x670589 = process.env.JD_SIGN_API || _0xfc36a4[Math.floor(Math.random() * _0xfc36a4.length)]; + this._appSignConfig = { + requestApi: _0x670589, + bodyField: process.env.JD_SIGN_API_BODY_FIELD || "body", + functionIdField: process.env.JD_SIGN_API_FUNCTIONID_FIELD || "fn", + requestMethod: null, + requestContentType: null, + genSign: null + }; + try { + const _0x496e8b = process.env.JD_SIGN_API_METHOD; + _0x496e8b && _0x496e8b.toUpperCase() === "GET" ? this._appSignConfig.requestMethod = "GET" : this._appSignConfig.requestMethod = "POST"; + } catch {} + try { + const _0x1089bb = process.env.JD_SIGN_API_CONTENT_TYPE; + _0x1089bb && _0x1089bb.indexOf("application/x-www-form-urlencoded") !== -1 ? this._appSignConfig.requestContentType = _0x1089bb : this._appSignConfig.requestContentType = "application/json; charset=utf-8"; + } catch {} + try { + this._appSignConfig.genSign = require(this._genSignModelPath); + } catch {} + } + genRandomString(_0x224643 = 32, _0x2b4be7 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-") { + const _0x3700d7 = _0x2b4be7.length; + let _0x3e80b8 = ""; + for (let _0x5d2ef1 = 0; _0x5d2ef1 < _0x224643; _0x5d2ef1++) { + _0x3e80b8 += _0x2b4be7.charAt(Math.floor(Math.random() * _0x3700d7)); + } + return _0x3e80b8; + } + parseUrl(_0x31b51c) { + try { + const _0x12023a = new URL(_0x31b51c); + return _0x12023a; + } catch (_0x2885b6) { + return {}; + } + } + parseUrlParameter(_0xd5fdb4) { + try { + const _0x1cb7c7 = {}, + _0x4cbb3e = this.parseUrl(_0xd5fdb4), + _0x402645 = new URLSearchParams(_0x4cbb3e?.["search"]); + for (const [_0x36a4ab, _0x457e87] of _0x402645) { + _0x1cb7c7[_0x36a4ab] = _0x457e87; + } + if (_0x4cbb3e?.["hash"] && _0x4cbb3e.hash.includes("#/")) { + const _0xd0de1c = _0x4cbb3e.hash.replace("#/", ""), + _0x154280 = _0xd0de1c.includes("?") ? new URLSearchParams(_0xd0de1c.split("?").slice(1).join("?")) : new URLSearchParams(); + for (const [_0x49e7ae, _0x136826] of _0x154280) { + _0x1cb7c7[_0x49e7ae] = _0x136826; + } + } + return _0x1cb7c7; + } catch { + return {}; + } + } + getUrlParameter(_0x19f6c5, _0x3dd528) { + try { + const _0x3ad3e4 = this.parseUrl(_0x19f6c5), + _0x37f0d4 = _0x3ad3e4.searchParams.get(_0x3dd528); + return _0x37f0d4 || ""; + } catch { + return ""; + } + } + objectToQueryString(_0xc45099) { + try { + const _0x39c651 = []; + for (const _0x2366ec in _0xc45099) { + if (_0xc45099.hasOwnProperty(_0x2366ec)) { + const _0x42bd9e = _0xc45099[_0x2366ec], + _0x52db72 = encodeURIComponent(_0x2366ec), + _0x2360ee = _0x42bd9e === null || _0x42bd9e === undefined ? "" : encodeURIComponent(_0x42bd9e); + _0x39c651.push(_0x52db72 + "=" + _0x2360ee); + } + } + return _0x39c651.join("&"); + } catch { + return ""; + } + } + queryStringToObject(_0x2bc000) { + try { + const _0x100804 = {}, + _0x277758 = _0x2bc000.split("&"); + for (const _0x2bab7b of _0x277758) { + const [_0x5ac894, _0x5ec2d7] = _0x2bab7b.split("="); + _0x100804[decodeURIComponent(_0x5ac894)] = _0x5ec2d7 === undefined ? null : decodeURIComponent(_0x5ec2d7); + } + return _0x100804; + } catch { + return {}; + } + } + parseResponseCookie(_0x3f19b5) { + const _0x14d379 = {}; + try { + if (typeof _0x3f19b5 === "object" && _0x3f19b5?.["headers"] && _0x3f19b5?.["headers"]["set-cookie"]) { + const _0x40a399 = _0x3f19b5.headers["set-cookie"]; + for (const _0x39d23a of _0x40a399) { + const _0x147a99 = _0x39d23a.split(";")[0]; + _0x14d379[_0x147a99.substr(0, _0x147a99.indexOf("="))] = _0x147a99.substr(_0x147a99.indexOf("=") + 1); + } + } + } catch {} + return _0x14d379; + } + getResponseCookie(_0x1fa509, _0x4f04f2 = "") { + let _0x3c38f0 = ""; + const _0xe49150 = this.parseResponseCookie(_0x1fa509), + _0x2389cd = Object.keys(_0xe49150); + if (_0x2389cd.length > 0) { + _0x2389cd.forEach(_0x25e8b4 => { + _0x3c38f0 += _0x25e8b4 + "=" + _0xe49150[_0x25e8b4] + "; "; + }); + _0x3c38f0 = _0x3c38f0.trim(); + } else { + if (_0x4f04f2) { + return _0x4f04f2; + } + } + return _0x3c38f0; + } + getCookieValue(_0x4cb568, _0x4680f6) { + if (!_0x4cb568 || !_0x4680f6) { + return ""; + } + const _0x522b39 = new RegExp(_0x4680f6 + "=([^;]*)"), + _0x487870 = _0x522b39.exec(_0x4cb568.trim().replace(/\s/g, "")); + return _0x487870 && _0x487870[1] || ""; + } + parseCookie(_0x558a15) { + const _0x58232e = {}, + _0x36939b = _0x558a15.split(";"); + for (const _0x1d987e of _0x36939b) { + const [_0x459c09, _0x1d21c0] = _0x1d987e.trim().split("="); + _0x58232e[_0x459c09] = _0x1d21c0; + } + return _0x58232e; + } + getLatestIOSVersion() { + return this._iOSVersionLatest || ""; + } + formatTime(_0x5767fd, _0x5e6cd1 = Date.now()) { + const _0x3567de = new Date(_0x5e6cd1); + let _0xc93a19 = _0x5767fd; + const _0x387c35 = { + YYYY: _0x3567de.getFullYear(), + MM: String(_0x3567de.getMonth() + 1).padStart(2, "0"), + DD: String(_0x3567de.getDate()).padStart(2, "0"), + HH: String(_0x3567de.getHours()).padStart(2, "0"), + mm: String(_0x3567de.getMinutes()).padStart(2, "0"), + ss: String(_0x3567de.getSeconds()).padStart(2, "0"), + S: String(_0x3567de.getMilliseconds()).padStart(3, "0") + }; + Object.keys(_0x387c35).forEach(_0xef5360 => { + _0xc93a19 = _0xc93a19.replace(new RegExp(_0xef5360, "g"), _0x387c35[_0xef5360]); + }); + return _0xc93a19; + } + async request(_0x309e6d) { + let _0x747474 = { + success: false, + status: null, + data: null, + headers: null, + error: null, + connected: false + }, + _0x147e1a = this._requestDebugMode, + _0x3ee617 = null; + try { + if (!_0x309e6d || !_0x309e6d.url) { + console.log("❌ 调用请求方法无效,缺少必要的参数!"); + _0x747474.error = "缺少必要的请求参数"; + return _0x747474; + } + _0x309e6d.hasOwnProperty("debug") && (_0x147e1a = _0x309e6d.debug, delete _0x309e6d.debug); + const _0x487865 = this._requestAxiosProxyConfig, + _0x9f2e1f = this._requestDynamicProxyConfig, + _0x3e4648 = this._requestNoProxyList; + _0x309e6d.body && (_0x309e6d.data = _0x309e6d.body, delete _0x309e6d.body); + for (const _0x5d4ee0 of ["data", "params"]) { + !_0x309e6d[_0x5d4ee0] && delete _0x309e6d[_0x5d4ee0]; + } + _0x309e6d.method = (_0x309e6d.method || "get").toLowerCase(); + if (_0x309e6d.proxy && typeof _0x309e6d.proxy === "string") { + const _0x46a930 = this._getProxyConfigWithAddress(_0x309e6d.proxy); + _0x46a930 ? _0x309e6d.proxy = _0x46a930 : (console.log("❌ 代理配置无效,跳过使用代理"), delete _0x309e6d.proxy); + } + _0x309e6d.data && typeof _0x309e6d.data === "object" && (!_0x309e6d.headers || !_0x309e6d.headers["Content-Type"] || _0x309e6d.headers["Content-Type"].includes("application/x-www-form-urlencoded")) && (_0x309e6d.data = querystring.stringify(_0x309e6d.data)); + if (_0x309e6d.httpsTlsOptions && typeof _0x309e6d.httpsTlsOptions === "object" && _0x309e6d.url.includes("https://")) { + _0x3ee617 = _0x309e6d.httpsTlsOptions; + Object.assign(https.globalAgent.options, _0x3ee617); + delete _0x309e6d.httpsTlsOptions; + } else { + _0x309e6d.hasOwnProperty("httpsTlsOptions") && delete _0x309e6d.httpsTlsOptions; + } + let _0x85c10b = false; + if (!["proxy", "httpAgent", "httpsAgent"].some(_0x45d8ec => _0x309e6d.hasOwnProperty(_0x45d8ec))) { + if (_0x487865 || _0x9f2e1f) { + let _0x3f218b = true; + const _0x597735 = this.parseUrl(_0x309e6d.url).hostname || _0x309e6d.url; + for (const _0x21f42c of _0x3e4648) { + const _0x28fcb1 = new RegExp("^" + _0x21f42c.split("*").join(".*") + "$"); + if (_0x28fcb1.test(_0x597735.hostname)) { + _0x3f218b = false; + _0x147e1a && console.log("ℹ️ 该代理请求命中 NO_PROXY 规则 ➜ " + _0x21f42c); + break; + } + } + if (_0x3f218b) { + if (_0x487865) { + _0x309e6d.proxy = _0x487865; + } else { + if (_0x9f2e1f) { + if (_0x9f2e1f.proxyConfig) { + _0x309e6d.proxy = _0x9f2e1f.proxyConfig; + _0x85c10b = true; + } else { + const _0x2b7c26 = await this.getProxyAddressWithApi(_0x9f2e1f.api), + _0x15ce8d = this._getProxyConfigWithAddress(_0x2b7c26); + if (_0x15ce8d) { + Object.assign(_0x9f2e1f, { + extractTimestamp: Date.now(), + usedTimes: 0, + proxyConfig: _0x15ce8d + }); + _0x309e6d.proxy = _0x15ce8d; + _0x85c10b = true; + this._requestDynamicProxyShowAddress && console.log(this._requestDynamicProxyPrintAddressFormat.replace(/
/g, this._getProxyAddressWithConfig(_0x309e6d.proxy))); + } else { + if (!_0x9f2e1f.fetchFailContinue) { + _0x747474.error = "获取动态代理地址失败,已设置跳过请求"; + return _0x747474; + } + } + } + } + } + } + } + } + for (const _0x58ee88 of ["proxy", "httpAgent", "httpsAgent"]) { + !_0x309e6d[_0x58ee88] && delete _0x309e6d[_0x58ee88]; + } + _0x309e6d.proxy && (this._loadModule("HttpsProxyAgent"), _0x309e6d.httpsAgent = this._genHttpsAgentWithProxyConfig(_0x309e6d.proxy), delete _0x309e6d.proxy); + await axios(_0x309e6d).then(_0x5502b6 => { + if (_0x85c10b) { + _0x9f2e1f.lastUseTimeStamp = Date.now(); + _0x9f2e1f.usedTimes++; + const _0x21eeba = _0x9f2e1f.useLimit > 0 && _0x9f2e1f.usedTimes >= _0x9f2e1f.useLimit, + _0x1d6832 = _0x9f2e1f.timeLimit > 0 && Date.now() - _0x9f2e1f.extractTimestamp >= _0x9f2e1f.timeLimit; + (_0x21eeba || _0x1d6832) && Object.assign(_0x9f2e1f, { + proxyConfig: null, + lastUseTimeStamp: null, + extractTimestamp: null, + usedTimes: 0 + }); + } + _0x747474.success = true; + _0x747474.status = _0x5502b6.status; + _0x747474.data = _0x5502b6.data; + _0x747474.headers = _0x5502b6.headers; + _0x747474.connected = true; + _0x147e1a && this._handleRequestDebugPrint(_0x5502b6, true); + }).catch(_0x430146 => { + if (_0x85c10b) { + _0x9f2e1f.lastUseTimeStamp = Date.now(); + _0x9f2e1f.usedTimes++; + const _0x440475 = _0x9f2e1f.useLimit > 0 && _0x9f2e1f.usedTimes >= _0x9f2e1f.useLimit, + _0x1f896a = _0x9f2e1f.timeLimit > 0 && Date.now() - _0x9f2e1f.extractTimestamp >= _0x9f2e1f.timeLimit; + (_0x440475 || _0x1f896a) && Object.assign(_0x9f2e1f, { + proxyConfig: null, + lastUseTimeStamp: null, + extractTimestamp: null, + usedTimes: 0 + }); + } + let _0x1219eb = null; + if (_0x430146.response) { + _0x747474.connected = true; + const _0x3fd6f7 = _0x430146.response?.["status"]; + _0x430146.response.data && (_0x747474.data = _0x430146.response.data); + _0x430146.response.headers && (_0x747474.headers = _0x430146.response.headers); + _0x1219eb = this._requestFailMessagesMap[_0x3fd6f7] || "请求失败 [Response code " + _0x3fd6f7 + "]"; + } else { + _0x85c10b && Object.assign(_0x9f2e1f, { + proxyConfig: null, + lastUseTimeStamp: null, + extractTimestamp: null, + usedTimes: 0 + }); + _0x430146.request ? _0x1219eb = (this._requestErrorMessagesMap[_0x430146.code] ?? "未知网络错误") + " [" + _0x430146.code + "]" : _0x1219eb = _0x430146.message || "未知错误状态"; + } + (_0x430146.config?.["httpAgent"] || _0x430146.config?.["httpsAgent"]) && (_0x1219eb += "(🌐该请求通过代理发出)"); + _0x747474.error = _0x1219eb; + _0x747474.status = _0x430146.response?.["status"] || null; + _0x147e1a && (this._handleRequestDebugPrint(_0x430146, false), console.log("❌ 请求失败原因 ➜ " + _0x747474.error)); + }); + _0x3ee617 && Object.keys(_0x3ee617).forEach(_0x240944 => { + https.globalAgent.options[_0x240944] = null; + }); + } catch (_0x47d955) { + _0x747474.error = _0x47d955.message || _0x47d955; + _0x147e1a && console.log("❌ 在处理 HTTP 请求时遇到了错误 ➜ " + _0x47d955); + } + return _0x747474; + } + async get(_0x3a3ecf) { + return await this.request(Object.assign({}, _0x3a3ecf, { + method: "get" + })); + } + async post(_0x38b83d) { + return await this.request(Object.assign({}, _0x38b83d, { + method: "post" + })); + } + async put(_0x541cfc) { + return await this.request(Object.assign({}, _0x541cfc, { + method: "put" + })); + } + async delete(_0x371810) { + return await this.request(Object.assign({}, _0x371810, { + method: "delete" + })); + } + _handleRequestDebugPrint(_0x24c372, _0x4a62dd = true) { + this._loadModule("TablePrint"); + if (!this._Table) { + return; + } + const _0x3c74a7 = this._Table; + console.log("------------------------ 🔧 REQUEST DEBUG ------------------------------"); + try { + let _0x5c903c = null, + _0x425618 = null; + _0x5c903c = new _0x3c74a7({ + columns: [{ + title: "类型", + name: "type", + alignment: "left" + }, { + title: "说明", + name: "info", + alignment: "left" + }], + charLength: { + "🟢": 2, + "🔴": 2, + "❌": 2 + } + }); + _0x5c903c.addRow({ + type: "请求结果", + info: "" + (_0x4a62dd ? "🟢" : _0x24c372?.["response"] ? "🔴" : "❌") + (_0x24c372?.["status"] ? " " + _0x24c372.status : _0x24c372?.["response"] ? " " + _0x24c372.response?.["status"] : "") + " - " + "".concat(_0x24c372?.["config"]?.["method"] || "未知").toUpperCase() + }); + if (_0x24c372?.["config"]?.["url"]) { + try { + _0x425618 = new URL(_0x24c372.config.url); + _0x5c903c.addRow({ + type: "请求地址", + info: _0x425618.origin + }); + _0x5c903c.addRow({ + type: "请求路径", + info: _0x425618.pathname + }); + } catch { + _0x5c903c.addRow({ + type: "请求地址", + info: _0x24c372.config.url + }); + } + } + _0x5c903c.printTable(); + if (_0x425618 && _0x425618?.["search"] || _0x24c372?.["config"]?.["params"]) { + try { + const _0x2747bd = Object.assign({}, new URLSearchParams(_0x425618.search) || {}, _0x24c372?.["config"]?.["params"] || {}); + if (Object.keys(_0x2747bd).length > 0) { + _0x5c903c = new _0x3c74a7({ + columns: [{ + title: "名称", + name: "label", + alignment: "left" + }, { + title: "值", + name: "value", + alignment: "left" + }] + }); + for (let _0x5cf80d in _0x2747bd) { + _0x5c903c.addRow({ + label: decodeURIComponent(_0x5cf80d), + value: decodeURIComponent(_0x2747bd[_0x5cf80d]) + }); + } + console.log("\n✧ 请求参数"); + _0x5c903c.printTable(); + } + } catch {} + } + if (_0x24c372?.["config"]?.["httpAgent"] || _0x24c372?.["config"]?.["httpsAgent"]) { + const _0xc72d59 = (_0x24c372.config?.["httpAgent"] || _0x24c372.config?.["httpsAgent"])?.["proxy"], + _0xc71da6 = { + protocol: _0xc72d59.protocol.replace(":", ""), + hostname: _0xc72d59.hostname + }; + _0xc72d59.port && (_0xc71da6.port = _0xc72d59.port); + if (_0xc72d59 instanceof URL) { + (_0xc72d59.username || _0xc72d59.password) && (_0xc71da6.username = _0xc72d59.username, _0xc71da6.password = _0xc72d59.password); + } else { + if (_0xc72d59.auth) { + const _0x21a7e5 = _0xc72d59.auth.split(":"); + _0xc71da6.username = _0x21a7e5[0]; + _0xc71da6.password = _0x21a7e5[1]; + } + } + _0x5c903c = new _0x3c74a7({ + columns: [{ + title: "名称", + name: "label", + alignment: "left" + }, { + title: "值", + name: "value", + alignment: "left" + }] + }); + for (let _0x2ccf3f in _0xc71da6) { + let _0x40928e = _0xc71da6[_0x2ccf3f]; + typeof _0x40928e === "object" && (_0x40928e = JSON.stringify(_0x40928e)); + _0x5c903c.addRow({ + label: _0x2ccf3f, + value: _0x40928e + }); + } + console.log("\n✧ HTTP 代理配置"); + _0x5c903c.printTable(); + } + if (_0x24c372?.["config"]?.["headers"]) { + const _0x5e358a = _0x24c372.config.headers; + _0x5c903c = new _0x3c74a7({ + columns: [{ + title: "名称", + name: "label", + alignment: "left" + }, { + title: "值", + name: "value", + alignment: "left", + maxLen: 80 + }] + }); + for (let _0x181d9e in _0x5e358a) { + let _0x387b8f = _0x5e358a[_0x181d9e]; + typeof _0x387b8f === "object" && (_0x387b8f = JSON.stringify(_0x387b8f)); + _0x5c903c.addRow({ + label: _0x181d9e, + value: _0x387b8f + }); + } + console.log("\n✧ 请求 Headers"); + _0x5c903c.printTable(); + } + if (_0x24c372?.["config"]?.["data"]) { + let _0x4e2c65 = _0x24c372.config.data; + if (typeof _0x4e2c65 === "object") { + _0x4e2c65 = JSON.stringify(JSON.parse(_0x4e2c65)); + } else { + if (typeof _0x4e2c65 === "string") { + try { + const _0x45ca3a = JSON.parse(_0x4e2c65); + _0x4e2c65 = JSON.stringify(_0x45ca3a); + } catch { + _0x4e2c65 = JSON.stringify(_0x4e2c65).slice(1, -1); + } + } + } + console.log("\n✧ 请求 Body\n" + _0x4e2c65); + } + if (!_0x4a62dd && !_0x24c372?.["response"]) { + console.log("\n------------------------------------------------------------------------"); + return; + } + if (_0x24c372?.["headers"]) { + const _0x3cee9c = _0x24c372.headers; + _0x5c903c = new _0x3c74a7({ + columns: [{ + title: "名称", + name: "label", + alignment: "left" + }, { + title: "值", + name: "value", + alignment: "left", + maxLen: 80 + }] + }); + for (let _0x5ab700 in _0x3cee9c) { + let _0xfa45ad = _0x3cee9c[_0x5ab700]; + typeof _0xfa45ad !== "string" && (_0xfa45ad = JSON.stringify(_0xfa45ad)); + _0x5c903c.addRow({ + label: _0x5ab700, + value: _0xfa45ad + }); + } + console.log("\n✧ 响应 Headers"); + _0x5c903c.printTable(); + } + if (_0x24c372?.["data"]) { + let _0x482c1e = _0x24c372.data; + if (typeof _0x482c1e === "object") { + _0x482c1e = JSON.stringify(_0x482c1e); + } else { + if (typeof _0x482c1e === "string") { + try { + const _0x328027 = JSON.parse(_0x482c1e); + _0x482c1e = JSON.stringify(_0x328027); + } catch { + _0x482c1e = JSON.stringify(_0x482c1e).slice(1, -1); + } + } + } + console.log("\n✧ 响应 Body\n" + _0x482c1e); + } + } catch (_0x1d8f2c) { + console.log("❌ 处理 REQUEST DEBUG PRINT 时遇到了错误 ➜ " + (_0x1d8f2c.message || _0x1d8f2c)); + } + console.log("\n------------------------------------------------------------------------"); + } + async getProxyAddressWithApi(_0x428088) { + let _0xe1286e = ""; + try { + const _0x3a2a6a = /\b(?:\d{1,3}\.){3}\d{1,3}:\d{1,5}\b/g, + _0x20c15c = { + url: _0x428088, + method: "post", + proxy: null, + timeout: 30000 + }; + let _0x578e98 = 0, + _0x41aa59 = null; + const _0x414fa8 = 1; + while (_0x578e98 < _0x414fa8) { + const _0x20d4e4 = await this.request(_0x20c15c); + if (!_0x20d4e4.success) { + _0x41aa59 = _0x20d4e4.error; + _0x578e98++; + continue; + } + if (!_0x20d4e4.data) { + _0x41aa59 = "无响应数据"; + _0x578e98++; + continue; + } + const _0x4d6b2e = _0x20d4e4.data; + if (typeof _0x4d6b2e === "object") { + if (_0x4d6b2e?.["data"]) { + let _0xdd9acd = _0x4d6b2e.data; + if (Array.isArray(_0xdd9acd) && _0xdd9acd.length > 0) { + _0xdd9acd = _0xdd9acd[0]; + if (_0xdd9acd?.["ip"] && _0xdd9acd?.["port"]) { + _0xe1286e = _0xdd9acd.ip + ":" + _0xdd9acd.port; + } else { + _0xdd9acd?.["IP"] && _0xdd9acd?.["Port"] && (_0xe1286e = _0xdd9acd.IP + ":" + _0xdd9acd.Port); + } + } else { + if (_0xdd9acd?.["proxy_list"] && Array.isArray(_0xdd9acd.proxy_list) && _0xdd9acd.proxy_list.length > 0) { + const _0x54d343 = _0xdd9acd.proxy_list[0]; + typeof _0x54d343 === "object" && _0x54d343?.["ip"] && _0x54d343?.["port"] ? _0xe1286e = _0x54d343.ip + ":" + _0x54d343.port : _0xe1286e = _0x54d343; + } + } + _0xe1286e && !_0x3a2a6a.test(_0xe1286e) && (_0xe1286e = ""); + } + !_0xe1286e && (_0x41aa59 = "接口响应数据异常:" + JSON.stringify(_0x4d6b2e)); + } else { + const _0x5f4e3b = _0x4d6b2e.match(_0x3a2a6a); + _0x5f4e3b && (_0xe1286e = _0x5f4e3b[0]); + !_0xe1286e && (_0x41aa59 = "接口响应数据异常:" + _0x4d6b2e); + } + if (_0xe1286e) { + return _0xe1286e; + } + _0x578e98++; + } + _0x578e98 >= _0x414fa8 && console.log("⚠ 提取代理地址失败 ➜ " + _0x41aa59); + } catch (_0x5e8731) { + console.log("❌ 在处理请求代理API获取代理地址时遇到了错误\n" + _0x5e8731); + } + return _0xe1286e; + } + _getProxyConfigWithAddress(_0x2fc81c = "") { + try { + if (!_0x2fc81c) { + return null; + } + !_0x2fc81c.includes("://") && (_0x2fc81c = "http://" + _0x2fc81c); + const _0x2a53ea = this.parseUrl(_0x2fc81c); + if (_0x2a53ea?.["hostname"]) { + const _0x101f49 = { + protocol: _0x2a53ea.protocol.replace(":", "") === "https" ? "https" : "http", + host: _0x2a53ea.hostname, + port: parseInt(_0x2a53ea?.["port"] || "8080") + }; + (_0x2a53ea?.["username"] || _0x2a53ea?.["password"]) && (_0x101f49.auth = { + username: _0x2a53ea?.["username"] || "", + password: _0x2a53ea?.["password"] || "" + }); + return _0x101f49; + } + } catch {} + return null; + } + _getProxyAddressWithConfig(_0x9321a5 = null) { + try { + if (!_0x9321a5) { + return null; + } + const _0x517a03 = Object.assign({}, _0x9321a5); + let _0x549e6b = ""; + _0x517a03.auth && (_0x549e6b = (_0x517a03.auth?.["username"] || "") + ":" + (_0x517a03.auth?.["password"] || "") + "@"); + return _0x517a03.protocol + "://" + _0x549e6b + _0x517a03.host + ":" + _0x517a03.port; + } catch { + return JSON.stringify(_0x9321a5); + } + } + _genHttpsAgentWithProxyConfig(_0x246acc) { + try { + if (!this._HttpsProxyAgent) { + return null; + } + if (!_0x246acc) { + return null; + } + let _0x5aa51f = (_0x246acc?.["protocol"] || "http") + "://"; + _0x246acc?.["auth"] && (_0x5aa51f += (_0x246acc.auth?.["username"] || "") + ":" + (_0x246acc.auth?.["password"] || "") + "@"); + _0x5aa51f += _0x246acc?.["host"] + ":" + (_0x246acc?.["port"] || "8080"); + return new this._HttpsProxyAgent(_0x5aa51f); + } catch (_0x1298b4) { + console.log("❌ 加载代理时遇到了错误 ➜ " + (_0x1298b4.message || _0x1298b4)); + } + return null; + } + async concTaskNormal(_0x37aef7 = "3", _0x1ba46f = 100, _0x2502cc) { + let _0x6e94f = false, + _0x134173 = 0, + _0x48dfee = 0; + async function _0x379c2a(_0x4cd060) { + const _0x1a0bc5 = await _0x2502cc(_0x4cd060); + if (_0x1a0bc5) { + if (typeof _0x1a0bc5 === "boolean") { + _0x6e94f = true; + } else { + typeof _0x1a0bc5 === "object" && _0x1a0bc5?.["runEnd"] && (_0x6e94f = true); + } + } + _0x134173--; + _0x5be807(); + } + async function _0x5be807() { + while (_0x134173 < _0x37aef7 && _0x1ba46f > 0 && !_0x6e94f) { + _0x1ba46f--; + _0x134173++; + _0x48dfee++; + await _0x379c2a(_0x48dfee); + } + _0x6e94f && (await new Promise(_0x114cd3 => { + const _0x36a823 = setInterval(() => { + _0x134173 === 0 && (clearInterval(_0x36a823), _0x114cd3()); + }, 100); + })); + } + const _0x576c21 = Math.min(_0x1ba46f, _0x37aef7), + _0x13d1c2 = []; + for (let _0x21acc3 = 0; _0x21acc3 < _0x576c21; _0x21acc3++) { + _0x1ba46f--; + _0x134173++; + _0x48dfee++; + _0x13d1c2.push(_0x379c2a(_0x48dfee)); + } + await Promise.all(_0x13d1c2); + _0x5be807(); + await new Promise(_0x4fa446 => { + const _0x395260 = setInterval(() => { + (_0x134173 === 0 || _0x6e94f) && (clearInterval(_0x395260), _0x4fa446()); + }, 100); + }); + } + setCookie(_0x164038) { + this._Cookie = _0x164038; + } + unsetCookie() { + this._Cookie = ""; + this._UserAgent = ""; + } + getCookie() { + return this._Cookie; + } + getLatestAppVersion() { + return this._latestAppVersionData.version || ""; + } + getLatestAppBuildVersion() { + return this._latestAppVersionData.build || ""; + } + getLatestLiteAppVersion() { + return this._latestLiteAppVersionData.version || ""; + } + getLatestLiteAppBuildVersion() { + return this._latestLiteAppVersionData.build || ""; + } + getErrorMsg(_0xb4c2e2, _0x223f10 = ["msg", "message", "errMsg", "errMessage", "errorMsg", "errorMessage", "bizMsg", "subMsg", "echo", "error", "resp_msg", "txt", "rlt", "displayMsg", "resultMsg", "desc"], _0x20153f = "") { + if (!_0xb4c2e2) { + return _0x20153f; + } + for (let _0x2f6f5a of _0x223f10) { + if (_0xb4c2e2.hasOwnProperty(_0x2f6f5a)) { + return _0xb4c2e2[_0x2f6f5a]; + } + } + return _0x20153f; + } + maskUserName(_0x542387 = "", _0x3be5de = "*") { + if (!_0x542387) { + return ""; + } + if (_0x542387.length <= 1) { + return _0x3be5de; + } + if (_0x542387.length < 5) { + return _0x542387.slice(0, 1) + _0x3be5de.repeat(_0x542387.length - 1); + } + return _0x542387.slice(0, 2) + _0x3be5de.repeat(_0x542387.length - 4) + _0x542387.slice(-2); + } + genUuid(_0x2eccac = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", _0x22a004 = "0123456789abcdef") { + let _0x6a3a9e = ""; + for (let _0x270ed4 of _0x2eccac) { + if (_0x270ed4 == "x") { + _0x6a3a9e += _0x22a004.charAt(Math.floor(Math.random() * _0x22a004.length)); + } else { + _0x270ed4 == "X" ? _0x6a3a9e += _0x22a004.charAt(Math.floor(Math.random() * _0x22a004.length)).toUpperCase() : _0x6a3a9e += _0x270ed4; + } + } + return _0x6a3a9e; + } + genUA(_0x14b83f = "", _0x29eaf2 = "jd") { + if (_0x14b83f && this._UserAgentMap.has(_0x14b83f)) { + return this._UserAgentMap.get(_0x14b83f); + } + const _0x1ff197 = { + jd: { + app: "jdapp", + appBuild: this._latestAppVersionData.build, + clientVersion: this._latestAppVersionData.version + }, + lite: { + app: "jdltapp", + appBuild: this._latestLiteAppVersionData.build, + clientVersion: this._latestLiteAppVersionData.version + } + }, + _0x241e96 = _0x29eaf2 === "lite" ? "lite" : "jd", + { + app: _0x433cbb, + appBuild: _0x548599, + clientVersion: _0xe87b72 + } = _0x1ff197[_0x241e96], + _0x52b200 = [this._latestIOSVersion].map(_0x54d0ac => { + let _0x107954 = _0x54d0ac.split("."); + if (_0x107954.length > 2) { + _0x107954.pop(); + } + return _0x107954.join("."); + }), + _0x16d7bf = _0x52b200[Math.floor(Math.random() * _0x52b200.length)], + _0xbc1b1 = this.genUuid(), + _0x8cbbfa = !!_0x14b83f ? JSON.stringify(this.getCipherConf({ + ud: CryptoJS.SHA1(_0x14b83f).toString(), + sv: _0x16d7bf, + iad: "" + }, _0x241e96)) : "", + _0x45ed8f = "iPhone; CPU iPhone OS " + _0x16d7bf.replace(".", "_") + " like Mac OS X", + _0x18b429 = [_0x433cbb, "iPhone", _0xe87b72, "", "rn/" + _0xbc1b1, "M/5.0", "appBuild/" + _0x548599, "jdSupportDarkMode/0", "ef/1", _0x8cbbfa ? "ep/" + encodeURIComponent(_0x8cbbfa) : "", "Mozilla/5.0 (" + _0x45ed8f + ") AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148", "supportJDSHWK/1", ""], + _0x4d1206 = _0x18b429.join(";"); + _0x14b83f && this._UserAgentMap.set(_0x14b83f, _0x4d1206); + if (this._Cookie) { + this._UserAgent = _0x4d1206; + } + return _0x4d1206; + } + getJEH(_0x59e236) { + !_0x59e236 && (_0x59e236 = "JD4iPhone/" + this.getLatestAppBuildVersion() + " (iPhone; iOS " + this.getLatestIOSVersion() + "; Scale/3.00)"); + return encodeURIComponent(JSON.stringify(this.getCipherConf({ + "User-Agent": encodeURIComponent(_0x59e236) + }))); + } + getJEC(_0x405972) { + return encodeURIComponent(JSON.stringify(this.getCipherConf({ + pin: encodeURIComponent(_0x405972) + }))); + } + getCipherConf(_0x534125, _0x73b08 = "jd") { + if (_0x534125 && typeof _0x534125 === "object") { + for (let _0x1b7c53 in _0x534125) { + _0x534125[_0x1b7c53] = this.Base64.encode(_0x534125[_0x1b7c53]); + } + } else { + _0x534125 && typeof _0x534125 === "string" ? _0x534125 = this.Base64.encode(_0x534125) : _0x534125 = {}; + } + return { + ciphertype: 5, + cipher: _0x534125, + ts: Math.floor(Date.now() / 1000), + hdid: "JM9F1ywUPwflvMIpYPok0tt5k9kW4ArJEU3lfLhxBqw=", + version: "1.0.3", + appname: _0x73b08 === "lite" ? "com.jd.jdmobilelite" : "com.360buy.jdmobile", + ridx: -1 + }; + } + async getLoginStatus(_0x5adf9b = this._Cookie) { + if (!_0x5adf9b) { + console.log("🚫 getLoginStatus 请求失败 ➜ 未设置Cookie"); + return undefined; + } + try { + const _0x98e8b4 = { + url: "https://plogin.m.jd.com/cgi-bin/ml/islogin", + method: "GET", + headers: { + Accept: "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh-Hans;q=0.9", + Cookie: _0x5adf9b, + Host: "plogin.m.jd.com", + "User-Agent": this._UserAgent || this._defaultUserAgent + }, + timeout: 30000, + debug: false + }; + let _0x4645e3 = 0, + _0x5929d8 = null; + const _0x112135 = 1; + while (_0x4645e3 < _0x112135) { + const _0x1eabc1 = await this.request(_0x98e8b4); + if (!_0x1eabc1.success) { + _0x5929d8 = "🚫 getLoginStatus 请求失败 ➜ " + _0x1eabc1.error; + _0x4645e3++; + continue; + } + if (!_0x1eabc1.data) { + _0x5929d8 = "🚫 getLoginStatus 请求异常 ➜ 无响应数据"; + _0x4645e3++; + continue; + } + const _0x3fe9a4 = _0x1eabc1.data?.["islogin"]; + if (_0x3fe9a4 === "1") { + return true; + } else { + if (_0x3fe9a4 === "0") { + return false; + } + } + _0x4645e3++; + } + _0x4645e3 >= _0x112135 && console.log(_0x5929d8); + } catch (_0x4884fd) { + console.log("❌ getLoginStatus 在处理请求中遇到了错误\n" + _0x4884fd); + } + return undefined; + } + async joinShopMember(_0x2e41e9, _0x44aa70 = this._Cookie, _0x297075 = "") { + if (!_0x44aa70) { + console.log("🚫 joinShopMember 请求失败 ➜ 未设置Cookie"); + return undefined; + } + if (!_0x2e41e9) { + return undefined; + } + try { + this._loadModule("h5st"); + if (!this._H5st) { + return undefined; + } + _0x2e41e9 = "".concat(_0x2e41e9); + const _0x4ea462 = { + venderId: _0x2e41e9, + bindByVerifyCodeFlag: 1, + registerExtend: {}, + writeChildFlag: 0, + channel: 406, + appid: "27004", + needSecurity: true, + bizId: "shopmember_m_jd_com" + }; + !_0x297075 && this._shopMemberActivityIds.has(_0x2e41e9) && (_0x297075 = this._shopMemberActivityIds.get(_0x2e41e9)); + _0x297075 && (_0x4ea462.activityId = _0x297075); + const _0x23bf4f = { + appId: "27004", + appid: "shopmember_m_jd_com", + functionId: "bindWithVender", + clientVersion: "9.2.0", + client: "H5", + body: _0x4ea462, + version: "4.7", + t: true, + ua: this._UserAgent || this._defaultUserAgent + }, + _0x59ed27 = await this._H5st.getH5st(_0x23bf4f); + if (!_0x59ed27.paramsData) { + return undefined; + } + const _0x7acd19 = { + url: "https://api.m.jd.com/client.action", + method: "POST", + headers: { + Accept: "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh-Hans;q=0.9", + Origin: "https://pages.jd.com", + Referer: "https://pages.jd.com/", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Content-Type": "application/x-www-form-urlencoded", + "User-Agent": this._UserAgent || this._defaultUserAgent, + Cookie: _0x44aa70 + }, + data: Object.assign({}, _0x59ed27.paramsData, { + area: "", + screen: "1290*2796", + uuid: "88888" + }), + timeout: 30000 + }, + _0x2d17a1 = await this.request(_0x7acd19); + if (!_0x2d17a1.success) { + console.log("🚫 joinShopMember 请求失败 ➜ " + _0x2d17a1.error); + return undefined; + } + if (!_0x2d17a1.data) { + console.log("🚫 joinShopMember 请求异常 ➜ 无响应数据"); + return undefined; + } + const _0xb949f6 = _0x2d17a1.data; + if (_0xb949f6?.["success"] === true) { + if (_0xb949f6?.["result"] && _0xb949f6.result?.["giftInfo"]) { + for (let _0xf4d32b of _0xb949f6.result?.["giftInfo"]?.["giftList"]) { + console.log(" >> 入会获得:" + _0xf4d32b.discountString + _0xf4d32b.prizeName); + } + } + if (_0xb949f6?.["message"] === "加入店铺会员成功") { + return true; + } else { + if (_0xb949f6?.["message"] === "活动太火爆,请稍后再试") { + console.log("🚫 加入店铺会员失败 ➜ " + _0xb949f6.message); + } else { + console.log("🚫 加入店铺会员失败 ➜ " + _0xb949f6?.["message"]); + return false; + } + } + } else { + if (_0xb949f6?.["message"]) { + console.log("🚫 加入店铺会员失败 ➜ " + _0xb949f6.message); + return false; + } else { + console.log("🚫 加入店铺会员失败 ➜ " + JSON.stringify(_0xb949f6)); + } + } + } catch (_0x15430e) { + console.log("❌ joinShopMember 在处理请求中遇到了错误\n" + _0x15430e); + } + return undefined; + } + async getShopMemberStatus(_0x3d0936, _0x1b1c88 = this._Cookie) { + if (!_0x1b1c88) { + console.log("🚫 getShopMemberStatus 请求失败 ➜ 未设置Cookie"); + return undefined; + } + if (!_0x3d0936) { + return undefined; + } + try { + this._loadModule("h5st"); + if (!this._H5st) { + return undefined; + } + _0x3d0936 = "".concat(_0x3d0936); + const _0x118001 = { + appId: "27004", + appid: "shopmember_m_jd_com", + functionId: "getShopOpenCardInfo", + clientVersion: "9.2.0", + client: "H5", + body: { + venderId: _0x3d0936, + payUpShop: true, + queryVersion: "10.5.2", + appid: "27004", + needSecurity: true, + bizId: "shopmember_m_jd_com", + channel: 406 + }, + version: "4.7", + t: true, + ua: this._UserAgent || this._defaultUserAgent + }, + _0x288e2f = await this._H5st.getH5st(_0x118001); + if (!_0x288e2f.paramsData) { + return undefined; + } + const _0x506486 = { + url: "https://api.m.jd.com/client.action", + method: "POST", + headers: { + Accept: "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh-Hans;q=0.9", + Origin: "https://pages.jd.com", + Referer: "https://pages.jd.com/", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Content-Type": "application/x-www-form-urlencoded", + "User-Agent": this._UserAgent || this._defaultUserAgent, + Cookie: _0x1b1c88 + }, + data: Object.assign({}, _0x288e2f.paramsData, { + area: "", + screen: "1290*2796", + uuid: "88888" + }), + timeout: 30000 + }, + _0x3a0fea = await this.request(_0x506486); + if (!_0x3a0fea.success) { + console.log("🚫 getShopMemberStatus 请求失败 ➜ " + _0x3a0fea.error); + return undefined; + } + if (!_0x3a0fea.data) { + console.log("🚫 getShopMemberStatus 请求异常 ➜ 无响应数据"); + return undefined; + } + const _0x4b6cab = _0x3a0fea.data; + if (_0x4b6cab?.["success"] === true) { + let _0x21f469 = _0x4b6cab.result; + Array.isArray(_0x21f469) && (_0x21f469 = _0x21f469[0]); + const _0xa30326 = _0x21f469?.["interestsRuleList"]?.[0]?.["interestsInfo"]?.["activityId"]; + _0xa30326 && this._shopMemberActivityIds.set(_0x3d0936, _0xa30326); + return _0x21f469?.["userInfo"]?.["openCardStatus"] === 1 ? true : false; + } else { + _0x4b6cab?.["message"] ? console.log("🚫 获取店铺会员状态异常 ➜ " + _0x4b6cab.message) : console.log("🚫 获取店铺会员状态异常 ➜ " + JSON.stringify(_0x4b6cab)); + } + } catch (_0x5c5eaf) { + console.log("❌ getShopMemberStatus 在处理请求中遇到了错误\n" + _0x5c5eaf); + } + return undefined; + } + async getShopDetail(_0x45aafc = { + venderId: "", + shopId: "" + }, _0x541f2c = this._Cookie) { + const { + venderId: _0xb3b3cf, + shopId: _0x2a4fc7 + } = _0x45aafc; + if (!_0xb3b3cf && !_0x2a4fc7) { + return {}; + } + try { + const _0x1fc71e = { + url: "https://api.m.jd.com/client.action", + method: "POST", + headers: { + Accept: "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,en-GB;q=0.6", + "Content-Type": "application/x-www-form-urlencoded", + Origin: "https://shop.m.jd.com", + Referer: "https://shop.m.jd.com/", + Host: "api.m.jd.com", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "same-site", + "User-Agent": this._defaultUserAgent, + "X-Referer-Page": "https://shop.m.jd.com/shop/introduce", + "X-Rp-Client": "h5_1.0.0", + Cookie: _0x541f2c || "" + }, + data: { + functionId: "whx_getMShopDetail", + body: JSON.stringify({ + shopId: "".concat(_0x2a4fc7 || ""), + venderId: "".concat(_0xb3b3cf || ""), + source: "m-shop" + }), + t: Date.now().toString(), + appid: "shop_m_jd_com", + clientVersion: "11.0.0", + client: "wh5", + area: "", + uuid: "" + }, + timeout: 30000 + }, + _0x43adac = await this.request(_0x1fc71e); + if (!_0x43adac.success) { + console.log("🚫 getShopDetail 请求失败 ➜ " + _0x43adac.error); + return {}; + } + if (!_0x43adac.data) { + console.log("🚫 getShopDetail 请求异常 ➜ 无响应数据"); + return {}; + } + const _0x5c148b = _0x43adac.data; + if (_0x5c148b.code === "200" && _0x5c148b.success === true && _0x5c148b.data) { + return _0x5c148b?.["data"] || {}; + } + } catch (_0x2e0963) { + console.log("❌ getShopDetail 在处理请求中遇到了错误\n" + _0x2e0963); + } + return {}; + } + async getShopId(_0x2b2bcf, _0x1346f1 = this._Cookie) { + if (!_0x2b2bcf) { + return null; + } + try { + const _0x4456c4 = await this.getShopDetail({ + venderId: _0x2b2bcf + }, _0x1346f1); + return _0x4456c4?.["shopBaseInfo"]?.["shopId"] || null; + } catch (_0x521df3) { + console.log("❌ getShopId 在处理请求中遇到了错误\n" + _0x521df3); + } + return null; + } + async getVenderId(_0x2513a6, _0x56a535 = this._Cookie) { + if (!_0x2513a6) { + return null; + } + try { + const _0x3eb024 = await this.getShopDetail({ + shopId: _0x2513a6 + }, _0x56a535); + return _0x3eb024?.["shopBaseInfo"]?.["venderId"] || null; + } catch (_0x1d9628) { + console.log("❌ getVenderId 在处理请求中遇到了错误\n" + _0x1d9628); + } + return null; + } + async getShopName(_0x195e3e = { + venderId: "", + shopId: "" + }, _0x1bce3c = this._Cookie) { + const { + venderId: _0x53a45a, + shopId: _0xb9b326 + } = _0x195e3e; + if (!_0x53a45a && !_0xb9b326) { + return null; + } + try { + const _0x353ab8 = await this.getShopDetail(_0x195e3e, _0x1bce3c); + return _0x353ab8?.["shopBaseInfo"]?.["shopName"] || null; + } catch (_0x166a9a) { + console.log("❌ getShopName 在处理请求中遇到了错误\n" + _0x166a9a); + } + return null; + } + async followShop(_0x139e89, _0x2e44b1, _0x33a974 = this._Cookie) { + if (!_0x33a974) { + console.log("🚫 followShop 请求失败 ➜ 未设置Cookie"); + return undefined; + } + if (!_0x139e89 && typeof _0x139e89 !== "boolean" || !_0x2e44b1) { + return undefined; + } + try { + const _0x2d7e29 = { + url: "https://api.m.jd.com/client.action", + method: "POST", + headers: { + Accept: "application/json, text/plain, */*", + "Accept-Encoding": "gzip, deflate, br", + "Content-Type": "application/x-www-form-urlencoded", + Origin: "https://shop.m.jd.com", + Referer: "https://shop.m.jd.com/", + Connection: "keep-alive", + "Accept-Language": "zh-cn", + Cookie: _0x33a974, + "User-Agent": this._defaultUserAgent + }, + data: { + functionId: "whx_followShop", + body: JSON.stringify({ + shopId: _0x2e44b1, + follow: _0x139e89 + }), + t: Date.now(), + appid: "shop_m_jd_com", + clientVersion: "11.0.0", + client: "wh5" + }, + timeout: 30000 + }, + _0x1dae07 = await this.request(_0x2d7e29); + if (!_0x1dae07.success) { + console.log("🚫 followShop 请求失败 ➜ " + _0x1dae07.error); + return undefined; + } + if (!_0x1dae07.data) { + console.log("🚫 followShop 请求异常 ➜ 无响应数据"); + return undefined; + } + const _0x5a814b = _0x1dae07.data; + if (_0x5a814b?.["code"] === "0") { + return _0x5a814b?.["result"]?.["code"] === "0" ? true : false; + } else { + if (_0x5a814b?.["msg"]) { + return false; + } else { + console.log("🚫 " + (_0x139e89 ? "关注" : "取关") + "店铺异常 ➜ " + JSON.stringify(_0x5a814b)); + } + } + } catch (_0x51a9f5) { + console.log("❌ followShop 在处理请求中遇到了错误\n" + _0x51a9f5); + } + return undefined; + } + useAppTls(_0x31867c = {}) { + return Object.assign({}, this._appHttpsTlsOptions, _0x31867c); + } + async concTask(_0x21440a = "3", _0x1f2b9b, _0x4b1dc0) { + const _0x1981c5 = _0x1f2b9b.slice(); + let _0x44e74c = false, + _0x2abb93 = 0, + _0x39e6e3 = 0; + async function _0x48e183(_0x5a922d, _0x11ca2a) { + const _0x8d8924 = await _0x4b1dc0(_0x5a922d, _0x11ca2a); + if (_0x8d8924) { + if (typeof _0x8d8924 === "boolean") { + _0x44e74c = true; + } else { + typeof _0x8d8924 === "object" && _0x8d8924?.["runEnd"] && (_0x44e74c = true); + } + } + _0x2abb93--; + _0x4c91c2(); + } + async function _0x4c91c2() { + while (_0x2abb93 < _0x21440a && _0x1981c5.length > 0 && !_0x44e74c) { + const _0xdf2fb4 = _0x1981c5.shift(); + _0x2abb93++; + _0x39e6e3++; + await _0x48e183(_0xdf2fb4, _0x39e6e3); + } + _0x44e74c && (await new Promise(_0x2c16fc => { + const _0x435d4b = setInterval(() => { + _0x2abb93 === 0 && (clearInterval(_0x435d4b), _0x2c16fc()); + }, 100); + })); + } + const _0x17325f = Math.min(_0x1981c5.length, _0x21440a), + _0x4dfd4b = []; + for (let _0x53e37a = 0; _0x53e37a < _0x17325f; _0x53e37a++) { + const _0x2a1ff2 = _0x1981c5.shift(); + _0x2abb93++; + _0x39e6e3++; + _0x4dfd4b.push(_0x48e183(_0x2a1ff2, _0x39e6e3)); + } + await Promise.all(_0x4dfd4b); + _0x4c91c2(); + await new Promise(_0x1bcc68 => { + const _0x1518bc = setInterval(() => { + (_0x2abb93 === 0 || _0x44e74c) && (clearInterval(_0x1518bc), _0x1bcc68()); + }, 100); + }); + } + async getSign(_0xbd942b, _0x1a753b) { + !this._hasInitAppSignConfig && (this._initAppSignConfig(), this._hasInitAppSignConfig = true); + let _0x39d514 = ""; + try { + const _0x1585e4 = this._appSignConfig; + if (_0x1585e4.genSign) { + try { + _0x39d514 = _0x1585e4.genSign(_0xbd942b, _0x1a753b); + } catch (_0x4acfb3) { + console.log("🚫 getSign 获取本地签名遇到了错误 ➜ " + (_0x4acfb3.message || _0x4acfb3)); + } + if (_0x39d514) { + return _0x39d514; + } else { + console.log("🚫 getSign 本地签名获取失败"); + } + } + let _0x46b4c7 = { + [_0x1585e4.functionIdField]: _0xbd942b, + [_0x1585e4.bodyField]: _0x1a753b + }; + const _0x41d146 = { + url: _0x1585e4.requestApi, + method: _0x1585e4.requestMethod.toLowerCase(), + headers: { + "Content-Type": _0x1585e4.requestContentType + }, + data: null, + timeout: 60000, + proxy: null, + debug: false + }; + _0x1585e4.requestMethod === "GET" ? (_0x1585e4.requestApi += "?" + this.objectToQueryString(_0x46b4c7), delete _0x41d146.data, delete _0x41d146.headers["Content-Type"]) : _0x1585e4.requestContentType.indexOf("application/x-www-form-urlencoded") !== -1 ? (typeof _0x46b4c7[_0x1585e4.bodyField] === "object" && (_0x46b4c7[_0x1585e4.bodyField] = JSON.stringify(_0x46b4c7[_0x1585e4.bodyField])), _0x41d146.data = this.objectToQueryString(_0x46b4c7)) : _0x41d146.data = JSON.stringify(_0x46b4c7); + const _0x33e353 = await this.request(_0x41d146); + if (!_0x33e353.success) { + console.log("🚫 getSign 请求失败 ➜ " + _0x33e353.error); + return _0x39d514; + } + if (!_0x33e353.data) { + console.log("🚫 getSign 请求异常 ➜ 无响应数据"); + return _0x39d514; + } + let _0x175268 = _0x33e353.data; + if (typeof _0x33e353.data === "object") { + _0x175268.data && (_0x175268 = _0x175268.data); + for (const _0x19289c of ["body", "convertUrl", "convertUrlNew"]) { + if (_0x175268?.[_0x19289c] && this._checkSignStrFormat(_0x175268[_0x19289c])) { + _0x39d514 = _0x175268[_0x19289c]; + break; + } + } + !_0x39d514 && console.log("🚫 getSign 响应数据解析异常 ➜ " + JSON.stringify(_0x175268)); + } else { + this._checkSignStrFormat(_0x175268) ? _0x39d514 = _0x175268 : console.log("🚫 getSign 响应数据解析异常 ➜ " + _0x175268); + } + } catch (_0x3404e1) { + console.log("🚫 getSign 在处理请求中遇到了错误\n" + _0x3404e1); + } + return _0x39d514; + } + _checkSignStrFormat(_0x90eb69) { + const _0x4807b7 = ["body=", "st=", "sign=", "sv="]; + for (let _0x5cb689 = 0; _0x5cb689 < _0x4807b7.length; _0x5cb689++) { + if (!_0x90eb69.includes(_0x4807b7[_0x5cb689])) { + return false; + } + } + return true; + } + _loadModule(_0x317d0c) { + switch (_0x317d0c) { + case "h5st": + if (!this._H5st) { + try { + const { + H5st: _0x2f7afc + } = require(this._jdCryptoModelPath); + this._H5st = _0x2f7afc; + } catch (_0x56b621) { + console.log("❌ h5st 组件加载失败"); + } + } + break; + case "TablePrint": + if (!this._Table) { + try { + const { + Table: _0x39eaee + } = require("console-table-printer"); + this._Table = _0x39eaee; + } catch (_0x226e0e) { + console.log("❌ TablePrint 组件加载失败"); + } + } + break; + case "HttpsProxyAgent": + if (!this._HttpsProxyAgent) { + try { + const { + HttpsProxyAgent: _0x30af2d + } = require("https-proxy-agent"); + this._HttpsProxyAgent = _0x30af2d; + } catch (_0x1dbde7) { + try { + const _0x58051e = require("https-proxy-agent"); + this._HttpsProxyAgent = _0x58051e; + } catch (_0x12eec9) { + console.log("❌ https-proxy-agent 代理模块加载失败"); + } + } + } + break; + default: + break; + } + } +} +class Base64Algorithm { + static _utf8Encode(_0x34b761) { + _0x34b761 = _0x34b761.replace(/rn/g, "n"); + let _0x4d1a7f = "", + _0x17618b; + for (let _0x3fc0eb = 0; _0x3fc0eb < _0x34b761.length; _0x3fc0eb++) { + _0x17618b = _0x34b761.charCodeAt(_0x3fc0eb); + if (_0x17618b < 128) { + _0x4d1a7f += String.fromCharCode(_0x17618b); + } else { + _0x17618b > 127 && _0x17618b < 2048 ? (_0x4d1a7f += String.fromCharCode(_0x17618b >> 6 | 192), _0x4d1a7f += String.fromCharCode(_0x17618b & 63 | 128)) : (_0x4d1a7f += String.fromCharCode(_0x17618b >> 12 | 224), _0x4d1a7f += String.fromCharCode(_0x17618b >> 6 & 63 | 128), _0x4d1a7f += String.fromCharCode(_0x17618b & 63 | 128)); + } + } + return _0x4d1a7f; + } + static _utf8Decode(_0x4b9a5b) { + let _0x758298 = "", + _0x3b4e07, + _0x3c499a, + _0x4eb3cf, + _0x1b6f59 = 0; + while (_0x1b6f59 < _0x4b9a5b.length) { + _0x3b4e07 = _0x4b9a5b.charCodeAt(_0x1b6f59); + if (_0x3b4e07 < 128) { + _0x758298 += String.fromCharCode(_0x3b4e07); + _0x1b6f59++; + } else { + _0x3b4e07 > 191 && _0x3b4e07 < 224 ? (_0x3c499a = _0x4b9a5b.charCodeAt(_0x1b6f59 + 1), _0x758298 += String.fromCharCode((_0x3b4e07 & 31) << 6 | _0x3c499a & 63), _0x1b6f59 += 2) : (_0x3c499a = _0x4b9a5b.charCodeAt(_0x1b6f59 + 1), _0x4eb3cf = _0x4b9a5b.charCodeAt(_0x1b6f59 + 2), _0x758298 += String.fromCharCode((_0x3b4e07 & 15) << 12 | (_0x3c499a & 63) << 6 | _0x4eb3cf & 63), _0x1b6f59 += 3); + } + } + return _0x758298; + } + static encode(_0x2e8080, _0x930f36 = "KLMNOPQRSTABCDEFGHIJUVWXYZabcdopqrstuvwxefghijklmnyz0123456789+/") { + let _0x1004f2 = "", + _0x146e0f, + _0x2a39c1, + _0x53b0e0, + _0x44e7b2, + _0x1297d6, + _0x288ef4, + _0x46f318, + _0x205591 = 0; + _0x2e8080 = this._utf8Encode(_0x2e8080); + while (_0x205591 < _0x2e8080.length) { + _0x146e0f = _0x2e8080.charCodeAt(_0x205591++); + _0x2a39c1 = _0x2e8080.charCodeAt(_0x205591++); + _0x53b0e0 = _0x2e8080.charCodeAt(_0x205591++); + _0x44e7b2 = _0x146e0f >> 2; + _0x1297d6 = (_0x146e0f & 3) << 4 | _0x2a39c1 >> 4; + _0x288ef4 = (_0x2a39c1 & 15) << 2 | _0x53b0e0 >> 6; + _0x46f318 = _0x53b0e0 & 63; + if (isNaN(_0x2a39c1)) { + _0x288ef4 = _0x46f318 = 64; + } else { + isNaN(_0x53b0e0) && (_0x46f318 = 64); + } + _0x1004f2 = _0x1004f2 + _0x930f36.charAt(_0x44e7b2) + _0x930f36.charAt(_0x1297d6) + _0x930f36.charAt(_0x288ef4) + _0x930f36.charAt(_0x46f318); + } + while (_0x1004f2.length % 4 > 1) { + _0x1004f2 += "="; + } + return _0x1004f2; + } + static decode(_0x517730, _0x1ab0b = "KLMNOPQRSTABCDEFGHIJUVWXYZabcdopqrstuvwxefghijklmnyz0123456789+/") { + let _0x13d190 = "", + _0xecba00, + _0x48cf0f, + _0x3e29f3, + _0x30a423, + _0x354ae2, + _0x111014, + _0x52a034, + _0x5aa1d7 = 0; + while (_0x5aa1d7 < _0x517730.length) { + _0x30a423 = _0x1ab0b.indexOf(_0x517730.charAt(_0x5aa1d7++)); + _0x354ae2 = _0x1ab0b.indexOf(_0x517730.charAt(_0x5aa1d7++)); + _0x111014 = _0x1ab0b.indexOf(_0x517730.charAt(_0x5aa1d7++)); + _0x52a034 = _0x1ab0b.indexOf(_0x517730.charAt(_0x5aa1d7++)); + _0xecba00 = _0x30a423 << 2 | _0x354ae2 >> 4; + _0x48cf0f = (_0x354ae2 & 15) << 4 | _0x111014 >> 2; + _0x3e29f3 = (_0x111014 & 3) << 6 | _0x52a034; + _0x13d190 += String.fromCharCode(_0xecba00); + if (_0x111014 != 64) { + _0x13d190 += String.fromCharCode(_0x48cf0f); + } + if (_0x52a034 != 64) { + _0x13d190 += String.fromCharCode(_0x3e29f3); + } + } + _0x13d190 = this._utf8Decode(_0x13d190); + return _0x13d190; + } +} +class LocalStorageCache { + constructor(_0x5bb4b6 = null, _0x273323 = 0, _0x2cfbcd = null) { + this.saveFile = _0x5bb4b6; + this.defaultTTL = _0x273323; + this.reloadInterval = _0x2cfbcd; + this.lastLoad = 0; + this.data = new Map(); + this.pendingWrites = false; + this.writeDebounceTime = 5000; + this.load(); + } + load() { + if (this.saveFile && fs.existsSync(this.saveFile)) { + try { + const _0x3a4876 = fs.readFileSync(this.saveFile, "utf8"), + _0x128145 = JSON.parse(_0x3a4876); + this.data = new Map(Object.entries(_0x128145)); + } catch (_0x13a6ab) {} + } + this.lastLoad = this.now(); + } + save() { + if (this.saveFile && !this.pendingWrites) { + this.pendingWrites = true; + try { + const _0x4dfe5a = JSON.stringify(Object.fromEntries(this.data)); + fs.writeFileSync(this.saveFile, _0x4dfe5a, "utf8"); + } catch {} + this.pendingWrites = false; + } + } + clear() { + this.data.clear(); + } + _checkAndReload(_0x408cf1 = this.now()) { + if (!this.reloadInterval || !this.saveFile) { + return; + } + _0x408cf1 - this.lastLoad > this.reloadInterval && this.load(); + } + now() { + return Date.now(); + } + put(_0x16ac57, _0x400bef = null, _0x59c77e = 0, _0x180b12) { + this._checkAndReload(); + _0x59c77e = _0x59c77e === 0 ? this.defaultTTL : _0x59c77e; + const _0x10c23f = _0x59c77e === 0 ? 0 : this.now() + _0x59c77e; + let _0x3c9251 = null; + this.data.has(_0x16ac57) && (_0x3c9251 = this.data.get(_0x16ac57).val); + _0x400bef !== null ? this.data.set(_0x16ac57, { + expires: _0x10c23f, + val: _0x400bef + }) : this.data.delete(_0x16ac57); + this.save(); + if (_0x180b12 && _0x3c9251) { + _0x180b12(_0x3c9251); + } + return _0x3c9251; + } + get(_0x5e6da6, _0x41a9a8) { + this._checkAndReload(); + let _0x32b07e = null; + if (this.data.has(_0x5e6da6)) { + const _0x493d07 = this.data.get(_0x5e6da6); + _0x493d07.expires === 0 || this.now() < _0x493d07.expires ? _0x32b07e = _0x493d07.val : (_0x32b07e = null, this.nuke(_0x5e6da6)); + } + if (_0x41a9a8) { + _0x41a9a8(_0x32b07e); + } + return _0x32b07e; + } + del(_0xb48153, _0x3aaeb8) { + this._checkAndReload(); + let _0x3bc9a0 = null; + this.data.has(_0xb48153) && (_0x3bc9a0 = this.data.get(_0xb48153).val, this.data.delete(_0xb48153), this.save()); + if (_0x3aaeb8) { + _0x3aaeb8(_0x3bc9a0); + } + return _0x3bc9a0; + } + nuke(_0x3557ee) { + this._checkAndReload(); + this.data.has(_0x3557ee) && (this.data.delete(_0x3557ee), this.save()); + } +} +module.exports = new Common(); \ No newline at end of file