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');