| 123456789101112131415161718192021 |
- #!/usr/bin/env node
- import {readFileSync,statSync} from 'node:fs';
- import {homedir} from 'node:os';
- import {resolve} from 'node:path';
- const file=resolve(process.argv.find(value=>value.startsWith('--file='))?.slice(7)||homedir()+'/.config/xiaoshu/xfyun-word-audio.json');
- if((statSync(file).mode&0o077)!==0)throw Error('配置文件须仅限当前用户读取,请执行 chmod 600 后重试');
- const input=JSON.parse(readFileSync(file,'utf8'));
- const gatewayOnly=process.argv.includes('--gateway-only');
- const required=gatewayOnly?['XIAOSHU_TTS_WORKER_URL','XIAOSHU_TTS_WORKER_TOKEN','XFYUN_TTS_VCN']:['XFYUN_APP_ID','XFYUN_API_KEY','XFYUN_API_SECRET','XFYUN_TTS_VCN'];
- const optional=['XIAOSHU_TTS_WORKER_URL','XIAOSHU_TTS_WORKER_TOKEN','XIAOSHU_TTS_ENABLED','XIAOSHU_TTS_DAILY_LIMIT','XIAOSHU_TTS_USER_MINUTE_LIMIT','XIAOSHU_TTS_CONCURRENCY','XIAOSHU_S3_ENDPOINT','XIAOSHU_S3_BUCKET','XIAOSHU_S3_REGION','XIAOSHU_S3_ACCESS_KEY_ID','XIAOSHU_S3_SECRET_ACCESS_KEY','XIAOSHU_S3_PUBLIC_BASE_URL'];
- const missing=required.filter(key=>!String(input[key]||'').trim());
- if(missing.length)throw Error('请填写配置项:'+missing.join('、'));
- const params=Object.fromEntries([...new Set([...required,...optional])].filter(key=>input[key]!=null).map(key=>[key,String(input[key]).trim()]));
- params.XIAOSHU_TTS_ENABLED=process.argv.includes('--enable')?'true':'false';
- if(!process.argv.includes('--apply')){console.log(JSON.stringify({valid:true,applied:false,enabled:false,message:'配置格式检查通过;--apply 写入服务端私密配置,--enable 另行开启生成。不会调用讯飞。'}));process.exit(0);}
- const master=process.env.XIAOSHU_MASTER_KEY;if(!master)throw Error('缺少 XIAOSHU_MASTER_KEY');
- const url=(process.env.XIAOSHU_PARSE_URL||'https://server.xiaoshu.pro/parse').replace(/\/$/,'');
- const response=await fetch(url+'/config',{method:'PUT',headers:{'Content-Type':'application/json','X-Parse-Application-Id':process.env.XIAOSHU_PARSE_APP_ID||'7pIbDBJmKx_main','X-Parse-Master-Key':master},body:JSON.stringify({params,masterKeyOnly:Object.fromEntries(Object.keys(params).map(key=>[key,true]))})});
- if(!response.ok)throw Error('私密配置保存失败(HTTP '+response.status+')');
- const payload=await response.json();if(payload.error)throw Error('私密配置保存失败');
- console.log(JSON.stringify({configured:true,enabled:params.XIAOSHU_TTS_ENABLED==='true',secretsPrinted:false}));
|