mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-07-19 12:03:37 +00:00
62 lines
1.8 KiB
TypeScript
62 lines
1.8 KiB
TypeScript
import { LogWrapper } from '@/common/log';
|
|
import { RequestUtil } from '@/common/request';
|
|
|
|
interface ServerRkeyData {
|
|
group_rkey: string;
|
|
private_rkey: string;
|
|
expired_time: number;
|
|
}
|
|
|
|
export class RkeyManager {
|
|
serverUrl: string[] = [];
|
|
logger: LogWrapper;
|
|
private rkeyData: ServerRkeyData = {
|
|
group_rkey: '',
|
|
private_rkey: '',
|
|
expired_time: 0,
|
|
};
|
|
|
|
constructor(serverUrl: string[], logger: LogWrapper) {
|
|
this.logger = logger;
|
|
this.serverUrl = serverUrl;
|
|
}
|
|
|
|
async getRkey() {
|
|
if (this.isExpired()) {
|
|
try {
|
|
await this.refreshRkey();
|
|
} catch (e) {
|
|
throw new Error(`获取rkey失败: ${e}`);//外抛
|
|
}
|
|
}
|
|
return this.rkeyData;
|
|
}
|
|
|
|
isExpired(): boolean {
|
|
const now = new Date().getTime() / 1000;
|
|
// console.log(`now: ${now}, expired_time: ${this.rkeyData.expired_time}`);
|
|
return now > this.rkeyData.expired_time;
|
|
}
|
|
|
|
async refreshRkey(): Promise<any> {
|
|
//刷新rkey
|
|
for (const url of this.serverUrl) {
|
|
try {
|
|
const temp = await RequestUtil.HttpGetJson<ServerRkeyData>(url, 'GET');
|
|
this.rkeyData = {
|
|
group_rkey: temp.group_rkey.slice(6),
|
|
private_rkey: temp.private_rkey.slice(6),
|
|
expired_time: temp.expired_time
|
|
};
|
|
} catch (e) {
|
|
this.logger.logError(`[Rkey] Get Rkey ${url} Error `, e);
|
|
//是否为最后一个url
|
|
if (url === this.serverUrl[this.serverUrl.length - 1]) {
|
|
throw new Error(`获取rkey失败: ${e}`);//外抛
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|