get-nls-token.mjs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /**
  2. * 换一个阿里云 NLS(智能语音交互)的 token —— 命令行版。
  3. *
  4. * 签名逻辑在 `nls-token.mjs`(harness 工具共用一份)。
  5. *
  6. * ⚠️ **平时不需要跑它**:正式的取 token 方式是**后端网关**(`resolveNlsToken` 会优先走它),
  7. * 本脚本是"网关取不到时自己签"的排查工具。
  8. *
  9. * 怎么跑(凭据**只从环境变量读**,2026-09-28 起 `.env.development.local` 里已不保存凭据):
  10. * ALIYUN_NLS_AK=xxx ALIYUN_NLS_SK=yyy node harness/tools/get-nls-token.mjs
  11. * # 只想拿 token 本身(给别的命令用):... | tail -1
  12. *
  13. * 也可以只跑 `--check` 看当前配置状态(不请求阿里云、不打凭据值)。
  14. *
  15. * ⚠️ 凭据值**不要写进任何仓库文件**(用户 2026-09-23 明确要求)。
  16. */
  17. import {
  18. NLS_LOCAL_ENV_FILE,
  19. createNlsToken,
  20. maskCredential,
  21. readDotEnvFile,
  22. readNlsCredentials,
  23. } from './nls-token.mjs';
  24. // 环境变量优先;没有就退回本机凭据文件(vite 的 loadEnv 读的是同一个文件)
  25. const credentials = readNlsCredentials({ ...readDotEnvFile(NLS_LOCAL_ENV_FILE), ...process.env });
  26. if (process.argv.includes('--check')) {
  27. console.log(`[nls] AK=${credentials.ak ? maskCredential(credentials.ak) : '(未配置)'}`);
  28. console.log(`[nls] SK=${credentials.sk ? '(已配置,不显示)' : '(未配置)'}`);
  29. console.log(`[nls] AppKey=${credentials.appkey ? maskCredential(credentials.appkey) : '(未配置)'}`);
  30. process.exit(credentials.ak && credentials.sk ? 0 : 2);
  31. }
  32. if (!credentials.ak || !credentials.sk) {
  33. console.error('缺凭据。用法:ALIYUN_NLS_AK=xxx ALIYUN_NLS_SK=yyy node harness/tools/get-nls-token.mjs');
  34. process.exit(2);
  35. }
  36. console.log(`[nls] 请求 CreateToken AK=${maskCredential(credentials.ak)}`);
  37. try {
  38. const { token, expireAt, requestId } = await createNlsToken(credentials);
  39. const expireDate = new Date(expireAt);
  40. console.log(`[nls] token 有效期至 ${expireDate.toISOString()}(本地 ${expireDate.toLocaleString('zh-CN')})`);
  41. if (requestId) console.log(`[nls] RequestId=${requestId}`);
  42. // 最后一行只打 token,方便 `| tail -1` 取用
  43. console.log(token);
  44. } catch (error) {
  45. console.error('[nls] 换 token 失败:', error instanceof Error ? error.message : error);
  46. process.exit(1);
  47. }