release: v0.4.0
This commit is contained in:
@@ -1,4 +1,7 @@
|
||||
// Native fetch available in Node 20+
|
||||
// @ts-nocheck
|
||||
// 阿里云盘驱动 — 分享链接验证
|
||||
// 依赖 aliyun-api.ts 统一端点模块 — URL 不再硬编码
|
||||
import { ALIYUN_API_HOST, ALIYUN_WEB_HOST, EP as AE, getShareHeaders } from './aliyun-api';
|
||||
|
||||
export interface AliyunConfig {
|
||||
cookie?: string;
|
||||
@@ -7,7 +10,6 @@ export interface AliyunConfig {
|
||||
|
||||
export class AliyunDriver {
|
||||
private config: AliyunConfig;
|
||||
private baseUrl = 'https://api.aliyundrive.com';
|
||||
|
||||
constructor(config: AliyunConfig = {}) {
|
||||
this.config = config;
|
||||
@@ -38,13 +40,6 @@ export class AliyunDriver {
|
||||
/**
|
||||
* Validate a share link using Aliyun's public anonymous API.
|
||||
* No cookie or token required — this endpoint is open.
|
||||
*
|
||||
* API:
|
||||
* POST https://api.aliyundrive.com/v2/share_link/get_share_by_anonymous
|
||||
* Body: { "share_id": "XXXYYY", "share_pwd": "" }
|
||||
*
|
||||
* Success: returns share_name, file_infos, creator info
|
||||
* Failure: returns error code (ShareLinkExpired, ShareLinkCancelled, etc.)
|
||||
*/
|
||||
async validateShareLink(shareUrl: string): Promise<{
|
||||
valid: boolean;
|
||||
@@ -59,15 +54,10 @@ export class AliyunDriver {
|
||||
|
||||
try {
|
||||
const response = await fetch(
|
||||
`${this.baseUrl}/v2/share_link/get_share_by_anonymous`,
|
||||
ALIYUN_API_HOST + AE.SHARE_GET_BY_ANONYMOUS,
|
||||
{
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
||||
'Referer': 'https://www.aliyundrive.com/',
|
||||
'Accept-Language': 'zh-CN,zh;q=0.9',
|
||||
},
|
||||
headers: getShareHeaders(),
|
||||
body: JSON.stringify({
|
||||
share_id: shareId,
|
||||
share_pwd: '',
|
||||
@@ -77,37 +67,42 @@ export class AliyunDriver {
|
||||
);
|
||||
|
||||
if (!response.ok) {
|
||||
return { valid: false, message: `HTTP ${response.status}: API 请求失败` };
|
||||
return { valid: false, message: 'HTTP ' + response.status + ': API 请求失败' };
|
||||
}
|
||||
|
||||
const data = await response.json() as any;
|
||||
const data = await response.json();
|
||||
|
||||
// Check for error codes
|
||||
if (data.code) {
|
||||
switch (data.code) {
|
||||
case 'ShareLinkExpired':
|
||||
return { valid: false, message: '分享已失效(已过期)' };
|
||||
case 'ShareLinkCancelled':
|
||||
return { valid: false, message: '分享已被取消' };
|
||||
case 'NotFound.ShareLink':
|
||||
return { valid: false, message: '分享链接不存在' };
|
||||
case 'ShareLinkPasswordIncorrect':
|
||||
return { valid: true, message: '需要提取码(链接有效)' };
|
||||
default:
|
||||
return { valid: false, message: data.message || `未知错误 (${data.code})` };
|
||||
}
|
||||
const errorMessages: Record<string, string> = {
|
||||
'ShareLinkExpired': '分享链接已过期',
|
||||
'ShareLinkCancelled': '分享链接已取消',
|
||||
'ShareLinkNotFound': '分享链接不存在',
|
||||
'ForbiddenFileInTheDrive': '文件已被禁止访问',
|
||||
'UserNotAuthenticated': '需要登录才能访问',
|
||||
'InvalidResource.NotFound': '资源不存在',
|
||||
};
|
||||
return {
|
||||
valid: false,
|
||||
message: errorMessages[data.code] || data.message || 'API 返回错误: ' + data.code,
|
||||
};
|
||||
}
|
||||
|
||||
// Success — valid share link
|
||||
const fileInfos = data.file_infos || [];
|
||||
// 成功:提取分享信息
|
||||
const fileCount = data.file_infos?.length || 0;
|
||||
const shareName = data.share_name || data.display_name || '';
|
||||
|
||||
return {
|
||||
valid: true,
|
||||
message: `有效链接(${fileInfos.length} 个文件)`,
|
||||
fileCount: fileInfos.length,
|
||||
shareName: data.share_name || '',
|
||||
message: '链接有效',
|
||||
fileCount,
|
||||
shareName,
|
||||
};
|
||||
} catch (err: any) {
|
||||
return { valid: false, message: `网络错误: ${err.message || err}` };
|
||||
} catch (err) {
|
||||
return { valid: false, message: '网络错误: ' + (err instanceof Error ? err.message : String(err)) };
|
||||
}
|
||||
}
|
||||
|
||||
async getNickname(): Promise<string | null> {
|
||||
return this.config.nickname || null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user