notification-service-sdk
Version:
A Node.js notification service SDK supporting email and SMS providers
60 lines • 2.38 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AliSmsProvider = void 0;
const sms_sdk_1 = __importDefault(require("@alicloud/sms-sdk"));
const interfaces_1 = require("../interfaces");
class AliSmsProvider {
constructor(config) {
if (!config.accessKeyId || !config.accessKeySecret || !config.signName) {
throw new interfaces_1.NotificationError('Invalid Aliyun SMS configuration', 'INVALID_CONFIG');
}
this.config = config;
this.client = new sms_sdk_1.default({
accessKeyId: config.accessKeyId,
secretAccessKey: config.accessKeySecret,
});
}
async send(message) {
try {
if (!message.phoneNumbers) {
throw new interfaces_1.NotificationError('Phone numbers are required', 'MISSING_PHONE_NUMBERS');
}
if (!message.templateId) {
throw new interfaces_1.NotificationError('Template ID is required', 'MISSING_TEMPLATE_ID');
}
// 处理电话号码格式
const phoneNumbers = Array.isArray(message.phoneNumbers)
? message.phoneNumbers.join(',')
: message.phoneNumbers;
const response = await this.client.sendSMS({
PhoneNumbers: phoneNumbers,
SignName: this.config.signName,
TemplateCode: message.templateId,
TemplateParam: message.templateParams ? JSON.stringify(message.templateParams) : undefined,
});
if (response.Code === 'OK') {
return {
success: true,
messageId: response.BizId,
};
}
else {
return {
success: false,
error: new interfaces_1.NotificationError(`Failed to send SMS: ${response.Message}`, response.Code),
};
}
}
catch (error) {
return {
success: false,
error: error instanceof Error ? error : new Error(String(error)),
};
}
}
}
exports.AliSmsProvider = AliSmsProvider;
//# sourceMappingURL=aliSms.js.map