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