const CryptoJS = require('crypto-js'); const { BaseUtils } = require('./baseUtils'); class SmashUtils { constructor(url, cookieStr, userAgent) { global.baseUtils || new BaseUtils(); baseUtils.changeEnv(url, cookieStr, userAgent); this.P = {}; this.B = { q: '', appid: '', etid: '1,2,3,4,5,6,7,8,9,A,B,C,D', cf_v: '00', encrypt_id: '1,3,*,1', openMonitor: '1', openPre: '0', collectStatus: '1', collect_vote: '100', collect_rate: '60', joyytokem: '', default_encrypt_id: '1,3,*,1', default_cf_v: '00', openTraffic: '0', }; this.T = 0; this.L = !1; this.I = []; this.M = []; this.z = {}; this.R = 0; this.U = !0; this.q = null; this.W = 0; this.K = 0; this.J = 0; this.F = 0; this.V = 0; this.G = 0; this.X = 0; this.Y = 0; this.Z = !1; this.Q = 0; this.$ = baseUtils.getTouchSession(); this.ee = 'w4.0.7'; this.te = baseUtils['isMobile'](); this.ne = this.te ? 'touchstart' : 'mousedown'; this.re = this.te ? 'touchend' : 'mouseup'; this.oe = this.te ? 'touchmove' : 'mousemove'; this.ie = baseUtils['getCookieJdu'](); this.ae = ['click', 'mousedown', 'mousemove', 'mouseup', 'touchstart', 'touchmove', 'touchend']; this.ue = []; this.ce = []; this.se = [0, 0, 0]; this.fe = baseUtils.getCurrentTime(); this.le = !1; this.pe = 'a'; this.de = 'a'; this.he = 'a'; this.ve = 'a'; this.me = 'a'; this.ge = 'a'; this.ye = 'a'; this.we = 'a'; this.be = 'a'; this.xe = 'a'; this._e = 'a'; this.Se = 'a'; this.Ae = baseUtils['getDefaultArr'](7); this.Ne = baseUtils['getDefaultArr'](4); this.Ce = 'a'; this.Ee = 'a'; this.Oe = 'a'; this.je = 1; this.ke = 0; this.Pe = !1; this.De = 'e6LP9bkdiSwa'; this.Be = 'a'; this.Te = 'a'; this.Le = 'a'; this.Ie = 'a'; this.Me = 'a'; this.ze = 0; this.Re = ''; this.Ue = 'a'; this.qe = baseUtils['getDefaultArr'](7); this.He = new Array(7).fill('a'); this.We = new Array(7).fill('f'); this.Ke = 864e9; this.Je = '2022/01/31 18:00:00'; this.Fe = '2022/02/01 02:00:00'; this.Ve = null; this.Ge = !1; this.Xe = !1; this.Ye = {}; baseUtils.rewriteToString(this); } // window = { // fingerPrintCallback: (e) => { // try { // e = JSON.parse(e); // if (e.status === 0) { // baseUtils.webview.setStorage("unionwsws", e.data); // } // } catch (e) { // } // } // } setParam(e, t, n) { n && (e[t] = n); } clearjoyytoken(e, t) { try { var u = baseUtils.getTokem('joyytokem', e).joyytokenVal; if (!u || u.indexOf(e) !== 0 || (t && 1 === this.Q) || /^undefined/.test(u)) { document.cookie = 'joyytokem=;domain=.jd.com;path=/;expires=' + new Date(new Date().getTime() + 864e9).toGMTString(); baseUtils.clearTokem('joyytokem', e); this.B.encrypt_id = this.B.default_encrypt_id; this.B.cf_v = this.B.default_cf_v; } } catch (e) { this.getInterfaceData({ funcName: 'cookie', real_msg: 'cookie储存异常', error_msg: e && e.message, }); } } async getjoyytoken(e, t) { try { var u = baseUtils.getTokem('joyytokem', e).joyytokenVal; if (!u || u.indexOf(e) !== 0 || (t && this.Q === 1) || /^undefined/.test(u)) { await this.getSwitch(e); } } catch (e) { this.getInterfaceData({ funcName: 'other', real_msg: 'inner.getjoyytoken', error_msg: e && e.message, }); } } decryptJoyToken(e) { if ('' === e || !e) return this.B; try { if (this.P.appid && this.P.appid !== 'undefined') { var c = {}; c = this.decipherJoyToken(e, this.P.appid); this.Le = c.jjt || 'a'; var s = c.encrypt_id || this.B.encrypt_id; var u = {}; u.encrypt_id = s; return Object.assign(Object.assign({}, this.B), {}, u); } return this.B; } catch (e) { this.getInterfaceData({ funcName: 'other', real_msg: 'inner.decryptJoyToken', error_msg: e && e.message, }); return this.B; } } decipherJoyToken(e, t) { var u = { jjt: 'a', expire: baseUtils.getCurrentTime(), outtime: 3, time_correction: !1, }; const that = this; try { var s = e.indexOf(t) + t.length, f = e.length; let c = e .slice(s, f) .split('.') .map(function (e) { return baseUtils.atobFunc(e); }); if (c[1] && c[0] && c[2]) { var l = c[0].slice(2, 7), p = c[0].slice(7, 9), d = baseUtils.xorEncrypt(c[1] || '', l).xorEncrypted.split('~'); (u.outtime = d[3] - 0), (u.encrypt_id = d[2]), (u.jjt = 't'); var h = d[0] - 0 || 0; if (h && typeof h === 'number') { u.time_correction = !0; u.expire = h; } var m = h - baseUtils.getCurrentTime() || 0; u.q = m; u.cf_v = p; return u; } return u; } catch (e) { this.getInterfaceData({ funcName: 'joytoken', real_msg: 'joytoken解密错误', error_msg: e.name + e.message, }); return u; } } exeCode(e) { try { if (e) { var i = new Function(e); this.Ue = i(); } } catch (e) { this.Ue = 'default'; this.getInterfaceData({ funcName: 'other', real_msg: 'inner.exeCode', error_msg: e.name + e.message, }); } } getInterfaceData(e) { // console.debug(`getInterfaceData -> ${JSON.stringify(e)}`); } setIdData(e, t) { var i = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : ''; this.z[e] ? (this.z[e][t] = i) : (this.z[e] = Object.assign({}, t, i)); } async getSwitch(e) { if (!baseUtils.isDuringDate(this.Je, this.Fe)) { var a = encodeURIComponent(e), u = baseUtils.getJdKey(), c = baseUtils.getCookie('pwdt_id') || baseUtils.getCookie('pin') || '', s = baseUtils.BKDRHash(c) || ''; try { let { data: t } = await baseUtils.ajax({ type: 'POST', url: baseUtils.requestUrl.gettoken, credential: !0, data: 'content='.concat( JSON.stringify({ appname: a, whwswswws: baseUtils.getCookie('shshshfpb'), jdkey: u, body: { platform: '1', sceneid: this.P.sceneid || '', hs: s, version: this.ee, }, }), ), }); if (t.code) { this.getInterfaceData({ funcName: 'joytoken', real_msg: 'joytoken请求code异常', error_msg: JSON.stringify(t), }); } else { if (t.joyytoken && this.P.appid && this.P.appid !== 'undefined') { var l = this.P.appid + t.joyytoken, f = this.decipherJoyToken(l, this.P.appid), p = f.expire, v = f.outtime; this.Le = f.jjt || 'a'; this.L = f.time_correction || !1; this.B = Object.assign( Object.assign({}, this.B), {}, { q: f.q || 0, cf_v: f.cf_v || this.B.cf_v, }, ); try { document.cookie = 'joyytokem=' + this.P.appid + t.joyytoken + ';domain=.jd.com;path=/;expires=' + new Date(p + v * 60 * 60 * 1e3).toGMTString(); var y = window.localStorage.getItem('joyytokem'), w = {}; if (y) { var b = JSON.parse(y), x = Object.entries(b).sort(function (e, t) { return e[1].n - t[1].n; }); if (x.length > 4) { x = x.slice(x.length - 4); } x.forEach(function (e, t) { e[1].n = t; w[e[0]] = e[1]; }); } w[e] = { n: Object.keys(w).length, data: this.P.appid + t.joyytoken, xcd: t.xcd || '', expires: new Date(p + 60 * v * 60 * 1e3).toGMTString(), }; window.localStorage.setItem('joyytokem', JSON.stringify(w)); } catch (e) { this.getInterfaceData({ funcName: 'cookie', real_msg: 'cookie或storage储存异常', error_msg: e.message, }); } } if (t.collect_rate && t.collect_rate !== this.B.collect_rate) { this.B.collect_rate = t.collect_rate; await this.reportData(); await this.reportInterfaceData(); } Object.assign(this.B, t); if (this.M && this.M.length > 0) { const that = this; this.M.forEach(function (e) { if (e.functionid === 'init' || '1' === e.f_name) { e.cf_v = that.B.cf_v; } }); } } } catch (e) { this.getInterfaceData({ funcName: 'joytoken', real_msg: 'joytoken网络请求异常', error_msg: e.message, }); } } } async reportInterfaceData() { try { this.setjoyyaCookie(); if (baseUtils.isDuringDate(this.Je, this.Fe)) return; var a = this.B.openMonitor, u = this.B.collectStatus, c = this.B.collect_vote; if (a === '0') return; var s = baseUtils.collectVoteFilter(u, c, this.M, 'session_c'); if (!s || s.length === 0) return; var f = baseUtils.getCurrentTime(); s.forEach(function (t) { t.createdate = ''.concat(f); }); if (this.P.appid && this.P.appid !== 'undefined') { this.clearjoyytoken(this.P.appid); await this.getjoyytoken(this.P.appid); } try { await baseUtils.ajax({ type: 'POST', url: baseUtils.requestUrl.bypass, data: 'content='.concat( JSON.stringify({ appname: 'interfaceInvoke', whwswswws: baseUtils.getCookie('shshshfpb'), jdkey: '', body: s, }), ), }); this.M = []; } catch (e) {} } catch (e) {} } async reportData() { var i = arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; try { this.setjoyyaCookie(); var h = baseUtils.isDuringDate(this.Je, this.Fe); if (h) return; var s = this.B.openMonitor, f = this.B.collectStatus, l = this.B.collect_vote; if ('0' === s) return; var v; v = i ? this.I : baseUtils.collectVoteFilter(f, l, this.I, 'session'); if (!v || v.length === 0) return; var p = baseUtils.getCurrentTime(); v.forEach(function (e) { e.createdate = ''.concat(p); }); try { await baseUtils.ajax({ type: 'POST', url: baseUtils.requestUrl.bypass, data: 'content='.concat( JSON.stringify({ appname: 'stouchmodeH5', whwswswws: baseUtils.getCookie('shshshfpb'), jdkey: '', body: v, }), ), }); this.I = []; } catch (e) {} } catch (e) {} } getid(e) { return e.currentTarget.id || 'document'; } clickCb(e) { try { this.Be = 't'; if (!this.Z) return; var u = this.getid(e); var p = baseUtils.webview.getStorage('unionwsws') || { jmafinger: '', }; var J = { appid: this.P.appid || '', sceneid: this.P.sceneid || '', uid: this.P.uid || '', url: encodeURIComponent(location.href), ua: encodeURIComponent(baseUtils.getUa()), type_d: this.je, shshshfpa: baseUtils.getCookie('shshshfpa'), shshshfpb: baseUtils.getCookie('shshshfpb'), cookie_pin: baseUtils.getCookiePin(), client_version: this.ee, npt: this.ge, nps: this.ye, nan: this.we, nvs: this.xe, }; var K = this.z[u] || {}; var q = baseUtils.getCurrentTime(); var v = K.start_time || '', g = K.end_time || '', b = K.click_time || ''; this.le = e.isTrusted; var a = baseUtils.getGPUMes(); var oe = { buttonid: u, client_time: q, devtools_open: baseUtils.isDevtoolOpen(), touchtime: g - v, touch_is_trust: e.isTrusted, screenx: e.screenX, screeny: e.screenY, clientx: e.clientX, clienty: e.clientY, radiusx: K.radiusX, radiusy: K.radiusY, force: baseUtils.getDefaultVal(K.force), click_id: e.target.id || '', pagex: e.pageX, last_page_down_time: q - this.R, last_click_time: q - b, pagey: e.pageY, call_stack: baseUtils.getCallStack(), call_stack_source: baseUtils.getCallStackUnencrypted(), data: K.data || '', jdu: this.ie, session: this.$, time_correction: this.L, jdkey: baseUtils.getJdKey(), jmafinger: p.jmafinger, numOfNavigatorPlugins: baseUtils.getPluginsNum(), gpuServiceProvider: a[0], gpuBrand: a[1], numOfNavigatorLanguages: baseUtils.getLangNum() || '', numOfChromeAttribute: baseUtils.getChromeAttribute() || '', configurableEnumerable: baseUtils.getConfigurable_Enumerable(), azimuth: '', accelerometer: '', ncn: baseUtils.getNaviConnection(), bty: baseUtils.getBatteryStatus(), }; this.setIdData(u, 'click_time', q); var W = Object.assign({}, J, oe); for (var M in W) { var U = W[M]; W[M] = String(U); } this.I.push(W); baseUtils.arrayLength(3, this.ce, this.getCurrnetData(e)); } catch (e) {} } getCurrnetData(e, t) { try { var u = (this.z[t] || {}).force, c = typeof baseUtils.getDefaultVal(u) == 'number' ? u.toFixed(3) : baseUtils.getDefaultVal(u), s = baseUtils.getCurrentTime() - this.fe, f = e.clientX, l = e.clientY; if (e.touches && e.touches.length > 0) { f = e.touches[0].clientX; l = e.touches[0].clientY; } else if (e.changedTouches && e.changedTouches.length > 0) { f = e.changedTouches[0].clientX; l = e.changedTouches[0].clientY; } return ( 'd' + (this.ae.indexOf(e.type) + 1) + '-' + baseUtils.baseConverter(f, 36) + ',' + baseUtils.baseConverter(l, 36) + ',' + baseUtils.baseConverter(s, 36) + ',' + c + ',' + baseUtils.getDefaultVal(e.isTrusted) ); } catch (e) { return ''; } } moveCb(e) { this.Be = 't'; if (!this.Z) return; if (this.ke) { this.ue = []; this.se[2] = 0; this.ke = 0; } var c = this.getid(e); baseUtils.arrayLength(5, this.ue, this.getCurrnetData(e, c)); this.se[2] = this.se[2] + 1; this.se[1] = this.se[1] > this.se[2] ? this.se[1] : this.se[2]; } endCb(e) { this.Be = 't'; if (!this.Z) return; var c = this.getid(e); this.setIdData(c, 'end_time', baseUtils.getCurrentTime()); this.setIdData(c, 'is_trust', e.isTrusted); baseUtils.arrayLength(3, this.ce, this.getCurrnetData(e, c)); } startCb(e) { this.Be = 't'; if (!this.Z) return; this.ke = 1; this.se[0] = this.se[0] + 1; let c = e.touches, s = void 0 === c ? [] : c; let l = s[0] || {}; let f = this.getid(e); this.setIdData(f, 'session', this.$); l.start_time = baseUtils.getCurrentTime(); const that = this[('radiusX', 'radiusY', 'force', 'start_time')].forEach(function (e) { that.setIdData(f, e, l[e] ? l[e] : 'a'); }); baseUtils.arrayLength(3, this.ce, this.getCurrnetData(e, f)); } addListener() { this.addEvent(); } addEvent() { document.addEventListener(this.ne, this.startCb); document.addEventListener(this.re, this.endCb); document.addEventListener(this.oe, this.moveCb); document.addEventListener('click', this.clickCb); } getBlog() { try { let r = baseUtils.getAppVersion(); window.checkVersion = function (r) { try { if (r && r !== 'a') { let a = '9.5.2'.split('.'), u = r.split('.'); if ( Number(u[0]) > Number(a[0]) || (Number(u[0]) === Number(a[0]) && Number(u[1]) > Number(a[1])) || (Number(u[0]) === Number(a[0]) && Number(u[1]) === Number(a[1]) && Number(u[2]) >= Number(a[2])) ) { return !0; } } return !1; } catch (e) { return !1; } }; if (window.checkVersion(r)) { const that = this; window.callBackNameSmash = function (r) { var a = JSON.parse(r || '{}'); if (a.data) { that.Ee = a.data.blog; that.Oe = a.data.msg; if (that.Oe === void 0) { that.Oe = 'f'; } if (!that.Ee) { if (that.Ee === void 0) { that.Ee = 'f'; } that.getInterfaceData({ funcName: 'blog', real_msg: 'blog为空', }); } } else { that.Ee = 'f'; that.Oe = 'f'; that.getInterfaceData({ funcName: 'blog', real_msg: 'blog取值异常', }); } }; let a = { callBackName: 'callBackNameSmash', callBackId: 'smash', }; try { if (baseUtils.isIOS()) { a.routerURL = 'router://jdjmamodule/gethcb'; a.routerParam = {}; window.webkit && window.webkit.messageHandlers.JDAppUnite.postMessage({ method: 'callsyncroutermodulewithparams', params: JSON.stringify(a), }); } if (baseUtils.isAndroid()) { a.routerURL = 'router://com.jingdong.app.mall.jma.jsjmamanager/getblog'; window.JDAppUnite && window.JDAppUnite.callSyncRouterModuleWithParams(JSON.stringify(a)); } } catch (r) { this.Ee = 'f'; this.Oe = 'f'; this.getInterfaceData({ funcName: 'blog', real_msg: 'blog桥接失败', }); } } else { this.getInterfaceData({ funcName: 'blog', real_msg: '客户端版本不满足条件', }); } } catch (r) { this.getInterfaceData({ funcName: 'other', real_msg: 'inner.getBlog', error_msg: r && r.message, }); } } getFpv() { try { var i = baseUtils.isApp('jd'), a = baseUtils.getAppVersion(), u = !1; if (i) { u = (baseUtils.isIOS() && baseUtils.versionCompare(a, '10.1.6') > -1) || (baseUtils.isAndroid() && baseUtils.versionCompare(a, '10.2.0') > -1); } if (u) { window.getSoftFingerprintBack = function (e) { var a = JSON.parse(e || '{}').data || ''; document.cookie = 'shshshfpv='.concat(a, ';domain=.jd.com;path=/;expires=').concat(new Date(new Date().getTime() + 864e9).toGMTString()); }; var c = { callBackName: 'getSoftFingerprintBack', callBackId: new Date().getTime(), }; try { if (baseUtils.isIOS()) { c.routerURL = 'router://JDJMAModule/getwhwswswws'; c.routerParam = {}; window.webkit && window.webkit.messageHandlers.JDAppUnite.postMessage({ method: 'callSyncRouterModuleWithParams', params: JSON.stringify(c), }); } if (baseUtils.isAndroid()) { c.routerURL = 'router://com.jingdong.app.mall.jma.JSJMAManager/getSoftFingerprint'; window.JDAppUnite && window.JDAppUnite.callRouterModuleWithParams(JSON.stringify(c)); } } catch (e) { document.cookie = 'shshshfpv=;domain=.jd.com;path=/;expires='.concat(new Date(new Date().getTime() + 864e9).toGMTString()); } } } catch (e) { this.getInterfaceData({ funcName: 'other', real_msg: 'inner.getFpv', error_msg: e && e.message, }); } } async getInfo() { if (!baseUtils.isDuringDate(this.Je, this.Fe)) { try { try { let { data: t } = await baseUtils.ajax({ type: 'POST', url: baseUtils.requestUrl.getInfo, data: 'content='.concat( JSON.stringify({ appname: 'smashH5pv', whwswswws: baseUtils.getCookie('shshshfpb'), jdkey: '', body: {}, }), ), }); if (t.code) { this.getInterfaceData({ funcName: 'info', real_msg: 'info请求code异常', error_msg: JSON.stringify(t), }); } else { var c = t.whwswswws || ''; document.cookie = 'shshshfpb='.concat(c, ';domain=.jd.com;path=/;expires=').concat(new Date(new Date().getTime() + 864e9).toGMTString()); } } catch (t) { document.cookie = 'shshshfpb=;domain=.jd.com;path=/;expires='.concat(new Date(new Date().getTime() + 864e9).toGMTString()); this.getInterfaceData({ funcName: 'other', real_msg: 'inner.getInfo.catch', error_msg: t && t.message, }); } } catch (t) { this.getInterfaceData({ funcName: 'other', real_msg: 'inner.getInfo', error_msg: t && t.message, }); } } } getAppOs() { try { const that = this; window.getAppOsInformation = function (t) { try { var a = JSON.parse(t); if (a.status === '0') { var s = a.data, l = s.model || 'a', d = s.systemName || 'a', v = s.systemVersion || 'a', g = s.appVersion || 'a', w = s.appBuild || 'a', _ = s.uuid || 'a', A = s.eufv || 'a', C = s.aid || 'a', O = s.idfa || 'a'; var j; try { j = d.match(/[A-Za-z0-9]+/g).join(''); } catch (e) { j = 'a'; that.getInterfaceData({ funcName: 'other', real_msg: 'inner.getAppOs.systemName', error_msg: 'systemName='.concat(d, ';').concat(e && e.message), }); } that.Ae = [l, j, v, g, w, _, A]; baseUtils.isIOS() ? (that.Ce = O) : baseUtils.isAndroid() && (that.Ce = C); } } catch (e) { that.getInterfaceData({ funcName: 'other', real_msg: 'inner.getAppOs.getAppOsInformation', error_msg: e && e.message, }); } }; this.Te = 'u'; if (baseUtils.isAndroid()) { if (window.JDAppUnite) { this.Te = 't'; window.JDAppUnite.getPhoneBasicInfo('getAppOsInformation'); } this.je = 2; } if (baseUtils.isIOS()) { if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.JDAppUnite) { this.Te = 't'; var o = { method: 'getPhoneBasicInfo', params: 'getAppOsInformation', }; window.webkit.messageHandlers.JDAppUnite.postMessage(o); } this.je = 2; } } catch (t) { this.Ce = 'f'; this.Ae = baseUtils.getFailedArr(7); this.getInterfaceData({ funcName: 'other', real_msg: 'inner.getAppOs', error_msg: t && t.message, }); } } handlerJrInfo(e) { var i = typeof e == 'object' ? e : JSON.parse(e); if (i.errorCode) { this.qe = baseUtils.getFailedArr(7); this.getInterfaceData({ funcName: 'other', real_msg: 'getJrAppOs.errorCode', error_msg: ''.concat(i.errorCode, ',').concat(i.errorMsg), }); } else { var u = i.deviceInfo, s = u.deviceType || 'a', l = u.osPlatform || 'a', h = u.osVersion || 'a', m = u.clientVersion || 'a', y = u.resolution || 'a', _ = u.deviceId || 'a', A = u.eufv || 'a', C = u.channelInfo || 'a', E = baseUtils.md5Str(_).slice(-16); this.qe = [s, l, h, m, y, E, A]; var O = C; if (C && C.indexOf('#') > -1) { O = C.slice(0, C.indexOf('#')); } O = baseUtils.md5Str(O + E); this.Re = O.slice(-16); var k = { fbInfo: this.qe, jrStackInfo: this.Re, }; if (!this.arrayEquals(this.qe, this.He) && window.localStorage) { window.localStorage.setItem('jrInfo', JSON.stringify(k)); } this.getInterfaceData({ funcName: 'other', real_msg: 'inner.handlerJrInfo', error_msg: JSON.stringify(k) || '', }); } } getJrInfo() { if (baseUtils.isApp('jdjr')) { if (window.JrBridge) { this.Me = 't'; this.ze = 1; try { const that = this; JrBridge.getDeviceInfo(function (t) { that.handlerJrInfo(t); }); } catch (t) { this.qe = baseUtils.getFailedArr(7); this.getInterfaceData({ funcName: 'other', real_msg: 'JrBridge.getDeviceInfo', error_msg: t && t.message, }); } } else { this.getJrAppOs(); } } } getJrAppOs() { try { if (!window.jsBridgeV3) { this.Me = 'u'; return; } if (!window.defer) { window.defer = jsBridgeV3.onReady(); } if (window.defer) { if (baseUtils.isApp('jdjr')) { this.Me = 't'; } this.ze = 1; const that = this; defer.then(function (t) { var n = { type: 9, isLocation: !1, data: '', }; t.jsToGetResp(function (e) { that.handlerJrInfo(e); }, n); }); } else { this.Me = 'f'; } } catch (t) { this.Me = 'u'; this.qe = baseUtils.getFailedArr(7); this.getInterfaceData({ funcName: 'other', real_msg: 'inner.getJrAppOs', error_msg: t && t.message, }); } } getFbStorage(e) { try { if (this.arrayEquals(e, this.He) || this.arrayEquals(e, this.We)) { let a = window.localStorage && window.localStorage.getItem('jrInfo'); if (a) { let u = JSON.parse(a); this.qe = u.fbInfo || ''; this.Re = u.jrStackInfo || ''; this.getInterfaceData({ funcName: 'other', real_msg: 'inner.getFbStorage', error_msg: JSON.stringify(u.fbInfo) || '', }); } } } catch (e) {} } arrayEquals(e, t) { return ( e.length === t.length && e.every(function (e, n) { return e === t[n]; }) ); } getLocalData() { try { this.pe = '' + baseUtils.getCookieEnabled() + baseUtils.getSessionStorage() + baseUtils.getLocalStorage() + baseUtils.getIsMobileOne() + baseUtils.getIsMobileTwo() + baseUtils.getIsNodeEnv() + baseUtils.getHasNodeVM2(); this.de = baseUtils.getExistWebdriver(); this.he = baseUtils.getDetectPhantomjs(); this.ve = this.reportInterfaceData && typeof this.reportInterfaceData == 'function' ? 't' : 'f'; this.me = baseUtils.getNaviParam('platform'); this.ge = baseUtils.getNaviParam('product'); this.ye = baseUtils.getNaviParam('productSub'); this.we = baseUtils.getNaviParam('appName'); this.be = baseUtils.getNaviParam('vendor'); this.xe = baseUtils.getNaviParam('vendorSub'); this._e = baseUtils.getAppBuild(); this.Se = baseUtils.getScreen(); this.Ie = baseUtils.getExistMiniblink(); } catch (t) { this.getInterfaceData({ funcName: 'other', real_msg: 'inner.getLocalData', error_msg: t && t.message, }); } } async getLoadData() { try { this.Pe = !0; this.R = baseUtils.getCurrentTime(); this.Z = !0; await this.reportData(); await this.reportInterfaceData(); } catch (e) { this.getInterfaceData({ funcName: 'other', real_msg: 'inner.getLoadData', error_msg: e && e.message, }); } } handleCsVal(t) { var i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : ''; try { var d = ''; d += '1'; d += '0'; try { var s = typeof window != 'undefined' && typeof window.JDAppUnite != 'undefined', f = window && window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.JDAppUnite; d += s || f ? '1' : '0'; } catch (e) { d += '0'; } d += '0'; d = parseInt(d, 2); var h = d.toString(16); var p = ''.concat(t); var v = p.slice(p.length - 1); var m = (Number(d) + Number(v)) % 16; var l = i.split(''); l[14] = m.toString(16); l[15] = h; return l.join(''); } catch (e) { return i; } } getFillVal() { try { var r = 'u', i = navigator.userAgent.toLowerCase(), a = String(navigator.platform).toLowerCase().indexOf('linux') > -1, u = navigator.platform == 'Win32', c = navigator.platform == 'MacIntel'; a ? (r = 'l') : u ? (r = 'w') : c ? (r = 'i') : /iphone|ipad|ipod/.test(i) && (r = 'm'); var s = ''; s += '0'; try { s += window ? '1' : '0'; } catch (e) { s += '0'; } i && i.indexOf('jdapp') === 0 ? (s += '1') : (s += '0'); s = parseInt(s, 2); return ''.concat(r).concat(s); } catch (r) { this.getInterfaceData({ funcName: 'other', real_msg: 'inner.getFillVal', error_msg: r && r.message, }); return ''; } } setjoyyaCookie(e) { try { var w = Date.parse(new Date()).toString(); w = w.slice(0, 10); var c = document.cookie.split('; '); var b = this.getFillVal(); if (e) { var s = ''.concat(w, '.0.').concat(c.length), f = baseUtils.getCrcCode(s), l = ''.concat(s, '.').concat(f).concat(b); document.cookie = 'joyya='.concat(l, ';domain=.jd.com;path=/;expires=').concat(new Date(new Date().getTime() + 864e9).toGMTString()); } else { var y = baseUtils.getCookie('joyya'); var g = 0; y && (g = y.split('.')[0]); var v = ''.concat(g, '.').concat(w, '.').concat(c.length); var h = baseUtils.getCrcCode(v); var m = ''.concat(v, '.').concat(h).concat(b); document.cookie = 'joyya='.concat(m, ';domain=.jd.com;path=/;expires=').concat(new Date(new Date().getTime() + 864e9).toGMTString()); } } catch (e) { this.getInterfaceData({ funcName: 'other', real_msg: 'inner.setjoyyaCookie', error_msg: e && e.message, }); } } async initial() { var n = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; try { var h = n.appId, v = n.preRequest, m = n.debug, g = n.onSign, y = n.onRequestTokenRemotely, w = n.onRequestToken; if (!baseUtils.isNotEmptyString(h)) { this.getInterfaceData({ funcName: 'initial', real_msg: '参数appid不能为空', error_msg: h, }); return; } if (!g) { this.getInterfaceData({ funcName: 'initial', real_msg: '参数onsign不能为空', }); return; } if (!y) { this.getInterfaceData({ funcName: 'initial', real_msg: '参数onrequesttokenremotely不能为空', }); return; } if (h.indexOf('_') === -1) { this.getInterfaceData({ funcName: 'initial', real_msg: '参数appid格式不合法', error_msg: h, }); return; } var s = h.split('_'), f = s[0], l = s[1]; if (f) { this.Ge = !0; await this.init({ appid: f, uid: baseUtils.getCookiePin(), }); } if (l && !this.Xe) { this.Xe = !0; var p = { appId: l, debug: m, preRequest: v, onSign: g, onRequestTokenRemotely: y, onRequestToken: w, }; // TODO 这好像是一个H5ST算法 this.Ve = new N['default'](p); } } catch (e) {} } async init() { var i = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; try { !this.Pe && (await this.getLoadData()); this.Q = this.Q + 1; this.clearjoyytoken(i.appid, !0); this.$ = this.$ || baseUtils.getTouchSession(); this.P = { ids: [], }; var f = { status: 0, msg: '', }; var m = i.appid || ''; if (!m) { this.getInterfaceData({ funcName: 'init', real_msg: '参数错误', }); f = { status: 1, msg: '参数错误', }; return f; } Object.assign(this.P, i); await this.getjoyytoken(i.appid, !0); // TODO this.addListener(); this.getInterfaceData({ funcName: 'init', }); return f; } catch (e) { this.getInterfaceData({ funcName: 'init', real_msg: '初始化代码错误', error_msg: ''.concat(e.name, ',').concat(e.message), }); } } async sign() { var r = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, i = arguments.length > 1 ? arguments[1] : void 0; try { var u = {}, c = '', s = ''; if (i) { var p = r.functionId, h = r.appid, v = r.clientVersion, m = r.client, g = r.t, y = r.sign, b = r.body, _ = r.jsonp; s = h + m + v + p + g; c = b; if (typeof b === 'object') { c = JSON.stringify(b); } this.setParam(u, 'functionId', p); this.setParam(u, 'appid', h); this.setParam(u, 'clientVersion', v); this.setParam(u, 'client', m); this.setParam(u, 't', g); this.setParam(u, 'sign', y); this.setParam(u, 'jsonp', _); u.body = CryptoJS.SHA256(c).toString(); } else { c = r; } if (typeof r === 'object') { c = JSON.stringify(r); } u = r; if (this.Ge) { var S = this.B.openTraffic; this.getInterfaceData({ funcName: 'other', real_msg: 'inSmash', error_msg: S, }); if (S === '1') { r.joylog = ''; } else { var C = baseUtils.md5Str(c + s), O = { data: { random: C, }, }; var j = await this.get_risk_result(O); r.joylog = ''.concat(C, '*').concat(j.log); } } if (this.Ve) { this.getInterfaceData({ funcName: 'other', real_msg: 'inPSign', }); try { let e = await this.Ve.sign(u); this.getInterfaceData({ funcName: 'other', real_msg: 'psign.sign加签成功', error_msg: JSON.stringify(u), }); return e; } catch (e) { this.getInterfaceData({ funcName: 'other', real_msg: 'PSign.sign加签失败,返回无签名参数', error_msg: JSON.stringify(u), }); return r; } } else { this.getInterfaceData({ funcName: 'other', real_msg: '不走签名,返回无签名参数', }); return r; } } catch (e) { this.getInterfaceData({ funcName: 'other', real_msg: '人机或签名失败,返回接口原入参', error_msg: e && e.message, }); return r; } } async get_risk_result(e) { var i = e.id; var u = e.data || {}; this.T += 1; var y = baseUtils.getCurrentTime(), b = {}, N = '', E = '', O = '', k = 'a', D = 'a'; var s, f, l, p, h, v, m, g; try { var M = this.P.ids || [], q = this.P.appid || ''; this.clearjoyytoken(q); var W = '', K = baseUtils.getTokem('joyytokem', q), J = K.joyytokenVal, F = K.xcdVal; if (q && q !== 'undefined' && J) { l = J.slice(q.length); W = J; } else { l = baseUtils.getCookiePin(); this.B.encrypt_id = this.B.default_encrypt_id; this.B.cf_v = this.B.default_cf_v; } var V = this.decryptJoyToken(W), G = V.openPre, X = V.q, Y = V.etid, Z = V.cf_v, ne = V.encrypt_id || '1,3,*,1'; this.exeCode(F); ne = ne.replace(/\s*/g, ''); var re = this.z[i], oe = ''; !this.Q && (oe = 6); i === void 0 && (oe = 2); M.indexOf(i) === -1 && (oe = 3); this.ze === 0 && ((this.ze = 1), this.getJrInfo()); y = baseUtils.getCurrentTime() + X; g = re && re.is_trust === !1 ? 0 : 1; g = G === '1' ? g : 1; f = baseUtils.getRandomWord(10); var ie, ae = Y.split(','), le = ne.split(','), ge = [le[2], le[3]], ye = baseUtils.objToString2(baseUtils.RecursiveSorting(u)), we = '', xe = !1, je = baseUtils.getInRange(ae, le[0], le[1]); ie = le[2]; for (var ke = 0; ke < ie.length; ke++) { var He = ie[ke] === '*' ? je[baseUtils.getRandomInt(0, je.length - 1)] : ie[ke]; we += He; var Pe = baseUtils.encrypt(He, f, y); if (Pe == null || (typeof Pe == 'number' && isNaN(Pe))) { xe = true; break; } O += Pe; } E = O && !xe ? 'C' : 'L'; ge[0] = we; N = ge.toString(); s = `${ye}&token=${l}&time=${y}&nonce_str=${f}&key=${O || this.De}&is_trust=${g}`; var We = le[3]; p = We == '1' ? CryptoJS.SHA1(s).toString().toUpperCase() : CryptoJS.SHA256(s).toString().toUpperCase(); this.setIdData(i, 'data', ye); h = baseUtils.getCrcCode(p); var Ke = baseUtils.getCallStack(), Je = baseUtils.md5Str(this.Ce), Fe = Ke.slice(16) + Je.slice(16); this.Me == 't' && (this.getFbStorage(this.qe), !this.Re && (this.Re = baseUtils.md5Str('').slice(-16)), (Fe = Fe.slice(0, -16) + this.Re)); Fe = this['handleCsVal'](y, Fe); b = { tm: JSON.parse(JSON.stringify(this.ue)), tnm: JSON.parse(JSON.stringify(this.ce)), grn: this.T, ss: this.$ || 'a', wed: this.pe, wea: '' + this.de + this.he + this.ve + this.Be + this.Te + this.Le + this.Ie + 'a' + this.Me, pdn: baseUtils['getPageDomNum'](), jj: oe, cs: Fe || 'a', np: this.me, t: y, jk: baseUtils.getJdKey(), fpb: baseUtils.getCookie('shshshfpb'), nv: this.be, nav: this._e, scr: this.Se, ro: this.Ae, ioa: baseUtils['getIosAppDetail'](), aj: baseUtils['getAutoJs'](), ci: this.ee, cf_v: Z, bd: ye, mj: this.se, blog: this.Ee, msg: this.Oe, xcr: this.Ue, }; 't' === this.Me && (b.fb = this.qe); try { var Ye = baseUtils['xorEncrypt'](JSON.stringify(b), O || this.De); k = Ye.xorEncrypted.length; D = Ye['totalTime']; v = baseUtils['utoa'](Ye.xorEncrypted); m = baseUtils.getCrcCode(v); } catch (e) { k = 'c'; D = 'c'; } this.getInterfaceData({ funcName: 'get_risk_result', key: O, is_trust: !!g, dataString: ye, buttonid: i, hl: k, ht: D, }); this.ue = []; this.ce = []; this.$ = baseUtils.getTouchSession(); this.fe = baseUtils.getCurrentTime(); this.se = [0, 0, 0]; await this.getjoyytoken(q); var tt = '' .concat(y, '|abcdefg|') .concat(g) .concat(f) .concat(l, '|abcdefg|') .concat(N, '|abcdefg|') .concat(p, '|abcdefg|') .concat(h, '|abcdefg|') .concat(E, '|abcdefg|') .concat(v, '|abcdefg|') .concat(m); tt = tt['replace'](/\|abcdefg\|/g, '~'); this.U && (await this['reportData'](!0), this.reportInterfaceData(), (this.U = !1)); return { result: 1, status: 0, log: tt, }; } catch (e) { var it = ''.concat(e.name, ',').concat(e.message); b.jj = 5; b.ci = this.ee; !O && (E = 'L'); N == '' && ((E = 'L'), (O = '')); try { var st = baseUtils['xorEncrypt'](JSON.stringify(b), O || this.De), ft = st.xorEncrypted, lt = st.totalTime; k = ft.length; D = lt; v = baseUtils.utoa(ft); m = baseUtils.getCrcCode(v); } catch (e) { (k = 'c'), (D = 'c'); } var dt = '' .concat(y, '|abcdefg|') .concat(g) .concat(f) .concat(l, '|abcdefg|') .concat(N, '|abcdefg|') .concat(p, '|abcdefg|') .concat(h, '|abcdefg|') .concat(E, '|abcdefg|') .concat(v, '|abcdefg|') .concat(m); dt = dt['replace'](/\|abcdefg\|/g, '~'); var at = {}; (at.funcName = 'get_risk_result'), (at.real_msg = 'get_risk_result代码错误'), (at.error_msg = it), (at.hl = k), (at.ht = D), this.getInterfaceData(at); this.U && (await this['reportData'](!0), this.reportInterfaceData(), (this.U = !1)); var pt = {}; return (pt['result'] = 1), (pt.log = dt), pt; } } getRandom(e) { try { if (typeof e !== 'number' || isNaN(e) || !Number.isInteger(e) || e < 1) { this.getInterfaceData({ funcName: 'other', real_msg: 'getRandom参数错误', error_msg: 'type:'.concat(JSON.stringify(e), ', value: ').concat(e), }); return ''; } return baseUtils.getRandomWord(Math.min(15, e), !0); } catch (e) { this.getInterfaceData({ funcName: 'other', real_msg: 'getRandom异常', error_msg: e && e.message, }); return ''; } } getHash(e) { try { if (typeof e === 'string') { return baseUtils.md5Str(e).slice(8, -8); } else { this.getInterfaceData({ funcName: 'other', real_msg: 'getHash参数错误', error_msg: 'type:'.concat(JSON.stringify(e), ', value: ').concat(e), }); return ''; } } catch (e) { this.getInterfaceData({ funcName: 'other', real_msg: 'getHash异常', error_msg: e && e.message, }); return ''; } } } module.exports.SmashUtils = SmashUtils;