@webiny/api-mailer 0.0.0-unstable.1e66d121db
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/LICENSE +21 -0
- package/README.md +14 -0
- package/context.d.ts +3 -0
- package/context.js +24 -0
- package/context.js.map +1 -0
- package/crud/group.d.ts +2 -0
- package/crud/group.js +20 -0
- package/crud/group.js.map +1 -0
- package/crud/mailer/onBeforeSend.d.ts +7 -0
- package/crud/mailer/onBeforeSend.js +69 -0
- package/crud/mailer/onBeforeSend.js.map +1 -0
- package/crud/mailer.crud.d.ts +2 -0
- package/crud/mailer.crud.js +123 -0
- package/crud/mailer.crud.js.map +1 -0
- package/crud/settings/hooks.d.ts +5 -0
- package/crud/settings/hooks.js +55 -0
- package/crud/settings/hooks.js.map +1 -0
- package/crud/settings/model.d.ts +3 -0
- package/crud/settings/model.js +72 -0
- package/crud/settings/model.js.map +1 -0
- package/crud/settings/password.d.ts +7 -0
- package/crud/settings/password.js +71 -0
- package/crud/settings/password.js.map +1 -0
- package/crud/settings/secret.d.ts +1 -0
- package/crud/settings/secret.js +23 -0
- package/crud/settings/secret.js.map +1 -0
- package/crud/settings/transform.d.ts +13 -0
- package/crud/settings/transform.js +56 -0
- package/crud/settings/transform.js.map +1 -0
- package/crud/settings/validation.d.ts +4 -0
- package/crud/settings/validation.js +37 -0
- package/crud/settings/validation.js.map +1 -0
- package/crud/settings.crud.d.ts +5 -0
- package/crud/settings.crud.js +321 -0
- package/crud/settings.crud.js.map +1 -0
- package/crud/transport/onTransportBeforeSend.d.ts +7 -0
- package/crud/transport/onTransportBeforeSend.js +69 -0
- package/crud/transport/onTransportBeforeSend.js.map +1 -0
- package/crud/transporter.crud.d.ts +2 -0
- package/crud/transporter.crud.js +182 -0
- package/crud/transporter.crud.js.map +1 -0
- package/graphql/index.d.ts +1 -0
- package/graphql/index.js +14 -0
- package/graphql/index.js.map +1 -0
- package/graphql/settings.d.ts +3 -0
- package/graphql/settings.js +107 -0
- package/graphql/settings.js.map +1 -0
- package/index.d.ts +7 -0
- package/index.js +65 -0
- package/index.js.map +1 -0
- package/mailers/createDummyMailer.d.ts +5 -0
- package/mailers/createDummyMailer.js +24 -0
- package/mailers/createDummyMailer.js.map +1 -0
- package/mailers/createSmtpMailer.d.ts +13 -0
- package/mailers/createSmtpMailer.js +106 -0
- package/mailers/createSmtpMailer.js.map +1 -0
- package/package.json +65 -0
- package/plugins/CreateTransportPlugin.d.ts +17 -0
- package/plugins/CreateTransportPlugin.js +34 -0
- package/plugins/CreateTransportPlugin.js.map +1 -0
- package/plugins/index.d.ts +1 -0
- package/plugins/index.js +18 -0
- package/plugins/index.js.map +1 -0
- package/transports/createDummyTransport.d.ts +5 -0
- package/transports/createDummyTransport.js +25 -0
- package/transports/createDummyTransport.js.map +1 -0
- package/transports/createSmtpTransport.d.ts +12 -0
- package/transports/createSmtpTransport.js +80 -0
- package/transports/createSmtpTransport.js.map +1 -0
- package/types.d.ts +148 -0
- package/types.js +5 -0
- package/types.js.map +1 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) Webiny
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# @webiny/api-mailer
|
|
2
|
+
[](https://www.npmjs.com/package/@webiny/api-mailer)
|
|
3
|
+
[](https://www.npmjs.com/package/@webiny/api-mailer)
|
|
4
|
+
[](https://github.com/prettier/prettier)
|
|
5
|
+
[](http://makeapullrequest.com)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
## Install
|
|
9
|
+
```
|
|
10
|
+
yarn add @webiny/api-mailer
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Documentation
|
|
14
|
+
[Webiny Documentation > Overview > Features > Mailer](https://www.webiny.com/docs/overview/features/mailer)
|
package/context.d.ts
ADDED
package/context.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.createMailerContext = void 0;
|
|
9
|
+
|
|
10
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
11
|
+
|
|
12
|
+
var _api = require("@webiny/api");
|
|
13
|
+
|
|
14
|
+
var _transporter = require("./crud/transporter.crud");
|
|
15
|
+
|
|
16
|
+
var _settings = require("./crud/settings.crud");
|
|
17
|
+
|
|
18
|
+
const createMailerContext = () => {
|
|
19
|
+
return new _api.ContextPlugin(async context => {
|
|
20
|
+
context.mailer = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, await (0, _transporter.createTransporterCrud)(context)), await (0, _settings.createSettingsCrud)(context));
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
exports.createMailerContext = createMailerContext;
|
package/context.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createMailerContext","ContextPlugin","context","mailer","createTransporterCrud","createSettingsCrud"],"sources":["context.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport { MailerContext } from \"./types\";\nimport { createTransporterCrud } from \"~/crud/transporter.crud\";\nimport { createSettingsCrud } from \"~/crud/settings.crud\";\n\nexport const createMailerContext = () => {\n return new ContextPlugin<MailerContext>(async context => {\n context.mailer = {\n ...(await createTransporterCrud(context)),\n ...(await createSettingsCrud(context))\n };\n });\n};\n"],"mappings":";;;;;;;;;;;AAAA;;AAEA;;AACA;;AAEO,MAAMA,mBAAmB,GAAG,MAAM;EACrC,OAAO,IAAIC,kBAAJ,CAAiC,MAAMC,OAAN,IAAiB;IACrDA,OAAO,CAACC,MAAR,+DACQ,MAAM,IAAAC,kCAAA,EAAsBF,OAAtB,CADd,GAEQ,MAAM,IAAAG,4BAAA,EAAmBH,OAAnB,CAFd;EAIH,CALM,CAAP;AAMH,CAPM"}
|
package/crud/group.d.ts
ADDED
package/crud/group.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createGroup = void 0;
|
|
7
|
+
|
|
8
|
+
var _apiHeadlessCms = require("@webiny/api-headless-cms");
|
|
9
|
+
|
|
10
|
+
const createGroup = () => {
|
|
11
|
+
return (0, _apiHeadlessCms.createCmsGroup)({
|
|
12
|
+
name: "Mailer Group",
|
|
13
|
+
description: "Mailer Group for CMS",
|
|
14
|
+
id: "mailerGroup",
|
|
15
|
+
slug: "mailerGroup",
|
|
16
|
+
icon: "none"
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
exports.createGroup = createGroup;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createGroup","createCmsGroup","name","description","id","slug","icon"],"sources":["group.ts"],"sourcesContent":["import { CmsGroupPlugin, createCmsGroup } from \"@webiny/api-headless-cms\";\n\nexport const createGroup = (): CmsGroupPlugin => {\n return createCmsGroup({\n name: \"Mailer Group\",\n description: \"Mailer Group for CMS\",\n id: \"mailerGroup\",\n slug: \"mailerGroup\",\n icon: \"none\"\n });\n};\n"],"mappings":";;;;;;;AAAA;;AAEO,MAAMA,WAAW,GAAG,MAAsB;EAC7C,OAAO,IAAAC,8BAAA,EAAe;IAClBC,IAAI,EAAE,cADY;IAElBC,WAAW,EAAE,sBAFK;IAGlBC,EAAE,EAAE,aAHc;IAIlBC,IAAI,EAAE,aAJY;IAKlBC,IAAI,EAAE;EALY,CAAf,CAAP;AAOH,CARM"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Topic } from "@webiny/pubsub/types";
|
|
2
|
+
import { OnBeforeMailerSendParams } from "../../types";
|
|
3
|
+
interface AttachOnBeforeSendParams {
|
|
4
|
+
onBeforeSend: Topic<OnBeforeMailerSendParams>;
|
|
5
|
+
}
|
|
6
|
+
export declare const attachOnBeforeSend: (params: AttachOnBeforeSendParams) => void;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.attachOnBeforeSend = void 0;
|
|
9
|
+
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
|
|
12
|
+
var _joi = _interopRequireDefault(require("joi"));
|
|
13
|
+
|
|
14
|
+
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
15
|
+
|
|
16
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
17
|
+
|
|
18
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
19
|
+
|
|
20
|
+
const requiredString = _joi.default.string().required();
|
|
21
|
+
|
|
22
|
+
const requiredEmail = requiredString.email();
|
|
23
|
+
|
|
24
|
+
const schema = _joi.default.object({
|
|
25
|
+
to: _joi.default.array().items(requiredEmail).required(),
|
|
26
|
+
from: requiredEmail,
|
|
27
|
+
subject: requiredString.max(1024),
|
|
28
|
+
cc: _joi.default.array().items(requiredEmail),
|
|
29
|
+
bcc: _joi.default.array().items(requiredEmail),
|
|
30
|
+
replyTo: _joi.default.string().email(),
|
|
31
|
+
text: requiredString.min(10),
|
|
32
|
+
html: _joi.default.string()
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
const attachOnBeforeSend = params => {
|
|
36
|
+
const {
|
|
37
|
+
onBeforeSend
|
|
38
|
+
} = params;
|
|
39
|
+
onBeforeSend.subscribe(async ({
|
|
40
|
+
data: input
|
|
41
|
+
}) => {
|
|
42
|
+
let result;
|
|
43
|
+
|
|
44
|
+
try {
|
|
45
|
+
result = await schema.validate(input);
|
|
46
|
+
|
|
47
|
+
if (!result.error) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
} catch (ex) {
|
|
51
|
+
throw new _error.default({
|
|
52
|
+
message: "Error while validating e-mail params.",
|
|
53
|
+
code: "VALIDATION_ERROR",
|
|
54
|
+
data: {
|
|
55
|
+
input,
|
|
56
|
+
error: ex
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
throw new _error.default({
|
|
62
|
+
message: "Error while validating e-mail params.",
|
|
63
|
+
code: "VALIDATION_ERROR",
|
|
64
|
+
data: _objectSpread({}, result.error)
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
exports.attachOnBeforeSend = attachOnBeforeSend;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["requiredString","joi","string","required","requiredEmail","email","schema","object","to","array","items","from","subject","max","cc","bcc","replyTo","text","min","html","attachOnBeforeSend","params","onBeforeSend","subscribe","data","input","result","validate","error","ex","WebinyError","message","code"],"sources":["onBeforeSend.ts"],"sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { MailerSendData, OnBeforeMailerSendParams } from \"~/types\";\nimport joi from \"joi\";\nimport WebinyError from \"@webiny/error\";\n\nconst requiredString = joi.string().required();\nconst requiredEmail = requiredString.email();\n\nconst schema = joi.object<MailerSendData>({\n to: joi.array().items(requiredEmail).required(),\n from: requiredEmail,\n subject: requiredString.max(1024),\n cc: joi.array().items(requiredEmail),\n bcc: joi.array().items(requiredEmail),\n replyTo: joi.string().email(),\n text: requiredString.min(10),\n html: joi.string()\n});\n\ninterface AttachOnBeforeSendParams {\n onBeforeSend: Topic<OnBeforeMailerSendParams>;\n}\nexport const attachOnBeforeSend = (params: AttachOnBeforeSendParams) => {\n const { onBeforeSend } = params;\n\n onBeforeSend.subscribe(async ({ data: input }) => {\n let result: joi.ValidationResult<MailerSendData>;\n try {\n result = await schema.validate(input);\n\n if (!result.error) {\n return;\n }\n } catch (ex) {\n throw new WebinyError({\n message: \"Error while validating e-mail params.\",\n code: \"VALIDATION_ERROR\",\n data: {\n input,\n error: ex\n }\n });\n }\n throw new WebinyError({\n message: \"Error while validating e-mail params.\",\n code: \"VALIDATION_ERROR\",\n data: {\n ...result.error\n }\n });\n });\n};\n"],"mappings":";;;;;;;;;;;AAEA;;AACA;;;;;;AAEA,MAAMA,cAAc,GAAGC,YAAA,CAAIC,MAAJ,GAAaC,QAAb,EAAvB;;AACA,MAAMC,aAAa,GAAGJ,cAAc,CAACK,KAAf,EAAtB;;AAEA,MAAMC,MAAM,GAAGL,YAAA,CAAIM,MAAJ,CAA2B;EACtCC,EAAE,EAAEP,YAAA,CAAIQ,KAAJ,GAAYC,KAAZ,CAAkBN,aAAlB,EAAiCD,QAAjC,EADkC;EAEtCQ,IAAI,EAAEP,aAFgC;EAGtCQ,OAAO,EAAEZ,cAAc,CAACa,GAAf,CAAmB,IAAnB,CAH6B;EAItCC,EAAE,EAAEb,YAAA,CAAIQ,KAAJ,GAAYC,KAAZ,CAAkBN,aAAlB,CAJkC;EAKtCW,GAAG,EAAEd,YAAA,CAAIQ,KAAJ,GAAYC,KAAZ,CAAkBN,aAAlB,CALiC;EAMtCY,OAAO,EAAEf,YAAA,CAAIC,MAAJ,GAAaG,KAAb,EAN6B;EAOtCY,IAAI,EAAEjB,cAAc,CAACkB,GAAf,CAAmB,EAAnB,CAPgC;EAQtCC,IAAI,EAAElB,YAAA,CAAIC,MAAJ;AARgC,CAA3B,CAAf;;AAcO,MAAMkB,kBAAkB,GAAIC,MAAD,IAAsC;EACpE,MAAM;IAAEC;EAAF,IAAmBD,MAAzB;EAEAC,YAAY,CAACC,SAAb,CAAuB,OAAO;IAAEC,IAAI,EAAEC;EAAR,CAAP,KAA2B;IAC9C,IAAIC,MAAJ;;IACA,IAAI;MACAA,MAAM,GAAG,MAAMpB,MAAM,CAACqB,QAAP,CAAgBF,KAAhB,CAAf;;MAEA,IAAI,CAACC,MAAM,CAACE,KAAZ,EAAmB;QACf;MACH;IACJ,CAND,CAME,OAAOC,EAAP,EAAW;MACT,MAAM,IAAIC,cAAJ,CAAgB;QAClBC,OAAO,EAAE,uCADS;QAElBC,IAAI,EAAE,kBAFY;QAGlBR,IAAI,EAAE;UACFC,KADE;UAEFG,KAAK,EAAEC;QAFL;MAHY,CAAhB,CAAN;IAQH;;IACD,MAAM,IAAIC,cAAJ,CAAgB;MAClBC,OAAO,EAAE,uCADS;MAElBC,IAAI,EAAE,kBAFY;MAGlBR,IAAI,oBACGE,MAAM,CAACE,KADV;IAHc,CAAhB,CAAN;EAOH,CAzBD;AA0BH,CA7BM"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.createMailerCrud = void 0;
|
|
9
|
+
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
|
|
12
|
+
var _pubsub = require("@webiny/pubsub");
|
|
13
|
+
|
|
14
|
+
var _onBeforeSend = require("./mailer/onBeforeSend");
|
|
15
|
+
|
|
16
|
+
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
17
|
+
|
|
18
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
19
|
+
|
|
20
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
21
|
+
|
|
22
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
23
|
+
|
|
24
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
25
|
+
|
|
26
|
+
const createDefaultMailer = async () => {
|
|
27
|
+
return Promise.resolve().then(() => _interopRequireWildcard(require("../mailers/createSmtpMailer"))).then(module => {
|
|
28
|
+
return module.createSmtpMailer();
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const createMailerCrud = config => {
|
|
33
|
+
let defaultMailer = (config === null || config === void 0 ? void 0 : config.mailer) || createDefaultMailer;
|
|
34
|
+
/**
|
|
35
|
+
* We define possible events to be hooked into.
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
const onBeforeSend = (0, _pubsub.createTopic)();
|
|
39
|
+
const onAfterSend = (0, _pubsub.createTopic)();
|
|
40
|
+
const onError = (0, _pubsub.createTopic)();
|
|
41
|
+
/**
|
|
42
|
+
* We attach our default ones.
|
|
43
|
+
*/
|
|
44
|
+
|
|
45
|
+
(0, _onBeforeSend.attachOnBeforeSend)({
|
|
46
|
+
onBeforeSend
|
|
47
|
+
});
|
|
48
|
+
let initializedMailer;
|
|
49
|
+
|
|
50
|
+
const getMailer = async () => {
|
|
51
|
+
if (initializedMailer) {
|
|
52
|
+
return initializedMailer;
|
|
53
|
+
} else if (!defaultMailer) {
|
|
54
|
+
throw new _error.default({
|
|
55
|
+
message: "Mailer is not set.",
|
|
56
|
+
code: "MAILER_NOT_SET_ERROR"
|
|
57
|
+
});
|
|
58
|
+
} else if (typeof defaultMailer === "function") {
|
|
59
|
+
try {
|
|
60
|
+
initializedMailer = await defaultMailer();
|
|
61
|
+
return initializedMailer;
|
|
62
|
+
} catch (ex) {
|
|
63
|
+
throw new _error.default({
|
|
64
|
+
message: "Error while getting mailer.",
|
|
65
|
+
code: "MAILER_ERROR",
|
|
66
|
+
data: {
|
|
67
|
+
error: ex
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
initializedMailer = defaultMailer;
|
|
74
|
+
return initializedMailer;
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
return {
|
|
78
|
+
onBeforeSend,
|
|
79
|
+
onAfterSend,
|
|
80
|
+
onError,
|
|
81
|
+
getMailer,
|
|
82
|
+
setMailer: target => {
|
|
83
|
+
initializedMailer = undefined;
|
|
84
|
+
defaultMailer = target;
|
|
85
|
+
},
|
|
86
|
+
send: async ({
|
|
87
|
+
data
|
|
88
|
+
}) => {
|
|
89
|
+
const mailer = await getMailer();
|
|
90
|
+
|
|
91
|
+
try {
|
|
92
|
+
await onBeforeSend.publish({
|
|
93
|
+
data
|
|
94
|
+
});
|
|
95
|
+
const response = await mailer.send(data);
|
|
96
|
+
await onAfterSend.publish({
|
|
97
|
+
data
|
|
98
|
+
});
|
|
99
|
+
return {
|
|
100
|
+
result: response.result,
|
|
101
|
+
error: response.error
|
|
102
|
+
};
|
|
103
|
+
} catch (ex) {
|
|
104
|
+
await onError.publish({
|
|
105
|
+
error: ex,
|
|
106
|
+
data
|
|
107
|
+
});
|
|
108
|
+
return {
|
|
109
|
+
result: null,
|
|
110
|
+
error: {
|
|
111
|
+
message: ex.message,
|
|
112
|
+
code: ex.code,
|
|
113
|
+
data: _objectSpread({
|
|
114
|
+
data
|
|
115
|
+
}, ex.data)
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
exports.createMailerCrud = createMailerCrud;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createDefaultMailer","then","module","createSmtpMailer","createMailerCrud","config","defaultMailer","mailer","onBeforeSend","createTopic","onAfterSend","onError","attachOnBeforeSend","initializedMailer","getMailer","WebinyError","message","code","ex","data","error","setMailer","target","undefined","send","publish","response","result"],"sources":["mailer.crud.ts"],"sourcesContent":["import {\n MailerConfig,\n MailerContextObject,\n Mailer,\n MailerSetterParams,\n OnAfterMailerSendParams,\n OnBeforeMailerSendParams,\n OnErrorMailerParams\n} from \"~/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { attachOnBeforeSend } from \"~/crud/mailer/onBeforeSend\";\nimport WebinyError from \"@webiny/error\";\n\nconst createDefaultMailer = async () => {\n return import(\"~/mailers/createSmtpMailer\").then(module => {\n return module.createSmtpMailer();\n });\n};\n\nexport const createMailerCrud = (config?: MailerConfig): MailerContextObject => {\n let defaultMailer: MailerSetterParams | undefined = config?.mailer || createDefaultMailer;\n /**\n * We define possible events to be hooked into.\n */\n const onBeforeSend = createTopic<OnBeforeMailerSendParams>();\n const onAfterSend = createTopic<OnAfterMailerSendParams>();\n const onError = createTopic<OnErrorMailerParams>();\n /**\n * We attach our default ones.\n */\n attachOnBeforeSend({\n onBeforeSend\n });\n\n let initializedMailer: Mailer | undefined;\n\n const getMailer = async <T extends Mailer = Mailer>(): Promise<T> => {\n if (initializedMailer) {\n return initializedMailer as T;\n } else if (!defaultMailer) {\n throw new WebinyError({\n message: \"Mailer is not set.\",\n code: \"MAILER_NOT_SET_ERROR\"\n });\n } else if (typeof defaultMailer === \"function\") {\n try {\n initializedMailer = await defaultMailer();\n\n return initializedMailer as T;\n } catch (ex) {\n throw new WebinyError({\n message: \"Error while getting mailer.\",\n code: \"MAILER_ERROR\",\n data: {\n error: ex\n }\n });\n }\n }\n initializedMailer = defaultMailer;\n return initializedMailer as T;\n };\n\n return {\n onBeforeSend,\n onAfterSend,\n onError,\n getMailer,\n setMailer: target => {\n initializedMailer = undefined;\n defaultMailer = target;\n },\n send: async ({ data }) => {\n const mailer = await getMailer();\n try {\n await onBeforeSend.publish({\n data\n });\n const response = await mailer.send(data);\n await onAfterSend.publish({\n data\n });\n\n return {\n result: response.result,\n error: response.error\n };\n } catch (ex) {\n await onError.publish({\n error: ex,\n data\n });\n return {\n result: null,\n error: {\n message: ex.message,\n code: ex.code,\n data: {\n data,\n ...ex.data\n }\n }\n };\n }\n }\n };\n};\n"],"mappings":";;;;;;;;;;;AASA;;AACA;;AACA;;;;;;;;;;AAEA,MAAMA,mBAAmB,GAAG,YAAY;EACpC,OAAO,8FAAqCC,IAArC,CAA0CC,MAAM,IAAI;IACvD,OAAOA,MAAM,CAACC,gBAAP,EAAP;EACH,CAFM,CAAP;AAGH,CAJD;;AAMO,MAAMC,gBAAgB,GAAIC,MAAD,IAAgD;EAC5E,IAAIC,aAA6C,GAAG,CAAAD,MAAM,SAAN,IAAAA,MAAM,WAAN,YAAAA,MAAM,CAAEE,MAAR,KAAkBP,mBAAtE;EACA;AACJ;AACA;;EACI,MAAMQ,YAAY,GAAG,IAAAC,mBAAA,GAArB;EACA,MAAMC,WAAW,GAAG,IAAAD,mBAAA,GAApB;EACA,MAAME,OAAO,GAAG,IAAAF,mBAAA,GAAhB;EACA;AACJ;AACA;;EACI,IAAAG,gCAAA,EAAmB;IACfJ;EADe,CAAnB;EAIA,IAAIK,iBAAJ;;EAEA,MAAMC,SAAS,GAAG,YAAmD;IACjE,IAAID,iBAAJ,EAAuB;MACnB,OAAOA,iBAAP;IACH,CAFD,MAEO,IAAI,CAACP,aAAL,EAAoB;MACvB,MAAM,IAAIS,cAAJ,CAAgB;QAClBC,OAAO,EAAE,oBADS;QAElBC,IAAI,EAAE;MAFY,CAAhB,CAAN;IAIH,CALM,MAKA,IAAI,OAAOX,aAAP,KAAyB,UAA7B,EAAyC;MAC5C,IAAI;QACAO,iBAAiB,GAAG,MAAMP,aAAa,EAAvC;QAEA,OAAOO,iBAAP;MACH,CAJD,CAIE,OAAOK,EAAP,EAAW;QACT,MAAM,IAAIH,cAAJ,CAAgB;UAClBC,OAAO,EAAE,6BADS;UAElBC,IAAI,EAAE,cAFY;UAGlBE,IAAI,EAAE;YACFC,KAAK,EAAEF;UADL;QAHY,CAAhB,CAAN;MAOH;IACJ;;IACDL,iBAAiB,GAAGP,aAApB;IACA,OAAOO,iBAAP;EACH,CAzBD;;EA2BA,OAAO;IACHL,YADG;IAEHE,WAFG;IAGHC,OAHG;IAIHG,SAJG;IAKHO,SAAS,EAAEC,MAAM,IAAI;MACjBT,iBAAiB,GAAGU,SAApB;MACAjB,aAAa,GAAGgB,MAAhB;IACH,CARE;IASHE,IAAI,EAAE,OAAO;MAAEL;IAAF,CAAP,KAAoB;MACtB,MAAMZ,MAAM,GAAG,MAAMO,SAAS,EAA9B;;MACA,IAAI;QACA,MAAMN,YAAY,CAACiB,OAAb,CAAqB;UACvBN;QADuB,CAArB,CAAN;QAGA,MAAMO,QAAQ,GAAG,MAAMnB,MAAM,CAACiB,IAAP,CAAYL,IAAZ,CAAvB;QACA,MAAMT,WAAW,CAACe,OAAZ,CAAoB;UACtBN;QADsB,CAApB,CAAN;QAIA,OAAO;UACHQ,MAAM,EAAED,QAAQ,CAACC,MADd;UAEHP,KAAK,EAAEM,QAAQ,CAACN;QAFb,CAAP;MAIH,CAbD,CAaE,OAAOF,EAAP,EAAW;QACT,MAAMP,OAAO,CAACc,OAAR,CAAgB;UAClBL,KAAK,EAAEF,EADW;UAElBC;QAFkB,CAAhB,CAAN;QAIA,OAAO;UACHQ,MAAM,EAAE,IADL;UAEHP,KAAK,EAAE;YACHJ,OAAO,EAAEE,EAAE,CAACF,OADT;YAEHC,IAAI,EAAEC,EAAE,CAACD,IAFN;YAGHE,IAAI;cACAA;YADA,GAEGD,EAAE,CAACC,IAFN;UAHD;QAFJ,CAAP;MAWH;IACJ;EAzCE,CAAP;AA2CH,CAvFM"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.attachPasswordObfuscatingHooks = void 0;
|
|
9
|
+
|
|
10
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
11
|
+
|
|
12
|
+
var _model = require("./model");
|
|
13
|
+
|
|
14
|
+
const _excluded = ["password"];
|
|
15
|
+
|
|
16
|
+
const obfuscatePassword = values => {
|
|
17
|
+
// eslint-disable-next-line
|
|
18
|
+
const {
|
|
19
|
+
password
|
|
20
|
+
} = values,
|
|
21
|
+
rest = (0, _objectWithoutProperties2.default)(values, _excluded);
|
|
22
|
+
return {
|
|
23
|
+
rest
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const hook = async params => {
|
|
28
|
+
if (params.model.modelId !== _model.SETTINGS_MODEL_ID) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
delete params.input["password"];
|
|
33
|
+
params.entry.values = obfuscatePassword(params.entry.values);
|
|
34
|
+
|
|
35
|
+
if (typeof params.original !== "undefined") {
|
|
36
|
+
params.original.values = obfuscatePassword(params.original.values);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if (params.storageEntry) {
|
|
40
|
+
params.storageEntry.values = obfuscatePassword(params.storageEntry.values);
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* We need to remove password from all error reporting and all returns.
|
|
45
|
+
*/
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
const attachPasswordObfuscatingHooks = context => {
|
|
49
|
+
context.cms.onEntryAfterCreate.subscribe(hook);
|
|
50
|
+
context.cms.onEntryCreateError.subscribe(hook);
|
|
51
|
+
context.cms.onEntryAfterUpdate.subscribe(hook);
|
|
52
|
+
context.cms.onEntryUpdateError.subscribe(hook);
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
exports.attachPasswordObfuscatingHooks = attachPasswordObfuscatingHooks;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["obfuscatePassword","values","password","rest","hook","params","model","modelId","SETTINGS_MODEL_ID","input","entry","original","storageEntry","attachPasswordObfuscatingHooks","context","cms","onEntryAfterCreate","subscribe","onEntryCreateError","onEntryAfterUpdate","onEntryUpdateError"],"sources":["hooks.ts"],"sourcesContent":["import { MailerContext } from \"~/types\";\nimport {\n OnEntryAfterCreateTopicParams,\n OnEntryAfterUpdateTopicParams,\n OnEntryCreateErrorTopicParams,\n OnEntryUpdateErrorTopicParams\n} from \"@webiny/api-headless-cms/types\";\nimport { SETTINGS_MODEL_ID } from \"~/crud/settings/model\";\n\nconst obfuscatePassword = (values: Record<string, any>) => {\n // eslint-disable-next-line\n const { password, ...rest } = values;\n\n return { rest };\n};\n\ntype Params = (\n | OnEntryAfterCreateTopicParams\n | OnEntryCreateErrorTopicParams\n | OnEntryAfterUpdateTopicParams\n | OnEntryUpdateErrorTopicParams\n) & {\n storageEntry?: any;\n original?: any;\n};\n\nconst hook = async (params: Params) => {\n if (params.model.modelId !== SETTINGS_MODEL_ID) {\n return;\n }\n delete params.input[\"password\"];\n params.entry.values = obfuscatePassword(params.entry.values);\n if (typeof params.original !== \"undefined\") {\n params.original.values = obfuscatePassword(params.original.values);\n }\n if (params.storageEntry) {\n params.storageEntry.values = obfuscatePassword(params.storageEntry.values);\n }\n};\n/**\n * We need to remove password from all error reporting and all returns.\n */\nexport const attachPasswordObfuscatingHooks = (context: MailerContext) => {\n context.cms.onEntryAfterCreate.subscribe(hook);\n context.cms.onEntryCreateError.subscribe(hook);\n context.cms.onEntryAfterUpdate.subscribe(hook);\n context.cms.onEntryUpdateError.subscribe(hook);\n};\n"],"mappings":";;;;;;;;;;;AAOA;;;;AAEA,MAAMA,iBAAiB,GAAIC,MAAD,IAAiC;EACvD;EACA,MAAM;IAAEC;EAAF,IAAwBD,MAA9B;EAAA,MAAqBE,IAArB,0CAA8BF,MAA9B;EAEA,OAAO;IAAEE;EAAF,CAAP;AACH,CALD;;AAiBA,MAAMC,IAAI,GAAG,MAAOC,MAAP,IAA0B;EACnC,IAAIA,MAAM,CAACC,KAAP,CAAaC,OAAb,KAAyBC,wBAA7B,EAAgD;IAC5C;EACH;;EACD,OAAOH,MAAM,CAACI,KAAP,CAAa,UAAb,CAAP;EACAJ,MAAM,CAACK,KAAP,CAAaT,MAAb,GAAsBD,iBAAiB,CAACK,MAAM,CAACK,KAAP,CAAaT,MAAd,CAAvC;;EACA,IAAI,OAAOI,MAAM,CAACM,QAAd,KAA2B,WAA/B,EAA4C;IACxCN,MAAM,CAACM,QAAP,CAAgBV,MAAhB,GAAyBD,iBAAiB,CAACK,MAAM,CAACM,QAAP,CAAgBV,MAAjB,CAA1C;EACH;;EACD,IAAII,MAAM,CAACO,YAAX,EAAyB;IACrBP,MAAM,CAACO,YAAP,CAAoBX,MAApB,GAA6BD,iBAAiB,CAACK,MAAM,CAACO,YAAP,CAAoBX,MAArB,CAA9C;EACH;AACJ,CAZD;AAaA;AACA;AACA;;;AACO,MAAMY,8BAA8B,GAAIC,OAAD,IAA4B;EACtEA,OAAO,CAACC,GAAR,CAAYC,kBAAZ,CAA+BC,SAA/B,CAAyCb,IAAzC;EACAU,OAAO,CAACC,GAAR,CAAYG,kBAAZ,CAA+BD,SAA/B,CAAyCb,IAAzC;EACAU,OAAO,CAACC,GAAR,CAAYI,kBAAZ,CAA+BF,SAA/B,CAAyCb,IAAzC;EACAU,OAAO,CAACC,GAAR,CAAYK,kBAAZ,CAA+BH,SAA/B,CAAyCb,IAAzC;AACH,CALM"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.createSettingsModel = exports.SETTINGS_MODEL_ID = void 0;
|
|
9
|
+
|
|
10
|
+
var _apiHeadlessCms = require("@webiny/api-headless-cms");
|
|
11
|
+
|
|
12
|
+
var _camelCase = _interopRequireDefault(require("lodash/camelCase"));
|
|
13
|
+
|
|
14
|
+
const SETTINGS_MODEL_ID = "mailerSettings";
|
|
15
|
+
exports.SETTINGS_MODEL_ID = SETTINGS_MODEL_ID;
|
|
16
|
+
|
|
17
|
+
const createField = params => {
|
|
18
|
+
const {
|
|
19
|
+
label,
|
|
20
|
+
required
|
|
21
|
+
} = params;
|
|
22
|
+
const id = (0, _camelCase.default)(label);
|
|
23
|
+
const validation = [];
|
|
24
|
+
|
|
25
|
+
if (required) {
|
|
26
|
+
validation.push({
|
|
27
|
+
message: `Field "${label}" is required!`,
|
|
28
|
+
name: "required",
|
|
29
|
+
settings: {}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return {
|
|
34
|
+
label,
|
|
35
|
+
id,
|
|
36
|
+
fieldId: id,
|
|
37
|
+
storageId: id,
|
|
38
|
+
type: "text",
|
|
39
|
+
validation
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const createSettingsModel = group => {
|
|
44
|
+
return (0, _apiHeadlessCms.createCmsModel)({
|
|
45
|
+
modelId: SETTINGS_MODEL_ID,
|
|
46
|
+
name: "Mailer Settings",
|
|
47
|
+
group: {
|
|
48
|
+
id: group.contentModelGroup.id,
|
|
49
|
+
name: group.contentModelGroup.name
|
|
50
|
+
},
|
|
51
|
+
fields: [createField({
|
|
52
|
+
label: "Host",
|
|
53
|
+
required: true
|
|
54
|
+
}), createField({
|
|
55
|
+
label: "User",
|
|
56
|
+
required: true
|
|
57
|
+
}), createField({
|
|
58
|
+
label: "Password",
|
|
59
|
+
required: true
|
|
60
|
+
}), createField({
|
|
61
|
+
label: "From",
|
|
62
|
+
required: true
|
|
63
|
+
}), createField({
|
|
64
|
+
label: "Reply-To"
|
|
65
|
+
})],
|
|
66
|
+
layout: [["host", "user", "password", "from", "replyTo"]],
|
|
67
|
+
description: "Mailer Settings",
|
|
68
|
+
titleFieldId: ""
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
exports.createSettingsModel = createSettingsModel;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SETTINGS_MODEL_ID","createField","params","label","required","id","lodashCamelCase","validation","push","message","name","settings","fieldId","storageId","type","createSettingsModel","group","createCmsModel","modelId","contentModelGroup","fields","layout","description","titleFieldId"],"sources":["model.ts"],"sourcesContent":["import { createCmsModel, CmsGroupPlugin } from \"@webiny/api-headless-cms\";\nimport { CmsModelField, CmsModelFieldValidation } from \"@webiny/api-headless-cms/types\";\nimport lodashCamelCase from \"lodash/camelCase\";\n\nexport const SETTINGS_MODEL_ID = \"mailerSettings\";\n\ninterface CreateFieldParams {\n label: string;\n required?: boolean;\n}\nconst createField = (params: CreateFieldParams): CmsModelField => {\n const { label, required } = params;\n const id = lodashCamelCase(label);\n\n const validation: CmsModelFieldValidation[] = [];\n if (required) {\n validation.push({\n message: `Field \"${label}\" is required!`,\n name: \"required\",\n settings: {}\n });\n }\n return {\n label,\n id,\n fieldId: id,\n storageId: id,\n type: \"text\",\n validation\n };\n};\n\nexport const createSettingsModel = (group: CmsGroupPlugin) => {\n return createCmsModel({\n modelId: SETTINGS_MODEL_ID,\n name: \"Mailer Settings\",\n group: {\n id: group.contentModelGroup.id,\n name: group.contentModelGroup.name\n },\n fields: [\n createField({\n label: \"Host\",\n required: true\n }),\n createField({\n label: \"User\",\n required: true\n }),\n createField({\n label: \"Password\",\n required: true\n }),\n createField({\n label: \"From\",\n required: true\n }),\n createField({\n label: \"Reply-To\"\n })\n ],\n layout: [[\"host\", \"user\", \"password\", \"from\", \"replyTo\"]],\n description: \"Mailer Settings\",\n titleFieldId: \"\"\n });\n};\n"],"mappings":";;;;;;;;;AAAA;;AAEA;;AAEO,MAAMA,iBAAiB,GAAG,gBAA1B;;;AAMP,MAAMC,WAAW,GAAIC,MAAD,IAA8C;EAC9D,MAAM;IAAEC,KAAF;IAASC;EAAT,IAAsBF,MAA5B;EACA,MAAMG,EAAE,GAAG,IAAAC,kBAAA,EAAgBH,KAAhB,CAAX;EAEA,MAAMI,UAAqC,GAAG,EAA9C;;EACA,IAAIH,QAAJ,EAAc;IACVG,UAAU,CAACC,IAAX,CAAgB;MACZC,OAAO,EAAG,UAASN,KAAM,gBADb;MAEZO,IAAI,EAAE,UAFM;MAGZC,QAAQ,EAAE;IAHE,CAAhB;EAKH;;EACD,OAAO;IACHR,KADG;IAEHE,EAFG;IAGHO,OAAO,EAAEP,EAHN;IAIHQ,SAAS,EAAER,EAJR;IAKHS,IAAI,EAAE,MALH;IAMHP;EANG,CAAP;AAQH,CApBD;;AAsBO,MAAMQ,mBAAmB,GAAIC,KAAD,IAA2B;EAC1D,OAAO,IAAAC,8BAAA,EAAe;IAClBC,OAAO,EAAElB,iBADS;IAElBU,IAAI,EAAE,iBAFY;IAGlBM,KAAK,EAAE;MACHX,EAAE,EAAEW,KAAK,CAACG,iBAAN,CAAwBd,EADzB;MAEHK,IAAI,EAAEM,KAAK,CAACG,iBAAN,CAAwBT;IAF3B,CAHW;IAOlBU,MAAM,EAAE,CACJnB,WAAW,CAAC;MACRE,KAAK,EAAE,MADC;MAERC,QAAQ,EAAE;IAFF,CAAD,CADP,EAKJH,WAAW,CAAC;MACRE,KAAK,EAAE,MADC;MAERC,QAAQ,EAAE;IAFF,CAAD,CALP,EASJH,WAAW,CAAC;MACRE,KAAK,EAAE,UADC;MAERC,QAAQ,EAAE;IAFF,CAAD,CATP,EAaJH,WAAW,CAAC;MACRE,KAAK,EAAE,MADC;MAERC,QAAQ,EAAE;IAFF,CAAD,CAbP,EAiBJH,WAAW,CAAC;MACRE,KAAK,EAAE;IADC,CAAD,CAjBP,CAPU;IA4BlBkB,MAAM,EAAE,CAAC,CAAC,MAAD,EAAS,MAAT,EAAiB,UAAjB,EAA6B,MAA7B,EAAqC,SAArC,CAAD,CA5BU;IA6BlBC,WAAW,EAAE,iBA7BK;IA8BlBC,YAAY,EAAE;EA9BI,CAAf,CAAP;AAgCH,CAjCM"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.encrypt = exports.decrypt = void 0;
|
|
9
|
+
|
|
10
|
+
var _cryptoJs = _interopRequireDefault(require("crypto-js"));
|
|
11
|
+
|
|
12
|
+
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
13
|
+
|
|
14
|
+
const decrypt = params => {
|
|
15
|
+
const {
|
|
16
|
+
value,
|
|
17
|
+
secret
|
|
18
|
+
} = params;
|
|
19
|
+
|
|
20
|
+
if (!secret) {
|
|
21
|
+
throw new _error.default(`Cannot call decrypt without passing the secret.`);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (!value) {
|
|
25
|
+
return "";
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
try {
|
|
29
|
+
const bytes = _cryptoJs.default.AES.decrypt(value, secret);
|
|
30
|
+
|
|
31
|
+
const result = bytes.toString(_cryptoJs.default.enc.Utf8);
|
|
32
|
+
|
|
33
|
+
if (!result) {
|
|
34
|
+
console.log(`Error while converting decrypted password bytes into string. `);
|
|
35
|
+
return "";
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return result;
|
|
39
|
+
} catch (ex) {
|
|
40
|
+
console.log(`Could not decrypt given encrypted password.`);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return "";
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
exports.decrypt = decrypt;
|
|
47
|
+
|
|
48
|
+
const encrypt = params => {
|
|
49
|
+
const {
|
|
50
|
+
value,
|
|
51
|
+
secret
|
|
52
|
+
} = params;
|
|
53
|
+
|
|
54
|
+
if (!secret) {
|
|
55
|
+
throw new _error.default(`Cannot call decrypt without passing the secret.`);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (!value) {
|
|
59
|
+
return "";
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
try {
|
|
63
|
+
return _cryptoJs.default.AES.encrypt(value, secret).toString();
|
|
64
|
+
} catch (ex) {
|
|
65
|
+
console.log(`Could not encrypt given password.`);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return "";
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
exports.encrypt = encrypt;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["decrypt","params","value","secret","WebinyError","bytes","CryptoJS","AES","result","toString","enc","Utf8","console","log","ex","encrypt"],"sources":["password.ts"],"sourcesContent":["import CryptoJS from \"crypto-js\";\nimport WebinyError from \"@webiny/error\";\n\ninterface Params {\n value?: string | null;\n secret?: string | null;\n}\n\nexport const decrypt = (params: Params): string => {\n const { value, secret } = params;\n if (!secret) {\n throw new WebinyError(`Cannot call decrypt without passing the secret.`);\n }\n if (!value) {\n return \"\";\n }\n try {\n const bytes = CryptoJS.AES.decrypt(value, secret);\n const result = bytes.toString(CryptoJS.enc.Utf8);\n if (!result) {\n console.log(`Error while converting decrypted password bytes into string. `);\n return \"\";\n }\n return result;\n } catch (ex) {\n console.log(`Could not decrypt given encrypted password.`);\n }\n return \"\";\n};\n\nexport const encrypt = (params: Params): string => {\n const { value, secret } = params;\n if (!secret) {\n throw new WebinyError(`Cannot call decrypt without passing the secret.`);\n }\n if (!value) {\n return \"\";\n }\n try {\n return CryptoJS.AES.encrypt(value, secret).toString();\n } catch (ex) {\n console.log(`Could not encrypt given password.`);\n }\n return \"\";\n};\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AAOO,MAAMA,OAAO,GAAIC,MAAD,IAA4B;EAC/C,MAAM;IAAEC,KAAF;IAASC;EAAT,IAAoBF,MAA1B;;EACA,IAAI,CAACE,MAAL,EAAa;IACT,MAAM,IAAIC,cAAJ,CAAiB,iDAAjB,CAAN;EACH;;EACD,IAAI,CAACF,KAAL,EAAY;IACR,OAAO,EAAP;EACH;;EACD,IAAI;IACA,MAAMG,KAAK,GAAGC,iBAAA,CAASC,GAAT,CAAaP,OAAb,CAAqBE,KAArB,EAA4BC,MAA5B,CAAd;;IACA,MAAMK,MAAM,GAAGH,KAAK,CAACI,QAAN,CAAeH,iBAAA,CAASI,GAAT,CAAaC,IAA5B,CAAf;;IACA,IAAI,CAACH,MAAL,EAAa;MACTI,OAAO,CAACC,GAAR,CAAa,+DAAb;MACA,OAAO,EAAP;IACH;;IACD,OAAOL,MAAP;EACH,CARD,CAQE,OAAOM,EAAP,EAAW;IACTF,OAAO,CAACC,GAAR,CAAa,6CAAb;EACH;;EACD,OAAO,EAAP;AACH,CApBM;;;;AAsBA,MAAME,OAAO,GAAId,MAAD,IAA4B;EAC/C,MAAM;IAAEC,KAAF;IAASC;EAAT,IAAoBF,MAA1B;;EACA,IAAI,CAACE,MAAL,EAAa;IACT,MAAM,IAAIC,cAAJ,CAAiB,iDAAjB,CAAN;EACH;;EACD,IAAI,CAACF,KAAL,EAAY;IACR,OAAO,EAAP;EACH;;EACD,IAAI;IACA,OAAOI,iBAAA,CAASC,GAAT,CAAaQ,OAAb,CAAqBb,KAArB,EAA4BC,MAA5B,EAAoCM,QAApC,EAAP;EACH,CAFD,CAEE,OAAOK,EAAP,EAAW;IACTF,OAAO,CAACC,GAAR,CAAa,mCAAb;EACH;;EACD,OAAO,EAAP;AACH,CAdM"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const getSecret: () => string;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.getSecret = void 0;
|
|
9
|
+
|
|
10
|
+
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
11
|
+
|
|
12
|
+
const getSecret = () => {
|
|
13
|
+
const envValue = process.env.WEBINY_MAILER_PASSWORD_SECRET;
|
|
14
|
+
const value = String(envValue).trim();
|
|
15
|
+
|
|
16
|
+
if (!envValue || !value) {
|
|
17
|
+
throw new _error.default(`There must be a password secret defined!`, "PASSWORD_SECRET_ERROR");
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return value;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
exports.getSecret = getSecret;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["getSecret","envValue","process","env","WEBINY_MAILER_PASSWORD_SECRET","value","String","trim","WebinyError"],"sources":["secret.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\n\nexport const getSecret = (): string => {\n const envValue = process.env.WEBINY_MAILER_PASSWORD_SECRET;\n\n const value = String(envValue).trim();\n if (!envValue || !value) {\n throw new WebinyError(`There must be a password secret defined!`, \"PASSWORD_SECRET_ERROR\");\n }\n return value;\n};\n"],"mappings":";;;;;;;;;AAAA;;AAEO,MAAMA,SAAS,GAAG,MAAc;EACnC,MAAMC,QAAQ,GAAGC,OAAO,CAACC,GAAR,CAAYC,6BAA7B;EAEA,MAAMC,KAAK,GAAGC,MAAM,CAACL,QAAD,CAAN,CAAiBM,IAAjB,EAAd;;EACA,IAAI,CAACN,QAAD,IAAa,CAACI,KAAlB,EAAyB;IACrB,MAAM,IAAIG,cAAJ,CAAiB,0CAAjB,EAA4D,uBAA5D,CAAN;EACH;;EACD,OAAOH,KAAP;AACH,CARM"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ExtendedTransportSettings, TransportSettings } from "../../types";
|
|
2
|
+
import { CmsEntry } from "@webiny/api-headless-cms/types";
|
|
3
|
+
interface TransformValuesFromEntryParams {
|
|
4
|
+
entry: CmsEntry<TransportSettings>;
|
|
5
|
+
secret: string | null;
|
|
6
|
+
}
|
|
7
|
+
export declare const transformValuesFromEntry: (params: TransformValuesFromEntryParams) => ExtendedTransportSettings;
|
|
8
|
+
interface TransformValuesToEntryValuesParams {
|
|
9
|
+
values: TransportSettings;
|
|
10
|
+
secret: string | null;
|
|
11
|
+
}
|
|
12
|
+
export declare const transformInputToEntryValues: (params: TransformValuesToEntryValuesParams) => TransportSettings;
|
|
13
|
+
export {};
|