UNPKG

@genshin-kit/core

Version:

An API wrapper for fetching player data of Genshin Impact from any servers.

61 lines 2.02 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports._getDS = void 0; const tslib_1 = require("tslib"); const crypto_1 = (0, tslib_1.__importDefault)(require("crypto")); const url_1 = require("url"); /** * @function _getDS get DynamicSecret */ function _getDS({ query, body }) { switch (this.serverType) { case 'os': return getOsDS('6s25p5ox5y14umn1p61aqyyvbvvl3lrt'); case 'cn': default: return getCnDS({ query, body }); } } exports._getDS = _getDS; // 生成随机字符串 function randomString(e) { const s = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; const res = []; for (let i = 0; i < e; ++i) { res.push(s[Math.floor(Math.random() * s.length)]); } return res.join(''); } // 按首字母排序 object function sortKeys(obj) { const copy = {}; const allKeys = Object.keys(obj).sort(); allKeys.forEach((key) => { copy[key] = obj[key]; }); return copy; } function getOsDS(salt) { const time = Math.floor(Date.now() / 1000); const random = randomString(6); const c = crypto_1.default .createHash('md5') .update(`salt=${salt}&t=${time}&r=${random}`) .digest('hex'); return `${time},${random},${c}`; } function getCnDS({ query, body, }) { const salt = 'xV8v4Qu54lUKrEYFZkJhB8cuOh9Asafs'; const time = Math.floor(Date.now() / 1000); // Integer between 100000 - 200000 const random = Math.floor(Math.random() * (200000 - 100000 + 1)) + 100000; const b = body ? JSON.stringify(sortKeys(body)) : ''; const q = query ? new url_1.URLSearchParams(sortKeys(query)) : ''; const check = crypto_1.default .createHash('md5') .update(`salt=${salt}&t=${time}&r=${random}&b=${b}&q=${q}`) .digest('hex'); const dynamic = `${time},${random},${check}`; return dynamic; } //# sourceMappingURL=_getDS.js.map