//远端rkey获取 import { log } from '@/common/utils' interface ServerRkeyData{ group_rkey: string; private_rkey: string; expired_time: number; } class RkeyManager { serverUrl: string = ''; private rkeyData: ServerRkeyData = { group_rkey: '', private_rkey: '', expired_time: 0 }; constructor(serverUrl: string) { this.serverUrl = serverUrl; } async getRkey(){ if (this.isExpired()) { try { await this.refreshRkey(); } catch (e) { log('获取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 { //刷新rkey this.rkeyData = await this.fetchServerRkey(); } async fetchServerRkey(){ return new Promise((resolve, reject) => { fetch(this.serverUrl) .then(response => { if (!response.ok) { return reject(response.statusText); // 请求失败,返回错误信息 } return response.json(); // 解析 JSON 格式的响应体 }) .then(data => { resolve(data); }) .catch(error => { reject(error); }); }); } } export const rkeyManager = new RkeyManager('http://napcat-sign.wumiao.wang:2082/rkey');