@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.
- package/README.md +9 -0
- package/dist/cjs/services/clients/awsSmsSender.client.js +2 -2
- package/dist/cjs/services/clients/awsSmsSender.client.js.map +1 -1
- package/dist/cjs/services/clients/twilioSmsSender.client.js +5 -16
- package/dist/cjs/services/clients/twilioSmsSender.client.js.map +1 -1
- package/dist/cjs/services/clients/vonageSmsSender.client.js +20 -11
- package/dist/cjs/services/clients/vonageSmsSender.client.js.map +1 -1
- package/dist/cjs/services/smsSender.service.js +8 -8
- package/dist/cjs/services/smsSender.service.js.map +1 -1
- package/dist/esm/{awsSmsSender.client-DGZ2JYIG.mjs → awsSmsSender.client-4AURYPI4.mjs} +3 -3
- package/dist/esm/{awsSmsSender.client-DGZ2JYIG.mjs.map → awsSmsSender.client-4AURYPI4.mjs.map} +1 -1
- package/dist/esm/index.d.mts +1 -1
- package/dist/esm/index.mjs +11 -11
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/{twilioSmsSender.client-2Z4R25US.mjs → twilioSmsSender.client-SSZMXU4M.mjs} +10 -18
- package/dist/esm/twilioSmsSender.client-SSZMXU4M.mjs.map +1 -0
- package/dist/esm/vonageSmsSender.client-FSND4BQX.mjs +46 -0
- package/dist/esm/vonageSmsSender.client-FSND4BQX.mjs.map +1 -0
- package/dist/types/index.d.ts +1 -1
- package/package.json +1 -1
- package/src/services/clients/awsSmsSender.client.ts +2 -2
- package/src/services/clients/twilioSmsSender.client.test.ts +1 -0
- package/src/services/clients/twilioSmsSender.client.ts +13 -18
- package/src/services/clients/vonageSmsSender.client.ts +15 -11
- package/src/services/smsSender.service.ts +3 -5
- package/dist/esm/twilioSmsSender.client-2Z4R25US.mjs.map +0 -1
- package/dist/esm/vonageSmsSender.client-23U65FBQ.mjs +0 -38
- 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.
|
|
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.
|
|
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,
|
|
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.
|
|
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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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;
|
|
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.
|
|
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;
|
|
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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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;
|
|
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.
|
|
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.
|
|
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-
|
|
41
|
+
//# sourceMappingURL=awsSmsSender.client-4AURYPI4.mjs.map
|
package/dist/esm/{awsSmsSender.client-DGZ2JYIG.mjs.map → awsSmsSender.client-4AURYPI4.mjs.map}
RENAMED
|
@@ -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,
|
|
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"]}
|
package/dist/esm/index.d.mts
CHANGED
|
@@ -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
|
|
17
|
+
send(phones: string[], message: string): Promise<SendResult>;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
export { SMSSenderService, SendResult };
|
package/dist/esm/index.mjs
CHANGED
|
@@ -12,22 +12,22 @@ var SMSSenderFactory = class {
|
|
|
12
12
|
}
|
|
13
13
|
};
|
|
14
14
|
SMSSenderFactory.providerModules = {
|
|
15
|
-
twilio: () => import('./twilioSmsSender.client-
|
|
16
|
-
aws: () => import('./awsSmsSender.client-
|
|
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-
|
|
18
|
+
vonage: () => import('./vonageSmsSender.client-FSND4BQX.mjs')
|
|
19
19
|
};
|
|
20
20
|
|
|
21
21
|
// src/services/smsSender.service.ts
|
|
22
22
|
var SMSSenderService = class {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
|
package/dist/esm/index.mjs.map
CHANGED
|
@@ -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
|
|
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"]}
|
package/dist/esm/{twilioSmsSender.client-2Z4R25US.mjs → twilioSmsSender.client-SSZMXU4M.mjs}
RENAMED
|
@@ -3,40 +3,32 @@ import { Twilio } from 'twilio';
|
|
|
3
3
|
|
|
4
4
|
var TwilioSMSSenderClient = class {
|
|
5
5
|
constructor() {
|
|
6
|
-
this.
|
|
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
|
-
|
|
25
|
-
|
|
26
|
-
result.
|
|
27
|
-
phone:
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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-
|
|
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"]}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -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
|
|
17
|
+
send(phones: string[], message: string): Promise<SendResult>;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
export { SMSSenderService, SendResult };
|
package/package.json
CHANGED
|
@@ -32,7 +32,7 @@ export default class AwsSMSSenderClient implements ISMSSender {
|
|
|
32
32
|
|
|
33
33
|
await Promise.all(
|
|
34
34
|
phones.map((phone) =>
|
|
35
|
-
this.
|
|
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
|
|
46
|
+
private sendOne = async (
|
|
47
47
|
phone: string,
|
|
48
48
|
message: string,
|
|
49
49
|
): Promise<PublishCommandOutput> => {
|
|
@@ -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
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
|
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
|
|
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.
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
|
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
|
|
12
|
-
phones
|
|
13
|
-
|
|
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"]}
|