♻️ 减少耦合

This commit is contained in:
BTMuli
2023-05-20 12:53:44 +08:00
parent 51b8d0277a
commit 4899879b02
9 changed files with 40 additions and 69 deletions

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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",

View File

@@ -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),
};
}

View File

@@ -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