{"version":3,"sources":["../../src/services/clients/vonageSmsSender.client.ts"],"names":["VonageSMSSenderClient","constructor","clientPromise","sendOne","phone","message","client","getClient","sms","send","to","text","from","FROM","USERNAME","PASSWORD","NotProvidedCredentialsError","phones","result","sent","failed","Promise","all","map","then","data","messages","some","status","push","error","errorText","Vonage","Auth","vonageAuth","apiKey","apiSecret"],"mappings":";;;AAOA,IAAqBA,sBAAAA,GAArB,MAAqBA,sBAAAA,CAAAA;EAEjBC,WAAAA,GAAc;AADNC,IAAAA,aAAAA,CAAAA,IAAAA,EAAAA,eAAAA,CAAAA;AAkDAC,IAAAA,aAAAA,CAAAA,IAAAA,EAAAA,SAAAA,kBAAU,MAAA,CAAA,OACdC,OACAC,OAAAA,KAAAA;AAEA,MAAA,MAAMC,MAAAA,GAAS,MAAM,IAAA,CAAKC,SAAAA,EAAS;AACnC,MAAA,OAAOD,MAAAA,CAAOE,IAAIC,IAAAA,CAAK;QACnBC,EAAAA,EAAIN,KAAAA;QACJO,IAAAA,EAAMN,OAAAA;QACNO,IAAAA,EAAMC;OACV,CAAA;IACJ,CAAA,EAVkB,SAAA,CAAA,CAAA;AAhDd,IAAA,IAAI,EAAEC,QAAAA,IAAYC,QAAAA,IAAYF,IAAAA,CAAAA,EAC1B,MAAM,IAAIG,2BAAAA,EAAAA;AAClB,EAAA;EAEA,MAAaP,IAAAA,CAAKQ,QAAkBZ,OAAAA,EAAsC;AACtE,IAAA,MAAMa,MAAAA,GAAqB;AACvBC,MAAAA,IAAAA,EAAM,EAAA;AACNC,MAAAA,MAAAA,EAAQ;AACZ,KAAA;AAEA,IAAA,MAAMC,OAAAA,CAAQC,GAAAA,CACVL,MAAAA,CAAOM,GAAAA,CAAI,CAACnB,KAAAA,KACR,IAAA,CAAKD,OAAAA,CAAQC,KAAAA,EAAOC,OAAAA,CAAAA,CAASmB,IAAAA,CAAK,CAACC,IAAAA,KAAAA;AApBnD,MAAA,IAAA,EAAA;AAqBoB,MAAA,IAAA,CACIA,EAAAA,GAAAA,IAAAA,CAAKC,aAALD,IAAAA,GAAAA,MAAAA,GAAAA,EAAAA,CAAeE,IAAAA,CAAK,CAACtB,QAAAA,KAAYA,QAAAA,CAAQuB,WAAW,GAAA,CAAA,EACtD;AACEV,QAAAA,MAAAA,CAAOE,OAAOS,IAAAA,CAAK;AACfzB,UAAAA,KAAAA;UACA0B,KAAAA,EAAOL,IAAAA,CAAKC,QAAAA,CAAS,CAAA,CAAA,CAAGK;SAC5B,CAAA;MACJ,CAAA,MAAO;AACHb,QAAAA,MAAAA,CAAOC,KAAKU,IAAAA,CAAK;AAAEzB,UAAAA;SAAM,CAAA;AAC7B,MAAA;AACJ,IAAA,CAAA,CAAA,CAAA,CAAA;AAIR,IAAA,OAAOc,MAAAA;AACX,EAAA;AAEA,EAAA,MAAcX,SAAAA,GAA6B;AAtC/C,IAAA,IAAA,EAAA;AAuCQ,IAAA,IAAA,CAAKL,aAAAA,GAAAA,CACD,EAAA,GAAA,IAAA,CAAKA,aAAAA,KAAL,IAAA,GAAA,EAAA,GAAA,CACC,YAAA;AACG,MAAA,MAAM,CAAC,EAAE8B,MAAAA,EAAM,EAAI,EAAEC,MAAM,CAAA,GAAI,MAAMZ,OAAAA,CAAQC,GAAAA,CAAI;AAC7C,QAAA,OAAO,oBAAA,CAAA;AACP,QAAA,OAAO,cAAA;AACV,OAAA,CAAA;AACD,MAAA,MAAMY,UAAAA,GAAa,IAAID,IAAAA,CAAK;QACxBE,MAAAA,EAAQrB,QAAAA;QACRsB,SAAAA,EAAWrB;OACf,CAAA;AACA,MAAA,OAAO,IAAIiB,OAAOE,UAAAA,CAAAA;IACtB,CAAA,GAAA;AAEJ,IAAA,OAAO,IAAA,CAAKhC,aAAAA;AAChB,EAAA;AAaJ,CAAA;AA9DqBF,MAAAA,CAAAA,sBAAAA,EAAAA,uBAAAA,CAAAA;AAArB,IAAqBA,qBAAAA,GAArB","file":"vonageSmsSender.client-7KP2UCMI.mjs","sourcesContent":["import { ISMSSender } from '../../interfaces';\nimport { SendResult } from '../../types';\nimport { USERNAME, PASSWORD, FROM } from '../../utils/constants';\nimport { NotProvidedCredentialsError } from '../../errors';\nimport type { Vonage } from '@vonage/server-sdk';\nimport type { SMSMessages } from '@vonage/sms';\n\nexport default class VonageSMSSenderClient implements ISMSSender {\n    private clientPromise: Promise<Vonage> | undefined;\n    constructor() {\n        if (!(USERNAME && PASSWORD && FROM))\n            throw new NotProvidedCredentialsError();\n    }\n\n    public async send(phones: string[], message: string): Promise<SendResult> {\n        const result: SendResult = {\n            sent: [],\n            failed: [],\n        };\n\n        await Promise.all(\n            phones.map((phone) =>\n                this.sendOne(phone, message).then((data) => {\n                    if (\n                        data.messages?.some((message) => message.status !== '0')\n                    ) {\n                        result.failed.push({\n                            phone,\n                            error: data.messages[0].errorText,\n                        });\n                    } else {\n                        result.sent.push({ phone });\n                    }\n                }),\n            ),\n        );\n\n        return result;\n    }\n\n    private async getClient(): Promise<Vonage> {\n        this.clientPromise =\n            this.clientPromise ??\n            (async () => {\n                const [{ Vonage }, { Auth }] = await Promise.all([\n                    import('@vonage/server-sdk'),\n                    import('@vonage/auth'),\n                ]);\n                const vonageAuth = new Auth({\n                    apiKey: USERNAME as string,\n                    apiSecret: PASSWORD as string,\n                });\n                return new Vonage(vonageAuth);\n            })();\n\n        return this.clientPromise;\n    }\n\n    private sendOne = async (\n        phone: string,\n        message: string,\n    ): Promise<SMSMessages> => {\n        const client = await this.getClient();\n        return client.sms.send({\n            to: phone,\n            text: message,\n            from: FROM as string,\n        });\n    };\n}\n"]}