mirror of
https://github.com/shufflewzc/faker3.git
synced 2024-11-15 00:09:20 +08:00
285 lines
8.0 KiB
JavaScript
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;
|
||
|
|