const CryptoJS = require('crypto-js'); const { JSDOM, ResourceLoader } = require('jsdom'); const { CookieJar } = require('tough-cookie'); const axios = require('axios'); const { HttpCookieAgent, HttpsCookieAgent } = require('http-cookie-agent/http'); const crc32 = require('crc').crc32; class BaseUtils { constructor() { global.baseUtils = this; } requestUrl = { gettoken: 'https://rjsb-token-m.jd.com/gettoken', bypass: 'https://blackhole.m.jd.com/bypass', getInfo: 'https://blackhole.m.jd.com/getinfo', }; webview = { unionwsws_param: { iOS: { routerURL: 'router://JDUnionFingerprintModule/getUnionFingerprintForH5', callBackName: 'fingerPrintCallback', }, android: { businessType: 'unionFingerPrint', callBackName: 'fingerPrintCallback', }, }, getStorage: (e) => { return JSON.parse(localStorage.getItem(e)); }, setStorage: (e, t) => { localStorage.setItem(e, JSON.stringify(t)); }, getIosFingerprint: function () { console.log('不支持获取IOS指纹'); // if (0 === navigator.userAgent.indexOf("jdapp")) { // if (-1 !== navigator.userAgent.indexOf("supportJDSHWK/1") || window._is_jdsh_wkwebview == 1) { // window.webkit.messageHandlers.JDAppUnite.postMessage({ // method: "callSyncRouterModuleWithParams", // params: JSON.stringify(this.unionwsws_param.iOS) // }) // } else { // window.JDAppUnite.callRouterModuleWithParams(JSON.stringify(this.unionwsws_param.iOS)) // } // } }, getAndroidFingerprint: () => { // TODO console.log('Android 获取指纹待实现'); // if (this.isWKWebView()) { // window.webkit.messageHandlers.JDAppUnite.postMessage({ // method: "notifyMessageToNative", // params: JSON.stringify(this.unionwsws_param.android) // }); // } else if (window.JdAndroid) { // window.JdAndroid.notifyMessageToNative(JSON.stringify(this.unionwsws_param.android)); // } }, getAppFingerprint: () => { try { var o = navigator.userAgent.toLowerCase(); if (/iphone|ipad|ios|ipod/.test(o)) { this.webview.getIosFingerprint(); } else if (/android/.test(o)) { this.webview.getAndroidFingerprint(); } } catch (e) { console.log(e); } return JSON.stringify(this.webview.getStorage('unionwsws')); }, isWKWebView: () => { return navigator.userAgent.match(/supportJDSHWK/i) || 1 === window._is_jdsh_wkwebview; }, }; changeEnv(url, cookieStr, userAgent) { let ptPin = this.extractPtPin(cookieStr); if (ptPin && global.document) { let localPtPin = this.extractPtPin(document.cookie); if (localPtPin === ptPin) { return; } } let jar = new CookieJar(); global.api = axios.create({ httpAgent: new HttpCookieAgent({ cookies: { jar }, }), httpsAgent: new HttpsCookieAgent({ cookies: { jar }, ciphers: 'TLS_AES_256_GCM_SHA384', }), }); const resourceLoader = new ResourceLoader({ userAgent, }); let dom = new JSDOM(``, { url, resources: resourceLoader, cookieJar: jar, }); global.window = dom.window; global.document = window.document; global.location = { ...window.location, }; global.navigation = { ...window.navigation, }; global.screen = { availHeight: 1032, availLeft: 0, availTop: 0, availWidth: 1920, colorDepth: 24, height: 1080, isExtended: false, onchange: null, orientation: { ScreenOrientation: { angle: 0, type: 'landscape-primary', onchange: null }, }, pixelDepth: 24, width: 1920, }; window.screen = screen; window.navigation = navigation; global.navigator = window.navigator; global.localStorage = window.localStorage; global.history = window.history; if (cookieStr) { const cookies = cookieStr.split(';'); cookies.forEach((cookieString) => { if (cookieString) { global.document.cookie = cookieString.concat(';domain=.jd.com;path=/;expires=2099-04-16T07:09:14.000Z'); } }); } } // 解析cookie字符串,提取pt_pin extractPtPin(cookies) { const regex = /pt_pin=([^;]+)/; const match = cookies.match(regex); const ptPinValue = match && match[1]; return ptPinValue || ''; } getDefaultVal(e) { const t = { undefined: 'u', false: 'f', true: 't', }; return t[e] || e; } arrayLength(e, t, n) { if (n) { t.push(n); t.length > e && t.shift(); } } atobFunc(e) { try { // this.atobPolyfill(); return window.atob(e); } catch (e) { return ''; } } baseConverter(e, t) { let c = [], s = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', l = e, f, p = ''; if (t < 2 || t > 36) return ''; for (; l > 0; ) { f = Math.floor(l % t); c.push(f); l = Math.floor(l / t); } for (; c.length; ) p += s[c.pop()]; return p; } isFirefox() { return navigator.userAgent.toLowerCase().indexOf('firefox') > -1; } getCallStack() { var t = this.getCallStackUnencrypted(); return CryptoJS.MD5(t).toString(); } md5Str(e) { return CryptoJS.MD5(e).toString(); } getCallStackUnencrypted() { var n = this, r; try { throw new Error('call_stack'); } catch (a) { try { var i = (function (t) { if (t.indexOf('@') > -1) { var a = t.split('\n'), u = ''; if (a.length > 1) { a.pop(); a.forEach(function (t) { var a, c = t.split('@'); if (c.length >= 2) { var s = c[1], f = s.indexOf('?'), l = s.slice(0, f).split(':'); if (l.length > 2) { l.pop(); l.pop(); } var p = l.join(':'); a = ''.concat(c[0], '=').concat(p); } else { var d = t.indexOf(':'); a = ''.concat(d === -1 ? t : t.slice(0, d), "=''"); } u += ''.concat('' === u ? '' : '&').concat(a); }); } return n.removal(u); } var c = t.split('at '), s = ''; if (c.length > 1) { c.shift(); c.forEach(function (e) { var t, n = e.split(' '); if (n.length >= 2) { var m = n[1]; var v = m.indexOf('('); var d = m.indexOf('?'); var g = m.indexOf(')'); var l = v === -1 ? '' : m.slice(v + 1, d === -1 ? g : d); var p = l.split(':'); if (p.length > 2) { p.pop(); p.pop(); } var h = p.join(':'); t = ''.concat(n[0], '=').concat(h); } else { var y = e.indexOf(':'); t = ''.concat(y === -1 ? e : e.slice(0, y), "=''"); } s += ''.concat('' === s ? '' : '&').concat(t); }); } return n.removal(s); })(a.stack.toString()); if (i.length < 11) { r = a.stack.toString().substring(0, 200); } else { r = i; } } catch (e) { r = e.toString(); } } return r; } removal(e) { var n = e.split('&'), r = new Map(), o = []; n.forEach(function (e) { var i = e.split('='); if (r.has(i[1])) { r.set(i[1], !0); } else { r.set(i[1], !1); o.push(e); } }); return o.join('&'); } getUa() { return navigator.userAgent; } isMobile() { return this.getUa().match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i); } ajax(e) { return api({ method: e.type, url: e.url, headers: { 'content-type': 'application/x-www-form-urlencoded', 'user-agent': window.navigator.userAgent, }, data: e.data, }); } getCurrentDate() { return new Date(); } getCurrentTime() { try { return this.getCurrentDate().getTime(); } catch (e) { return 0; } } isDevtoolOpen() { return false; } toTimestamp() { var t = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0; if (typeof t === 'number') return t; if (typeof t == 'string') { var o = t.match(/^(\d+(?:\.\d+)?)([smhd])$/); if (o) { var i; switch (o[2]) { case 'm': i = o[1] * 60 * 1000; break; case 'h': i = 60 * o[1] * 60 * 1000; break; case 'd': i = o[1] * 24 * 60 * 60 * 1000; break; default: i = o[1] * 1000; } return Date.now() + Math.round(i); } t = t.replace(/[.-]/g, '/'); var a = new Date(t).getTime(); if (!isNaN(a)) return a; } return -1; } clearTokem(e, t) { try { var o = window.localStorage.getItem(e); if (o) { var i = JSON.parse(o); if (i[t]) { delete i[t]; window.localStorage.setItem(e, JSON.stringify(i)); } } } catch (e) {} } getTokem(e, t) { var i = ''; var u = ''; try { var c = window.localStorage.getItem(e); if (c) { var s = JSON.parse(c); if (s[t]) { var f = s[t]; var l = f.data; var p = f.expires; var d = f.xcd; var v; if (d === void 0) { v = ''; } else { v = d; } if (this.toTimestamp(p) > Date.now()) { i = l; u = this.getDecode(v || ''); document.cookie = ''.concat(e, '=').concat(l, ';domain=.jd.com;path=/;expires=').concat(p); } else { delete s[t]; window.localStorage.setItem(e, JSON.stringify(s)); } } } return { joyytokenVal: i, xcdVal: u, }; } catch (e) { return { joyytokenVal: i, xcdVal: u, }; } } encodeSearchKey(e) { var n = { code: '%', encode: '%25', }; var o = { code: '?', encode: '%3F', }; var i = { code: '#', encode: '%23', }; var a = { code: '&', encode: '%26', }; var c = [n, o, i, a]; const that = this; return e.replace(/[%?#&]/g, function (e, n, o) { var a, u = that.createIterable(c); try { for (u.s(); !(a = u.n()).done; ) { var f = a.value; if (f.code === e) return f.encode; } } catch (e) { u.e(e); } finally { u.f(); } }); } getCookie(e) { try { var o = new RegExp('(^| )' + e + '=([^;]*)(;|$)'); var i = document.cookie.match(o); if (i) { if (i.length > 2 && i[2]) { if (-1 !== i[2].indexOf('%u')) return unescape(i[2]); if (/.*[\u4e00-\u9fa5]+.*$/.test(i[2])) { var a = this.encodeSearchKey(i[2]); return decodeURIComponent(a); } return decodeURIComponent(i[2]); } return ''; } return ''; } catch (e) { return ''; } } getRandomInt() { var u = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0; var a = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 9; u = Math.ceil(u); a = Math.floor(a); return Math.floor(Math.random() * (a - u + 1)) + u; } getRandomWord(e, t) { for (var a = '', u = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', c = 0; c < e; c++) { var s = u; 0 === c && t && (s = u.slice(1)); var f = Math.round(Math.random() * (s.length - 1)); a += s.substring(f, f + 1); } return a; } getNumberInString(e) { return Number(e.replace(/[^0-9]/gi, '')); } getSpecialPosition(e) { var s = !(arguments.length > 1) || !(arguments[1] !== void 0) || arguments[1]; e = String(e); var u = s ? 1 : 0; var c = ''; for (var a = 0; a < e.length; a++) { a % 2 === u && (c += e[a]); } return c; } getLastAscii(e) { var o = e.charCodeAt(0).toString(); return o[o.length - 1]; } toAscii(e) { var i = ''; for (var a in e) { var u = e[a]; var c = /[a-zA-Z]/.test(u); if (e.hasOwnProperty(a)) { i += c ? this.getLastAscii(u) : u; } } return i; } add0(e, t) { return (Array(t).join('0') + e).slice(-t); } minusByByte(e, t) { var o = e.length, i = t.length; var u = Math.max(o, i), c = this.toAscii(e), s = this.toAscii(t), f = '', l = 0; if (o !== i) { c = this.add0(c, u); s = this.add0(s, u); } for (; l < u; l++) { f += Math.abs(c[l] - s[l]); } return f; } getLoginStatus() { var o = this.isMobile() ? 'pt_key' : 'thor'; return this.getCookie(o); } getCookiePin() { var o = this.getCookie('pwdt_id') || this.getCookie('pin') || ''; return CryptoJS.MD5(o).toString().toLowerCase(); } RecursiveSorting() { var o = this, i = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, a = {}, u = i; if (Object.prototype.toString.call(u) === '[object Object]') { var c = Object.keys(u).sort(function (e, n) { return e < n ? -1 : e > n ? 1 : 0; }); c.forEach(function (e) { var l = u[e]; if (Object.prototype.toString.call(l) === '[object Object]') { a[e] = o.RecursiveSorting(l); } else if (Object.prototype.toString.call(l) === '[object Array]') { for (var d = [], h = 0; h < l.length; h++) { var v = l[h]; if (Object.prototype.toString.call(v) === '[object Object]') { d[h] = o.RecursiveSorting(v); } else { d[h] = v; } } a[e] = d; } else { a[e] = l; } }); } else { a = i; } return a; } objToString2() { var n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; var r = ''; Object.keys(n).forEach(function (e) { var u = n[e]; if (u != null) { if (u instanceof Object || u instanceof Array) { r += '' .concat(r === '' ? '' : '&') .concat(e, '=') .concat(JSON.stringify(u)); } else { r += '' .concat(r === '' ? '' : '&') .concat(e, '=') .concat(u); } } }); return r; } objToString() { var u = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; var a = ''; Object.keys(u) .sort(function (e, n) { return e < n ? -1 : e > n ? 1 : 0; }) .forEach(function (e) { var n = u[e]; if (n != null) { a += '' .concat(a === '' ? '' : '&') .concat(e, '=') .concat(n); } }); return a; } getCookieJdu() { return '' === this.getCookie('__jdu') ? (this.getCookie('__jda') === '' ? '' : this.getCookie('__jda').split('.')[1]) : this.getCookie('__jdu'); } getTouchSession() { var e = new Date().getTime(); var t = this.getRandomInt(1000, 9999); return String(e) + String(t); } collectVoteFilter() { var u = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : '0'; var a = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : '100'; var i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : []; var s = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : ''; try { if ('1' === u) { return i.filter(function (t) { var r = t[s].substring(t[s].length - 2); if (r[0] === '0') { r = r.substring(1); } if (Number(r) < Number(a)) { return !0; } }); } return i; } catch (e) { return i; } } getPluginsNum() { var t; try { t = window.navigator.plugins.length; } catch (e) { t = 'c'; } return t; } getGPUMes() { window.localStorage.gpuAll = '{"gpuServiceProvider":"ARM","gpuBrand":"Mali-G610 MC6"}'; return ['ARM', 'Mali-G610 MC6']; } getLangNum() { var t = ''; try { t = window.navigator.languages.length; } catch (e) {} return t; } getChromeAttribute() { return ''; } getConfigurable_Enumerable() { return ['11', '11', '11', '11']; } getBatteryStatus() { return ['t', Infinity, Infinity, 0.77]; } encrypt1(e, t) { for (var i = e.length, a = t.toString(), u = [], c = '', s = '', f = 0, l = 0; l < a.length; l++) { if (f >= i) f = f % i; c = a.charCodeAt(l) ^ e.charCodeAt(f); s = c % 10; u.push(s); f = f + 1; } return u.join().replace(/,/g, ''); } len_Fun(e, t) { return ''.concat(e.substring(t, e.length)) + ''.concat(e.substring(0, t)); } encrypt2(e, t) { var i = t.toString(), a = t.toString().length, u = parseInt((a + e.length) / 3); var s = '', f = ''; if (a > e.length) { s = this.len_Fun(i, u); f = this.encrypt1(e, s); } else { s = this.len_Fun(e, u); f = this.encrypt1(i, s); } return f; } addZeroFront(e) { return e && e.length >= 5 ? e : ('00000' + String(e)).substr(-5); } addZeroBack(e) { return e && e.length >= 5 ? e : (String(e) + '00000').substr(0, 5); } encrypt3(e, t) { var s = this.addZeroBack(t).toString().substring(0, 5); var u = this.addZeroFront(e).substring(e.length - 5); var l = s.length; var f = []; for (let i = 0; i < l; i++) { f.push(Math.abs(s.charCodeAt(i) - u.charCodeAt(i))); } return f.join().replace(/,/g, ''); } encrypt7(e, t) { try { var h = e.split('').reverse().join(''); var p = (String(t) + '000000').slice(0, 13); var v = p.slice(9, 12); var l = ''.concat(h).concat(v); var d = []; var c = ''; for (var s = 0; s < p.length; s++) { var f = (p.charCodeAt(s) & l.charCodeAt(s)).toString(16); d.push(f); } c = d.join(''); return c; } catch (e) { return null; } } encrypt8(e, t) { try { let a = t.toString(), u = a.substr(0, 1), c = a.substr(1) + u, s = e.substr(-1), f = (s + e.substr(0, e.length - 1)).split('').reverse().join(''), l = a.slice(-3), p = ''.concat(f).concat(l), d = [], h = 0; for (; h < c.length; h++) { var v = (c.charCodeAt(h) ^ p.charCodeAt(h)).toString(16); d.push(v); } return d.join(''); } catch (e) { return null; } } encrypt9(e, t) { try { let i = t.toString(), a = e.split('').reverse().join('').slice(0, 5), u = (String(t) + '000000').slice(0, 13).slice(-5), c = '', s = 0; for (; s < a.length; s++) { c += ''.concat(a.charAt(s)).concat(u.charAt(s)); } c += c.slice(0, i.length - c.length); for (var f = [], l = 0; l < i.length; l++) { var p = (i.charCodeAt(l) ^ c.charCodeAt(l)).toString(16); f.push(p); } return f.join(''); } catch (e) { return null; } } encryptA(e, t) { try { var a = t.toString(), u = e.split('').reverse().join(''); u += u.slice(0, a.length - u.length); for (var c = [], s = 0; s < a.length; s++) { var f = a.charCodeAt(s) | u.charCodeAt(s); var l = (f % 15).toString(16); c.push(l); } for (var p = c.join(''), d = '', h = '', v = 0; v < p.length; v++) { if (v % 2 === 0) { d += p.charAt(v); } else { h += p.charAt(v); } } return ''.concat(d).concat(h); } catch (e) { return null; } } encryptB(e, t) { try { var d = t.toString(); var s = e.toString(); var c = d + s; var v = (s + d).split('').reverse().join(''); var h = []; for (var f = 0; f < c.length; f++) { var l = c.charCodeAt(f) ^ v.charCodeAt(f), p = (l % 15).toString(16); h.push(p); } return h.join(''); } catch (e) { return null; } } encryptC(e, t) { try { var a, u = t.toString(), c = e.toString(), s = u.split(''), f = c.split(''), l = [], p = []; if (s.length > f.length) { a = f.length; p = s; } else { a = s.length; p = f; } for (var d = 0; d < a; d++) { l.push(s[d]); l.push(f[d]); } for (var h = l.concat(p.slice(a)).join(''), v = (c + u).split('').reverse().join(''), m = [], g = 0; g < h.length; g++) { var y = h.charCodeAt(g) ^ v.charCodeAt(g); var w = (y % 15).toString(16); m.push(w); } return m.join(''); } catch (e) { return null; } } encryptD(e, t) { try { var c = t.toString(); var l = c.slice(-5); var b = e.toString(); var d = l.split(''); var m = b.split(''); var f = []; for (var y = 0; y < d.length; y++) { var w = d[y] % m.length; f.push(m[w]); } var _ = []; for (var g = 0; g < m.length; g++) { if (g % 2 !== 0) { f.push(m[g]); } else { _.push(m[g]); } } f = f.reverse().join(''); var x = d.reverse(); var s = _.concat(x); s = s.join(''); var p = []; for (var h = 0; h < f.length; h++) { var v = ((f.charCodeAt(h) ^ s.charCodeAt(h)) % 15).toString(16); p.push(v); } return p.join(''); } catch (e) { return null; } } getDefaultArr(e) { return new Array(e).fill('a'); } getExceptArr(e) { return new Array(e).fill('c'); } getUndefinedArr(e) { return new Array(e).fill('u'); } getFailedArr(e) { return new Array(e).fill('f'); } ArrayFillPolyfill() {} getExceptData(e) { try { return e(); } catch (e) { return 'c'; } } getNaviParam(e) { return this.getExceptData(function () { return navigator[e] || 'u'; }); } getCookieEnabled() { return 't'; } getSessionStorage() { return 't'; } getLocalStorage() { return 't'; } getIsMobileOne() { return 't'; } getIsMobileTwo() { return 't'; } getIsNodeEnv() { return 'f'; } getHasNodeVM2() { return 'f'; } getExistWebdriver() { return 'f'; } getDetectPhantomjs() { return 'f'; } getPageDomNum() { var o; try { o = [ document.querySelectorAll('script').length, document.querySelectorAll('div').length, document.querySelectorAll('link').length, document.querySelectorAll('meta').length, history.length, navigator.maxTouchPoints, ]; } catch (e) { o = this.getExceptArr(6); } return o; } getJdKey() { var e = this; return this.getExceptData(function () { var r = { jdkey: 'a', }; return (e.webview.getStorage('unionwsws') || r).jdkey; }); } getAppBuild() { return this.getExceptData(function () { return navigator.userAgent.match(/appBuild\/([\d]+)/i)[1]; }); } getAppVersion() { var n = navigator.userAgent; return (n && n.indexOf('jdapp') === 0 && n.split(';')[2]) || null; } getNaviConnection() { var t; try { t = [navigator.connection.downlink || 'u', navigator.connection.effectiveType || 'u']; } catch (r) { t = this.getExceptArr(2); } return t; } getScreen() { var e; try { var n = window.screen; e = [n.height, n.width]; } catch (n) { e = this.getExceptArr(6); } return e; } getIosAppDetail() { let s = ''; // console.log('不支持获取IOS应用信息'); // var u = this.getDefaultVal(typeof $request != "undefined"); // var h = this.getDefaultVal((typeof $httpClient != "undefined")); // var p = this.getDefaultVal(typeof $task != "undefined"); // var l = this.getDefaultVal((typeof $loon != "undefined")); // var f = this.getDefaultVal((typeof $app != "undefined") && (typeof $http != "undefined")); // var a = this.getDefaultVal(("function" == "function") && !f); // var d = this.getDefaultVal(typeof window != "undefined"); // var c = this.getDefaultVal(typeof navigator != "undefined"); // s = "" + u + h + p + l + f + a + d + c; return s; } getAutoJs() { return 'u'; } getExistMiniblink() { return 'u'; } getCrcCode(e) { var r = '0000000', o = ''; try { o = crc32(e).toString(36); r = this.addZeroToSeven(o); } catch (e) {} return r; } addZeroToSeven(e) { return e && e.length >= 7 ? e : ('0000000' + String(e)).substr(-7); } xorEncrypt(e, t) { var l = this.getCurrentTime(); var f = t.length; var h = ''; for (var p = 0; p < e.length; p++) { h += String.fromCharCode(e[p].charCodeAt() ^ t[p % f].charCodeAt()); } var c = this.getCurrentTime(); var s = c - l; return { xorEncrypted: h, totalTime: s, }; } utoa(e) { // this.btoaPolyfill(); return window.btoa(unescape(encodeURIComponent(e))); } // btoaPolyfill() { // var t = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; // // window.btoa = window.btoa || function (o) { // for (var u, c, s, f, l = "", p = 0, d = (o = String(o)).length % 3; p < o.length;) { // if ((c = o.charCodeAt(p++)) > 255 || (s = o.charCodeAt(p++) > 255) || (f = o.charCodeAt(p++) > 255)) { // throw new TypeError("Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range."); // } // u = c << 16 | s << 8 | f; // l += t.charAt(u >> 18 & 63) + t.charAt(u >> 12 & 63) + t.charAt(u >> 6 & 63) + t.charAt(63 & u); // } // // return d ? l.slice(0, d - 3) + "===".substring(d) : l; // }; // } inArr(e) { return !(Number(e) in [1, 2, 3, 4, 5, 6, 7, 8, 9]); } getInRange(e, t, n) { var l = n; var f = t; this.inArr(n) && (l = String(n).charCodeAt(0)); this.inArr(t) && (f = String(t).charCodeAt(0)); var c = []; const that = this; e.map(function (e) { var n = e; that.inArr(e) && (n = String(e).charCodeAt(0)); n >= f && n <= l && c.push(e); }); return c; } isApp(e) { var i = navigator.userAgent; return e === 'jd' ? /^jdapp/i.test(i) : e === 'jdjr' && /JDJR-App/i.test(i); } isAndroid() { var o = navigator.userAgent; return o.indexOf('Android') > -1 || o.indexOf('Linux') > -1; } isIOS() { return !!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); } versionCompare(e, t) { if (e === t) return 0; e = e.split('.'); t = t.split('.'); var s = e.length - t.length; var l = []; for (var c = 0; c < Math.abs(s); c++) l.push(0); if (s > 0) { t = t.concat(l); } else { s < 0 && (e = e.concat(l)); } for (var f = 0; f < e.length; f++) { if (((e[f] = parseInt(e[f], 10)), (t[f] = parseInt(t[f], 10)), e[f] > t[f])) return 1; if (e[f] < t[f]) return -1; } return 0; } isDuringDate(e, t) { try { var n = new Date(), r = new Date(e), o = new Date(t); return n >= r && n <= o; } catch (e) { return !1; } } isNotEmptyString(e) { return typeof e === 'string' && e !== '' && e.trim() !== '' && e !== 'null' && e !== 'undefined'; } urlSafeBase64Decode(e) { return e ? e.replace(/-/g, '+').replace(/_/g, '/') : ''; } getDecode(e) { try { e = this.urlSafeBase64Decode(e); return decodeURIComponent( this.atobFunc(e) .split('') .map(function (e) { return '%' + ('00' + e.charCodeAt(0).toString(16)).slice(-2); }) .join(''), ); } catch (e) { return ''; } } stringToByte(e) { var u = []; var s; var f; s = e.length; for (var c = 0; c < s; c++) { f = e.charCodeAt(c); if (f >= 65536 && f <= 1114111) { u.push((7 & (f >> 18)) | 240); u.push(((f >> 12) & 63) | 128); u.push(((f >> 6) & 63) | 128); u.push((f & 63) | 128); } else { if (f >= 2048 && f <= 65535) { u.push((15 & (f >> 12)) | 224); u.push(((f >> 6) & 63) | 128); u.push(128 | (f & 63)); } else { if (f >= 128 && f <= 2047) { u.push(((f >> 6) & 31) | 192); u.push((f & 63) | 128); } else { u.push(f & 255); } } } } return u; } BKDRHash(e) { try { var s = 31; var u = 0; e = this.stringToByte(e); if (!e || e.length < 1) return ''; for (var c = 0; c < e.length; c++) { u = u * s + e[c]; u = u >>> 0; } var f = u & 2147483647; return f.toString(16).toUpperCase(); } catch (e) { return ''; } } rewriteToString(e) { // e && Object.keys(e).forEach(function (t) { // e[t].toString = function () { // return ""; // }; // }); } createIterable(e, t) { var r = (typeof Symbol !== 'undefined' && e[Symbol.iterator]) || e['@@iterator']; if (!r) { if (Array.isArray(e) || (r = this.convertToIterable(e)) || (t && e && typeof e.length === 'number')) { r && (e = r); var s = 0, f = function () {}, l = { s: f, n: function () { var t = {}; if (((t.done = !0), s >= e.length)) return t; var r = {}; r.done = !1; r.value = e[s++]; return r; }, e: function (e) { throw e; }, f: f, }; return l; } throw new TypeError('Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.'); } var d, h = !0, v = !1; return { s: function () { r = r.call(e); }, n: function () { var e = r.next(); h = e.done; return e; }, e: function (e) { v = !0; d = e; }, f: function () { try { !h && r.return != null && r.return(); } finally { if (v) throw d; } }, }; } convertToIterable(e, t) { if (!e) return; if (typeof e === 'string') return this.sliceToArray(e, t); var c = Object.prototype.toString.call(e).slice(8, -1); c === 'Object' && e.constructor && (c = e.constructor.name); if (c === 'Map' || c === 'Set') return Array.from(e); if (c === 'Arguments' || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)) return this.sliceToArray(e, t); } sliceToArray(e, t) { (t == null || t > e.length) && (t = e.length); for (var o = 0, i = new Array(t); o < t; o++) i[o] = e[o]; return i; } encrypt(e, t, n) { const that = this; return { 1: function () { var e = that.getNumberInString(t); var u = that.getSpecialPosition(n); return Math.abs(e - u); }, 2: function () { var r = that.getSpecialPosition(t, !1); var a = that.getSpecialPosition(n); return that.minusByByte(r, a); }, 3: function () { var e = t.slice(0, 5), r = String(n).slice(-5); return that.minusByByte(e, r); }, 4: function () { return that.encrypt1(t, n); }, 5: function () { return that.encrypt2(t, n); }, 6: function () { return that.encrypt3(t, n); }, 7: function () { return that.encrypt7(t, n); }, 8: function () { return that.encrypt8(t, n); }, 9: function () { return that.encrypt9(t, n); }, A: function () { return that.encryptA(t, n); }, B: function () { return that.encryptB(t, n); }, C: function () { return that.encryptC(t, n); }, D: function () { return that.encryptD(t, n); }, }[e](); } isFunction(t) { return 'function' == typeof t; } emptyFunction() {} decodeBase64URL(encodedString) { return (encodedString + '===') .slice(0, encodedString.length + 3 - ((encodedString.length + 3) % 4)) .replace(/-/g, '+') .replace(/_/g, '/'); } getDefaultMethod(obj, methodName) { const e = obj[methodName]; return obj === Array.prototype || (Array.prototype.isPrototypeOf(obj) && e === Array.prototype[methodName]) ? Array.prototype[methodName] : e; } getRandomIDPro() { var t, e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, r = e.size, n = void 0 === r ? 10 : r, o = e.dictType, i = void 0 === o ? 'number' : o, a = e.customDict, u = ''; if (a && 'string' == typeof a) t = a; else switch (i) { case 'alphabet': t = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; break; case 'max': t = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-'; break; default: t = '0123456789'; } for (; n--; ) u += t[(Math.random() * t.length) | 0]; return u; } fromBase64(t) { return t.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, ''); } toBase64(t) { return (t + this.getDefaultMethod('===', 'slice').call('===', (t.length + 3) % 4)).replace(/-/g, '+').replace(/_/g, '/'); } isPlainObject(t) { return '[object Object]' === Object.prototype.toString.call(t); } isEmpty(t) { return !!this.isPlainObject(t) && !Object.keys(t).length; } containsReservedParamName(t) { const PS = ['h5st', '_stk', '_ste']; for (var e = Object.keys(t), r = 0; r < e.length; r++) { var n = e[r]; if (this.getDefaultMethod(PS, 'indexOf').call(PS, n) >= 0) return !0; } return !1; } isSafeParamValue(t) { let Bp = 'function' == typeof Object.Symbol && 'symbol' == typeof Object.f('iterator') ? function (t) { return typeof t; } : function (t) { return t && 'function' == typeof Object.Symbol && t.constructor === Object.Symbol && t !== Object.Symbol.prototype ? 'symbol' : typeof t; }; let e = Bp(t); return ('number' === e && !isNaN(t)) || 'string' === e || 'boolean' === e; } formatDate() { let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : Date.now(), e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 'yyyy-MM-dd', n = new Date(t), r = e, o = { 'M+': n.getMonth() + 1, 'd+': n.getDate(), 'D+': n.getDate(), 'h+': n.getHours(), 'H+': n.getHours(), 'm+': n.getMinutes(), 's+': n.getSeconds(), 'w+': n.getDay(), 'q+': Math.floor((n.getMonth() + 3) / 3), 'S+': n.getMilliseconds(), }; return ( /(y+)/i.test(r) && (r = r.replace(RegExp.$1, ''.concat(n.getFullYear()).substr(4 - RegExp.$1.length))), Object.keys(o).forEach(function (t) { if (new RegExp('('.concat(t, ')')).test(r)) { var e = 'S+' === t ? '000' : '00'; r = r.replace(RegExp.$1, 1 == RegExp.$1.length ? o[t] : ''.concat(e).concat(o[t]).substr(''.concat(o[t]).length)); } }), r ); } getRandomIDPro(e = {}) { var t, r = e.size, n = void 0 === r ? 10 : r, o = e.dictType, i = void 0 === o ? 'number' : o, a = e.customDict, u = ''; if (a && 'string' == typeof a) t = a; else switch (i) { case 'alphabet': t = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; break; case 'max': t = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-'; break; default: t = '0123456789'; } for (; n--; ) u += t[(Math.random() * t.length) | 0]; return u; } } module.exports.BaseUtils = BaseUtils;