mirror of
https://github.com/BTMuli/TeyvatGuide.git
synced 2025-12-13 09:28:14 +08:00
♻️ 变更目录,参考 TGAssistant 优化一些方法
This commit is contained in:
@@ -1,104 +0,0 @@
|
|||||||
/**
|
|
||||||
* @file core request getTokens.ts
|
|
||||||
* @description 获取游戏 Token
|
|
||||||
* @author BTMuli<bt-muli@outlook.com>
|
|
||||||
* @since Alpha v0.2.0
|
|
||||||
*/
|
|
||||||
|
|
||||||
// tauri
|
|
||||||
import { http } from "@tauri-apps/api";
|
|
||||||
// api
|
|
||||||
import TGApi from "../api/TGApi";
|
|
||||||
// utils
|
|
||||||
import TGUtils from "../utils/TGUtils";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @description 根据 login_ticket 获取游戏 Token,包括 stoken 和 ltoken
|
|
||||||
* @since Alpha v0.2.0
|
|
||||||
* @param {BTMuli.User.Base.Cookie} cookie 用户 Cookie
|
|
||||||
* @returns {Promise<BTMuli.User.Base.TokenItem[] | BTMuli.Genshin.Base.Response>}
|
|
||||||
*/
|
|
||||||
export async function getTokensByLoginTicket (cookie: BTMuli.User.Base.Cookie): Promise<BTMuli.User.Base.TokenItem[] | BTMuli.Genshin.Base.Response> {
|
|
||||||
const url = `${TGApi.GameTokens.getTokens}?login_ticket=${cookie.login_ticket}&token_types=3&uid=${cookie.login_uid}`;
|
|
||||||
const ck = TGUtils.Tools.cookieToString(cookie);
|
|
||||||
const query = `login_ticket=${cookie.login_ticket}&token_types=3&uid=${cookie.login_uid}`;
|
|
||||||
const header = TGUtils.User.getHeader(ck, query);
|
|
||||||
console.log("header:", header);
|
|
||||||
return await http.fetch<BTMuli.User.Response.Token>(url, {
|
|
||||||
method: "GET",
|
|
||||||
headers: header,
|
|
||||||
}).then((res) => {
|
|
||||||
if (res.data.retcode !== 0) return res.data;
|
|
||||||
return res.data.data.list;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @description 根据 stoken 获取 ltoken
|
|
||||||
* @since Alpha v0.2.0
|
|
||||||
* @param {BTMuli.User.Base.Cookie} cookie 用户 Cookie
|
|
||||||
* @param {string} stoken stoken
|
|
||||||
* @returns {Promise<unknown>}
|
|
||||||
*/
|
|
||||||
export async function getLtokenBySToken (cookie: BTMuli.User.Base.Cookie, stoken: string): Promise<unknown> {
|
|
||||||
const url = `${TGApi.GameTokens.getLToken}`;
|
|
||||||
const ck = TGUtils.Tools.cookieToString(cookie);
|
|
||||||
const query = `stoken=${stoken}`;
|
|
||||||
const header = TGUtils.User.getHeader(ck, query);
|
|
||||||
console.log("header:", header);
|
|
||||||
return await http.fetch<BTMuli.User.Response.Token>(url, {
|
|
||||||
method: "POST",
|
|
||||||
headers: header,
|
|
||||||
}).then((res) => {
|
|
||||||
console.log(res.data);
|
|
||||||
if (res.data.retcode !== 0) return res.data;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @description 根据 stoken 获取 cookieToken
|
|
||||||
* @since Alpha v0.2.0
|
|
||||||
* @param {BTMuli.User.Base.Cookie} cookie 用户 Cookie
|
|
||||||
* @param {string} stoken stoken
|
|
||||||
* @returns {Promise<unknown>}
|
|
||||||
*/
|
|
||||||
export async function getCookieTokenBySToken (cookie: BTMuli.User.Base.Cookie, stoken: string): Promise<unknown> {
|
|
||||||
const url = `${TGApi.GameTokens.getCookieToken}?stoken=${stoken}`;
|
|
||||||
console.log(url);
|
|
||||||
const ck = TGUtils.Tools.cookieToString(cookie);
|
|
||||||
const query = `stoken=${stoken}`;
|
|
||||||
const header = TGUtils.User.getHeader(ck, query);
|
|
||||||
console.log("header:", header);
|
|
||||||
return await http.fetch(url, {
|
|
||||||
method: "GET",
|
|
||||||
headers: header,
|
|
||||||
}).then((res) => {
|
|
||||||
console.log(res.data);
|
|
||||||
return res.data;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @description 验证 stoken 有效性
|
|
||||||
* @since Alpha v0.2.0
|
|
||||||
* @param {BTMuli.User.Base.Cookie} cookie 用户 Cookie
|
|
||||||
* @param {string} stoken stoken
|
|
||||||
* @returns {Promise<unknown>}
|
|
||||||
*/
|
|
||||||
export async function vetifySToken (cookie: BTMuli.User.Base.Cookie, stoken: string): Promise<unknown> {
|
|
||||||
const url = `${TGApi.GameTokens.vetifyStoken}`;
|
|
||||||
const ck = TGUtils.Tools.cookieToString(cookie);
|
|
||||||
const query = `stoken=${stoken}`;
|
|
||||||
const header = TGUtils.User.getHeader(ck, query);
|
|
||||||
console.log("header:", header);
|
|
||||||
return await http.fetch(url, {
|
|
||||||
method: "POST",
|
|
||||||
headers: header,
|
|
||||||
body: http.Body.json({
|
|
||||||
stoken,
|
|
||||||
}),
|
|
||||||
}).then((res) => {
|
|
||||||
console.log(res.data);
|
|
||||||
return res.data;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
/**
|
|
||||||
* @description ds 算法
|
|
||||||
* @since Alpha v0.2.0
|
|
||||||
* @author BTMuli<bt-muli@outlook.com>
|
|
||||||
* @since Alpha v0.2.0
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { MD5, random, qs } from "./tools";
|
|
||||||
import TGConstant from "../constant/TGConstant";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @description 获取 ds
|
|
||||||
* @since Alpha v0.2.0
|
|
||||||
* @version 2.34.1
|
|
||||||
* @param {string} query 查询字符串
|
|
||||||
* @param {string} body 请求体
|
|
||||||
* @returns {string} ds
|
|
||||||
*/
|
|
||||||
export function getDS (query: string, body: string = ""): string {
|
|
||||||
console.log("ds.query", query);
|
|
||||||
console.log("ds.body", body);
|
|
||||||
const params = {
|
|
||||||
salt: TGConstant.SALT.Other.X4,
|
|
||||||
t: Math.floor(Date.now() / 1000).toString(),
|
|
||||||
r: random(100000, 200000).toString(),
|
|
||||||
b: body,
|
|
||||||
q: query,
|
|
||||||
};
|
|
||||||
const paramStr = qs(params);
|
|
||||||
const md5Str = MD5(paramStr);
|
|
||||||
const ds = `${params.t},${params.r},${md5Str}`;
|
|
||||||
return ds;
|
|
||||||
}
|
|
||||||
@@ -99,8 +99,8 @@ import TLoading from "../components/t-loading.vue";
|
|||||||
// store
|
// store
|
||||||
import { useAppStore } from "../store/modules/app";
|
import { useAppStore } from "../store/modules/app";
|
||||||
// utils
|
// utils
|
||||||
import TGRequest from "../core/request/TGRequest";
|
import TGRequest from "../web/request/TGRequest";
|
||||||
import TGUtils from "../core/utils/TGUtils";
|
import TGUtils from "../web/utils/TGUtils";
|
||||||
import { createTGWindow } from "../utils/TGWindow";
|
import { createTGWindow } from "../utils/TGWindow";
|
||||||
|
|
||||||
// store
|
// store
|
||||||
|
|||||||
@@ -171,7 +171,7 @@ import { useAchievementsStore } from "../store/modules/achievements";
|
|||||||
// utils
|
// utils
|
||||||
import { backupUiafData, restoreUiafData } from "../utils/UIAF";
|
import { backupUiafData, restoreUiafData } from "../utils/UIAF";
|
||||||
import TGSqlite from "../utils/TGSqlite";
|
import TGSqlite from "../utils/TGSqlite";
|
||||||
import TGRequest from "../core/request/TGRequest";
|
import TGRequest from "../web/request/TGRequest";
|
||||||
|
|
||||||
// Store
|
// Store
|
||||||
const appStore = useAppStore();
|
const appStore = useAppStore();
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import TSwitchTheme from "../components/t-switchTheme.vue";
|
|||||||
// tauri
|
// tauri
|
||||||
import { appWindow } from "@tauri-apps/api/window";
|
import { appWindow } from "@tauri-apps/api/window";
|
||||||
// utils
|
// utils
|
||||||
import TGRequest from "../core/request/TGRequest";
|
import TGRequest from "../web/request/TGRequest";
|
||||||
|
|
||||||
// loading
|
// loading
|
||||||
const loading = ref(true as boolean);
|
const loading = ref(true as boolean);
|
||||||
|
|||||||
@@ -24,8 +24,8 @@ import TSwitchTheme from "../components/t-switchTheme.vue";
|
|||||||
// tauri
|
// tauri
|
||||||
import { appWindow } from "@tauri-apps/api/window";
|
import { appWindow } from "@tauri-apps/api/window";
|
||||||
// plugins
|
// plugins
|
||||||
import TGRequest from "../core/request/TGRequest";
|
import TGRequest from "../web/request/TGRequest";
|
||||||
import TGUtils from "../core/utils/TGUtils";
|
import TGUtils from "../web/utils/TGUtils";
|
||||||
|
|
||||||
// loading
|
// loading
|
||||||
const loading = ref(true as boolean);
|
const loading = ref(true as boolean);
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* @file core api ENKA.ts
|
* @file web api ENKA.ts
|
||||||
* @description ENKA API
|
* @description ENKA API
|
||||||
* @author BTMuli<bt-muli@outlook.com>
|
* @author BTMuli<bt-muli@outlook.com>
|
||||||
* @since Alpha v0.1.3
|
* @since Alpha v0.2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export const ENKA_API = "https://enka.network/api/uid/"; // 基础 API
|
export const ENKA_API = "https://enka.network/api/uid/"; // 基础 API
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* @file core api Hk4e.ts
|
* @file web api Hk4e.ts
|
||||||
* @description 定义 Hk4e API
|
* @description 定义 Hk4e API
|
||||||
* @author BTMuli<bt-muli@outlook.com>
|
* @author BTMuli<bt-muli@outlook.com>
|
||||||
* @since Alpha v0.1.2
|
* @since Alpha v0.2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const Hk4eApi = "https://hk4e-api.mihoyo.com"; // 基础 API
|
const Hk4eApi = "https://hk4e-api.mihoyo.com"; // 基础 API
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* @file core api Passport.ts
|
* @file web api Passport.ts
|
||||||
* @description 定义 Passport API
|
* @description 定义 Passport API
|
||||||
* @author BTMuli<bt-muli@outlook.com>
|
* @author BTMuli<bt-muli@outlook.com>
|
||||||
* @since Alpha v0.2.0
|
* @since Alpha v0.2.0
|
||||||
@@ -11,4 +11,4 @@ const PassportAuthApi = `${PassportApi}account/auth/api/`; // 认证 API
|
|||||||
|
|
||||||
export const PassportTokenApi = `${PassportAuthApi}getLTokenBySToken`; // 根据 stoken 获取 ltoken
|
export const PassportTokenApi = `${PassportAuthApi}getLTokenBySToken`; // 根据 stoken 获取 ltoken
|
||||||
export const PassportCookieTokenApi = `${PassportAuthApi}getCookieAccountInfoBySToken`; // 根据 Cookie 获取 Token
|
export const PassportCookieTokenApi = `${PassportAuthApi}getCookieAccountInfoBySToken`; // 根据 Cookie 获取 Token
|
||||||
export const PassportVetifyApi = `${PassportV4Api}account/ma-cn-session/web/verifyLtoken`; // 验证 stoken 有效性
|
export const PassportVerifyApi = `${PassportV4Api}account/ma-cn-session/web/verifyLtoken`; // 验证 stoken 有效性
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* @file core api TGApi.ts
|
* @file web api TGApi.ts
|
||||||
* @description 应用用到的 API
|
* @description 应用用到的 API
|
||||||
* @author BTMuli<bt-muli@outlook.com>
|
* @author BTMuli<bt-muli@outlook.com>
|
||||||
* @since Alpha v0.2.0
|
* @since Alpha v0.2.0
|
||||||
@@ -7,12 +7,12 @@
|
|||||||
|
|
||||||
import { ENKA_API } from "./ENKA";
|
import { ENKA_API } from "./ENKA";
|
||||||
import { Hk4eAnnoListApi, Hk4eAnnoContentApi, Hk4eAnnoQuery } from "./Hk4e";
|
import { Hk4eAnnoListApi, Hk4eAnnoContentApi, Hk4eAnnoQuery } from "./Hk4e";
|
||||||
import { PassportTokenApi, PassportCookieTokenApi, PassportVetifyApi } from "./Passport";
|
import { PassportTokenApi, PassportCookieTokenApi, PassportVerifyApi } from "./Passport";
|
||||||
import {
|
import {
|
||||||
TakumiTokensApi, TakumiRecordCardApi,
|
TakumiTokensApi, TakumiRecordCardApi,
|
||||||
TakumiRecordGenshinCharacterApi, TakumiRecordGenshinIndexApi,
|
TakumiRecordGenshinCharacterApi, TakumiRecordGenshinIndexApi,
|
||||||
TakumiRecordGenshinSpiralAbyssApi, TakumiSTokenBingdingRolesApi,
|
TakumiRecordGenshinSpiralAbyssApi, TakumiSTokenBindingRolesApi,
|
||||||
TakumiCookieBingdingRolesApi,
|
TakumiCookieBindingRolesApi,
|
||||||
} from "./Takumi";
|
} from "./Takumi";
|
||||||
|
|
||||||
// 应用 API
|
// 应用 API
|
||||||
@@ -25,15 +25,15 @@ const TGApi = {
|
|||||||
getTokens: TakumiTokensApi, // 根据 login_ticket 获取游戏 Token
|
getTokens: TakumiTokensApi, // 根据 login_ticket 获取游戏 Token
|
||||||
getLToken: PassportTokenApi, // 根据 stoken 获取 ltoken
|
getLToken: PassportTokenApi, // 根据 stoken 获取 ltoken
|
||||||
getCookieToken: PassportCookieTokenApi, // 根据 Cookie 获取 Token
|
getCookieToken: PassportCookieTokenApi, // 根据 Cookie 获取 Token
|
||||||
vetifyStoken: PassportVetifyApi, // 验证 stoken 有效性
|
verifyStoken: PassportVerifyApi, // 验证 stoken 有效性
|
||||||
},
|
},
|
||||||
GameData: {
|
GameData: {
|
||||||
byCookie: {
|
byCookie: {
|
||||||
getAccounts: TakumiCookieBingdingRolesApi, // 获取绑定角色
|
getAccounts: TakumiCookieBindingRolesApi, // 获取绑定角色
|
||||||
getCharacter: TakumiRecordGenshinCharacterApi, // 获取角色信息
|
getCharacter: TakumiRecordGenshinCharacterApi, // 获取角色信息
|
||||||
},
|
},
|
||||||
bySToken: {
|
bySToken: {
|
||||||
getAccounts: TakumiSTokenBingdingRolesApi, // 获取绑定角色
|
getAccounts: TakumiSTokenBindingRolesApi, // 获取绑定角色
|
||||||
},
|
},
|
||||||
getUserCard: TakumiRecordCardApi, // 获取用户卡片
|
getUserCard: TakumiRecordCardApi, // 获取用户卡片
|
||||||
getUserBase: TakumiRecordGenshinIndexApi, // 获取用户基本信息
|
getUserBase: TakumiRecordGenshinIndexApi, // 获取用户基本信息
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* @file core api Takumi.ts
|
* @file web api Takumi.ts
|
||||||
* @description 定义 Takumi API
|
* @description 定义 Takumi API
|
||||||
* @author BTMuli<bt-muli@outlook.com>
|
* @author BTMuli<bt-muli@outlook.com>
|
||||||
* @since Alpha v0.2.0
|
* @since Alpha v0.2.0
|
||||||
@@ -9,13 +9,13 @@ const TakumiApi = "https://api-takumi.mihoyo.com/"; // 基础 API
|
|||||||
const TakumiRecordApi = "https://api-takumi-record.mihoyo.com/"; // 游戏记录 API
|
const TakumiRecordApi = "https://api-takumi-record.mihoyo.com/"; // 游戏记录 API
|
||||||
const TakumiBindingApi = `${TakumiApi}binding/api/`; // 绑定 API
|
const TakumiBindingApi = `${TakumiApi}binding/api/`; // 绑定 API
|
||||||
const TakumiRecordGenshinApi = `${TakumiRecordApi}game_record/app/genshin/api/`; // 原神游戏记录 API
|
const TakumiRecordGenshinApi = `${TakumiRecordApi}game_record/app/genshin/api/`; // 原神游戏记录 API
|
||||||
const TaukumiAuthApi = `${TakumiApi}auth/api/`; // 认证 API
|
const TakumiAuthApi = `${TakumiApi}auth/api/`; // 认证 API
|
||||||
|
|
||||||
export const TakumiTokensApi = `${TaukumiAuthApi}getMultiTokenByLoginTicket`; // 登录票据 API
|
export const TakumiTokensApi = `${TakumiAuthApi}getMultiTokenByLoginTicket`; // 登录票据 API
|
||||||
export const TakumiActionTicketsApi = `${TaukumiAuthApi}getActionTicketByStoken`; // 行为票据 API
|
export const TakumiActionTicketsApi = `${TakumiAuthApi}getActionTicketByStoken`; // 行为票据 API
|
||||||
export const TakumiRecordCardApi = `${TakumiRecordApi}game_record/app/card/wapi/getGameRecordCard`; // 游戏记录卡片 API
|
export const TakumiRecordCardApi = `${TakumiRecordApi}game_record/app/card/wapi/getGameRecordCard`; // 游戏记录卡片 API
|
||||||
export const TakumiRecordGenshinIndexApi = `${TakumiRecordGenshinApi}index`; // 原神游戏记录索引 API
|
export const TakumiRecordGenshinIndexApi = `${TakumiRecordGenshinApi}index`; // 原神游戏记录索引 API
|
||||||
export const TakumiRecordGenshinCharacterApi = `${TakumiRecordGenshinApi}character`; // 原神游戏记录角色 API
|
export const TakumiRecordGenshinCharacterApi = `${TakumiRecordGenshinApi}character`; // 原神游戏记录角色 API
|
||||||
export const TakumiRecordGenshinSpiralAbyssApi = `${TakumiRecordGenshinApi}spiralAbyss`; // 原神游戏记录深境螺旋 API
|
export const TakumiRecordGenshinSpiralAbyssApi = `${TakumiRecordGenshinApi}spiralAbyss`; // 原神游戏记录深境螺旋 API
|
||||||
export const TakumiSTokenBingdingRolesApi = `${TakumiBindingApi}getUserGameRolesBySToken`; // 获取绑定角色 API-根据 stoken
|
export const TakumiSTokenBindingRolesApi = `${TakumiBindingApi}getUserGameRolesBySToken`; // 获取绑定角色 API-根据 stoken
|
||||||
export const TakumiCookieBingdingRolesApi = `${TakumiBindingApi}getUserGameRolesByCookie`; // 获取绑定角色 API-根据 Cookie
|
export const TakumiCookieBindingRolesApi = `${TakumiBindingApi}getUserGameRolesByCookie`; // 获取绑定角色 API-根据 Cookie
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* @file core constant TGConstant.ts
|
* @file web constant TGConstant.ts
|
||||||
* @description 常量
|
* @description 常量
|
||||||
* @author BTMuli<bt-muli@outlook.com>
|
* @author BTMuli<bt-muli@outlook.com>
|
||||||
* @since Alpha v0.2.0
|
* @since Alpha v0.2.0
|
||||||
@@ -16,9 +16,9 @@ const TGConstant = {
|
|||||||
USER_AGENT: BBS_HEADER_AGENT,
|
USER_AGENT: BBS_HEADER_AGENT,
|
||||||
REFERER: BBS_REFERER,
|
REFERER: BBS_REFERER,
|
||||||
},
|
},
|
||||||
SALT,
|
Salt: SALT,
|
||||||
SERVER,
|
Server: SERVER,
|
||||||
UTILS: {
|
Utils: {
|
||||||
GAME_BIZ,
|
GAME_BIZ,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* @file core constant bbs.ts
|
* @file web constant bbs.ts
|
||||||
* @description 常量-应用数据
|
* @description 常量-应用数据
|
||||||
* @author BTMuli<bt-muli@outlook.com>
|
* @author BTMuli<bt-muli@outlook.com>
|
||||||
* @since Alpha v0.2.0
|
* @since Alpha v0.2.0
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* @file core constant salt.ts
|
* @file web constant salt.ts
|
||||||
* @description 用到的 salt 值
|
* @description 用到的 salt 值
|
||||||
* @author BTMuli<bt-muli@outlook.com>
|
* @author BTMuli<bt-muli@outlook.com>
|
||||||
* @since Alpha v0.2.0
|
* @since Alpha v0.2.0
|
||||||
@@ -18,6 +18,7 @@ const SALT = {
|
|||||||
Other: {
|
Other: {
|
||||||
X4: "xV8v4Qu54lUKrEYFZkJhB8cuOh9Asafs",
|
X4: "xV8v4Qu54lUKrEYFZkJhB8cuOh9Asafs",
|
||||||
X6: "t0qEgfub6cvueAPgR5m9aQWWVciEer7v",
|
X6: "t0qEgfub6cvueAPgR5m9aQWWVciEer7v",
|
||||||
|
prod: "JwYDpKvLj6MrMqqYU6jTKF17KNO2PXoS",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* @file core constant server.ts
|
* @file web constant server.ts
|
||||||
* @description 服务器地址常量文件
|
* @description 服务器地址常量文件
|
||||||
* @auther BTMuli<bt-muli@outlook.com>
|
* @author BTMuli<bt-muli@outlook.com>
|
||||||
* @since Alpha v0.2.0
|
* @since Alpha v0.2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
* @property {string} CN_TREE 国服-世界树
|
* @property {string} CN_TREE 国服-世界树
|
||||||
* @property {string} OS_USA 美服
|
* @property {string} OS_USA 美服
|
||||||
* @property {string} OS_EURO 欧服
|
* @property {string} OS_EURO 欧服
|
||||||
* @property {string} OS_AISA 亚服
|
* @property {string} OS_ASIA 亚服
|
||||||
* @property {string} OS_CHT 台服
|
* @property {string} OS_CHT 台服
|
||||||
* @property {string} UNKNOWN 未知
|
* @property {string} UNKNOWN 未知
|
||||||
* @returns {string} 服务器地址
|
* @returns {string} 服务器地址
|
||||||
@@ -24,7 +24,7 @@ enum SERVER {
|
|||||||
CN_TREE = "cn_qd01",
|
CN_TREE = "cn_qd01",
|
||||||
OS_USA = "os_usa",
|
OS_USA = "os_usa",
|
||||||
OS_EURO = "os_euro",
|
OS_EURO = "os_euro",
|
||||||
OS_AISA = "os_asia",
|
OS_ASIA = "os_asia",
|
||||||
OS_CHT = "os_cht",
|
OS_CHT = "os_cht",
|
||||||
UNKNOWN = "unknown",
|
UNKNOWN = "unknown",
|
||||||
};
|
};
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* @file core constant utils.ts
|
* @file web constant utils.ts
|
||||||
* @description 一些杂项的常量
|
* @description 一些杂项的常量
|
||||||
* @author BTMuli<bt-muli@outlook.com>
|
* @author BTMuli<bt-muli@outlook.com>
|
||||||
* @since Alpha v0.2.0
|
* @since Alpha v0.2.0
|
||||||
@@ -11,8 +11,8 @@ import {
|
|||||||
getCookieTokenBySToken, vetifySToken,
|
getCookieTokenBySToken, vetifySToken,
|
||||||
} from "./getTokens";
|
} from "./getTokens";
|
||||||
import {
|
import {
|
||||||
getGameCardByCookie, getGameAccountsbyCookie,
|
getGameCardByCookie, getGameAccountsByCookie,
|
||||||
getAccountsbySToken, getGameRoleList,
|
getAccountsBySToken, getGameRoleListByCookie,
|
||||||
} from "./getGameData";
|
} from "./getGameData";
|
||||||
|
|
||||||
const TGRequest = {
|
const TGRequest = {
|
||||||
@@ -25,14 +25,14 @@ const TGRequest = {
|
|||||||
getLTokens: getTokensByLoginTicket,
|
getLTokens: getTokensByLoginTicket,
|
||||||
},
|
},
|
||||||
byCookie: {
|
byCookie: {
|
||||||
getAccounts: getGameAccountsbyCookie,
|
getAccounts: getGameAccountsByCookie,
|
||||||
getGameCard: getGameCardByCookie,
|
getGameCard: getGameCardByCookie,
|
||||||
getCharacter: getGameRoleList,
|
getCharacter: getGameRoleListByCookie,
|
||||||
},
|
},
|
||||||
bySToken: {
|
bySToken: {
|
||||||
vertify: vetifySToken,
|
verify: vetifySToken,
|
||||||
getLToken: getLtokenBySToken,
|
getLToken: getLtokenBySToken,
|
||||||
getAccounts: getAccountsbySToken,
|
getAccounts: getAccountsBySToken,
|
||||||
getCookieToken: getCookieTokenBySToken,
|
getCookieToken: getCookieTokenBySToken,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -1,11 +1,13 @@
|
|||||||
/**
|
/**
|
||||||
* @file core request getAnnouncement.ts
|
* @file web request getAnnouncement.ts
|
||||||
* @description 获取游戏内公告
|
* @description 获取游戏内公告
|
||||||
* @author BTMuli<bt-muli@outlook.com>
|
* @author BTMuli<bt-muli@outlook.com>
|
||||||
* @since Alpha v0.1.2
|
* @since Alpha v0.1.2
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Tauri
|
||||||
import { http } from "@tauri-apps/api";
|
import { http } from "@tauri-apps/api";
|
||||||
|
// Tauri.Genshin
|
||||||
import TGApi from "../api/TGApi";
|
import TGApi from "../api/TGApi";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -21,7 +23,7 @@ export async function getAnnoList (): Promise<BTMuli.Genshin.Announcement.ListDa
|
|||||||
* @description 获取游戏内公告内容
|
* @description 获取游戏内公告内容
|
||||||
* @since Alpha v0.1.2
|
* @since Alpha v0.1.2
|
||||||
* @param {number} annId 公告 ID
|
* @param {number} annId 公告 ID
|
||||||
* @returns {Promise<AnnoContentItem>}
|
* @returns {Promise<BTMuli.Genshin.Announcement.ContentItem>}
|
||||||
*/
|
*/
|
||||||
export async function getAnnoContent (annId: number): Promise<BTMuli.Genshin.Announcement.ContentItem> {
|
export async function getAnnoContent (annId: number): Promise<BTMuli.Genshin.Announcement.ContentItem> {
|
||||||
const annoContents: BTMuli.Genshin.Announcement.ContentItem[] = await http
|
const annoContents: BTMuli.Genshin.Announcement.ContentItem[] = await http
|
||||||
@@ -1,18 +1,20 @@
|
|||||||
/**
|
/**
|
||||||
* @file core request getEnkaData.ts
|
* @file web request getEnkaData.ts
|
||||||
* @description 获取 ENKA 数据
|
* @description 获取 ENKA 数据
|
||||||
* @author BTMuli<bt-muli@outlook.com>
|
* @author BTMuli<bt-muli@outlook.com>
|
||||||
* @since Alpha v0.1.3
|
* @since Alpha v0.1.3
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Tauri
|
||||||
import { http } from "@tauri-apps/api";
|
import { http } from "@tauri-apps/api";
|
||||||
|
// Tauri.Genshin
|
||||||
import TGApi from "../api/TGApi";
|
import TGApi from "../api/TGApi";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description 获取 ENKA 数据
|
* @description 获取 ENKA 数据
|
||||||
* @since Alpha v0.1.3
|
* @since Alpha v0.1.3
|
||||||
* @param {number} uid 用户 UID
|
* @param {number} uid 用户 UID
|
||||||
* @returns {Promise<BTMuli.Genshin.EnkaData>}
|
* @returns {Promise<BTMuli.Genshin.Enka.Data>}
|
||||||
*/
|
*/
|
||||||
export async function getEnkaData (uid: number): Promise<BTMuli.Genshin.Enka.Data> {
|
export async function getEnkaData (uid: number): Promise<BTMuli.Genshin.Enka.Data> {
|
||||||
return await http.fetch<BTMuli.Genshin.Enka.Data>(`${TGApi.GameEnka}${uid}`).then((res) => res.data);
|
return await http.fetch<BTMuli.Genshin.Enka.Data>(`${TGApi.GameEnka}${uid}`).then((res) => res.data);
|
||||||
@@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
// tauri
|
// tauri
|
||||||
import { http } from "@tauri-apps/api";
|
import { http } from "@tauri-apps/api";
|
||||||
|
import qs from "qs";
|
||||||
// utils
|
// utils
|
||||||
import TGApi from "../api/TGApi";
|
import TGApi from "../api/TGApi";
|
||||||
import TGUtils from "../utils/TGUtils";
|
import TGUtils from "../utils/TGUtils";
|
||||||
@@ -15,24 +16,21 @@ import TGConstant from "../constant/TGConstant";
|
|||||||
/**
|
/**
|
||||||
* @description 获取用户游戏数据
|
* @description 获取用户游戏数据
|
||||||
* @since Alpha v0.2.0
|
* @since Alpha v0.2.0
|
||||||
* @param {BTMuli.User.Base.Cookie} cookie 用户的 Cookie
|
* @param {string} cookie 用户的 Cookie
|
||||||
|
* @param {string} uid 用户的 UID
|
||||||
* @returns {Promise<unknown>} 用户基本信息
|
* @returns {Promise<unknown>} 用户基本信息
|
||||||
*/
|
*/
|
||||||
export async function getGameCardByCookie (cookie: BTMuli.User.Base.Cookie): Promise<unknown> {
|
export async function getGameCardByCookie (cookie: string, uid: string): Promise<unknown> {
|
||||||
const url = `${TGApi.GameData.getUserCard}?uid=${cookie.login_uid}`;
|
const url = `${TGApi.GameData.getUserCard}`;
|
||||||
const query = `uid=${cookie.login_uid}`;
|
const params = { uid };
|
||||||
const ck = TGUtils.Tools.cookieToString(cookie);
|
const header = TGUtils.User.getHeader(cookie, "GET", qs.stringify(params), "common");
|
||||||
const header = TGUtils.User.getHeader(ck, query);
|
|
||||||
console.log("header:", header);
|
console.log("header:", header);
|
||||||
console.log("uid:", cookie.login_uid);
|
|
||||||
return await http.fetch(url, {
|
return await http.fetch(url, {
|
||||||
method: "GET",
|
method: "GET",
|
||||||
headers: header,
|
headers: header,
|
||||||
body: http.Body.json({
|
body: http.Body.json(params),
|
||||||
uid: cookie.login_uid,
|
|
||||||
}),
|
|
||||||
}).then((res) => {
|
}).then((res) => {
|
||||||
console.log(res.data);
|
console.log(res);
|
||||||
return res.data;
|
return res.data;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -40,22 +38,20 @@ export async function getGameCardByCookie (cookie: BTMuli.User.Base.Cookie): Pro
|
|||||||
/**
|
/**
|
||||||
* @description 获取用户绑定角色-通过stoken
|
* @description 获取用户绑定角色-通过stoken
|
||||||
* @since Alpha v0.2.0
|
* @since Alpha v0.2.0
|
||||||
* @todo 缺乏参考数据
|
* @todo 暂时不考虑使用
|
||||||
* @param {string} cookie 用户的 Cookie
|
* @param {string} cookie 用户的 Cookie
|
||||||
* @param {string} stoken stoken
|
* @param {string} stoken stoken
|
||||||
* @returns {Promise<unknown>} 用户绑定角色
|
* @returns {Promise<unknown>} 用户绑定角色
|
||||||
*/
|
*/
|
||||||
export async function getAccountsbySToken (cookie: string, stoken: string): Promise<unknown> {
|
export async function getAccountsBySToken (cookie: string, stoken: string): Promise<unknown> {
|
||||||
const url = TGApi.GameData.bySToken.getAccounts;
|
const url = TGApi.GameData.bySToken.getAccounts;
|
||||||
console.log("url:", url);
|
|
||||||
// eslint-disable-next-line camelcase
|
// eslint-disable-next-line camelcase
|
||||||
const data = { stoken, game_biz: TGConstant.UTILS.GAME_BIZ };
|
const params = { stoken, game_biz: TGConstant.Utils.GAME_BIZ };
|
||||||
const header = TGUtils.User.getHeader(cookie, "", JSON.stringify(data));
|
const header = TGUtils.User.getHeader(cookie, "GET", JSON.stringify(params), "common");
|
||||||
console.log("header:", header);
|
|
||||||
return await http.fetch(url, {
|
return await http.fetch(url, {
|
||||||
method: "GET",
|
method: "GET",
|
||||||
headers: header,
|
headers: header,
|
||||||
body: http.Body.json(data),
|
body: http.Body.json(params),
|
||||||
}).then((res) => {
|
}).then((res) => {
|
||||||
console.log(res.data);
|
console.log(res.data);
|
||||||
return res.data;
|
return res.data;
|
||||||
@@ -68,9 +64,10 @@ export async function getAccountsbySToken (cookie: string, stoken: string): Prom
|
|||||||
* @param {string} cookie 用户的 Cookie
|
* @param {string} cookie 用户的 Cookie
|
||||||
* @returns {Promise<BTMuli.Genshin.Base.Response| BTMuli.User.Game.Account[]>} 用户绑定角色
|
* @returns {Promise<BTMuli.Genshin.Base.Response| BTMuli.User.Game.Account[]>} 用户绑定角色
|
||||||
*/
|
*/
|
||||||
export async function getGameAccountsbyCookie (cookie: string): Promise<BTMuli.Genshin.Base.Response | BTMuli.User.Game.Account[]> {
|
export async function getGameAccountsByCookie (cookie: string): Promise<BTMuli.Genshin.Base.Response | BTMuli.User.Game.Account[]> {
|
||||||
const url = `${TGApi.GameData.byCookie.getAccounts}?game_biz=${TGConstant.UTILS.GAME_BIZ}`;
|
const url = TGApi.GameData.byCookie.getAccounts;
|
||||||
const header = TGUtils.User.getHeader(cookie, "");
|
const params = { game_biz: TGConstant.Utils.GAME_BIZ };
|
||||||
|
const header = TGUtils.User.getHeader(cookie, "GET", qs.stringify(params), "common");
|
||||||
return await http.fetch<BTMuli.User.Response.GameAccounts>(url, {
|
return await http.fetch<BTMuli.User.Response.GameAccounts>(url, {
|
||||||
method: "GET",
|
method: "GET",
|
||||||
headers: header,
|
headers: header,
|
||||||
@@ -88,12 +85,11 @@ export async function getGameAccountsbyCookie (cookie: string): Promise<BTMuli.G
|
|||||||
* @param {string} uid 用户 uid
|
* @param {string} uid 用户 uid
|
||||||
* @returns {Promise<unknown>} 用户角色列表
|
* @returns {Promise<unknown>} 用户角色列表
|
||||||
*/
|
*/
|
||||||
export async function getGameRoleList (cookie: string, uid: string): Promise<unknown> {
|
export async function getGameRoleListByCookie (cookie: string, uid: string): Promise<unknown> {
|
||||||
const url = TGApi.GameData.byCookie.getCharacter;
|
const url = TGApi.GameData.byCookie.getCharacter;
|
||||||
// eslint-disable-next-line camelcase
|
// eslint-disable-next-line camelcase
|
||||||
const data = { role_id: uid, server: TGUtils.Tools.getServerByUid(uid) };
|
const data = { role_id: uid, server: TGUtils.Tools.getServerByUid(uid) };
|
||||||
const header = TGUtils.User.getHeader(cookie, "", JSON.stringify(data));
|
const header = TGUtils.User.getHeader(cookie, "", JSON.stringify(data), "common");
|
||||||
console.log("header:", header);
|
|
||||||
return await http.fetch(url, {
|
return await http.fetch(url, {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
headers: header,
|
headers: header,
|
||||||
107
src/web/request/getTokens.ts
Normal file
107
src/web/request/getTokens.ts
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
/**
|
||||||
|
* @file web request getTokens.ts
|
||||||
|
* @description 获取游戏 Token
|
||||||
|
* @author BTMuli<bt-muli@outlook.com>
|
||||||
|
* @since Alpha v0.2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
// tauri
|
||||||
|
import { http } from "@tauri-apps/api";
|
||||||
|
// Node
|
||||||
|
import qs from "qs";
|
||||||
|
// api
|
||||||
|
import TGApi from "../api/TGApi";
|
||||||
|
// utils
|
||||||
|
import TGUtils from "../utils/TGUtils";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 根据 login_ticket 获取游戏 Token,包括 stoken 和 ltoken
|
||||||
|
* @since Alpha v0.2.0
|
||||||
|
* @param {string} cookie cookie
|
||||||
|
* @param {string} ticket 登录票证
|
||||||
|
* @param {string} uid 登录用户 uid
|
||||||
|
* @returns {Promise<BTMuli.User.Base.TokenItem[] | BTMuli.Genshin.Base.Response>}
|
||||||
|
*/
|
||||||
|
// eslint-disable-next-line camelcase
|
||||||
|
export async function getTokensByLoginTicket (cookie: string, ticket: string, uid: string): Promise<BTMuli.User.Base.TokenItem[] | BTMuli.Genshin.Base.Response> {
|
||||||
|
// eslint-disable-next-line camelcase
|
||||||
|
const url = `${TGApi.GameTokens.getTokens}?login_ticket=${ticket}&token_types=3&uid=${uid}`;
|
||||||
|
// eslint-disable-next-line camelcase
|
||||||
|
const param = { login_ticket: ticket, token_types: 3, uid };
|
||||||
|
const header = TGUtils.User.getHeader(cookie, "GET", qs.stringify(param), "common");
|
||||||
|
console.log("header:", header);
|
||||||
|
return await http.fetch<BTMuli.User.Response.Token>(url, {
|
||||||
|
method: "GET",
|
||||||
|
headers: header,
|
||||||
|
}).then((res) => {
|
||||||
|
console.log(res);
|
||||||
|
if (res.data.retcode !== 0) return res.data;
|
||||||
|
return res.data.data.list;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 根据 stoken 获取 ltoken
|
||||||
|
* @since Alpha v0.2.0
|
||||||
|
* @param {string} cookie 用户 Cookie
|
||||||
|
* @param {string} stoken stoken
|
||||||
|
* @returns {Promise<unknown>}
|
||||||
|
*/
|
||||||
|
export async function getLtokenBySToken (cookie: string, stoken: string): Promise<unknown> {
|
||||||
|
const url = TGApi.GameTokens.getLToken;
|
||||||
|
const params = { stoken };
|
||||||
|
const header = TGUtils.User.getHeader(cookie, "GET", qs.stringify(params), "common");
|
||||||
|
console.log("header:", header);
|
||||||
|
return await http.fetch<BTMuli.User.Response.Token>(url, {
|
||||||
|
method: "GET",
|
||||||
|
headers: header,
|
||||||
|
body: http.Body.json(params),
|
||||||
|
}).then((res) => {
|
||||||
|
console.log(res);
|
||||||
|
if (res.data.retcode !== 0) return res.data;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 根据 stoken 获取 cookieToken
|
||||||
|
* @since Alpha v0.2.0
|
||||||
|
* @param {string} cookie 用户 Cookie
|
||||||
|
* @param {string} stoken stoken
|
||||||
|
* @returns {Promise<unknown>}
|
||||||
|
*/
|
||||||
|
export async function getCookieTokenBySToken (cookie: string, stoken: string): Promise<unknown> {
|
||||||
|
const url = TGApi.GameTokens.getCookieToken;
|
||||||
|
const params = { stoken };
|
||||||
|
const header = TGUtils.User.getHeader(cookie, "GET", qs.stringify(params), "common");
|
||||||
|
console.log("header:", header);
|
||||||
|
return await http.fetch(url, {
|
||||||
|
method: "GET",
|
||||||
|
headers: header,
|
||||||
|
body: http.Body.json(params),
|
||||||
|
}).then((res) => {
|
||||||
|
console.log(res.data);
|
||||||
|
return res.data;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 验证 stoken 有效性
|
||||||
|
* @since Alpha v0.2.0
|
||||||
|
* @param {string} cookie 用户 Cookie
|
||||||
|
* @param {string} stoken stoken
|
||||||
|
* @returns {Promise<unknown>}
|
||||||
|
*/
|
||||||
|
export async function verifySToken (cookie: string, stoken: string): Promise<unknown> {
|
||||||
|
const url = TGApi.GameTokens.verifyStoken;
|
||||||
|
const data = { stoken };
|
||||||
|
const header = TGUtils.User.getHeader(cookie, "POST", qs.stringify(data), "common");
|
||||||
|
console.log("header:", header);
|
||||||
|
return await http.fetch(url, {
|
||||||
|
method: "POST",
|
||||||
|
headers: header,
|
||||||
|
body: http.Body.json(data),
|
||||||
|
}).then((res) => {
|
||||||
|
console.log(res.data);
|
||||||
|
return res.data;
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* @file core utils TGUtils.ts
|
* @file web utils TGUtils.ts
|
||||||
* @description 应用用到的工具函数
|
* @description 应用用到的工具函数
|
||||||
* @author BTMuli<bt-muli@outlook.com>
|
* @author BTMuli<bt-muli@outlook.com>
|
||||||
* @since Alpha v0.2.0
|
* @since Alpha v0.2.0
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* @file core utils transAnno.ts
|
* @file web utils transAnno.ts
|
||||||
* @description 公告数据转换工具
|
* @description 公告数据转换工具
|
||||||
* @author BTMuli<bt-muli@outlook.com>
|
* @author BTMuli<bt-muli@outlook.com>
|
||||||
* @since Alpha v0.1.2
|
* @since Alpha v0.1.2
|
||||||
@@ -12,7 +12,7 @@ const defaultCover = "/source/UI/defaultCover.webp";
|
|||||||
* @description 将获取到的数据转为渲染用的卡片
|
* @description 将获取到的数据转为渲染用的卡片
|
||||||
* @since Alpha v0.1.2
|
* @since Alpha v0.1.2
|
||||||
* @param {BTMuli.Genshin.Announcement.ListData} data 公告数据
|
* @param {BTMuli.Genshin.Announcement.ListData} data 公告数据
|
||||||
* @returns {AnnoListCard[]} 渲染用的卡片
|
* @returns {BTMuli.Genshin.Announcement.ListCard[]} 渲染用的卡片
|
||||||
*/
|
*/
|
||||||
export function getAnnoCard (data: BTMuli.Genshin.Announcement.ListData): BTMuli.Genshin.Announcement.ListCard[] {
|
export function getAnnoCard (data: BTMuli.Genshin.Announcement.ListData): BTMuli.Genshin.Announcement.ListCard[] {
|
||||||
const cards: BTMuli.Genshin.Announcement.ListCard[] = [];
|
const cards: BTMuli.Genshin.Announcement.ListCard[] = [];
|
||||||
53
src/web/utils/getDS.ts
Normal file
53
src/web/utils/getDS.ts
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
/**
|
||||||
|
* @file web utils getDS.ts
|
||||||
|
* @description ds 算法
|
||||||
|
* @author BTMuli<bt-muli@outlook.com>
|
||||||
|
* @since Alpha v0.2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Node
|
||||||
|
import md5 from "js-md5";
|
||||||
|
import qs from "qs";
|
||||||
|
// Tauri.Genshin
|
||||||
|
import { random } from "./tools";
|
||||||
|
import TGConstant from "../constant/TGConstant";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 获取 salt
|
||||||
|
* @since Alpha v0.2.0
|
||||||
|
* @version 2.49.1
|
||||||
|
* @param {string} saltType salt 类型
|
||||||
|
* @returns {string} salt
|
||||||
|
*/
|
||||||
|
function getSalt (saltType: string) {
|
||||||
|
switch (saltType) {
|
||||||
|
case "common":
|
||||||
|
return TGConstant.Salt.Other.X4;
|
||||||
|
case "prod":
|
||||||
|
return TGConstant.Salt.Other.prod;
|
||||||
|
default:
|
||||||
|
return TGConstant.Salt.Other.X4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 获取 ds
|
||||||
|
* @since Alpha v0.2.0
|
||||||
|
* @version 2.49.1
|
||||||
|
* @param {string} saltType salt 类型
|
||||||
|
* @param {string} method 请求方法
|
||||||
|
* @param {string} data 请求数据
|
||||||
|
* @returns {string} ds
|
||||||
|
*/
|
||||||
|
export function getDS (method: string, data: string, saltType: string): string {
|
||||||
|
const salt = getSalt(saltType);
|
||||||
|
const params = {
|
||||||
|
salt,
|
||||||
|
t: Math.floor(Date.now() / 1000).toString(),
|
||||||
|
r: random(100000, 200000).toString(),
|
||||||
|
b: method === "GET" ? "" : data,
|
||||||
|
q: method === "GET" ? data : "",
|
||||||
|
};
|
||||||
|
const md5Str = md5.update(qs.stringify(params)).hex();
|
||||||
|
return `${params.t},${params.r},${md5Str}`;
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* @file core utils getRequestHeader.ts
|
* @file web utils getRequestHeader.ts
|
||||||
* @description 获取请求头
|
* @description 获取请求头
|
||||||
* @author BTMuli<bt-muli@outlook.com>
|
* @author BTMuli<bt-muli@outlook.com>
|
||||||
* @since Alpha v0.2.0
|
* @since Alpha v0.2.0
|
||||||
@@ -12,19 +12,18 @@ import { getDS } from "./getDS";
|
|||||||
* @description 获取请求头
|
* @description 获取请求头
|
||||||
* @since Alpha v0.2.0
|
* @since Alpha v0.2.0
|
||||||
* @param {string} cookie cookie
|
* @param {string} cookie cookie
|
||||||
* @param {string} query query
|
* @param {string} method 请求方法
|
||||||
* @param {string} body body
|
* @param {string} data 请求数据
|
||||||
|
* @param {string} saltType salt 类型
|
||||||
* @returns {Record<string, string>} 请求头
|
* @returns {Record<string, string>} 请求头
|
||||||
*/
|
*/
|
||||||
export function getRequestHeader (cookie: string, query: string, body: string = ""): Record<string, string> {
|
export function getRequestHeader (cookie: string, method: string, data: string, saltType: string): Record<string, string> {
|
||||||
const header = {
|
return {
|
||||||
"User-Agent": TGConstant.BBS.USER_AGENT,
|
"User-Agent": TGConstant.BBS.USER_AGENT,
|
||||||
// "x-requested-with": "com.mihoyo.hyperion",
|
|
||||||
"x-rpc-app_version": TGConstant.BBS.VERSION,
|
"x-rpc-app_version": TGConstant.BBS.VERSION,
|
||||||
"x-rpc-client_type": "5",
|
"x-rpc-client_type": "5",
|
||||||
Referer: "https://webstatic.mihoyo.com/",
|
Referer: "https://webstatic.mihoyo.com/",
|
||||||
DS: getDS(query, body),
|
DS: getDS(method, data, saltType),
|
||||||
cookie,
|
Cookie: cookie,
|
||||||
};
|
};
|
||||||
return header;
|
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* @file core utils parseAnno.ts
|
* @file web utils parseAnno.ts
|
||||||
* @description 解析游戏内公告数据
|
* @description 解析游戏内公告数据
|
||||||
* @author BTMuli<bt-muli@outlook.com>
|
* @author BTMuli<bt-muli@outlook.com>
|
||||||
* @since Alpha v0.1.2
|
* @since Alpha v0.1.2
|
||||||
@@ -1,12 +1,13 @@
|
|||||||
/**
|
/**
|
||||||
* @file core utils tools.ts
|
* @file web utils tools.ts
|
||||||
* @description 应用用到的工具函数
|
* @description 应用用到的工具函数
|
||||||
* @author BTMuli<bt-muli@outlook.com>
|
* @author BTMuli<bt-muli@outlook.com>
|
||||||
* @since Alpha v0.2.0
|
* @since Alpha v0.2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import md5 from "js-md5";
|
// Node
|
||||||
import { stringify } from "qs";
|
import { stringify } from "qs";
|
||||||
|
// TauriGenshin
|
||||||
import TGConstant from "../constant/TGConstant";
|
import TGConstant from "../constant/TGConstant";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -43,16 +44,6 @@ export function getRandomString (length: number): string {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @description md5 加密
|
|
||||||
* @since Alpha v0.2.0
|
|
||||||
* @param {string} data 要加密的内容
|
|
||||||
* @returns {string} 加密后的内容
|
|
||||||
*/
|
|
||||||
export function MD5 (data: string): string {
|
|
||||||
return md5.update(data).hex();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description 获取随机数
|
* @description 获取随机数
|
||||||
* @since Alpha v0.2.0
|
* @since Alpha v0.2.0
|
||||||
@@ -100,17 +91,17 @@ export function getServerByUid (uid: string): string {
|
|||||||
// 获取第一个字符
|
// 获取第一个字符
|
||||||
const first = uid[0];
|
const first = uid[0];
|
||||||
// 1-4 为国服-天空岛
|
// 1-4 为国服-天空岛
|
||||||
if (first >= "1" && first <= "4") return TGConstant.SERVER.CN_ISLAND;
|
if (first >= "1" && first <= "4") return TGConstant.Server.CN_ISLAND;
|
||||||
// 5 为国服-世界树
|
// 5 为国服-世界树
|
||||||
if (first === "5") return TGConstant.SERVER.CN_TREE;
|
if (first === "5") return TGConstant.Server.CN_TREE;
|
||||||
// 6 为美服
|
// 6 为美服
|
||||||
if (first === "6") return TGConstant.SERVER.OS_USA;
|
if (first === "6") return TGConstant.Server.OS_USA;
|
||||||
// 7 为欧服
|
// 7 为欧服
|
||||||
if (first === "7") return TGConstant.SERVER.OS_EURO;
|
if (first === "7") return TGConstant.Server.OS_EURO;
|
||||||
// 8 为亚服
|
// 8 为亚服
|
||||||
if (first === "8") return TGConstant.SERVER.OS_AISA;
|
if (first === "8") return TGConstant.Server.OS_ASIA;
|
||||||
// 9 为台服
|
// 9 为台服
|
||||||
if (first === "9") return TGConstant.SERVER.OS_CHT;
|
if (first === "9") return TGConstant.Server.OS_CHT;
|
||||||
// 其他情况返回未知
|
// 其他情况返回未知
|
||||||
return TGConstant.SERVER.UNKNOWN;
|
return TGConstant.Server.UNKNOWN;
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user