- 移除了提前初始化的代理实例 - 将代理配置移到请求参数中 - 添加了代理URL有效性检查 - 优化了请求参数结构 - 保持了原有的超时和头部配置 chore(Dockerfile): 更新构建阶段别名语法 - 将 'as builder' 改为 'AS builder' 以符合 Dockerfile 规范 - 保持基础镜像和工作目录不变 - 维持原有的依赖复制逻辑
757 lines
52 KiB
JavaScript
757 lines
52 KiB
JavaScript
import fetch from 'node-fetch';
|
||
import { HttpsProxyAgent } from 'https-proxy-agent';
|
||
|
||
/**
|
||
* x-api-eid-token 算法(type:11)
|
||
*
|
||
* @param {*} str ua参数
|
||
* @returns
|
||
*/
|
||
export async function GetXToken(str, proxy) {
|
||
var HASH = function () {
|
||
function l(b, f) {
|
||
b = [b[0] >>> 16, b[0] & 65535, b[1] >>> 16, b[1] & 65535];
|
||
f = [f[0] >>> 16, f[0] & 65535, f[1] >>> 16, f[1] & 65535];
|
||
var c = [0, 0, 0, 0];
|
||
c[3] += b[3] + f[3];
|
||
c[2] += c[3] >>> 16;
|
||
c[3] &= 65535;
|
||
c[2] += b[2] + f[2];
|
||
c[1] += c[2] >>> 16;
|
||
c[2] &= 65535;
|
||
c[1] += b[1] + f[1];
|
||
c[0] += c[1] >>> 16;
|
||
c[1] &= 65535;
|
||
c[0] += b[0] + f[0];
|
||
c[0] &= 65535;
|
||
return [c[0] << 16 | c[1], c[2] << 16 | c[3]]
|
||
}
|
||
|
||
function k(b, f) {
|
||
b = [b[0] >>> 16, b[0] & 65535, b[1] >>> 16, b[1] & 65535];
|
||
f = [f[0] >>> 16, f[0] & 65535, f[1] >>> 16, f[1] & 65535];
|
||
var c = [0, 0, 0, 0];
|
||
c[3] += b[3] * f[3];
|
||
c[2] += c[3] >>> 16;
|
||
c[3] &= 65535;
|
||
c[2] += b[2] * f[3];
|
||
c[1] += c[2] >>> 16;
|
||
c[2] &= 65535;
|
||
c[2] += b[3] * f[2];
|
||
c[1] += c[2] >>> 16;
|
||
c[2] &= 65535;
|
||
c[1] += b[1] * f[3];
|
||
c[0] += c[1] >>> 16;
|
||
c[1] &= 65535;
|
||
c[1] += b[2] * f[2];
|
||
c[0] += c[1] >>> 16;
|
||
c[1] &= 65535;
|
||
c[1] += b[3] * f[1];
|
||
c[0] += c[1] >>> 16;
|
||
c[1] &= 65535;
|
||
c[0] += b[0] * f[3] + b[1] * f[2] + b[2] * f[1] + b[3] * f[0];
|
||
c[0] &= 65535;
|
||
return [c[0] << 16 | c[1], c[2] << 16 | c[3]]
|
||
}
|
||
|
||
function e(b, f) {
|
||
f %= 64;
|
||
if (32 === f)
|
||
return [b[1], b[0]];
|
||
if (32 > f)
|
||
return [b[0] << f | b[1] >>> 32 - f, b[1] << f | b[0] >>> 32 - f];
|
||
f -= 32;
|
||
return [b[1] << f | b[0] >>> 32 - f, b[0] << f | b[1] >>> 32 - f]
|
||
}
|
||
|
||
function h(b, f) {
|
||
f %= 64;
|
||
return 0 === f ? b : 32 > f ? [b[0] << f | b[1] >>> 32 - f, b[1] << f] : [b[1] << f - 32, 0]
|
||
}
|
||
|
||
function d(b, f) {
|
||
return [b[0] ^ f[0], b[1] ^ f[1]]
|
||
}
|
||
|
||
function a(b) {
|
||
b = d(b, [0, b[0] >>> 1]);
|
||
b = k(b, [4283543511, 3981806797]);
|
||
b = d(b, [0, b[0] >>> 1]);
|
||
b = k(b, [3301882366, 444984403]);
|
||
return b = d(b, [0, b[0] >>> 1])
|
||
}
|
||
|
||
return {
|
||
hash128: function (b, f) {
|
||
b = b || "";
|
||
var c = f || 0;
|
||
f = b.length % 16;
|
||
var m = b.length - f
|
||
, n = [0, c];
|
||
c = [0, c];
|
||
for (var q, p, t = [2277735313, 289559509], u = [1291169091, 658871167], r = 0; r < m; r += 16)
|
||
q = [b.charCodeAt(r + 4) & 255 | (b.charCodeAt(r + 5) & 255) << 8 | (b.charCodeAt(r + 6) & 255) << 16 | (b.charCodeAt(r + 7) & 255) << 24, b.charCodeAt(r) & 255 | (b.charCodeAt(r + 1) & 255) << 8 | (b.charCodeAt(r + 2) & 255) << 16 | (b.charCodeAt(r + 3) & 255) << 24],
|
||
p = [b.charCodeAt(r + 12) & 255 | (b.charCodeAt(r + 13) & 255) << 8 | (b.charCodeAt(r + 14) & 255) << 16 | (b.charCodeAt(r + 15) & 255) << 24, b.charCodeAt(r + 8) & 255 | (b.charCodeAt(r + 9) & 255) << 8 | (b.charCodeAt(r + 10) & 255) << 16 | (b.charCodeAt(r + 11) & 255) << 24],
|
||
q = k(q, t),
|
||
q = e(q, 31),
|
||
q = k(q, u),
|
||
n = d(n, q),
|
||
n = e(n, 27),
|
||
n = l(n, c),
|
||
n = l(k(n, [0, 5]), [0, 1390208809]),
|
||
p = k(p, u),
|
||
p = e(p, 33),
|
||
p = k(p, t),
|
||
c = d(c, p),
|
||
c = e(c, 31),
|
||
c = l(c, n),
|
||
c = l(k(c, [0, 5]), [0, 944331445]);
|
||
q = [0, 0];
|
||
p = [0, 0];
|
||
switch (f) {
|
||
case 15:
|
||
p = d(p, h([0, b.charCodeAt(r + 14)], 48));
|
||
case 14:
|
||
p = d(p, h([0, b.charCodeAt(r + 13)], 40));
|
||
case 13:
|
||
p = d(p, h([0, b.charCodeAt(r + 12)], 32));
|
||
case 12:
|
||
p = d(p, h([0, b.charCodeAt(r + 11)], 24));
|
||
case 11:
|
||
p = d(p, h([0, b.charCodeAt(r + 10)], 16));
|
||
case 10:
|
||
p = d(p, h([0, b.charCodeAt(r + 9)], 8));
|
||
case 9:
|
||
p = d(p, [0, b.charCodeAt(r + 8)]),
|
||
p = k(p, u),
|
||
p = e(p, 33),
|
||
p = k(p, t),
|
||
c = d(c, p);
|
||
case 8:
|
||
q = d(q, h([0, b.charCodeAt(r + 7)], 56));
|
||
case 7:
|
||
q = d(q, h([0, b.charCodeAt(r + 6)], 48));
|
||
case 6:
|
||
q = d(q, h([0, b.charCodeAt(r + 5)], 40));
|
||
case 5:
|
||
q = d(q, h([0, b.charCodeAt(r + 4)], 32));
|
||
case 4:
|
||
q = d(q, h([0, b.charCodeAt(r + 3)], 24));
|
||
case 3:
|
||
q = d(q, h([0, b.charCodeAt(r + 2)], 16));
|
||
case 2:
|
||
q = d(q, h([0, b.charCodeAt(r + 1)], 8));
|
||
case 1:
|
||
q = d(q, [0, b.charCodeAt(r)]),
|
||
q = k(q, t),
|
||
q = e(q, 31),
|
||
q = k(q, u),
|
||
n = d(n, q)
|
||
}
|
||
n = d(n, [0, b.length]);
|
||
c = d(c, [0, b.length]);
|
||
n = l(n, c);
|
||
c = l(c, n);
|
||
n = a(n);
|
||
c = a(c);
|
||
n = l(n, c);
|
||
c = l(c, n);
|
||
return ("00000000" + (n[0] >>> 0).toString(16)).slice(-8) + ("00000000" + (n[1] >>> 0).toString(16)).slice(-8) + ("00000000" + (c[0] >>> 0).toString(16)).slice(-8) + ("00000000" + (c[1] >>> 0).toString(16)).slice(-8)
|
||
}
|
||
}
|
||
}();
|
||
|
||
function md5(string) {
|
||
// 辅助函数
|
||
function rotateLeft(lValue, iShiftBits) {
|
||
return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));
|
||
}
|
||
|
||
function addUnsigned(lX, lY) {
|
||
var lX4, lY4, lX8, lY8, lResult;
|
||
lX8 = (lX & 0x80000000);
|
||
lY8 = (lY & 0x80000000);
|
||
lX4 = (lX & 0x40000000);
|
||
lY4 = (lY & 0x40000000);
|
||
lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);
|
||
if (lX4 & lY4) {
|
||
return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
|
||
}
|
||
if (lX4 | lY4) {
|
||
if (lResult & 0x40000000) {
|
||
return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
|
||
} else {
|
||
return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
|
||
}
|
||
} else {
|
||
return (lResult ^ lX8 ^ lY8);
|
||
}
|
||
}
|
||
|
||
function F(x, y, z) {
|
||
return (x & y) | ((~x) & z);
|
||
}
|
||
|
||
function G(x, y, z) {
|
||
return (x & z) | (y & (~z));
|
||
}
|
||
|
||
function H(x, y, z) {
|
||
return (x ^ y ^ z);
|
||
}
|
||
|
||
function I(x, y, z) {
|
||
return (y ^ (x | (~z)));
|
||
}
|
||
|
||
function FF(a, b, c, d, x, s, ac) {
|
||
a = addUnsigned(a, addUnsigned(addUnsigned(F(b, c, d), x), ac));
|
||
return addUnsigned(rotateLeft(a, s), b);
|
||
}
|
||
|
||
function GG(a, b, c, d, x, s, ac) {
|
||
a = addUnsigned(a, addUnsigned(addUnsigned(G(b, c, d), x), ac));
|
||
return addUnsigned(rotateLeft(a, s), b);
|
||
}
|
||
|
||
function HH(a, b, c, d, x, s, ac) {
|
||
a = addUnsigned(a, addUnsigned(addUnsigned(H(b, c, d), x), ac));
|
||
return addUnsigned(rotateLeft(a, s), b);
|
||
}
|
||
|
||
function II(a, b, c, d, x, s, ac) {
|
||
a = addUnsigned(a, addUnsigned(addUnsigned(I(b, c, d), x), ac));
|
||
return addUnsigned(rotateLeft(a, s), b);
|
||
}
|
||
|
||
function convertToWordArray(string) {
|
||
var lWordCount;
|
||
var lMessageLength = string.length;
|
||
var lNumberOfWords_temp1 = lMessageLength + 8;
|
||
var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64;
|
||
var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16;
|
||
var lWordArray = Array(lNumberOfWords - 1);
|
||
var lBytePosition = 0;
|
||
var lByteCount = 0;
|
||
while (lByteCount < lMessageLength) {
|
||
lWordCount = (lByteCount - (lByteCount % 4)) / 4;
|
||
lBytePosition = (lByteCount % 4) * 8;
|
||
lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition));
|
||
lByteCount++;
|
||
}
|
||
lWordCount = (lByteCount - (lByteCount % 4)) / 4;
|
||
lBytePosition = (lByteCount % 4) * 8;
|
||
lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);
|
||
lWordArray[lNumberOfWords - 2] = lMessageLength << 3;
|
||
lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;
|
||
return lWordArray;
|
||
}
|
||
|
||
function wordToHex(lValue) {
|
||
var WordToHexValue = "", WordToHexValue_temp = "", lByte, lCount;
|
||
for (lCount = 0; lCount <= 3; lCount++) {
|
||
lByte = (lValue >>> (lCount * 8)) & 255;
|
||
WordToHexValue_temp = "0" + lByte.toString(16);
|
||
WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2);
|
||
}
|
||
return WordToHexValue;
|
||
}
|
||
|
||
function utf8Encode(string) {
|
||
string = string.replace(/\r\n/g, "\n");
|
||
var utftext = "";
|
||
|
||
for (var n = 0; n < string.length; n++) {
|
||
var c = string.charCodeAt(n);
|
||
|
||
if (c < 128) {
|
||
utftext += String.fromCharCode(c);
|
||
} else if ((c > 127) && (c < 2048)) {
|
||
utftext += String.fromCharCode((c >> 6) | 192);
|
||
utftext += String.fromCharCode((c & 63) | 128);
|
||
} else {
|
||
utftext += String.fromCharCode((c >> 12) | 224);
|
||
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
|
||
utftext += String.fromCharCode((c & 63) | 128);
|
||
}
|
||
}
|
||
|
||
return utftext;
|
||
}
|
||
|
||
// 初始化变量
|
||
var x = Array();
|
||
var k, AA, BB, CC, DD, a, b, c, d;
|
||
var S11 = 7, S12 = 12, S13 = 17, S14 = 22;
|
||
var S21 = 5, S22 = 9, S23 = 14, S24 = 20;
|
||
var S31 = 4, S32 = 11, S33 = 16, S34 = 23;
|
||
var S41 = 6, S42 = 10, S43 = 15, S44 = 21;
|
||
|
||
string = utf8Encode(string);
|
||
x = convertToWordArray(string);
|
||
|
||
a = 0x67452301;
|
||
b = 0xEFCDAB89;
|
||
c = 0x98BADCFE;
|
||
d = 0x10325476;
|
||
|
||
for (k = 0; k < x.length; k += 16) {
|
||
AA = a;
|
||
BB = b;
|
||
CC = c;
|
||
DD = d;
|
||
a = FF(a, b, c, d, x[k + 0], S11, 0xD76AA478);
|
||
d = FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756);
|
||
c = FF(c, d, a, b, x[k + 2], S13, 0x242070DB);
|
||
b = FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE);
|
||
a = FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF);
|
||
d = FF(d, a, b, c, x[k + 5], S12, 0x4787C62A);
|
||
c = FF(c, d, a, b, x[k + 6], S13, 0xA8304613);
|
||
b = FF(b, c, d, a, x[k + 7], S14, 0xFD469501);
|
||
a = FF(a, b, c, d, x[k + 8], S11, 0x698098D8);
|
||
d = FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF);
|
||
c = FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1);
|
||
b = FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE);
|
||
a = FF(a, b, c, d, x[k + 12], S11, 0x6B901122);
|
||
d = FF(d, a, b, c, x[k + 13], S12, 0xFD987193);
|
||
c = FF(c, d, a, b, x[k + 14], S13, 0xA679438E);
|
||
b = FF(b, c, d, a, x[k + 15], S14, 0x49B40821);
|
||
a = GG(a, b, c, d, x[k + 1], S21, 0xF61E2562);
|
||
d = GG(d, a, b, c, x[k + 6], S22, 0xC040B340);
|
||
c = GG(c, d, a, b, x[k + 11], S23, 0x265E5A51);
|
||
b = GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA);
|
||
a = GG(a, b, c, d, x[k + 5], S21, 0xD62F105D);
|
||
d = GG(d, a, b, c, x[k + 10], S22, 0x2441453);
|
||
c = GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681);
|
||
b = GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8);
|
||
a = GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6);
|
||
d = GG(d, a, b, c, x[k + 14], S22, 0xC33707D6);
|
||
c = GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87);
|
||
b = GG(b, c, d, a, x[k + 8], S24, 0x455A14ED);
|
||
a = GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905);
|
||
d = GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8);
|
||
c = GG(c, d, a, b, x[k + 7], S23, 0x676F02D9);
|
||
b = GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A);
|
||
a = HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942);
|
||
d = HH(d, a, b, c, x[k + 8], S32, 0x8771F681);
|
||
c = HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122);
|
||
b = HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C);
|
||
a = HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44);
|
||
d = HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9);
|
||
c = HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60);
|
||
b = HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70);
|
||
a = HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6);
|
||
d = HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA);
|
||
c = HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085);
|
||
b = HH(b, c, d, a, x[k + 6], S34, 0x4881D05);
|
||
a = HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039);
|
||
d = HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5);
|
||
c = HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8);
|
||
b = HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665);
|
||
a = II(a, b, c, d, x[k + 0], S41, 0xF4292244);
|
||
d = II(d, a, b, c, x[k + 7], S42, 0x432AFF97);
|
||
c = II(c, d, a, b, x[k + 14], S43, 0xAB9423A7);
|
||
b = II(b, c, d, a, x[k + 5], S44, 0xFC93A039);
|
||
a = II(a, b, c, d, x[k + 12], S41, 0x655B59C3);
|
||
d = II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92);
|
||
c = II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D);
|
||
b = II(b, c, d, a, x[k + 1], S44, 0x85845DD1);
|
||
a = II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F);
|
||
d = II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0);
|
||
c = II(c, d, a, b, x[k + 6], S43, 0xA3014314);
|
||
b = II(b, c, d, a, x[k + 13], S44, 0x4E0811A1);
|
||
a = II(a, b, c, d, x[k + 4], S41, 0xF7537E82);
|
||
d = II(d, a, b, c, x[k + 11], S42, 0xBD3AF235);
|
||
c = II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB);
|
||
b = II(b, c, d, a, x[k + 9], S44, 0xEB86D391);
|
||
a = addUnsigned(a, AA);
|
||
b = addUnsigned(b, BB);
|
||
c = addUnsigned(c, CC);
|
||
d = addUnsigned(d, DD);
|
||
}
|
||
|
||
var temp = wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d);
|
||
return temp.toLowerCase();
|
||
}
|
||
|
||
function STrEnc(l) {
|
||
l = JSON.stringify(l);
|
||
l = encodeURIComponent(l);
|
||
var k = ""
|
||
, e = 0;
|
||
do {
|
||
var h = l.charCodeAt(e++);
|
||
var d = l.charCodeAt(e++);
|
||
var a = l.charCodeAt(e++);
|
||
var b = h >> 2;
|
||
h = (h & 3) << 4 | d >> 4;
|
||
var f = (d & 15) << 2 | a >> 6;
|
||
var c = a & 63;
|
||
isNaN(d) ? f = c = 64 : isNaN(a) && (c = 64);
|
||
k = k + "23IL<N01c7KvwZO56RSTAfghiFyzWJqVabGH4PQdopUrsCuX*xeBjkltDEmn89.-".charAt(b) + "23IL<N01c7KvwZO56RSTAfghiFyzWJqVabGH4PQdopUrsCuX*xeBjkltDEmn89.-".charAt(h) + "23IL<N01c7KvwZO56RSTAfghiFyzWJqVabGH4PQdopUrsCuX*xeBjkltDEmn89.-".charAt(f) + "23IL<N01c7KvwZO56RSTAfghiFyzWJqVabGH4PQdopUrsCuX*xeBjkltDEmn89.-".charAt(c)
|
||
} while (e < l.length);
|
||
return k + "/"
|
||
}
|
||
|
||
function getLastParameter(str) {
|
||
let parts = str.split('/'); // 将字符串按照 '/' 分割成数组
|
||
return parts[parts.length - 1]; // 获取最后一个部分
|
||
}
|
||
|
||
function splitAndJoin(str) {
|
||
const parts = str.split('/'); // 使用 / 进行拆分
|
||
const restPart = parts.slice(1).join('/'); // 拼接其余部分
|
||
|
||
return restPart;
|
||
}
|
||
|
||
function getXtokenObj(ua) {
|
||
ua = ua || "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36";
|
||
|
||
let obj_d = {
|
||
"ts": {
|
||
"deviceTime": new Date().getTime(),
|
||
"deviceEndTime": (new Date().getTime() + 50)
|
||
},
|
||
"ca": {
|
||
"tdHash": "d292170ca009238e7f6c027ac97f13fa",
|
||
"contextName": "webgl,experimental-webgl",
|
||
"webglversion": "WebGL 1.0 (OpenGL ES 2.0 Chromium)",
|
||
"shadingLV": "WebGL GLSL ES 1.0 (OpenGL ES GLSL ES 1.0 Chromium)",
|
||
"vendor": "WebKit",
|
||
"renderer": "WebKit WebGL",
|
||
"extensions": [
|
||
"ANGLE_instanced_arrays",
|
||
"EXT_blend_minmax",
|
||
"EXT_clip_control",
|
||
"EXT_color_buffer_half_float",
|
||
"EXT_depth_clamp",
|
||
"EXT_disjoint_timer_query",
|
||
"EXT_float_blend",
|
||
"EXT_frag_depth",
|
||
"EXT_polygon_offset_clamp",
|
||
"EXT_shader_texture_lod",
|
||
"EXT_texture_compression_bptc",
|
||
"EXT_texture_compression_rgtc",
|
||
"EXT_texture_filter_anisotropic",
|
||
"EXT_texture_mirror_clamp_to_edge",
|
||
"EXT_sRGB",
|
||
"KHR_parallel_shader_compile",
|
||
"OES_element_index_uint",
|
||
"OES_fbo_render_mipmap",
|
||
"OES_standard_derivatives",
|
||
"OES_texture_float",
|
||
"OES_texture_float_linear",
|
||
"OES_texture_half_float",
|
||
"OES_texture_half_float_linear",
|
||
"OES_vertex_array_object",
|
||
"WEBGL_blend_func_extended",
|
||
"WEBGL_color_buffer_float",
|
||
"WEBGL_compressed_texture_s3tc",
|
||
"WEBGL_compressed_texture_s3tc_srgb",
|
||
"WEBGL_debug_renderer_info",
|
||
"WEBGL_debug_shaders",
|
||
"WEBGL_depth_texture",
|
||
"WEBGL_draw_buffers",
|
||
"WEBGL_lose_context",
|
||
"WEBGL_multi_draw",
|
||
"WEBGL_polygon_mode"
|
||
],
|
||
"wuv": "Google Inc. (NVIDIA)",
|
||
"wur": "ANGLE (NVIDIA, NVIDIA GeForce RTX 3050 Laptop GPU (0x000025E2) Direct3D11 vs_5_0 ps_5_0, D3D11)"
|
||
},
|
||
"m": {
|
||
"compatMode": "CSS1Compat"
|
||
},
|
||
"n": {
|
||
"vendorSub": "",
|
||
"productSub": "20030107",
|
||
"vendor": "Google Inc.",
|
||
"maxTouchPoints": 0,
|
||
"pdfViewerEnabled": true,
|
||
"hardwareConcurrency": 12,
|
||
"cookieEnabled": true,
|
||
"appCodeName": "Mozilla",
|
||
"appName": "Netscape",
|
||
"appVersion": splitAndJoin(ua),
|
||
"platform": "Win32",
|
||
"product": "Gecko",
|
||
"userAgent": ua,
|
||
"language": "zh-CN",
|
||
"onLine": true,
|
||
"webdriver": false,
|
||
"javaEnabled": false,
|
||
"deprecatedRunAdAuctionEnforcesKAnonymity": false,
|
||
"deviceMemory": 8,
|
||
"enumerationOrder": [
|
||
"vendorSub",
|
||
"productSub",
|
||
"vendor",
|
||
"maxTouchPoints",
|
||
"scheduling",
|
||
"userActivation",
|
||
"geolocation",
|
||
"doNotTrack",
|
||
"connection",
|
||
"plugins",
|
||
"mimeTypes",
|
||
"pdfViewerEnabled",
|
||
"webkitTemporaryStorage",
|
||
"webkitPersistentStorage",
|
||
"windowControlsOverlay",
|
||
"hardwareConcurrency",
|
||
"cookieEnabled",
|
||
"appCodeName",
|
||
"appName",
|
||
"appVersion",
|
||
"platform",
|
||
"product",
|
||
"userAgent",
|
||
"language",
|
||
"languages",
|
||
"onLine",
|
||
"webdriver",
|
||
"getGamepads",
|
||
"javaEnabled",
|
||
"sendBeacon",
|
||
"vibrate",
|
||
"deprecatedRunAdAuctionEnforcesKAnonymity",
|
||
"protectedAudience",
|
||
"bluetooth",
|
||
"storageBuckets",
|
||
"clipboard",
|
||
"credentials",
|
||
"keyboard",
|
||
"managed",
|
||
"mediaDevices",
|
||
"storage",
|
||
"serviceWorker",
|
||
"virtualKeyboard",
|
||
"wakeLock",
|
||
"deviceMemory",
|
||
"userAgentData",
|
||
"cookieDeprecationLabel",
|
||
"login",
|
||
"ink",
|
||
"mediaCapabilities",
|
||
"devicePosture",
|
||
"hid",
|
||
"locks",
|
||
"gpu",
|
||
"mediaSession",
|
||
"permissions",
|
||
"presentation",
|
||
"serial",
|
||
"usb",
|
||
"xr",
|
||
"adAuctionComponents",
|
||
"runAdAuction",
|
||
"canLoadAdAuctionFencedFrame",
|
||
"canShare",
|
||
"share",
|
||
"clearAppBadge",
|
||
"getBattery",
|
||
"getUserMedia",
|
||
"requestMIDIAccess",
|
||
"requestMediaKeySystemAccess",
|
||
"setAppBadge",
|
||
"webkitGetUserMedia",
|
||
"clearOriginJoinedAdInterestGroups",
|
||
"createAuctionNonce",
|
||
"joinAdInterestGroup",
|
||
"leaveAdInterestGroup",
|
||
"updateAdInterestGroups",
|
||
"deprecatedReplaceInURN",
|
||
"deprecatedURNToURL",
|
||
"getInstalledRelatedApps",
|
||
"getInterestGroupAdAuctionData",
|
||
"registerProtocolHandler",
|
||
"unregisterProtocolHandler"
|
||
]
|
||
},
|
||
"p": [
|
||
{
|
||
"name": "PDF Viewer"
|
||
},
|
||
{
|
||
"name": "Chrome PDF Viewer"
|
||
},
|
||
{
|
||
"name": "Chromium PDF Viewer"
|
||
},
|
||
{
|
||
"name": "Microsoft Edge PDF Viewer"
|
||
},
|
||
{
|
||
"name": "WebKit built-in PDF"
|
||
}
|
||
],
|
||
"w": {
|
||
"devicePixelRatio": 1.5,
|
||
"screenTop": 2,
|
||
"screenLeft": 1180
|
||
},
|
||
"s": {
|
||
"availHeight": 1019,
|
||
"availWidth": 1707,
|
||
"colorDepth": 24,
|
||
"height": 1067,
|
||
"width": 1707,
|
||
"pixelDepth": 24
|
||
},
|
||
"sc": {
|
||
"ActiveBorder": "rgb(0, 0, 0)",
|
||
"ActiveCaption": "rgb(0, 0, 0)",
|
||
"AppWorkspace": "rgb(255, 255, 255)",
|
||
"Background": "rgb(255, 255, 255)",
|
||
"ButtonFace": "rgb(240, 240, 240)",
|
||
"ButtonHighlight": "rgb(240, 240, 240)",
|
||
"ButtonShadow": "rgb(240, 240, 240)",
|
||
"ButtonText": "rgb(0, 0, 0)",
|
||
"CaptionText": "rgb(0, 0, 0)",
|
||
"GrayText": "rgb(109, 109, 109)",
|
||
"Highlight": "rgb(0, 120, 215)",
|
||
"HighlightText": "rgb(255, 255, 255)",
|
||
"InactiveBorder": "rgb(0, 0, 0)",
|
||
"InactiveCaption": "rgb(255, 255, 255)",
|
||
"InactiveCaptionText": "rgb(128, 128, 128)",
|
||
"InfoBackground": "rgb(255, 255, 255)",
|
||
"InfoText": "rgb(0, 0, 0)",
|
||
"Menu": "rgb(255, 255, 255)",
|
||
"MenuText": "rgb(0, 0, 0)",
|
||
"Scrollbar": "rgb(255, 255, 255)",
|
||
"ThreeDDarkShadow": "rgb(0, 0, 0)",
|
||
"ThreeDFace": "rgb(240, 240, 240)",
|
||
"ThreeDHighlight": "rgb(0, 0, 0)",
|
||
"ThreeDLightShadow": "rgb(0, 0, 0)",
|
||
"ThreeDShadow": "rgb(0, 0, 0)",
|
||
"Window": "rgb(255, 255, 255)",
|
||
"WindowFrame": "rgb(0, 0, 0)",
|
||
"WindowText": "rgb(0, 0, 0)"
|
||
},
|
||
"ss": {
|
||
"cookie": true,
|
||
"localStorage": true,
|
||
"sessionStorage": true,
|
||
"globalStorage": false,
|
||
"indexedDB": true
|
||
},
|
||
"tz": -480,
|
||
"lil": "",
|
||
"wil": "",
|
||
"wi": {
|
||
"ow": 518,
|
||
"oh": 1023,
|
||
"iw": 504,
|
||
"ih": 894,
|
||
"etn": "[object External]",
|
||
"nlc": 3,
|
||
"slc": 0
|
||
}
|
||
}
|
||
let dStr = STrEnc(obj_d);
|
||
let obj_fp = [
|
||
ua,
|
||
"zh-CN",
|
||
"applewebkit_chrome",
|
||
getLastParameter(ua),
|
||
"windows",
|
||
"NT",
|
||
Math.floor(Math.random() * 99) + 1,
|
||
"1067x1707",
|
||
Math.floor(Math.random() * 2001) - 1000,
|
||
"sessionStorageKey",
|
||
"localStorageKey",
|
||
"indexedDbKey",
|
||
"NA",
|
||
"Win32",
|
||
Math.floor(Math.random() * 99) + 1,
|
||
"NA",
|
||
"PDF Viewer::Portable Document Format::application/pdf~pdf,text/pdf~pdf;Chrome PDF Viewer::Portable Document Format::application/pdf~pdf,text/pdf~pdf;Chromium PDF Viewer::Portable Document Format::application/pdf~pdf,text/pdf~pdf;Microsoft Edge PDF Viewer::Portable Document Format::application/pdf~pdf,text/pdf~pdf;WebKit built-in PDF::Portable Document Format::application/pdf~pdf,text/pdf~pdf",
|
||
"data:image/png;base64,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",
|
||
"data:image/png;base64,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extensions:ANGLE_instanced_arrays;EXT_blend_minmax;EXT_clip_control;EXT_color_buffer_half_float;EXT_depth_clamp;EXT_disjoint_timer_query;EXT_float_blend;EXT_frag_depth;EXT_polygon_offset_clamp;EXT_shader_texture_lod;EXT_texture_compression_bptc;EXT_texture_compression_rgtc;EXT_texture_filter_anisotropic;EXT_texture_mirror_clamp_to_edge;EXT_sRGB;KHR_parallel_shader_compile;OES_element_index_uint;OES_fbo_render_mipmap;OES_standard_derivatives;OES_texture_float;OES_texture_float_linear;OES_texture_half_float;OES_texture_half_float_linear;OES_vertex_array_object;WEBGL_blend_func_extended;WEBGL_color_buffer_float;WEBGL_compressed_texture_s3tc;WEBGL_compressed_texture_s3tc_srgb;WEBGL_debug_renderer_info;WEBGL_debug_shaders;WEBGL_depth_texture;WEBGL_draw_buffers;WEBGL_lose_context;WEBGL_multi_draw;WEBGL_polygon_modeextensions:ANGLE_instanced_arrays;EXT_blend_minmax;EXT_clip_control;EXT_color_buffer_half_float;EXT_depth_clamp;EXT_disjoint_timer_query;EXT_float_blend;EXT_frag_depth;EXT_polygon_offset_clamp;EXT_shader_texture_lod;EXT_texture_compression_bptc;EXT_texture_compression_rgtc;EXT_texture_filter_anisotropic;EXT_texture_mirror_clamp_to_edge;EXT_sRGB;KHR_parallel_shader_compile;OES_element_index_uint;OES_fbo_render_mipmap;OES_standard_derivatives;OES_texture_float;OES_texture_float_linear;OES_texture_half_float;OES_texture_half_float_linear;OES_vertex_array_object;WEBGL_blend_func_extended;WEBGL_color_buffer_float;WEBGL_compressed_texture_s3tc;WEBGL_compressed_texture_s3tc_srgb;WEBGL_debug_renderer_info;WEBGL_debug_shaders;WEBGL_depth_texture;WEBGL_draw_buffers;WEBGL_lose_context;WEBGL_multi_draw;WEBGL_polygon_modew1[1, 1]w2[1, 1024]w38w4yesw58w624w78w816w932w1016384w111024w1216384w1316w1416384w1530w1616w1716w184095w19[32767, 32767]w208w21WebKit WebGLw22WebGL GLSL ES 1.0 (OpenGL ES GLSL ES 1.0 Chromium)w230w24WebKitw25WebGL 1.0 (OpenGL ES 2.0 Chromium)wuv:Google Inc. (NVIDIA)wur:ANGLE (NVIDIA, NVIDIA GeForce RTX 3050 Laptop GPU (0x000025E2) Direct3D11 vs_5_0 ps_5_0, D3D11)"
|
||
];
|
||
let fp = HASH.hash128(obj_fp.join("~~~"), 31);
|
||
let obj_a = {
|
||
pin: "",
|
||
oid: "",
|
||
bizId: "gold_m",
|
||
fc: "",
|
||
mode: "strict",
|
||
p: "s",
|
||
fp: fp,
|
||
ctype: 1,
|
||
v: "4.2.9.0",
|
||
pv: "02_mt_JXZ8_78623476362",
|
||
f: "3",
|
||
s: md5(dStr),
|
||
o: "m.jd.com/",
|
||
qs: "",
|
||
jsTk: ""
|
||
}
|
||
|
||
let aStr = STrEnc(obj_a);
|
||
return JSON.stringify({
|
||
a: aStr,
|
||
d: dStr,
|
||
}, null, 2);
|
||
}
|
||
|
||
try {
|
||
|
||
let JsObj = JSON.parse(getXtokenObj(str));
|
||
const headers = {
|
||
"Content-Type": "application/x-www-form-urlencoded",
|
||
"Accept": "*/*",
|
||
"User-Agent": str,
|
||
};
|
||
|
||
const formdata = {
|
||
method: "POST",
|
||
headers: headers,
|
||
body: new URLSearchParams({
|
||
a: JsObj.a,
|
||
d: JsObj.d
|
||
}),
|
||
timeout: 5000,
|
||
};
|
||
|
||
if (proxy) {
|
||
try {
|
||
formdata.agent = new HttpsProxyAgent(proxy);
|
||
} catch (e) {
|
||
throw new Error(`Invalid proxy URL: ${proxy}`);
|
||
}
|
||
}
|
||
|
||
const response = await fetch(`https://jra.jd.com/jsTk.do`, formdata);
|
||
|
||
const responseData = await response.json();
|
||
|
||
return responseData;
|
||
} catch (error) {
|
||
console.error(`Error: ${error.message}`);
|
||
return "获取 x-api-eid-token 参数异常";
|
||
}
|
||
}
|
||
|
||
// 默认配置
|
||
export const defaultConfig = {
|
||
route: '/api/stash/algorithm',
|
||
port: 8887,
|
||
ConfigName: 'CipherStash',// 配置文件名称
|
||
CipherName: 'CipherStash'// 算法名称
|
||
};
|
||
|
||
// 字段备注(不被引用)
|
||
export const Remark = {
|
||
type: "算法类型(数据参考下方算法对照表key值)",
|
||
str: "任何字段值",
|
||
}
|
||
|
||
// 算法对照表
|
||
// 入参注释
|
||
export const CipherTable = {
|
||
1: "x-api-eid-token算法",// str
|
||
}
|