set-voc-token.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #!/usr/bin/env node
  2. const fs = require('fs');
  3. const os = require('os');
  4. const path = require('path');
  5. const args = process.argv.slice(2);
  6. const tokenArg = args.find(arg => !arg.startsWith('--'));
  7. const token = tokenArg || (args.find(arg => arg.startsWith('--token=')) || '').slice(8);
  8. if (!token) {
  9. console.log('用法: node scripts/tools/set-voc-token.js <session-token>');
  10. console.log('示例: node scripts/tools/set-voc-token.js r:1234567890abcdef1234567890abcdef');
  11. process.exit(1);
  12. }
  13. if (!/^r:[0-9a-f]{32}$/i.test(token)) {
  14. console.error('无效 token:应为 Parse session token,格式示例 r:1234567890abcdef1234567890abcdef');
  15. process.exit(1);
  16. }
  17. const configDir = path.join(os.homedir(), '.openclaw');
  18. const configPath = path.join(configDir, 'voc-credentials.json');
  19. let config = {};
  20. if (fs.existsSync(configPath)) {
  21. try {
  22. const raw = fs.readFileSync(configPath, 'utf-8').trim();
  23. config = raw ? JSON.parse(raw) : {};
  24. } catch (error) {
  25. console.error(`读取现有配置失败: ${error.message}`);
  26. process.exit(1);
  27. }
  28. }
  29. config.vocToken = token;
  30. try {
  31. fs.mkdirSync(configDir, { recursive: true });
  32. fs.writeFileSync(configPath, `${JSON.stringify(config, null, 2)}\n`, 'utf-8');
  33. } catch (error) {
  34. console.error(`写入配置失败: ${error.message}`);
  35. process.exit(1);
  36. }
  37. const masked = `${token.slice(0, 6)}...${token.slice(-4)}`;
  38. console.log(`已写入 vocToken: ${masked}`);
  39. console.log(`配置文件: ${configPath}`);