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