77 lines
2.2 KiB
TypeScript
77 lines
2.2 KiB
TypeScript
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');
|
|
});
|
|
|
|
test('mock sms service reports delivered tracking metadata', async () => {
|
|
const config = createAliyunSmsConfig();
|
|
config.smsAuth.provider = 'mock';
|
|
config.smsAuth.accessKeyId = '';
|
|
config.smsAuth.accessKeySecret = '';
|
|
|
|
const service = createSmsVerificationService(
|
|
config,
|
|
pino({ enabled: false }),
|
|
);
|
|
|
|
const result = await service.sendLoginCode({
|
|
e164: '+8613800138000',
|
|
nationalNumber: '13800138000',
|
|
maskedNationalNumber: '138****8000',
|
|
});
|
|
|
|
assert.equal(result.provider, 'mock');
|
|
assert.equal(result.deliveryStatus, 'delivered');
|
|
assert.equal(result.providerRequestId, 'mock-request-id');
|
|
assert.equal(result.providerOutId, 'mock-out-id');
|
|
});
|