mirror of
https://github.com/BTMuli/TeyvatGuide.git
synced 2025-12-13 09:28:14 +08:00
♻️ 减少耦合
This commit is contained in:
@@ -7,13 +7,10 @@
|
||||
|
||||
// tauri
|
||||
import { http } from "@tauri-apps/api";
|
||||
// Node
|
||||
import qs from "qs";
|
||||
// api
|
||||
import TGApi from "../api/TGApi";
|
||||
// utils
|
||||
import TGUtils from "../utils/TGUtils";
|
||||
import { transCookie } from "../utils/tools";
|
||||
|
||||
/**
|
||||
* @description 根据 stoken 获取 cookie_token
|
||||
@@ -29,7 +26,7 @@ export async function getCookieTokenBySToken (stuid: string, stoken: string): Pr
|
||||
stoken,
|
||||
};
|
||||
const params = { stoken };
|
||||
const header = TGUtils.User.getHeader(transCookie(cookie), "GET", qs.stringify(params), "common");
|
||||
const header = TGUtils.User.getHeader(cookie, "GET", params, "common");
|
||||
return await http.fetch<BTMuli.User.Response.CookieToken>(url, {
|
||||
method: "GET",
|
||||
headers: header,
|
||||
|
||||
@@ -7,13 +7,10 @@
|
||||
|
||||
// tauri
|
||||
import { http } from "@tauri-apps/api";
|
||||
// Node
|
||||
import qs from "qs";
|
||||
// api
|
||||
import TGApi from "../api/TGApi";
|
||||
// utils
|
||||
import TGUtils from "../utils/TGUtils";
|
||||
import { transCookie } from "../utils/tools";
|
||||
import TGConstant from "../constant/TGConstant";
|
||||
|
||||
/**
|
||||
@@ -30,7 +27,6 @@ export async function getGameAccountsBySToken (stoken: string, stuid: string): P
|
||||
stoken,
|
||||
};
|
||||
const params = { stoke: stoken, game_biz: TGConstant.Utils.GAME_BIZ };
|
||||
const header = TGUtils.User.getHeader(transCookie(cookie), "GET", qs.stringify(params), "common");
|
||||
return await getGameAccounts(url, cookie, params);
|
||||
}
|
||||
|
||||
@@ -60,7 +56,7 @@ export async function getGameAccountsByCookie (cookie_token: string, account_id:
|
||||
* @returns {Promise<BTMuli.User.Game.Account[]|BTMuli.Genshin.Base.Response>}
|
||||
*/
|
||||
async function getGameAccounts (url: string, cookie: Record<string, string>, params: Record<string, string>): Promise<BTMuli.User.Game.Account[] | BTMuli.Genshin.Base.Response> {
|
||||
const header = TGUtils.User.getHeader(transCookie(cookie), "GET", qs.stringify(params), "common");
|
||||
const header = TGUtils.User.getHeader(cookie, "GET", params, "common");
|
||||
return await http.fetch<BTMuli.User.Response.GameAccounts>(url, {
|
||||
method: "GET",
|
||||
headers: header,
|
||||
|
||||
@@ -7,13 +7,10 @@
|
||||
|
||||
// tauri
|
||||
import { http } from "@tauri-apps/api";
|
||||
// Node
|
||||
import qs from "qs";
|
||||
// api
|
||||
import TGApi from "../api/TGApi";
|
||||
// utils
|
||||
import TGUtils from "../utils/TGUtils";
|
||||
import { transCookie } from "../utils/tools";
|
||||
|
||||
/**
|
||||
* @description 根据 stoken 获取 ltoken
|
||||
@@ -29,7 +26,7 @@ export async function getLTokenBySToken (stuid: string, stoken: string): Promise
|
||||
stoken,
|
||||
};
|
||||
const params = { stoken };
|
||||
const header = TGUtils.User.getHeader(transCookie(cookie), "GET", qs.stringify(params), "common");
|
||||
const header = TGUtils.User.getHeader(cookie, "GET", params, "common");
|
||||
return await http.fetch<BTMuli.User.Response.LToken>(url, {
|
||||
method: "GET",
|
||||
headers: header,
|
||||
|
||||
@@ -7,13 +7,10 @@
|
||||
|
||||
// tauri
|
||||
import { http } from "@tauri-apps/api";
|
||||
// Node
|
||||
import qs from "qs";
|
||||
// api
|
||||
import TGApi from "../api/TGApi";
|
||||
// utils
|
||||
import TGUtils from "../utils/TGUtils";
|
||||
import { transCookie } from "../utils/tools";
|
||||
|
||||
/**
|
||||
* @description 根据 login_ticket 获取游戏 Token,包括 stoken 和 ltoken
|
||||
@@ -30,7 +27,7 @@ export async function getTokensByLoginTicket (ticket: string, uid: string): Prom
|
||||
const url = TGApi.GameTokens.getTokens;
|
||||
// eslint-disable-next-line camelcase
|
||||
const params = { login_ticket: ticket, token_types: 3, uid };
|
||||
const header = TGUtils.User.getHeader(transCookie(cookie), "GET", qs.stringify(params), "common");
|
||||
const header = TGUtils.User.getHeader(cookie, "GET", params, "common");
|
||||
return await http.fetch<BTMuli.User.Response.Tokens>(url, {
|
||||
method: "GET",
|
||||
headers: header,
|
||||
|
||||
@@ -7,30 +7,26 @@
|
||||
|
||||
// tauri
|
||||
import { http } from "@tauri-apps/api";
|
||||
// Node
|
||||
import qs from "qs";
|
||||
// api
|
||||
import TGApi from "../api/TGApi";
|
||||
// utils
|
||||
import TGUtils from "../utils/TGUtils";
|
||||
import { transCookie } from "../utils/tools";
|
||||
|
||||
/**
|
||||
* @description 验证 stoken 有效性,返回 mid
|
||||
* @description 验证 ltoken 有效性,返回 mid
|
||||
* @since Alpha v0.2.0
|
||||
* @param {string} ltoken ltoken
|
||||
* @param {string} ltuid 登录用户 uid
|
||||
* @param {string} stoken stoken
|
||||
* @returns {Promise<string | BTMuli.Genshin.Base.Response>}
|
||||
*/
|
||||
export async function verifyLToken (ltoken: string, ltuid: string, stoken: string): Promise<string | BTMuli.Genshin.Base.Response> {
|
||||
export async function verifyLToken (ltoken: string, ltuid: string): Promise<string | BTMuli.Genshin.Base.Response> {
|
||||
const url = TGApi.GameTokens.verifyLToken;
|
||||
const cookie = {
|
||||
ltoken,
|
||||
ltuid,
|
||||
};
|
||||
const data = { stoken };
|
||||
const header = TGUtils.User.getHeader(transCookie(cookie), "POST", qs.stringify(data), "common");
|
||||
const data = { ltoken };
|
||||
const header = TGUtils.User.getHeader(cookie, "POST", data, "common");
|
||||
console.log("header:", header);
|
||||
return await http.fetch<BTMuli.User.Response.Verify>(url, {
|
||||
method: "POST",
|
||||
|
||||
@@ -7,9 +7,9 @@
|
||||
|
||||
// Node
|
||||
import md5 from "js-md5";
|
||||
import qs from "qs";
|
||||
// Tauri.Genshin
|
||||
import TGConstant from "../constant/TGConstant";
|
||||
import { transCookie, transParams } from "./tools";
|
||||
|
||||
/**
|
||||
* @description 获取 salt
|
||||
@@ -56,26 +56,26 @@ function getDS (method: string, data: string, saltType: string): string {
|
||||
const body = method === "GET" ? "" : data;
|
||||
const query = method === "GET" ? data : "";
|
||||
const hashStr = `salt=${salt}&t=${time}&r=${random}&b=${body}&q=${query}`;
|
||||
const md5Str = md5.update(qs.stringify(hashStr)).hex();
|
||||
const md5Str = md5.update(hashStr).hex();
|
||||
return `${time},${random},${md5Str}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 获取请求头
|
||||
* @since Alpha v0.2.0
|
||||
* @param {string} cookie cookie
|
||||
* @param {Record<string, string>} cookie cookie
|
||||
* @param {string} method 请求方法
|
||||
* @param {string} data 请求数据
|
||||
* @param {Record<string, string|number>} data 请求数据
|
||||
* @param {string} saltType salt 类型
|
||||
* @returns {Record<string, string>} 请求头
|
||||
*/
|
||||
export function getRequestHeader (cookie: string, method: string, data: string, saltType: string): Record<string, string> {
|
||||
export function getRequestHeader (cookie: Record<string, string>, method: string, data: Record<string, string | number>, saltType: string): Record<string, string> {
|
||||
return {
|
||||
"User-Agent": TGConstant.BBS.USER_AGENT,
|
||||
"x-rpc-app_version": TGConstant.BBS.VERSION,
|
||||
"x-rpc-client_type": "5",
|
||||
Referer: "https://webstatic.mihoyo.com/",
|
||||
DS: getDS(method, data, saltType),
|
||||
Cookie: cookie,
|
||||
DS: getDS(method, transParams(data), saltType),
|
||||
Cookie: transCookie(cookie),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -42,20 +42,6 @@ export function getRandomString (length: number): string {
|
||||
return res;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description object 转换为 query string
|
||||
* @since Alpha v0.2.0
|
||||
* @param {Record<string, string>} obj object
|
||||
* @param {boolean} encode 是否编码
|
||||
* @returns {string} query string
|
||||
*/
|
||||
export function qs (obj: Record<string, string>, encode: boolean = false): string {
|
||||
let res = "";
|
||||
for (const [k, v] of Object.entries(obj)) res += `${k}=${encode ? encodeURIComponent(v) : v}&`;
|
||||
res = res.slice(0, res.length - 1);
|
||||
return res;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 将 cookie 对象转换为字符串
|
||||
* @since Alpha v0.2.0
|
||||
@@ -70,6 +56,21 @@ export function transCookie (cookie: Record<string, string>) {
|
||||
return res;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description ds 算法需要数据转换后的字符串是按照字典序排序的
|
||||
* @since Alpha v0.2.0
|
||||
* @param {Record<string, string|number>} obj object
|
||||
* @returns {string} query string
|
||||
*/
|
||||
export function transParams (obj: Record<string, string | number>): string {
|
||||
let res = "";
|
||||
const keys = Object.keys(obj).sort();
|
||||
for (const key of keys) {
|
||||
res += `${key}=${obj[key]}&`;
|
||||
}
|
||||
return res.slice(0, -1);
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 根据 uid 获取 server
|
||||
* @since Alpha v0.2.0
|
||||
|
||||
Reference in New Issue
Block a user