chore: add PNVS provider configuration script

This commit is contained in:
Codex
2026-07-03 23:16:58 +08:00
parent 7eb5ceca62
commit f8f83168b4
4 changed files with 253 additions and 1 deletions

View File

@@ -0,0 +1,40 @@
import assert from 'node:assert/strict';
import { buildConfig, configureAliyunPnvsProvider, publicConfig } from './configure-aliyun-pnvs-provider.js';
const env = {
DATABASE_URL: 'postgresql://user:pass@127.0.0.1:54322/postgres',
PNVS_TENANT_ID: '00000000-0000-0000-0000-000000000001',
ALIYUN_ACCESS_KEY_ID: 'access-key-id',
ALIYUN_ACCESS_KEY_SECRET: 'access-key-secret',
ALIYUN_PNVS_SIGN_NAME: '短信签名',
ALIYUN_PNVS_TEMPLATE_CODE: 'SMS_123456789',
};
const config = buildConfig(env);
assert.equal(config.tenantId, env.PNVS_TENANT_ID);
assert.equal(config.templateParam.code, '##code##');
assert.equal(config.templateParam.min, '5');
const driftConfig = buildConfig({
...env,
ALIYUN_PNVS_TEMPLATE_PARAM: '{"min":"5"}',
});
assert.equal(driftConfig.templateParam.code, '##code##', 'script should preserve PNVS code placeholder');
const cfgPublic = publicConfig(config);
assert.equal(cfgPublic.secretRef, 'app_private.tenant_secrets:sms:aliyun-pnvs');
assert.equal(cfgPublic.endpoint, 'https://dypnsapi.aliyuncs.com');
assert.equal(JSON.stringify(cfgPublic).includes('access-key-secret'), false, 'public config must not include secrets');
const dryRun = await configureAliyunPnvsProvider(config, { dryRun: true });
assert.equal(dryRun.provider, 'aliyun-pnvs');
assert.equal(dryRun.secretScope, 'sms');
assert.equal(dryRun.secretKey, 'aliyun-pnvs');
assert.equal(JSON.stringify(dryRun).includes('access-key-secret'), false, 'dry-run output must not include secret plaintext');
assert.throws(
() => buildConfig({ ...env, ALIYUN_ACCESS_KEY_SECRET: '' }),
/Missing required PNVS config env/,
);
console.log('[PASS] configure Aliyun PNVS provider script');