@qrvey/sms 0.0.4 → 1.0.0-554

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 (38) hide show
  1. package/dist/cjs/mappers/qrveyEnvs.mapper.js +14 -0
  2. package/dist/cjs/mappers/qrveyEnvs.mapper.js.map +1 -0
  3. package/dist/cjs/services/clients/azureSmsSender.client.js +4 -2
  4. package/dist/cjs/services/clients/azureSmsSender.client.js.map +1 -1
  5. package/dist/cjs/services/clients/vonageSmsSender.client.js.map +1 -1
  6. package/dist/cjs/services/smsSender.service.js +9 -0
  7. package/dist/cjs/services/smsSender.service.js.map +1 -1
  8. package/dist/cjs/services/smsSenderFactory.service.js +6 -2
  9. package/dist/cjs/services/smsSenderFactory.service.js.map +1 -1
  10. package/dist/cjs/utils/constants.js +2 -1
  11. package/dist/cjs/utils/constants.js.map +1 -1
  12. package/dist/esm/{awsSmsSender.client-KAGNU24Z.mjs → awsSmsSender.client-LIUIAB4N.mjs} +3 -3
  13. package/dist/esm/awsSmsSender.client-LIUIAB4N.mjs.map +1 -0
  14. package/dist/esm/{azureSmsSender.client-K6MPTIU7.mjs → azureSmsSender.client-KHGAWQJU.mjs} +7 -7
  15. package/dist/esm/azureSmsSender.client-KHGAWQJU.mjs.map +1 -0
  16. package/dist/esm/{chunk-NCQDKWNI.mjs → chunk-GH3HZBE6.mjs} +4 -3
  17. package/dist/esm/chunk-GH3HZBE6.mjs.map +1 -0
  18. package/dist/esm/index.d.mts +2 -1
  19. package/dist/esm/index.mjs +30 -11
  20. package/dist/esm/index.mjs.map +1 -1
  21. package/dist/esm/{twilioSmsSender.client-SSZMXU4M.mjs → twilioSmsSender.client-2Q2EIZIP.mjs} +4 -5
  22. package/dist/esm/twilioSmsSender.client-2Q2EIZIP.mjs.map +1 -0
  23. package/dist/esm/{vonageSmsSender.client-FSND4BQX.mjs → vonageSmsSender.client-TD4MHO4D.mjs} +6 -4
  24. package/dist/esm/vonageSmsSender.client-TD4MHO4D.mjs.map +1 -0
  25. package/dist/types/index.d.ts +2 -1
  26. package/package.json +5 -5
  27. package/src/mappers/qrveyEnvs.mapper.ts +10 -0
  28. package/src/services/clients/azureSmsSender.client.ts +7 -2
  29. package/src/services/clients/vonageSmsSender.client.ts +4 -2
  30. package/src/services/smsSender.service.test.ts +32 -0
  31. package/src/services/smsSender.service.ts +9 -0
  32. package/src/services/smsSenderFactory.service.ts +6 -2
  33. package/src/utils/constants.ts +1 -0
  34. package/dist/esm/awsSmsSender.client-KAGNU24Z.mjs.map +0 -1
  35. package/dist/esm/azureSmsSender.client-K6MPTIU7.mjs.map +0 -1
  36. package/dist/esm/chunk-NCQDKWNI.mjs.map +0 -1
  37. package/dist/esm/twilioSmsSender.client-SSZMXU4M.mjs.map +0 -1
  38. package/dist/esm/vonageSmsSender.client-FSND4BQX.mjs.map +0 -1
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSMSProviderFromPlatformCloud = void 0;
4
+ const constants_1 = require("../utils/constants");
5
+ const getSMSProviderFromPlatformCloud = () => {
6
+ var _a;
7
+ const platformCloudDictionary = {
8
+ AWS: 'aws',
9
+ AZURE: 'azure',
10
+ };
11
+ return (_a = platformCloudDictionary[constants_1.PLATFORM_CLOUD !== null && constants_1.PLATFORM_CLOUD !== void 0 ? constants_1.PLATFORM_CLOUD : '']) !== null && _a !== void 0 ? _a : undefined;
12
+ };
13
+ exports.getSMSProviderFromPlatformCloud = getSMSProviderFromPlatformCloud;
14
+ //# sourceMappingURL=qrveyEnvs.mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qrveyEnvs.mapper.js","sourceRoot":"","sources":["../../../src/mappers/qrveyEnvs.mapper.ts"],"names":[],"mappings":";;;AAAA,kDAAoD;AAE7C,MAAM,+BAA+B,GAAG,GAAG,EAAE;;IAChD,MAAM,uBAAuB,GAA2B;QACpD,GAAG,EAAE,KAAK;QACV,KAAK,EAAE,OAAO;KACjB,CAAC;IAEF,OAAO,MAAA,uBAAuB,CAAC,0BAAc,aAAd,0BAAc,cAAd,0BAAc,GAAI,EAAE,CAAC,mCAAI,SAAS,CAAC;AACtE,CAAC,CAAC;AAPW,QAAA,+BAA+B,mCAO1C"}
@@ -5,9 +5,11 @@ const constants_1 = require("../../utils/constants");
5
5
  const communication_sms_1 = require("@azure/communication-sms");
6
6
  class AzureSMSSenderClient {
7
7
  constructor() {
8
- if (!(constants_1.USERNAME && constants_1.PASSWORD && constants_1.FROM))
8
+ var _a;
9
+ if (!(constants_1.USERNAME && constants_1.PASSWORD && constants_1.FROM) &&
10
+ !process.env.COMMUNICATION_SERVICES_CONNECTION_STRING)
9
11
  throw new errors_1.NotProvidedCredentialsError();
10
- const connectionString = `endpoint=https://${constants_1.USERNAME}.communication.azure.com/;accesskey=${constants_1.PASSWORD}`;
12
+ const connectionString = (_a = process.env.COMMUNICATION_SERVICES_CONNECTION_STRING) !== null && _a !== void 0 ? _a : `endpoint=https://${constants_1.USERNAME}.communication.azure.com/;accesskey=${constants_1.PASSWORD}`;
11
13
  this.client = new communication_sms_1.SmsClient(connectionString);
12
14
  }
13
15
  async send(phones, message) {
@@ -1 +1 @@
1
- {"version":3,"file":"azureSmsSender.client.js","sourceRoot":"","sources":["../../../../src/services/clients/azureSmsSender.client.ts"],"names":[],"mappings":";;AAAA,yCAA2D;AAG3D,qDAAiE;AACjE,gEAAqD;AAErD,MAAqB,oBAAoB;IAErC;QACI,IAAI,CAAC,CAAC,oBAAQ,IAAI,oBAAQ,IAAI,gBAAI,CAAC;YAC/B,MAAM,IAAI,oCAA2B,EAAE,CAAC;QAC5C,MAAM,gBAAgB,GAAG,oBAAoB,oBAAQ,uCAAuC,oBAAQ,EAAE,CAAC;QACvG,IAAI,CAAC,MAAM,GAAG,IAAI,6BAAS,CAAC,gBAAgB,CAAC,CAAC;IAClD,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,MAAgB,EAAE,OAAe;QAC/C,MAAM,MAAM,GAAe;YACvB,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,EAAE;SACb,CAAC;QACF,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACtC,IAAI,EAAE,gBAAc;YACpB,EAAE,EAAE,MAAM;YACV,OAAO,EAAE,OAAO;SACnB,CAAC,CAAC;QAEH,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YAC7B,IAAI,SAAS,CAAC,YAAY;gBACtB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;oBACf,KAAK,EAAE,SAAS,CAAC,EAAE;oBACnB,KAAK,EAAE,SAAS,CAAC,YAAY;iBAChC,CAAC,CAAC;;gBACF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AA/BD,uCA+BC"}
1
+ {"version":3,"file":"azureSmsSender.client.js","sourceRoot":"","sources":["../../../../src/services/clients/azureSmsSender.client.ts"],"names":[],"mappings":";;AAAA,yCAA2D;AAG3D,qDAAiE;AACjE,gEAAqD;AAErD,MAAqB,oBAAoB;IAErC;;QACI,IACI,CAAC,CAAC,oBAAQ,IAAI,oBAAQ,IAAI,gBAAI,CAAC;YAC/B,CAAC,OAAO,CAAC,GAAG,CAAC,wCAAwC;YAErD,MAAM,IAAI,oCAA2B,EAAE,CAAC;QAC5C,MAAM,gBAAgB,GAClB,MAAA,OAAO,CAAC,GAAG,CAAC,wCAAwC,mCACpD,oBAAoB,oBAAQ,uCAAuC,oBAAQ,EAAE,CAAC;QAClF,IAAI,CAAC,MAAM,GAAG,IAAI,6BAAS,CAAC,gBAAgB,CAAC,CAAC;IAClD,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,MAAgB,EAAE,OAAe;QAC/C,MAAM,MAAM,GAAe;YACvB,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,EAAE;SACb,CAAC;QACF,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACtC,IAAI,EAAE,gBAAc;YACpB,EAAE,EAAE,MAAM;YACV,OAAO,EAAE,OAAO;SACnB,CAAC,CAAC;QAEH,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YAC7B,IAAI,SAAS,CAAC,YAAY;gBACtB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;oBACf,KAAK,EAAE,SAAS,CAAC,EAAE;oBACnB,KAAK,EAAE,SAAS,CAAC,YAAY;iBAChC,CAAC,CAAC;;gBACF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AApCD,uCAoCC"}
@@ -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;QAoCQ,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;QAxCH,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,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;CAQJ;AA5CD,wCA4CC"}
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"}
@@ -12,6 +12,15 @@ class SMSSenderService {
12
12
  async send(phones, message) {
13
13
  return (await smsSenderFactory_service_1.SMSSenderFactory.getSMSSender()).send(phones, message);
14
14
  }
15
+ static async checkStatus() {
16
+ try {
17
+ await smsSenderFactory_service_1.SMSSenderFactory.getSMSSender();
18
+ return true;
19
+ }
20
+ catch (error) {
21
+ return false;
22
+ }
23
+ }
15
24
  }
16
25
  exports.SMSSenderService = SMSSenderService;
17
26
  //# sourceMappingURL=smsSender.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"smsSender.service.js","sourceRoot":"","sources":["../../../src/services/smsSender.service.ts"],"names":[],"mappings":";;;AACA,yEAA8D;AAE9D,MAAa,gBAAgB;IACzB;;;;;OAKG;IACI,KAAK,CAAC,IAAI,CAAC,MAAgB,EAAE,OAAe;QAC/C,OAAO,CAAC,MAAM,2CAAgB,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;CACJ;AAVD,4CAUC"}
1
+ {"version":3,"file":"smsSender.service.js","sourceRoot":"","sources":["../../../src/services/smsSender.service.ts"],"names":[],"mappings":";;;AACA,yEAA8D;AAE9D,MAAa,gBAAgB;IACzB;;;;;OAKG;IACI,KAAK,CAAC,IAAI,CAAC,MAAgB,EAAE,OAAe;QAC/C,OAAO,CAAC,MAAM,2CAAgB,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,WAAW;QAC3B,IAAI;YACA,MAAM,2CAAgB,CAAC,YAAY,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;SACf;QAAC,OAAO,KAAK,EAAE;YACZ,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;CACJ;AAnBD,4CAmBC"}
@@ -26,13 +26,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.SMSSenderFactory = void 0;
27
27
  const errors_1 = require("../errors");
28
28
  const constants_1 = require("../utils/constants");
29
+ const qrveyEnvs_mapper_1 = require("../mappers/qrveyEnvs.mapper");
29
30
  class SMSSenderFactory {
30
31
  static async getSMSSender() {
31
- const provider = constants_1.SMS_PROVIDER === null || constants_1.SMS_PROVIDER === void 0 ? void 0 : constants_1.SMS_PROVIDER.toLowerCase();
32
+ var _a, _b;
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();
32
34
  if (!provider)
33
35
  throw new errors_1.UnknownProviderError();
34
36
  const { default: SMSSender } = await this.providerModules[provider]();
35
- return new SMSSender();
37
+ this._smsSender = (_b = this._smsSender) !== null && _b !== void 0 ? _b : new SMSSender();
38
+ return this._smsSender;
36
39
  }
37
40
  }
38
41
  exports.SMSSenderFactory = SMSSenderFactory;
@@ -42,4 +45,5 @@ SMSSenderFactory.providerModules = {
42
45
  azure: () => Promise.resolve().then(() => __importStar(require('./clients/azureSmsSender.client'))),
43
46
  vonage: () => Promise.resolve().then(() => __importStar(require('./clients/vonageSmsSender.client'))),
44
47
  };
48
+ SMSSenderFactory._smsSender = null;
45
49
  //# sourceMappingURL=smsSenderFactory.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"smsSenderFactory.service.js","sourceRoot":"","sources":["../../../src/services/smsSenderFactory.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sCAAiD;AAGjD,kDAAkD;AAElD,MAAa,gBAAgB;IAWzB,MAAM,CAAC,KAAK,CAAC,YAAY;QACrB,MAAM,QAAQ,GAAG,wBAAY,aAAZ,wBAAY,uBAAZ,wBAAY,CAAE,WAAW,EAAE,CAAC;QAC7C,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,OAAO,IAAI,SAAS,EAAE,CAAC;IAC3B,CAAC;;AAjBL,4CAkBC;AAjBkB,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"}
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,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.REGION = exports.FROM = exports.PASSWORD = exports.USERNAME = exports.SMS_PROVIDER = void 0;
3
+ exports.REGION = exports.FROM = exports.PASSWORD = exports.USERNAME = exports.PLATFORM_CLOUD = exports.SMS_PROVIDER = void 0;
4
4
  exports.SMS_PROVIDER = process.env.SMS_PROVIDER;
5
+ exports.PLATFORM_CLOUD = process.env.PLATFORM_CLOUD;
5
6
  exports.USERNAME = process.env.SMS_PROVIDER_USERNAME;
6
7
  exports.PASSWORD = process.env.SMS_PROVIDER_PASSWORD;
7
8
  exports.FROM = process.env.SMS_PROVIDER_FROM_NUMBER;
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/utils/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;AAExC,QAAA,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;AAC7C,QAAA,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;AAC7C,QAAA,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;AAC5C,QAAA,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/utils/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;AACxC,QAAA,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AAE5C,QAAA,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;AAC7C,QAAA,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;AAC7C,QAAA,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;AAC5C,QAAA,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { USERNAME, PASSWORD, REGION, NotProvidedCredentialsError } from './chunk-NCQDKWNI.mjs';
1
+ import { USERNAME, PASSWORD, REGION, NotProvidedCredentialsError } from './chunk-GH3HZBE6.mjs';
2
2
  import { PublishCommand, SNSClient } from '@aws-sdk/client-sns';
3
3
 
4
4
  var AwsSMSSenderClient = class {
@@ -40,5 +40,5 @@ var AwsSMSSenderClient = class {
40
40
  };
41
41
 
42
42
  export { AwsSMSSenderClient as default };
43
- //# sourceMappingURL=out.js.map
44
- //# sourceMappingURL=awsSmsSender.client-KAGNU24Z.mjs.map
43
+ //# sourceMappingURL=awsSmsSender.client-LIUIAB4N.mjs.map
44
+ //# sourceMappingURL=awsSmsSender.client-LIUIAB4N.mjs.map
@@ -0,0 +1 @@
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,11 +1,12 @@
1
- import { USERNAME, PASSWORD, FROM, NotProvidedCredentialsError } from './chunk-NCQDKWNI.mjs';
1
+ import { USERNAME, PASSWORD, FROM, NotProvidedCredentialsError } from './chunk-GH3HZBE6.mjs';
2
2
  import { SmsClient } from '@azure/communication-sms';
3
3
 
4
4
  var AzureSMSSenderClient = class {
5
5
  constructor() {
6
- if (!(USERNAME && PASSWORD && FROM))
6
+ var _a;
7
+ if (!(USERNAME && PASSWORD && FROM) && !process.env.COMMUNICATION_SERVICES_CONNECTION_STRING)
7
8
  throw new NotProvidedCredentialsError();
8
- const connectionString = `endpoint=https://${USERNAME}.communication.azure.com/;accesskey=${PASSWORD}`;
9
+ const connectionString = (_a = process.env.COMMUNICATION_SERVICES_CONNECTION_STRING) != null ? _a : `endpoint=https://${USERNAME}.communication.azure.com/;accesskey=${PASSWORD}`;
9
10
  this.client = new SmsClient(connectionString);
10
11
  }
11
12
  async send(phones, message) {
@@ -24,13 +25,12 @@ var AzureSMSSenderClient = class {
24
25
  phone: smsResult.to,
25
26
  error: smsResult.errorMessage
26
27
  });
27
- else
28
- result.sent.push({ phone: smsResult.to });
28
+ else result.sent.push({ phone: smsResult.to });
29
29
  });
30
30
  return result;
31
31
  }
32
32
  };
33
33
 
34
34
  export { AzureSMSSenderClient as default };
35
- //# sourceMappingURL=out.js.map
36
- //# sourceMappingURL=azureSmsSender.client-K6MPTIU7.mjs.map
35
+ //# sourceMappingURL=azureSmsSender.client-KHGAWQJU.mjs.map
36
+ //# sourceMappingURL=azureSmsSender.client-KHGAWQJU.mjs.map
@@ -0,0 +1 @@
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"]}
@@ -16,11 +16,12 @@ var UnknownProviderError = class extends Error {
16
16
 
17
17
  // src/utils/constants.ts
18
18
  var SMS_PROVIDER = process.env.SMS_PROVIDER;
19
+ var PLATFORM_CLOUD = process.env.PLATFORM_CLOUD;
19
20
  var USERNAME = process.env.SMS_PROVIDER_USERNAME;
20
21
  var PASSWORD = process.env.SMS_PROVIDER_PASSWORD;
21
22
  var FROM = process.env.SMS_PROVIDER_FROM_NUMBER;
22
23
  var REGION = process.env.SMS_PROVIDER_REGION;
23
24
 
24
- export { FROM, NotProvidedCredentialsError, PASSWORD, REGION, SMS_PROVIDER, USERNAME, UnknownProviderError };
25
- //# sourceMappingURL=out.js.map
26
- //# sourceMappingURL=chunk-NCQDKWNI.mjs.map
25
+ export { FROM, NotProvidedCredentialsError, PASSWORD, PLATFORM_CLOUD, REGION, SMS_PROVIDER, USERNAME, UnknownProviderError };
26
+ //# sourceMappingURL=chunk-GH3HZBE6.mjs.map
27
+ //# sourceMappingURL=chunk-GH3HZBE6.mjs.map
@@ -0,0 +1 @@
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"]}
@@ -15,6 +15,7 @@ declare class SMSSenderService {
15
15
  * @returns {Promise<SendResult>} Send result.
16
16
  */
17
17
  send(phones: string[], message: string): Promise<SendResult>;
18
+ static checkStatus(): Promise<boolean>;
18
19
  }
19
20
 
20
- export { SMSSenderService, SendResult };
21
+ export { SMSSenderService, type SendResult };
@@ -1,22 +1,33 @@
1
- import { SMS_PROVIDER, UnknownProviderError } from './chunk-NCQDKWNI.mjs';
1
+ import { SMS_PROVIDER, UnknownProviderError, PLATFORM_CLOUD } from './chunk-GH3HZBE6.mjs';
2
+
3
+ // src/mappers/qrveyEnvs.mapper.ts
4
+ var getSMSProviderFromPlatformCloud = () => {
5
+ var _a, _b;
6
+ const platformCloudDictionary = {
7
+ AWS: "aws",
8
+ AZURE: "azure"
9
+ };
10
+ return (_b = platformCloudDictionary[(_a = PLATFORM_CLOUD) != null ? _a : ""]) != null ? _b : void 0;
11
+ };
2
12
 
3
13
  // src/services/smsSenderFactory.service.ts
4
14
  var SMSSenderFactory = class {
5
15
  static async getSMSSender() {
6
- var _a;
7
- const provider = (_a = SMS_PROVIDER) == null ? void 0 : _a.toLowerCase();
8
- if (!provider)
9
- throw new UnknownProviderError();
16
+ var _a, _b, _c;
17
+ const provider = (_b = getSMSProviderFromPlatformCloud()) != null ? _b : (_a = SMS_PROVIDER) == null ? void 0 : _a.toLowerCase();
18
+ if (!provider) throw new UnknownProviderError();
10
19
  const { default: SMSSender } = await this.providerModules[provider]();
11
- return new SMSSender();
20
+ this._smsSender = (_c = this._smsSender) != null ? _c : new SMSSender();
21
+ return this._smsSender;
12
22
  }
13
23
  };
14
24
  SMSSenderFactory.providerModules = {
15
- twilio: () => import('./twilioSmsSender.client-SSZMXU4M.mjs'),
16
- aws: () => import('./awsSmsSender.client-KAGNU24Z.mjs'),
17
- azure: () => import('./azureSmsSender.client-K6MPTIU7.mjs'),
18
- vonage: () => import('./vonageSmsSender.client-FSND4BQX.mjs')
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')
19
29
  };
30
+ SMSSenderFactory._smsSender = null;
20
31
 
21
32
  // src/services/smsSender.service.ts
22
33
  var SMSSenderService = class {
@@ -29,8 +40,16 @@ var SMSSenderService = class {
29
40
  async send(phones, message) {
30
41
  return (await SMSSenderFactory.getSMSSender()).send(phones, message);
31
42
  }
43
+ static async checkStatus() {
44
+ try {
45
+ await SMSSenderFactory.getSMSSender();
46
+ return true;
47
+ } catch (error) {
48
+ return false;
49
+ }
50
+ }
32
51
  };
33
52
 
34
53
  export { SMSSenderService };
35
- //# sourceMappingURL=out.js.map
54
+ //# sourceMappingURL=index.mjs.map
36
55
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/services/smsSenderFactory.service.ts","../../src/services/smsSender.service.ts"],"names":[],"mappings":";;;;;;AAKO,IAAM,mBAAN,MAAuB;AAAA,EAW1B,aAAa,eAAoC;AAhBrD;AAiBQ,UAAM,YAAW,yCAAc;AAC/B,QAAI,CAAC;AAAU,YAAM,IAAI,qBAAqB;AAE9C,UAAM,EAAE,SAAS,UAAU,IAAI,MAAM,KAAK,gBAAgB,QAAQ,EAAE;AACpE,WAAO,IAAI,UAAU;AAAA,EACzB;AACJ;AAlBa,iBACM,kBAGX;AAAA,EACA,QAAQ,MAAM,OAAO,uCAAkC;AAAA,EACvD,KAAK,MAAM,OAAO,oCAA+B;AAAA,EACjD,OAAO,MAAM,OAAO,sCAAiC;AAAA,EACrD,QAAQ,MAAM,OAAO,uCAAkC;AAC3D;;;ACXG,IAAM,mBAAN,MAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO1B,MAAa,KAAK,QAAkB,SAAsC;AACtE,YAAQ,MAAM,iBAAiB,aAAa,GAAG,KAAK,QAAQ,OAAO;AAAA,EACvE;AACJ","sourcesContent":["import { UnknownProviderError } from '../errors';\nimport { ISMSSender } from '../interfaces';\nimport { SMSProviderModule } from '../types';\nimport { SMS_PROVIDER } from '../utils/constants';\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\n static async getSMSSender(): Promise<ISMSSender> {\n const provider = SMS_PROVIDER?.toLowerCase();\n if (!provider) throw new UnknownProviderError();\n\n const { default: SMSSender } = await this.providerModules[provider]();\n return new 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"]}
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,4 +1,4 @@
1
- import { FROM, USERNAME, PASSWORD, NotProvidedCredentialsError } from './chunk-NCQDKWNI.mjs';
1
+ import { FROM, USERNAME, PASSWORD, NotProvidedCredentialsError } from './chunk-GH3HZBE6.mjs';
2
2
  import { Twilio } from 'twilio';
3
3
 
4
4
  var TwilioSMSSenderClient = class {
@@ -10,8 +10,7 @@ var TwilioSMSSenderClient = class {
10
10
  });
11
11
  if (USERNAME && PASSWORD && FROM)
12
12
  this.client = new Twilio(USERNAME, PASSWORD);
13
- else
14
- throw new NotProvidedCredentialsError();
13
+ else throw new NotProvidedCredentialsError();
15
14
  }
16
15
  async send(phones = [], message) {
17
16
  const result = {
@@ -30,5 +29,5 @@ var TwilioSMSSenderClient = class {
30
29
  };
31
30
 
32
31
  export { TwilioSMSSenderClient as default };
33
- //# sourceMappingURL=out.js.map
34
- //# sourceMappingURL=twilioSmsSender.client-SSZMXU4M.mjs.map
32
+ //# sourceMappingURL=twilioSmsSender.client-2Q2EIZIP.mjs.map
33
+ //# sourceMappingURL=twilioSmsSender.client-2Q2EIZIP.mjs.map
@@ -0,0 +1 @@
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,4 +1,4 @@
1
- import { FROM, USERNAME, PASSWORD, NotProvidedCredentialsError } from './chunk-NCQDKWNI.mjs';
1
+ import { FROM, USERNAME, PASSWORD, NotProvidedCredentialsError } from './chunk-GH3HZBE6.mjs';
2
2
  import { Vonage } from '@vonage/server-sdk';
3
3
  import { Auth } from '@vonage/auth';
4
4
 
@@ -26,7 +26,9 @@ var VonageSMSSenderClient = class {
26
26
  phones.map(
27
27
  (phone) => this.sendOne(phone, message).then((data) => {
28
28
  var _a;
29
- if ((_a = data.messages) == null ? void 0 : _a.some((message2) => message2.status !== "0")) {
29
+ if ((_a = data.messages) == null ? void 0 : _a.some(
30
+ (message2) => message2.status !== "0"
31
+ )) {
30
32
  result.failed.push({
31
33
  phone,
32
34
  error: data.messages[0].errorText
@@ -42,5 +44,5 @@ var VonageSMSSenderClient = class {
42
44
  };
43
45
 
44
46
  export { VonageSMSSenderClient as default };
45
- //# sourceMappingURL=out.js.map
46
- //# sourceMappingURL=vonageSmsSender.client-FSND4BQX.mjs.map
47
+ //# sourceMappingURL=vonageSmsSender.client-TD4MHO4D.mjs.map
48
+ //# sourceMappingURL=vonageSmsSender.client-TD4MHO4D.mjs.map
@@ -0,0 +1 @@
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"]}
@@ -15,6 +15,7 @@ declare class SMSSenderService {
15
15
  * @returns {Promise<SendResult>} Send result.
16
16
  */
17
17
  send(phones: string[], message: string): Promise<SendResult>;
18
+ static checkStatus(): Promise<boolean>;
18
19
  }
19
20
 
20
- export { SMSSenderService, SendResult };
21
+ export { SMSSenderService, type SendResult };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qrvey/sms",
3
- "version": "0.0.4",
3
+ "version": "1.0.0-554",
4
4
  "types": "dist/types/index.d.ts",
5
5
  "main": "dist/cjs/index.js",
6
6
  "exports": {
@@ -20,7 +20,7 @@
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 test:cov && yarn build:clean && yarn build:compile",
23
+ "build": "yarn build:clean && yarn build:compile",
24
24
  "prepare-publish": "yarn install && yarn build",
25
25
  "publish-package": "yarn prepare-publish && npm publish"
26
26
  },
@@ -45,8 +45,8 @@
45
45
  "ts-jest": "29.1.1",
46
46
  "tsc": "2.0.4",
47
47
  "tsconfig": "*",
48
- "tsup": "7.2.0",
49
- "twilio": "5.3.5",
48
+ "tsup": "8.5.0",
49
+ "twilio": "5.6.1",
50
50
  "typescript": "5.2.2"
51
51
  },
52
52
  "peerDependencies": {
@@ -54,7 +54,7 @@
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",
57
- "twilio": "5.3.5"
57
+ "twilio": "5.6.1"
58
58
  },
59
59
  "peerDependenciesMeta": {
60
60
  "@aws-sdk/client-sns": {
@@ -0,0 +1,10 @@
1
+ import { PLATFORM_CLOUD } from '../utils/constants';
2
+
3
+ export const getSMSProviderFromPlatformCloud = () => {
4
+ const platformCloudDictionary: Record<string, string> = {
5
+ AWS: 'aws',
6
+ AZURE: 'azure',
7
+ };
8
+
9
+ return platformCloudDictionary[PLATFORM_CLOUD ?? ''] ?? undefined;
10
+ };
@@ -7,9 +7,14 @@ import { SmsClient } from '@azure/communication-sms';
7
7
  export default class AzureSMSSenderClient implements ISMSSender {
8
8
  client: SmsClient;
9
9
  constructor() {
10
- if (!(USERNAME && PASSWORD && FROM))
10
+ if (
11
+ !(USERNAME && PASSWORD && FROM) &&
12
+ !process.env.COMMUNICATION_SERVICES_CONNECTION_STRING
13
+ )
11
14
  throw new NotProvidedCredentialsError();
12
- const connectionString = `endpoint=https://${USERNAME}.communication.azure.com/;accesskey=${PASSWORD}`;
15
+ const connectionString =
16
+ process.env.COMMUNICATION_SERVICES_CONNECTION_STRING ??
17
+ `endpoint=https://${USERNAME}.communication.azure.com/;accesskey=${PASSWORD}`;
13
18
  this.client = new SmsClient(connectionString);
14
19
  }
15
20
 
@@ -4,7 +4,7 @@ import { Vonage } from '@vonage/server-sdk';
4
4
  import { Auth } from '@vonage/auth';
5
5
  import { USERNAME, PASSWORD, FROM } from '../../utils/constants';
6
6
  import { NotProvidedCredentialsError } from '../../errors';
7
- import { SMSMessages } from '@vonage/sms/dist/lib/types/SMSMessages';
7
+ import { SMSMessages } from '@vonage/sms';
8
8
 
9
9
  export default class VonageSMSSenderClient implements ISMSSender {
10
10
  private client: Vonage;
@@ -28,7 +28,9 @@ export default class VonageSMSSenderClient implements ISMSSender {
28
28
  phones.map((phone) =>
29
29
  this.sendOne(phone, message).then((data) => {
30
30
  if (
31
- data.messages?.some((message) => message.status !== '0')
31
+ data.messages?.some(
32
+ (message: any) => message.status !== '0',
33
+ )
32
34
  ) {
33
35
  result.failed.push({
34
36
  phone,
@@ -0,0 +1,32 @@
1
+ import { SMSSenderService } from './smsSender.service';
2
+ import { SMSSenderFactory } from './smsSenderFactory.service';
3
+
4
+ jest.mock('./smsSenderFactory.service');
5
+
6
+ describe('SMSSenderService', () => {
7
+ describe('checkStatus', () => {
8
+ afterEach(() => {
9
+ jest.clearAllMocks();
10
+ });
11
+
12
+ it('should return true when getSMSSender resolves', async () => {
13
+ (SMSSenderFactory.getSMSSender as jest.Mock).mockResolvedValue({
14
+ send: jest.fn(),
15
+ });
16
+
17
+ const result = await SMSSenderService.checkStatus();
18
+ expect(result).toBe(true);
19
+ expect(SMSSenderFactory.getSMSSender).toHaveBeenCalled();
20
+ });
21
+
22
+ it('should return false when getSMSSender rejects', async () => {
23
+ (SMSSenderFactory.getSMSSender as jest.Mock).mockRejectedValue(
24
+ new Error('Provider error'),
25
+ );
26
+
27
+ const result = await SMSSenderService.checkStatus();
28
+ expect(result).toBe(false);
29
+ expect(SMSSenderFactory.getSMSSender).toHaveBeenCalled();
30
+ });
31
+ });
32
+ });
@@ -11,4 +11,13 @@ export class SMSSenderService {
11
11
  public async send(phones: string[], message: string): Promise<SendResult> {
12
12
  return (await SMSSenderFactory.getSMSSender()).send(phones, message);
13
13
  }
14
+
15
+ public static async checkStatus(): Promise<boolean> {
16
+ try {
17
+ await SMSSenderFactory.getSMSSender();
18
+ return true;
19
+ } catch (error) {
20
+ return false;
21
+ }
22
+ }
14
23
  }
@@ -2,6 +2,7 @@ import { UnknownProviderError } from '../errors';
2
2
  import { ISMSSender } from '../interfaces';
3
3
  import { SMSProviderModule } from '../types';
4
4
  import { SMS_PROVIDER } from '../utils/constants';
5
+ import { getSMSProviderFromPlatformCloud } from '../mappers/qrveyEnvs.mapper';
5
6
 
6
7
  export class SMSSenderFactory {
7
8
  private static providerModules: Record<
@@ -13,12 +14,15 @@ export class SMSSenderFactory {
13
14
  azure: () => import('./clients/azureSmsSender.client'),
14
15
  vonage: () => import('./clients/vonageSmsSender.client'),
15
16
  };
17
+ private static _smsSender: ISMSSender | null = null;
16
18
 
17
19
  static async getSMSSender(): Promise<ISMSSender> {
18
- const provider = SMS_PROVIDER?.toLowerCase();
20
+ const provider =
21
+ getSMSProviderFromPlatformCloud() ?? SMS_PROVIDER?.toLowerCase();
19
22
  if (!provider) throw new UnknownProviderError();
20
23
 
21
24
  const { default: SMSSender } = await this.providerModules[provider]();
22
- return new SMSSender();
25
+ this._smsSender = this._smsSender ?? new SMSSender();
26
+ return this._smsSender;
23
27
  }
24
28
  }
@@ -1,4 +1,5 @@
1
1
  export const SMS_PROVIDER = process.env.SMS_PROVIDER;
2
+ export const PLATFORM_CLOUD = process.env.PLATFORM_CLOUD;
2
3
 
3
4
  export const USERNAME = process.env.SMS_PROVIDER_USERNAME;
4
5
  export const PASSWORD = process.env.SMS_PROVIDER_PASSWORD;
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/services/clients/awsSmsSender.client.ts"],"names":[],"mappings":";;;;;;;;AAIA;AAAA,EACI;AAAA,EAEA;AAAA,OACG;AAEP,IAAqB,qBAArB,MAA8D;AAAA,EAE1D,cAAc;AAqCd,SAAQ,UAAU,OACd,OACA,YACgC;AAChC,YAAM,UAAU,IAAI,eAAe;AAAA,QAC/B,SAAS;AAAA,QACT,aAAa;AAAA,MACjB,CAAC;AAED,aAAO,MAAM,KAAK,OAAO,KAAK,OAAO;AAAA,IACzC;AA9CI,UAAM,cAAc,YAAY,QAAQ,IAAI;AAC5C,UAAM,kBAAkB,YAAY,QAAQ,IAAI;AAChD,UAAM,SAAS,UAAU,QAAQ,IAAI;AACrC,QAAI,EAAE,eAAe;AACjB,YAAM,IAAI,4BAA4B;AAC1C,SAAK,SAAS,IAAI,UAAU;AAAA,MACxB;AAAA,MACA,aAAa;AAAA,QACT;AAAA,QACA;AAAA,MACJ;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EAEA,MAAa,KACT,SAAmB,CAAC,GACpB,SACmB;AACnB,UAAM,SAAqB;AAAA,MACvB,MAAM,CAAC;AAAA,MACP,QAAQ,CAAC;AAAA,IACb;AAEA,UAAM,QAAQ;AAAA,MACV,OAAO;AAAA,QAAI,CAAC,UACR,KAAK,QAAQ,OAAO,OAAO,EACtB,KAAK,MAAM,OAAO,KAAK,KAAK,EAAE,MAAM,CAAC,CAAC,EACtC;AAAA,UAAM,CAAC,UACJ,OAAO,OAAO,KAAK,EAAE,OAAO,OAAO,MAAM,QAAQ,CAAC;AAAA,QACtD;AAAA,MACR;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAaJ","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 +0,0 @@
1
- {"version":3,"sources":["../../src/services/clients/azureSmsSender.client.ts"],"names":[],"mappings":";;;;;;;;AAIA,SAAS,iBAAiB;AAE1B,IAAqB,uBAArB,MAAgE;AAAA,EAE5D,cAAc;AACV,QAAI,EAAE,YAAY,YAAY;AAC1B,YAAM,IAAI,4BAA4B;AAC1C,UAAM,mBAAmB,oBAAoB,QAAQ,uCAAuC,QAAQ;AACpG,SAAK,SAAS,IAAI,UAAU,gBAAgB;AAAA,EAChD;AAAA,EAEA,MAAa,KAAK,QAAkB,SAAsC;AACtE,UAAM,SAAqB;AAAA,MACvB,MAAM,CAAC;AAAA,MACP,QAAQ,CAAC;AAAA,IACb;AACA,UAAM,aAAa,MAAM,KAAK,OAAO,KAAK;AAAA,MACtC,MAAM;AAAA,MACN,IAAI;AAAA,MACJ;AAAA,IACJ,CAAC;AAED,eAAW,QAAQ,CAAC,cAAc;AAC9B,UAAI,UAAU;AACV,eAAO,OAAO,KAAK;AAAA,UACf,OAAO,UAAU;AAAA,UACjB,OAAO,UAAU;AAAA,QACrB,CAAC;AAAA;AACA,eAAO,KAAK,KAAK,EAAE,OAAO,UAAU,GAAG,CAAC;AAAA,IACjD,CAAC;AAED,WAAO;AAAA,EACX;AACJ","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 (!(USERNAME && PASSWORD && FROM))\n throw new NotProvidedCredentialsError();\n const connectionString = `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 +0,0 @@
1
- {"version":3,"sources":["../../src/errors/notProvidedCredentials.error.ts","../../src/errors/unknownProvider.error.ts","../../src/utils/constants.ts"],"names":[],"mappings":";AAAO,IAAM,8BAAN,cAA0C,MAAM;AAAA,EACnD,cAAc;AACV,UAAM,sCAAsC;AAC5C,SAAK,OAAO;AAAA,EAChB;AACJ;;;ACLO,IAAM,uBAAN,cAAmC,MAAM;AAAA,EAC5C,cAAc;AACV,UAAM,6CAA6C;AACnD,SAAK,OAAO;AAAA,EAChB;AACJ;;;ACLO,IAAM,eAAe,QAAQ,IAAI;AAEjC,IAAM,WAAW,QAAQ,IAAI;AAC7B,IAAM,WAAW,QAAQ,IAAI;AAC7B,IAAM,OAAO,QAAQ,IAAI;AACzB,IAAM,SAAS,QAAQ,IAAI","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;\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 +0,0 @@
1
- {"version":3,"sources":["../../src/services/clients/twilioSmsSender.client.ts"],"names":[],"mappings":";;;;;;;;AACA,SAAS,cAAc;AAMvB,IAAqB,wBAArB,MAAiE;AAAA,EAE7D,cAAc;AA4Bd,SAAQ,UAAU,CACd,OACA,YAEA,KAAK,OAAO,SAAS,OAAO;AAAA,MACxB,MAAM;AAAA,MACN,IAAI;AAAA,MACJ,MAAM;AAAA,IACV,CAAC;AAnCD,QAAI,YAAY,YAAY;AACxB,WAAK,SAAS,IAAI,OAAO,UAAU,QAAQ;AAAA;AAC1C,YAAM,IAAI,4BAA4B;AAAA,EAC/C;AAAA,EAEA,MAAa,KACT,SAAmB,CAAC,GACpB,SACmB;AACnB,UAAM,SAAqB;AAAA,MACvB,MAAM,CAAC;AAAA,MACP,QAAQ,CAAC;AAAA,IACb;AAEA,UAAM,QAAQ;AAAA,MACV,OAAO;AAAA,QAAI,CAAC,UACR,KAAK,QAAQ,OAAO,OAAO,EACtB,KAAK,MAAM,OAAO,KAAK,KAAK,EAAE,MAAM,CAAC,CAAC,EACtC;AAAA,UAAM,CAAC,UACJ,OAAO,OAAO,KAAK,EAAE,OAAO,OAAO,MAAM,QAAQ,CAAC;AAAA,QACtD;AAAA,MACR;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAWJ","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 +0,0 @@
1
- {"version":3,"sources":["../../src/services/clients/vonageSmsSender.client.ts"],"names":["message"],"mappings":";;;;;;;;AAEA,SAAS,cAAc;AACvB,SAAS,YAAY;AAKrB,IAAqB,wBAArB,MAAiE;AAAA,EAE7D,cAAc;AAoCd,SAAQ,UAAU,CAAC,OAAe,YAC9B,KAAK,OAAO,IAAI,KAAK;AAAA,MACjB,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,MAAM;AAAA,IACV,CAAC;AAxCD,QAAI,EAAE,YAAY,YAAY;AAC1B,YAAM,IAAI,4BAA4B;AAC1C,UAAM,aAAa,IAAI,KAAK;AAAA,MACxB,QAAQ;AAAA,MACR,WAAW;AAAA,IACf,CAAC;AACD,SAAK,SAAS,IAAI,OAAO,UAAU;AAAA,EACvC;AAAA,EAEA,MAAa,KAAK,QAAkB,SAAsC;AACtE,UAAM,SAAqB;AAAA,MACvB,MAAM,CAAC;AAAA,MACP,QAAQ,CAAC;AAAA,IACb;AAEA,UAAM,QAAQ;AAAA,MACV,OAAO;AAAA,QAAI,CAAC,UACR,KAAK,QAAQ,OAAO,OAAO,EAAE,KAAK,CAAC,SAAS;AA5B5D;AA6BoB,eACI,UAAK,aAAL,mBAAe,KAAK,CAACA,aAAYA,SAAQ,WAAW,MACtD;AACE,mBAAO,OAAO,KAAK;AAAA,cACf;AAAA,cACA,OAAO,KAAK,SAAS,CAAC,EAAE;AAAA,YAC5B,CAAC;AAAA,UACL,OAAO;AACH,mBAAO,KAAK,KAAK,EAAE,MAAM,CAAC;AAAA,UAC9B;AAAA,QACJ,CAAC;AAAA,MACL;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAQJ","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/dist/lib/types/SMSMessages';\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((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 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"]}