mirror of
https://github.com/BTMuli/TeyvatGuide.git
synced 2025-12-14 09:38:13 +08:00
✨ feat(tokens): 完成 tokens 的获取
This commit is contained in:
@@ -2,16 +2,20 @@
|
|||||||
* @file core request TGRequest.ts
|
* @file core request TGRequest.ts
|
||||||
* @description 应用用到的请求函数
|
* @description 应用用到的请求函数
|
||||||
* @author BTMuli<bt-muli@outlook.com>
|
* @author BTMuli<bt-muli@outlook.com>
|
||||||
* @since Alpha v0.1.2
|
* @since Alpha v0.2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { getAnnoList, getAnnoContent } from "./getAnno";
|
import { getAnnoList, getAnnoContent } from "./getAnno";
|
||||||
|
import { getTokens } from "./getTokens";
|
||||||
|
|
||||||
const TGRequest = {
|
const TGRequest = {
|
||||||
Anno: {
|
Anno: {
|
||||||
getList: getAnnoList,
|
getList: getAnnoList,
|
||||||
getContent: getAnnoContent,
|
getContent: getAnnoContent,
|
||||||
},
|
},
|
||||||
|
User: {
|
||||||
|
getTokens,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default TGRequest;
|
export default TGRequest;
|
||||||
|
|||||||
@@ -2,21 +2,24 @@
|
|||||||
* @file core request getTokens.ts
|
* @file core request getTokens.ts
|
||||||
* @description 获取游戏 Token
|
* @description 获取游戏 Token
|
||||||
* @author BTMuli<bt-muli@outlook.com>
|
* @author BTMuli<bt-muli@outlook.com>
|
||||||
* @since Alpha v0.1.3
|
* @since Alpha v0.2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// tauri
|
||||||
import { http } from "@tauri-apps/api";
|
import { http } from "@tauri-apps/api";
|
||||||
|
// api
|
||||||
import TGApi from "../api/TGApi";
|
import TGApi from "../api/TGApi";
|
||||||
|
// utils
|
||||||
import { getRequestHeader } from "../utils/getRequestHeader";
|
import { getRequestHeader } from "../utils/getRequestHeader";
|
||||||
|
|
||||||
export async function getTokens (cookie: Record<string, string>): Promise<unknown> {
|
export async function getTokens (cookie: BTMuli.User.Base.Cookie): Promise<BTMuli.User.Base.TokenItem[] | BTMuli.Genshin.Base.Response> {
|
||||||
const url = `${TGApi.GameTokens}?login_ticket=${cookie.login_ticket}&token_types=3&uid=${cookie.login_uid}`;
|
const url = `${TGApi.GameTokens}?login_ticket=${cookie.login_ticket}&token_types=3&uid=${cookie.login_uid}`;
|
||||||
const header = getRequestHeader(cookie);
|
const header = getRequestHeader(cookie);
|
||||||
return await http.fetch(url, {
|
return await http.fetch<BTMuli.User.Response.Token>(url, {
|
||||||
method: "GET",
|
method: "GET",
|
||||||
headers: header,
|
headers: header,
|
||||||
}).then((res) => {
|
}).then((res) => {
|
||||||
console.log(res.data);
|
if (res.data.retcode !== 0) return res.data;
|
||||||
return res.data;
|
return res.data.data.list;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
* @file core utils getRequestHeader.ts
|
* @file core utils getRequestHeader.ts
|
||||||
* @description 获取请求头
|
* @description 获取请求头
|
||||||
* @author BTMuli<bt-muli@outlook.com>
|
* @author BTMuli<bt-muli@outlook.com>
|
||||||
* @since Alpha v0.1.3
|
* @since Alpha v0.2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export function getRequestHeader (cookie: Record<string, string>): Record<string, string> {
|
export function getRequestHeader (cookie: BTMuli.User.Base.Cookie): Record<string, string> {
|
||||||
const header = {
|
const header = {
|
||||||
"User-Agent": "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.34 Tauri.Genshin/0.1.2",
|
"User-Agent": "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.34 Tauri.Genshin/0.1.2",
|
||||||
"x-rpc-app_version": "2.0.0",
|
"x-rpc-app_version": "2.0.0",
|
||||||
|
|||||||
@@ -1,6 +1,65 @@
|
|||||||
<template>
|
<template>
|
||||||
<h1>用户页</h1>
|
<h1>用户页</h1>
|
||||||
|
<div class="testDiv">
|
||||||
|
<v-btn @click="getTokens">
|
||||||
|
获取 Tokens
|
||||||
|
</v-btn>
|
||||||
|
<v-btn @click="saveToken">
|
||||||
|
保存 Token 到数据库
|
||||||
|
</v-btn>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
// vue
|
||||||
|
import { onMounted, ref } from "vue";
|
||||||
|
// tauri
|
||||||
|
import { dialog } from "@tauri-apps/api";
|
||||||
|
// utils
|
||||||
|
import TGRequest from "../core/request/TGRequest";
|
||||||
|
import TGSqlite from "../utils/TGSqlite";
|
||||||
|
|
||||||
|
const cookie = ref({} as BTMuli.User.Base.Cookie);
|
||||||
|
const tokens = ref([] as BTMuli.User.Base.TokenItem[]);
|
||||||
|
|
||||||
|
export interface tokenRes {
|
||||||
|
name: string;
|
||||||
|
token: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(async () => {
|
||||||
|
cookie.value = JSON.parse(await TGSqlite.getCookie()) as BTMuli.User.Base.Cookie;
|
||||||
|
});
|
||||||
|
|
||||||
|
async function getTokens () {
|
||||||
|
const tokenRes = await TGRequest.User.getTokens(cookie.value);
|
||||||
|
if (Array.isArray(tokenRes)) tokens.value = tokenRes;
|
||||||
|
else {
|
||||||
|
console.log(tokenRes);
|
||||||
|
tokens.value = [];
|
||||||
|
await dialog.message(
|
||||||
|
tokenRes.message,
|
||||||
|
{
|
||||||
|
type: "error",
|
||||||
|
title: `获取 Token 失败,retcode: ${tokenRes.retcode}`,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function saveToken () {
|
||||||
|
console.log(tokens.value);
|
||||||
|
const lToken = tokens.value.find((item) => item.name === "ltoken");
|
||||||
|
const sToken = tokens.value.find((item) => item.name === "stoken");
|
||||||
|
if (lToken) await TGSqlite.saveAppData("ltoken", lToken.token);
|
||||||
|
if (sToken) await TGSqlite.saveAppData("stoken", sToken.token);
|
||||||
|
console.log("保存成功");
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<style scoped></style>
|
<style scoped>
|
||||||
|
.testDiv {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: space-around;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
66
src/types/UserRequest.d.ts
vendored
Normal file
66
src/types/UserRequest.d.ts
vendored
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
/**
|
||||||
|
* @file types UserRequest.d.ts
|
||||||
|
* @description 用户请求相关类型定义文件
|
||||||
|
* @author BTMuli<bt-muli@outlook.com>
|
||||||
|
* @since Alpha v0.2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare namespace BTMuli.User.Base {
|
||||||
|
/**
|
||||||
|
* @description 用户 cookie 类型
|
||||||
|
* @since Alpha v0.2.0
|
||||||
|
* @description 这边只写了需要的,其他的可以自行添加
|
||||||
|
* @interface Cookie
|
||||||
|
* @property {string} login_ticket 登录凭证
|
||||||
|
* @property {string} login_uid 登录 UID
|
||||||
|
* @property {string} DEVICEFP 设备指纹
|
||||||
|
* @returns Cookie
|
||||||
|
*/
|
||||||
|
export interface Cookie {
|
||||||
|
login_ticket: string
|
||||||
|
login_uid: string
|
||||||
|
DEVICEFP: string
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 游戏 Token
|
||||||
|
* @since Alpha v0.2.0
|
||||||
|
* @interface TokenItem
|
||||||
|
* @property {TokenType} name 游戏 Token 名称
|
||||||
|
* @property {string} token 游戏 Token
|
||||||
|
* @returns TokenItem
|
||||||
|
*/
|
||||||
|
export interface TokenItem {
|
||||||
|
name: TokenType
|
||||||
|
token: string
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 游戏 Token 类型
|
||||||
|
* @since Alpha v0.2.0
|
||||||
|
* @enum {string}
|
||||||
|
* @property {string} ltoken longTime Token
|
||||||
|
* @property {string} stoken shortTime Token
|
||||||
|
* @returns string
|
||||||
|
*/
|
||||||
|
export enum TokenType {
|
||||||
|
LToken = "ltoken",
|
||||||
|
SToken = "stoken",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
declare namespace BTMuli.User.Response {
|
||||||
|
/**
|
||||||
|
* @description 获取 ltoken 跟 stoken 的响应
|
||||||
|
* @since Alpha v0.2.0
|
||||||
|
* @interface Token
|
||||||
|
* @extends {BTMuli.Genshin.Base.Response}
|
||||||
|
* @property {TokenItem[]} data.list 游戏 Token
|
||||||
|
* @returns {Token}
|
||||||
|
*/
|
||||||
|
export interface Token extends BTMuli.Genshin.Base.Response {
|
||||||
|
data: {
|
||||||
|
list: TokenItem[]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -98,6 +98,24 @@ class TGSqlite {
|
|||||||
return res[0].value;
|
return res[0].value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 保存 appData
|
||||||
|
* @memberof TGSqlite
|
||||||
|
* @since Alpha v0.2.0
|
||||||
|
* @param {string} key
|
||||||
|
* @param {string} value
|
||||||
|
* @returns {Promise<void>}
|
||||||
|
*/
|
||||||
|
public async saveAppData (key: string, value: string): Promise<void> {
|
||||||
|
const db = await Database.load(this.dbPath);
|
||||||
|
const sql = `
|
||||||
|
INSERT INTO AppData (key, value, updated)
|
||||||
|
VALUES ('${key}', '${value}', datetime('now', 'localtime'))
|
||||||
|
ON CONFLICT(key) DO UPDATE SET value = '${value}', updated = datetime('now', 'localtime');`;
|
||||||
|
await db.execute(sql);
|
||||||
|
await db.close();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description 已有数据表跟触发器不变的情况下,更新数据库数据
|
* @description 已有数据表跟触发器不变的情况下,更新数据库数据
|
||||||
* @memberof TGSqlite
|
* @memberof TGSqlite
|
||||||
|
|||||||
Reference in New Issue
Block a user