import { UnknownProviderError } from '../errors'; import { ISMSSender } from '../interfaces'; import { SMSProviderModule } from '../types'; import { SMS_PROVIDER } from '../utils/constants'; import { getSMSProviderFromPlatformCloud } from '../mappers/qrveyEnvs.mapper'; export class SMSSenderFactory { private static providerModules: Record< string, () => Promise > = { twilio: () => import('./clients/twilioSmsSender.client'), aws: () => import('./clients/awsSmsSender.client'), azure: () => import('./clients/azureSmsSender.client'), vonage: () => import('./clients/vonageSmsSender.client'), }; private static _smsSender: ISMSSender | null = null; static async getSMSSender(): Promise { const provider = getSMSProviderFromPlatformCloud() ?? SMS_PROVIDER?.toLowerCase(); if (!provider) throw new UnknownProviderError(); if (!this.providerModules[provider]) throw new UnknownProviderError(); const { default: SMSSender } = await this.providerModules[provider](); this._smsSender = this._smsSender ?? new SMSSender(); return this._smsSender; } }