UNPKG

cg-utilities

Version:

This is a simple utility package

472 lines (471 loc) 14.1 kB
import u from "currency.js"; function E(e, r) { return Array.isArray(e) ? e.reduce((n, o) => u(n, { precision: 4 }).add(o).value, 0) : r === void 0 ? e : u(e, { precision: 4 }).add(r).value; } function S(e, r) { if (Array.isArray(e)) { let n = 0; return e.forEach((o) => { n ? n = u(n, { precision: 4 }).subtract(o).value : n = o; }), n; } return r === void 0 ? e : u(e, { precision: 4 }).subtract(r).value; } function D(e, r) { if (Array.isArray(e)) { let n = 0; return e.forEach((o) => { n ? n = u(n, { precision: 4 }).multiply(o).value : n = o; }), n; } return r === void 0 ? e : u(e, { precision: 4 }).multiply(r).value; } function T(e, r) { if (Array.isArray(e)) { let n = 0; return e.forEach((o) => { n ? n = u(n, { precision: 4 }).divide(o).value : n = o; }), n; } return r === void 0 ? e : u(e, { precision: 4 }).divide(r).value; } const s = { DELTA: 2654435769, base64EncodeChars: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""), base64DecodeChars: [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1 ], btoa(e) { let r, n, o, t, F, c, i; for (n = o = 0, t = e.length, F = t % 3, t = t - F, c = t / 3 << 2, F > 0 && (c += 4), r = new Array(c); n < t; ) i = e.charCodeAt(n++) << 16 | e.charCodeAt(n++) << 8 | e.charCodeAt(n++), r[o++] = s.base64EncodeChars[i >> 18] + s.base64EncodeChars[i >> 12 & 63] + s.base64EncodeChars[i >> 6 & 63] + s.base64EncodeChars[i & 63]; return F === 1 ? (i = e.charCodeAt(n++), r[o++] = `${s.base64EncodeChars[i >> 2] + s.base64EncodeChars[(i & 3) << 4]}==`) : F === 2 && (i = e.charCodeAt(n++) << 8 | e.charCodeAt(n++), r[o++] = `${s.base64EncodeChars[i >> 10] + s.base64EncodeChars[i >> 4 & 63] + s.base64EncodeChars[(i & 15) << 2]}=`), r.join(""); }, atob(e) { let r, n, o, t, F, c, i, a, l, h; if (i = e.length, i % 4 !== 0 || /[^ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\+\/\=]/.test(e)) return ""; for (e.charAt(i - 2) === "=" ? a = 1 : e.charAt(i - 1) === "=" ? a = 2 : a = 0, l = i, a > 0 && (l -= 4), l = (l >> 2) * 3 + a, h = new Array(l), F = c = 0; F < i && (r = s.base64DecodeChars[e.charCodeAt(F++)], !(r === -1 || (n = s.base64DecodeChars[e.charCodeAt(F++)], n === -1) || (h[c++] = String.fromCharCode(r << 2 | (n & 48) >> 4), o = s.base64DecodeChars[e.charCodeAt(F++)], o === -1) || (h[c++] = String.fromCharCode((n & 15) << 4 | (o & 60) >> 2), t = s.base64DecodeChars[e.charCodeAt(F++)], t === -1))); ) h[c++] = String.fromCharCode((o & 3) << 6 | t); return h.join(""); }, toBinaryString(e, r) { const n = e.length; let o = n << 2; if (r) { const F = e[n - 1]; if (o -= 4, F < o - 3 || F > o) return null; o = F; } for (let F = 0; F < n; F++) e[F] = String.fromCharCode(e[F] & 255, e[F] >>> 8 & 255, e[F] >>> 16 & 255, e[F] >>> 24 & 255); const t = e.join(""); return r ? t.substring(0, o) : t; }, toUint32Array(e, r) { const n = e.length; let o = n >> 2; n & 3 && ++o; let t; r ? (t = new Array(o + 1), t[o] = n) : t = new Array(o); for (let F = 0; F < n; ++F) t[F >> 2] |= e.charCodeAt(F) << ((F & 3) << 3); return t; }, int32(e) { return e & 4294967295; }, mx(e, r, n, o, t, F) { return (n >>> 5 ^ r << 2) + (r >>> 3 ^ n << 4) ^ (e ^ r) + (F[o & 3 ^ t] ^ n); }, fixk(e) { return e.length < 4 && (e.length = 4), e; }, encryptUint32Array(e, r) { const n = e.length, o = n - 1; let t, F, c, i, a, l; for (F = e[o], c = 0, l = Math.floor(6 + 52 / n) | 0; l > 0; --l) { for (c = s.int32(c + s.DELTA), i = c >>> 2 & 3, a = 0; a < o; ++a) t = e[a + 1], F = e[a] = s.int32(e[a] + s.mx(c, t, F, a, i, r)); t = e[0], F = e[o] = s.int32(e[o] + s.mx(c, t, F, o, i, r)); } return e; }, decryptUint32Array(e, r) { const n = e.length, o = n - 1; let t, F, c, i, a, l; for (t = e[0], l = Math.floor(6 + 52 / n), c = s.int32(l * s.DELTA); c !== 0; c = s.int32(c - s.DELTA)) { for (i = c >>> 2 & 3, a = o; a > 0; --a) F = e[a - 1], t = e[a] = s.int32(e[a] - s.mx(c, t, F, a, i, r)); F = e[o], t = e[0] = s.int32(e[0] - s.mx(c, t, F, 0, i, r)); } return e; }, utf8Encode(e) { if (/^[\x00-\x7F]*$/.test(e)) return e; const r = [], n = e.length; for (let o = 0, t = 0; o < n; ++o, ++t) { const F = e.charCodeAt(o); if (F < 128) r[t] = e.charAt(o); else if (F < 2048) r[t] = String.fromCharCode(192 | F >> 6, 128 | F & 63); else if (F < 55296 || F > 57343) r[t] = String.fromCharCode(224 | F >> 12, 128 | F >> 6 & 63, 128 | F & 63); else { if (o + 1 < n) { const c = e.charCodeAt(o + 1); if (F < 56320 && c >= 56320 && c <= 57343) { const i = ((F & 1023) << 10 | c & 1023) + 65536; r[t] = String.fromCharCode(240 | i >> 18 & 63, 128 | i >> 12 & 63, 128 | i >> 6 & 63, 128 | i & 63), ++o; continue; } } throw new Error("Malformed string"); } } return r.join(""); }, utf8DecodeShortString(e, r) { const n = new Array(r); let o = 0, t = 0; for (let F = e.length; o < r && t < F; o++) { const c = e.charCodeAt(t++); switch (c >> 4) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: n[o] = c; break; case 12: case 13: if (t < F) n[o] = (c & 31) << 6 | e.charCodeAt(t++) & 63; else throw new Error("Unfinished UTF-8 octet sequence"); break; case 14: if (t + 1 < F) n[o] = (c & 15) << 12 | (e.charCodeAt(t++) & 63) << 6 | e.charCodeAt(t++) & 63; else throw new Error("Unfinished UTF-8 octet sequence"); break; case 15: if (t + 2 < F) { const i = ((c & 7) << 18 | (e.charCodeAt(t++) & 63) << 12 | (e.charCodeAt(t++) & 63) << 6 | e.charCodeAt(t++) & 63) - 65536; if (i >= 0 && i <= 1048575) n[o++] = i >> 10 & 1023 | 55296, n[o] = i & 1023 | 56320; else throw new Error(`Character outside valid Unicode range: 0x${i.toString(16)}`); } else throw new Error("Unfinished UTF-8 octet sequence"); break; default: throw new Error(`Bad UTF-8 encoding 0x${c.toString(16)}`); } } return o < r && (n.length = o), String.fromCharCode.apply(String, n); }, utf8DecodeLongString(e, r) { const n = [], o = new Array(32768); let t = 0, F = 0; for (let c = e.length; t < r && F < c; t++) { const i = e.charCodeAt(F++); switch (i >> 4) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: o[t] = i; break; case 12: case 13: if (F < c) o[t] = (i & 31) << 6 | e.charCodeAt(F++) & 63; else throw new Error("Unfinished UTF-8 octet sequence"); break; case 14: if (F + 1 < c) o[t] = (i & 15) << 12 | (e.charCodeAt(F++) & 63) << 6 | e.charCodeAt(F++) & 63; else throw new Error("Unfinished UTF-8 octet sequence"); break; case 15: if (F + 2 < c) { const a = ((i & 7) << 18 | (e.charCodeAt(F++) & 63) << 12 | (e.charCodeAt(F++) & 63) << 6 | e.charCodeAt(F++) & 63) - 65536; if (a >= 0 && a <= 1048575) o[t++] = a >> 10 & 1023 | 55296, o[t] = a & 1023 | 56320; else throw new Error(`Character outside valid Unicode range: 0x${a.toString(16)}`); } else throw new Error("Unfinished UTF-8 octet sequence"); break; default: throw new Error(`Bad UTF-8 encoding 0x${i.toString(16)}`); } if (t >= 32767 - 1) { const a = t + 1; o.length = a, n[n.length] = String.fromCharCode.apply(String, o), r -= a, t = -1; } } return t > 0 && (o.length = t, n[n.length] = String.fromCharCode.apply(String, o)), n.join(""); }, utf8Decode(e, r) { return (r == null || r < 0) && (r = e.length), r === 0 ? "" : /^[\x00-\x7F]*$/.test(e) || !/^[\x00-\xFF]*$/.test(e) ? r === e.length ? e : e.substr(0, r) : r < 32767 ? s.utf8DecodeShortString(e, r) : s.utf8DecodeLongString(e, r); }, encrypt(e, r) { return e == null || e.length === 0 ? e : (e = s.utf8Encode(e), r = s.utf8Encode(r), s.toBinaryString(s.encryptUint32Array(s.toUint32Array(e, !0), s.fixk(s.toUint32Array(r, !1))), !1)); }, decrypt(e, r) { return e == null || e.length === 0 ? e : (r = s.utf8Encode(r), s.utf8Decode(s.toBinaryString(s.decryptUint32Array(s.toUint32Array(e, !1), s.fixk(s.toUint32Array(r, !1))), !0))); } }; function C(e, r) { return s.btoa(s.encrypt(e, r)); } function A(e, r) { return e == null || e.length === 0 ? e : s.decrypt(s.atob(e), r); } function x(e = {}, r) { const n = []; for (const F in e) { const c = e[F]; c != null && n.push(`${F}=${encodeURIComponent(c)}`); } const o = r.value; r.showConsole && console.log("加密前", n.join("&")); const t = C(n.join("&"), o); return r.showConsole && console.log("加密后", t), t; } function U(e, r) { const n = A(e, r.value); return JSON.parse(n); } function d(e, r) { let n, o, t, F, c, i, a, l; for (n = e.length & 3, o = e.length - n, t = r, c = 3432918353, i = 461845907, l = 0; l < o; ) a = e.charCodeAt(l) & 255 | (e.charCodeAt(++l) & 255) << 8 | (e.charCodeAt(++l) & 255) << 16 | (e.charCodeAt(++l) & 255) << 24, ++l, a = (a & 65535) * c + (((a >>> 16) * c & 65535) << 16) & 4294967295, a = a << 15 | a >>> 17, a = (a & 65535) * i + (((a >>> 16) * i & 65535) << 16) & 4294967295, t ^= a, t = t << 13 | t >>> 19, F = (t & 65535) * 5 + (((t >>> 16) * 5 & 65535) << 16) & 4294967295, t = (F & 65535) + 27492 + (((F >>> 16) + 58964 & 65535) << 16); switch (a = 0, n) { case 3: a ^= (e.charCodeAt(l + 2) & 255) << 16; case 2: a ^= (e.charCodeAt(l + 1) & 255) << 8; case 1: a ^= e.charCodeAt(l) & 255, a = (a & 65535) * c + (((a >>> 16) * c & 65535) << 16) & 4294967295, a = a << 15 | a >>> 17, a = (a & 65535) * i + (((a >>> 16) * i & 65535) << 16) & 4294967295, t ^= a; } return t ^= e.length, t ^= t >>> 16, t = (t & 65535) * 2246822507 + (((t >>> 16) * 2246822507 & 65535) << 16) & 4294967295, t ^= t >>> 13, t = (t & 65535) * 3266489909 + (((t >>> 16) * 3266489909 & 65535) << 16) & 4294967295, t ^= t >>> 16, t >>> 0; } function m(e, r, n, o, t) { const F = o; let c = "", i = ""; return e.toLocaleString() === "get" ? (c = n.lastIndexOf(".json") > -1 ? n : f(r) ? `/${n}&${f(r)}` : `/${n}`, c.includes("//") && (c = c.replace("//", "/")), i = t.value + F + c) : e.toLocaleString() === "post" && (c = `/${n}`, c.includes("//") && (c = c.replace("//", "/")), i = x(r, t) + t.value + F + c), i += "1.0.0", t.showConsole && (console.groupCollapsed(`🔑🔑签名参数--${n}🔑🔑`), console.log("nonce加密前的字符串", i), console.log(`nonce------- ${t.murmurhash_key || 36}`, d(i, t.murmurhash_key || 36)), console.groupEnd()), d(i, t.murmurhash_key || 36); } function f(e = {}) { const r = []; for (const n in e) { const o = e[n]; o != null && r.push(`${n}=${o}`); } return r.join("&"); } function p(e) { const r = e || location.origin + "/date"; return new Promise((n) => { const o = new XMLHttpRequest(); o.open("head", r, !0), o.send(null), o.timeout = 15e3, o.onreadystatechange = () => { if (o.readyState === 4) { const t = o.getResponseHeader("Date"), F = new Date(t), c = new Date().getTime(), i = F.getTime() - c, a = new Date(new Date().getTime() + i); localStorage.setItem("__serverTime", a.toUTCString()), n(a.toUTCString()); } }; }); } function $(e) { return new Promise((r) => { const n = localStorage.getItem("__serverTime"); n ? r(n) : p(e).then((o) => { r(o); }); }); } function y(e) { if (e === void 0) return {}; for (const r in e) (e[r] === "" || e[r] === void 0 || e[r] === null) && delete e[r]; return e; } async function B(e, r) { const n = new Date().getTime(); w(e); const o = r["X-Ca-Timestamp"], t = m(e.method, y(e.data || e.params), e.url, o, r); return e.headers["request-startTime"] = n, e.headers.d = r.d, e.headers.v = "1.0.0", e.headers.u = performance.now(), e.headers.lang = "zh-CN", e.headers["X-Ca-Timestamp"] = o, e.headers["X-Ca-Nonce"] = t, (e.method === "post" || e.method === "put") && (e.data = x(e.data, r)), {}; } function w(e) { return e.url.indexOf("?") === -1 ? e.url += "?r=" + new Date().getTime() : e.url += "&r=" + new Date().getTime(), e; } export { E as add, U as decryptQuery, T as divide, $ as getServerTime, D as multiply, p as setServerTime, B as setXxetaConfig, S as subtract };