diff --git a/src/core/api/Passport.ts b/src/core/api/Passport.ts new file mode 100644 index 00000000..bcd9780b --- /dev/null +++ b/src/core/api/Passport.ts @@ -0,0 +1,14 @@ +/** + * @file core api Passport.ts + * @description 定义 Passport API + * @author BTMuli + * @since Alpha v0.2.0 + */ + +const PassportApi = "https://passport.mihoyo.com/"; // 基础 API +const PassportV4Api = "https://passport-api-v4.mihoyo.com/"; // 基础 API +const PassportAuthApi = `${PassportApi}account/auth/api/`; // 认证 API + +export const PassportTokenApi = `${PassportAuthApi}getLTokenBySToken`; // 根据 stoken 获取 ltoken +export const PassportCookieTokenApi = `${PassportAuthApi}getCookieAccountInfoBySToken`; // 根据 Cookie 获取 Token +export const PassportVetifyApi = `${PassportV4Api}account/ma-cn-session/web/verifyLtoken`; // 验证 stoken 有效性 diff --git a/src/core/api/TGApi.ts b/src/core/api/TGApi.ts index e712e67f..f0dfb8f6 100644 --- a/src/core/api/TGApi.ts +++ b/src/core/api/TGApi.ts @@ -2,11 +2,12 @@ * @file core api TGApi.ts * @description 应用用到的 API * @author BTMuli - * @since Alpha v0.1.3 + * @since Alpha v0.2.0 */ import { ENKA_API } from "./ENKA"; import { Hk4eAnnoListApi, Hk4eAnnoContentApi, Hk4eAnnoQuery } from "./Hk4e"; +import { PassportTokenApi, PassportCookieTokenApi, PassportVetifyApi } from "./Passport"; import { TakumiTokensApi } from "./Takumi"; // 应用 API @@ -15,7 +16,12 @@ const TGApi = { GameAnnoContent: Hk4eAnnoContentApi, // 游戏公告内容 API GameAnnoQuery: Hk4eAnnoQuery, // 游戏公告 Query GameEnka: ENKA_API, // 游戏 ENKA API - GameTokens: TakumiTokensApi, // 游戏 Token API + GameTokens: { + getTokens: TakumiTokensApi, // 根据 login_ticket 获取游戏 Token + getLToken: PassportTokenApi, // 根据 stoken 获取 ltoken + getCookieToken: PassportCookieTokenApi, // 根据 Cookie 获取 Token + vetifyStoken: PassportVetifyApi, // 验证 stoken 有效性 + }, }; export default TGApi; diff --git a/src/core/request/TGRequest.ts b/src/core/request/TGRequest.ts index 87743feb..5c6f399f 100644 --- a/src/core/request/TGRequest.ts +++ b/src/core/request/TGRequest.ts @@ -6,7 +6,7 @@ */ import { getAnnoList, getAnnoContent } from "./getAnno"; -import { getTokens } from "./getTokens"; +import { getTokensByLoginTicket, getLtokenByStoken, getCookieTokenByStoken, vetifyStoken } from "./getTokens"; const TGRequest = { Anno: { @@ -14,7 +14,10 @@ const TGRequest = { getContent: getAnnoContent, }, User: { - getTokens, + getTokens: getTokensByLoginTicket, + getLToken: getLtokenByStoken, + getCookieToken: getCookieTokenByStoken, + vetifyStoken, }, }; diff --git a/src/core/request/getTokens.ts b/src/core/request/getTokens.ts index 8de2c1ee..ebe74318 100644 --- a/src/core/request/getTokens.ts +++ b/src/core/request/getTokens.ts @@ -12,8 +12,14 @@ import TGApi from "../api/TGApi"; // utils import { getRequestHeader } from "../utils/getRequestHeader"; -export async function getTokens (cookie: BTMuli.User.Base.Cookie): Promise { - const url = `${TGApi.GameTokens}?login_ticket=${cookie.login_ticket}&token_types=3&uid=${cookie.login_uid}`; +/** + * @description 根据 login_ticket 获取游戏 Token,包括 stoken 和 ltoken + * @since Alpha v0.2.0 + * @param {BTMuli.User.Base.Cookie} cookie 用户 Cookie + * @returns {Promise} + */ +export async function getTokensByLoginTicket (cookie: BTMuli.User.Base.Cookie): Promise { + const url = `${TGApi.GameTokens.getTokens}?login_ticket=${cookie.login_ticket}&token_types=3&uid=${cookie.login_uid}`; const header = getRequestHeader(cookie); return await http.fetch(url, { method: "GET", @@ -23,3 +29,60 @@ export async function getTokens (cookie: BTMuli.User.Base.Cookie): Promise} + */ +export async function getLtokenByStoken (cookie: BTMuli.User.Base.Cookie, stoken: string): Promise { + const url = `${TGApi.GameTokens.getLToken}?stoken=${stoken}`; + const header = getRequestHeader(cookie); + return await http.fetch(url, { + method: "GET", + 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} + */ +export async function getCookieTokenByStoken (cookie: BTMuli.User.Base.Cookie, stoken: string): Promise { + const url = `${TGApi.GameTokens.getCookieToken}?stoken=${stoken}`; + const header = getRequestHeader(cookie); + return await http.fetch(url, { + method: "GET", + headers: header, + }).then((res) => { + console.log(res.data); + if (res.data.retcode !== 0) return res.data; + }); +} + +/** + * @description 验证 stoken 有效性 + * @since Alpha v0.2.0 + * @param {BTMuli.User.Base.Cookie} cookie 用户 Cookie + * @param {string} stoken stoken + * @returns {Promise} + */ +export async function vetifyStoken (cookie: BTMuli.User.Base.Cookie, stoken: string): Promise { + const url = `${TGApi.GameTokens.vetifyStoken}?stoken=${stoken}`; + const header = getRequestHeader(cookie); + return await http.fetch(url, { + method: "GET", + headers: header, + }).then((res) => { + console.log(res.data); + if (res.data.retcode !== 0) return res.data; + }); +}