📄 adp-upload-tool.test.ts

/**
 * ADP Upload Tool 测试文件
 * 
 * 使用方式:
 * 
 * 1. 使用环境变量(推荐,与插件配置一致):
 *    ADP_OPENCLAW_CLIENT_TOKEN=your-token npx tsx src/adp-upload-tool.test.ts <filePath>
 * 
 * 2. 使用命令行参数:
 *    npx tsx src/adp-upload-tool.test.ts --token <botToken> <filePath>
 */

import { AdpUploader, getStorageCredential } from "./adp-upload-tool.js";

async function main() {
  const args = process.argv.slice(2);
  
  let botToken: string | undefined;
  let filePaths: string[] = [];
  
  // 解析参数
  for (let i = 0; i < args.length; i++) {
    if (args[i] === "--token" && i + 1 < args.length) {
      botToken = args[i + 1];
      i++; // 跳过下一个参数
    } else if (!args[i].startsWith("--")) {
      filePaths.push(args[i]);
    }
  }
  
  // 如果没有通过参数传入 token,尝试从环境变量读取
  if (!botToken) {
    botToken = process.env.ADP_OPENCLAW_CLIENT_TOKEN;
  }

  if (filePaths.length === 0) {
    console.log("ADP Upload Tool 测试");
    console.log("");
    console.log("使用方式:");
    console.log("  1. 使用环境变量(推荐,与插件配置一致):");
    console.log("     ADP_OPENCLAW_CLIENT_TOKEN=your-token npx tsx src/adp-upload-tool.test.ts <filePath>");
    console.log("");
    console.log("  2. 使用命令行参数:");
    console.log("     npx tsx src/adp-upload-tool.test.ts --token <botToken> <filePath>");
    console.log("");
    console.log("示例:");
    console.log("  npx tsx src/adp-upload-tool.test.ts --token my-bot-token ./test.txt");
    console.log("  ADP_OPENCLAW_CLIENT_TOKEN=my-token npx tsx src/adp-upload-tool.test.ts ./file1.txt ./file2.pdf");
    process.exit(1);
  }

  if (!botToken) {
    console.error("错误: 未提供 botToken");
    console.error("请通过 --token 参数或 ADP_OPENCLAW_CLIENT_TOKEN 环境变量设置");
    process.exit(1);
  }

  console.log("=".repeat(60));
  console.log("ADP Upload Tool 测试");
  console.log("=".repeat(60));
  console.log(`Bot Token: ${botToken.substring(0, 10)}...`);
  console.log(`文件列表: ${filePaths.join(", ")}`);
  console.log("");

  // 测试获取临时密钥
  console.log("1. 测试获取临时密钥...");
  try {
    const credential = await getStorageCredential(botToken);
    console.log("   ✓ 获取密钥成功");
    console.log(`   - Bucket: ${credential.bucket}`);
    console.log(`   - Region: ${credential.region}`);
    console.log(`   - File Path: ${credential.file_path}`);
    console.log(`   - Secret ID: ${credential.credentials.tmp_secret_id.substring(0, 10)}...`);
    console.log(`   - 有效期至: ${new Date(credential.expired_time * 1000).toLocaleString()}`);
    console.log("");
  } catch (error) {
    console.log("   ✗ 获取密钥失败");
    console.log(`   - 错误: ${error instanceof Error ? error.message : error}`);
    process.exit(1);
  }

  // 使用 AdpUploader 类测试上传
  console.log("2. 使用 AdpUploader 测试上传...");
  const uploader = new AdpUploader({ clientToken: botToken });
  console.log(`   - 配置状态: ${uploader.isConfigured() ? "已配置" : "未配置"}`);
  console.log(`   - Token 预览: ${uploader.getTokenPreview()}`);
  console.log("");

  if (filePaths.length === 1) {
    // 单文件上传
    console.log("3. 测试单文件上传...");
    const result = await uploader.upload(filePaths[0]);
    if (result.ok) {
      console.log("   ✓ 上传成功");
      console.log(`   - 下载链接: ${result.fileUrl}`);
    } else {
      console.log("   ✗ 上传失败");
      console.log(`   - 错误: ${result.error}`);
    }
  } else {
    // 批量上传
    console.log("3. 测试批量上传...");
    const results = await uploader.uploadMultiple(filePaths);
    results.forEach((result, index) => {
      const filePath = filePaths[index];
      if (result.ok) {
        console.log(`   ✓ [${filePath}] 上传成功`);
        console.log(`     下载链接: ${result.fileUrl}`);
      } else {
        console.log(`   ✗ [${filePath}] 上传失败`);
        console.log(`     错误: ${result.error}`);
      }
    });
  }

  console.log("");
  console.log("=".repeat(60));
  console.log("测试完成");
  console.log("=".repeat(60));
}

main().catch(console.error);