@qrvey/sms 0.0.5 → 1.0.0-554
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/mappers/qrveyEnvs.mapper.js +14 -0
- package/dist/cjs/mappers/qrveyEnvs.mapper.js.map +1 -0
- package/dist/cjs/services/clients/azureSmsSender.client.js +4 -2
- package/dist/cjs/services/clients/azureSmsSender.client.js.map +1 -1
- package/dist/cjs/services/clients/vonageSmsSender.client.js.map +1 -1
- package/dist/cjs/services/smsSender.service.js +9 -0
- package/dist/cjs/services/smsSender.service.js.map +1 -1
- package/dist/cjs/services/smsSenderFactory.service.js +6 -2
- package/dist/cjs/services/smsSenderFactory.service.js.map +1 -1
- package/dist/cjs/utils/constants.js +2 -1
- package/dist/cjs/utils/constants.js.map +1 -1
- package/dist/esm/{awsSmsSender.client-KAGNU24Z.mjs → awsSmsSender.client-LIUIAB4N.mjs} +3 -3
- package/dist/esm/awsSmsSender.client-LIUIAB4N.mjs.map +1 -0
- package/dist/esm/{azureSmsSender.client-4MHOTRQ7.mjs → azureSmsSender.client-KHGAWQJU.mjs} +6 -5
- package/dist/esm/azureSmsSender.client-KHGAWQJU.mjs.map +1 -0
- package/dist/esm/{chunk-NCQDKWNI.mjs → chunk-GH3HZBE6.mjs} +4 -3
- package/dist/esm/chunk-GH3HZBE6.mjs.map +1 -0
- package/dist/esm/index.d.mts +1 -0
- package/dist/esm/index.mjs +28 -8
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/{twilioSmsSender.client-2AYM7Q6Q.mjs → twilioSmsSender.client-2Q2EIZIP.mjs} +3 -3
- package/dist/esm/twilioSmsSender.client-2Q2EIZIP.mjs.map +1 -0
- package/dist/esm/{vonageSmsSender.client-FSND4BQX.mjs → vonageSmsSender.client-TD4MHO4D.mjs} +6 -4
- package/dist/esm/vonageSmsSender.client-TD4MHO4D.mjs.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/package.json +2 -2
- package/src/mappers/qrveyEnvs.mapper.ts +10 -0
- package/src/services/clients/azureSmsSender.client.ts +7 -2
- package/src/services/clients/vonageSmsSender.client.ts +4 -2
- package/src/services/smsSender.service.test.ts +32 -0
- package/src/services/smsSender.service.ts +9 -0
- package/src/services/smsSenderFactory.service.ts +6 -2
- package/src/utils/constants.ts +1 -0
- package/dist/esm/awsSmsSender.client-KAGNU24Z.mjs.map +0 -1
- package/dist/esm/azureSmsSender.client-4MHOTRQ7.mjs.map +0 -1
- package/dist/esm/chunk-NCQDKWNI.mjs.map +0 -1
- package/dist/esm/twilioSmsSender.client-2AYM7Q6Q.mjs.map +0 -1
- package/dist/esm/vonageSmsSender.client-FSND4BQX.mjs.map +0 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getSMSProviderFromPlatformCloud = void 0;
|
|
4
|
+
const constants_1 = require("../utils/constants");
|
|
5
|
+
const getSMSProviderFromPlatformCloud = () => {
|
|
6
|
+
var _a;
|
|
7
|
+
const platformCloudDictionary = {
|
|
8
|
+
AWS: 'aws',
|
|
9
|
+
AZURE: 'azure',
|
|
10
|
+
};
|
|
11
|
+
return (_a = platformCloudDictionary[constants_1.PLATFORM_CLOUD !== null && constants_1.PLATFORM_CLOUD !== void 0 ? constants_1.PLATFORM_CLOUD : '']) !== null && _a !== void 0 ? _a : undefined;
|
|
12
|
+
};
|
|
13
|
+
exports.getSMSProviderFromPlatformCloud = getSMSProviderFromPlatformCloud;
|
|
14
|
+
//# sourceMappingURL=qrveyEnvs.mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qrveyEnvs.mapper.js","sourceRoot":"","sources":["../../../src/mappers/qrveyEnvs.mapper.ts"],"names":[],"mappings":";;;AAAA,kDAAoD;AAE7C,MAAM,+BAA+B,GAAG,GAAG,EAAE;;IAChD,MAAM,uBAAuB,GAA2B;QACpD,GAAG,EAAE,KAAK;QACV,KAAK,EAAE,OAAO;KACjB,CAAC;IAEF,OAAO,MAAA,uBAAuB,CAAC,0BAAc,aAAd,0BAAc,cAAd,0BAAc,GAAI,EAAE,CAAC,mCAAI,SAAS,CAAC;AACtE,CAAC,CAAC;AAPW,QAAA,+BAA+B,mCAO1C"}
|
|
@@ -5,9 +5,11 @@ const constants_1 = require("../../utils/constants");
|
|
|
5
5
|
const communication_sms_1 = require("@azure/communication-sms");
|
|
6
6
|
class AzureSMSSenderClient {
|
|
7
7
|
constructor() {
|
|
8
|
-
|
|
8
|
+
var _a;
|
|
9
|
+
if (!(constants_1.USERNAME && constants_1.PASSWORD && constants_1.FROM) &&
|
|
10
|
+
!process.env.COMMUNICATION_SERVICES_CONNECTION_STRING)
|
|
9
11
|
throw new errors_1.NotProvidedCredentialsError();
|
|
10
|
-
const connectionString = `endpoint=https://${constants_1.USERNAME}.communication.azure.com/;accesskey=${constants_1.PASSWORD}`;
|
|
12
|
+
const connectionString = (_a = process.env.COMMUNICATION_SERVICES_CONNECTION_STRING) !== null && _a !== void 0 ? _a : `endpoint=https://${constants_1.USERNAME}.communication.azure.com/;accesskey=${constants_1.PASSWORD}`;
|
|
11
13
|
this.client = new communication_sms_1.SmsClient(connectionString);
|
|
12
14
|
}
|
|
13
15
|
async send(phones, message) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"azureSmsSender.client.js","sourceRoot":"","sources":["../../../../src/services/clients/azureSmsSender.client.ts"],"names":[],"mappings":";;AAAA,yCAA2D;AAG3D,qDAAiE;AACjE,gEAAqD;AAErD,MAAqB,oBAAoB;IAErC
|
|
1
|
+
{"version":3,"file":"azureSmsSender.client.js","sourceRoot":"","sources":["../../../../src/services/clients/azureSmsSender.client.ts"],"names":[],"mappings":";;AAAA,yCAA2D;AAG3D,qDAAiE;AACjE,gEAAqD;AAErD,MAAqB,oBAAoB;IAErC;;QACI,IACI,CAAC,CAAC,oBAAQ,IAAI,oBAAQ,IAAI,gBAAI,CAAC;YAC/B,CAAC,OAAO,CAAC,GAAG,CAAC,wCAAwC;YAErD,MAAM,IAAI,oCAA2B,EAAE,CAAC;QAC5C,MAAM,gBAAgB,GAClB,MAAA,OAAO,CAAC,GAAG,CAAC,wCAAwC,mCACpD,oBAAoB,oBAAQ,uCAAuC,oBAAQ,EAAE,CAAC;QAClF,IAAI,CAAC,MAAM,GAAG,IAAI,6BAAS,CAAC,gBAAgB,CAAC,CAAC;IAClD,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,MAAgB,EAAE,OAAe;QAC/C,MAAM,MAAM,GAAe;YACvB,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,EAAE;SACb,CAAC;QACF,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACtC,IAAI,EAAE,gBAAc;YACpB,EAAE,EAAE,MAAM;YACV,OAAO,EAAE,OAAO;SACnB,CAAC,CAAC;QAEH,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YAC7B,IAAI,SAAS,CAAC,YAAY;gBACtB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;oBACf,KAAK,EAAE,SAAS,CAAC,EAAE;oBACnB,KAAK,EAAE,SAAS,CAAC,YAAY;iBAChC,CAAC,CAAC;;gBACF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AApCD,uCAoCC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vonageSmsSender.client.js","sourceRoot":"","sources":["../../../../src/services/clients/vonageSmsSender.client.ts"],"names":[],"mappings":";;AAEA,mDAA4C;AAC5C,uCAAoC;AACpC,qDAAiE;AACjE,yCAA2D;AAG3D,MAAqB,qBAAqB;IAEtC;
|
|
1
|
+
{"version":3,"file":"vonageSmsSender.client.js","sourceRoot":"","sources":["../../../../src/services/clients/vonageSmsSender.client.ts"],"names":[],"mappings":";;AAEA,mDAA4C;AAC5C,uCAAoC;AACpC,qDAAiE;AACjE,yCAA2D;AAG3D,MAAqB,qBAAqB;IAEtC;QAsCQ,YAAO,GAAG,CAAC,KAAa,EAAE,OAAe,EAAwB,EAAE,CACvE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YACjB,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,gBAAc;SACvB,CAAC,CAAC;QA1CH,IAAI,CAAC,CAAC,oBAAQ,IAAI,oBAAQ,IAAI,gBAAI,CAAC;YAC/B,MAAM,IAAI,oCAA2B,EAAE,CAAC;QAC5C,MAAM,UAAU,GAAG,IAAI,WAAI,CAAC;YACxB,MAAM,EAAE,oBAAQ;YAChB,SAAS,EAAE,oBAAQ;SACtB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,mBAAM,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,MAAgB,EAAE,OAAe;QAC/C,MAAM,MAAM,GAAe;YACvB,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,EAAE;SACb,CAAC;QAEF,MAAM,OAAO,CAAC,GAAG,CACb,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACjB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;;YACvC,IACI,MAAA,IAAI,CAAC,QAAQ,0CAAE,IAAI,CACf,CAAC,OAAY,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,GAAG,CAC3C,EACH;gBACE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;oBACf,KAAK;oBACL,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;iBACpC,CAAC,CAAC;aACN;iBAAM;gBACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;aAC/B;QACL,CAAC,CAAC,CACL,CACJ,CAAC;QAEF,OAAO,MAAM,CAAC;IAClB,CAAC;CAQJ;AA9CD,wCA8CC"}
|
|
@@ -12,6 +12,15 @@ class SMSSenderService {
|
|
|
12
12
|
async send(phones, message) {
|
|
13
13
|
return (await smsSenderFactory_service_1.SMSSenderFactory.getSMSSender()).send(phones, message);
|
|
14
14
|
}
|
|
15
|
+
static async checkStatus() {
|
|
16
|
+
try {
|
|
17
|
+
await smsSenderFactory_service_1.SMSSenderFactory.getSMSSender();
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
15
24
|
}
|
|
16
25
|
exports.SMSSenderService = SMSSenderService;
|
|
17
26
|
//# sourceMappingURL=smsSender.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smsSender.service.js","sourceRoot":"","sources":["../../../src/services/smsSender.service.ts"],"names":[],"mappings":";;;AACA,yEAA8D;AAE9D,MAAa,gBAAgB;IACzB;;;;;OAKG;IACI,KAAK,CAAC,IAAI,CAAC,MAAgB,EAAE,OAAe;QAC/C,OAAO,CAAC,MAAM,2CAAgB,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;CACJ;
|
|
1
|
+
{"version":3,"file":"smsSender.service.js","sourceRoot":"","sources":["../../../src/services/smsSender.service.ts"],"names":[],"mappings":";;;AACA,yEAA8D;AAE9D,MAAa,gBAAgB;IACzB;;;;;OAKG;IACI,KAAK,CAAC,IAAI,CAAC,MAAgB,EAAE,OAAe;QAC/C,OAAO,CAAC,MAAM,2CAAgB,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,WAAW;QAC3B,IAAI;YACA,MAAM,2CAAgB,CAAC,YAAY,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;SACf;QAAC,OAAO,KAAK,EAAE;YACZ,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;CACJ;AAnBD,4CAmBC"}
|
|
@@ -26,13 +26,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
26
26
|
exports.SMSSenderFactory = void 0;
|
|
27
27
|
const errors_1 = require("../errors");
|
|
28
28
|
const constants_1 = require("../utils/constants");
|
|
29
|
+
const qrveyEnvs_mapper_1 = require("../mappers/qrveyEnvs.mapper");
|
|
29
30
|
class SMSSenderFactory {
|
|
30
31
|
static async getSMSSender() {
|
|
31
|
-
|
|
32
|
+
var _a, _b;
|
|
33
|
+
const provider = (_a = (0, qrveyEnvs_mapper_1.getSMSProviderFromPlatformCloud)()) !== null && _a !== void 0 ? _a : constants_1.SMS_PROVIDER === null || constants_1.SMS_PROVIDER === void 0 ? void 0 : constants_1.SMS_PROVIDER.toLowerCase();
|
|
32
34
|
if (!provider)
|
|
33
35
|
throw new errors_1.UnknownProviderError();
|
|
34
36
|
const { default: SMSSender } = await this.providerModules[provider]();
|
|
35
|
-
|
|
37
|
+
this._smsSender = (_b = this._smsSender) !== null && _b !== void 0 ? _b : new SMSSender();
|
|
38
|
+
return this._smsSender;
|
|
36
39
|
}
|
|
37
40
|
}
|
|
38
41
|
exports.SMSSenderFactory = SMSSenderFactory;
|
|
@@ -42,4 +45,5 @@ SMSSenderFactory.providerModules = {
|
|
|
42
45
|
azure: () => Promise.resolve().then(() => __importStar(require('./clients/azureSmsSender.client'))),
|
|
43
46
|
vonage: () => Promise.resolve().then(() => __importStar(require('./clients/vonageSmsSender.client'))),
|
|
44
47
|
};
|
|
48
|
+
SMSSenderFactory._smsSender = null;
|
|
45
49
|
//# sourceMappingURL=smsSenderFactory.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smsSenderFactory.service.js","sourceRoot":"","sources":["../../../src/services/smsSenderFactory.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sCAAiD;AAGjD,kDAAkD;
|
|
1
|
+
{"version":3,"file":"smsSenderFactory.service.js","sourceRoot":"","sources":["../../../src/services/smsSenderFactory.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sCAAiD;AAGjD,kDAAkD;AAClD,kEAA8E;AAE9E,MAAa,gBAAgB;IAYzB,MAAM,CAAC,KAAK,CAAC,YAAY;;QACrB,MAAM,QAAQ,GACV,MAAA,IAAA,kDAA+B,GAAE,mCAAI,wBAAY,aAAZ,wBAAY,uBAAZ,wBAAY,CAAE,WAAW,EAAE,CAAC;QACrE,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,6BAAoB,EAAE,CAAC;QAEhD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtE,IAAI,CAAC,UAAU,GAAG,MAAA,IAAI,CAAC,UAAU,mCAAI,IAAI,SAAS,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;;AApBL,4CAqBC;AApBkB,gCAAe,GAG1B;IACA,MAAM,EAAE,GAAG,EAAE,mDAAQ,kCAAkC,GAAC;IACxD,GAAG,EAAE,GAAG,EAAE,mDAAQ,+BAA+B,GAAC;IAClD,KAAK,EAAE,GAAG,EAAE,mDAAQ,iCAAiC,GAAC;IACtD,MAAM,EAAE,GAAG,EAAE,mDAAQ,kCAAkC,GAAC;CAC3D,CAAC;AACa,2BAAU,GAAsB,IAAI,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.REGION = exports.FROM = exports.PASSWORD = exports.USERNAME = exports.SMS_PROVIDER = void 0;
|
|
3
|
+
exports.REGION = exports.FROM = exports.PASSWORD = exports.USERNAME = exports.PLATFORM_CLOUD = exports.SMS_PROVIDER = void 0;
|
|
4
4
|
exports.SMS_PROVIDER = process.env.SMS_PROVIDER;
|
|
5
|
+
exports.PLATFORM_CLOUD = process.env.PLATFORM_CLOUD;
|
|
5
6
|
exports.USERNAME = process.env.SMS_PROVIDER_USERNAME;
|
|
6
7
|
exports.PASSWORD = process.env.SMS_PROVIDER_PASSWORD;
|
|
7
8
|
exports.FROM = process.env.SMS_PROVIDER_FROM_NUMBER;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/utils/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/utils/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;AACxC,QAAA,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AAE5C,QAAA,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;AAC7C,QAAA,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;AAC7C,QAAA,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;AAC5C,QAAA,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { USERNAME, PASSWORD, REGION, NotProvidedCredentialsError } from './chunk-
|
|
1
|
+
import { USERNAME, PASSWORD, REGION, NotProvidedCredentialsError } from './chunk-GH3HZBE6.mjs';
|
|
2
2
|
import { PublishCommand, SNSClient } from '@aws-sdk/client-sns';
|
|
3
3
|
|
|
4
4
|
var AwsSMSSenderClient = class {
|
|
@@ -40,5 +40,5 @@ var AwsSMSSenderClient = class {
|
|
|
40
40
|
};
|
|
41
41
|
|
|
42
42
|
export { AwsSMSSenderClient as default };
|
|
43
|
-
//# sourceMappingURL=awsSmsSender.client-
|
|
44
|
-
//# sourceMappingURL=awsSmsSender.client-
|
|
43
|
+
//# sourceMappingURL=awsSmsSender.client-LIUIAB4N.mjs.map
|
|
44
|
+
//# sourceMappingURL=awsSmsSender.client-LIUIAB4N.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/services/clients/awsSmsSender.client.ts"],"names":[],"mappings":";;;AAUA,IAAqB,qBAArB,MAA8D;AAAA,EAE1D,WAAA,GAAc;AAqCd,IAAA,IAAA,CAAQ,OAAA,GAAU,OACd,KAAA,EACA,OAAA,KACgC;AAChC,MAAA,MAAM,OAAA,GAAU,IAAI,cAAA,CAAe;AAAA,QAC/B,OAAA,EAAS,OAAA;AAAA,QACT,WAAA,EAAa;AAAA,OAChB,CAAA;AAED,MAAA,OAAO,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AAAA,IACzC,CAAA;AA9CI,IAAA,MAAM,WAAA,GAAc,QAAA,IAAY,OAAA,CAAQ,GAAA,CAAI,iBAAA;AAC5C,IAAA,MAAM,eAAA,GAAkB,QAAA,IAAY,OAAA,CAAQ,GAAA,CAAI,qBAAA;AAChD,IAAA,MAAM,MAAA,GAAS,MAAA,IAAU,OAAA,CAAQ,GAAA,CAAI,UAAA;AACrC,IAAA,IAAI,EAAE,WAAA,IAAe,eAAA,CAAA;AACjB,MAAA,MAAM,IAAI,2BAAA,EAA4B;AAC1C,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,SAAA,CAAU;AAAA,MACxB,MAAA;AAAA,MACA,WAAA,EAAa;AAAA,QACT,WAAA;AAAA,QACA;AAAA;AACJ,KACH,CAAA;AAAA,EACL;AAAA,EAEA,MAAa,IAAA,CACT,MAAA,GAAmB,IACnB,OAAA,EACmB;AACnB,IAAA,MAAM,MAAA,GAAqB;AAAA,MACvB,MAAM,EAAC;AAAA,MACP,QAAQ;AAAC,KACb;AAEA,IAAA,MAAM,OAAA,CAAQ,GAAA;AAAA,MACV,MAAA,CAAO,GAAA;AAAA,QAAI,CAAC,KAAA,KACR,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,OAAO,CAAA,CACtB,IAAA,CAAK,MAAM,MAAA,CAAO,KAAK,IAAA,CAAK,EAAE,KAAA,EAAO,CAAC,CAAA,CACtC,KAAA;AAAA,UAAM,CAAC,KAAA,KACJ,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,CAAM,OAAA,EAAS;AAAA;AACtD;AACR,KACJ;AAEA,IAAA,OAAO,MAAA;AAAA,EACX;AAaJ","file":"awsSmsSender.client-LIUIAB4N.mjs","sourcesContent":["import { NotProvidedCredentialsError } from '../../errors';\nimport { ISMSSender } from '../../interfaces';\nimport { SendResult } from '../../types';\nimport { PASSWORD, REGION, USERNAME } from '../../utils/constants';\nimport {\n PublishCommand,\n PublishCommandOutput,\n SNSClient,\n} from '@aws-sdk/client-sns';\n\nexport default class AwsSMSSenderClient implements ISMSSender {\n private client: SNSClient;\n constructor() {\n const accessKeyId = USERNAME || process.env.AWS_ACCESS_KEY_ID;\n const secretAccessKey = PASSWORD || process.env.AWS_SECRET_ACCESS_KEY;\n const region = REGION || process.env.AWS_REGION;\n if (!(accessKeyId && secretAccessKey))\n throw new NotProvidedCredentialsError();\n this.client = new SNSClient({\n region: region,\n credentials: {\n accessKeyId: accessKeyId,\n secretAccessKey: secretAccessKey,\n },\n });\n }\n\n public async send(\n phones: string[] = [],\n message: string,\n ): Promise<SendResult> {\n const result: SendResult = {\n sent: [],\n failed: [],\n };\n\n await Promise.all(\n phones.map((phone) =>\n this.sendOne(phone, message)\n .then(() => result.sent.push({ phone }))\n .catch((error) =>\n result.failed.push({ phone, error: error.message }),\n ),\n ),\n );\n\n return result;\n }\n\n private sendOne = async (\n phone: string,\n message: string,\n ): Promise<PublishCommandOutput> => {\n const command = new PublishCommand({\n Message: message,\n PhoneNumber: phone,\n });\n\n return await this.client.send(command);\n };\n}\n"]}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { USERNAME, PASSWORD, FROM, NotProvidedCredentialsError } from './chunk-
|
|
1
|
+
import { USERNAME, PASSWORD, FROM, NotProvidedCredentialsError } from './chunk-GH3HZBE6.mjs';
|
|
2
2
|
import { SmsClient } from '@azure/communication-sms';
|
|
3
3
|
|
|
4
4
|
var AzureSMSSenderClient = class {
|
|
5
5
|
constructor() {
|
|
6
|
-
|
|
6
|
+
var _a;
|
|
7
|
+
if (!(USERNAME && PASSWORD && FROM) && !process.env.COMMUNICATION_SERVICES_CONNECTION_STRING)
|
|
7
8
|
throw new NotProvidedCredentialsError();
|
|
8
|
-
const connectionString = `endpoint=https://${USERNAME}.communication.azure.com/;accesskey=${PASSWORD}`;
|
|
9
|
+
const connectionString = (_a = process.env.COMMUNICATION_SERVICES_CONNECTION_STRING) != null ? _a : `endpoint=https://${USERNAME}.communication.azure.com/;accesskey=${PASSWORD}`;
|
|
9
10
|
this.client = new SmsClient(connectionString);
|
|
10
11
|
}
|
|
11
12
|
async send(phones, message) {
|
|
@@ -31,5 +32,5 @@ var AzureSMSSenderClient = class {
|
|
|
31
32
|
};
|
|
32
33
|
|
|
33
34
|
export { AzureSMSSenderClient as default };
|
|
34
|
-
//# sourceMappingURL=azureSmsSender.client-
|
|
35
|
-
//# sourceMappingURL=azureSmsSender.client-
|
|
35
|
+
//# sourceMappingURL=azureSmsSender.client-KHGAWQJU.mjs.map
|
|
36
|
+
//# sourceMappingURL=azureSmsSender.client-KHGAWQJU.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/services/clients/azureSmsSender.client.ts"],"names":[],"mappings":";;;AAMA,IAAqB,uBAArB,MAAgE;AAAA,EAE5D,WAAA,GAAc;AARlB,IAAA,IAAA,EAAA;AASQ,IAAA,IACI,EAAE,QAAA,IAAY,QAAA,IAAY,IAAA,CAAA,IAC1B,CAAC,QAAQ,GAAA,CAAI,wCAAA;AAEb,MAAA,MAAM,IAAI,2BAAA,EAA4B;AAC1C,IAAA,MAAM,gBAAA,GAAA,CACF,aAAQ,GAAA,CAAI,wCAAA,KAAZ,YACA,CAAA,iBAAA,EAAoB,QAAQ,uCAAuC,QAAQ,CAAA,CAAA;AAC/E,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,SAAA,CAAU,gBAAgB,CAAA;AAAA,EAChD;AAAA,EAEA,MAAa,IAAA,CAAK,MAAA,EAAkB,OAAA,EAAsC;AACtE,IAAA,MAAM,MAAA,GAAqB;AAAA,MACvB,MAAM,EAAC;AAAA,MACP,QAAQ;AAAC,KACb;AACA,IAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK;AAAA,MACtC,IAAA,EAAM,IAAA;AAAA,MACN,EAAA,EAAI,MAAA;AAAA,MACJ;AAAA,KACH,CAAA;AAED,IAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,SAAA,KAAc;AAC9B,MAAA,IAAI,SAAA,CAAU,YAAA;AACV,QAAA,MAAA,CAAO,OAAO,IAAA,CAAK;AAAA,UACf,OAAO,SAAA,CAAU,EAAA;AAAA,UACjB,OAAO,SAAA,CAAU;AAAA,SACpB,CAAA;AAAA,kBACO,IAAA,CAAK,IAAA,CAAK,EAAE,KAAA,EAAO,SAAA,CAAU,IAAI,CAAA;AAAA,IACjD,CAAC,CAAA;AAED,IAAA,OAAO,MAAA;AAAA,EACX;AACJ","file":"azureSmsSender.client-KHGAWQJU.mjs","sourcesContent":["import { NotProvidedCredentialsError } from '../../errors';\nimport { ISMSSender } from '../../interfaces';\nimport { SendResult } from '../../types';\nimport { USERNAME, PASSWORD, FROM } from '../../utils/constants';\nimport { SmsClient } from '@azure/communication-sms';\n\nexport default class AzureSMSSenderClient implements ISMSSender {\n client: SmsClient;\n constructor() {\n if (\n !(USERNAME && PASSWORD && FROM) &&\n !process.env.COMMUNICATION_SERVICES_CONNECTION_STRING\n )\n throw new NotProvidedCredentialsError();\n const connectionString =\n process.env.COMMUNICATION_SERVICES_CONNECTION_STRING ??\n `endpoint=https://${USERNAME}.communication.azure.com/;accesskey=${PASSWORD}`;\n this.client = new SmsClient(connectionString);\n }\n\n public async send(phones: string[], message: string): Promise<SendResult> {\n const result: SendResult = {\n sent: [],\n failed: [],\n };\n const smsResults = await this.client.send({\n from: FROM as string,\n to: phones,\n message: message,\n });\n\n smsResults.forEach((smsResult) => {\n if (smsResult.errorMessage)\n result.failed.push({\n phone: smsResult.to,\n error: smsResult.errorMessage,\n });\n else result.sent.push({ phone: smsResult.to });\n });\n\n return result;\n }\n}\n"]}
|
|
@@ -16,11 +16,12 @@ var UnknownProviderError = class extends Error {
|
|
|
16
16
|
|
|
17
17
|
// src/utils/constants.ts
|
|
18
18
|
var SMS_PROVIDER = process.env.SMS_PROVIDER;
|
|
19
|
+
var PLATFORM_CLOUD = process.env.PLATFORM_CLOUD;
|
|
19
20
|
var USERNAME = process.env.SMS_PROVIDER_USERNAME;
|
|
20
21
|
var PASSWORD = process.env.SMS_PROVIDER_PASSWORD;
|
|
21
22
|
var FROM = process.env.SMS_PROVIDER_FROM_NUMBER;
|
|
22
23
|
var REGION = process.env.SMS_PROVIDER_REGION;
|
|
23
24
|
|
|
24
|
-
export { FROM, NotProvidedCredentialsError, PASSWORD, REGION, SMS_PROVIDER, USERNAME, UnknownProviderError };
|
|
25
|
-
//# sourceMappingURL=chunk-
|
|
26
|
-
//# sourceMappingURL=chunk-
|
|
25
|
+
export { FROM, NotProvidedCredentialsError, PASSWORD, PLATFORM_CLOUD, REGION, SMS_PROVIDER, USERNAME, UnknownProviderError };
|
|
26
|
+
//# sourceMappingURL=chunk-GH3HZBE6.mjs.map
|
|
27
|
+
//# sourceMappingURL=chunk-GH3HZBE6.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/errors/notProvidedCredentials.error.ts","../../src/errors/unknownProvider.error.ts","../../src/utils/constants.ts"],"names":[],"mappings":";AAAO,IAAM,2BAAA,GAAN,cAA0C,KAAA,CAAM;AAAA,EACnD,WAAA,GAAc;AACV,IAAA,KAAA,CAAM,sCAAsC,CAAA;AAC5C,IAAA,IAAA,CAAK,IAAA,GAAO,6BAAA;AAAA,EAChB;AACJ;;;ACLO,IAAM,oBAAA,GAAN,cAAmC,KAAA,CAAM;AAAA,EAC5C,WAAA,GAAc;AACV,IAAA,KAAA,CAAM,6CAA6C,CAAA;AACnD,IAAA,IAAA,CAAK,IAAA,GAAO,sBAAA;AAAA,EAChB;AACJ;;;ACLO,IAAM,YAAA,GAAe,QAAQ,GAAA,CAAI;AACjC,IAAM,cAAA,GAAiB,QAAQ,GAAA,CAAI;AAEnC,IAAM,QAAA,GAAW,QAAQ,GAAA,CAAI;AAC7B,IAAM,QAAA,GAAW,QAAQ,GAAA,CAAI;AAC7B,IAAM,IAAA,GAAO,QAAQ,GAAA,CAAI;AACzB,IAAM,MAAA,GAAS,QAAQ,GAAA,CAAI","file":"chunk-GH3HZBE6.mjs","sourcesContent":["export class NotProvidedCredentialsError extends Error {\n constructor() {\n super('SMS sender credentials not provided.');\n this.name = 'NotProvidedCredentialsError';\n }\n}\n","export class UnknownProviderError extends Error {\n constructor() {\n super('Unknown provider. Set PROVIDER env variable');\n this.name = 'UnknownProviderError';\n }\n}\n","export const SMS_PROVIDER = process.env.SMS_PROVIDER;\nexport const PLATFORM_CLOUD = process.env.PLATFORM_CLOUD;\n\nexport const USERNAME = process.env.SMS_PROVIDER_USERNAME;\nexport const PASSWORD = process.env.SMS_PROVIDER_PASSWORD;\nexport const FROM = process.env.SMS_PROVIDER_FROM_NUMBER;\nexport const REGION = process.env.SMS_PROVIDER_REGION;\n"]}
|
package/dist/esm/index.d.mts
CHANGED
package/dist/esm/index.mjs
CHANGED
|
@@ -1,21 +1,33 @@
|
|
|
1
|
-
import { SMS_PROVIDER, UnknownProviderError } from './chunk-
|
|
1
|
+
import { SMS_PROVIDER, UnknownProviderError, PLATFORM_CLOUD } from './chunk-GH3HZBE6.mjs';
|
|
2
|
+
|
|
3
|
+
// src/mappers/qrveyEnvs.mapper.ts
|
|
4
|
+
var getSMSProviderFromPlatformCloud = () => {
|
|
5
|
+
var _a, _b;
|
|
6
|
+
const platformCloudDictionary = {
|
|
7
|
+
AWS: "aws",
|
|
8
|
+
AZURE: "azure"
|
|
9
|
+
};
|
|
10
|
+
return (_b = platformCloudDictionary[(_a = PLATFORM_CLOUD) != null ? _a : ""]) != null ? _b : void 0;
|
|
11
|
+
};
|
|
2
12
|
|
|
3
13
|
// src/services/smsSenderFactory.service.ts
|
|
4
14
|
var SMSSenderFactory = class {
|
|
5
15
|
static async getSMSSender() {
|
|
6
|
-
var _a;
|
|
7
|
-
const provider = (_a = SMS_PROVIDER) == null ? void 0 : _a.toLowerCase();
|
|
16
|
+
var _a, _b, _c;
|
|
17
|
+
const provider = (_b = getSMSProviderFromPlatformCloud()) != null ? _b : (_a = SMS_PROVIDER) == null ? void 0 : _a.toLowerCase();
|
|
8
18
|
if (!provider) throw new UnknownProviderError();
|
|
9
19
|
const { default: SMSSender } = await this.providerModules[provider]();
|
|
10
|
-
|
|
20
|
+
this._smsSender = (_c = this._smsSender) != null ? _c : new SMSSender();
|
|
21
|
+
return this._smsSender;
|
|
11
22
|
}
|
|
12
23
|
};
|
|
13
24
|
SMSSenderFactory.providerModules = {
|
|
14
|
-
twilio: () => import('./twilioSmsSender.client-
|
|
15
|
-
aws: () => import('./awsSmsSender.client-
|
|
16
|
-
azure: () => import('./azureSmsSender.client-
|
|
17
|
-
vonage: () => import('./vonageSmsSender.client-
|
|
25
|
+
twilio: () => import('./twilioSmsSender.client-2Q2EIZIP.mjs'),
|
|
26
|
+
aws: () => import('./awsSmsSender.client-LIUIAB4N.mjs'),
|
|
27
|
+
azure: () => import('./azureSmsSender.client-KHGAWQJU.mjs'),
|
|
28
|
+
vonage: () => import('./vonageSmsSender.client-TD4MHO4D.mjs')
|
|
18
29
|
};
|
|
30
|
+
SMSSenderFactory._smsSender = null;
|
|
19
31
|
|
|
20
32
|
// src/services/smsSender.service.ts
|
|
21
33
|
var SMSSenderService = class {
|
|
@@ -28,6 +40,14 @@ var SMSSenderService = class {
|
|
|
28
40
|
async send(phones, message) {
|
|
29
41
|
return (await SMSSenderFactory.getSMSSender()).send(phones, message);
|
|
30
42
|
}
|
|
43
|
+
static async checkStatus() {
|
|
44
|
+
try {
|
|
45
|
+
await SMSSenderFactory.getSMSSender();
|
|
46
|
+
return true;
|
|
47
|
+
} catch (error) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
31
51
|
};
|
|
32
52
|
|
|
33
53
|
export { SMSSenderService };
|
package/dist/esm/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/smsSenderFactory.service.ts","../../src/services/smsSender.service.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"sources":["../../src/mappers/qrveyEnvs.mapper.ts","../../src/services/smsSenderFactory.service.ts","../../src/services/smsSender.service.ts"],"names":[],"mappings":";;;AAEO,IAAM,kCAAkC,MAAM;AAFrD,EAAA,IAAA,EAAA,EAAA,EAAA;AAGI,EAAA,MAAM,uBAAA,GAAkD;AAAA,IACpD,GAAA,EAAK,KAAA;AAAA,IACL,KAAA,EAAO;AAAA,GACX;AAEA,EAAA,OAAA,CAAO,EAAA,GAAA,uBAAA,CAAA,CAAwB,EAAA,GAAA,cAAA,KAAA,IAAA,GAAA,EAAA,GAAkB,EAAE,CAAA,KAA5C,IAAA,GAAA,EAAA,GAAiD,MAAA;AAC5D,CAAA;;;ACHO,IAAM,mBAAN,MAAuB;AAAA,EAY1B,aAAa,YAAA,GAAoC;AAlBrD,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAmBQ,IAAA,MAAM,QAAA,GAAA,CACF,EAAA,GAAA,+BAAA,EAAgC,KAAhC,IAAA,GAAA,EAAA,GAAA,CAAqC,EAAA,GAAA,YAAA,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAc,WAAA,EAAA;AACvD,IAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,oBAAA,EAAqB;AAE9C,IAAA,MAAM,EAAE,SAAS,SAAA,EAAU,GAAI,MAAM,IAAA,CAAK,eAAA,CAAgB,QAAQ,CAAA,EAAE;AACpE,IAAA,IAAA,CAAK,UAAA,GAAA,CAAa,EAAA,GAAA,IAAA,CAAK,UAAA,KAAL,IAAA,GAAA,EAAA,GAAmB,IAAI,SAAA,EAAU;AACnD,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EAChB;AACJ,CAAA;AArBa,gBAAA,CACM,eAAA,GAGX;AAAA,EACA,MAAA,EAAQ,MAAM,OAAO,uCAAkC,CAAA;AAAA,EACvD,GAAA,EAAK,MAAM,OAAO,oCAA+B,CAAA;AAAA,EACjD,KAAA,EAAO,MAAM,OAAO,sCAAiC,CAAA;AAAA,EACrD,MAAA,EAAQ,MAAM,OAAO,uCAAkC;AAC3D,CAAA;AATS,gBAAA,CAUM,UAAA,GAAgC,IAAA;;;ACb5C,IAAM,mBAAN,MAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO1B,MAAa,IAAA,CAAK,MAAA,EAAkB,OAAA,EAAsC;AACtE,IAAA,OAAA,CAAQ,MAAM,gBAAA,CAAiB,YAAA,EAAa,EAAG,IAAA,CAAK,QAAQ,OAAO,CAAA;AAAA,EACvE;AAAA,EAEA,aAAoB,WAAA,GAAgC;AAChD,IAAA,IAAI;AACA,MAAA,MAAM,iBAAiB,YAAA,EAAa;AACpC,MAAA,OAAO,IAAA;AAAA,IACX,SAAS,KAAA,EAAO;AACZ,MAAA,OAAO,KAAA;AAAA,IACX;AAAA,EACJ;AACJ","file":"index.mjs","sourcesContent":["import { PLATFORM_CLOUD } from '../utils/constants';\n\nexport const getSMSProviderFromPlatformCloud = () => {\n const platformCloudDictionary: Record<string, string> = {\n AWS: 'aws',\n AZURE: 'azure',\n };\n\n return platformCloudDictionary[PLATFORM_CLOUD ?? ''] ?? undefined;\n};\n","import { UnknownProviderError } from '../errors';\nimport { ISMSSender } from '../interfaces';\nimport { SMSProviderModule } from '../types';\nimport { SMS_PROVIDER } from '../utils/constants';\nimport { getSMSProviderFromPlatformCloud } from '../mappers/qrveyEnvs.mapper';\n\nexport class SMSSenderFactory {\n private static providerModules: Record<\n string,\n () => Promise<SMSProviderModule>\n > = {\n twilio: () => import('./clients/twilioSmsSender.client'),\n aws: () => import('./clients/awsSmsSender.client'),\n azure: () => import('./clients/azureSmsSender.client'),\n vonage: () => import('./clients/vonageSmsSender.client'),\n };\n private static _smsSender: ISMSSender | null = null;\n\n static async getSMSSender(): Promise<ISMSSender> {\n const provider =\n getSMSProviderFromPlatformCloud() ?? SMS_PROVIDER?.toLowerCase();\n if (!provider) throw new UnknownProviderError();\n\n const { default: SMSSender } = await this.providerModules[provider]();\n this._smsSender = this._smsSender ?? new SMSSender();\n return this._smsSender;\n }\n}\n","import { SendResult } from '../types';\nimport { SMSSenderFactory } from './smsSenderFactory.service';\n\nexport class SMSSenderService {\n /**\n * Send a message to one or more phones.\n * @param phones - phone numbers to send to\n * @param message - message to send\n * @returns {Promise<SendResult>} Send result.\n */\n public async send(phones: string[], message: string): Promise<SendResult> {\n return (await SMSSenderFactory.getSMSSender()).send(phones, message);\n }\n\n public static async checkStatus(): Promise<boolean> {\n try {\n await SMSSenderFactory.getSMSSender();\n return true;\n } catch (error) {\n return false;\n }\n }\n}\n"]}
|
package/dist/esm/{twilioSmsSender.client-2AYM7Q6Q.mjs → twilioSmsSender.client-2Q2EIZIP.mjs}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FROM, USERNAME, PASSWORD, NotProvidedCredentialsError } from './chunk-
|
|
1
|
+
import { FROM, USERNAME, PASSWORD, NotProvidedCredentialsError } from './chunk-GH3HZBE6.mjs';
|
|
2
2
|
import { Twilio } from 'twilio';
|
|
3
3
|
|
|
4
4
|
var TwilioSMSSenderClient = class {
|
|
@@ -29,5 +29,5 @@ var TwilioSMSSenderClient = class {
|
|
|
29
29
|
};
|
|
30
30
|
|
|
31
31
|
export { TwilioSMSSenderClient as default };
|
|
32
|
-
//# sourceMappingURL=twilioSmsSender.client-
|
|
33
|
-
//# sourceMappingURL=twilioSmsSender.client-
|
|
32
|
+
//# sourceMappingURL=twilioSmsSender.client-2Q2EIZIP.mjs.map
|
|
33
|
+
//# sourceMappingURL=twilioSmsSender.client-2Q2EIZIP.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/services/clients/twilioSmsSender.client.ts"],"names":[],"mappings":";;;AAOA,IAAqB,wBAArB,MAAiE;AAAA,EAE7D,WAAA,GAAc;AA4Bd,IAAA,IAAA,CAAQ,UAAU,CACd,KAAA,EACA,YAEA,IAAA,CAAK,MAAA,CAAO,SAAS,MAAA,CAAO;AAAA,MACxB,IAAA,EAAM,IAAA;AAAA,MACN,EAAA,EAAI,KAAA;AAAA,MACJ,IAAA,EAAM;AAAA,KACT,CAAA;AAnCD,IAAA,IAAI,YAAY,QAAA,IAAY,IAAA;AACxB,MAAA,IAAA,CAAK,MAAA,GAAS,IAAI,MAAA,CAAO,QAAA,EAAU,QAAQ,CAAA;AAAA,SAC1C,MAAM,IAAI,2BAAA,EAA4B;AAAA,EAC/C;AAAA,EAEA,MAAa,IAAA,CACT,MAAA,GAAmB,IACnB,OAAA,EACmB;AACnB,IAAA,MAAM,MAAA,GAAqB;AAAA,MACvB,MAAM,EAAC;AAAA,MACP,QAAQ;AAAC,KACb;AAEA,IAAA,MAAM,OAAA,CAAQ,GAAA;AAAA,MACV,MAAA,CAAO,GAAA;AAAA,QAAI,CAAC,KAAA,KACR,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,OAAO,CAAA,CACtB,IAAA,CAAK,MAAM,MAAA,CAAO,KAAK,IAAA,CAAK,EAAE,KAAA,EAAO,CAAC,CAAA,CACtC,KAAA;AAAA,UAAM,CAAC,KAAA,KACJ,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,CAAM,OAAA,EAAS;AAAA;AACtD;AACR,KACJ;AAEA,IAAA,OAAO,MAAA;AAAA,EACX;AAWJ","file":"twilioSmsSender.client-2Q2EIZIP.mjs","sourcesContent":["import { ISMSSender } from '../../interfaces/smsSender.interface';\nimport { Twilio } from 'twilio';\nimport { USERNAME, PASSWORD, FROM } from '../../utils/constants';\nimport { MessageInstance } from 'twilio/lib/rest/api/v2010/account/message';\nimport { SendResult } from '../../types/sendResult.type';\nimport { NotProvidedCredentialsError } from '../../errors';\n\nexport default class TwilioSMSSenderClient implements ISMSSender {\n private client: Twilio;\n constructor() {\n if (USERNAME && PASSWORD && FROM)\n this.client = new Twilio(USERNAME, PASSWORD);\n else throw new NotProvidedCredentialsError();\n }\n\n public async send(\n phones: string[] = [],\n message: string,\n ): Promise<SendResult> {\n const result: SendResult = {\n sent: [],\n failed: [],\n };\n\n await Promise.all(\n phones.map((phone) =>\n this.sendOne(phone, message)\n .then(() => result.sent.push({ phone }))\n .catch((error) =>\n result.failed.push({ phone, error: error.message }),\n ),\n ),\n );\n\n return result;\n }\n\n private sendOne = (\n phone: string,\n message: string,\n ): Promise<MessageInstance> =>\n this.client.messages.create({\n from: FROM,\n to: phone,\n body: message,\n });\n}\n"]}
|
package/dist/esm/{vonageSmsSender.client-FSND4BQX.mjs → vonageSmsSender.client-TD4MHO4D.mjs}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FROM, USERNAME, PASSWORD, NotProvidedCredentialsError } from './chunk-
|
|
1
|
+
import { FROM, USERNAME, PASSWORD, NotProvidedCredentialsError } from './chunk-GH3HZBE6.mjs';
|
|
2
2
|
import { Vonage } from '@vonage/server-sdk';
|
|
3
3
|
import { Auth } from '@vonage/auth';
|
|
4
4
|
|
|
@@ -26,7 +26,9 @@ var VonageSMSSenderClient = class {
|
|
|
26
26
|
phones.map(
|
|
27
27
|
(phone) => this.sendOne(phone, message).then((data) => {
|
|
28
28
|
var _a;
|
|
29
|
-
if ((_a = data.messages) == null ? void 0 : _a.some(
|
|
29
|
+
if ((_a = data.messages) == null ? void 0 : _a.some(
|
|
30
|
+
(message2) => message2.status !== "0"
|
|
31
|
+
)) {
|
|
30
32
|
result.failed.push({
|
|
31
33
|
phone,
|
|
32
34
|
error: data.messages[0].errorText
|
|
@@ -42,5 +44,5 @@ var VonageSMSSenderClient = class {
|
|
|
42
44
|
};
|
|
43
45
|
|
|
44
46
|
export { VonageSMSSenderClient as default };
|
|
45
|
-
//# sourceMappingURL=vonageSmsSender.client-
|
|
46
|
-
//# sourceMappingURL=vonageSmsSender.client-
|
|
47
|
+
//# sourceMappingURL=vonageSmsSender.client-TD4MHO4D.mjs.map
|
|
48
|
+
//# sourceMappingURL=vonageSmsSender.client-TD4MHO4D.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/services/clients/vonageSmsSender.client.ts"],"names":["message"],"mappings":";;;;AAQA,IAAqB,wBAArB,MAAiE;AAAA,EAE7D,WAAA,GAAc;AAsCd,IAAA,IAAA,CAAQ,UAAU,CAAC,KAAA,EAAe,YAC9B,IAAA,CAAK,MAAA,CAAO,IAAI,IAAA,CAAK;AAAA,MACjB,EAAA,EAAI,KAAA;AAAA,MACJ,IAAA,EAAM,OAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACT,CAAA;AA1CD,IAAA,IAAI,EAAE,YAAY,QAAA,IAAY,IAAA,CAAA;AAC1B,MAAA,MAAM,IAAI,2BAAA,EAA4B;AAC1C,IAAA,MAAM,UAAA,GAAa,IAAI,IAAA,CAAK;AAAA,MACxB,MAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAW;AAAA,KACd,CAAA;AACD,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,MAAA,CAAO,UAAU,CAAA;AAAA,EACvC;AAAA,EAEA,MAAa,IAAA,CAAK,MAAA,EAAkB,OAAA,EAAsC;AACtE,IAAA,MAAM,MAAA,GAAqB;AAAA,MACvB,MAAM,EAAC;AAAA,MACP,QAAQ;AAAC,KACb;AAEA,IAAA,MAAM,OAAA,CAAQ,GAAA;AAAA,MACV,MAAA,CAAO,GAAA;AAAA,QAAI,CAAC,UACR,IAAA,CAAK,OAAA,CAAQ,OAAO,OAAO,CAAA,CAAE,IAAA,CAAK,CAAC,IAAA,KAAS;AA5B5D,UAAA,IAAA,EAAA;AA6BoB,UAAA,IAAA,CACI,EAAA,GAAA,IAAA,CAAK,aAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,IAAA;AAAA,YACX,CAACA,QAAAA,KAAiBA,QAAAA,CAAQ,MAAA,KAAW;AAAA,WAAA,EAE3C;AACE,YAAA,MAAA,CAAO,OAAO,IAAA,CAAK;AAAA,cACf,KAAA;AAAA,cACA,KAAA,EAAO,IAAA,CAAK,QAAA,CAAS,CAAC,CAAA,CAAE;AAAA,aAC3B,CAAA;AAAA,UACL,CAAA,MAAO;AACH,YAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,EAAE,KAAA,EAAO,CAAA;AAAA,UAC9B;AAAA,QACJ,CAAC;AAAA;AACL,KACJ;AAEA,IAAA,OAAO,MAAA;AAAA,EACX;AAQJ","file":"vonageSmsSender.client-TD4MHO4D.mjs","sourcesContent":["import { ISMSSender } from '../../interfaces';\nimport { SendResult } from '../../types';\nimport { Vonage } from '@vonage/server-sdk';\nimport { Auth } from '@vonage/auth';\nimport { USERNAME, PASSWORD, FROM } from '../../utils/constants';\nimport { NotProvidedCredentialsError } from '../../errors';\nimport { SMSMessages } from '@vonage/sms';\n\nexport default class VonageSMSSenderClient implements ISMSSender {\n private client: Vonage;\n constructor() {\n if (!(USERNAME && PASSWORD && FROM))\n throw new NotProvidedCredentialsError();\n const vonageAuth = new Auth({\n apiKey: USERNAME,\n apiSecret: PASSWORD,\n });\n this.client = new Vonage(vonageAuth);\n }\n\n public async send(phones: string[], message: string): Promise<SendResult> {\n const result: SendResult = {\n sent: [],\n failed: [],\n };\n\n await Promise.all(\n phones.map((phone) =>\n this.sendOne(phone, message).then((data) => {\n if (\n data.messages?.some(\n (message: any) => message.status !== '0',\n )\n ) {\n result.failed.push({\n phone,\n error: data.messages[0].errorText,\n });\n } else {\n result.sent.push({ phone });\n }\n }),\n ),\n );\n\n return result;\n }\n\n private sendOne = (phone: string, message: string): Promise<SMSMessages> =>\n this.client.sms.send({\n to: phone,\n text: message,\n from: FROM as string,\n });\n}\n"]}
|
package/dist/types/index.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qrvey/sms",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "1.0.0-554",
|
|
4
4
|
"types": "dist/types/index.d.ts",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"exports": {
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"build:compile:esm": "tsup --config ./tsup.config.esm.ts",
|
|
21
21
|
"build:compile:types": "tsup --config ./tsup.config.types.ts",
|
|
22
22
|
"build:compile": "yarn build:compile:cjs && yarn build:compile:esm && yarn build:compile:types",
|
|
23
|
-
"build": "yarn
|
|
23
|
+
"build": "yarn build:clean && yarn build:compile",
|
|
24
24
|
"prepare-publish": "yarn install && yarn build",
|
|
25
25
|
"publish-package": "yarn prepare-publish && npm publish"
|
|
26
26
|
},
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { PLATFORM_CLOUD } from '../utils/constants';
|
|
2
|
+
|
|
3
|
+
export const getSMSProviderFromPlatformCloud = () => {
|
|
4
|
+
const platformCloudDictionary: Record<string, string> = {
|
|
5
|
+
AWS: 'aws',
|
|
6
|
+
AZURE: 'azure',
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
return platformCloudDictionary[PLATFORM_CLOUD ?? ''] ?? undefined;
|
|
10
|
+
};
|
|
@@ -7,9 +7,14 @@ import { SmsClient } from '@azure/communication-sms';
|
|
|
7
7
|
export default class AzureSMSSenderClient implements ISMSSender {
|
|
8
8
|
client: SmsClient;
|
|
9
9
|
constructor() {
|
|
10
|
-
if (
|
|
10
|
+
if (
|
|
11
|
+
!(USERNAME && PASSWORD && FROM) &&
|
|
12
|
+
!process.env.COMMUNICATION_SERVICES_CONNECTION_STRING
|
|
13
|
+
)
|
|
11
14
|
throw new NotProvidedCredentialsError();
|
|
12
|
-
const connectionString =
|
|
15
|
+
const connectionString =
|
|
16
|
+
process.env.COMMUNICATION_SERVICES_CONNECTION_STRING ??
|
|
17
|
+
`endpoint=https://${USERNAME}.communication.azure.com/;accesskey=${PASSWORD}`;
|
|
13
18
|
this.client = new SmsClient(connectionString);
|
|
14
19
|
}
|
|
15
20
|
|
|
@@ -4,7 +4,7 @@ import { Vonage } from '@vonage/server-sdk';
|
|
|
4
4
|
import { Auth } from '@vonage/auth';
|
|
5
5
|
import { USERNAME, PASSWORD, FROM } from '../../utils/constants';
|
|
6
6
|
import { NotProvidedCredentialsError } from '../../errors';
|
|
7
|
-
import { SMSMessages } from '@vonage/sms
|
|
7
|
+
import { SMSMessages } from '@vonage/sms';
|
|
8
8
|
|
|
9
9
|
export default class VonageSMSSenderClient implements ISMSSender {
|
|
10
10
|
private client: Vonage;
|
|
@@ -28,7 +28,9 @@ export default class VonageSMSSenderClient implements ISMSSender {
|
|
|
28
28
|
phones.map((phone) =>
|
|
29
29
|
this.sendOne(phone, message).then((data) => {
|
|
30
30
|
if (
|
|
31
|
-
data.messages?.some(
|
|
31
|
+
data.messages?.some(
|
|
32
|
+
(message: any) => message.status !== '0',
|
|
33
|
+
)
|
|
32
34
|
) {
|
|
33
35
|
result.failed.push({
|
|
34
36
|
phone,
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { SMSSenderService } from './smsSender.service';
|
|
2
|
+
import { SMSSenderFactory } from './smsSenderFactory.service';
|
|
3
|
+
|
|
4
|
+
jest.mock('./smsSenderFactory.service');
|
|
5
|
+
|
|
6
|
+
describe('SMSSenderService', () => {
|
|
7
|
+
describe('checkStatus', () => {
|
|
8
|
+
afterEach(() => {
|
|
9
|
+
jest.clearAllMocks();
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
it('should return true when getSMSSender resolves', async () => {
|
|
13
|
+
(SMSSenderFactory.getSMSSender as jest.Mock).mockResolvedValue({
|
|
14
|
+
send: jest.fn(),
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
const result = await SMSSenderService.checkStatus();
|
|
18
|
+
expect(result).toBe(true);
|
|
19
|
+
expect(SMSSenderFactory.getSMSSender).toHaveBeenCalled();
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('should return false when getSMSSender rejects', async () => {
|
|
23
|
+
(SMSSenderFactory.getSMSSender as jest.Mock).mockRejectedValue(
|
|
24
|
+
new Error('Provider error'),
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
const result = await SMSSenderService.checkStatus();
|
|
28
|
+
expect(result).toBe(false);
|
|
29
|
+
expect(SMSSenderFactory.getSMSSender).toHaveBeenCalled();
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
});
|
|
@@ -11,4 +11,13 @@ export class SMSSenderService {
|
|
|
11
11
|
public async send(phones: string[], message: string): Promise<SendResult> {
|
|
12
12
|
return (await SMSSenderFactory.getSMSSender()).send(phones, message);
|
|
13
13
|
}
|
|
14
|
+
|
|
15
|
+
public static async checkStatus(): Promise<boolean> {
|
|
16
|
+
try {
|
|
17
|
+
await SMSSenderFactory.getSMSSender();
|
|
18
|
+
return true;
|
|
19
|
+
} catch (error) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
14
23
|
}
|
|
@@ -2,6 +2,7 @@ import { UnknownProviderError } from '../errors';
|
|
|
2
2
|
import { ISMSSender } from '../interfaces';
|
|
3
3
|
import { SMSProviderModule } from '../types';
|
|
4
4
|
import { SMS_PROVIDER } from '../utils/constants';
|
|
5
|
+
import { getSMSProviderFromPlatformCloud } from '../mappers/qrveyEnvs.mapper';
|
|
5
6
|
|
|
6
7
|
export class SMSSenderFactory {
|
|
7
8
|
private static providerModules: Record<
|
|
@@ -13,12 +14,15 @@ export class SMSSenderFactory {
|
|
|
13
14
|
azure: () => import('./clients/azureSmsSender.client'),
|
|
14
15
|
vonage: () => import('./clients/vonageSmsSender.client'),
|
|
15
16
|
};
|
|
17
|
+
private static _smsSender: ISMSSender | null = null;
|
|
16
18
|
|
|
17
19
|
static async getSMSSender(): Promise<ISMSSender> {
|
|
18
|
-
const provider =
|
|
20
|
+
const provider =
|
|
21
|
+
getSMSProviderFromPlatformCloud() ?? SMS_PROVIDER?.toLowerCase();
|
|
19
22
|
if (!provider) throw new UnknownProviderError();
|
|
20
23
|
|
|
21
24
|
const { default: SMSSender } = await this.providerModules[provider]();
|
|
22
|
-
|
|
25
|
+
this._smsSender = this._smsSender ?? new SMSSender();
|
|
26
|
+
return this._smsSender;
|
|
23
27
|
}
|
|
24
28
|
}
|
package/src/utils/constants.ts
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/clients/awsSmsSender.client.ts"],"names":[],"mappings":";;;AAUA,IAAqB,qBAArB,MAA8D;AAAA,EAE1D,WAAc,GAAA;AAqCd,IAAQ,IAAA,CAAA,OAAA,GAAU,OACd,KAAA,EACA,OACgC,KAAA;AAChC,MAAM,MAAA,OAAA,GAAU,IAAI,cAAe,CAAA;AAAA,QAC/B,OAAS,EAAA,OAAA;AAAA,QACT,WAAa,EAAA;AAAA,OAChB,CAAA;AAED,MAAA,OAAO,MAAM,IAAA,CAAK,MAAO,CAAA,IAAA,CAAK,OAAO,CAAA;AAAA,KACzC;AA9CI,IAAM,MAAA,WAAA,GAAc,QAAY,IAAA,OAAA,CAAQ,GAAI,CAAA,iBAAA;AAC5C,IAAM,MAAA,eAAA,GAAkB,QAAY,IAAA,OAAA,CAAQ,GAAI,CAAA,qBAAA;AAChD,IAAM,MAAA,MAAA,GAAS,MAAU,IAAA,OAAA,CAAQ,GAAI,CAAA,UAAA;AACrC,IAAA,IAAI,EAAE,WAAe,IAAA,eAAA,CAAA;AACjB,MAAA,MAAM,IAAI,2BAA4B,EAAA;AAC1C,IAAK,IAAA,CAAA,MAAA,GAAS,IAAI,SAAU,CAAA;AAAA,MACxB,MAAA;AAAA,MACA,WAAa,EAAA;AAAA,QACT,WAAA;AAAA,QACA;AAAA;AACJ,KACH,CAAA;AAAA;AACL,EAEA,MAAa,IAAA,CACT,MAAmB,GAAA,IACnB,OACmB,EAAA;AACnB,IAAA,MAAM,MAAqB,GAAA;AAAA,MACvB,MAAM,EAAC;AAAA,MACP,QAAQ;AAAC,KACb;AAEA,IAAA,MAAM,OAAQ,CAAA,GAAA;AAAA,MACV,MAAO,CAAA,GAAA;AAAA,QAAI,CAAC,KACR,KAAA,IAAA,CAAK,OAAQ,CAAA,KAAA,EAAO,OAAO,CACtB,CAAA,IAAA,CAAK,MAAM,MAAA,CAAO,KAAK,IAAK,CAAA,EAAE,KAAM,EAAC,CAAC,CACtC,CAAA,KAAA;AAAA,UAAM,CAAC,KACJ,KAAA,MAAA,CAAO,MAAO,CAAA,IAAA,CAAK,EAAE,KAAO,EAAA,KAAA,EAAO,KAAM,CAAA,OAAA,EAAS;AAAA;AACtD;AACR,KACJ;AAEA,IAAO,OAAA,MAAA;AAAA;AAcf","file":"awsSmsSender.client-KAGNU24Z.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":[],"mappings":";;;AAMA,IAAqB,uBAArB,MAAgE;AAAA,EAE5D,WAAc,GAAA;AACV,IAAI,IAAA,EAAE,YAAY,QAAY,IAAA,IAAA,CAAA;AAC1B,MAAA,MAAM,IAAI,2BAA4B,EAAA;AAC1C,IAAA,MAAM,gBAAmB,GAAA,CAAA,iBAAA,EAAoB,QAAQ,CAAA,oCAAA,EAAuC,QAAQ,CAAA,CAAA;AACpG,IAAK,IAAA,CAAA,MAAA,GAAS,IAAI,SAAA,CAAU,gBAAgB,CAAA;AAAA;AAChD,EAEA,MAAa,IAAK,CAAA,MAAA,EAAkB,OAAsC,EAAA;AACtE,IAAA,MAAM,MAAqB,GAAA;AAAA,MACvB,MAAM,EAAC;AAAA,MACP,QAAQ;AAAC,KACb;AACA,IAAA,MAAM,UAAa,GAAA,MAAM,IAAK,CAAA,MAAA,CAAO,IAAK,CAAA;AAAA,MACtC,IAAM,EAAA,IAAA;AAAA,MACN,EAAI,EAAA,MAAA;AAAA,MACJ;AAAA,KACH,CAAA;AAED,IAAW,UAAA,CAAA,OAAA,CAAQ,CAAC,SAAc,KAAA;AAC9B,MAAA,IAAI,SAAU,CAAA,YAAA;AACV,QAAA,MAAA,CAAO,OAAO,IAAK,CAAA;AAAA,UACf,OAAO,SAAU,CAAA,EAAA;AAAA,UACjB,OAAO,SAAU,CAAA;AAAA,SACpB,CAAA;AAAA,kBACO,IAAK,CAAA,IAAA,CAAK,EAAE,KAAO,EAAA,SAAA,CAAU,IAAI,CAAA;AAAA,KAChD,CAAA;AAED,IAAO,OAAA,MAAA;AAAA;AAEf","file":"azureSmsSender.client-4MHOTRQ7.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 (!(USERNAME && PASSWORD && FROM))\n throw new NotProvidedCredentialsError();\n const connectionString = `endpoint=https://${USERNAME}.communication.azure.com/;accesskey=${PASSWORD}`;\n this.client = new SmsClient(connectionString);\n }\n\n public async send(phones: string[], message: string): Promise<SendResult> {\n const result: SendResult = {\n sent: [],\n failed: [],\n };\n const smsResults = await this.client.send({\n from: FROM as string,\n to: phones,\n message: message,\n });\n\n smsResults.forEach((smsResult) => {\n if (smsResult.errorMessage)\n result.failed.push({\n phone: smsResult.to,\n error: smsResult.errorMessage,\n });\n else result.sent.push({ phone: smsResult.to });\n });\n\n return result;\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/errors/notProvidedCredentials.error.ts","../../src/errors/unknownProvider.error.ts","../../src/utils/constants.ts"],"names":[],"mappings":";AAAa,IAAA,2BAAA,GAAN,cAA0C,KAAM,CAAA;AAAA,EACnD,WAAc,GAAA;AACV,IAAA,KAAA,CAAM,sCAAsC,CAAA;AAC5C,IAAA,IAAA,CAAK,IAAO,GAAA,6BAAA;AAAA;AAEpB;;;ACLa,IAAA,oBAAA,GAAN,cAAmC,KAAM,CAAA;AAAA,EAC5C,WAAc,GAAA;AACV,IAAA,KAAA,CAAM,6CAA6C,CAAA;AACnD,IAAA,IAAA,CAAK,IAAO,GAAA,sBAAA;AAAA;AAEpB;;;ACLa,IAAA,YAAA,GAAe,QAAQ,GAAI,CAAA;AAE3B,IAAA,QAAA,GAAW,QAAQ,GAAI,CAAA;AACvB,IAAA,QAAA,GAAW,QAAQ,GAAI,CAAA;AACvB,IAAA,IAAA,GAAO,QAAQ,GAAI,CAAA;AACnB,IAAA,MAAA,GAAS,QAAQ,GAAI,CAAA","file":"chunk-NCQDKWNI.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;\n\nexport const USERNAME = process.env.SMS_PROVIDER_USERNAME;\nexport const PASSWORD = process.env.SMS_PROVIDER_PASSWORD;\nexport const FROM = process.env.SMS_PROVIDER_FROM_NUMBER;\nexport const REGION = process.env.SMS_PROVIDER_REGION;\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/clients/twilioSmsSender.client.ts"],"names":[],"mappings":";;;AAOA,IAAqB,wBAArB,MAAiE;AAAA,EAE7D,WAAc,GAAA;AA4Bd,IAAA,IAAA,CAAQ,UAAU,CACd,KAAA,EACA,YAEA,IAAK,CAAA,MAAA,CAAO,SAAS,MAAO,CAAA;AAAA,MACxB,IAAM,EAAA,IAAA;AAAA,MACN,EAAI,EAAA,KAAA;AAAA,MACJ,IAAM,EAAA;AAAA,KACT,CAAA;AAnCD,IAAA,IAAI,YAAY,QAAY,IAAA,IAAA;AACxB,MAAA,IAAA,CAAK,MAAS,GAAA,IAAI,MAAO,CAAA,QAAA,EAAU,QAAQ,CAAA;AAAA,SAC1C,MAAM,IAAI,2BAA4B,EAAA;AAAA;AAC/C,EAEA,MAAa,IAAA,CACT,MAAmB,GAAA,IACnB,OACmB,EAAA;AACnB,IAAA,MAAM,MAAqB,GAAA;AAAA,MACvB,MAAM,EAAC;AAAA,MACP,QAAQ;AAAC,KACb;AAEA,IAAA,MAAM,OAAQ,CAAA,GAAA;AAAA,MACV,MAAO,CAAA,GAAA;AAAA,QAAI,CAAC,KACR,KAAA,IAAA,CAAK,OAAQ,CAAA,KAAA,EAAO,OAAO,CACtB,CAAA,IAAA,CAAK,MAAM,MAAA,CAAO,KAAK,IAAK,CAAA,EAAE,KAAM,EAAC,CAAC,CACtC,CAAA,KAAA;AAAA,UAAM,CAAC,KACJ,KAAA,MAAA,CAAO,MAAO,CAAA,IAAA,CAAK,EAAE,KAAO,EAAA,KAAA,EAAO,KAAM,CAAA,OAAA,EAAS;AAAA;AACtD;AACR,KACJ;AAEA,IAAO,OAAA,MAAA;AAAA;AAYf","file":"twilioSmsSender.client-2AYM7Q6Q.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":["message"],"mappings":";;;;AAQA,IAAqB,wBAArB,MAAiE;AAAA,EAE7D,WAAc,GAAA;AAoCd,IAAA,IAAA,CAAQ,UAAU,CAAC,KAAA,EAAe,YAC9B,IAAK,CAAA,MAAA,CAAO,IAAI,IAAK,CAAA;AAAA,MACjB,EAAI,EAAA,KAAA;AAAA,MACJ,IAAM,EAAA,OAAA;AAAA,MACN,IAAM,EAAA;AAAA,KACT,CAAA;AAxCD,IAAI,IAAA,EAAE,YAAY,QAAY,IAAA,IAAA,CAAA;AAC1B,MAAA,MAAM,IAAI,2BAA4B,EAAA;AAC1C,IAAM,MAAA,UAAA,GAAa,IAAI,IAAK,CAAA;AAAA,MACxB,MAAQ,EAAA,QAAA;AAAA,MACR,SAAW,EAAA;AAAA,KACd,CAAA;AACD,IAAK,IAAA,CAAA,MAAA,GAAS,IAAI,MAAA,CAAO,UAAU,CAAA;AAAA;AACvC,EAEA,MAAa,IAAK,CAAA,MAAA,EAAkB,OAAsC,EAAA;AACtE,IAAA,MAAM,MAAqB,GAAA;AAAA,MACvB,MAAM,EAAC;AAAA,MACP,QAAQ;AAAC,KACb;AAEA,IAAA,MAAM,OAAQ,CAAA,GAAA;AAAA,MACV,MAAO,CAAA,GAAA;AAAA,QAAI,CAAC,UACR,IAAK,CAAA,OAAA,CAAQ,OAAO,OAAO,CAAA,CAAE,IAAK,CAAA,CAAC,IAAS,KAAA;AA5B5D,UAAA,IAAA,EAAA;AA6BoB,UACI,IAAA,CAAA,EAAA,GAAA,IAAA,CAAK,aAAL,IAAe,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAK,CAACA,QAAYA,KAAAA,QAAAA,CAAQ,WAAW,GACtD,CAAA,EAAA;AACE,YAAA,MAAA,CAAO,OAAO,IAAK,CAAA;AAAA,cACf,KAAA;AAAA,cACA,KAAO,EAAA,IAAA,CAAK,QAAS,CAAA,CAAC,CAAE,CAAA;AAAA,aAC3B,CAAA;AAAA,WACE,MAAA;AACH,YAAA,MAAA,CAAO,IAAK,CAAA,IAAA,CAAK,EAAE,KAAA,EAAO,CAAA;AAAA;AAC9B,SACH;AAAA;AACL,KACJ;AAEA,IAAO,OAAA,MAAA;AAAA;AASf","file":"vonageSmsSender.client-FSND4BQX.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/dist/lib/types/SMSMessages';\n\nexport default class VonageSMSSenderClient implements ISMSSender {\n private client: Vonage;\n constructor() {\n if (!(USERNAME && PASSWORD && FROM))\n throw new NotProvidedCredentialsError();\n const vonageAuth = new Auth({\n apiKey: USERNAME,\n apiSecret: PASSWORD,\n });\n this.client = new Vonage(vonageAuth);\n }\n\n public async send(phones: string[], message: string): Promise<SendResult> {\n const result: SendResult = {\n sent: [],\n failed: [],\n };\n\n await Promise.all(\n phones.map((phone) =>\n this.sendOne(phone, message).then((data) => {\n if (\n data.messages?.some((message) => message.status !== '0')\n ) {\n result.failed.push({\n phone,\n error: data.messages[0].errorText,\n });\n } else {\n result.sent.push({ phone });\n }\n }),\n ),\n );\n\n return result;\n }\n\n private sendOne = (phone: string, message: string): Promise<SMSMessages> =>\n this.client.sms.send({\n to: phone,\n text: message,\n from: FROM as string,\n });\n}\n"]}
|