@qrvey/sms 1.0.1-949 → 1.0.2-1215-beta.2
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 +0 -82
- package/dist/cjs/services/clients/awsSmsSender.client.js +13 -9
- package/dist/cjs/services/clients/awsSmsSender.client.js.map +1 -1
- package/dist/cjs/services/clients/vonageSmsSender.client.js +17 -7
- package/dist/cjs/services/clients/vonageSmsSender.client.js.map +1 -1
- package/dist/cjs/services/smsSender.service.js +1 -0
- package/dist/cjs/services/smsSender.service.js.map +1 -1
- package/dist/cjs/services/smsSenderFactory.service.js +17 -7
- package/dist/cjs/services/smsSenderFactory.service.js.map +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/esm/{awsSmsSender.client-QBVM62KM.mjs → awsSmsSender.client-3SLRZJIV.mjs} +9 -5
- package/dist/esm/awsSmsSender.client-3SLRZJIV.mjs.map +1 -0
- package/dist/esm/{azureSmsSender.client-Z3P5SL47.mjs → azureSmsSender.client-DA4OPYSB.mjs} +4 -3
- package/dist/esm/azureSmsSender.client-DA4OPYSB.mjs.map +1 -0
- package/dist/esm/chunk-4QVZYBYH.mjs +25 -0
- package/dist/esm/chunk-4QVZYBYH.mjs.map +1 -0
- package/dist/esm/chunk-NRKEOLLT.mjs +16 -0
- package/dist/esm/chunk-NRKEOLLT.mjs.map +1 -0
- package/dist/esm/index.mjs +7 -5
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/{twilioSmsSender.client-J4FEYTVH.mjs → twilioSmsSender.client-TDXGCJPW.mjs} +4 -3
- package/dist/esm/twilioSmsSender.client-TDXGCJPW.mjs.map +1 -0
- package/dist/esm/{vonageSmsSender.client-7KP2UCMI.mjs → vonageSmsSender.client-MM7LS23Y.mjs} +4 -3
- package/dist/esm/vonageSmsSender.client-MM7LS23Y.mjs.map +1 -0
- package/package.json +61 -77
- package/src/services/clients/awsSmsSender.client.ts +13 -8
- package/src/services/clients/index.test.ts +2 -4
- package/src/services/smsSender.service.test.ts +14 -6
- package/src/services/smsSender.service.ts +1 -0
- package/tsconfig.json +1 -1
- package/dist/esm/awsSmsSender.client-QBVM62KM.mjs.map +0 -1
- package/dist/esm/azureSmsSender.client-Z3P5SL47.mjs.map +0 -1
- package/dist/esm/chunk-3OKJAMCQ.mjs +0 -36
- package/dist/esm/chunk-3OKJAMCQ.mjs.map +0 -1
- package/dist/esm/twilioSmsSender.client-J4FEYTVH.mjs.map +0 -1
- package/dist/esm/vonageSmsSender.client-7KP2UCMI.mjs.map +0 -1
package/README.md
CHANGED
|
@@ -1,83 +1 @@
|
|
|
1
|
-
# @qrvey/sms
|
|
2
1
|
|
|
3
|
-

|
|
4
|
-

|
|
5
|
-
|
|
6
|
-
**@qrvey/sms** is a lightweight and reliable library to send manage sms messages. It supports different clients such SNS (AWS), ACS (Azure), Twilio, and Vonage.
|
|
7
|
-
|
|
8
|
-
## Installation
|
|
9
|
-
|
|
10
|
-
You can install the **@qrvey/sms** package via npm. Run the following command in your terminal:
|
|
11
|
-
|
|
12
|
-
```bash
|
|
13
|
-
npm install @qrvey/sms
|
|
14
|
-
```
|
|
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
|
-
|
|
25
|
-
## Configuration
|
|
26
|
-
|
|
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:
|
|
28
|
-
- `AWS`
|
|
29
|
-
- `AZURE`
|
|
30
|
-
- `TWILIO`
|
|
31
|
-
- `VONAGE`
|
|
32
|
-
|
|
33
|
-
In case the `SMS_PROVIDER` env variable is set with an unknown value, you will get a `UnknownProvider` error. Depending on the provider you must set some variables:
|
|
34
|
-
|
|
35
|
-
### AWS
|
|
36
|
-
If you set `SMS_PROVIDER = AWS`, the following env variables are required:
|
|
37
|
-
- `SMS_PROVIDER_USERNAME` which is `AWS_ACCESS_KEY_ID` in aws context.
|
|
38
|
-
- `SMS_PROVIDER_PASSWORD` which is `AWS_SECRET_ACCESS_KEY` in aws context.
|
|
39
|
-
- `SMS_PROVIDER_REGION` which is `AWS_REGION` in aws context.
|
|
40
|
-
|
|
41
|
-
### AZURE
|
|
42
|
-
If you set `SMS_PROVIDER = AZURE`, the following env variables are required:
|
|
43
|
-
- `SMS_PROVIDER_USERNAME` which is `resource-name` in azure `connectionString` context.
|
|
44
|
-
- `SMS_PROVIDER_PASSWORD` which is `access-key` in azure `connectionString` context.
|
|
45
|
-
- `SMS_PROVIDER_FROM_NUMBER` which is the ACS-registered number in azure context. This must be in E.164 format, example: "+123456789"
|
|
46
|
-
|
|
47
|
-
**Note**: The azure `connectionString` for `Azure Communication Services` looks like this: `endpoint=https://<resource-name>.communication.azure.com/;accesskey=<access-key>`.
|
|
48
|
-
|
|
49
|
-
### TWILIO
|
|
50
|
-
If you set `SMS_PROVIDER = TWILIO`, the following env variables are required:
|
|
51
|
-
- `SMS_PROVIDER_USERNAME` which is `TWILIO_ACCOUNT_SID` in twilio context.
|
|
52
|
-
- `SMS_PROVIDER_PASSWORD` which is `TWILIO_AUTH_TOKEN` in twilio context.
|
|
53
|
-
|
|
54
|
-
### VONAGE
|
|
55
|
-
If you set `SMS_PROVIDER = VONAGE`, the following env variables are required:
|
|
56
|
-
- `SMS_PROVIDER_USERNAME` which is `VONAGE_API_KEY` in vonage context.
|
|
57
|
-
- `SMS_PROVIDER_PASSWORD` which is `VONAGE_API_SECRET` in vonage context.
|
|
58
|
-
- `SMS_PROVIDER_FROM_NUMBER` which can be one of the next:
|
|
59
|
-
- An alphanumeric ID. Example: "MyCompanyBrand"
|
|
60
|
-
- A Vonage-registered number in E.164 format. Example: "+123456789".
|
|
61
|
-
- A local-registered short number. Example: "12345".
|
|
62
|
-
|
|
63
|
-
## API Documentation
|
|
64
|
-
|
|
65
|
-
### Available Methods
|
|
66
|
-
|
|
67
|
-
```ts
|
|
68
|
-
send: (phones: string[], message: string) => Promise<SendResult>;
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
## Example Usage
|
|
73
|
-
|
|
74
|
-
```ts
|
|
75
|
-
const phones: string[] = [
|
|
76
|
-
"+123456789",
|
|
77
|
-
"+9876543210"
|
|
78
|
-
];
|
|
79
|
-
const message = "Hello world!";
|
|
80
|
-
|
|
81
|
-
const smsSenderService = new SMSSenderService();
|
|
82
|
-
await smsSenderService.send(phones, message);
|
|
83
|
-
```
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const errors_1 = require("../../errors");
|
|
4
3
|
const constants_1 = require("../../utils/constants");
|
|
5
4
|
const client_sns_1 = require("@aws-sdk/client-sns");
|
|
5
|
+
const credential_provider_node_1 = require("@aws-sdk/credential-provider-node");
|
|
6
6
|
class AwsSMSSenderClient {
|
|
7
7
|
constructor() {
|
|
8
8
|
this.sendOne = async (phone, message) => {
|
|
@@ -16,14 +16,18 @@ class AwsSMSSenderClient {
|
|
|
16
16
|
const secretAccessKey = constants_1.PASSWORD || process.env.AWS_SECRET_ACCESS_KEY;
|
|
17
17
|
const region = constants_1.REGION || process.env.AWS_REGION;
|
|
18
18
|
if (!(accessKeyId && secretAccessKey))
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
this.client = new client_sns_1.SNSClient({
|
|
20
|
+
region: region,
|
|
21
|
+
credentials: (0, credential_provider_node_1.defaultProvider)(),
|
|
22
|
+
});
|
|
23
|
+
else
|
|
24
|
+
this.client = new client_sns_1.SNSClient({
|
|
25
|
+
region: region,
|
|
26
|
+
credentials: {
|
|
27
|
+
accessKeyId: accessKeyId,
|
|
28
|
+
secretAccessKey: secretAccessKey,
|
|
29
|
+
},
|
|
30
|
+
});
|
|
27
31
|
}
|
|
28
32
|
async send(phones = [], message) {
|
|
29
33
|
const result = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"awsSmsSender.client.js","sourceRoot":"","sources":["../../../../src/services/clients/awsSmsSender.client.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"awsSmsSender.client.js","sourceRoot":"","sources":["../../../../src/services/clients/awsSmsSender.client.ts"],"names":[],"mappings":";;AAGA,qDAAmE;AACnE,oDAI6B;AAC7B,gFAAoE;AAEpE,MAAqB,kBAAkB;IAEnC;QAyCQ,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;QAlDE,MAAM,WAAW,GAAG,oBAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAC9D,MAAM,eAAe,GAAG,oBAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;QACtE,MAAM,MAAM,GAAG,kBAAM,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;QAChD,IAAI,CAAC,CAAC,WAAW,IAAI,eAAe,CAAC;YACjC,IAAI,CAAC,MAAM,GAAG,IAAI,sBAAS,CAAC;gBACxB,MAAM,EAAE,MAAM;gBACd,WAAW,EAAE,IAAA,0CAAe,GAAE;aACjC,CAAC,CAAC;;YAEH,IAAI,CAAC,MAAM,GAAG,IAAI,sBAAS,CAAC;gBACxB,MAAM,EAAE,MAAM;gBACd,WAAW,EAAE;oBACT,WAAW,EAAE,WAAW;oBACxB,eAAe,EAAE,eAAe;iBACnC;aACJ,CAAC,CAAC;IACX,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;AAtDD,qCAsDC"}
|
|
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
15
15
|
}) : function(o, v) {
|
|
16
16
|
o["default"] = v;
|
|
17
17
|
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
25
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
36
|
const constants_1 = require("../../utils/constants");
|
|
27
37
|
const errors_1 = require("../../errors");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vonageSmsSender.client.js","sourceRoot":"","sources":["../../../../src/services/clients/vonageSmsSender.client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vonageSmsSender.client.js","sourceRoot":"","sources":["../../../../src/services/clients/vonageSmsSender.client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,qDAAiE;AACjE,yCAA2D;AAI3D,MAAqB,qBAAqB;IAEtC;QAiDQ,YAAO,GAAG,KAAK,EACnB,KAAa,EACb,OAAe,EACK,EAAE;YACtB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;gBACnB,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,gBAAc;aACvB,CAAC,CAAC;QACP,CAAC,CAAC;QA1DE,IAAI,CAAC,CAAC,oBAAQ,IAAI,oBAAQ,IAAI,gBAAI,CAAC;YAC/B,MAAM,IAAI,oCAA2B,EAAE,CAAC;IAChD,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,MAAgB,EAAE,OAAe;QAC/C,MAAM,MAAM,GAAe;YACvB,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,EAAE;SACb,CAAC;QAEF,MAAM,OAAO,CAAC,GAAG,CACb,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACjB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;;YACvC,IACI,MAAA,IAAI,CAAC,QAAQ,0CAAE,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,GAAG,CAAC,EAC1D,CAAC;gBACC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;oBACf,KAAK;oBACL,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;iBACpC,CAAC,CAAC;YACP,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YAChC,CAAC;QACL,CAAC,CAAC,CACL,CACJ,CAAC;QAEF,OAAO,MAAM,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,SAAS;;QACnB,IAAI,CAAC,aAAa;YACd,MAAA,IAAI,CAAC,aAAa,mCAClB,CAAC,KAAK,IAAI,EAAE;gBACR,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;sEACtC,oBAAoB;sEACpB,cAAc;iBACxB,CAAC,CAAC;gBACH,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC;oBACxB,MAAM,EAAE,oBAAkB;oBAC1B,SAAS,EAAE,oBAAkB;iBAChC,CAAC,CAAC;gBACH,OAAO,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC;YAClC,CAAC,CAAC,EAAE,CAAC;QAET,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;CAaJ;AA9DD,wCA8DC"}
|
|
@@ -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;IAEM,MAAM,CAAC,KAAK,CAAC,WAAW;QAC3B,IAAI;
|
|
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,CAAC;YACD,MAAM,2CAAgB,CAAC,YAAY,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;YAC1D,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;CACJ;AApBD,4CAoBC"}
|
|
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
15
15
|
}) : function(o, v) {
|
|
16
16
|
o["default"] = v;
|
|
17
17
|
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
25
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
36
|
exports.SMSSenderFactory = void 0;
|
|
27
37
|
const errors_1 = require("../errors");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smsSenderFactory.service.js","sourceRoot":"","sources":["../../../src/services/smsSenderFactory.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"smsSenderFactory.service.js","sourceRoot":"","sources":["../../../src/services/smsSenderFactory.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sCAAiD;AAGjD,kDAAkD;AAClD,kEAA8E;AAE9E,MAAa,gBAAgB;IAYzB,MAAM,CAAC,KAAK,CAAC,YAAY;;QACrB,MAAM,QAAQ,GACV,MAAA,IAAA,kDAA+B,GAAE,mCAAI,wBAAY,aAAZ,wBAAY,uBAAZ,wBAAY,CAAE,WAAW,EAAE,CAAC;QACrE,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,6BAAoB,EAAE,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;YAAE,MAAM,IAAI,6BAAoB,EAAE,CAAC;QAEtE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtE,IAAI,CAAC,UAAU,GAAG,MAAA,IAAI,CAAC,UAAU,mCAAI,IAAI,SAAS,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;;AArBL,4CAsBC;AArBkB,gCAAe,GAG1B;IACA,MAAM,EAAE,GAAG,EAAE,mDAAQ,kCAAkC,GAAC;IACxD,GAAG,EAAE,GAAG,EAAE,mDAAQ,+BAA+B,GAAC;IAClD,KAAK,EAAE,GAAG,EAAE,mDAAQ,iCAAiC,GAAC;IACtD,MAAM,EAAE,GAAG,EAAE,mDAAQ,kCAAkC,GAAC;CAC3D,CAAC;AACa,2BAAU,GAAsB,IAAI,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"root":["../../src/index.ts"],"version":"5.9.3"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { __name, __publicField, USERNAME, PASSWORD, REGION
|
|
1
|
+
import { __name, __publicField, USERNAME, PASSWORD, REGION } from './chunk-NRKEOLLT.mjs';
|
|
2
2
|
import { PublishCommand, SNSClient } from '@aws-sdk/client-sns';
|
|
3
|
+
import { defaultProvider } from '@aws-sdk/credential-provider-node';
|
|
3
4
|
|
|
4
5
|
var _AwsSMSSenderClient = class _AwsSMSSenderClient {
|
|
5
6
|
constructor() {
|
|
@@ -14,8 +15,11 @@ var _AwsSMSSenderClient = class _AwsSMSSenderClient {
|
|
|
14
15
|
const accessKeyId = USERNAME || process.env.AWS_ACCESS_KEY_ID;
|
|
15
16
|
const secretAccessKey = PASSWORD || process.env.AWS_SECRET_ACCESS_KEY;
|
|
16
17
|
const region = REGION || process.env.AWS_REGION;
|
|
17
|
-
if (!(accessKeyId && secretAccessKey))
|
|
18
|
-
|
|
18
|
+
if (!(accessKeyId && secretAccessKey)) this.client = new SNSClient({
|
|
19
|
+
region,
|
|
20
|
+
credentials: defaultProvider()
|
|
21
|
+
});
|
|
22
|
+
else this.client = new SNSClient({
|
|
19
23
|
region,
|
|
20
24
|
credentials: {
|
|
21
25
|
accessKeyId,
|
|
@@ -41,5 +45,5 @@ __name(_AwsSMSSenderClient, "AwsSMSSenderClient");
|
|
|
41
45
|
var AwsSMSSenderClient = _AwsSMSSenderClient;
|
|
42
46
|
|
|
43
47
|
export { AwsSMSSenderClient as default };
|
|
44
|
-
//# sourceMappingURL=awsSmsSender.client-
|
|
45
|
-
//# sourceMappingURL=awsSmsSender.client-
|
|
48
|
+
//# sourceMappingURL=awsSmsSender.client-3SLRZJIV.mjs.map
|
|
49
|
+
//# sourceMappingURL=awsSmsSender.client-3SLRZJIV.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/services/clients/awsSmsSender.client.ts"],"names":["AwsSMSSenderClient","constructor","client","sendOne","phone","message","command","PublishCommand","Message","PhoneNumber","send","accessKeyId","USERNAME","process","env","AWS_ACCESS_KEY_ID","secretAccessKey","PASSWORD","AWS_SECRET_ACCESS_KEY","region","REGION","AWS_REGION","SNSClient","credentials","defaultProvider","phones","result","sent","failed","Promise","all","map","then","push","catch","error"],"mappings":";;;;AAWA,IAAqBA,mBAAAA,GAArB,MAAqBA,mBAAAA,CAAAA;EAEjBC,WAAAA,GAAc;AADNC,IAAAA,aAAAA,CAAAA,IAAAA,EAAAA,QAAAA,CAAAA;AA0CAC,IAAAA,aAAAA,CAAAA,IAAAA,EAAAA,SAAAA,kBAAU,MAAA,CAAA,OACdC,OACAC,OAAAA,KAAAA;AAEA,MAAA,MAAMC,OAAAA,GAAU,IAAIC,cAAAA,CAAe;QAC/BC,OAAAA,EAASH,OAAAA;QACTI,WAAAA,EAAaL;OACjB,CAAA;AAEA,MAAA,OAAO,MAAM,IAAA,CAAKF,MAAAA,CAAOQ,IAAAA,CAAKJ,OAAAA,CAAAA;IAClC,CAAA,EAVkB,SAAA,CAAA,CAAA;AAxCd,IAAA,MAAMK,WAAAA,GAAcC,QAAAA,IAAYC,OAAAA,CAAQC,GAAAA,CAAIC,iBAAAA;AAC5C,IAAA,MAAMC,eAAAA,GAAkBC,QAAAA,IAAYJ,OAAAA,CAAQC,GAAAA,CAAII,qBAAAA;AAChD,IAAA,MAAMC,MAAAA,GAASC,MAAAA,IAAUP,OAAAA,CAAQC,GAAAA,CAAIO,UAAAA;AACrC,IAAA,IAAI,EAAEV,WAAAA,IAAeK,eAAAA,CAAAA,EACjB,IAAA,CAAKd,MAAAA,GAAS,IAAIoB,SAAAA,CAAU;AACxBH,MAAAA,MAAAA;AACAI,MAAAA,WAAAA,EAAaC,eAAAA;KACjB,CAAA;SAEA,IAAA,CAAKtB,MAAAA,GAAS,IAAIoB,SAAAA,CAAU;AACxBH,MAAAA,MAAAA;MACAI,WAAAA,EAAa;AACTZ,QAAAA,WAAAA;AACAK,QAAAA;AACJ;KACJ,CAAA;AACR,EAAA;AAEA,EAAA,MAAaN,IAAAA,CACTe,MAAAA,GAAmB,EAAA,EACnBpB,OAAAA,EACmB;AACnB,IAAA,MAAMqB,MAAAA,GAAqB;AACvBC,MAAAA,IAAAA,EAAM,EAAA;AACNC,MAAAA,MAAAA,EAAQ;AACZ,KAAA;AAEA,IAAA,MAAMC,OAAAA,CAAQC,GAAAA,CACVL,MAAAA,CAAOM,GAAAA,CAAI,CAAC3B,KAAAA,KACR,IAAA,CAAKD,OAAAA,CAAQC,KAAAA,EAAOC,OAAAA,CAAAA,CACf2B,IAAAA,CAAK,MAAMN,MAAAA,CAAOC,KAAKM,IAAAA,CAAK;AAAE7B,MAAAA;AAAM,KAAA,CAAA,CAAA,CACpC8B,KAAAA,CAAM,CAACC,KAAAA,KACJT,MAAAA,CAAOE,OAAOK,IAAAA,CAAK;AAAE7B,MAAAA,KAAAA;AAAO+B,MAAAA,KAAAA,EAAOA,KAAAA,CAAM9B;KAAQ,CAAA,CAAA,CAAA,CAAA;AAKjE,IAAA,OAAOqB,MAAAA;AACX,EAAA;AAaJ,CAAA;AAtDqB1B,MAAAA,CAAAA,mBAAAA,EAAAA,oBAAAA,CAAAA;AAArB,IAAqBA,kBAAAA,GAArB","file":"awsSmsSender.client-3SLRZJIV.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';\nimport { defaultProvider } from '@aws-sdk/credential-provider-node';\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 this.client = new SNSClient({\n region: region,\n credentials: defaultProvider(),\n });\n else\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,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NotProvidedCredentialsError } from './chunk-4QVZYBYH.mjs';
|
|
2
|
+
import { __name, __publicField, USERNAME, PASSWORD, FROM } from './chunk-NRKEOLLT.mjs';
|
|
2
3
|
import { SmsClient } from '@azure/communication-sms';
|
|
3
4
|
|
|
4
5
|
var _AzureSMSSenderClient = class _AzureSMSSenderClient {
|
|
@@ -35,5 +36,5 @@ __name(_AzureSMSSenderClient, "AzureSMSSenderClient");
|
|
|
35
36
|
var AzureSMSSenderClient = _AzureSMSSenderClient;
|
|
36
37
|
|
|
37
38
|
export { AzureSMSSenderClient as default };
|
|
38
|
-
//# sourceMappingURL=azureSmsSender.client-
|
|
39
|
-
//# sourceMappingURL=azureSmsSender.client-
|
|
39
|
+
//# sourceMappingURL=azureSmsSender.client-DA4OPYSB.mjs.map
|
|
40
|
+
//# sourceMappingURL=azureSmsSender.client-DA4OPYSB.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/services/clients/azureSmsSender.client.ts"],"names":["AzureSMSSenderClient","constructor","client","USERNAME","PASSWORD","FROM","process","env","COMMUNICATION_SERVICES_CONNECTION_STRING","NotProvidedCredentialsError","connectionString","SmsClient","send","phones","message","result","sent","failed","smsResults","from","to","forEach","smsResult","errorMessage","push","phone","error"],"mappings":";;;;AAMA,IAAqBA,qBAAAA,GAArB,MAAqBA,qBAAAA,CAAAA;EAEjBC,WAAAA,GAAc;AADdC,IAAAA,aAAAA,CAAAA,IAAAA,EAAAA,QAAAA,CAAAA;AAPJ,IAAA,IAAA,EAAA;AASQ,IAAA,IACI,EAAEC,QAAAA,IAAYC,QAAAA,IAAYC,IAAAA,CAAAA,IAC1B,CAACC,QAAQC,GAAAA,CAAIC,wCAAAA,EAEb,MAAM,IAAIC,2BAAAA,EAAAA;AACd,IAAA,MAAMC,gBAAAA,GAAAA,CACFJ,aAAQC,GAAAA,CAAIC,wCAAAA,KAAZF,YACA,CAAA,iBAAA,EAAoBH,QAAAA,uCAA+CC,QAAAA,CAAAA,CAAAA;AACvE,IAAA,IAAA,CAAKF,MAAAA,GAAS,IAAIS,SAAAA,CAAUD,gBAAAA,CAAAA;AAChC,EAAA;EAEA,MAAaE,IAAAA,CAAKC,QAAkBC,OAAAA,EAAsC;AACtE,IAAA,MAAMC,MAAAA,GAAqB;AACvBC,MAAAA,IAAAA,EAAM,EAAA;AACNC,MAAAA,MAAAA,EAAQ;AACZ,KAAA;AACA,IAAA,MAAMC,UAAAA,GAAa,MAAM,IAAA,CAAKhB,MAAAA,CAAOU,IAAAA,CAAK;MACtCO,IAAAA,EAAMd,IAAAA;MACNe,EAAAA,EAAIP,MAAAA;AACJC,MAAAA;KACJ,CAAA;AAEAI,IAAAA,UAAAA,CAAWG,OAAAA,CAAQ,CAACC,SAAAA,KAAAA;AAChB,MAAA,IAAIA,SAAAA,CAAUC,YAAAA,EACVR,MAAAA,CAAOE,MAAAA,CAAOO,IAAAA,CAAK;AACfC,QAAAA,KAAAA,EAAOH,SAAAA,CAAUF,EAAAA;AACjBM,QAAAA,KAAAA,EAAOJ,SAAAA,CAAUC;OACrB,CAAA;AACCR,WAAAA,MAAAA,CAAOC,KAAKQ,IAAAA,CAAK;AAAEC,QAAAA,KAAAA,EAAOH,SAAAA,CAAUF;OAAG,CAAA;IAChD,CAAA,CAAA;AAEA,IAAA,OAAOL,MAAAA;AACX,EAAA;AACJ,CAAA;AApCqBf,MAAAA,CAAAA,qBAAAA,EAAAA,sBAAAA,CAAAA;AAArB,IAAqBA,oBAAAA,GAArB","file":"azureSmsSender.client-DA4OPYSB.mjs","sourcesContent":["import { NotProvidedCredentialsError } from '../../errors';\nimport { ISMSSender } from '../../interfaces';\nimport { SendResult } from '../../types';\nimport { USERNAME, PASSWORD, FROM } from '../../utils/constants';\nimport { SmsClient } from '@azure/communication-sms';\n\nexport default class AzureSMSSenderClient implements ISMSSender {\n client: SmsClient;\n constructor() {\n if (\n !(USERNAME && PASSWORD && FROM) &&\n !process.env.COMMUNICATION_SERVICES_CONNECTION_STRING\n )\n throw new NotProvidedCredentialsError();\n const connectionString =\n process.env.COMMUNICATION_SERVICES_CONNECTION_STRING ??\n `endpoint=https://${USERNAME}.communication.azure.com/;accesskey=${PASSWORD}`;\n this.client = new SmsClient(connectionString);\n }\n\n public async send(phones: string[], message: string): Promise<SendResult> {\n const result: SendResult = {\n sent: [],\n failed: [],\n };\n const smsResults = await this.client.send({\n from: FROM as string,\n to: phones,\n message: message,\n });\n\n smsResults.forEach((smsResult) => {\n if (smsResult.errorMessage)\n result.failed.push({\n phone: smsResult.to,\n error: smsResult.errorMessage,\n });\n else result.sent.push({ phone: smsResult.to });\n });\n\n return result;\n }\n}\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { __name } from './chunk-NRKEOLLT.mjs';
|
|
2
|
+
|
|
3
|
+
// src/errors/notProvidedCredentials.error.ts
|
|
4
|
+
var _NotProvidedCredentialsError = class _NotProvidedCredentialsError extends Error {
|
|
5
|
+
constructor() {
|
|
6
|
+
super("SMS sender credentials not provided.");
|
|
7
|
+
this.name = "NotProvidedCredentialsError";
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
__name(_NotProvidedCredentialsError, "NotProvidedCredentialsError");
|
|
11
|
+
var NotProvidedCredentialsError = _NotProvidedCredentialsError;
|
|
12
|
+
|
|
13
|
+
// src/errors/unknownProvider.error.ts
|
|
14
|
+
var _UnknownProviderError = class _UnknownProviderError extends Error {
|
|
15
|
+
constructor() {
|
|
16
|
+
super("Unknown provider. Set PROVIDER env variable");
|
|
17
|
+
this.name = "UnknownProviderError";
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
__name(_UnknownProviderError, "UnknownProviderError");
|
|
21
|
+
var UnknownProviderError = _UnknownProviderError;
|
|
22
|
+
|
|
23
|
+
export { NotProvidedCredentialsError, UnknownProviderError };
|
|
24
|
+
//# sourceMappingURL=chunk-4QVZYBYH.mjs.map
|
|
25
|
+
//# sourceMappingURL=chunk-4QVZYBYH.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/errors/notProvidedCredentials.error.ts","../../src/errors/unknownProvider.error.ts"],"names":["NotProvidedCredentialsError","Error","constructor","name","UnknownProviderError"],"mappings":";;;AAAO,IAAMA,4BAAAA,GAAN,MAAMA,4BAAAA,SAAoCC,KAAAA,CAAAA;EAC7CC,WAAAA,GAAc;AACV,IAAA,KAAA,CAAM,sCAAA,CAAA;AACN,IAAA,IAAA,CAAKC,IAAAA,GAAO,6BAAA;AAChB,EAAA;AACJ,CAAA;AALiDF,MAAAA,CAAAA,4BAAAA,EAAAA,6BAAAA,CAAAA;AAA1C,IAAMD,2BAAAA,GAAN;;;ACAA,IAAMI,qBAAAA,GAAN,MAAMA,qBAAAA,SAA6BH,KAAAA,CAAAA;EACtCC,WAAAA,GAAc;AACV,IAAA,KAAA,CAAM,6CAAA,CAAA;AACN,IAAA,IAAA,CAAKC,IAAAA,GAAO,sBAAA;AAChB,EAAA;AACJ,CAAA;AAL0CF,MAAAA,CAAAA,qBAAAA,EAAAA,sBAAAA,CAAAA;AAAnC,IAAMG,oBAAAA,GAAN","file":"chunk-4QVZYBYH.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"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
4
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
|
|
6
|
+
// src/utils/constants.ts
|
|
7
|
+
var SMS_PROVIDER = process.env.SMS_PROVIDER;
|
|
8
|
+
var PLATFORM_CLOUD = process.env.PLATFORM_CLOUD;
|
|
9
|
+
var USERNAME = process.env.SMS_PROVIDER_USERNAME;
|
|
10
|
+
var PASSWORD = process.env.SMS_PROVIDER_PASSWORD;
|
|
11
|
+
var FROM = process.env.SMS_PROVIDER_FROM_NUMBER;
|
|
12
|
+
var REGION = process.env.SMS_PROVIDER_REGION;
|
|
13
|
+
|
|
14
|
+
export { FROM, PASSWORD, PLATFORM_CLOUD, REGION, SMS_PROVIDER, USERNAME, __name, __publicField };
|
|
15
|
+
//# sourceMappingURL=chunk-NRKEOLLT.mjs.map
|
|
16
|
+
//# sourceMappingURL=chunk-NRKEOLLT.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/constants.ts"],"names":["SMS_PROVIDER","process","env","PLATFORM_CLOUD","USERNAME","SMS_PROVIDER_USERNAME","PASSWORD","SMS_PROVIDER_PASSWORD","FROM","SMS_PROVIDER_FROM_NUMBER","REGION","SMS_PROVIDER_REGION"],"mappings":";;;;;;AAAO,IAAMA,YAAAA,GAAeC,QAAQC,GAAAA,CAAIF;AACjC,IAAMG,cAAAA,GAAiBF,QAAQC,GAAAA,CAAIC;AAEnC,IAAMC,QAAAA,GAAWH,QAAQC,GAAAA,CAAIG;AAC7B,IAAMC,QAAAA,GAAWL,QAAQC,GAAAA,CAAIK;AAC7B,IAAMC,IAAAA,GAAOP,QAAQC,GAAAA,CAAIO;AACzB,IAAMC,MAAAA,GAAST,QAAQC,GAAAA,CAAIS","file":"chunk-NRKEOLLT.mjs","sourcesContent":["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"]}
|
package/dist/esm/index.mjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { UnknownProviderError } from './chunk-4QVZYBYH.mjs';
|
|
2
|
+
import { __name, __publicField, SMS_PROVIDER, PLATFORM_CLOUD } from './chunk-NRKEOLLT.mjs';
|
|
2
3
|
|
|
3
4
|
// src/mappers/qrveyEnvs.mapper.ts
|
|
4
5
|
var getSMSProviderFromPlatformCloud = /* @__PURE__ */ __name(() => {
|
|
@@ -24,10 +25,10 @@ var _SMSSenderFactory = class _SMSSenderFactory {
|
|
|
24
25
|
};
|
|
25
26
|
__name(_SMSSenderFactory, "SMSSenderFactory");
|
|
26
27
|
__publicField(_SMSSenderFactory, "providerModules", {
|
|
27
|
-
twilio: /* @__PURE__ */ __name(() => import('./twilioSmsSender.client-
|
|
28
|
-
aws: /* @__PURE__ */ __name(() => import('./awsSmsSender.client-
|
|
29
|
-
azure: /* @__PURE__ */ __name(() => import('./azureSmsSender.client-
|
|
30
|
-
vonage: /* @__PURE__ */ __name(() => import('./vonageSmsSender.client-
|
|
28
|
+
twilio: /* @__PURE__ */ __name(() => import('./twilioSmsSender.client-TDXGCJPW.mjs'), "twilio"),
|
|
29
|
+
aws: /* @__PURE__ */ __name(() => import('./awsSmsSender.client-3SLRZJIV.mjs'), "aws"),
|
|
30
|
+
azure: /* @__PURE__ */ __name(() => import('./azureSmsSender.client-DA4OPYSB.mjs'), "azure"),
|
|
31
|
+
vonage: /* @__PURE__ */ __name(() => import('./vonageSmsSender.client-MM7LS23Y.mjs'), "vonage")
|
|
31
32
|
});
|
|
32
33
|
__publicField(_SMSSenderFactory, "_smsSender", null);
|
|
33
34
|
var SMSSenderFactory = _SMSSenderFactory;
|
|
@@ -48,6 +49,7 @@ var _SMSSenderService = class _SMSSenderService {
|
|
|
48
49
|
await SMSSenderFactory.getSMSSender();
|
|
49
50
|
return true;
|
|
50
51
|
} catch (error) {
|
|
52
|
+
console.error("Error checking SMS sender status:", error);
|
|
51
53
|
return false;
|
|
52
54
|
}
|
|
53
55
|
}
|
package/dist/esm/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/mappers/qrveyEnvs.mapper.ts","../../src/services/smsSenderFactory.service.ts","../../src/services/smsSender.service.ts"],"names":["getSMSProviderFromPlatformCloud","platformCloudDictionary","AWS","AZURE","PLATFORM_CLOUD","undefined","SMSSenderFactory","getSMSSender","provider","SMS_PROVIDER","toLowerCase","UnknownProviderError","providerModules","default","SMSSender","_smsSender","twilio","aws","azure","vonage","SMSSenderService","send","phones","message","checkStatus","error"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/mappers/qrveyEnvs.mapper.ts","../../src/services/smsSenderFactory.service.ts","../../src/services/smsSender.service.ts"],"names":["getSMSProviderFromPlatformCloud","platformCloudDictionary","AWS","AZURE","PLATFORM_CLOUD","undefined","SMSSenderFactory","getSMSSender","provider","SMS_PROVIDER","toLowerCase","UnknownProviderError","providerModules","default","SMSSender","_smsSender","twilio","aws","azure","vonage","SMSSenderService","send","phones","message","checkStatus","error","console"],"mappings":";;;;AAEO,IAAMA,kDAAkC,MAAA,CAAA,MAAA;AAF/C,EAAA,IAAA,EAAA,EAAA,EAAA;AAGI,EAAA,MAAMC,uBAAAA,GAAkD;IACpDC,GAAAA,EAAK,KAAA;IACLC,KAAAA,EAAO;AACX,GAAA;AAEA,EAAA,OAAA,CAAOF,EAAAA,GAAAA,uBAAAA,CAAAA,CAAwBG,EAAAA,GAAAA,cAAAA,KAAAA,IAAAA,GAAAA,EAAAA,GAAkB,EAAA,CAAA,KAA1CH,IAAAA,GAAAA,EAAAA,GAAiDI,MAAAA;AAC5D,CAAA,EAP+C,iCAAA,CAAA;;;ACIxC,IAAMC,iBAAAA,GAAN,MAAMA,iBAAAA,CAAAA;AAYT,EAAA,aAAaC,YAAAA,GAAoC;AAlBrD,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAmBQ,IAAA,MAAMC,QAAAA,GAAAA,CACFR,EAAAA,GAAAA,+BAAAA,EAAAA,KAAAA,IAAAA,GAAAA,EAAAA,GAAAA,CAAqCS,EAAAA,GAAAA,YAAAA,KAAAA,IAAAA,GAAAA,MAAAA,GAAAA,EAAAA,CAAcC,WAAAA,EAAAA;AACvD,IAAA,IAAI,CAACF,QAAAA,EAAU,MAAM,IAAIG,oBAAAA,EAAAA;AACzB,IAAA,IAAI,CAAC,IAAA,CAAKC,eAAAA,CAAgBJ,QAAAA,CAAAA,EAAW,MAAM,IAAIG,oBAAAA,EAAAA;AAE/C,IAAA,MAAM,EAAEE,SAASC,SAAAA,EAAS,GAAK,MAAM,IAAA,CAAKF,eAAAA,CAAgBJ,QAAAA,CAAAA,EAAS;AACnE,IAAA,IAAA,CAAKO,UAAAA,GAAAA,CAAa,EAAA,GAAA,IAAA,CAAKA,UAAAA,KAAL,IAAA,GAAA,EAAA,GAAmB,IAAID,SAAAA,EAAAA;AACzC,IAAA,OAAO,IAAA,CAAKC,UAAAA;AAChB,EAAA;AACJ,CAAA;AAtBaT,MAAAA,CAAAA,iBAAAA,EAAAA,kBAAAA,CAAAA;AACT,aAAA,CADSA,mBACMM,iBAAAA,EAGX;EACAI,MAAAA,kBAAQ,MAAA,CAAA,MAAM,OAAO,uCAAA,CAAA,EAAb,QAAA,CAAA;EACRC,GAAAA,kBAAK,MAAA,CAAA,MAAM,OAAO,oCAAA,CAAA,EAAb,KAAA,CAAA;EACLC,KAAAA,kBAAO,MAAA,CAAA,MAAM,OAAO,sCAAA,CAAA,EAAb,OAAA,CAAA;EACPC,MAAAA,kBAAQ,MAAA,CAAA,MAAM,OAAO,uCAAA,CAAA,EAAb,QAAA;AACZ,CAAA,CAAA;AACA,aAAA,CAVSb,mBAUMS,YAAAA,EAAgC,IAAA,CAAA;AAV5C,IAAMT,gBAAAA,GAAN,iBAAA;;;ACHA,IAAMc,iBAAAA,GAAN,MAAMA,iBAAAA,CAAAA;;;;;;;EAOT,MAAaC,IAAAA,CAAKC,QAAkBC,OAAAA,EAAsC;AACtE,IAAA,OAAA,CAAQ,MAAMjB,gBAAAA,CAAiBC,YAAAA,EAAY,EAAIc,IAAAA,CAAKC,QAAQC,OAAAA,CAAAA;AAChE,EAAA;AAEA,EAAA,aAAoBC,WAAAA,GAAgC;AAChD,IAAA,IAAI;AACA,MAAA,MAAMlB,iBAAiBC,YAAAA,EAAY;AACnC,MAAA,OAAO,IAAA;AACX,IAAA,CAAA,CAAA,OAASkB,KAAAA,EAAO;AACZC,MAAAA,OAAAA,CAAQD,KAAAA,CAAM,qCAAqCA,KAAAA,CAAAA;AACnD,MAAA,OAAO,KAAA;AACX,IAAA;AACJ,EAAA;AACJ,CAAA;AApBaL,MAAAA,CAAAA,iBAAAA,EAAAA,kBAAAA,CAAAA;AAAN,IAAMA,gBAAAA,GAAN","file":"index.mjs","sourcesContent":["import { PLATFORM_CLOUD } from '../utils/constants';\n\nexport const getSMSProviderFromPlatformCloud = () => {\n const platformCloudDictionary: Record<string, string> = {\n AWS: 'aws',\n AZURE: 'azure',\n };\n\n return platformCloudDictionary[PLATFORM_CLOUD ?? ''] ?? undefined;\n};\n","import { UnknownProviderError } from '../errors';\nimport { ISMSSender } from '../interfaces';\nimport { SMSProviderModule } from '../types';\nimport { SMS_PROVIDER } from '../utils/constants';\nimport { getSMSProviderFromPlatformCloud } from '../mappers/qrveyEnvs.mapper';\n\nexport class SMSSenderFactory {\n private static providerModules: Record<\n string,\n () => Promise<SMSProviderModule>\n > = {\n twilio: () => import('./clients/twilioSmsSender.client'),\n aws: () => import('./clients/awsSmsSender.client'),\n azure: () => import('./clients/azureSmsSender.client'),\n vonage: () => import('./clients/vonageSmsSender.client'),\n };\n private static _smsSender: ISMSSender | null = null;\n\n static async getSMSSender(): Promise<ISMSSender> {\n const provider =\n getSMSProviderFromPlatformCloud() ?? SMS_PROVIDER?.toLowerCase();\n if (!provider) throw new UnknownProviderError();\n if (!this.providerModules[provider]) throw new UnknownProviderError();\n\n const { default: SMSSender } = await this.providerModules[provider]();\n this._smsSender = this._smsSender ?? new SMSSender();\n return this._smsSender;\n }\n}\n","import { SendResult } from '../types';\nimport { SMSSenderFactory } from './smsSenderFactory.service';\n\nexport class SMSSenderService {\n /**\n * Send a message to one or more phones.\n * @param phones - phone numbers to send to\n * @param message - message to send\n * @returns {Promise<SendResult>} Send result.\n */\n public async send(phones: string[], message: string): Promise<SendResult> {\n return (await SMSSenderFactory.getSMSSender()).send(phones, message);\n }\n\n public static async checkStatus(): Promise<boolean> {\n try {\n await SMSSenderFactory.getSMSSender();\n return true;\n } catch (error) {\n console.error('Error checking SMS sender status:', error);\n return false;\n }\n }\n}\n"]}
|
package/dist/esm/{twilioSmsSender.client-J4FEYTVH.mjs → twilioSmsSender.client-TDXGCJPW.mjs}
RENAMED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NotProvidedCredentialsError } from './chunk-4QVZYBYH.mjs';
|
|
2
|
+
import { __name, __publicField, FROM, USERNAME, PASSWORD } from './chunk-NRKEOLLT.mjs';
|
|
2
3
|
import { Twilio } from 'twilio';
|
|
3
4
|
|
|
4
5
|
var _TwilioSMSSenderClient = class _TwilioSMSSenderClient {
|
|
@@ -30,5 +31,5 @@ __name(_TwilioSMSSenderClient, "TwilioSMSSenderClient");
|
|
|
30
31
|
var TwilioSMSSenderClient = _TwilioSMSSenderClient;
|
|
31
32
|
|
|
32
33
|
export { TwilioSMSSenderClient as default };
|
|
33
|
-
//# sourceMappingURL=twilioSmsSender.client-
|
|
34
|
-
//# sourceMappingURL=twilioSmsSender.client-
|
|
34
|
+
//# sourceMappingURL=twilioSmsSender.client-TDXGCJPW.mjs.map
|
|
35
|
+
//# sourceMappingURL=twilioSmsSender.client-TDXGCJPW.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/services/clients/twilioSmsSender.client.ts"],"names":["TwilioSMSSenderClient","constructor","client","sendOne","phone","message","messages","create","from","FROM","to","body","USERNAME","PASSWORD","Twilio","NotProvidedCredentialsError","send","phones","result","sent","failed","Promise","all","map","then","push","catch","error"],"mappings":";;;;AAOA,IAAqBA,sBAAAA,GAArB,MAAqBA,sBAAAA,CAAAA;EAEjBC,WAAAA,GAAc;AADNC,IAAAA,aAAAA,CAAAA,IAAAA,EAAAA,QAAAA,CAAAA;AA6BAC,IAAAA,aAAAA,CAAAA,IAAAA,EAAAA,SAAAA,0BACJC,KAAAA,EACAC,OAAAA,KAEA,IAAA,CAAKH,MAAAA,CAAOI,SAASC,MAAAA,CAAO;MACxBC,IAAAA,EAAMC,IAAAA;MACNC,EAAAA,EAAIN,KAAAA;MACJO,IAAAA,EAAMN;AACV,KAAA,CAAA,EARc,SAAA,CAAA,CAAA;AA3Bd,IAAA,IAAIO,QAAAA,IAAYC,YAAYJ,IAAAA,EACxB,IAAA,CAAKP,SAAS,IAAIY,MAAAA,CAAOF,UAAUC,QAAAA,CAAAA;AAClC,SAAA,MAAM,IAAIE,2BAAAA,EAAAA;AACnB,EAAA;AAEA,EAAA,MAAaC,IAAAA,CACTC,MAAAA,GAAmB,EAAA,EACnBZ,OAAAA,EACmB;AACnB,IAAA,MAAMa,MAAAA,GAAqB;AACvBC,MAAAA,IAAAA,EAAM,EAAA;AACNC,MAAAA,MAAAA,EAAQ;AACZ,KAAA;AAEA,IAAA,MAAMC,OAAAA,CAAQC,GAAAA,CACVL,MAAAA,CAAOM,GAAAA,CAAI,CAACnB,KAAAA,KACR,IAAA,CAAKD,OAAAA,CAAQC,KAAAA,EAAOC,OAAAA,CAAAA,CACfmB,IAAAA,CAAK,MAAMN,MAAAA,CAAOC,KAAKM,IAAAA,CAAK;AAAErB,MAAAA;AAAM,KAAA,CAAA,CAAA,CACpCsB,KAAAA,CAAM,CAACC,KAAAA,KACJT,MAAAA,CAAOE,OAAOK,IAAAA,CAAK;AAAErB,MAAAA,KAAAA;AAAOuB,MAAAA,KAAAA,EAAOA,KAAAA,CAAMtB;KAAQ,CAAA,CAAA,CAAA,CAAA;AAKjE,IAAA,OAAOa,MAAAA;AACX,EAAA;AAWJ,CAAA;AAvCqBlB,MAAAA,CAAAA,sBAAAA,EAAAA,uBAAAA,CAAAA;AAArB,IAAqBA,qBAAAA,GAArB","file":"twilioSmsSender.client-TDXGCJPW.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"]}
|
package/dist/esm/{vonageSmsSender.client-7KP2UCMI.mjs → vonageSmsSender.client-MM7LS23Y.mjs}
RENAMED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NotProvidedCredentialsError } from './chunk-4QVZYBYH.mjs';
|
|
2
|
+
import { __name, __publicField, FROM, USERNAME, PASSWORD } from './chunk-NRKEOLLT.mjs';
|
|
2
3
|
|
|
3
4
|
// src/services/clients/vonageSmsSender.client.ts
|
|
4
5
|
var _VonageSMSSenderClient = class _VonageSMSSenderClient {
|
|
@@ -54,5 +55,5 @@ __name(_VonageSMSSenderClient, "VonageSMSSenderClient");
|
|
|
54
55
|
var VonageSMSSenderClient = _VonageSMSSenderClient;
|
|
55
56
|
|
|
56
57
|
export { VonageSMSSenderClient as default };
|
|
57
|
-
//# sourceMappingURL=vonageSmsSender.client-
|
|
58
|
-
//# sourceMappingURL=vonageSmsSender.client-
|
|
58
|
+
//# sourceMappingURL=vonageSmsSender.client-MM7LS23Y.mjs.map
|
|
59
|
+
//# sourceMappingURL=vonageSmsSender.client-MM7LS23Y.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/services/clients/vonageSmsSender.client.ts"],"names":["VonageSMSSenderClient","constructor","clientPromise","sendOne","phone","message","client","getClient","sms","send","to","text","from","FROM","USERNAME","PASSWORD","NotProvidedCredentialsError","phones","result","sent","failed","Promise","all","map","then","data","messages","some","status","push","error","errorText","Vonage","Auth","vonageAuth","apiKey","apiSecret"],"mappings":";;;;AAOA,IAAqBA,sBAAAA,GAArB,MAAqBA,sBAAAA,CAAAA;EAEjBC,WAAAA,GAAc;AADNC,IAAAA,aAAAA,CAAAA,IAAAA,EAAAA,eAAAA,CAAAA;AAkDAC,IAAAA,aAAAA,CAAAA,IAAAA,EAAAA,SAAAA,kBAAU,MAAA,CAAA,OACdC,OACAC,OAAAA,KAAAA;AAEA,MAAA,MAAMC,MAAAA,GAAS,MAAM,IAAA,CAAKC,SAAAA,EAAS;AACnC,MAAA,OAAOD,MAAAA,CAAOE,IAAIC,IAAAA,CAAK;QACnBC,EAAAA,EAAIN,KAAAA;QACJO,IAAAA,EAAMN,OAAAA;QACNO,IAAAA,EAAMC;OACV,CAAA;IACJ,CAAA,EAVkB,SAAA,CAAA,CAAA;AAhDd,IAAA,IAAI,EAAEC,QAAAA,IAAYC,QAAAA,IAAYF,IAAAA,CAAAA,EAC1B,MAAM,IAAIG,2BAAAA,EAAAA;AAClB,EAAA;EAEA,MAAaP,IAAAA,CAAKQ,QAAkBZ,OAAAA,EAAsC;AACtE,IAAA,MAAMa,MAAAA,GAAqB;AACvBC,MAAAA,IAAAA,EAAM,EAAA;AACNC,MAAAA,MAAAA,EAAQ;AACZ,KAAA;AAEA,IAAA,MAAMC,OAAAA,CAAQC,GAAAA,CACVL,MAAAA,CAAOM,GAAAA,CAAI,CAACnB,KAAAA,KACR,IAAA,CAAKD,OAAAA,CAAQC,KAAAA,EAAOC,OAAAA,CAAAA,CAASmB,IAAAA,CAAK,CAACC,IAAAA,KAAAA;AApBnD,MAAA,IAAA,EAAA;AAqBoB,MAAA,IAAA,CACIA,EAAAA,GAAAA,IAAAA,CAAKC,aAALD,IAAAA,GAAAA,MAAAA,GAAAA,EAAAA,CAAeE,IAAAA,CAAK,CAACtB,QAAAA,KAAYA,QAAAA,CAAQuB,WAAW,GAAA,CAAA,EACtD;AACEV,QAAAA,MAAAA,CAAOE,OAAOS,IAAAA,CAAK;AACfzB,UAAAA,KAAAA;UACA0B,KAAAA,EAAOL,IAAAA,CAAKC,QAAAA,CAAS,CAAA,CAAA,CAAGK;SAC5B,CAAA;MACJ,CAAA,MAAO;AACHb,QAAAA,MAAAA,CAAOC,KAAKU,IAAAA,CAAK;AAAEzB,UAAAA;SAAM,CAAA;AAC7B,MAAA;AACJ,IAAA,CAAA,CAAA,CAAA,CAAA;AAIR,IAAA,OAAOc,MAAAA;AACX,EAAA;AAEA,EAAA,MAAcX,SAAAA,GAA6B;AAtC/C,IAAA,IAAA,EAAA;AAuCQ,IAAA,IAAA,CAAKL,aAAAA,GAAAA,CACD,EAAA,GAAA,IAAA,CAAKA,aAAAA,KAAL,IAAA,GAAA,EAAA,GAAA,CACC,YAAA;AACG,MAAA,MAAM,CAAC,EAAE8B,MAAAA,EAAM,EAAI,EAAEC,MAAM,CAAA,GAAI,MAAMZ,OAAAA,CAAQC,GAAAA,CAAI;AAC7C,QAAA,OAAO,oBAAA,CAAA;AACP,QAAA,OAAO,cAAA;AACV,OAAA,CAAA;AACD,MAAA,MAAMY,UAAAA,GAAa,IAAID,IAAAA,CAAK;QACxBE,MAAAA,EAAQrB,QAAAA;QACRsB,SAAAA,EAAWrB;OACf,CAAA;AACA,MAAA,OAAO,IAAIiB,OAAOE,UAAAA,CAAAA;IACtB,CAAA,GAAA;AAEJ,IAAA,OAAO,IAAA,CAAKhC,aAAAA;AAChB,EAAA;AAaJ,CAAA;AA9DqBF,MAAAA,CAAAA,sBAAAA,EAAAA,uBAAAA,CAAAA;AAArB,IAAqBA,qBAAAA,GAArB","file":"vonageSmsSender.client-MM7LS23Y.mjs","sourcesContent":["import { ISMSSender } from '../../interfaces';\nimport { SendResult } from '../../types';\nimport { USERNAME, PASSWORD, FROM } from '../../utils/constants';\nimport { NotProvidedCredentialsError } from '../../errors';\nimport type { Vonage } from '@vonage/server-sdk';\nimport type { SMSMessages } from '@vonage/sms';\n\nexport default class VonageSMSSenderClient implements ISMSSender {\n private clientPromise: Promise<Vonage> | undefined;\n constructor() {\n if (!(USERNAME && PASSWORD && FROM))\n throw new NotProvidedCredentialsError();\n }\n\n public async send(phones: string[], message: string): Promise<SendResult> {\n const result: SendResult = {\n sent: [],\n failed: [],\n };\n\n await Promise.all(\n phones.map((phone) =>\n this.sendOne(phone, message).then((data) => {\n if (\n data.messages?.some((message) => message.status !== '0')\n ) {\n result.failed.push({\n phone,\n error: data.messages[0].errorText,\n });\n } else {\n result.sent.push({ phone });\n }\n }),\n ),\n );\n\n return result;\n }\n\n private async getClient(): Promise<Vonage> {\n this.clientPromise =\n this.clientPromise ??\n (async () => {\n const [{ Vonage }, { Auth }] = await Promise.all([\n import('@vonage/server-sdk'),\n import('@vonage/auth'),\n ]);\n const vonageAuth = new Auth({\n apiKey: USERNAME as string,\n apiSecret: PASSWORD as string,\n });\n return new Vonage(vonageAuth);\n })();\n\n return this.clientPromise;\n }\n\n private sendOne = async (\n phone: string,\n message: string,\n ): Promise<SMSMessages> => {\n const client = await this.getClient();\n return client.sms.send({\n to: phone,\n text: message,\n from: FROM as string,\n });\n };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,80 +1,64 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
},
|
|
13
|
-
"scripts": {
|
|
14
|
-
"test": "jest",
|
|
15
|
-
"test:cov": "jest --coverage && chmod +x ./coverageReader.sh && sh ./coverageReader.sh",
|
|
16
|
-
"build:clean": "rm -rf dist",
|
|
17
|
-
"build:compile:original": "tsc -b ./tsconfig.cjs.json ./tsconfig.esm.json ./tsconfig.types.json",
|
|
18
|
-
"build:compile:cjs:original": "tsup --config ./tsup.config.cjs.ts",
|
|
19
|
-
"build:compile:cjs": "tsc -b ./tsconfig.cjs.json",
|
|
20
|
-
"build:compile:esm": "tsup --config ./tsup.config.esm.ts",
|
|
21
|
-
"build:compile:types": "tsup --config ./tsup.config.types.ts",
|
|
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",
|
|
24
|
-
"prepare-publish": "yarn install && yarn build",
|
|
25
|
-
"publish-package": "yarn prepare-publish && npm publish --tag latest"
|
|
26
|
-
},
|
|
27
|
-
"keywords": [
|
|
28
|
-
"sms",
|
|
29
|
-
"client",
|
|
30
|
-
"qrvey"
|
|
31
|
-
],
|
|
32
|
-
"author": "Qrvey",
|
|
33
|
-
"license": "MIT",
|
|
34
|
-
"description": "",
|
|
35
|
-
"devDependencies": {
|
|
36
|
-
"@aws-sdk/client-sns": "3.1021.0",
|
|
37
|
-
"@azure/communication-sms": "1.2.0-beta.1",
|
|
38
|
-
"@types/jest": "29.5.5",
|
|
39
|
-
"@types/twilio": "3.19.3",
|
|
40
|
-
"@vonage/auth": "1.12.0",
|
|
41
|
-
"@vonage/server-sdk": "3.19.1",
|
|
42
|
-
"auto-version-js": "0.3.10",
|
|
43
|
-
"eslint-config-custom": "*",
|
|
44
|
-
"jest": "29.7.0",
|
|
45
|
-
"ts-jest": "29.1.1",
|
|
46
|
-
"tsc": "2.0.4",
|
|
47
|
-
"tsconfig": "*",
|
|
48
|
-
"tsup": "8.5.0",
|
|
49
|
-
"twilio": "5.6.1",
|
|
50
|
-
"typescript": "5.2.2"
|
|
51
|
-
},
|
|
52
|
-
"peerDependencies": {
|
|
53
|
-
"@aws-sdk/client-sns": "3.1021.0",
|
|
54
|
-
"@azure/communication-sms": "1.2.0-beta.1",
|
|
55
|
-
"@vonage/auth": "1.12.0",
|
|
56
|
-
"@vonage/server-sdk": "3.19.1",
|
|
57
|
-
"twilio": "5.6.1"
|
|
58
|
-
},
|
|
59
|
-
"peerDependenciesMeta": {
|
|
60
|
-
"@aws-sdk/client-sns": {
|
|
61
|
-
"optional": true
|
|
62
|
-
},
|
|
63
|
-
"@azure/communication-sms": {
|
|
64
|
-
"optional": true
|
|
65
|
-
},
|
|
66
|
-
"@vonage/auth": {
|
|
67
|
-
"optional": true
|
|
68
|
-
},
|
|
69
|
-
"@vonage/server-sdk": {
|
|
70
|
-
"optional": true
|
|
71
|
-
},
|
|
72
|
-
"twilio": {
|
|
73
|
-
"optional": true
|
|
74
|
-
}
|
|
75
|
-
},
|
|
76
|
-
"publishConfig": {
|
|
77
|
-
"access": "public",
|
|
78
|
-
"registry": "https://registry.npmjs.org"
|
|
2
|
+
"name": "@qrvey/sms",
|
|
3
|
+
"version": "1.0.2-1215-beta.2",
|
|
4
|
+
"types": "dist/types/index.d.ts",
|
|
5
|
+
"main": "dist/cjs/index.js",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": {
|
|
8
|
+
"import": "./dist/esm/index.mjs",
|
|
9
|
+
"require": "./dist/cjs/index.js",
|
|
10
|
+
"default": "./dist/cjs/index.js"
|
|
79
11
|
}
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"test": "jest",
|
|
15
|
+
"test:cov": "jest --coverage && chmod +x ./coverageReader.sh && sh ./coverageReader.sh",
|
|
16
|
+
"build:clean": "rm -rf dist",
|
|
17
|
+
"build:compile:original": "tsc -b ./tsconfig.cjs.json ./tsconfig.esm.json ./tsconfig.types.json",
|
|
18
|
+
"build:compile:cjs:original": "tsup --config ./tsup.config.cjs.ts",
|
|
19
|
+
"build:compile:cjs": "tsc -b ./tsconfig.cjs.json",
|
|
20
|
+
"build:compile:esm": "tsup --config ./tsup.config.esm.ts",
|
|
21
|
+
"build:compile:types": "tsup --config ./tsup.config.types.ts",
|
|
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",
|
|
24
|
+
"prepare-publish": "yarn install && yarn build",
|
|
25
|
+
"publish-package": "yarn prepare-publish && npm publish --tag latest"
|
|
26
|
+
},
|
|
27
|
+
"keywords": [
|
|
28
|
+
"sms",
|
|
29
|
+
"client",
|
|
30
|
+
"qrvey"
|
|
31
|
+
],
|
|
32
|
+
"author": "Qrvey",
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"description": "",
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@aws-sdk/client-sns": "3.1021.0",
|
|
37
|
+
"@azure/communication-sms": "1.2.0-beta.1",
|
|
38
|
+
"@types/jest": "29.5.14",
|
|
39
|
+
"@types/twilio": "3.19.3",
|
|
40
|
+
"@vonage/auth": "1.12.2",
|
|
41
|
+
"@vonage/server-sdk": "3.19.4",
|
|
42
|
+
"auto-version-js": "0.3.10",
|
|
43
|
+
"eslint-config-custom": "*",
|
|
44
|
+
"jest": "29.7.0",
|
|
45
|
+
"ts-jest": "29.1.5",
|
|
46
|
+
"tsc": "2.0.4",
|
|
47
|
+
"tsconfig": "*",
|
|
48
|
+
"tsup": "8.5.0",
|
|
49
|
+
"twilio": "5.13.1",
|
|
50
|
+
"typescript": "5.9.3"
|
|
51
|
+
},
|
|
52
|
+
"publishConfig": {
|
|
53
|
+
"access": "public",
|
|
54
|
+
"registry": "https://registry.npmjs.org"
|
|
55
|
+
},
|
|
56
|
+
"dependencies": {
|
|
57
|
+
"@aws-sdk/client-sns": "3.1021.0",
|
|
58
|
+
"@aws-sdk/credential-provider-node": "3.972.66",
|
|
59
|
+
"@azure/communication-sms": "1.2.0-beta.1",
|
|
60
|
+
"@vonage/auth": "1.12.2",
|
|
61
|
+
"@vonage/server-sdk": "3.19.4",
|
|
62
|
+
"twilio": "5.13.1"
|
|
63
|
+
}
|
|
80
64
|
}
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
PublishCommandOutput,
|
|
8
8
|
SNSClient,
|
|
9
9
|
} from '@aws-sdk/client-sns';
|
|
10
|
+
import { defaultProvider } from '@aws-sdk/credential-provider-node';
|
|
10
11
|
|
|
11
12
|
export default class AwsSMSSenderClient implements ISMSSender {
|
|
12
13
|
private client: SNSClient;
|
|
@@ -15,14 +16,18 @@ export default class AwsSMSSenderClient implements ISMSSender {
|
|
|
15
16
|
const secretAccessKey = PASSWORD || process.env.AWS_SECRET_ACCESS_KEY;
|
|
16
17
|
const region = REGION || process.env.AWS_REGION;
|
|
17
18
|
if (!(accessKeyId && secretAccessKey))
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
19
|
+
this.client = new SNSClient({
|
|
20
|
+
region: region,
|
|
21
|
+
credentials: defaultProvider(),
|
|
22
|
+
});
|
|
23
|
+
else
|
|
24
|
+
this.client = new SNSClient({
|
|
25
|
+
region: region,
|
|
26
|
+
credentials: {
|
|
27
|
+
accessKeyId: accessKeyId,
|
|
28
|
+
secretAccessKey: secretAccessKey,
|
|
29
|
+
},
|
|
30
|
+
});
|
|
26
31
|
}
|
|
27
32
|
|
|
28
33
|
public async send(
|
|
@@ -33,10 +33,8 @@ describe('Client tests.', () => {
|
|
|
33
33
|
expect(results.sent).toBeInstanceOf(Array);
|
|
34
34
|
});
|
|
35
35
|
|
|
36
|
-
test('Should
|
|
37
|
-
expect(() => new AwsSMSSenderClient.default()).toThrow(
|
|
38
|
-
new NotProvidedCredentialsError(),
|
|
39
|
-
);
|
|
36
|
+
test('Should validate provider credential handling.', () => {
|
|
37
|
+
expect(() => new AwsSMSSenderClient.default()).not.toThrow();
|
|
40
38
|
expect(() => new TwilioSMSSenderClient.default()).toThrow(
|
|
41
39
|
new NotProvidedCredentialsError(),
|
|
42
40
|
);
|
|
@@ -5,28 +5,36 @@ jest.mock('./smsSenderFactory.service');
|
|
|
5
5
|
|
|
6
6
|
describe('SMSSenderService', () => {
|
|
7
7
|
describe('checkStatus', () => {
|
|
8
|
+
const getSMSSenderMock = jest.mocked(SMSSenderFactory.getSMSSender);
|
|
9
|
+
|
|
8
10
|
afterEach(() => {
|
|
9
11
|
jest.clearAllMocks();
|
|
10
12
|
});
|
|
11
13
|
|
|
12
14
|
it('should return true when getSMSSender resolves', async () => {
|
|
13
|
-
|
|
15
|
+
getSMSSenderMock.mockResolvedValue({
|
|
14
16
|
send: jest.fn(),
|
|
15
17
|
});
|
|
16
18
|
|
|
17
19
|
const result = await SMSSenderService.checkStatus();
|
|
18
20
|
expect(result).toBe(true);
|
|
19
|
-
expect(
|
|
21
|
+
expect(getSMSSenderMock).toHaveBeenCalled();
|
|
20
22
|
});
|
|
21
23
|
|
|
22
24
|
it('should return false when getSMSSender rejects', async () => {
|
|
23
|
-
(
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
const providerError = new Error('Provider error');
|
|
26
|
+
getSMSSenderMock.mockRejectedValue(providerError);
|
|
27
|
+
const consoleErrorSpy = jest
|
|
28
|
+
.spyOn(console, 'error')
|
|
29
|
+
.mockImplementation(() => undefined);
|
|
26
30
|
|
|
27
31
|
const result = await SMSSenderService.checkStatus();
|
|
28
32
|
expect(result).toBe(false);
|
|
29
|
-
expect(
|
|
33
|
+
expect(getSMSSenderMock).toHaveBeenCalled();
|
|
34
|
+
expect(consoleErrorSpy).toHaveBeenCalledWith(
|
|
35
|
+
'Error checking SMS sender status:',
|
|
36
|
+
providerError,
|
|
37
|
+
);
|
|
30
38
|
});
|
|
31
39
|
});
|
|
32
40
|
});
|
package/tsconfig.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/clients/awsSmsSender.client.ts"],"names":["AwsSMSSenderClient","constructor","client","sendOne","phone","message","command","PublishCommand","Message","PhoneNumber","send","accessKeyId","USERNAME","process","env","AWS_ACCESS_KEY_ID","secretAccessKey","PASSWORD","AWS_SECRET_ACCESS_KEY","region","REGION","AWS_REGION","NotProvidedCredentialsError","SNSClient","credentials","phones","result","sent","failed","Promise","all","map","then","push","catch","error"],"mappings":";;;AAUA,IAAqBA,mBAAAA,GAArB,MAAqBA,mBAAAA,CAAAA;EAEjBC,WAAAA,GAAc;AADNC,IAAAA,aAAAA,CAAAA,IAAAA,EAAAA,QAAAA,CAAAA;AAsCAC,IAAAA,aAAAA,CAAAA,IAAAA,EAAAA,SAAAA,kBAAU,MAAA,CAAA,OACdC,OACAC,OAAAA,KAAAA;AAEA,MAAA,MAAMC,OAAAA,GAAU,IAAIC,cAAAA,CAAe;QAC/BC,OAAAA,EAASH,OAAAA;QACTI,WAAAA,EAAaL;OACjB,CAAA;AAEA,MAAA,OAAO,MAAM,IAAA,CAAKF,MAAAA,CAAOQ,IAAAA,CAAKJ,OAAAA,CAAAA;IAClC,CAAA,EAVkB,SAAA,CAAA,CAAA;AApCd,IAAA,MAAMK,WAAAA,GAAcC,QAAAA,IAAYC,OAAAA,CAAQC,GAAAA,CAAIC,iBAAAA;AAC5C,IAAA,MAAMC,eAAAA,GAAkBC,QAAAA,IAAYJ,OAAAA,CAAQC,GAAAA,CAAII,qBAAAA;AAChD,IAAA,MAAMC,MAAAA,GAASC,MAAAA,IAAUP,OAAAA,CAAQC,GAAAA,CAAIO,UAAAA;AACrC,IAAA,IAAI,EAAEV,WAAAA,IAAeK,eAAAA,CAAAA,EACjB,MAAM,IAAIM,2BAAAA,EAAAA;AACd,IAAA,IAAA,CAAKpB,MAAAA,GAAS,IAAIqB,SAAAA,CAAU;AACxBJ,MAAAA,MAAAA;MACAK,WAAAA,EAAa;AACTb,QAAAA,WAAAA;AACAK,QAAAA;AACJ;KACJ,CAAA;AACJ,EAAA;AAEA,EAAA,MAAaN,IAAAA,CACTe,MAAAA,GAAmB,EAAA,EACnBpB,OAAAA,EACmB;AACnB,IAAA,MAAMqB,MAAAA,GAAqB;AACvBC,MAAAA,IAAAA,EAAM,EAAA;AACNC,MAAAA,MAAAA,EAAQ;AACZ,KAAA;AAEA,IAAA,MAAMC,OAAAA,CAAQC,GAAAA,CACVL,MAAAA,CAAOM,GAAAA,CAAI,CAAC3B,KAAAA,KACR,IAAA,CAAKD,OAAAA,CAAQC,KAAAA,EAAOC,OAAAA,CAAAA,CACf2B,IAAAA,CAAK,MAAMN,MAAAA,CAAOC,KAAKM,IAAAA,CAAK;AAAE7B,MAAAA;AAAM,KAAA,CAAA,CAAA,CACpC8B,KAAAA,CAAM,CAACC,KAAAA,KACJT,MAAAA,CAAOE,OAAOK,IAAAA,CAAK;AAAE7B,MAAAA,KAAAA;AAAO+B,MAAAA,KAAAA,EAAOA,KAAAA,CAAM9B;KAAQ,CAAA,CAAA,CAAA,CAAA;AAKjE,IAAA,OAAOqB,MAAAA;AACX,EAAA;AAaJ,CAAA;AAlDqB1B,MAAAA,CAAAA,mBAAAA,EAAAA,oBAAAA,CAAAA;AAArB,IAAqBA,kBAAAA,GAArB","file":"awsSmsSender.client-QBVM62KM.mjs","sourcesContent":["import { NotProvidedCredentialsError } from '../../errors';\nimport { ISMSSender } from '../../interfaces';\nimport { SendResult } from '../../types';\nimport { PASSWORD, REGION, USERNAME } from '../../utils/constants';\nimport {\n PublishCommand,\n PublishCommandOutput,\n SNSClient,\n} from '@aws-sdk/client-sns';\n\nexport default class AwsSMSSenderClient implements ISMSSender {\n private client: SNSClient;\n constructor() {\n const accessKeyId = USERNAME || process.env.AWS_ACCESS_KEY_ID;\n const secretAccessKey = PASSWORD || process.env.AWS_SECRET_ACCESS_KEY;\n const region = REGION || process.env.AWS_REGION;\n if (!(accessKeyId && secretAccessKey))\n throw new NotProvidedCredentialsError();\n this.client = new SNSClient({\n region: region,\n credentials: {\n accessKeyId: accessKeyId,\n secretAccessKey: secretAccessKey,\n },\n });\n }\n\n public async send(\n phones: string[] = [],\n message: string,\n ): Promise<SendResult> {\n const result: SendResult = {\n sent: [],\n failed: [],\n };\n\n await Promise.all(\n phones.map((phone) =>\n this.sendOne(phone, message)\n .then(() => result.sent.push({ phone }))\n .catch((error) =>\n result.failed.push({ phone, error: error.message }),\n ),\n ),\n );\n\n return result;\n }\n\n private sendOne = async (\n phone: string,\n message: string,\n ): Promise<PublishCommandOutput> => {\n const command = new PublishCommand({\n Message: message,\n PhoneNumber: phone,\n });\n\n return await this.client.send(command);\n };\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/clients/azureSmsSender.client.ts"],"names":["AzureSMSSenderClient","constructor","client","USERNAME","PASSWORD","FROM","process","env","COMMUNICATION_SERVICES_CONNECTION_STRING","NotProvidedCredentialsError","connectionString","SmsClient","send","phones","message","result","sent","failed","smsResults","from","to","forEach","smsResult","errorMessage","push","phone","error"],"mappings":";;;AAMA,IAAqBA,qBAAAA,GAArB,MAAqBA,qBAAAA,CAAAA;EAEjBC,WAAAA,GAAc;AADdC,IAAAA,aAAAA,CAAAA,IAAAA,EAAAA,QAAAA,CAAAA;AAPJ,IAAA,IAAA,EAAA;AASQ,IAAA,IACI,EAAEC,QAAAA,IAAYC,QAAAA,IAAYC,IAAAA,CAAAA,IAC1B,CAACC,QAAQC,GAAAA,CAAIC,wCAAAA,EAEb,MAAM,IAAIC,2BAAAA,EAAAA;AACd,IAAA,MAAMC,gBAAAA,GAAAA,CACFJ,aAAQC,GAAAA,CAAIC,wCAAAA,KAAZF,YACA,CAAA,iBAAA,EAAoBH,QAAAA,uCAA+CC,QAAAA,CAAAA,CAAAA;AACvE,IAAA,IAAA,CAAKF,MAAAA,GAAS,IAAIS,SAAAA,CAAUD,gBAAAA,CAAAA;AAChC,EAAA;EAEA,MAAaE,IAAAA,CAAKC,QAAkBC,OAAAA,EAAsC;AACtE,IAAA,MAAMC,MAAAA,GAAqB;AACvBC,MAAAA,IAAAA,EAAM,EAAA;AACNC,MAAAA,MAAAA,EAAQ;AACZ,KAAA;AACA,IAAA,MAAMC,UAAAA,GAAa,MAAM,IAAA,CAAKhB,MAAAA,CAAOU,IAAAA,CAAK;MACtCO,IAAAA,EAAMd,IAAAA;MACNe,EAAAA,EAAIP,MAAAA;AACJC,MAAAA;KACJ,CAAA;AAEAI,IAAAA,UAAAA,CAAWG,OAAAA,CAAQ,CAACC,SAAAA,KAAAA;AAChB,MAAA,IAAIA,SAAAA,CAAUC,YAAAA,EACVR,MAAAA,CAAOE,MAAAA,CAAOO,IAAAA,CAAK;AACfC,QAAAA,KAAAA,EAAOH,SAAAA,CAAUF,EAAAA;AACjBM,QAAAA,KAAAA,EAAOJ,SAAAA,CAAUC;OACrB,CAAA;AACCR,WAAAA,MAAAA,CAAOC,KAAKQ,IAAAA,CAAK;AAAEC,QAAAA,KAAAA,EAAOH,SAAAA,CAAUF;OAAG,CAAA;IAChD,CAAA,CAAA;AAEA,IAAA,OAAOL,MAAAA;AACX,EAAA;AACJ,CAAA;AApCqBf,MAAAA,CAAAA,qBAAAA,EAAAA,sBAAAA,CAAAA;AAArB,IAAqBA,oBAAAA,GAArB","file":"azureSmsSender.client-Z3P5SL47.mjs","sourcesContent":["import { NotProvidedCredentialsError } from '../../errors';\nimport { ISMSSender } from '../../interfaces';\nimport { SendResult } from '../../types';\nimport { USERNAME, PASSWORD, FROM } from '../../utils/constants';\nimport { SmsClient } from '@azure/communication-sms';\n\nexport default class AzureSMSSenderClient implements ISMSSender {\n client: SmsClient;\n constructor() {\n if (\n !(USERNAME && PASSWORD && FROM) &&\n !process.env.COMMUNICATION_SERVICES_CONNECTION_STRING\n )\n throw new NotProvidedCredentialsError();\n const connectionString =\n process.env.COMMUNICATION_SERVICES_CONNECTION_STRING ??\n `endpoint=https://${USERNAME}.communication.azure.com/;accesskey=${PASSWORD}`;\n this.client = new SmsClient(connectionString);\n }\n\n public async send(phones: string[], message: string): Promise<SendResult> {\n const result: SendResult = {\n sent: [],\n failed: [],\n };\n const smsResults = await this.client.send({\n from: FROM as string,\n to: phones,\n message: message,\n });\n\n smsResults.forEach((smsResult) => {\n if (smsResult.errorMessage)\n result.failed.push({\n phone: smsResult.to,\n error: smsResult.errorMessage,\n });\n else result.sent.push({ phone: smsResult.to });\n });\n\n return result;\n }\n}\n"]}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
4
|
-
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
-
|
|
6
|
-
// src/errors/notProvidedCredentials.error.ts
|
|
7
|
-
var _NotProvidedCredentialsError = class _NotProvidedCredentialsError extends Error {
|
|
8
|
-
constructor() {
|
|
9
|
-
super("SMS sender credentials not provided.");
|
|
10
|
-
this.name = "NotProvidedCredentialsError";
|
|
11
|
-
}
|
|
12
|
-
};
|
|
13
|
-
__name(_NotProvidedCredentialsError, "NotProvidedCredentialsError");
|
|
14
|
-
var NotProvidedCredentialsError = _NotProvidedCredentialsError;
|
|
15
|
-
|
|
16
|
-
// src/errors/unknownProvider.error.ts
|
|
17
|
-
var _UnknownProviderError = class _UnknownProviderError extends Error {
|
|
18
|
-
constructor() {
|
|
19
|
-
super("Unknown provider. Set PROVIDER env variable");
|
|
20
|
-
this.name = "UnknownProviderError";
|
|
21
|
-
}
|
|
22
|
-
};
|
|
23
|
-
__name(_UnknownProviderError, "UnknownProviderError");
|
|
24
|
-
var UnknownProviderError = _UnknownProviderError;
|
|
25
|
-
|
|
26
|
-
// src/utils/constants.ts
|
|
27
|
-
var SMS_PROVIDER = process.env.SMS_PROVIDER;
|
|
28
|
-
var PLATFORM_CLOUD = process.env.PLATFORM_CLOUD;
|
|
29
|
-
var USERNAME = process.env.SMS_PROVIDER_USERNAME;
|
|
30
|
-
var PASSWORD = process.env.SMS_PROVIDER_PASSWORD;
|
|
31
|
-
var FROM = process.env.SMS_PROVIDER_FROM_NUMBER;
|
|
32
|
-
var REGION = process.env.SMS_PROVIDER_REGION;
|
|
33
|
-
|
|
34
|
-
export { FROM, NotProvidedCredentialsError, PASSWORD, PLATFORM_CLOUD, REGION, SMS_PROVIDER, USERNAME, UnknownProviderError, __name, __publicField };
|
|
35
|
-
//# sourceMappingURL=chunk-3OKJAMCQ.mjs.map
|
|
36
|
-
//# sourceMappingURL=chunk-3OKJAMCQ.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/errors/notProvidedCredentials.error.ts","../../src/errors/unknownProvider.error.ts","../../src/utils/constants.ts"],"names":["NotProvidedCredentialsError","Error","constructor","name","UnknownProviderError","SMS_PROVIDER","process","env","PLATFORM_CLOUD","USERNAME","SMS_PROVIDER_USERNAME","PASSWORD","SMS_PROVIDER_PASSWORD","FROM","SMS_PROVIDER_FROM_NUMBER","REGION","SMS_PROVIDER_REGION"],"mappings":";;;;;;AAAO,IAAMA,4BAAAA,GAAN,MAAMA,4BAAAA,SAAoCC,KAAAA,CAAAA;EAC7CC,WAAAA,GAAc;AACV,IAAA,KAAA,CAAM,sCAAA,CAAA;AACN,IAAA,IAAA,CAAKC,IAAAA,GAAO,6BAAA;AAChB,EAAA;AACJ,CAAA;AALiDF,MAAAA,CAAAA,4BAAAA,EAAAA,6BAAAA,CAAAA;AAA1C,IAAMD,2BAAAA,GAAN;;;ACAA,IAAMI,qBAAAA,GAAN,MAAMA,qBAAAA,SAA6BH,KAAAA,CAAAA;EACtCC,WAAAA,GAAc;AACV,IAAA,KAAA,CAAM,6CAAA,CAAA;AACN,IAAA,IAAA,CAAKC,IAAAA,GAAO,sBAAA;AAChB,EAAA;AACJ,CAAA;AAL0CF,MAAAA,CAAAA,qBAAAA,EAAAA,sBAAAA,CAAAA;AAAnC,IAAMG,oBAAAA,GAAN;;;ACAA,IAAMC,YAAAA,GAAeC,QAAQC,GAAAA,CAAIF;AACjC,IAAMG,cAAAA,GAAiBF,QAAQC,GAAAA,CAAIC;AAEnC,IAAMC,QAAAA,GAAWH,QAAQC,GAAAA,CAAIG;AAC7B,IAAMC,QAAAA,GAAWL,QAAQC,GAAAA,CAAIK;AAC7B,IAAMC,IAAAA,GAAOP,QAAQC,GAAAA,CAAIO;AACzB,IAAMC,MAAAA,GAAST,QAAQC,GAAAA,CAAIS","file":"chunk-3OKJAMCQ.mjs","sourcesContent":["export class NotProvidedCredentialsError extends Error {\n constructor() {\n super('SMS sender credentials not provided.');\n this.name = 'NotProvidedCredentialsError';\n }\n}\n","export class UnknownProviderError extends Error {\n constructor() {\n super('Unknown provider. Set PROVIDER env variable');\n this.name = 'UnknownProviderError';\n }\n}\n","export const SMS_PROVIDER = process.env.SMS_PROVIDER;\nexport const PLATFORM_CLOUD = process.env.PLATFORM_CLOUD;\n\nexport const USERNAME = process.env.SMS_PROVIDER_USERNAME;\nexport const PASSWORD = process.env.SMS_PROVIDER_PASSWORD;\nexport const FROM = process.env.SMS_PROVIDER_FROM_NUMBER;\nexport const REGION = process.env.SMS_PROVIDER_REGION;\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/clients/twilioSmsSender.client.ts"],"names":["TwilioSMSSenderClient","constructor","client","sendOne","phone","message","messages","create","from","FROM","to","body","USERNAME","PASSWORD","Twilio","NotProvidedCredentialsError","send","phones","result","sent","failed","Promise","all","map","then","push","catch","error"],"mappings":";;;AAOA,IAAqBA,sBAAAA,GAArB,MAAqBA,sBAAAA,CAAAA;EAEjBC,WAAAA,GAAc;AADNC,IAAAA,aAAAA,CAAAA,IAAAA,EAAAA,QAAAA,CAAAA;AA6BAC,IAAAA,aAAAA,CAAAA,IAAAA,EAAAA,SAAAA,0BACJC,KAAAA,EACAC,OAAAA,KAEA,IAAA,CAAKH,MAAAA,CAAOI,SAASC,MAAAA,CAAO;MACxBC,IAAAA,EAAMC,IAAAA;MACNC,EAAAA,EAAIN,KAAAA;MACJO,IAAAA,EAAMN;AACV,KAAA,CAAA,EARc,SAAA,CAAA,CAAA;AA3Bd,IAAA,IAAIO,QAAAA,IAAYC,YAAYJ,IAAAA,EACxB,IAAA,CAAKP,SAAS,IAAIY,MAAAA,CAAOF,UAAUC,QAAAA,CAAAA;AAClC,SAAA,MAAM,IAAIE,2BAAAA,EAAAA;AACnB,EAAA;AAEA,EAAA,MAAaC,IAAAA,CACTC,MAAAA,GAAmB,EAAA,EACnBZ,OAAAA,EACmB;AACnB,IAAA,MAAMa,MAAAA,GAAqB;AACvBC,MAAAA,IAAAA,EAAM,EAAA;AACNC,MAAAA,MAAAA,EAAQ;AACZ,KAAA;AAEA,IAAA,MAAMC,OAAAA,CAAQC,GAAAA,CACVL,MAAAA,CAAOM,GAAAA,CAAI,CAACnB,KAAAA,KACR,IAAA,CAAKD,OAAAA,CAAQC,KAAAA,EAAOC,OAAAA,CAAAA,CACfmB,IAAAA,CAAK,MAAMN,MAAAA,CAAOC,KAAKM,IAAAA,CAAK;AAAErB,MAAAA;AAAM,KAAA,CAAA,CAAA,CACpCsB,KAAAA,CAAM,CAACC,KAAAA,KACJT,MAAAA,CAAOE,OAAOK,IAAAA,CAAK;AAAErB,MAAAA,KAAAA;AAAOuB,MAAAA,KAAAA,EAAOA,KAAAA,CAAMtB;KAAQ,CAAA,CAAA,CAAA,CAAA;AAKjE,IAAA,OAAOa,MAAAA;AACX,EAAA;AAWJ,CAAA;AAvCqBlB,MAAAA,CAAAA,sBAAAA,EAAAA,uBAAAA,CAAAA;AAArB,IAAqBA,qBAAAA,GAArB","file":"twilioSmsSender.client-J4FEYTVH.mjs","sourcesContent":["import { ISMSSender } from '../../interfaces/smsSender.interface';\nimport { Twilio } from 'twilio';\nimport { USERNAME, PASSWORD, FROM } from '../../utils/constants';\nimport { MessageInstance } from 'twilio/lib/rest/api/v2010/account/message';\nimport { SendResult } from '../../types/sendResult.type';\nimport { NotProvidedCredentialsError } from '../../errors';\n\nexport default class TwilioSMSSenderClient implements ISMSSender {\n private client: Twilio;\n constructor() {\n if (USERNAME && PASSWORD && FROM)\n this.client = new Twilio(USERNAME, PASSWORD);\n else throw new NotProvidedCredentialsError();\n }\n\n public async send(\n phones: string[] = [],\n message: string,\n ): Promise<SendResult> {\n const result: SendResult = {\n sent: [],\n failed: [],\n };\n\n await Promise.all(\n phones.map((phone) =>\n this.sendOne(phone, message)\n .then(() => result.sent.push({ phone }))\n .catch((error) =>\n result.failed.push({ phone, error: error.message }),\n ),\n ),\n );\n\n return result;\n }\n\n private sendOne = (\n phone: string,\n message: string,\n ): Promise<MessageInstance> =>\n this.client.messages.create({\n from: FROM,\n to: phone,\n body: message,\n });\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/clients/vonageSmsSender.client.ts"],"names":["VonageSMSSenderClient","constructor","clientPromise","sendOne","phone","message","client","getClient","sms","send","to","text","from","FROM","USERNAME","PASSWORD","NotProvidedCredentialsError","phones","result","sent","failed","Promise","all","map","then","data","messages","some","status","push","error","errorText","Vonage","Auth","vonageAuth","apiKey","apiSecret"],"mappings":";;;AAOA,IAAqBA,sBAAAA,GAArB,MAAqBA,sBAAAA,CAAAA;EAEjBC,WAAAA,GAAc;AADNC,IAAAA,aAAAA,CAAAA,IAAAA,EAAAA,eAAAA,CAAAA;AAkDAC,IAAAA,aAAAA,CAAAA,IAAAA,EAAAA,SAAAA,kBAAU,MAAA,CAAA,OACdC,OACAC,OAAAA,KAAAA;AAEA,MAAA,MAAMC,MAAAA,GAAS,MAAM,IAAA,CAAKC,SAAAA,EAAS;AACnC,MAAA,OAAOD,MAAAA,CAAOE,IAAIC,IAAAA,CAAK;QACnBC,EAAAA,EAAIN,KAAAA;QACJO,IAAAA,EAAMN,OAAAA;QACNO,IAAAA,EAAMC;OACV,CAAA;IACJ,CAAA,EAVkB,SAAA,CAAA,CAAA;AAhDd,IAAA,IAAI,EAAEC,QAAAA,IAAYC,QAAAA,IAAYF,IAAAA,CAAAA,EAC1B,MAAM,IAAIG,2BAAAA,EAAAA;AAClB,EAAA;EAEA,MAAaP,IAAAA,CAAKQ,QAAkBZ,OAAAA,EAAsC;AACtE,IAAA,MAAMa,MAAAA,GAAqB;AACvBC,MAAAA,IAAAA,EAAM,EAAA;AACNC,MAAAA,MAAAA,EAAQ;AACZ,KAAA;AAEA,IAAA,MAAMC,OAAAA,CAAQC,GAAAA,CACVL,MAAAA,CAAOM,GAAAA,CAAI,CAACnB,KAAAA,KACR,IAAA,CAAKD,OAAAA,CAAQC,KAAAA,EAAOC,OAAAA,CAAAA,CAASmB,IAAAA,CAAK,CAACC,IAAAA,KAAAA;AApBnD,MAAA,IAAA,EAAA;AAqBoB,MAAA,IAAA,CACIA,EAAAA,GAAAA,IAAAA,CAAKC,aAALD,IAAAA,GAAAA,MAAAA,GAAAA,EAAAA,CAAeE,IAAAA,CAAK,CAACtB,QAAAA,KAAYA,QAAAA,CAAQuB,WAAW,GAAA,CAAA,EACtD;AACEV,QAAAA,MAAAA,CAAOE,OAAOS,IAAAA,CAAK;AACfzB,UAAAA,KAAAA;UACA0B,KAAAA,EAAOL,IAAAA,CAAKC,QAAAA,CAAS,CAAA,CAAA,CAAGK;SAC5B,CAAA;MACJ,CAAA,MAAO;AACHb,QAAAA,MAAAA,CAAOC,KAAKU,IAAAA,CAAK;AAAEzB,UAAAA;SAAM,CAAA;AAC7B,MAAA;AACJ,IAAA,CAAA,CAAA,CAAA,CAAA;AAIR,IAAA,OAAOc,MAAAA;AACX,EAAA;AAEA,EAAA,MAAcX,SAAAA,GAA6B;AAtC/C,IAAA,IAAA,EAAA;AAuCQ,IAAA,IAAA,CAAKL,aAAAA,GAAAA,CACD,EAAA,GAAA,IAAA,CAAKA,aAAAA,KAAL,IAAA,GAAA,EAAA,GAAA,CACC,YAAA;AACG,MAAA,MAAM,CAAC,EAAE8B,MAAAA,EAAM,EAAI,EAAEC,MAAM,CAAA,GAAI,MAAMZ,OAAAA,CAAQC,GAAAA,CAAI;AAC7C,QAAA,OAAO,oBAAA,CAAA;AACP,QAAA,OAAO,cAAA;AACV,OAAA,CAAA;AACD,MAAA,MAAMY,UAAAA,GAAa,IAAID,IAAAA,CAAK;QACxBE,MAAAA,EAAQrB,QAAAA;QACRsB,SAAAA,EAAWrB;OACf,CAAA;AACA,MAAA,OAAO,IAAIiB,OAAOE,UAAAA,CAAAA;IACtB,CAAA,GAAA;AAEJ,IAAA,OAAO,IAAA,CAAKhC,aAAAA;AAChB,EAAA;AAaJ,CAAA;AA9DqBF,MAAAA,CAAAA,sBAAAA,EAAAA,uBAAAA,CAAAA;AAArB,IAAqBA,qBAAAA,GAArB","file":"vonageSmsSender.client-7KP2UCMI.mjs","sourcesContent":["import { ISMSSender } from '../../interfaces';\nimport { SendResult } from '../../types';\nimport { USERNAME, PASSWORD, FROM } from '../../utils/constants';\nimport { NotProvidedCredentialsError } from '../../errors';\nimport type { Vonage } from '@vonage/server-sdk';\nimport type { SMSMessages } from '@vonage/sms';\n\nexport default class VonageSMSSenderClient implements ISMSSender {\n private clientPromise: Promise<Vonage> | undefined;\n constructor() {\n if (!(USERNAME && PASSWORD && FROM))\n throw new NotProvidedCredentialsError();\n }\n\n public async send(phones: string[], message: string): Promise<SendResult> {\n const result: SendResult = {\n sent: [],\n failed: [],\n };\n\n await Promise.all(\n phones.map((phone) =>\n this.sendOne(phone, message).then((data) => {\n if (\n data.messages?.some((message) => message.status !== '0')\n ) {\n result.failed.push({\n phone,\n error: data.messages[0].errorText,\n });\n } else {\n result.sent.push({ phone });\n }\n }),\n ),\n );\n\n return result;\n }\n\n private async getClient(): Promise<Vonage> {\n this.clientPromise =\n this.clientPromise ??\n (async () => {\n const [{ Vonage }, { Auth }] = await Promise.all([\n import('@vonage/server-sdk'),\n import('@vonage/auth'),\n ]);\n const vonageAuth = new Auth({\n apiKey: USERNAME as string,\n apiSecret: PASSWORD as string,\n });\n return new Vonage(vonageAuth);\n })();\n\n return this.clientPromise;\n }\n\n private sendOne = async (\n phone: string,\n message: string,\n ): Promise<SMSMessages> => {\n const client = await this.getClient();\n return client.sms.send({\n to: phone,\n text: message,\n from: FROM as string,\n });\n };\n}\n"]}
|