@qrvey/sms 1.0.0-554 → 1.0.1-949

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/cjs/services/clients/vonageSmsSender.client.js +47 -12
  2. package/dist/cjs/services/clients/vonageSmsSender.client.js.map +1 -1
  3. package/dist/cjs/services/smsSenderFactory.service.js +2 -0
  4. package/dist/cjs/services/smsSenderFactory.service.js.map +1 -1
  5. package/dist/esm/awsSmsSender.client-QBVM62KM.mjs +45 -0
  6. package/dist/esm/awsSmsSender.client-QBVM62KM.mjs.map +1 -0
  7. package/dist/esm/azureSmsSender.client-Z3P5SL47.mjs +39 -0
  8. package/dist/esm/azureSmsSender.client-Z3P5SL47.mjs.map +1 -0
  9. package/dist/esm/chunk-3OKJAMCQ.mjs +36 -0
  10. package/dist/esm/chunk-3OKJAMCQ.mjs.map +1 -0
  11. package/dist/esm/index.mjs +17 -12
  12. package/dist/esm/index.mjs.map +1 -1
  13. package/dist/esm/twilioSmsSender.client-J4FEYTVH.mjs +34 -0
  14. package/dist/esm/twilioSmsSender.client-J4FEYTVH.mjs.map +1 -0
  15. package/dist/esm/vonageSmsSender.client-7KP2UCMI.mjs +58 -0
  16. package/dist/esm/vonageSmsSender.client-7KP2UCMI.mjs.map +1 -0
  17. package/package.json +5 -5
  18. package/src/services/clients/voangeSmsSender.client.test.ts +5 -4
  19. package/src/services/clients/vonageSmsSender.client.ts +29 -14
  20. package/src/services/smsSenderFactory.service.ts +1 -0
  21. package/dist/esm/awsSmsSender.client-LIUIAB4N.mjs +0 -44
  22. package/dist/esm/awsSmsSender.client-LIUIAB4N.mjs.map +0 -1
  23. package/dist/esm/azureSmsSender.client-KHGAWQJU.mjs +0 -36
  24. package/dist/esm/azureSmsSender.client-KHGAWQJU.mjs.map +0 -1
  25. package/dist/esm/chunk-GH3HZBE6.mjs +0 -27
  26. package/dist/esm/chunk-GH3HZBE6.mjs.map +0 -1
  27. package/dist/esm/twilioSmsSender.client-2Q2EIZIP.mjs +0 -33
  28. package/dist/esm/twilioSmsSender.client-2Q2EIZIP.mjs.map +0 -1
  29. package/dist/esm/vonageSmsSender.client-TD4MHO4D.mjs +0 -48
  30. package/dist/esm/vonageSmsSender.client-TD4MHO4D.mjs.map +0 -1
@@ -1,23 +1,42 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const server_sdk_1 = require("@vonage/server-sdk");
4
- const auth_1 = require("@vonage/auth");
5
26
  const constants_1 = require("../../utils/constants");
6
27
  const errors_1 = require("../../errors");
7
28
  class VonageSMSSenderClient {
8
29
  constructor() {
9
- this.sendOne = (phone, message) => this.client.sms.send({
10
- to: phone,
11
- text: message,
12
- from: constants_1.FROM,
13
- });
30
+ this.sendOne = async (phone, message) => {
31
+ const client = await this.getClient();
32
+ return client.sms.send({
33
+ to: phone,
34
+ text: message,
35
+ from: constants_1.FROM,
36
+ });
37
+ };
14
38
  if (!(constants_1.USERNAME && constants_1.PASSWORD && constants_1.FROM))
15
39
  throw new errors_1.NotProvidedCredentialsError();
16
- const vonageAuth = new auth_1.Auth({
17
- apiKey: constants_1.USERNAME,
18
- apiSecret: constants_1.PASSWORD,
19
- });
20
- this.client = new server_sdk_1.Vonage(vonageAuth);
21
40
  }
22
41
  async send(phones, message) {
23
42
  const result = {
@@ -38,6 +57,22 @@ class VonageSMSSenderClient {
38
57
  })));
39
58
  return result;
40
59
  }
60
+ async getClient() {
61
+ var _a;
62
+ this.clientPromise =
63
+ (_a = this.clientPromise) !== null && _a !== void 0 ? _a : (async () => {
64
+ const [{ Vonage }, { Auth }] = await Promise.all([
65
+ Promise.resolve().then(() => __importStar(require('@vonage/server-sdk'))),
66
+ Promise.resolve().then(() => __importStar(require('@vonage/auth'))),
67
+ ]);
68
+ const vonageAuth = new Auth({
69
+ apiKey: constants_1.USERNAME,
70
+ apiSecret: constants_1.PASSWORD,
71
+ });
72
+ return new Vonage(vonageAuth);
73
+ })();
74
+ return this.clientPromise;
75
+ }
41
76
  }
42
77
  exports.default = VonageSMSSenderClient;
43
78
  //# sourceMappingURL=vonageSmsSender.client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"vonageSmsSender.client.js","sourceRoot":"","sources":["../../../../src/services/clients/vonageSmsSender.client.ts"],"names":[],"mappings":";;AAEA,mDAA4C;AAC5C,uCAAoC;AACpC,qDAAiE;AACjE,yCAA2D;AAG3D,MAAqB,qBAAqB;IAEtC;QAsCQ,YAAO,GAAG,CAAC,KAAa,EAAE,OAAe,EAAwB,EAAE,CACvE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YACjB,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,gBAAc;SACvB,CAAC,CAAC;QA1CH,IAAI,CAAC,CAAC,oBAAQ,IAAI,oBAAQ,IAAI,gBAAI,CAAC;YAC/B,MAAM,IAAI,oCAA2B,EAAE,CAAC;QAC5C,MAAM,UAAU,GAAG,IAAI,WAAI,CAAC;YACxB,MAAM,EAAE,oBAAQ;YAChB,SAAS,EAAE,oBAAQ;SACtB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,mBAAM,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,MAAgB,EAAE,OAAe;QAC/C,MAAM,MAAM,GAAe;YACvB,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,EAAE;SACb,CAAC;QAEF,MAAM,OAAO,CAAC,GAAG,CACb,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACjB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;;YACvC,IACI,MAAA,IAAI,CAAC,QAAQ,0CAAE,IAAI,CACf,CAAC,OAAY,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,GAAG,CAC3C,EACH;gBACE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;oBACf,KAAK;oBACL,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;iBACpC,CAAC,CAAC;aACN;iBAAM;gBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;aAC/B;QACL,CAAC,CAAC,CACL,CACJ,CAAC;QAEF,OAAO,MAAM,CAAC;IAClB,CAAC;CAQJ;AA9CD,wCA8CC"}
1
+ {"version":3,"file":"vonageSmsSender.client.js","sourceRoot":"","sources":["../../../../src/services/clients/vonageSmsSender.client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAEA,qDAAiE;AACjE,yCAA2D;AAI3D,MAAqB,qBAAqB;IAEtC;QAiDQ,YAAO,GAAG,KAAK,EACnB,KAAa,EACb,OAAe,EACK,EAAE;YACtB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;gBACnB,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,gBAAc;aACvB,CAAC,CAAC;QACP,CAAC,CAAC;QA1DE,IAAI,CAAC,CAAC,oBAAQ,IAAI,oBAAQ,IAAI,gBAAI,CAAC;YAC/B,MAAM,IAAI,oCAA2B,EAAE,CAAC;IAChD,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,MAAgB,EAAE,OAAe;QAC/C,MAAM,MAAM,GAAe;YACvB,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,EAAE;SACb,CAAC;QAEF,MAAM,OAAO,CAAC,GAAG,CACb,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACjB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;;YACvC,IACI,MAAA,IAAI,CAAC,QAAQ,0CAAE,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,GAAG,CAAC,EAC1D;gBACE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;oBACf,KAAK;oBACL,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;iBACpC,CAAC,CAAC;aACN;iBAAM;gBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;aAC/B;QACL,CAAC,CAAC,CACL,CACJ,CAAC;QAEF,OAAO,MAAM,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,SAAS;;QACnB,IAAI,CAAC,aAAa;YACd,MAAA,IAAI,CAAC,aAAa,mCAClB,CAAC,KAAK,IAAI,EAAE;gBACR,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;sEACtC,oBAAoB;sEACpB,cAAc;iBACxB,CAAC,CAAC;gBACH,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC;oBACxB,MAAM,EAAE,oBAAkB;oBAC1B,SAAS,EAAE,oBAAkB;iBAChC,CAAC,CAAC;gBACH,OAAO,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC;YAClC,CAAC,CAAC,EAAE,CAAC;QAET,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;CAaJ;AA9DD,wCA8DC"}
@@ -33,6 +33,8 @@ class SMSSenderFactory {
33
33
  const provider = (_a = (0, qrveyEnvs_mapper_1.getSMSProviderFromPlatformCloud)()) !== null && _a !== void 0 ? _a : constants_1.SMS_PROVIDER === null || constants_1.SMS_PROVIDER === void 0 ? void 0 : constants_1.SMS_PROVIDER.toLowerCase();
34
34
  if (!provider)
35
35
  throw new errors_1.UnknownProviderError();
36
+ if (!this.providerModules[provider])
37
+ throw new errors_1.UnknownProviderError();
36
38
  const { default: SMSSender } = await this.providerModules[provider]();
37
39
  this._smsSender = (_b = this._smsSender) !== null && _b !== void 0 ? _b : new SMSSender();
38
40
  return this._smsSender;
@@ -1 +1 @@
1
- {"version":3,"file":"smsSenderFactory.service.js","sourceRoot":"","sources":["../../../src/services/smsSenderFactory.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sCAAiD;AAGjD,kDAAkD;AAClD,kEAA8E;AAE9E,MAAa,gBAAgB;IAYzB,MAAM,CAAC,KAAK,CAAC,YAAY;;QACrB,MAAM,QAAQ,GACV,MAAA,IAAA,kDAA+B,GAAE,mCAAI,wBAAY,aAAZ,wBAAY,uBAAZ,wBAAY,CAAE,WAAW,EAAE,CAAC;QACrE,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,6BAAoB,EAAE,CAAC;QAEhD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtE,IAAI,CAAC,UAAU,GAAG,MAAA,IAAI,CAAC,UAAU,mCAAI,IAAI,SAAS,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;;AApBL,4CAqBC;AApBkB,gCAAe,GAG1B;IACA,MAAM,EAAE,GAAG,EAAE,mDAAQ,kCAAkC,GAAC;IACxD,GAAG,EAAE,GAAG,EAAE,mDAAQ,+BAA+B,GAAC;IAClD,KAAK,EAAE,GAAG,EAAE,mDAAQ,iCAAiC,GAAC;IACtD,MAAM,EAAE,GAAG,EAAE,mDAAQ,kCAAkC,GAAC;CAC3D,CAAC;AACa,2BAAU,GAAsB,IAAI,CAAC"}
1
+ {"version":3,"file":"smsSenderFactory.service.js","sourceRoot":"","sources":["../../../src/services/smsSenderFactory.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sCAAiD;AAGjD,kDAAkD;AAClD,kEAA8E;AAE9E,MAAa,gBAAgB;IAYzB,MAAM,CAAC,KAAK,CAAC,YAAY;;QACrB,MAAM,QAAQ,GACV,MAAA,IAAA,kDAA+B,GAAE,mCAAI,wBAAY,aAAZ,wBAAY,uBAAZ,wBAAY,CAAE,WAAW,EAAE,CAAC;QACrE,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,6BAAoB,EAAE,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;YAAE,MAAM,IAAI,6BAAoB,EAAE,CAAC;QAEtE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtE,IAAI,CAAC,UAAU,GAAG,MAAA,IAAI,CAAC,UAAU,mCAAI,IAAI,SAAS,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;;AArBL,4CAsBC;AArBkB,gCAAe,GAG1B;IACA,MAAM,EAAE,GAAG,EAAE,mDAAQ,kCAAkC,GAAC;IACxD,GAAG,EAAE,GAAG,EAAE,mDAAQ,+BAA+B,GAAC;IAClD,KAAK,EAAE,GAAG,EAAE,mDAAQ,iCAAiC,GAAC;IACtD,MAAM,EAAE,GAAG,EAAE,mDAAQ,kCAAkC,GAAC;CAC3D,CAAC;AACa,2BAAU,GAAsB,IAAI,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { __name, __publicField, USERNAME, PASSWORD, REGION, NotProvidedCredentialsError } from './chunk-3OKJAMCQ.mjs';
2
+ import { PublishCommand, SNSClient } from '@aws-sdk/client-sns';
3
+
4
+ var _AwsSMSSenderClient = class _AwsSMSSenderClient {
5
+ constructor() {
6
+ __publicField(this, "client");
7
+ __publicField(this, "sendOne", /* @__PURE__ */ __name(async (phone, message) => {
8
+ const command = new PublishCommand({
9
+ Message: message,
10
+ PhoneNumber: phone
11
+ });
12
+ return await this.client.send(command);
13
+ }, "sendOne"));
14
+ const accessKeyId = USERNAME || process.env.AWS_ACCESS_KEY_ID;
15
+ const secretAccessKey = PASSWORD || process.env.AWS_SECRET_ACCESS_KEY;
16
+ const region = REGION || process.env.AWS_REGION;
17
+ if (!(accessKeyId && secretAccessKey)) throw new NotProvidedCredentialsError();
18
+ this.client = new SNSClient({
19
+ region,
20
+ credentials: {
21
+ accessKeyId,
22
+ secretAccessKey
23
+ }
24
+ });
25
+ }
26
+ async send(phones = [], message) {
27
+ const result = {
28
+ sent: [],
29
+ failed: []
30
+ };
31
+ await Promise.all(phones.map((phone) => this.sendOne(phone, message).then(() => result.sent.push({
32
+ phone
33
+ })).catch((error) => result.failed.push({
34
+ phone,
35
+ error: error.message
36
+ }))));
37
+ return result;
38
+ }
39
+ };
40
+ __name(_AwsSMSSenderClient, "AwsSMSSenderClient");
41
+ var AwsSMSSenderClient = _AwsSMSSenderClient;
42
+
43
+ export { AwsSMSSenderClient as default };
44
+ //# sourceMappingURL=awsSmsSender.client-QBVM62KM.mjs.map
45
+ //# sourceMappingURL=awsSmsSender.client-QBVM62KM.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/services/clients/awsSmsSender.client.ts"],"names":["AwsSMSSenderClient","constructor","client","sendOne","phone","message","command","PublishCommand","Message","PhoneNumber","send","accessKeyId","USERNAME","process","env","AWS_ACCESS_KEY_ID","secretAccessKey","PASSWORD","AWS_SECRET_ACCESS_KEY","region","REGION","AWS_REGION","NotProvidedCredentialsError","SNSClient","credentials","phones","result","sent","failed","Promise","all","map","then","push","catch","error"],"mappings":";;;AAUA,IAAqBA,mBAAAA,GAArB,MAAqBA,mBAAAA,CAAAA;EAEjBC,WAAAA,GAAc;AADNC,IAAAA,aAAAA,CAAAA,IAAAA,EAAAA,QAAAA,CAAAA;AAsCAC,IAAAA,aAAAA,CAAAA,IAAAA,EAAAA,SAAAA,kBAAU,MAAA,CAAA,OACdC,OACAC,OAAAA,KAAAA;AAEA,MAAA,MAAMC,OAAAA,GAAU,IAAIC,cAAAA,CAAe;QAC/BC,OAAAA,EAASH,OAAAA;QACTI,WAAAA,EAAaL;OACjB,CAAA;AAEA,MAAA,OAAO,MAAM,IAAA,CAAKF,MAAAA,CAAOQ,IAAAA,CAAKJ,OAAAA,CAAAA;IAClC,CAAA,EAVkB,SAAA,CAAA,CAAA;AApCd,IAAA,MAAMK,WAAAA,GAAcC,QAAAA,IAAYC,OAAAA,CAAQC,GAAAA,CAAIC,iBAAAA;AAC5C,IAAA,MAAMC,eAAAA,GAAkBC,QAAAA,IAAYJ,OAAAA,CAAQC,GAAAA,CAAII,qBAAAA;AAChD,IAAA,MAAMC,MAAAA,GAASC,MAAAA,IAAUP,OAAAA,CAAQC,GAAAA,CAAIO,UAAAA;AACrC,IAAA,IAAI,EAAEV,WAAAA,IAAeK,eAAAA,CAAAA,EACjB,MAAM,IAAIM,2BAAAA,EAAAA;AACd,IAAA,IAAA,CAAKpB,MAAAA,GAAS,IAAIqB,SAAAA,CAAU;AACxBJ,MAAAA,MAAAA;MACAK,WAAAA,EAAa;AACTb,QAAAA,WAAAA;AACAK,QAAAA;AACJ;KACJ,CAAA;AACJ,EAAA;AAEA,EAAA,MAAaN,IAAAA,CACTe,MAAAA,GAAmB,EAAA,EACnBpB,OAAAA,EACmB;AACnB,IAAA,MAAMqB,MAAAA,GAAqB;AACvBC,MAAAA,IAAAA,EAAM,EAAA;AACNC,MAAAA,MAAAA,EAAQ;AACZ,KAAA;AAEA,IAAA,MAAMC,OAAAA,CAAQC,GAAAA,CACVL,MAAAA,CAAOM,GAAAA,CAAI,CAAC3B,KAAAA,KACR,IAAA,CAAKD,OAAAA,CAAQC,KAAAA,EAAOC,OAAAA,CAAAA,CACf2B,IAAAA,CAAK,MAAMN,MAAAA,CAAOC,KAAKM,IAAAA,CAAK;AAAE7B,MAAAA;AAAM,KAAA,CAAA,CAAA,CACpC8B,KAAAA,CAAM,CAACC,KAAAA,KACJT,MAAAA,CAAOE,OAAOK,IAAAA,CAAK;AAAE7B,MAAAA,KAAAA;AAAO+B,MAAAA,KAAAA,EAAOA,KAAAA,CAAM9B;KAAQ,CAAA,CAAA,CAAA,CAAA;AAKjE,IAAA,OAAOqB,MAAAA;AACX,EAAA;AAaJ,CAAA;AAlDqB1B,MAAAA,CAAAA,mBAAAA,EAAAA,oBAAAA,CAAAA;AAArB,IAAqBA,kBAAAA,GAArB","file":"awsSmsSender.client-QBVM62KM.mjs","sourcesContent":["import { NotProvidedCredentialsError } from '../../errors';\nimport { ISMSSender } from '../../interfaces';\nimport { SendResult } from '../../types';\nimport { PASSWORD, REGION, USERNAME } from '../../utils/constants';\nimport {\n PublishCommand,\n PublishCommandOutput,\n SNSClient,\n} from '@aws-sdk/client-sns';\n\nexport default class AwsSMSSenderClient implements ISMSSender {\n private client: SNSClient;\n constructor() {\n const accessKeyId = USERNAME || process.env.AWS_ACCESS_KEY_ID;\n const secretAccessKey = PASSWORD || process.env.AWS_SECRET_ACCESS_KEY;\n const region = REGION || process.env.AWS_REGION;\n if (!(accessKeyId && secretAccessKey))\n throw new NotProvidedCredentialsError();\n this.client = new SNSClient({\n region: region,\n credentials: {\n accessKeyId: accessKeyId,\n secretAccessKey: secretAccessKey,\n },\n });\n }\n\n public async send(\n phones: string[] = [],\n message: string,\n ): 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)\n .then(() => result.sent.push({ phone }))\n .catch((error) =>\n result.failed.push({ phone, error: error.message }),\n ),\n ),\n );\n\n return result;\n }\n\n private sendOne = async (\n phone: string,\n message: string,\n ): Promise<PublishCommandOutput> => {\n const command = new PublishCommand({\n Message: message,\n PhoneNumber: phone,\n });\n\n return await this.client.send(command);\n };\n}\n"]}
@@ -0,0 +1,39 @@
1
+ import { __name, __publicField, USERNAME, PASSWORD, FROM, NotProvidedCredentialsError } from './chunk-3OKJAMCQ.mjs';
2
+ import { SmsClient } from '@azure/communication-sms';
3
+
4
+ var _AzureSMSSenderClient = class _AzureSMSSenderClient {
5
+ constructor() {
6
+ __publicField(this, "client");
7
+ var _a;
8
+ if (!(USERNAME && PASSWORD && FROM) && !process.env.COMMUNICATION_SERVICES_CONNECTION_STRING) throw new NotProvidedCredentialsError();
9
+ const connectionString = (_a = process.env.COMMUNICATION_SERVICES_CONNECTION_STRING) != null ? _a : `endpoint=https://${USERNAME}.communication.azure.com/;accesskey=${PASSWORD}`;
10
+ this.client = new SmsClient(connectionString);
11
+ }
12
+ async send(phones, message) {
13
+ const result = {
14
+ sent: [],
15
+ failed: []
16
+ };
17
+ const smsResults = await this.client.send({
18
+ from: FROM,
19
+ to: phones,
20
+ message
21
+ });
22
+ smsResults.forEach((smsResult) => {
23
+ if (smsResult.errorMessage) result.failed.push({
24
+ phone: smsResult.to,
25
+ error: smsResult.errorMessage
26
+ });
27
+ else result.sent.push({
28
+ phone: smsResult.to
29
+ });
30
+ });
31
+ return result;
32
+ }
33
+ };
34
+ __name(_AzureSMSSenderClient, "AzureSMSSenderClient");
35
+ var AzureSMSSenderClient = _AzureSMSSenderClient;
36
+
37
+ export { AzureSMSSenderClient as default };
38
+ //# sourceMappingURL=azureSmsSender.client-Z3P5SL47.mjs.map
39
+ //# sourceMappingURL=azureSmsSender.client-Z3P5SL47.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/services/clients/azureSmsSender.client.ts"],"names":["AzureSMSSenderClient","constructor","client","USERNAME","PASSWORD","FROM","process","env","COMMUNICATION_SERVICES_CONNECTION_STRING","NotProvidedCredentialsError","connectionString","SmsClient","send","phones","message","result","sent","failed","smsResults","from","to","forEach","smsResult","errorMessage","push","phone","error"],"mappings":";;;AAMA,IAAqBA,qBAAAA,GAArB,MAAqBA,qBAAAA,CAAAA;EAEjBC,WAAAA,GAAc;AADdC,IAAAA,aAAAA,CAAAA,IAAAA,EAAAA,QAAAA,CAAAA;AAPJ,IAAA,IAAA,EAAA;AASQ,IAAA,IACI,EAAEC,QAAAA,IAAYC,QAAAA,IAAYC,IAAAA,CAAAA,IAC1B,CAACC,QAAQC,GAAAA,CAAIC,wCAAAA,EAEb,MAAM,IAAIC,2BAAAA,EAAAA;AACd,IAAA,MAAMC,gBAAAA,GAAAA,CACFJ,aAAQC,GAAAA,CAAIC,wCAAAA,KAAZF,YACA,CAAA,iBAAA,EAAoBH,QAAAA,uCAA+CC,QAAAA,CAAAA,CAAAA;AACvE,IAAA,IAAA,CAAKF,MAAAA,GAAS,IAAIS,SAAAA,CAAUD,gBAAAA,CAAAA;AAChC,EAAA;EAEA,MAAaE,IAAAA,CAAKC,QAAkBC,OAAAA,EAAsC;AACtE,IAAA,MAAMC,MAAAA,GAAqB;AACvBC,MAAAA,IAAAA,EAAM,EAAA;AACNC,MAAAA,MAAAA,EAAQ;AACZ,KAAA;AACA,IAAA,MAAMC,UAAAA,GAAa,MAAM,IAAA,CAAKhB,MAAAA,CAAOU,IAAAA,CAAK;MACtCO,IAAAA,EAAMd,IAAAA;MACNe,EAAAA,EAAIP,MAAAA;AACJC,MAAAA;KACJ,CAAA;AAEAI,IAAAA,UAAAA,CAAWG,OAAAA,CAAQ,CAACC,SAAAA,KAAAA;AAChB,MAAA,IAAIA,SAAAA,CAAUC,YAAAA,EACVR,MAAAA,CAAOE,MAAAA,CAAOO,IAAAA,CAAK;AACfC,QAAAA,KAAAA,EAAOH,SAAAA,CAAUF,EAAAA;AACjBM,QAAAA,KAAAA,EAAOJ,SAAAA,CAAUC;OACrB,CAAA;AACCR,WAAAA,MAAAA,CAAOC,KAAKQ,IAAAA,CAAK;AAAEC,QAAAA,KAAAA,EAAOH,SAAAA,CAAUF;OAAG,CAAA;IAChD,CAAA,CAAA;AAEA,IAAA,OAAOL,MAAAA;AACX,EAAA;AACJ,CAAA;AApCqBf,MAAAA,CAAAA,qBAAAA,EAAAA,sBAAAA,CAAAA;AAArB,IAAqBA,oBAAAA,GAArB","file":"azureSmsSender.client-Z3P5SL47.mjs","sourcesContent":["import { NotProvidedCredentialsError } from '../../errors';\nimport { ISMSSender } from '../../interfaces';\nimport { SendResult } from '../../types';\nimport { USERNAME, PASSWORD, FROM } from '../../utils/constants';\nimport { SmsClient } from '@azure/communication-sms';\n\nexport default class AzureSMSSenderClient implements ISMSSender {\n client: SmsClient;\n constructor() {\n if (\n !(USERNAME && PASSWORD && FROM) &&\n !process.env.COMMUNICATION_SERVICES_CONNECTION_STRING\n )\n throw new NotProvidedCredentialsError();\n const connectionString =\n process.env.COMMUNICATION_SERVICES_CONNECTION_STRING ??\n `endpoint=https://${USERNAME}.communication.azure.com/;accesskey=${PASSWORD}`;\n this.client = new SmsClient(connectionString);\n }\n\n public async send(phones: string[], message: string): Promise<SendResult> {\n const result: SendResult = {\n sent: [],\n failed: [],\n };\n const smsResults = await this.client.send({\n from: FROM as string,\n to: phones,\n message: message,\n });\n\n smsResults.forEach((smsResult) => {\n if (smsResult.errorMessage)\n result.failed.push({\n phone: smsResult.to,\n error: smsResult.errorMessage,\n });\n else result.sent.push({ phone: smsResult.to });\n });\n\n return result;\n }\n}\n"]}
@@ -0,0 +1,36 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
4
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
+
6
+ // src/errors/notProvidedCredentials.error.ts
7
+ var _NotProvidedCredentialsError = class _NotProvidedCredentialsError extends Error {
8
+ constructor() {
9
+ super("SMS sender credentials not provided.");
10
+ this.name = "NotProvidedCredentialsError";
11
+ }
12
+ };
13
+ __name(_NotProvidedCredentialsError, "NotProvidedCredentialsError");
14
+ var NotProvidedCredentialsError = _NotProvidedCredentialsError;
15
+
16
+ // src/errors/unknownProvider.error.ts
17
+ var _UnknownProviderError = class _UnknownProviderError extends Error {
18
+ constructor() {
19
+ super("Unknown provider. Set PROVIDER env variable");
20
+ this.name = "UnknownProviderError";
21
+ }
22
+ };
23
+ __name(_UnknownProviderError, "UnknownProviderError");
24
+ var UnknownProviderError = _UnknownProviderError;
25
+
26
+ // src/utils/constants.ts
27
+ var SMS_PROVIDER = process.env.SMS_PROVIDER;
28
+ var PLATFORM_CLOUD = process.env.PLATFORM_CLOUD;
29
+ var USERNAME = process.env.SMS_PROVIDER_USERNAME;
30
+ var PASSWORD = process.env.SMS_PROVIDER_PASSWORD;
31
+ var FROM = process.env.SMS_PROVIDER_FROM_NUMBER;
32
+ var REGION = process.env.SMS_PROVIDER_REGION;
33
+
34
+ export { FROM, NotProvidedCredentialsError, PASSWORD, PLATFORM_CLOUD, REGION, SMS_PROVIDER, USERNAME, UnknownProviderError, __name, __publicField };
35
+ //# sourceMappingURL=chunk-3OKJAMCQ.mjs.map
36
+ //# sourceMappingURL=chunk-3OKJAMCQ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/errors/notProvidedCredentials.error.ts","../../src/errors/unknownProvider.error.ts","../../src/utils/constants.ts"],"names":["NotProvidedCredentialsError","Error","constructor","name","UnknownProviderError","SMS_PROVIDER","process","env","PLATFORM_CLOUD","USERNAME","SMS_PROVIDER_USERNAME","PASSWORD","SMS_PROVIDER_PASSWORD","FROM","SMS_PROVIDER_FROM_NUMBER","REGION","SMS_PROVIDER_REGION"],"mappings":";;;;;;AAAO,IAAMA,4BAAAA,GAAN,MAAMA,4BAAAA,SAAoCC,KAAAA,CAAAA;EAC7CC,WAAAA,GAAc;AACV,IAAA,KAAA,CAAM,sCAAA,CAAA;AACN,IAAA,IAAA,CAAKC,IAAAA,GAAO,6BAAA;AAChB,EAAA;AACJ,CAAA;AALiDF,MAAAA,CAAAA,4BAAAA,EAAAA,6BAAAA,CAAAA;AAA1C,IAAMD,2BAAAA,GAAN;;;ACAA,IAAMI,qBAAAA,GAAN,MAAMA,qBAAAA,SAA6BH,KAAAA,CAAAA;EACtCC,WAAAA,GAAc;AACV,IAAA,KAAA,CAAM,6CAAA,CAAA;AACN,IAAA,IAAA,CAAKC,IAAAA,GAAO,sBAAA;AAChB,EAAA;AACJ,CAAA;AAL0CF,MAAAA,CAAAA,qBAAAA,EAAAA,sBAAAA,CAAAA;AAAnC,IAAMG,oBAAAA,GAAN;;;ACAA,IAAMC,YAAAA,GAAeC,QAAQC,GAAAA,CAAIF;AACjC,IAAMG,cAAAA,GAAiBF,QAAQC,GAAAA,CAAIC;AAEnC,IAAMC,QAAAA,GAAWH,QAAQC,GAAAA,CAAIG;AAC7B,IAAMC,QAAAA,GAAWL,QAAQC,GAAAA,CAAIK;AAC7B,IAAMC,IAAAA,GAAOP,QAAQC,GAAAA,CAAIO;AACzB,IAAMC,MAAAA,GAAST,QAAQC,GAAAA,CAAIS","file":"chunk-3OKJAMCQ.mjs","sourcesContent":["export class NotProvidedCredentialsError extends Error {\n constructor() {\n super('SMS sender credentials not provided.');\n this.name = 'NotProvidedCredentialsError';\n }\n}\n","export class UnknownProviderError extends Error {\n constructor() {\n super('Unknown provider. Set PROVIDER env variable');\n this.name = 'UnknownProviderError';\n }\n}\n","export const SMS_PROVIDER = process.env.SMS_PROVIDER;\nexport const PLATFORM_CLOUD = process.env.PLATFORM_CLOUD;\n\nexport const USERNAME = process.env.SMS_PROVIDER_USERNAME;\nexport const PASSWORD = process.env.SMS_PROVIDER_PASSWORD;\nexport const FROM = process.env.SMS_PROVIDER_FROM_NUMBER;\nexport const REGION = process.env.SMS_PROVIDER_REGION;\n"]}
@@ -1,36 +1,39 @@
1
- import { SMS_PROVIDER, UnknownProviderError, PLATFORM_CLOUD } from './chunk-GH3HZBE6.mjs';
1
+ import { __name, __publicField, SMS_PROVIDER, UnknownProviderError, PLATFORM_CLOUD } from './chunk-3OKJAMCQ.mjs';
2
2
 
3
3
  // src/mappers/qrveyEnvs.mapper.ts
4
- var getSMSProviderFromPlatformCloud = () => {
4
+ var getSMSProviderFromPlatformCloud = /* @__PURE__ */ __name(() => {
5
5
  var _a, _b;
6
6
  const platformCloudDictionary = {
7
7
  AWS: "aws",
8
8
  AZURE: "azure"
9
9
  };
10
10
  return (_b = platformCloudDictionary[(_a = PLATFORM_CLOUD) != null ? _a : ""]) != null ? _b : void 0;
11
- };
11
+ }, "getSMSProviderFromPlatformCloud");
12
12
 
13
13
  // src/services/smsSenderFactory.service.ts
14
- var SMSSenderFactory = class {
14
+ var _SMSSenderFactory = class _SMSSenderFactory {
15
15
  static async getSMSSender() {
16
16
  var _a, _b, _c;
17
17
  const provider = (_b = getSMSProviderFromPlatformCloud()) != null ? _b : (_a = SMS_PROVIDER) == null ? void 0 : _a.toLowerCase();
18
18
  if (!provider) throw new UnknownProviderError();
19
+ if (!this.providerModules[provider]) throw new UnknownProviderError();
19
20
  const { default: SMSSender } = await this.providerModules[provider]();
20
21
  this._smsSender = (_c = this._smsSender) != null ? _c : new SMSSender();
21
22
  return this._smsSender;
22
23
  }
23
24
  };
24
- SMSSenderFactory.providerModules = {
25
- twilio: () => import('./twilioSmsSender.client-2Q2EIZIP.mjs'),
26
- aws: () => import('./awsSmsSender.client-LIUIAB4N.mjs'),
27
- azure: () => import('./azureSmsSender.client-KHGAWQJU.mjs'),
28
- vonage: () => import('./vonageSmsSender.client-TD4MHO4D.mjs')
29
- };
30
- SMSSenderFactory._smsSender = null;
25
+ __name(_SMSSenderFactory, "SMSSenderFactory");
26
+ __publicField(_SMSSenderFactory, "providerModules", {
27
+ twilio: /* @__PURE__ */ __name(() => import('./twilioSmsSender.client-J4FEYTVH.mjs'), "twilio"),
28
+ aws: /* @__PURE__ */ __name(() => import('./awsSmsSender.client-QBVM62KM.mjs'), "aws"),
29
+ azure: /* @__PURE__ */ __name(() => import('./azureSmsSender.client-Z3P5SL47.mjs'), "azure"),
30
+ vonage: /* @__PURE__ */ __name(() => import('./vonageSmsSender.client-7KP2UCMI.mjs'), "vonage")
31
+ });
32
+ __publicField(_SMSSenderFactory, "_smsSender", null);
33
+ var SMSSenderFactory = _SMSSenderFactory;
31
34
 
32
35
  // src/services/smsSender.service.ts
33
- var SMSSenderService = class {
36
+ var _SMSSenderService = class _SMSSenderService {
34
37
  /**
35
38
  * Send a message to one or more phones.
36
39
  * @param phones - phone numbers to send to
@@ -49,6 +52,8 @@ var SMSSenderService = class {
49
52
  }
50
53
  }
51
54
  };
55
+ __name(_SMSSenderService, "SMSSenderService");
56
+ var SMSSenderService = _SMSSenderService;
52
57
 
53
58
  export { SMSSenderService };
54
59
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/mappers/qrveyEnvs.mapper.ts","../../src/services/smsSenderFactory.service.ts","../../src/services/smsSender.service.ts"],"names":[],"mappings":";;;AAEO,IAAM,kCAAkC,MAAM;AAFrD,EAAA,IAAA,EAAA,EAAA,EAAA;AAGI,EAAA,MAAM,uBAAA,GAAkD;AAAA,IACpD,GAAA,EAAK,KAAA;AAAA,IACL,KAAA,EAAO;AAAA,GACX;AAEA,EAAA,OAAA,CAAO,EAAA,GAAA,uBAAA,CAAA,CAAwB,EAAA,GAAA,cAAA,KAAA,IAAA,GAAA,EAAA,GAAkB,EAAE,CAAA,KAA5C,IAAA,GAAA,EAAA,GAAiD,MAAA;AAC5D,CAAA;;;ACHO,IAAM,mBAAN,MAAuB;AAAA,EAY1B,aAAa,YAAA,GAAoC;AAlBrD,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAmBQ,IAAA,MAAM,QAAA,GAAA,CACF,EAAA,GAAA,+BAAA,EAAgC,KAAhC,IAAA,GAAA,EAAA,GAAA,CAAqC,EAAA,GAAA,YAAA,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAc,WAAA,EAAA;AACvD,IAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,oBAAA,EAAqB;AAE9C,IAAA,MAAM,EAAE,SAAS,SAAA,EAAU,GAAI,MAAM,IAAA,CAAK,eAAA,CAAgB,QAAQ,CAAA,EAAE;AACpE,IAAA,IAAA,CAAK,UAAA,GAAA,CAAa,EAAA,GAAA,IAAA,CAAK,UAAA,KAAL,IAAA,GAAA,EAAA,GAAmB,IAAI,SAAA,EAAU;AACnD,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EAChB;AACJ,CAAA;AArBa,gBAAA,CACM,eAAA,GAGX;AAAA,EACA,MAAA,EAAQ,MAAM,OAAO,uCAAkC,CAAA;AAAA,EACvD,GAAA,EAAK,MAAM,OAAO,oCAA+B,CAAA;AAAA,EACjD,KAAA,EAAO,MAAM,OAAO,sCAAiC,CAAA;AAAA,EACrD,MAAA,EAAQ,MAAM,OAAO,uCAAkC;AAC3D,CAAA;AATS,gBAAA,CAUM,UAAA,GAAgC,IAAA;;;ACb5C,IAAM,mBAAN,MAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO1B,MAAa,IAAA,CAAK,MAAA,EAAkB,OAAA,EAAsC;AACtE,IAAA,OAAA,CAAQ,MAAM,gBAAA,CAAiB,YAAA,EAAa,EAAG,IAAA,CAAK,QAAQ,OAAO,CAAA;AAAA,EACvE;AAAA,EAEA,aAAoB,WAAA,GAAgC;AAChD,IAAA,IAAI;AACA,MAAA,MAAM,iBAAiB,YAAA,EAAa;AACpC,MAAA,OAAO,IAAA;AAAA,IACX,SAAS,KAAA,EAAO;AACZ,MAAA,OAAO,KAAA;AAAA,IACX;AAAA,EACJ;AACJ","file":"index.mjs","sourcesContent":["import { PLATFORM_CLOUD } from '../utils/constants';\n\nexport const getSMSProviderFromPlatformCloud = () => {\n const platformCloudDictionary: Record<string, string> = {\n AWS: 'aws',\n AZURE: 'azure',\n };\n\n return platformCloudDictionary[PLATFORM_CLOUD ?? ''] ?? undefined;\n};\n","import { UnknownProviderError } from '../errors';\nimport { ISMSSender } from '../interfaces';\nimport { SMSProviderModule } from '../types';\nimport { SMS_PROVIDER } from '../utils/constants';\nimport { getSMSProviderFromPlatformCloud } from '../mappers/qrveyEnvs.mapper';\n\nexport class SMSSenderFactory {\n private static providerModules: Record<\n string,\n () => Promise<SMSProviderModule>\n > = {\n twilio: () => import('./clients/twilioSmsSender.client'),\n aws: () => import('./clients/awsSmsSender.client'),\n azure: () => import('./clients/azureSmsSender.client'),\n vonage: () => import('./clients/vonageSmsSender.client'),\n };\n private static _smsSender: ISMSSender | null = null;\n\n static async getSMSSender(): Promise<ISMSSender> {\n const provider =\n getSMSProviderFromPlatformCloud() ?? SMS_PROVIDER?.toLowerCase();\n if (!provider) throw new UnknownProviderError();\n\n const { default: SMSSender } = await this.providerModules[provider]();\n this._smsSender = this._smsSender ?? new SMSSender();\n return this._smsSender;\n }\n}\n","import { SendResult } from '../types';\nimport { SMSSenderFactory } from './smsSenderFactory.service';\n\nexport class SMSSenderService {\n /**\n * Send a message to one or more phones.\n * @param phones - phone numbers to send to\n * @param message - message to send\n * @returns {Promise<SendResult>} Send result.\n */\n public async send(phones: string[], message: string): Promise<SendResult> {\n return (await SMSSenderFactory.getSMSSender()).send(phones, message);\n }\n\n public static async checkStatus(): Promise<boolean> {\n try {\n await SMSSenderFactory.getSMSSender();\n return true;\n } catch (error) {\n return false;\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/mappers/qrveyEnvs.mapper.ts","../../src/services/smsSenderFactory.service.ts","../../src/services/smsSender.service.ts"],"names":["getSMSProviderFromPlatformCloud","platformCloudDictionary","AWS","AZURE","PLATFORM_CLOUD","undefined","SMSSenderFactory","getSMSSender","provider","SMS_PROVIDER","toLowerCase","UnknownProviderError","providerModules","default","SMSSender","_smsSender","twilio","aws","azure","vonage","SMSSenderService","send","phones","message","checkStatus","error"],"mappings":";;;AAEO,IAAMA,kDAAkC,MAAA,CAAA,MAAA;AAF/C,EAAA,IAAA,EAAA,EAAA,EAAA;AAGI,EAAA,MAAMC,uBAAAA,GAAkD;IACpDC,GAAAA,EAAK,KAAA;IACLC,KAAAA,EAAO;AACX,GAAA;AAEA,EAAA,OAAA,CAAOF,EAAAA,GAAAA,uBAAAA,CAAAA,CAAwBG,EAAAA,GAAAA,cAAAA,KAAAA,IAAAA,GAAAA,EAAAA,GAAkB,EAAA,CAAA,KAA1CH,IAAAA,GAAAA,EAAAA,GAAiDI,MAAAA;AAC5D,CAAA,EAP+C,iCAAA,CAAA;;;ACIxC,IAAMC,iBAAAA,GAAN,MAAMA,iBAAAA,CAAAA;AAYT,EAAA,aAAaC,YAAAA,GAAoC;AAlBrD,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAmBQ,IAAA,MAAMC,QAAAA,GAAAA,CACFR,EAAAA,GAAAA,+BAAAA,EAAAA,KAAAA,IAAAA,GAAAA,EAAAA,GAAAA,CAAqCS,EAAAA,GAAAA,YAAAA,KAAAA,IAAAA,GAAAA,MAAAA,GAAAA,EAAAA,CAAcC,WAAAA,EAAAA;AACvD,IAAA,IAAI,CAACF,QAAAA,EAAU,MAAM,IAAIG,oBAAAA,EAAAA;AACzB,IAAA,IAAI,CAAC,IAAA,CAAKC,eAAAA,CAAgBJ,QAAAA,CAAAA,EAAW,MAAM,IAAIG,oBAAAA,EAAAA;AAE/C,IAAA,MAAM,EAAEE,SAASC,SAAAA,EAAS,GAAK,MAAM,IAAA,CAAKF,eAAAA,CAAgBJ,QAAAA,CAAAA,EAAS;AACnE,IAAA,IAAA,CAAKO,UAAAA,GAAAA,CAAa,EAAA,GAAA,IAAA,CAAKA,UAAAA,KAAL,IAAA,GAAA,EAAA,GAAmB,IAAID,SAAAA,EAAAA;AACzC,IAAA,OAAO,IAAA,CAAKC,UAAAA;AAChB,EAAA;AACJ,CAAA;AAtBaT,MAAAA,CAAAA,iBAAAA,EAAAA,kBAAAA,CAAAA;AACT,aAAA,CADSA,mBACMM,iBAAAA,EAGX;EACAI,MAAAA,kBAAQ,MAAA,CAAA,MAAM,OAAO,uCAAA,CAAA,EAAb,QAAA,CAAA;EACRC,GAAAA,kBAAK,MAAA,CAAA,MAAM,OAAO,oCAAA,CAAA,EAAb,KAAA,CAAA;EACLC,KAAAA,kBAAO,MAAA,CAAA,MAAM,OAAO,sCAAA,CAAA,EAAb,OAAA,CAAA;EACPC,MAAAA,kBAAQ,MAAA,CAAA,MAAM,OAAO,uCAAA,CAAA,EAAb,QAAA;AACZ,CAAA,CAAA;AACA,aAAA,CAVSb,mBAUMS,YAAAA,EAAgC,IAAA,CAAA;AAV5C,IAAMT,gBAAAA,GAAN,iBAAA;;;ACHA,IAAMc,iBAAAA,GAAN,MAAMA,iBAAAA,CAAAA;;;;;;;EAOT,MAAaC,IAAAA,CAAKC,QAAkBC,OAAAA,EAAsC;AACtE,IAAA,OAAA,CAAQ,MAAMjB,gBAAAA,CAAiBC,YAAAA,EAAY,EAAIc,IAAAA,CAAKC,QAAQC,OAAAA,CAAAA;AAChE,EAAA;AAEA,EAAA,aAAoBC,WAAAA,GAAgC;AAChD,IAAA,IAAI;AACA,MAAA,MAAMlB,iBAAiBC,YAAAA,EAAY;AACnC,MAAA,OAAO,IAAA;AACX,IAAA,CAAA,CAAA,OAASkB,KAAAA,EAAO;AACZ,MAAA,OAAO,KAAA;AACX,IAAA;AACJ,EAAA;AACJ,CAAA;AAnBaL,MAAAA,CAAAA,iBAAAA,EAAAA,kBAAAA,CAAAA;AAAN,IAAMA,gBAAAA,GAAN","file":"index.mjs","sourcesContent":["import { PLATFORM_CLOUD } from '../utils/constants';\n\nexport const getSMSProviderFromPlatformCloud = () => {\n const platformCloudDictionary: Record<string, string> = {\n AWS: 'aws',\n AZURE: 'azure',\n };\n\n return platformCloudDictionary[PLATFORM_CLOUD ?? ''] ?? undefined;\n};\n","import { UnknownProviderError } from '../errors';\nimport { ISMSSender } from '../interfaces';\nimport { SMSProviderModule } from '../types';\nimport { SMS_PROVIDER } from '../utils/constants';\nimport { getSMSProviderFromPlatformCloud } from '../mappers/qrveyEnvs.mapper';\n\nexport class SMSSenderFactory {\n private static providerModules: Record<\n string,\n () => Promise<SMSProviderModule>\n > = {\n twilio: () => import('./clients/twilioSmsSender.client'),\n aws: () => import('./clients/awsSmsSender.client'),\n azure: () => import('./clients/azureSmsSender.client'),\n vonage: () => import('./clients/vonageSmsSender.client'),\n };\n private static _smsSender: ISMSSender | null = null;\n\n static async getSMSSender(): Promise<ISMSSender> {\n const provider =\n getSMSProviderFromPlatformCloud() ?? SMS_PROVIDER?.toLowerCase();\n if (!provider) throw new UnknownProviderError();\n if (!this.providerModules[provider]) throw new UnknownProviderError();\n\n const { default: SMSSender } = await this.providerModules[provider]();\n this._smsSender = this._smsSender ?? new SMSSender();\n return this._smsSender;\n }\n}\n","import { SendResult } from '../types';\nimport { SMSSenderFactory } from './smsSenderFactory.service';\n\nexport class SMSSenderService {\n /**\n * Send a message to one or more phones.\n * @param phones - phone numbers to send to\n * @param message - message to send\n * @returns {Promise<SendResult>} Send result.\n */\n public async send(phones: string[], message: string): Promise<SendResult> {\n return (await SMSSenderFactory.getSMSSender()).send(phones, message);\n }\n\n public static async checkStatus(): Promise<boolean> {\n try {\n await SMSSenderFactory.getSMSSender();\n return true;\n } catch (error) {\n return false;\n }\n }\n}\n"]}
@@ -0,0 +1,34 @@
1
+ import { __name, __publicField, FROM, USERNAME, PASSWORD, NotProvidedCredentialsError } from './chunk-3OKJAMCQ.mjs';
2
+ import { Twilio } from 'twilio';
3
+
4
+ var _TwilioSMSSenderClient = class _TwilioSMSSenderClient {
5
+ constructor() {
6
+ __publicField(this, "client");
7
+ __publicField(this, "sendOne", /* @__PURE__ */ __name((phone, message) => this.client.messages.create({
8
+ from: FROM,
9
+ to: phone,
10
+ body: message
11
+ }), "sendOne"));
12
+ if (USERNAME && PASSWORD && FROM) this.client = new Twilio(USERNAME, PASSWORD);
13
+ else throw new NotProvidedCredentialsError();
14
+ }
15
+ async send(phones = [], message) {
16
+ const result = {
17
+ sent: [],
18
+ failed: []
19
+ };
20
+ await Promise.all(phones.map((phone) => this.sendOne(phone, message).then(() => result.sent.push({
21
+ phone
22
+ })).catch((error) => result.failed.push({
23
+ phone,
24
+ error: error.message
25
+ }))));
26
+ return result;
27
+ }
28
+ };
29
+ __name(_TwilioSMSSenderClient, "TwilioSMSSenderClient");
30
+ var TwilioSMSSenderClient = _TwilioSMSSenderClient;
31
+
32
+ export { TwilioSMSSenderClient as default };
33
+ //# sourceMappingURL=twilioSmsSender.client-J4FEYTVH.mjs.map
34
+ //# sourceMappingURL=twilioSmsSender.client-J4FEYTVH.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/services/clients/twilioSmsSender.client.ts"],"names":["TwilioSMSSenderClient","constructor","client","sendOne","phone","message","messages","create","from","FROM","to","body","USERNAME","PASSWORD","Twilio","NotProvidedCredentialsError","send","phones","result","sent","failed","Promise","all","map","then","push","catch","error"],"mappings":";;;AAOA,IAAqBA,sBAAAA,GAArB,MAAqBA,sBAAAA,CAAAA;EAEjBC,WAAAA,GAAc;AADNC,IAAAA,aAAAA,CAAAA,IAAAA,EAAAA,QAAAA,CAAAA;AA6BAC,IAAAA,aAAAA,CAAAA,IAAAA,EAAAA,SAAAA,0BACJC,KAAAA,EACAC,OAAAA,KAEA,IAAA,CAAKH,MAAAA,CAAOI,SAASC,MAAAA,CAAO;MACxBC,IAAAA,EAAMC,IAAAA;MACNC,EAAAA,EAAIN,KAAAA;MACJO,IAAAA,EAAMN;AACV,KAAA,CAAA,EARc,SAAA,CAAA,CAAA;AA3Bd,IAAA,IAAIO,QAAAA,IAAYC,YAAYJ,IAAAA,EACxB,IAAA,CAAKP,SAAS,IAAIY,MAAAA,CAAOF,UAAUC,QAAAA,CAAAA;AAClC,SAAA,MAAM,IAAIE,2BAAAA,EAAAA;AACnB,EAAA;AAEA,EAAA,MAAaC,IAAAA,CACTC,MAAAA,GAAmB,EAAA,EACnBZ,OAAAA,EACmB;AACnB,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,CACfmB,IAAAA,CAAK,MAAMN,MAAAA,CAAOC,KAAKM,IAAAA,CAAK;AAAErB,MAAAA;AAAM,KAAA,CAAA,CAAA,CACpCsB,KAAAA,CAAM,CAACC,KAAAA,KACJT,MAAAA,CAAOE,OAAOK,IAAAA,CAAK;AAAErB,MAAAA,KAAAA;AAAOuB,MAAAA,KAAAA,EAAOA,KAAAA,CAAMtB;KAAQ,CAAA,CAAA,CAAA,CAAA;AAKjE,IAAA,OAAOa,MAAAA;AACX,EAAA;AAWJ,CAAA;AAvCqBlB,MAAAA,CAAAA,sBAAAA,EAAAA,uBAAAA,CAAAA;AAArB,IAAqBA,qBAAAA,GAArB","file":"twilioSmsSender.client-J4FEYTVH.mjs","sourcesContent":["import { ISMSSender } from '../../interfaces/smsSender.interface';\nimport { Twilio } from 'twilio';\nimport { USERNAME, PASSWORD, FROM } from '../../utils/constants';\nimport { MessageInstance } from 'twilio/lib/rest/api/v2010/account/message';\nimport { SendResult } from '../../types/sendResult.type';\nimport { NotProvidedCredentialsError } from '../../errors';\n\nexport default class TwilioSMSSenderClient implements ISMSSender {\n private client: Twilio;\n constructor() {\n if (USERNAME && PASSWORD && FROM)\n this.client = new Twilio(USERNAME, PASSWORD);\n else throw new NotProvidedCredentialsError();\n }\n\n public async send(\n phones: string[] = [],\n message: string,\n ): 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)\n .then(() => result.sent.push({ phone }))\n .catch((error) =>\n result.failed.push({ phone, error: error.message }),\n ),\n ),\n );\n\n return result;\n }\n\n private sendOne = (\n phone: string,\n message: string,\n ): Promise<MessageInstance> =>\n this.client.messages.create({\n from: FROM,\n to: phone,\n body: message,\n });\n}\n"]}
@@ -0,0 +1,58 @@
1
+ import { __name, __publicField, FROM, USERNAME, PASSWORD, NotProvidedCredentialsError } from './chunk-3OKJAMCQ.mjs';
2
+
3
+ // src/services/clients/vonageSmsSender.client.ts
4
+ var _VonageSMSSenderClient = class _VonageSMSSenderClient {
5
+ constructor() {
6
+ __publicField(this, "clientPromise");
7
+ __publicField(this, "sendOne", /* @__PURE__ */ __name(async (phone, message) => {
8
+ const client = await this.getClient();
9
+ return client.sms.send({
10
+ to: phone,
11
+ text: message,
12
+ from: FROM
13
+ });
14
+ }, "sendOne"));
15
+ if (!(USERNAME && PASSWORD && FROM)) throw new NotProvidedCredentialsError();
16
+ }
17
+ async send(phones, message) {
18
+ const result = {
19
+ sent: [],
20
+ failed: []
21
+ };
22
+ await Promise.all(phones.map((phone) => this.sendOne(phone, message).then((data) => {
23
+ var _a;
24
+ if ((_a = data.messages) == null ? void 0 : _a.some((message2) => message2.status !== "0")) {
25
+ result.failed.push({
26
+ phone,
27
+ error: data.messages[0].errorText
28
+ });
29
+ } else {
30
+ result.sent.push({
31
+ phone
32
+ });
33
+ }
34
+ })));
35
+ return result;
36
+ }
37
+ async getClient() {
38
+ var _a;
39
+ this.clientPromise = (_a = this.clientPromise) != null ? _a : (async () => {
40
+ const [{ Vonage }, { Auth }] = await Promise.all([
41
+ import('@vonage/server-sdk'),
42
+ import('@vonage/auth')
43
+ ]);
44
+ const vonageAuth = new Auth({
45
+ apiKey: USERNAME,
46
+ apiSecret: PASSWORD
47
+ });
48
+ return new Vonage(vonageAuth);
49
+ })();
50
+ return this.clientPromise;
51
+ }
52
+ };
53
+ __name(_VonageSMSSenderClient, "VonageSMSSenderClient");
54
+ var VonageSMSSenderClient = _VonageSMSSenderClient;
55
+
56
+ export { VonageSMSSenderClient as default };
57
+ //# sourceMappingURL=vonageSmsSender.client-7KP2UCMI.mjs.map
58
+ //# sourceMappingURL=vonageSmsSender.client-7KP2UCMI.mjs.map
@@ -0,0 +1 @@
1
+ {"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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qrvey/sms",
3
- "version": "1.0.0-554",
3
+ "version": "1.0.1-949",
4
4
  "types": "dist/types/index.d.ts",
5
5
  "main": "dist/cjs/index.js",
6
6
  "exports": {
@@ -20,9 +20,9 @@
20
20
  "build:compile:esm": "tsup --config ./tsup.config.esm.ts",
21
21
  "build:compile:types": "tsup --config ./tsup.config.types.ts",
22
22
  "build:compile": "yarn build:compile:cjs && yarn build:compile:esm && yarn build:compile:types",
23
- "build": "yarn build:clean && yarn build:compile",
23
+ "build": "yarn test:cov && yarn build:clean && yarn build:compile",
24
24
  "prepare-publish": "yarn install && yarn build",
25
- "publish-package": "yarn prepare-publish && npm publish"
25
+ "publish-package": "yarn prepare-publish && npm publish --tag latest"
26
26
  },
27
27
  "keywords": [
28
28
  "sms",
@@ -33,7 +33,7 @@
33
33
  "license": "MIT",
34
34
  "description": "",
35
35
  "devDependencies": {
36
- "@aws-sdk/client-sns": "3.682.0",
36
+ "@aws-sdk/client-sns": "3.1021.0",
37
37
  "@azure/communication-sms": "1.2.0-beta.1",
38
38
  "@types/jest": "29.5.5",
39
39
  "@types/twilio": "3.19.3",
@@ -50,7 +50,7 @@
50
50
  "typescript": "5.2.2"
51
51
  },
52
52
  "peerDependencies": {
53
- "@aws-sdk/client-sns": "3.682.0",
53
+ "@aws-sdk/client-sns": "3.1021.0",
54
54
  "@azure/communication-sms": "1.2.0-beta.1",
55
55
  "@vonage/auth": "1.12.0",
56
56
  "@vonage/server-sdk": "3.19.1",
@@ -1,9 +1,7 @@
1
1
  /* eslint-disable @typescript-eslint/no-unused-vars */
2
- import { SMSMessages } from '@vonage/sms/dist/lib/types/SMSMessages';
3
2
  import VonageSMSSenderClient from './vonageSmsSender.client';
4
3
 
5
4
  jest.mock('@vonage/server-sdk', () => {
6
- const actualModule = jest.requireActual('@vonage/server-sdk');
7
5
  class Vonage {
8
6
  sms = {
9
7
  send: ({
@@ -14,15 +12,18 @@ jest.mock('@vonage/server-sdk', () => {
14
12
  from: string;
15
13
  to: string;
16
14
  body: string;
17
- }): Promise<SMSMessages> => Promise.resolve({} as SMSMessages),
15
+ }): Promise<unknown> => Promise.resolve({}),
18
16
  };
19
17
  }
20
18
  return {
21
- ...actualModule,
22
19
  Vonage,
23
20
  };
24
21
  });
25
22
 
23
+ jest.mock('@vonage/auth', () => ({
24
+ Auth: class Auth {},
25
+ }));
26
+
26
27
  jest.mock('../../utils/constants', () => ({
27
28
  FROM: '+123456789',
28
29
  USERNAME: 'qrvey',
@@ -1,21 +1,15 @@
1
1
  import { ISMSSender } from '../../interfaces';
2
2
  import { SendResult } from '../../types';
3
- import { Vonage } from '@vonage/server-sdk';
4
- import { Auth } from '@vonage/auth';
5
3
  import { USERNAME, PASSWORD, FROM } from '../../utils/constants';
6
4
  import { NotProvidedCredentialsError } from '../../errors';
7
- import { SMSMessages } from '@vonage/sms';
5
+ import type { Vonage } from '@vonage/server-sdk';
6
+ import type { SMSMessages } from '@vonage/sms';
8
7
 
9
8
  export default class VonageSMSSenderClient implements ISMSSender {
10
- private client: Vonage;
9
+ private clientPromise: Promise<Vonage> | undefined;
11
10
  constructor() {
12
11
  if (!(USERNAME && PASSWORD && FROM))
13
12
  throw new NotProvidedCredentialsError();
14
- const vonageAuth = new Auth({
15
- apiKey: USERNAME,
16
- apiSecret: PASSWORD,
17
- });
18
- this.client = new Vonage(vonageAuth);
19
13
  }
20
14
 
21
15
  public async send(phones: string[], message: string): Promise<SendResult> {
@@ -28,9 +22,7 @@ export default class VonageSMSSenderClient implements ISMSSender {
28
22
  phones.map((phone) =>
29
23
  this.sendOne(phone, message).then((data) => {
30
24
  if (
31
- data.messages?.some(
32
- (message: any) => message.status !== '0',
33
- )
25
+ data.messages?.some((message) => message.status !== '0')
34
26
  ) {
35
27
  result.failed.push({
36
28
  phone,
@@ -46,10 +38,33 @@ export default class VonageSMSSenderClient implements ISMSSender {
46
38
  return result;
47
39
  }
48
40
 
49
- private sendOne = (phone: string, message: string): Promise<SMSMessages> =>
50
- this.client.sms.send({
41
+ private async getClient(): Promise<Vonage> {
42
+ this.clientPromise =
43
+ this.clientPromise ??
44
+ (async () => {
45
+ const [{ Vonage }, { Auth }] = await Promise.all([
46
+ import('@vonage/server-sdk'),
47
+ import('@vonage/auth'),
48
+ ]);
49
+ const vonageAuth = new Auth({
50
+ apiKey: USERNAME as string,
51
+ apiSecret: PASSWORD as string,
52
+ });
53
+ return new Vonage(vonageAuth);
54
+ })();
55
+
56
+ return this.clientPromise;
57
+ }
58
+
59
+ private sendOne = async (
60
+ phone: string,
61
+ message: string,
62
+ ): Promise<SMSMessages> => {
63
+ const client = await this.getClient();
64
+ return client.sms.send({
51
65
  to: phone,
52
66
  text: message,
53
67
  from: FROM as string,
54
68
  });
69
+ };
55
70
  }
@@ -20,6 +20,7 @@ export class SMSSenderFactory {
20
20
  const provider =
21
21
  getSMSProviderFromPlatformCloud() ?? SMS_PROVIDER?.toLowerCase();
22
22
  if (!provider) throw new UnknownProviderError();
23
+ if (!this.providerModules[provider]) throw new UnknownProviderError();
23
24
 
24
25
  const { default: SMSSender } = await this.providerModules[provider]();
25
26
  this._smsSender = this._smsSender ?? new SMSSender();
@@ -1,44 +0,0 @@
1
- import { USERNAME, PASSWORD, REGION, NotProvidedCredentialsError } from './chunk-GH3HZBE6.mjs';
2
- import { PublishCommand, SNSClient } from '@aws-sdk/client-sns';
3
-
4
- var AwsSMSSenderClient = class {
5
- constructor() {
6
- this.sendOne = async (phone, message) => {
7
- const command = new PublishCommand({
8
- Message: message,
9
- PhoneNumber: phone
10
- });
11
- return await this.client.send(command);
12
- };
13
- const accessKeyId = USERNAME || process.env.AWS_ACCESS_KEY_ID;
14
- const secretAccessKey = PASSWORD || process.env.AWS_SECRET_ACCESS_KEY;
15
- const region = REGION || process.env.AWS_REGION;
16
- if (!(accessKeyId && secretAccessKey))
17
- throw new NotProvidedCredentialsError();
18
- this.client = new SNSClient({
19
- region,
20
- credentials: {
21
- accessKeyId,
22
- secretAccessKey
23
- }
24
- });
25
- }
26
- async send(phones = [], message) {
27
- const result = {
28
- sent: [],
29
- failed: []
30
- };
31
- await Promise.all(
32
- phones.map(
33
- (phone) => this.sendOne(phone, message).then(() => result.sent.push({ phone })).catch(
34
- (error) => result.failed.push({ phone, error: error.message })
35
- )
36
- )
37
- );
38
- return result;
39
- }
40
- };
41
-
42
- export { AwsSMSSenderClient as default };
43
- //# sourceMappingURL=awsSmsSender.client-LIUIAB4N.mjs.map
44
- //# sourceMappingURL=awsSmsSender.client-LIUIAB4N.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/services/clients/awsSmsSender.client.ts"],"names":[],"mappings":";;;AAUA,IAAqB,qBAArB,MAA8D;AAAA,EAE1D,WAAA,GAAc;AAqCd,IAAA,IAAA,CAAQ,OAAA,GAAU,OACd,KAAA,EACA,OAAA,KACgC;AAChC,MAAA,MAAM,OAAA,GAAU,IAAI,cAAA,CAAe;AAAA,QAC/B,OAAA,EAAS,OAAA;AAAA,QACT,WAAA,EAAa;AAAA,OAChB,CAAA;AAED,MAAA,OAAO,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AAAA,IACzC,CAAA;AA9CI,IAAA,MAAM,WAAA,GAAc,QAAA,IAAY,OAAA,CAAQ,GAAA,CAAI,iBAAA;AAC5C,IAAA,MAAM,eAAA,GAAkB,QAAA,IAAY,OAAA,CAAQ,GAAA,CAAI,qBAAA;AAChD,IAAA,MAAM,MAAA,GAAS,MAAA,IAAU,OAAA,CAAQ,GAAA,CAAI,UAAA;AACrC,IAAA,IAAI,EAAE,WAAA,IAAe,eAAA,CAAA;AACjB,MAAA,MAAM,IAAI,2BAAA,EAA4B;AAC1C,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,SAAA,CAAU;AAAA,MACxB,MAAA;AAAA,MACA,WAAA,EAAa;AAAA,QACT,WAAA;AAAA,QACA;AAAA;AACJ,KACH,CAAA;AAAA,EACL;AAAA,EAEA,MAAa,IAAA,CACT,MAAA,GAAmB,IACnB,OAAA,EACmB;AACnB,IAAA,MAAM,MAAA,GAAqB;AAAA,MACvB,MAAM,EAAC;AAAA,MACP,QAAQ;AAAC,KACb;AAEA,IAAA,MAAM,OAAA,CAAQ,GAAA;AAAA,MACV,MAAA,CAAO,GAAA;AAAA,QAAI,CAAC,KAAA,KACR,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,OAAO,CAAA,CACtB,IAAA,CAAK,MAAM,MAAA,CAAO,KAAK,IAAA,CAAK,EAAE,KAAA,EAAO,CAAC,CAAA,CACtC,KAAA;AAAA,UAAM,CAAC,KAAA,KACJ,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,CAAM,OAAA,EAAS;AAAA;AACtD;AACR,KACJ;AAEA,IAAA,OAAO,MAAA;AAAA,EACX;AAaJ","file":"awsSmsSender.client-LIUIAB4N.mjs","sourcesContent":["import { NotProvidedCredentialsError } from '../../errors';\nimport { ISMSSender } from '../../interfaces';\nimport { SendResult } from '../../types';\nimport { PASSWORD, REGION, USERNAME } from '../../utils/constants';\nimport {\n PublishCommand,\n PublishCommandOutput,\n SNSClient,\n} from '@aws-sdk/client-sns';\n\nexport default class AwsSMSSenderClient implements ISMSSender {\n private client: SNSClient;\n constructor() {\n const accessKeyId = USERNAME || process.env.AWS_ACCESS_KEY_ID;\n const secretAccessKey = PASSWORD || process.env.AWS_SECRET_ACCESS_KEY;\n const region = REGION || process.env.AWS_REGION;\n if (!(accessKeyId && secretAccessKey))\n throw new NotProvidedCredentialsError();\n this.client = new SNSClient({\n region: region,\n credentials: {\n accessKeyId: accessKeyId,\n secretAccessKey: secretAccessKey,\n },\n });\n }\n\n public async send(\n phones: string[] = [],\n message: string,\n ): 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)\n .then(() => result.sent.push({ phone }))\n .catch((error) =>\n result.failed.push({ phone, error: error.message }),\n ),\n ),\n );\n\n return result;\n }\n\n private sendOne = async (\n phone: string,\n message: string,\n ): Promise<PublishCommandOutput> => {\n const command = new PublishCommand({\n Message: message,\n PhoneNumber: phone,\n });\n\n return await this.client.send(command);\n };\n}\n"]}
@@ -1,36 +0,0 @@
1
- import { USERNAME, PASSWORD, FROM, NotProvidedCredentialsError } from './chunk-GH3HZBE6.mjs';
2
- import { SmsClient } from '@azure/communication-sms';
3
-
4
- var AzureSMSSenderClient = class {
5
- constructor() {
6
- var _a;
7
- if (!(USERNAME && PASSWORD && FROM) && !process.env.COMMUNICATION_SERVICES_CONNECTION_STRING)
8
- throw new NotProvidedCredentialsError();
9
- const connectionString = (_a = process.env.COMMUNICATION_SERVICES_CONNECTION_STRING) != null ? _a : `endpoint=https://${USERNAME}.communication.azure.com/;accesskey=${PASSWORD}`;
10
- this.client = new SmsClient(connectionString);
11
- }
12
- async send(phones, message) {
13
- const result = {
14
- sent: [],
15
- failed: []
16
- };
17
- const smsResults = await this.client.send({
18
- from: FROM,
19
- to: phones,
20
- message
21
- });
22
- smsResults.forEach((smsResult) => {
23
- if (smsResult.errorMessage)
24
- result.failed.push({
25
- phone: smsResult.to,
26
- error: smsResult.errorMessage
27
- });
28
- else result.sent.push({ phone: smsResult.to });
29
- });
30
- return result;
31
- }
32
- };
33
-
34
- export { AzureSMSSenderClient as default };
35
- //# sourceMappingURL=azureSmsSender.client-KHGAWQJU.mjs.map
36
- //# sourceMappingURL=azureSmsSender.client-KHGAWQJU.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/services/clients/azureSmsSender.client.ts"],"names":[],"mappings":";;;AAMA,IAAqB,uBAArB,MAAgE;AAAA,EAE5D,WAAA,GAAc;AARlB,IAAA,IAAA,EAAA;AASQ,IAAA,IACI,EAAE,QAAA,IAAY,QAAA,IAAY,IAAA,CAAA,IAC1B,CAAC,QAAQ,GAAA,CAAI,wCAAA;AAEb,MAAA,MAAM,IAAI,2BAAA,EAA4B;AAC1C,IAAA,MAAM,gBAAA,GAAA,CACF,aAAQ,GAAA,CAAI,wCAAA,KAAZ,YACA,CAAA,iBAAA,EAAoB,QAAQ,uCAAuC,QAAQ,CAAA,CAAA;AAC/E,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,SAAA,CAAU,gBAAgB,CAAA;AAAA,EAChD;AAAA,EAEA,MAAa,IAAA,CAAK,MAAA,EAAkB,OAAA,EAAsC;AACtE,IAAA,MAAM,MAAA,GAAqB;AAAA,MACvB,MAAM,EAAC;AAAA,MACP,QAAQ;AAAC,KACb;AACA,IAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK;AAAA,MACtC,IAAA,EAAM,IAAA;AAAA,MACN,EAAA,EAAI,MAAA;AAAA,MACJ;AAAA,KACH,CAAA;AAED,IAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,SAAA,KAAc;AAC9B,MAAA,IAAI,SAAA,CAAU,YAAA;AACV,QAAA,MAAA,CAAO,OAAO,IAAA,CAAK;AAAA,UACf,OAAO,SAAA,CAAU,EAAA;AAAA,UACjB,OAAO,SAAA,CAAU;AAAA,SACpB,CAAA;AAAA,kBACO,IAAA,CAAK,IAAA,CAAK,EAAE,KAAA,EAAO,SAAA,CAAU,IAAI,CAAA;AAAA,IACjD,CAAC,CAAA;AAED,IAAA,OAAO,MAAA;AAAA,EACX;AACJ","file":"azureSmsSender.client-KHGAWQJU.mjs","sourcesContent":["import { NotProvidedCredentialsError } from '../../errors';\nimport { ISMSSender } from '../../interfaces';\nimport { SendResult } from '../../types';\nimport { USERNAME, PASSWORD, FROM } from '../../utils/constants';\nimport { SmsClient } from '@azure/communication-sms';\n\nexport default class AzureSMSSenderClient implements ISMSSender {\n client: SmsClient;\n constructor() {\n if (\n !(USERNAME && PASSWORD && FROM) &&\n !process.env.COMMUNICATION_SERVICES_CONNECTION_STRING\n )\n throw new NotProvidedCredentialsError();\n const connectionString =\n process.env.COMMUNICATION_SERVICES_CONNECTION_STRING ??\n `endpoint=https://${USERNAME}.communication.azure.com/;accesskey=${PASSWORD}`;\n this.client = new SmsClient(connectionString);\n }\n\n public async send(phones: string[], message: string): Promise<SendResult> {\n const result: SendResult = {\n sent: [],\n failed: [],\n };\n const smsResults = await this.client.send({\n from: FROM as string,\n to: phones,\n message: message,\n });\n\n smsResults.forEach((smsResult) => {\n if (smsResult.errorMessage)\n result.failed.push({\n phone: smsResult.to,\n error: smsResult.errorMessage,\n });\n else result.sent.push({ phone: smsResult.to });\n });\n\n return result;\n }\n}\n"]}
@@ -1,27 +0,0 @@
1
- // src/errors/notProvidedCredentials.error.ts
2
- var NotProvidedCredentialsError = class extends Error {
3
- constructor() {
4
- super("SMS sender credentials not provided.");
5
- this.name = "NotProvidedCredentialsError";
6
- }
7
- };
8
-
9
- // src/errors/unknownProvider.error.ts
10
- var UnknownProviderError = class extends Error {
11
- constructor() {
12
- super("Unknown provider. Set PROVIDER env variable");
13
- this.name = "UnknownProviderError";
14
- }
15
- };
16
-
17
- // src/utils/constants.ts
18
- var SMS_PROVIDER = process.env.SMS_PROVIDER;
19
- var PLATFORM_CLOUD = process.env.PLATFORM_CLOUD;
20
- var USERNAME = process.env.SMS_PROVIDER_USERNAME;
21
- var PASSWORD = process.env.SMS_PROVIDER_PASSWORD;
22
- var FROM = process.env.SMS_PROVIDER_FROM_NUMBER;
23
- var REGION = process.env.SMS_PROVIDER_REGION;
24
-
25
- export { FROM, NotProvidedCredentialsError, PASSWORD, PLATFORM_CLOUD, REGION, SMS_PROVIDER, USERNAME, UnknownProviderError };
26
- //# sourceMappingURL=chunk-GH3HZBE6.mjs.map
27
- //# sourceMappingURL=chunk-GH3HZBE6.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/errors/notProvidedCredentials.error.ts","../../src/errors/unknownProvider.error.ts","../../src/utils/constants.ts"],"names":[],"mappings":";AAAO,IAAM,2BAAA,GAAN,cAA0C,KAAA,CAAM;AAAA,EACnD,WAAA,GAAc;AACV,IAAA,KAAA,CAAM,sCAAsC,CAAA;AAC5C,IAAA,IAAA,CAAK,IAAA,GAAO,6BAAA;AAAA,EAChB;AACJ;;;ACLO,IAAM,oBAAA,GAAN,cAAmC,KAAA,CAAM;AAAA,EAC5C,WAAA,GAAc;AACV,IAAA,KAAA,CAAM,6CAA6C,CAAA;AACnD,IAAA,IAAA,CAAK,IAAA,GAAO,sBAAA;AAAA,EAChB;AACJ;;;ACLO,IAAM,YAAA,GAAe,QAAQ,GAAA,CAAI;AACjC,IAAM,cAAA,GAAiB,QAAQ,GAAA,CAAI;AAEnC,IAAM,QAAA,GAAW,QAAQ,GAAA,CAAI;AAC7B,IAAM,QAAA,GAAW,QAAQ,GAAA,CAAI;AAC7B,IAAM,IAAA,GAAO,QAAQ,GAAA,CAAI;AACzB,IAAM,MAAA,GAAS,QAAQ,GAAA,CAAI","file":"chunk-GH3HZBE6.mjs","sourcesContent":["export class NotProvidedCredentialsError extends Error {\n constructor() {\n super('SMS sender credentials not provided.');\n this.name = 'NotProvidedCredentialsError';\n }\n}\n","export class UnknownProviderError extends Error {\n constructor() {\n super('Unknown provider. Set PROVIDER env variable');\n this.name = 'UnknownProviderError';\n }\n}\n","export const SMS_PROVIDER = process.env.SMS_PROVIDER;\nexport const PLATFORM_CLOUD = process.env.PLATFORM_CLOUD;\n\nexport const USERNAME = process.env.SMS_PROVIDER_USERNAME;\nexport const PASSWORD = process.env.SMS_PROVIDER_PASSWORD;\nexport const FROM = process.env.SMS_PROVIDER_FROM_NUMBER;\nexport const REGION = process.env.SMS_PROVIDER_REGION;\n"]}
@@ -1,33 +0,0 @@
1
- import { FROM, USERNAME, PASSWORD, NotProvidedCredentialsError } from './chunk-GH3HZBE6.mjs';
2
- import { Twilio } from 'twilio';
3
-
4
- var TwilioSMSSenderClient = class {
5
- constructor() {
6
- this.sendOne = (phone, message) => this.client.messages.create({
7
- from: FROM,
8
- to: phone,
9
- body: message
10
- });
11
- if (USERNAME && PASSWORD && FROM)
12
- this.client = new Twilio(USERNAME, PASSWORD);
13
- else throw new NotProvidedCredentialsError();
14
- }
15
- async send(phones = [], message) {
16
- const result = {
17
- sent: [],
18
- failed: []
19
- };
20
- await Promise.all(
21
- phones.map(
22
- (phone) => this.sendOne(phone, message).then(() => result.sent.push({ phone })).catch(
23
- (error) => result.failed.push({ phone, error: error.message })
24
- )
25
- )
26
- );
27
- return result;
28
- }
29
- };
30
-
31
- export { TwilioSMSSenderClient as default };
32
- //# sourceMappingURL=twilioSmsSender.client-2Q2EIZIP.mjs.map
33
- //# sourceMappingURL=twilioSmsSender.client-2Q2EIZIP.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/services/clients/twilioSmsSender.client.ts"],"names":[],"mappings":";;;AAOA,IAAqB,wBAArB,MAAiE;AAAA,EAE7D,WAAA,GAAc;AA4Bd,IAAA,IAAA,CAAQ,UAAU,CACd,KAAA,EACA,YAEA,IAAA,CAAK,MAAA,CAAO,SAAS,MAAA,CAAO;AAAA,MACxB,IAAA,EAAM,IAAA;AAAA,MACN,EAAA,EAAI,KAAA;AAAA,MACJ,IAAA,EAAM;AAAA,KACT,CAAA;AAnCD,IAAA,IAAI,YAAY,QAAA,IAAY,IAAA;AACxB,MAAA,IAAA,CAAK,MAAA,GAAS,IAAI,MAAA,CAAO,QAAA,EAAU,QAAQ,CAAA;AAAA,SAC1C,MAAM,IAAI,2BAAA,EAA4B;AAAA,EAC/C;AAAA,EAEA,MAAa,IAAA,CACT,MAAA,GAAmB,IACnB,OAAA,EACmB;AACnB,IAAA,MAAM,MAAA,GAAqB;AAAA,MACvB,MAAM,EAAC;AAAA,MACP,QAAQ;AAAC,KACb;AAEA,IAAA,MAAM,OAAA,CAAQ,GAAA;AAAA,MACV,MAAA,CAAO,GAAA;AAAA,QAAI,CAAC,KAAA,KACR,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,OAAO,CAAA,CACtB,IAAA,CAAK,MAAM,MAAA,CAAO,KAAK,IAAA,CAAK,EAAE,KAAA,EAAO,CAAC,CAAA,CACtC,KAAA;AAAA,UAAM,CAAC,KAAA,KACJ,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,CAAM,OAAA,EAAS;AAAA;AACtD;AACR,KACJ;AAEA,IAAA,OAAO,MAAA;AAAA,EACX;AAWJ","file":"twilioSmsSender.client-2Q2EIZIP.mjs","sourcesContent":["import { ISMSSender } from '../../interfaces/smsSender.interface';\nimport { Twilio } from 'twilio';\nimport { USERNAME, PASSWORD, FROM } from '../../utils/constants';\nimport { MessageInstance } from 'twilio/lib/rest/api/v2010/account/message';\nimport { SendResult } from '../../types/sendResult.type';\nimport { NotProvidedCredentialsError } from '../../errors';\n\nexport default class TwilioSMSSenderClient implements ISMSSender {\n private client: Twilio;\n constructor() {\n if (USERNAME && PASSWORD && FROM)\n this.client = new Twilio(USERNAME, PASSWORD);\n else throw new NotProvidedCredentialsError();\n }\n\n public async send(\n phones: string[] = [],\n message: string,\n ): 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)\n .then(() => result.sent.push({ phone }))\n .catch((error) =>\n result.failed.push({ phone, error: error.message }),\n ),\n ),\n );\n\n return result;\n }\n\n private sendOne = (\n phone: string,\n message: string,\n ): Promise<MessageInstance> =>\n this.client.messages.create({\n from: FROM,\n to: phone,\n body: message,\n });\n}\n"]}
@@ -1,48 +0,0 @@
1
- import { FROM, USERNAME, PASSWORD, NotProvidedCredentialsError } from './chunk-GH3HZBE6.mjs';
2
- import { Vonage } from '@vonage/server-sdk';
3
- import { Auth } from '@vonage/auth';
4
-
5
- var VonageSMSSenderClient = class {
6
- constructor() {
7
- this.sendOne = (phone, message) => this.client.sms.send({
8
- to: phone,
9
- text: message,
10
- from: FROM
11
- });
12
- if (!(USERNAME && PASSWORD && FROM))
13
- throw new NotProvidedCredentialsError();
14
- const vonageAuth = new Auth({
15
- apiKey: USERNAME,
16
- apiSecret: PASSWORD
17
- });
18
- this.client = new Vonage(vonageAuth);
19
- }
20
- async send(phones, message) {
21
- const result = {
22
- sent: [],
23
- failed: []
24
- };
25
- await Promise.all(
26
- phones.map(
27
- (phone) => this.sendOne(phone, message).then((data) => {
28
- var _a;
29
- if ((_a = data.messages) == null ? void 0 : _a.some(
30
- (message2) => message2.status !== "0"
31
- )) {
32
- result.failed.push({
33
- phone,
34
- error: data.messages[0].errorText
35
- });
36
- } else {
37
- result.sent.push({ phone });
38
- }
39
- })
40
- )
41
- );
42
- return result;
43
- }
44
- };
45
-
46
- export { VonageSMSSenderClient as default };
47
- //# sourceMappingURL=vonageSmsSender.client-TD4MHO4D.mjs.map
48
- //# sourceMappingURL=vonageSmsSender.client-TD4MHO4D.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/services/clients/vonageSmsSender.client.ts"],"names":["message"],"mappings":";;;;AAQA,IAAqB,wBAArB,MAAiE;AAAA,EAE7D,WAAA,GAAc;AAsCd,IAAA,IAAA,CAAQ,UAAU,CAAC,KAAA,EAAe,YAC9B,IAAA,CAAK,MAAA,CAAO,IAAI,IAAA,CAAK;AAAA,MACjB,EAAA,EAAI,KAAA;AAAA,MACJ,IAAA,EAAM,OAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACT,CAAA;AA1CD,IAAA,IAAI,EAAE,YAAY,QAAA,IAAY,IAAA,CAAA;AAC1B,MAAA,MAAM,IAAI,2BAAA,EAA4B;AAC1C,IAAA,MAAM,UAAA,GAAa,IAAI,IAAA,CAAK;AAAA,MACxB,MAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAW;AAAA,KACd,CAAA;AACD,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,MAAA,CAAO,UAAU,CAAA;AAAA,EACvC;AAAA,EAEA,MAAa,IAAA,CAAK,MAAA,EAAkB,OAAA,EAAsC;AACtE,IAAA,MAAM,MAAA,GAAqB;AAAA,MACvB,MAAM,EAAC;AAAA,MACP,QAAQ;AAAC,KACb;AAEA,IAAA,MAAM,OAAA,CAAQ,GAAA;AAAA,MACV,MAAA,CAAO,GAAA;AAAA,QAAI,CAAC,UACR,IAAA,CAAK,OAAA,CAAQ,OAAO,OAAO,CAAA,CAAE,IAAA,CAAK,CAAC,IAAA,KAAS;AA5B5D,UAAA,IAAA,EAAA;AA6BoB,UAAA,IAAA,CACI,EAAA,GAAA,IAAA,CAAK,aAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,IAAA;AAAA,YACX,CAACA,QAAAA,KAAiBA,QAAAA,CAAQ,MAAA,KAAW;AAAA,WAAA,EAE3C;AACE,YAAA,MAAA,CAAO,OAAO,IAAA,CAAK;AAAA,cACf,KAAA;AAAA,cACA,KAAA,EAAO,IAAA,CAAK,QAAA,CAAS,CAAC,CAAA,CAAE;AAAA,aAC3B,CAAA;AAAA,UACL,CAAA,MAAO;AACH,YAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,EAAE,KAAA,EAAO,CAAA;AAAA,UAC9B;AAAA,QACJ,CAAC;AAAA;AACL,KACJ;AAEA,IAAA,OAAO,MAAA;AAAA,EACX;AAQJ","file":"vonageSmsSender.client-TD4MHO4D.mjs","sourcesContent":["import { ISMSSender } from '../../interfaces';\nimport { SendResult } from '../../types';\nimport { Vonage } from '@vonage/server-sdk';\nimport { Auth } from '@vonage/auth';\nimport { USERNAME, PASSWORD, FROM } from '../../utils/constants';\nimport { NotProvidedCredentialsError } from '../../errors';\nimport { SMSMessages } from '@vonage/sms';\n\nexport default class VonageSMSSenderClient implements ISMSSender {\n private client: Vonage;\n constructor() {\n if (!(USERNAME && PASSWORD && FROM))\n throw new NotProvidedCredentialsError();\n const vonageAuth = new Auth({\n apiKey: USERNAME,\n apiSecret: PASSWORD,\n });\n this.client = new Vonage(vonageAuth);\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(\n (message: any) => message.status !== '0',\n )\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 sendOne = (phone: string, message: string): Promise<SMSMessages> =>\n this.client.sms.send({\n to: phone,\n text: message,\n from: FROM as string,\n });\n}\n"]}