mirror of
https://github.com/BTMuli/TeyvatGuide.git
synced 2025-12-12 09:18:14 +08:00
✨ feat(tokens): 完成 tokens 的获取
This commit is contained in:
@@ -2,16 +2,20 @@
|
||||
* @file core request TGRequest.ts
|
||||
* @description 应用用到的请求函数
|
||||
* @author BTMuli<bt-muli@outlook.com>
|
||||
* @since Alpha v0.1.2
|
||||
* @since Alpha v0.2.0
|
||||
*/
|
||||
|
||||
import { getAnnoList, getAnnoContent } from "./getAnno";
|
||||
import { getTokens } from "./getTokens";
|
||||
|
||||
const TGRequest = {
|
||||
Anno: {
|
||||
getList: getAnnoList,
|
||||
getContent: getAnnoContent,
|
||||
},
|
||||
User: {
|
||||
getTokens,
|
||||
},
|
||||
};
|
||||
|
||||
export default TGRequest;
|
||||
|
||||
@@ -2,21 +2,24 @@
|
||||
* @file core request getTokens.ts
|
||||
* @description 获取游戏 Token
|
||||
* @author BTMuli<bt-muli@outlook.com>
|
||||
* @since Alpha v0.1.3
|
||||
* @since Alpha v0.2.0
|
||||
*/
|
||||
|
||||
// tauri
|
||||
import { http } from "@tauri-apps/api";
|
||||
// api
|
||||
import TGApi from "../api/TGApi";
|
||||
// utils
|
||||
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 header = getRequestHeader(cookie);
|
||||
return await http.fetch(url, {
|
||||
return await http.fetch<BTMuli.User.Response.Token>(url, {
|
||||
method: "GET",
|
||||
headers: header,
|
||||
}).then((res) => {
|
||||
console.log(res.data);
|
||||
return res.data;
|
||||
if (res.data.retcode !== 0) return res.data;
|
||||
return res.data.data.list;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
* @file core utils getRequestHeader.ts
|
||||
* @description 获取请求头
|
||||
* @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 = {
|
||||
"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",
|
||||
|
||||
@@ -1,6 +1,65 @@
|
||||
<template>
|
||||
<h1>用户页</h1>
|
||||
<div class="testDiv">
|
||||
<v-btn @click="getTokens">
|
||||
获取 Tokens
|
||||
</v-btn>
|
||||
<v-btn @click="saveToken">
|
||||
保存 Token 到数据库
|
||||
</v-btn>
|
||||
</div>
|
||||
</template>
|
||||
<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>
|
||||
<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;
|
||||
}
|
||||
|
||||
/**
|
||||
* @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 已有数据表跟触发器不变的情况下,更新数据库数据
|
||||
* @memberof TGSqlite
|
||||
|
||||
Reference in New Issue
Block a user