@qrvey/sms 0.0.1 → 0.0.3

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 (28) hide show
  1. package/README.md +9 -0
  2. package/dist/cjs/services/clients/awsSmsSender.client.js +2 -2
  3. package/dist/cjs/services/clients/awsSmsSender.client.js.map +1 -1
  4. package/dist/cjs/services/clients/twilioSmsSender.client.js +5 -16
  5. package/dist/cjs/services/clients/twilioSmsSender.client.js.map +1 -1
  6. package/dist/cjs/services/clients/vonageSmsSender.client.js +20 -11
  7. package/dist/cjs/services/clients/vonageSmsSender.client.js.map +1 -1
  8. package/dist/cjs/services/smsSender.service.js +8 -8
  9. package/dist/cjs/services/smsSender.service.js.map +1 -1
  10. package/dist/esm/{awsSmsSender.client-DGZ2JYIG.mjs → awsSmsSender.client-4AURYPI4.mjs} +3 -3
  11. package/dist/esm/{awsSmsSender.client-DGZ2JYIG.mjs.map → awsSmsSender.client-4AURYPI4.mjs.map} +1 -1
  12. package/dist/esm/index.d.mts +1 -1
  13. package/dist/esm/index.mjs +11 -11
  14. package/dist/esm/index.mjs.map +1 -1
  15. package/dist/esm/{twilioSmsSender.client-2Z4R25US.mjs → twilioSmsSender.client-SSZMXU4M.mjs} +10 -18
  16. package/dist/esm/twilioSmsSender.client-SSZMXU4M.mjs.map +1 -0
  17. package/dist/esm/vonageSmsSender.client-FSND4BQX.mjs +46 -0
  18. package/dist/esm/vonageSmsSender.client-FSND4BQX.mjs.map +1 -0
  19. package/dist/types/index.d.ts +1 -1
  20. package/package.json +1 -1
  21. package/src/services/clients/awsSmsSender.client.ts +2 -2
  22. package/src/services/clients/twilioSmsSender.client.test.ts +1 -0
  23. package/src/services/clients/twilioSmsSender.client.ts +13 -18
  24. package/src/services/clients/vonageSmsSender.client.ts +15 -11
  25. package/src/services/smsSender.service.ts +3 -5
  26. package/dist/esm/twilioSmsSender.client-2Z4R25US.mjs.map +0 -1
  27. package/dist/esm/vonageSmsSender.client-23U65FBQ.mjs +0 -38
  28. package/dist/esm/vonageSmsSender.client-23U65FBQ.mjs.map +0 -1
package/README.md CHANGED
@@ -13,6 +13,15 @@ You can install the **@qrvey/sms** package via npm. Run the following command in
13
13
  npm install @qrvey/sms
14
14
  ```
15
15
 
16
+ ## Peer Dependencies
17
+
18
+ This package has the following peer dependencies:
19
+
20
+ - `@aws-sdk/client-sns` (v3.x) for interacting with **AWS SNS**.
21
+ - `@azure/communication-sms` (v1.x) for interacting with **Azure Communication Services**.
22
+ - `@vonage/server-sdk` (v3.x) and `@vonage/auth` (v1.x) for interacting with **Vonage**.
23
+ - `twilio` (v5.x) for interacting with **Twilio**.
24
+
16
25
  ## Configuration
17
26
 
18
27
  To work properly, the package need some env variables. To set the sms provider, you must set the `SMS_PROVIDER` env variable with one of these values:
@@ -5,7 +5,7 @@ const constants_1 = require("../../utils/constants");
5
5
  const client_sns_1 = require("@aws-sdk/client-sns");
6
6
  class AwsSMSSenderClient {
7
7
  constructor() {
8
- this._send = async (phone, message) => {
8
+ this.sendOne = async (phone, message) => {
9
9
  const command = new client_sns_1.PublishCommand({
10
10
  Message: message,
11
11
  PhoneNumber: phone,
@@ -27,7 +27,7 @@ class AwsSMSSenderClient {
27
27
  sent: [],
28
28
  failed: [],
29
29
  };
30
- await Promise.all(phones.map((phone) => this._send(phone, message)
30
+ await Promise.all(phones.map((phone) => this.sendOne(phone, message)
31
31
  .then(() => result.sent.push({ phone }))
32
32
  .catch((error) => result.failed.push({ phone, error: error.message }))));
33
33
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"awsSmsSender.client.js","sourceRoot":"","sources":["../../../../src/services/clients/awsSmsSender.client.ts"],"names":[],"mappings":";;AAAA,yCAA2D;AAG3D,qDAAmE;AACnE,oDAI6B;AAE7B,MAAqB,kBAAkB;IAEnC;QAiCQ,UAAK,GAAG,KAAK,EACjB,KAAa,EACb,OAAe,EACc,EAAE;YAC/B,MAAM,OAAO,GAAG,IAAI,2BAAc,CAAC;gBAC/B,OAAO,EAAE,OAAO;gBAChB,WAAW,EAAE,KAAK;aACrB,CAAC,CAAC;YAEH,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC,CAAC;QA1CE,IAAI,CAAC,CAAC,oBAAQ,IAAI,oBAAQ,CAAC;YAAE,MAAM,IAAI,oCAA2B,EAAE,CAAC;QACrE,IAAI,CAAC,MAAM,GAAG,IAAI,sBAAS,CAAC;YACxB,MAAM,EAAE,kBAAM;YACd,WAAW,EAAE;gBACT,WAAW,EAAE,oBAAQ;gBACrB,eAAe,EAAE,oBAAQ;aAC5B;SACJ,CAAC,CAAC;IACP,CAAC;IAEM,KAAK,CAAC,IAAI,CACb,SAAmB,EAAE,EACrB,OAAe;QAEf,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,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC;aACrB,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;aACvC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CACb,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CACtD,CACR,CACJ,CAAC;QAEF,OAAO,MAAM,CAAC;IAClB,CAAC;CAaJ;AA9CD,qCA8CC"}
1
+ {"version":3,"file":"awsSmsSender.client.js","sourceRoot":"","sources":["../../../../src/services/clients/awsSmsSender.client.ts"],"names":[],"mappings":";;AAAA,yCAA2D;AAG3D,qDAAmE;AACnE,oDAI6B;AAE7B,MAAqB,kBAAkB;IAEnC;QAiCQ,YAAO,GAAG,KAAK,EACnB,KAAa,EACb,OAAe,EACc,EAAE;YAC/B,MAAM,OAAO,GAAG,IAAI,2BAAc,CAAC;gBAC/B,OAAO,EAAE,OAAO;gBAChB,WAAW,EAAE,KAAK;aACrB,CAAC,CAAC;YAEH,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC,CAAC;QA1CE,IAAI,CAAC,CAAC,oBAAQ,IAAI,oBAAQ,CAAC;YAAE,MAAM,IAAI,oCAA2B,EAAE,CAAC;QACrE,IAAI,CAAC,MAAM,GAAG,IAAI,sBAAS,CAAC;YACxB,MAAM,EAAE,kBAAM;YACd,WAAW,EAAE;gBACT,WAAW,EAAE,oBAAQ;gBACrB,eAAe,EAAE,oBAAQ;aAC5B;SACJ,CAAC,CAAC;IACP,CAAC;IAEM,KAAK,CAAC,IAAI,CACb,SAAmB,EAAE,EACrB,OAAe;QAEf,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;aACvB,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;aACvC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CACb,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CACtD,CACR,CACJ,CAAC;QAEF,OAAO,MAAM,CAAC;IAClB,CAAC;CAaJ;AA9CD,qCA8CC"}
@@ -5,35 +5,24 @@ const constants_1 = require("../../utils/constants");
5
5
  const errors_1 = require("../../errors");
6
6
  class TwilioSMSSenderClient {
7
7
  constructor() {
8
- this._send = (phone, message) => this.client.messages.create({
8
+ this.sendOne = (phone, message) => this.client.messages.create({
9
9
  from: constants_1.FROM,
10
10
  to: phone,
11
11
  body: message,
12
12
  });
13
- if (constants_1.USERNAME && constants_1.PASSWORD)
13
+ if (constants_1.USERNAME && constants_1.PASSWORD && constants_1.FROM)
14
14
  this.client = new twilio_1.Twilio(constants_1.USERNAME, constants_1.PASSWORD);
15
15
  else
16
16
  throw new errors_1.NotProvidedCredentialsError();
17
17
  }
18
18
  async send(phones = [], message) {
19
- const sentMessages = await Promise.all(phones.map((phone) => this._send(phone, message)));
20
19
  const result = {
21
20
  sent: [],
22
21
  failed: [],
23
22
  };
24
- sentMessages.forEach((message) => {
25
- if (message.errorMessage) {
26
- result.failed.push({
27
- phone: message.to,
28
- error: message.errorMessage,
29
- });
30
- }
31
- else {
32
- result.sent.push({
33
- phone: message.to,
34
- });
35
- }
36
- });
23
+ await Promise.all(phones.map((phone) => this.sendOne(phone, message)
24
+ .then(() => result.sent.push({ phone }))
25
+ .catch((error) => result.failed.push({ phone, error: error.message }))));
37
26
  return result;
38
27
  }
39
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"twilioSmsSender.client.js","sourceRoot":"","sources":["../../../../src/services/clients/twilioSmsSender.client.ts"],"names":[],"mappings":";;AACA,mCAAgC;AAChC,qDAAiE;AAGjE,yCAA2D;AAE3D,MAAqB,qBAAqB;IAEtC;QAiCQ,UAAK,GAAG,CACZ,KAAa,EACb,OAAe,EACS,EAAE,CAC1B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YACxB,IAAI,EAAE,gBAAI;YACV,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,OAAO;SAChB,CAAC,CAAC;QAxCH,IAAI,oBAAQ,IAAI,oBAAQ;YAAE,IAAI,CAAC,MAAM,GAAG,IAAI,eAAM,CAAC,oBAAQ,EAAE,oBAAQ,CAAC,CAAC;;YAClE,MAAM,IAAI,oCAA2B,EAAE,CAAC;IACjD,CAAC;IAEM,KAAK,CAAC,IAAI,CACb,SAAmB,EAAE,EACrB,OAAe;QAEf,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CACpD,CAAC;QAEF,MAAM,MAAM,GAAe;YACvB,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,EAAE;SACb,CAAC;QACF,YAAY,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,OAAO,CAAC,YAAY,EAAE;gBACtB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;oBACf,KAAK,EAAE,OAAO,CAAC,EAAE;oBACjB,KAAK,EAAE,OAAO,CAAC,YAAY;iBAC9B,CAAC,CAAC;aACN;iBAAM;gBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;oBACb,KAAK,EAAE,OAAO,CAAC,EAAE;iBACpB,CAAC,CAAC;aACN;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAClB,CAAC;CAWJ;AA5CD,wCA4CC"}
1
+ {"version":3,"file":"twilioSmsSender.client.js","sourceRoot":"","sources":["../../../../src/services/clients/twilioSmsSender.client.ts"],"names":[],"mappings":";;AACA,mCAAgC;AAChC,qDAAiE;AAGjE,yCAA2D;AAE3D,MAAqB,qBAAqB;IAEtC;QA4BQ,YAAO,GAAG,CACd,KAAa,EACb,OAAe,EACS,EAAE,CAC1B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YACxB,IAAI,EAAE,gBAAI;YACV,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,OAAO;SAChB,CAAC,CAAC;QAnCH,IAAI,oBAAQ,IAAI,oBAAQ,IAAI,gBAAI;YAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,eAAM,CAAC,oBAAQ,EAAE,oBAAQ,CAAC,CAAC;;YAC5C,MAAM,IAAI,oCAA2B,EAAE,CAAC;IACjD,CAAC;IAEM,KAAK,CAAC,IAAI,CACb,SAAmB,EAAE,EACrB,OAAe;QAEf,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;aACvB,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;aACvC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CACb,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CACtD,CACR,CACJ,CAAC;QAEF,OAAO,MAAM,CAAC;IAClB,CAAC;CAWJ;AAvCD,wCAuCC"}
@@ -6,17 +6,7 @@ const constants_1 = require("../../utils/constants");
6
6
  const errors_1 = require("../../errors");
7
7
  class VonageSMSSenderClient {
8
8
  constructor() {
9
- this.send = async (phones, message) => {
10
- const result = {
11
- sent: [],
12
- failed: [],
13
- };
14
- await Promise.all(phones.map((phone) => this._send(phone, message)
15
- .then(() => result.sent.push({ phone }))
16
- .catch((error) => result.failed.push({ phone, error: error.message }))));
17
- return result;
18
- };
19
- this._send = (phone, message) => this.client.sms.send({
9
+ this.sendOne = (phone, message) => this.client.sms.send({
20
10
  to: phone,
21
11
  text: message,
22
12
  from: constants_1.FROM,
@@ -29,6 +19,25 @@ class VonageSMSSenderClient {
29
19
  });
30
20
  this.client = new server_sdk_1.Vonage(vonageAuth);
31
21
  }
22
+ async send(phones, message) {
23
+ const result = {
24
+ sent: [],
25
+ failed: [],
26
+ };
27
+ await Promise.all(phones.map((phone) => this.sendOne(phone, message).then((data) => {
28
+ var _a;
29
+ if ((_a = data.messages) === null || _a === void 0 ? void 0 : _a.some((message) => message.status !== '0')) {
30
+ result.failed.push({
31
+ phone,
32
+ error: data.messages[0].errorText,
33
+ });
34
+ }
35
+ else {
36
+ result.sent.push({ phone });
37
+ }
38
+ })));
39
+ return result;
40
+ }
32
41
  }
33
42
  exports.default = VonageSMSSenderClient;
34
43
  //# 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;QAUO,SAAI,GAAG,KAAK,EACf,MAAgB,EAChB,OAAe,EACI,EAAE;YACrB,MAAM,MAAM,GAAe;gBACvB,IAAI,EAAE,EAAE;gBACR,MAAM,EAAE,EAAE;aACb,CAAC;YAEF,MAAM,OAAO,CAAC,GAAG,CACb,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACjB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC;iBACrB,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;iBACvC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CACb,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CACtD,CACR,CACJ,CAAC;YAEF,OAAO,MAAM,CAAC;QAClB,CAAC,CAAC;QAEM,UAAK,GAAG,CAAC,KAAa,EAAE,OAAe,EAAwB,EAAE,CACrE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YACjB,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,gBAAc;SACvB,CAAC,CAAC;QApCH,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;CA8BJ;AAxCD,wCAwCC"}
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"}
@@ -3,14 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SMSSenderService = void 0;
4
4
  const smsSenderFactory_service_1 = require("./smsSenderFactory.service");
5
5
  class SMSSenderService {
6
- constructor() {
7
- /**
8
- * Send a message to one or more phones.
9
- * @param phones - phone numbers to send to
10
- * @param message - message to send
11
- * @returns {Promise<SendResult>} Send result.
12
- */
13
- this.send = async (phones, message) => (await smsSenderFactory_service_1.SMSSenderFactory.getSMSSender()).send(phones, message);
6
+ /**
7
+ * Send a message to one or more phones.
8
+ * @param phones - phone numbers to send to
9
+ * @param message - message to send
10
+ * @returns {Promise<SendResult>} Send result.
11
+ */
12
+ async send(phones, message) {
13
+ return (await smsSenderFactory_service_1.SMSSenderFactory.getSMSSender()).send(phones, message);
14
14
  }
15
15
  }
16
16
  exports.SMSSenderService = SMSSenderService;
@@ -1 +1 @@
1
- {"version":3,"file":"smsSender.service.js","sourceRoot":"","sources":["../../../src/services/smsSender.service.ts"],"names":[],"mappings":";;;AACA,yEAA8D;AAE9D,MAAa,gBAAgB;IAA7B;QACI;;;;;WAKG;QACI,SAAI,GAAG,KAAK,EACf,MAAgB,EAChB,OAAe,EACI,EAAE,CACrB,CAAC,MAAM,2CAAgB,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC;CAAA;AAZD,4CAYC"}
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"}
@@ -3,7 +3,7 @@ import { PublishCommand, SNSClient } from '@aws-sdk/client-sns';
3
3
 
4
4
  var AwsSMSSenderClient = class {
5
5
  constructor() {
6
- this._send = async (phone, message) => {
6
+ this.sendOne = async (phone, message) => {
7
7
  const command = new PublishCommand({
8
8
  Message: message,
9
9
  PhoneNumber: phone
@@ -27,7 +27,7 @@ var AwsSMSSenderClient = class {
27
27
  };
28
28
  await Promise.all(
29
29
  phones.map(
30
- (phone) => this._send(phone, message).then(() => result.sent.push({ phone })).catch(
30
+ (phone) => this.sendOne(phone, message).then(() => result.sent.push({ phone })).catch(
31
31
  (error) => result.failed.push({ phone, error: error.message })
32
32
  )
33
33
  )
@@ -38,4 +38,4 @@ var AwsSMSSenderClient = class {
38
38
 
39
39
  export { AwsSMSSenderClient as default };
40
40
  //# sourceMappingURL=out.js.map
41
- //# sourceMappingURL=awsSmsSender.client-DGZ2JYIG.mjs.map
41
+ //# sourceMappingURL=awsSmsSender.client-4AURYPI4.mjs.map
@@ -1 +1 @@
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;AAiCd,SAAQ,QAAQ,OACZ,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;AA1CI,QAAI,EAAE,YAAY;AAAW,YAAM,IAAI,4BAA4B;AACnE,SAAK,SAAS,IAAI,UAAU;AAAA,MACxB,QAAQ;AAAA,MACR,aAAa;AAAA,QACT,aAAa;AAAA,QACb,iBAAiB;AAAA,MACrB;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,MAAM,OAAO,OAAO,EACpB,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 if (!(USERNAME && PASSWORD)) throw new NotProvidedCredentialsError();\n this.client = new SNSClient({\n region: REGION,\n credentials: {\n accessKeyId: USERNAME,\n secretAccessKey: PASSWORD,\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._send(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 _send = 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
+ {"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;AAiCd,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;AA1CI,QAAI,EAAE,YAAY;AAAW,YAAM,IAAI,4BAA4B;AACnE,SAAK,SAAS,IAAI,UAAU;AAAA,MACxB,QAAQ;AAAA,MACR,aAAa;AAAA,QACT,aAAa;AAAA,QACb,iBAAiB;AAAA,MACrB;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 if (!(USERNAME && PASSWORD)) throw new NotProvidedCredentialsError();\n this.client = new SNSClient({\n region: REGION,\n credentials: {\n accessKeyId: USERNAME,\n secretAccessKey: PASSWORD,\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"]}
@@ -14,7 +14,7 @@ declare class SMSSenderService {
14
14
  * @param message - message to send
15
15
  * @returns {Promise<SendResult>} Send result.
16
16
  */
17
- send: (phones: string[], message: string) => Promise<SendResult>;
17
+ send(phones: string[], message: string): Promise<SendResult>;
18
18
  }
19
19
 
20
20
  export { SMSSenderService, SendResult };
@@ -12,22 +12,22 @@ var SMSSenderFactory = class {
12
12
  }
13
13
  };
14
14
  SMSSenderFactory.providerModules = {
15
- twilio: () => import('./twilioSmsSender.client-2Z4R25US.mjs'),
16
- aws: () => import('./awsSmsSender.client-DGZ2JYIG.mjs'),
15
+ twilio: () => import('./twilioSmsSender.client-SSZMXU4M.mjs'),
16
+ aws: () => import('./awsSmsSender.client-4AURYPI4.mjs'),
17
17
  azure: () => import('./azureSmsSender.client-K6MPTIU7.mjs'),
18
- vonage: () => import('./vonageSmsSender.client-23U65FBQ.mjs')
18
+ vonage: () => import('./vonageSmsSender.client-FSND4BQX.mjs')
19
19
  };
20
20
 
21
21
  // src/services/smsSender.service.ts
22
22
  var SMSSenderService = class {
23
- constructor() {
24
- /**
25
- * Send a message to one or more phones.
26
- * @param phones - phone numbers to send to
27
- * @param message - message to send
28
- * @returns {Promise<SendResult>} Send result.
29
- */
30
- this.send = async (phones, message) => (await SMSSenderFactory.getSMSSender()).send(phones, message);
23
+ /**
24
+ * Send a message to one or more phones.
25
+ * @param phones - phone numbers to send to
26
+ * @param message - message to send
27
+ * @returns {Promise<SendResult>} Send result.
28
+ */
29
+ async send(phones, message) {
30
+ return (await SMSSenderFactory.getSMSSender()).send(phones, message);
31
31
  }
32
32
  };
33
33
 
@@ -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,EAAvB;AAOH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAO,OAAO,OACV,QACA,aAEC,MAAM,iBAAiB,aAAa,GAAG,KAAK,QAAQ,OAAO;AAAA;AACpE","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 send = async (\n phones: string[],\n message: string,\n ): Promise<SendResult> =>\n (await SMSSenderFactory.getSMSSender()).send(phones, message);\n}\n"]}
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"]}
@@ -3,40 +3,32 @@ import { Twilio } from 'twilio';
3
3
 
4
4
  var TwilioSMSSenderClient = class {
5
5
  constructor() {
6
- this._send = (phone, message) => this.client.messages.create({
6
+ this.sendOne = (phone, message) => this.client.messages.create({
7
7
  from: FROM,
8
8
  to: phone,
9
9
  body: message
10
10
  });
11
- if (USERNAME && PASSWORD)
11
+ if (USERNAME && PASSWORD && FROM)
12
12
  this.client = new Twilio(USERNAME, PASSWORD);
13
13
  else
14
14
  throw new NotProvidedCredentialsError();
15
15
  }
16
16
  async send(phones = [], message) {
17
- const sentMessages = await Promise.all(
18
- phones.map((phone) => this._send(phone, message))
19
- );
20
17
  const result = {
21
18
  sent: [],
22
19
  failed: []
23
20
  };
24
- sentMessages.forEach((message2) => {
25
- if (message2.errorMessage) {
26
- result.failed.push({
27
- phone: message2.to,
28
- error: message2.errorMessage
29
- });
30
- } else {
31
- result.sent.push({
32
- phone: message2.to
33
- });
34
- }
35
- });
21
+ await Promise.all(
22
+ phones.map(
23
+ (phone) => this.sendOne(phone, message).then(() => result.sent.push({ phone })).catch(
24
+ (error) => result.failed.push({ phone, error: error.message })
25
+ )
26
+ )
27
+ );
36
28
  return result;
37
29
  }
38
30
  };
39
31
 
40
32
  export { TwilioSMSSenderClient as default };
41
33
  //# sourceMappingURL=out.js.map
42
- //# sourceMappingURL=twilioSmsSender.client-2Z4R25US.mjs.map
34
+ //# sourceMappingURL=twilioSmsSender.client-SSZMXU4M.mjs.map
@@ -0,0 +1 @@
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"]}
@@ -0,0 +1,46 @@
1
+ import { FROM, USERNAME, PASSWORD, NotProvidedCredentialsError } from './chunk-NCQDKWNI.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((message2) => message2.status !== "0")) {
30
+ result.failed.push({
31
+ phone,
32
+ error: data.messages[0].errorText
33
+ });
34
+ } else {
35
+ result.sent.push({ phone });
36
+ }
37
+ })
38
+ )
39
+ );
40
+ return result;
41
+ }
42
+ };
43
+
44
+ export { VonageSMSSenderClient as default };
45
+ //# sourceMappingURL=out.js.map
46
+ //# sourceMappingURL=vonageSmsSender.client-FSND4BQX.mjs.map
@@ -0,0 +1 @@
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"]}
@@ -14,7 +14,7 @@ declare class SMSSenderService {
14
14
  * @param message - message to send
15
15
  * @returns {Promise<SendResult>} Send result.
16
16
  */
17
- send: (phones: string[], message: string) => Promise<SendResult>;
17
+ send(phones: string[], message: string): Promise<SendResult>;
18
18
  }
19
19
 
20
20
  export { SMSSenderService, SendResult };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qrvey/sms",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "types": "dist/types/index.d.ts",
5
5
  "main": "dist/cjs/index.js",
6
6
  "exports": {
@@ -32,7 +32,7 @@ export default class AwsSMSSenderClient implements ISMSSender {
32
32
 
33
33
  await Promise.all(
34
34
  phones.map((phone) =>
35
- this._send(phone, message)
35
+ this.sendOne(phone, message)
36
36
  .then(() => result.sent.push({ phone }))
37
37
  .catch((error) =>
38
38
  result.failed.push({ phone, error: error.message }),
@@ -43,7 +43,7 @@ export default class AwsSMSSenderClient implements ISMSSender {
43
43
  return result;
44
44
  }
45
45
 
46
- private _send = async (
46
+ private sendOne = async (
47
47
  phone: string,
48
48
  message: string,
49
49
  ): Promise<PublishCommandOutput> => {
@@ -27,6 +27,7 @@ jest.mock('twilio', () => {
27
27
  jest.mock('../../utils/constants', () => ({
28
28
  USERNAME: 'qrvey',
29
29
  PASSWORD: '123456',
30
+ FROM: '+123456789',
30
31
  }));
31
32
 
32
33
  describe('TwilioSMSSender tests.', () => {
@@ -8,7 +8,8 @@ import { NotProvidedCredentialsError } from '../../errors';
8
8
  export default class TwilioSMSSenderClient implements ISMSSender {
9
9
  private client: Twilio;
10
10
  constructor() {
11
- if (USERNAME && PASSWORD) this.client = new Twilio(USERNAME, PASSWORD);
11
+ if (USERNAME && PASSWORD && FROM)
12
+ this.client = new Twilio(USERNAME, PASSWORD);
12
13
  else throw new NotProvidedCredentialsError();
13
14
  }
14
15
 
@@ -16,31 +17,25 @@ export default class TwilioSMSSenderClient implements ISMSSender {
16
17
  phones: string[] = [],
17
18
  message: string,
18
19
  ): Promise<SendResult> {
19
- const sentMessages = await Promise.all(
20
- phones.map((phone) => this._send(phone, message)),
21
- );
22
-
23
20
  const result: SendResult = {
24
21
  sent: [],
25
22
  failed: [],
26
23
  };
27
- sentMessages.forEach((message) => {
28
- if (message.errorMessage) {
29
- result.failed.push({
30
- phone: message.to,
31
- error: message.errorMessage,
32
- });
33
- } else {
34
- result.sent.push({
35
- phone: message.to,
36
- });
37
- }
38
- });
24
+
25
+ await Promise.all(
26
+ phones.map((phone) =>
27
+ this.sendOne(phone, message)
28
+ .then(() => result.sent.push({ phone }))
29
+ .catch((error) =>
30
+ result.failed.push({ phone, error: error.message }),
31
+ ),
32
+ ),
33
+ );
39
34
 
40
35
  return result;
41
36
  }
42
37
 
43
- private _send = (
38
+ private sendOne = (
44
39
  phone: string,
45
40
  message: string,
46
41
  ): Promise<MessageInstance> =>
@@ -18,10 +18,7 @@ export default class VonageSMSSenderClient implements ISMSSender {
18
18
  this.client = new Vonage(vonageAuth);
19
19
  }
20
20
 
21
- public send = async (
22
- phones: string[],
23
- message: string,
24
- ): Promise<SendResult> => {
21
+ public async send(phones: string[], message: string): Promise<SendResult> {
25
22
  const result: SendResult = {
26
23
  sent: [],
27
24
  failed: [],
@@ -29,18 +26,25 @@ export default class VonageSMSSenderClient implements ISMSSender {
29
26
 
30
27
  await Promise.all(
31
28
  phones.map((phone) =>
32
- this._send(phone, message)
33
- .then(() => result.sent.push({ phone }))
34
- .catch((error) =>
35
- result.failed.push({ phone, error: error.message }),
36
- ),
29
+ this.sendOne(phone, message).then((data) => {
30
+ if (
31
+ data.messages?.some((message) => message.status !== '0')
32
+ ) {
33
+ result.failed.push({
34
+ phone,
35
+ error: data.messages[0].errorText,
36
+ });
37
+ } else {
38
+ result.sent.push({ phone });
39
+ }
40
+ }),
37
41
  ),
38
42
  );
39
43
 
40
44
  return result;
41
- };
45
+ }
42
46
 
43
- private _send = (phone: string, message: string): Promise<SMSMessages> =>
47
+ private sendOne = (phone: string, message: string): Promise<SMSMessages> =>
44
48
  this.client.sms.send({
45
49
  to: phone,
46
50
  text: message,
@@ -8,9 +8,7 @@ export class SMSSenderService {
8
8
  * @param message - message to send
9
9
  * @returns {Promise<SendResult>} Send result.
10
10
  */
11
- public send = async (
12
- phones: string[],
13
- message: string,
14
- ): Promise<SendResult> =>
15
- (await SMSSenderFactory.getSMSSender()).send(phones, message);
11
+ public async send(phones: string[], message: string): Promise<SendResult> {
12
+ return (await SMSSenderFactory.getSMSSender()).send(phones, message);
13
+ }
16
14
  }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/services/clients/twilioSmsSender.client.ts"],"names":["message"],"mappings":";;;;;;;;AACA,SAAS,cAAc;AAMvB,IAAqB,wBAArB,MAAiE;AAAA,EAE7D,cAAc;AAiCd,SAAQ,QAAQ,CACZ,OACA,YAEA,KAAK,OAAO,SAAS,OAAO;AAAA,MACxB,MAAM;AAAA,MACN,IAAI;AAAA,MACJ,MAAM;AAAA,IACV,CAAC;AAxCD,QAAI,YAAY;AAAU,WAAK,SAAS,IAAI,OAAO,UAAU,QAAQ;AAAA;AAChE,YAAM,IAAI,4BAA4B;AAAA,EAC/C;AAAA,EAEA,MAAa,KACT,SAAmB,CAAC,GACpB,SACmB;AACnB,UAAM,eAAe,MAAM,QAAQ;AAAA,MAC/B,OAAO,IAAI,CAAC,UAAU,KAAK,MAAM,OAAO,OAAO,CAAC;AAAA,IACpD;AAEA,UAAM,SAAqB;AAAA,MACvB,MAAM,CAAC;AAAA,MACP,QAAQ,CAAC;AAAA,IACb;AACA,iBAAa,QAAQ,CAACA,aAAY;AAC9B,UAAIA,SAAQ,cAAc;AACtB,eAAO,OAAO,KAAK;AAAA,UACf,OAAOA,SAAQ;AAAA,UACf,OAAOA,SAAQ;AAAA,QACnB,CAAC;AAAA,MACL,OAAO;AACH,eAAO,KAAK,KAAK;AAAA,UACb,OAAOA,SAAQ;AAAA,QACnB,CAAC;AAAA,MACL;AAAA,IACJ,CAAC;AAED,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) 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 sentMessages = await Promise.all(\n phones.map((phone) => this._send(phone, message)),\n );\n\n const result: SendResult = {\n sent: [],\n failed: [],\n };\n sentMessages.forEach((message) => {\n if (message.errorMessage) {\n result.failed.push({\n phone: message.to,\n error: message.errorMessage,\n });\n } else {\n result.sent.push({\n phone: message.to,\n });\n }\n });\n\n return result;\n }\n\n private _send = (\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,38 +0,0 @@
1
- import { FROM, USERNAME, PASSWORD, NotProvidedCredentialsError } from './chunk-NCQDKWNI.mjs';
2
- import { Vonage } from '@vonage/server-sdk';
3
- import { Auth } from '@vonage/auth';
4
-
5
- var VonageSMSSenderClient = class {
6
- constructor() {
7
- this.send = async (phones, message) => {
8
- const result = {
9
- sent: [],
10
- failed: []
11
- };
12
- await Promise.all(
13
- phones.map(
14
- (phone) => this._send(phone, message).then(() => result.sent.push({ phone })).catch(
15
- (error) => result.failed.push({ phone, error: error.message })
16
- )
17
- )
18
- );
19
- return result;
20
- };
21
- this._send = (phone, message) => this.client.sms.send({
22
- to: phone,
23
- text: message,
24
- from: FROM
25
- });
26
- if (!(USERNAME && PASSWORD && FROM))
27
- throw new NotProvidedCredentialsError();
28
- const vonageAuth = new Auth({
29
- apiKey: USERNAME,
30
- apiSecret: PASSWORD
31
- });
32
- this.client = new Vonage(vonageAuth);
33
- }
34
- };
35
-
36
- export { VonageSMSSenderClient as default };
37
- //# sourceMappingURL=out.js.map
38
- //# sourceMappingURL=vonageSmsSender.client-23U65FBQ.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/services/clients/vonageSmsSender.client.ts"],"names":[],"mappings":";;;;;;;;AAEA,SAAS,cAAc;AACvB,SAAS,YAAY;AAKrB,IAAqB,wBAArB,MAAiE;AAAA,EAE7D,cAAc;AAUd,SAAO,OAAO,OACV,QACA,YACsB;AACtB,YAAM,SAAqB;AAAA,QACvB,MAAM,CAAC;AAAA,QACP,QAAQ,CAAC;AAAA,MACb;AAEA,YAAM,QAAQ;AAAA,QACV,OAAO;AAAA,UAAI,CAAC,UACR,KAAK,MAAM,OAAO,OAAO,EACpB,KAAK,MAAM,OAAO,KAAK,KAAK,EAAE,MAAM,CAAC,CAAC,EACtC;AAAA,YAAM,CAAC,UACJ,OAAO,OAAO,KAAK,EAAE,OAAO,OAAO,MAAM,QAAQ,CAAC;AAAA,UACtD;AAAA,QACR;AAAA,MACJ;AAEA,aAAO;AAAA,IACX;AAEA,SAAQ,QAAQ,CAAC,OAAe,YAC5B,KAAK,OAAO,IAAI,KAAK;AAAA,MACjB,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,MAAM;AAAA,IACV,CAAC;AApCD,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;AA8BJ","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 send = async (\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._send(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 _send = (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"]}