UNPKG

@takentrade/takentrade-libs

Version:
357 lines (356 loc) 17 kB
"use strict"; 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);