添加短信验证服务
Some checks failed
CI / verify (push) Has been cancelled

This commit is contained in:
2026-04-18 08:48:04 +00:00
parent 7ce61e9879
commit 680b9a3e1c
14 changed files with 321 additions and 60 deletions

View File

@@ -0,0 +1,53 @@
import assert from 'node:assert/strict';
import test from 'node:test';
import pino from 'pino';
import type { AppConfig } from '../config.js';
import { createSmsVerificationService } from './smsVerificationService.js';
function createAliyunSmsConfig(): AppConfig {
return {
smsAuth: {
enabled: true,
provider: 'aliyun',
endpoint: 'dypnsapi.aliyuncs.com',
accessKeyId: 'test-access-key-id',
accessKeySecret: 'test-access-key-secret',
signName: '测试签名',
templateCode: 'SMS_100001',
templateParamKey: 'code',
countryCode: '86',
schemeName: '',
codeLength: 6,
codeType: 1,
validTimeSeconds: 300,
intervalSeconds: 60,
duplicatePolicy: 1,
caseAuthPolicy: 1,
returnVerifyCode: false,
mockVerifyCode: '123456',
maxSendPerPhonePerDay: 20,
maxSendPerIpPerHour: 30,
maxVerifyFailuresPerPhonePerHour: 12,
maxVerifyFailuresPerIpPerHour: 24,
captchaTtlSeconds: 180,
captchaTriggerVerifyFailuresPerPhone: 3,
captchaTriggerVerifyFailuresPerIp: 5,
blockPhoneFailureThreshold: 6,
blockIpFailureThreshold: 10,
blockPhoneDurationMinutes: 30,
blockIpDurationMinutes: 30,
},
} as AppConfig;
}
test('createSmsVerificationService initializes aliyun sdk client under tsx esm runtime', () => {
const service = createSmsVerificationService(
createAliyunSmsConfig(),
pino({ enabled: false }),
);
assert.equal(typeof service.sendLoginCode, 'function');
assert.equal(typeof service.verifyLoginCode, 'function');
});