faker3/utils/jsToken.js
2024-10-21 16:07:49 +08:00

285 lines
8.0 KiB
JavaScript

var axios = require('axios');
var qs = require('qs');
function TDEncrypt(l) {
l = JSON.stringify(l);
l = encodeURIComponent(l);
var k = '',
f = 0;
do {
var h = l.charCodeAt(f++);
var d = l.charCodeAt(f++);
var a = l.charCodeAt(f++);
var b = h >> 2;
h = ((h & 3) << 4) | (d >> 4);
var e = ((d & 15) << 2) | (a >> 6);
var c = a & 63;
isNaN(d) ? (e = c = 64) : isNaN(a) && (c = 64);
k =
k +
'23IL<N01c7KvwZO56RSTAfghiFyzWJqVabGH4PQdopUrsCuX*xeBjkltDEmn89.-'.charAt(b) +
'23IL<N01c7KvwZO56RSTAfghiFyzWJqVabGH4PQdopUrsCuX*xeBjkltDEmn89.-'.charAt(h) +
'23IL<N01c7KvwZO56RSTAfghiFyzWJqVabGH4PQdopUrsCuX*xeBjkltDEmn89.-'.charAt(e) +
'23IL<N01c7KvwZO56RSTAfghiFyzWJqVabGH4PQdopUrsCuX*xeBjkltDEmn89.-'.charAt(c);
} while (f < l.length);
return k + '/';
}
function getAppVersionFromUserAgent(userAgent) {
const mozillaIndex = userAgent.indexOf('Mozilla/');
if (mozillaIndex !== -1) {
return userAgent.substring(mozillaIndex + 8);
}
return userAgent;
}
function getCurrentPageUrl(inputUrl) {
let l = inputUrl.startsWith('https:') ? 'https://' : 'http://';
let d = '';
try {
const queryIndex = inputUrl.indexOf('?');
if (queryIndex > 0) {
inputUrl = inputUrl.substring(0, queryIndex);
}
d = inputUrl.substring(l.length);
} catch (error) {
console.error('Error parsing URL:', error);
}
return d;
}
async function getJsToken(
userAgent = 'jdapp;android;11.2.8;;;Mozilla/5.0 (Linux; Android 10; ONEPLUS A5010 Build/QKQ1.191014.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 MQQBrowser/6.2 TBS/045230 Mobile Safari/537.36',
url = 'https://plus.m.jd.com/',
bizId = 'JD-PLUS',
) {
const d = TDEncrypt({
ts: { deviceTime: Date.now(), deviceEndTime: Date.now() + 10 },
ca: {
tdHash: '5b7096a993d442aef38ceb90cce4b485',
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. (Intel)',
wur: 'ANGLE (Intel, Intel(R) UHD Graphics 730 (0x00004C8B) Direct3D11 vs_5_0 ps_5_0, D3D11)',
},
m: { compatMode: 'CSS1Compat' },
n: {
vendorSub: '',
productSub: '20030107',
vendor: 'Google Inc.',
maxTouchPoints: 1,
pdfViewerEnabled: false,
hardwareConcurrency: 12,
cookieEnabled: true,
appCodeName: 'Mozilla',
appName: 'Netscape',
appVersion: getAppVersionFromUserAgent(userAgent),
platform: 'Win32',
product: 'Gecko',
userAgent: userAgent,
language: 'zh-CN',
onLine: true,
webdriver: false,
javaEnabled: false,
deprecatedRunAdAuctionEnforcesKAnonymity: true,
deviceMemory: 8,
enumerationOrder: [
'vendorSub',
'productSub',
'vendor',
'maxTouchPoints',
'scheduling',
'userActivation',
'doNotTrack',
'geolocation',
'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',
'login',
'ink',
'mediaCapabilities',
'hid',
'locks',
'gpu',
'mediaSession',
'permissions',
'presentation',
'usb',
'xr',
'serial',
'adAuctionComponents',
'runAdAuction',
'canLoadAdAuctionFencedFrame',
'canShare',
'share',
'clearAppBadge',
'getBattery',
'getUserMedia',
'requestMIDIAccess',
'requestMediaKeySystemAccess',
'setAppBadge',
'webkitGetUserMedia',
'clearOriginJoinedAdInterestGroups',
'createAuctionNonce',
'joinAdInterestGroup',
'leaveAdInterestGroup',
'updateAdInterestGroups',
'deprecatedReplaceInURN',
'deprecatedURNToURL',
'getInstalledRelatedApps',
'registerProtocolHandler',
'unregisterProtocolHandler',
],
},
p: [],
w: { devicePixelRatio: 4, screenTop: 0, screenLeft: 0 },
s: { availHeight: 740, availWidth: 360, colorDepth: 24, height: 740, width: 360, 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: 'rgba(0, 86, 205, 0.8)',
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: '',
});
const a = TDEncrypt({
pin: '',
oid: '',
bizId: bizId,
fc: '',
mode: 'strict',
p: 's',
fp: 'b772d9635edebaa1a47c5a1fd086186a',
ctype: 1,
v: '3.2.1.0',
f: '3',
o: getCurrentPageUrl(url),
qs: '',
qi: '',
});
let { status, data } = await axios({
method: 'POST',
url: `https://jra.jd.com/jsTk.do?a=${encodeURIComponent(a)}`,
headers: {
'User-Agent': userAgent,
'content-type': 'application/x-www-form-urlencoded;charset=UTF-8',
},
data: qs.stringify({
d: d,
}),
});
if (status === 200 && data.data) {
return data.data;
} else return null;
}
module.exports.getJsToken = getJsToken;