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