恢复内容: - quark驱动拆解为7个子模块 (quark-api/auth/share/storage/cleanup/rename/ad-cleanup) - 工具模块: utils/crypto, utils/logger, utils/proxy-agent - 配置校验: config/startup-validator - 接线: main.ts(checkStartup), credential.service.ts(加密Cookie), admin.routes.ts(代理测试) - quark.driver.ts 从1533行巨兽瘦身到130行壳子
63 lines
2.5 KiB
TypeScript
63 lines
2.5 KiB
TypeScript
// @ts-nocheck
|
|
import * as quark_api from "./quark-api";
|
|
|
|
/**
|
|
* 认证模块 — Cookie 验证、账号信息获取、QR 登录状态检查。
|
|
* 所有方法以 cookie 字符串为参数,不持有驱动状态。
|
|
*/
|
|
// ==================== Validate ====================
|
|
/**
|
|
* Validate the cookie by fetching user info.
|
|
*/
|
|
export async function validate(cookie) {
|
|
const MAX_RETRIES = 2;
|
|
for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
|
|
try {
|
|
// Use account/info API (same as quark-auto-save project)
|
|
// Only needs __uid cookie, no mparam (kps/sign/vcode) required
|
|
const url = 'https://pan.quark.cn/account/info?fr=pc&platform=pc';
|
|
const response = await fetch(url, {
|
|
headers: {
|
|
...quark_api.getHeaders(cookie),
|
|
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) quark-cloud-drive/3.14.2 Chrome/112.0.5615.165 Electron/24.1.3.8 Safari/537.36 Channel/pckk_other_ch',
|
|
},
|
|
signal: AbortSignal.timeout(15000),
|
|
});
|
|
if (!response.ok)
|
|
return false;
|
|
const data = await response.json();
|
|
if (data?.data?.nickname)
|
|
return true;
|
|
}
|
|
catch (err) {
|
|
if (attempt < MAX_RETRIES) {
|
|
console.log(`[Quark] validate attempt ${attempt + 1} failed: ${err.message}, retrying...`);
|
|
await new Promise(r => setTimeout(r, 2000));
|
|
continue;
|
|
}
|
|
console.log(`[Quark] validate all ${MAX_RETRIES + 1} attempts failed: ${err.message}`);
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
/** Fetch nickname from Quark account info (same API used by quark-auto-save) */
|
|
export async function fetchNickname(cookie) {
|
|
try {
|
|
const url = 'https://pan.quark.cn/account/info?fr=pc&platform=pc';
|
|
const response = await fetch(url, {
|
|
headers: {
|
|
...quark_api.getHeaders(cookie),
|
|
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) quark-cloud-drive/3.14.2 Chrome/112.0.5615.165 Electron/24.1.3.8 Safari/537.36 Channel/pckk_other_ch',
|
|
},
|
|
signal: AbortSignal.timeout(15000),
|
|
});
|
|
if (!response.ok)
|
|
return null;
|
|
const data = await response.json();
|
|
return data?.data?.nickname || null;
|
|
}
|
|
catch {
|
|
return null;
|
|
}
|
|
}
|