@takentrade/takentrade-libs
Version:
TakeNTrade shared libraries
357 lines (356 loc) • 17 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.NotificationClient = void 0;
const common_1 = require("@nestjs/common");
const notification_enum_1 = require("./notification.enum");
const nats_1 = require("../nats");
const class_validator_1 = require("class-validator");
let NotificationClient = class NotificationClient {
natsClient;
constructor(natsClient) {
this.natsClient = natsClient;
}
validatePhoneNumber(phone) {
if (!(0, class_validator_1.isPhoneNumber)(phone)) {
throw new common_1.BadRequestException('Invalid phone number');
}
}
validateEmailAddress(email) {
if (!(0, class_validator_1.isEmail)(email)) {
throw new common_1.BadRequestException('Invalid email address');
}
}
async sendSms(to, message, user_id) {
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.NOTIFICATION_TEXT, {
to,
message,
user_id,
});
}
async sendSmsPreference(to, message, user_id) {
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.NOTIFICATION_TEXT_PREFERENCE, {
to,
message,
user_id,
});
}
/**
* This utility method sends an OTP message via the SMS channel.
*
* @param to - The recipient phone number
* @param message - The OTP message
* @deprecated
*/
async sendSmsOTP(to, message, user_id) {
this.natsClient.emit(`notification.sms.otp`, {
to,
message,
user_id,
});
}
async sendCustomMail(to, options) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.NOTIFICATION_MAIL, {
...options,
to: recipients,
});
}
async sendBulkEmail(data) {
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.NOTIFICATION_EMAIL_BULK, data);
}
async sendEmailVerificationMail(to, data, user_id, bypassPreferenceCheck) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.EMAIL_VERIFICATION_EMAIL, {
to: recipients,
data,
user_id,
bypassPreferenceCheck,
});
}
async sendPasswordResetMail(to, data, user_id, bypassPreferenceCheck) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.PASSWORD_RESET_MAIL, {
to: recipients,
data,
user_id,
bypassPreferenceCheck,
});
}
async sendCreditTransactionMail(to, data, user_id, bypassPreferenceCheck) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.TRANSANCTION_CREDIT_MAIL, { to: recipients, data, user_id, bypassPreferenceCheck });
}
async sendDebitTransactionMail(to, data, user_id, bypassPreferenceCheck) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.TRANSANCTION_DEBIT_MAIL, { to: recipients, data, user_id, bypassPreferenceCheck });
}
async sendAccountFreezeMail(to, data, user_id, bypassPreferenceCheck) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.ACCOUNT_FREEZE_MAIL, {
to: recipients,
data,
user_id,
bypassPreferenceCheck,
});
}
async sendAccountStatementMail(to, data, user_id, bypassPreferenceCheck) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.ACCOUNT_STATEMENT_MAIL, { to: recipients, data, user_id, bypassPreferenceCheck });
}
async sendAccountUnfreezeMail(to, data, user_id, bypassPreferenceCheck) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.ACCOUNT_UNFREEZE_MAIL, { to: recipients, data, user_id, bypassPreferenceCheck });
}
async sendAdminNewLoanMail(to, data, user_id, bypassPreferenceCheck) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.ADMIN_NEW_LOAN_MAIL, {
to: recipients,
data,
user_id,
bypassPreferenceCheck,
});
}
async sendAjoCancellationMail(to, data, user_id, bypassPreferenceCheck) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.AJO_CANCELLATION_MAIL, { to: recipients, data, user_id, bypassPreferenceCheck });
}
async sendAjoContributionMail(to, data, user_id, bypassPreferenceCheck) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.AJO_CONTRIBUTION_MAIL, { to: recipients, data, user_id, bypassPreferenceCheck });
}
async sendAjoInvitationMail(to, data, user_id, bypassPreferenceCheck) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.AJO_INVITATION_MAIL, {
to: recipients,
data,
user_id,
bypassPreferenceCheck,
});
}
async sendAjoMembershipMail(to, data, user_id, bypassPreferenceCheck) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.AJO_MEMBERSHIP_MAIL, {
to: recipients,
data,
user_id,
bypassPreferenceCheck,
});
}
async sendContactMail(to, data, user_id, bypassPreferenceCheck) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.CONTACT_MAIL, {
to: recipients,
data,
user_id,
bypassPreferenceCheck,
});
}
async sendForgetPinOTPMail(to, data, user_id, bypassPreferenceCheck) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.FORGET_PIN_OTP_MAIL, {
to: recipients,
data,
user_id,
bypassPreferenceCheck,
});
}
async sendInvestmentCancellationMail(to, data, user_id, bypassPreferenceCheck) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.INVESTMENT_CANCELLATION_MAIL, { to: recipients, data, user_id, bypassPreferenceCheck });
}
async sendLoanApprovedMail(to, data, user_id, bypassPreferenceCheck) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.LOAN_APPROVED_MAIL, {
to: recipients,
data,
user_id,
bypassPreferenceCheck,
});
}
async sendLoanRepaymentFailedMail(to, data, user_id, bypassPreferenceCheck) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.LOAN_REPAYMENT_FAILED_MAIL, { to: recipients, data, user_id, bypassPreferenceCheck });
}
async sendLoanRepaymentSuccessMail(to, data, user_id, bypassPreferenceCheck) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.LOAN_REPAYMENT_SUCCESS_MAIL, { to: recipients, data, user_id, bypassPreferenceCheck });
}
async sendNewAjoMail(to, data, user_id, bypassPreferenceCheck) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.NEW_AJO_MAIL, {
to: recipients,
data,
user_id,
bypassPreferenceCheck,
});
}
async sendNewInvestmentMail(to, data, user_id, bypassPreferenceCheck) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.NEW_INVESTMENT_MAIL, {
to: recipients,
data,
user_id,
bypassPreferenceCheck,
});
}
/**
* Sends an email notification for electricity purchase
* @param to - Recipient's email address
* @param data - Electricity purchase details
*/
async sendElectricityPurchaseEmail(to, data, user_id, bypassPreferenceCheck) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.ELECTRICITY_PURCHASE_MAIL, {
to: recipients,
data,
user_id,
bypassPreferenceCheck,
});
}
/**
* Sends an email notification for education service purchase
* @param to - Recipient's email address
* @param data - Education service purchase details
*/
async sendEducationPurchaseEmail(to, data, user_id, bypassPreferenceCheck) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.EDUCATION_PURCHASE_MAIL, {
to: recipients,
data,
user_id,
bypassPreferenceCheck,
});
}
async sendDeviceVerificationEmail(to, data, user_id, bypassPreferenceCheck) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.DEVICE_VERIFICATION_MAIL, {
to: recipients,
data,
user_id,
bypassPreferenceCheck,
});
}
async sendNewDeviceNotificationEmail(to, data, user_id, bypassPreferenceCheck) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.NEW_DEVICE_NOTIFICATION_MAIL, {
to: recipients,
data,
user_id,
bypassPreferenceCheck,
});
}
async sendNewDeviceNotification(to, data, user_id, bypassPreferenceCheck) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.NEW_DEVICE_NOTIFICATION_MAIL, {
to: recipients,
data,
user_id,
bypassPreferenceCheck,
});
}
/**
* Sends a sub-account report email with the provided data
* @param to Recipient email address
* @param data Sub-account report data
*/
async sendSubAccountReportEmail(to, data, user_id, bypassPreferenceCheck) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.SUB_ACCOUNT_REPORT_MAIL, { to: recipients, data, user_id, bypassPreferenceCheck });
}
async sendWelcomeMail(to, data, user_id, bypassPreferenceCheck) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.WELCOME_MAIL, {
to: recipients,
data,
user_id,
bypassPreferenceCheck,
});
}
/**
* Sends generated OTP to a recipient
* @param to - recipient phone number or email
* @param data - OTP data
* @param channel - OTP notification channel. Defaults to sms.
*/
async sendOTP(to, data, channel = notification_enum_1.OTPNotificationChannel.sms, user_id, bypassPreferenceCheck) {
if (channel == notification_enum_1.OTPNotificationChannel.mail) {
const recipients = Array.isArray(to) ? to : [to];
recipients.forEach((r) => this.validateEmailAddress(r));
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.OTP_MAIL, {
to: recipients,
data,
user_id,
bypassPreferenceCheck,
});
}
else if (channel == notification_enum_1.OTPNotificationChannel.sms) {
const recipient = Array.isArray(to) ? to[0] : to;
this.validatePhoneNumber(recipient);
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.NOTIFICATION_OTP_TEXT, { to: recipient, ...data, user_id, bypassPreferenceCheck });
}
else if (channel == notification_enum_1.OTPNotificationChannel.voice) {
const recipient = Array.isArray(to) ? to[0] : to;
this.validatePhoneNumber(recipient);
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.NOTIFICATION_OTP_VOICE, { to: recipient, ...data, user_id, bypassPreferenceCheck });
}
else if (channel == notification_enum_1.OTPNotificationChannel.whatsapp) {
const recipient = Array.isArray(to) ? to[0] : to;
this.validatePhoneNumber(recipient);
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.NOTIFICATION_OTP_WHATSAPP, { to: recipient, ...data, user_id, bypassPreferenceCheck });
}
else {
throw new common_1.BadRequestException('Invalid OTP channel');
}
}
/**
* Sends push notification
*/
async sendPush(input) {
if (!input.tokens?.length && !input.user_id) {
throw new common_1.BadRequestException('You must provide a device tokens array or a user_id');
}
this.natsClient.emit(notification_enum_1.NotificationSubcribedNATSSubject.NOTIFICATION_PUSH, input);
}
};
exports.NotificationClient = NotificationClient;
exports.NotificationClient = NotificationClient = __decorate([
(0, common_1.Injectable)(),
__param(0, (0, common_1.Inject)(nats_1.NATS_CLIENT))
], NotificationClient);