@webiny/api-mailer 0.0.0-unstable.9e825fd5fb → 0.0.0-unstable.a9593f74dd

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.
Files changed (43) hide show
  1. package/context.js +7 -4
  2. package/context.js.map +1 -1
  3. package/crud/settings/hooks.js +6 -7
  4. package/crud/settings/hooks.js.map +1 -1
  5. package/crud/settings/model.d.ts +1 -2
  6. package/crud/settings/model.js +15 -21
  7. package/crud/settings/model.js.map +1 -1
  8. package/crud/settings/password.js +3 -1
  9. package/crud/settings/password.js.map +1 -1
  10. package/crud/settings/secret.js +3 -1
  11. package/crud/settings/secret.js.map +1 -1
  12. package/crud/settings/transform.js +10 -8
  13. package/crud/settings/transform.js.map +1 -1
  14. package/crud/settings/validation.d.ts +11 -11
  15. package/crud/settings/validation.js +12 -7
  16. package/crud/settings/validation.js.map +1 -1
  17. package/crud/settings.crud.js +26 -25
  18. package/crud/settings.crud.js.map +1 -1
  19. package/crud/transport/onTransportBeforeSend.js +3 -1
  20. package/crud/transport/onTransportBeforeSend.js.map +1 -1
  21. package/crud/transporter.crud.js +7 -5
  22. package/crud/transporter.crud.js.map +1 -1
  23. package/graphql/index.js +3 -1
  24. package/graphql/index.js.map +1 -1
  25. package/graphql/settings.js +7 -5
  26. package/graphql/settings.js.map +1 -1
  27. package/index.js +9 -9
  28. package/index.js.map +1 -1
  29. package/package.json +30 -34
  30. package/plugins/CreateTransportPlugin.js +4 -5
  31. package/plugins/CreateTransportPlugin.js.map +1 -1
  32. package/plugins/index.js +3 -1
  33. package/plugins/index.js.map +1 -1
  34. package/transports/createDummyTransport.js +3 -1
  35. package/transports/createDummyTransport.js.map +1 -1
  36. package/transports/createSmtpTransport.js +14 -6
  37. package/transports/createSmtpTransport.js.map +1 -1
  38. package/transports/index.js +3 -1
  39. package/transports/index.js.map +1 -1
  40. package/types.js +3 -1
  41. package/crud/group.d.ts +0 -2
  42. package/crud/group.js +0 -18
  43. package/crud/group.js.map +0 -1
package/context.js CHANGED
@@ -1,17 +1,20 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
6
  exports.createMailerContext = void 0;
8
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
7
  var _api = require("@webiny/api");
10
8
  var _transporter = require("./crud/transporter.crud");
11
9
  var _settings = require("./crud/settings.crud");
12
10
  const createMailerContext = () => {
13
11
  return new _api.ContextPlugin(async context => {
14
- context.mailer = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, await (0, _transporter.createTransporterCrud)(context)), await (0, _settings.createSettingsCrud)(context));
12
+ context.mailer = {
13
+ ...(await (0, _transporter.createTransporterCrud)(context)),
14
+ ...(await (0, _settings.createSettingsCrud)(context))
15
+ };
15
16
  });
16
17
  };
17
- exports.createMailerContext = createMailerContext;
18
+ exports.createMailerContext = createMailerContext;
19
+
20
+ //# sourceMappingURL=context.js.map
package/context.js.map CHANGED
@@ -1 +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,kBAAa,CAAgB,MAAMC,OAAO,IAAI;IACrDA,OAAO,CAACC,MAAM,+DACN,MAAM,IAAAC,kCAAqB,EAACF,OAAO,CAAC,GACpC,MAAM,IAAAG,4BAAkB,EAACH,OAAO,CAAC,CACxC;EACL,CAAC,CAAC;AACN,CAAC;AAAC"}
1
+ {"version":3,"names":["_api","require","_transporter","_settings","createMailerContext","ContextPlugin","context","mailer","createTransporterCrud","createSettingsCrud","exports"],"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,IAAAA,IAAA,GAAAC,OAAA;AAEA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,SAAA,GAAAF,OAAA;AAEO,MAAMG,mBAAmB,GAAGA,CAAA,KAAM;EACrC,OAAO,IAAIC,kBAAa,CAAgB,MAAMC,OAAO,IAAI;IACrDA,OAAO,CAACC,MAAM,GAAG;MACb,IAAI,MAAM,IAAAC,kCAAqB,EAACF,OAAO,CAAC,CAAC;MACzC,IAAI,MAAM,IAAAG,4BAAkB,EAACH,OAAO,CAAC;IACzC,CAAC;EACL,CAAC,CAAC;AACN,CAAC;AAACI,OAAA,CAAAN,mBAAA,GAAAA,mBAAA"}
@@ -1,19 +1,16 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
6
  exports.attachPasswordObfuscatingHooks = void 0;
8
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
9
7
  var _model = require("./model");
10
- const _excluded = ["password"];
11
8
  const obfuscatePassword = values => {
12
9
  // eslint-disable-next-line
13
10
  const {
14
- password
15
- } = values,
16
- rest = (0, _objectWithoutProperties2.default)(values, _excluded);
11
+ password,
12
+ ...rest
13
+ } = values;
17
14
  return {
18
15
  rest
19
16
  };
@@ -40,4 +37,6 @@ const attachPasswordObfuscatingHooks = context => {
40
37
  context.cms.onEntryAfterUpdate.subscribe(hook);
41
38
  context.cms.onEntryUpdateError.subscribe(hook);
42
39
  };
43
- exports.attachPasswordObfuscatingHooks = attachPasswordObfuscatingHooks;
40
+ exports.attachPasswordObfuscatingHooks = attachPasswordObfuscatingHooks;
41
+
42
+ //# sourceMappingURL=hooks.js.map
@@ -1 +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;AAA0D;AAE1D,MAAMA,iBAAiB,GAAIC,MAA2B,IAAK;EACvD;EACA,MAAM;MAAEC;IAAkB,CAAC,GAAGD,MAAM;IAAfE,IAAI,0CAAKF,MAAM;EAEpC,OAAO;IAAEE;EAAK,CAAC;AACnB,CAAC;AAYD,MAAMC,IAAI,GAAG,MAAOC,MAAc,IAAK;EACnC,IAAIA,MAAM,CAACC,KAAK,CAACC,OAAO,KAAKC,wBAAiB,EAAE;IAC5C;EACJ;EACA,OAAOH,MAAM,CAACI,KAAK,CAAC,UAAU,CAAC;EAC/BJ,MAAM,CAACK,KAAK,CAACT,MAAM,GAAGD,iBAAiB,CAACK,MAAM,CAACK,KAAK,CAACT,MAAM,CAAC;EAC5D,IAAI,OAAOI,MAAM,CAACM,QAAQ,KAAK,WAAW,EAAE;IACxCN,MAAM,CAACM,QAAQ,CAACV,MAAM,GAAGD,iBAAiB,CAACK,MAAM,CAACM,QAAQ,CAACV,MAAM,CAAC;EACtE;EACA,IAAII,MAAM,CAACO,YAAY,EAAE;IACrBP,MAAM,CAACO,YAAY,CAACX,MAAM,GAAGD,iBAAiB,CAACK,MAAM,CAACO,YAAY,CAACX,MAAM,CAAC;EAC9E;AACJ,CAAC;AACD;AACA;AACA;AACO,MAAMY,8BAA8B,GAAIC,OAAsB,IAAK;EACtEA,OAAO,CAACC,GAAG,CAACC,kBAAkB,CAACC,SAAS,CAACb,IAAI,CAAC;EAC9CU,OAAO,CAACC,GAAG,CAACG,kBAAkB,CAACD,SAAS,CAACb,IAAI,CAAC;EAC9CU,OAAO,CAACC,GAAG,CAACI,kBAAkB,CAACF,SAAS,CAACb,IAAI,CAAC;EAC9CU,OAAO,CAACC,GAAG,CAACK,kBAAkB,CAACH,SAAS,CAACb,IAAI,CAAC;AAClD,CAAC;AAAC"}
1
+ {"version":3,"names":["_model","require","obfuscatePassword","values","password","rest","hook","params","model","modelId","SETTINGS_MODEL_ID","input","entry","original","storageEntry","attachPasswordObfuscatingHooks","context","cms","onEntryAfterCreate","subscribe","onEntryCreateError","onEntryAfterUpdate","onEntryUpdateError","exports"],"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,IAAAA,MAAA,GAAAC,OAAA;AAEA,MAAMC,iBAAiB,GAAIC,MAA2B,IAAK;EACvD;EACA,MAAM;IAAEC,QAAQ;IAAE,GAAGC;EAAK,CAAC,GAAGF,MAAM;EAEpC,OAAO;IAAEE;EAAK,CAAC;AACnB,CAAC;AAYD,MAAMC,IAAI,GAAG,MAAOC,MAAc,IAAK;EACnC,IAAIA,MAAM,CAACC,KAAK,CAACC,OAAO,KAAKC,wBAAiB,EAAE;IAC5C;EACJ;EACA,OAAOH,MAAM,CAACI,KAAK,CAAC,UAAU,CAAC;EAC/BJ,MAAM,CAACK,KAAK,CAACT,MAAM,GAAGD,iBAAiB,CAACK,MAAM,CAACK,KAAK,CAACT,MAAM,CAAC;EAC5D,IAAI,OAAOI,MAAM,CAACM,QAAQ,KAAK,WAAW,EAAE;IACxCN,MAAM,CAACM,QAAQ,CAACV,MAAM,GAAGD,iBAAiB,CAACK,MAAM,CAACM,QAAQ,CAACV,MAAM,CAAC;EACtE;EACA,IAAII,MAAM,CAACO,YAAY,EAAE;IACrBP,MAAM,CAACO,YAAY,CAACX,MAAM,GAAGD,iBAAiB,CAACK,MAAM,CAACO,YAAY,CAACX,MAAM,CAAC;EAC9E;AACJ,CAAC;AACD;AACA;AACA;AACO,MAAMY,8BAA8B,GAAIC,OAAsB,IAAK;EACtEA,OAAO,CAACC,GAAG,CAACC,kBAAkB,CAACC,SAAS,CAACb,IAAI,CAAC;EAC9CU,OAAO,CAACC,GAAG,CAACG,kBAAkB,CAACD,SAAS,CAACb,IAAI,CAAC;EAC9CU,OAAO,CAACC,GAAG,CAACI,kBAAkB,CAACF,SAAS,CAACb,IAAI,CAAC;EAC9CU,OAAO,CAACC,GAAG,CAACK,kBAAkB,CAACH,SAAS,CAACb,IAAI,CAAC;AAClD,CAAC;AAACiB,OAAA,CAAAR,8BAAA,GAAAA,8BAAA"}
@@ -1,3 +1,2 @@
1
- import { CmsGroupPlugin } from "@webiny/api-headless-cms";
2
1
  export declare const SETTINGS_MODEL_ID = "mailerSettings";
3
- export declare const createSettingsModel: (group: CmsGroupPlugin) => import("@webiny/api-headless-cms").CmsModelPlugin;
2
+ export declare const createSettingsModel: () => import("@webiny/api-headless-cms").CmsModelPlugin;
@@ -5,9 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.createSettingsModel = exports.SETTINGS_MODEL_ID = void 0;
8
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
- var _apiHeadlessCms = require("@webiny/api-headless-cms");
10
8
  var _camelCase = _interopRequireDefault(require("lodash/camelCase"));
9
+ var _apiHeadlessCms = require("@webiny/api-headless-cms");
11
10
  const SETTINGS_MODEL_ID = "mailerSettings";
12
11
  exports.SETTINGS_MODEL_ID = SETTINGS_MODEL_ID;
13
12
  const createField = params => {
@@ -35,23 +34,21 @@ const createField = params => {
35
34
  };
36
35
  };
37
36
  const createTextField = params => {
38
- return createField((0, _objectSpread2.default)((0, _objectSpread2.default)({}, params), {}, {
37
+ return createField({
38
+ ...params,
39
39
  type: "text"
40
- }));
40
+ });
41
41
  };
42
42
  const createNumberField = params => {
43
- return createField((0, _objectSpread2.default)((0, _objectSpread2.default)({}, params), {}, {
43
+ return createField({
44
+ ...params,
44
45
  type: "number"
45
- }));
46
+ });
46
47
  };
47
- const createSettingsModel = group => {
48
- return (0, _apiHeadlessCms.createCmsModel)({
49
- modelId: SETTINGS_MODEL_ID,
48
+ const createSettingsModel = () => {
49
+ return (0, _apiHeadlessCms.createCmsModel)((0, _apiHeadlessCms.createPrivateModelDefinition)({
50
50
  name: "Mailer Settings",
51
- group: {
52
- id: group.contentModelGroup.id,
53
- name: group.contentModelGroup.name
54
- },
51
+ modelId: SETTINGS_MODEL_ID,
55
52
  fields: [createTextField({
56
53
  label: "Host",
57
54
  required: true
@@ -68,12 +65,9 @@ const createSettingsModel = group => {
68
65
  required: true
69
66
  }), createTextField({
70
67
  label: "Reply-To"
71
- })],
72
- layout: [["host", "port", "user", "password", "from", "replyTo"]],
73
- description: "Mailer Settings",
74
- titleFieldId: "",
75
- isPrivate: true,
76
- noValidate: true
77
- });
68
+ })]
69
+ }));
78
70
  };
79
- exports.createSettingsModel = createSettingsModel;
71
+ exports.createSettingsModel = createSettingsModel;
72
+
73
+ //# sourceMappingURL=model.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["SETTINGS_MODEL_ID","createField","params","label","required","type","id","lodashCamelCase","validation","push","message","name","settings","fieldId","storageId","createTextField","createNumberField","createSettingsModel","group","createCmsModel","modelId","contentModelGroup","fields","layout","description","titleFieldId","isPrivate","noValidate"],"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 type: string;\n label: string;\n required?: boolean;\n}\nconst createField = (params: CreateFieldParams): CmsModelField => {\n const { label, required, type } = 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,\n validation\n };\n};\n\nconst createTextField = (params: Omit<CreateFieldParams, \"type\">) => {\n return createField({\n ...params,\n type: \"text\"\n });\n};\nconst createNumberField = (params: Omit<CreateFieldParams, \"type\">) => {\n return createField({\n ...params,\n type: \"number\"\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 createTextField({\n label: \"Host\",\n required: true\n }),\n createNumberField({\n label: \"Port\"\n }),\n createTextField({\n label: \"User\",\n required: true\n }),\n createTextField({\n label: \"Password\",\n required: true\n }),\n createTextField({\n label: \"From\",\n required: true\n }),\n createTextField({\n label: \"Reply-To\"\n })\n ],\n layout: [[\"host\", \"port\", \"user\", \"password\", \"from\", \"replyTo\"]],\n description: \"Mailer Settings\",\n titleFieldId: \"\",\n isPrivate: true,\n noValidate: true\n });\n};\n"],"mappings":";;;;;;;;AAAA;AAEA;AAEO,MAAMA,iBAAiB,GAAG,gBAAgB;AAAC;AAOlD,MAAMC,WAAW,GAAIC,MAAyB,IAAoB;EAC9D,MAAM;IAAEC,KAAK;IAAEC,QAAQ;IAAEC;EAAK,CAAC,GAAGH,MAAM;EACxC,MAAMI,EAAE,GAAG,IAAAC,kBAAe,EAACJ,KAAK,CAAC;EAEjC,MAAMK,UAAqC,GAAG,EAAE;EAChD,IAAIJ,QAAQ,EAAE;IACVI,UAAU,CAACC,IAAI,CAAC;MACZC,OAAO,EAAG,UAASP,KAAM,gBAAe;MACxCQ,IAAI,EAAE,UAAU;MAChBC,QAAQ,EAAE,CAAC;IACf,CAAC,CAAC;EACN;EACA,OAAO;IACHT,KAAK;IACLG,EAAE;IACFO,OAAO,EAAEP,EAAE;IACXQ,SAAS,EAAER,EAAE;IACbD,IAAI;IACJG;EACJ,CAAC;AACL,CAAC;AAED,MAAMO,eAAe,GAAIb,MAAuC,IAAK;EACjE,OAAOD,WAAW,6DACXC,MAAM;IACTG,IAAI,EAAE;EAAM,GACd;AACN,CAAC;AACD,MAAMW,iBAAiB,GAAId,MAAuC,IAAK;EACnE,OAAOD,WAAW,6DACXC,MAAM;IACTG,IAAI,EAAE;EAAQ,GAChB;AACN,CAAC;AAEM,MAAMY,mBAAmB,GAAIC,KAAqB,IAAK;EAC1D,OAAO,IAAAC,8BAAc,EAAC;IAClBC,OAAO,EAAEpB,iBAAiB;IAC1BW,IAAI,EAAE,iBAAiB;IACvBO,KAAK,EAAE;MACHZ,EAAE,EAAEY,KAAK,CAACG,iBAAiB,CAACf,EAAE;MAC9BK,IAAI,EAAEO,KAAK,CAACG,iBAAiB,CAACV;IAClC,CAAC;IACDW,MAAM,EAAE,CACJP,eAAe,CAAC;MACZZ,KAAK,EAAE,MAAM;MACbC,QAAQ,EAAE;IACd,CAAC,CAAC,EACFY,iBAAiB,CAAC;MACdb,KAAK,EAAE;IACX,CAAC,CAAC,EACFY,eAAe,CAAC;MACZZ,KAAK,EAAE,MAAM;MACbC,QAAQ,EAAE;IACd,CAAC,CAAC,EACFW,eAAe,CAAC;MACZZ,KAAK,EAAE,UAAU;MACjBC,QAAQ,EAAE;IACd,CAAC,CAAC,EACFW,eAAe,CAAC;MACZZ,KAAK,EAAE,MAAM;MACbC,QAAQ,EAAE;IACd,CAAC,CAAC,EACFW,eAAe,CAAC;MACZZ,KAAK,EAAE;IACX,CAAC,CAAC,CACL;IACDoB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACjEC,WAAW,EAAE,iBAAiB;IAC9BC,YAAY,EAAE,EAAE;IAChBC,SAAS,EAAE,IAAI;IACfC,UAAU,EAAE;EAChB,CAAC,CAAC;AACN,CAAC;AAAC"}
1
+ {"version":3,"names":["_camelCase","_interopRequireDefault","require","_apiHeadlessCms","SETTINGS_MODEL_ID","exports","createField","params","label","required","type","id","lodashCamelCase","validation","push","message","name","settings","fieldId","storageId","createTextField","createNumberField","createSettingsModel","createCmsModel","createPrivateModelDefinition","modelId","fields"],"sources":["model.ts"],"sourcesContent":["import lodashCamelCase from \"lodash/camelCase\";\nimport { createCmsModel, createPrivateModelDefinition } from \"@webiny/api-headless-cms\";\nimport { CmsModelField, CmsModelFieldValidation } from \"@webiny/api-headless-cms/types\";\n\nexport const SETTINGS_MODEL_ID = \"mailerSettings\";\n\ninterface CreateFieldParams {\n type: string;\n label: string;\n required?: boolean;\n}\nconst createField = (params: CreateFieldParams): CmsModelField => {\n const { label, required, type } = 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,\n validation\n };\n};\n\nconst createTextField = (params: Omit<CreateFieldParams, \"type\">) => {\n return createField({\n ...params,\n type: \"text\"\n });\n};\nconst createNumberField = (params: Omit<CreateFieldParams, \"type\">) => {\n return createField({\n ...params,\n type: \"number\"\n });\n};\n\nexport const createSettingsModel = () => {\n return createCmsModel(\n createPrivateModelDefinition({\n name: \"Mailer Settings\",\n modelId: SETTINGS_MODEL_ID,\n fields: [\n createTextField({\n label: \"Host\",\n required: true\n }),\n createNumberField({\n label: \"Port\"\n }),\n createTextField({\n label: \"User\",\n required: true\n }),\n createTextField({\n label: \"Password\",\n required: true\n }),\n createTextField({\n label: \"From\",\n required: true\n }),\n createTextField({\n label: \"Reply-To\"\n })\n ]\n })\n );\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,eAAA,GAAAD,OAAA;AAGO,MAAME,iBAAiB,GAAG,gBAAgB;AAACC,OAAA,CAAAD,iBAAA,GAAAA,iBAAA;AAOlD,MAAME,WAAW,GAAIC,MAAyB,IAAoB;EAC9D,MAAM;IAAEC,KAAK;IAAEC,QAAQ;IAAEC;EAAK,CAAC,GAAGH,MAAM;EACxC,MAAMI,EAAE,GAAG,IAAAC,kBAAe,EAACJ,KAAK,CAAC;EAEjC,MAAMK,UAAqC,GAAG,EAAE;EAChD,IAAIJ,QAAQ,EAAE;IACVI,UAAU,CAACC,IAAI,CAAC;MACZC,OAAO,EAAG,UAASP,KAAM,gBAAe;MACxCQ,IAAI,EAAE,UAAU;MAChBC,QAAQ,EAAE,CAAC;IACf,CAAC,CAAC;EACN;EACA,OAAO;IACHT,KAAK;IACLG,EAAE;IACFO,OAAO,EAAEP,EAAE;IACXQ,SAAS,EAAER,EAAE;IACbD,IAAI;IACJG;EACJ,CAAC;AACL,CAAC;AAED,MAAMO,eAAe,GAAIb,MAAuC,IAAK;EACjE,OAAOD,WAAW,CAAC;IACf,GAAGC,MAAM;IACTG,IAAI,EAAE;EACV,CAAC,CAAC;AACN,CAAC;AACD,MAAMW,iBAAiB,GAAId,MAAuC,IAAK;EACnE,OAAOD,WAAW,CAAC;IACf,GAAGC,MAAM;IACTG,IAAI,EAAE;EACV,CAAC,CAAC;AACN,CAAC;AAEM,MAAMY,mBAAmB,GAAGA,CAAA,KAAM;EACrC,OAAO,IAAAC,8BAAc,EACjB,IAAAC,4CAA4B,EAAC;IACzBR,IAAI,EAAE,iBAAiB;IACvBS,OAAO,EAAErB,iBAAiB;IAC1BsB,MAAM,EAAE,CACJN,eAAe,CAAC;MACZZ,KAAK,EAAE,MAAM;MACbC,QAAQ,EAAE;IACd,CAAC,CAAC,EACFY,iBAAiB,CAAC;MACdb,KAAK,EAAE;IACX,CAAC,CAAC,EACFY,eAAe,CAAC;MACZZ,KAAK,EAAE,MAAM;MACbC,QAAQ,EAAE;IACd,CAAC,CAAC,EACFW,eAAe,CAAC;MACZZ,KAAK,EAAE,UAAU;MACjBC,QAAQ,EAAE;IACd,CAAC,CAAC,EACFW,eAAe,CAAC;MACZZ,KAAK,EAAE,MAAM;MACbC,QAAQ,EAAE;IACd,CAAC,CAAC,EACFW,eAAe,CAAC;MACZZ,KAAK,EAAE;IACX,CAAC,CAAC;EAEV,CAAC,CACL,CAAC;AACL,CAAC;AAACH,OAAA,CAAAiB,mBAAA,GAAAA,mBAAA"}
@@ -50,4 +50,6 @@ const encrypt = params => {
50
50
  }
51
51
  return "";
52
52
  };
53
- exports.encrypt = encrypt;
53
+ exports.encrypt = encrypt;
54
+
55
+ //# sourceMappingURL=password.js.map
@@ -1 +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,MAAc,IAAa;EAC/C,MAAM;IAAEC,KAAK;IAAEC;EAAO,CAAC,GAAGF,MAAM;EAChC,IAAI,CAACE,MAAM,EAAE;IACT,MAAM,IAAIC,cAAW,CAAE,iDAAgD,CAAC;EAC5E;EACA,IAAI,CAACF,KAAK,EAAE;IACR,OAAO,EAAE;EACb;EACA,IAAI;IACA,MAAMG,KAAK,GAAGC,iBAAQ,CAACC,GAAG,CAACP,OAAO,CAACE,KAAK,EAAEC,MAAM,CAAC;IACjD,MAAMK,MAAM,GAAGH,KAAK,CAACI,QAAQ,CAACH,iBAAQ,CAACI,GAAG,CAACC,IAAI,CAAC;IAChD,IAAI,CAACH,MAAM,EAAE;MACTI,OAAO,CAACC,GAAG,CAAE,+DAA8D,CAAC;MAC5E,OAAO,EAAE;IACb;IACA,OAAOL,MAAM;EACjB,CAAC,CAAC,OAAOM,EAAE,EAAE;IACTF,OAAO,CAACC,GAAG,CAAE,6CAA4C,CAAC;EAC9D;EACA,OAAO,EAAE;AACb,CAAC;AAAC;AAEK,MAAME,OAAO,GAAId,MAAc,IAAa;EAC/C,MAAM;IAAEC,KAAK;IAAEC;EAAO,CAAC,GAAGF,MAAM;EAChC,IAAI,CAACE,MAAM,EAAE;IACT,MAAM,IAAIC,cAAW,CAAE,iDAAgD,CAAC;EAC5E;EACA,IAAI,CAACF,KAAK,EAAE;IACR,OAAO,EAAE;EACb;EACA,IAAI;IACA,OAAOI,iBAAQ,CAACC,GAAG,CAACQ,OAAO,CAACb,KAAK,EAAEC,MAAM,CAAC,CAACM,QAAQ,EAAE;EACzD,CAAC,CAAC,OAAOK,EAAE,EAAE;IACTF,OAAO,CAACC,GAAG,CAAE,mCAAkC,CAAC;EACpD;EACA,OAAO,EAAE;AACb,CAAC;AAAC"}
1
+ {"version":3,"names":["_cryptoJs","_interopRequireDefault","require","_error","decrypt","params","value","secret","WebinyError","bytes","CryptoJS","AES","result","toString","enc","Utf8","console","log","ex","exports","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,IAAAA,SAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAF,sBAAA,CAAAC,OAAA;AAOO,MAAME,OAAO,GAAIC,MAAc,IAAa;EAC/C,MAAM;IAAEC,KAAK;IAAEC;EAAO,CAAC,GAAGF,MAAM;EAChC,IAAI,CAACE,MAAM,EAAE;IACT,MAAM,IAAIC,cAAW,CAAE,iDAAgD,CAAC;EAC5E;EACA,IAAI,CAACF,KAAK,EAAE;IACR,OAAO,EAAE;EACb;EACA,IAAI;IACA,MAAMG,KAAK,GAAGC,iBAAQ,CAACC,GAAG,CAACP,OAAO,CAACE,KAAK,EAAEC,MAAM,CAAC;IACjD,MAAMK,MAAM,GAAGH,KAAK,CAACI,QAAQ,CAACH,iBAAQ,CAACI,GAAG,CAACC,IAAI,CAAC;IAChD,IAAI,CAACH,MAAM,EAAE;MACTI,OAAO,CAACC,GAAG,CAAE,+DAA8D,CAAC;MAC5E,OAAO,EAAE;IACb;IACA,OAAOL,MAAM;EACjB,CAAC,CAAC,OAAOM,EAAE,EAAE;IACTF,OAAO,CAACC,GAAG,CAAE,6CAA4C,CAAC;EAC9D;EACA,OAAO,EAAE;AACb,CAAC;AAACE,OAAA,CAAAf,OAAA,GAAAA,OAAA;AAEK,MAAMgB,OAAO,GAAIf,MAAc,IAAa;EAC/C,MAAM;IAAEC,KAAK;IAAEC;EAAO,CAAC,GAAGF,MAAM;EAChC,IAAI,CAACE,MAAM,EAAE;IACT,MAAM,IAAIC,cAAW,CAAE,iDAAgD,CAAC;EAC5E;EACA,IAAI,CAACF,KAAK,EAAE;IACR,OAAO,EAAE;EACb;EACA,IAAI;IACA,OAAOI,iBAAQ,CAACC,GAAG,CAACS,OAAO,CAACd,KAAK,EAAEC,MAAM,CAAC,CAACM,QAAQ,CAAC,CAAC;EACzD,CAAC,CAAC,OAAOK,EAAE,EAAE;IACTF,OAAO,CAACC,GAAG,CAAE,mCAAkC,CAAC;EACpD;EACA,OAAO,EAAE;AACb,CAAC;AAACE,OAAA,CAAAC,OAAA,GAAAA,OAAA"}
@@ -14,4 +14,6 @@ const getSecret = () => {
14
14
  }
15
15
  return value;
16
16
  };
17
- exports.getSecret = getSecret;
17
+ exports.getSecret = getSecret;
18
+
19
+ //# sourceMappingURL=secret.js.map
@@ -1 +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,GAAG,CAACC,6BAA6B;EAE1D,MAAMC,KAAK,GAAGC,MAAM,CAACL,QAAQ,CAAC,CAACM,IAAI,EAAE;EACrC,IAAI,CAACN,QAAQ,IAAI,CAACI,KAAK,EAAE;IACrB,MAAM,IAAIG,cAAW,CAAE,0CAAyC,EAAE,uBAAuB,CAAC;EAC9F;EACA,OAAOH,KAAK;AAChB,CAAC;AAAC"}
1
+ {"version":3,"names":["_error","_interopRequireDefault","require","getSecret","envValue","process","env","WEBINY_MAILER_PASSWORD_SECRET","value","String","trim","WebinyError","exports"],"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,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEO,MAAMC,SAAS,GAAGA,CAAA,KAAc;EACnC,MAAMC,QAAQ,GAAGC,OAAO,CAACC,GAAG,CAACC,6BAA6B;EAE1D,MAAMC,KAAK,GAAGC,MAAM,CAACL,QAAQ,CAAC,CAACM,IAAI,CAAC,CAAC;EACrC,IAAI,CAACN,QAAQ,IAAI,CAACI,KAAK,EAAE;IACrB,MAAM,IAAIG,cAAW,CAAE,0CAAyC,EAAE,uBAAuB,CAAC;EAC9F;EACA,OAAOH,KAAK;AAChB,CAAC;AAACI,OAAA,CAAAT,SAAA,GAAAA,SAAA"}
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.transformValuesFromEntry = exports.transformInputToEntryValues = void 0;
8
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
8
  var _error = _interopRequireDefault(require("@webiny/error"));
10
9
  var _password = require("./password");
11
10
  const transformValuesFromEntry = params => {
@@ -16,14 +15,14 @@ const transformValuesFromEntry = params => {
16
15
  if (!secret) {
17
16
  throw new _error.default(`There is no secret defined. Without it we cannot decrypt the password.`);
18
17
  }
19
- return (0, _objectSpread2.default)((0, _objectSpread2.default)({
20
- id: entry.id
21
- }, entry.values), {}, {
18
+ return {
19
+ id: entry.id,
20
+ ...entry.values,
22
21
  password: (0, _password.decrypt)({
23
22
  value: entry.values.password,
24
23
  secret
25
24
  })
26
- });
25
+ };
27
26
  };
28
27
  exports.transformValuesFromEntry = transformValuesFromEntry;
29
28
  const transformInputToEntryValues = params => {
@@ -34,11 +33,14 @@ const transformInputToEntryValues = params => {
34
33
  if (!secret) {
35
34
  throw new _error.default(`There is no secret defined. Without it we cannot decrypt the password.`);
36
35
  }
37
- return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, values), {}, {
36
+ return {
37
+ ...values,
38
38
  password: (0, _password.encrypt)({
39
39
  value: values.password,
40
40
  secret
41
41
  })
42
- });
42
+ };
43
43
  };
44
- exports.transformInputToEntryValues = transformInputToEntryValues;
44
+ exports.transformInputToEntryValues = transformInputToEntryValues;
45
+
46
+ //# sourceMappingURL=transform.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["transformValuesFromEntry","params","entry","secret","WebinyError","id","values","password","decrypt","value","transformInputToEntryValues","encrypt"],"sources":["transform.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { ExtendedTransportSettings, TransportSettings } from \"~/types\";\nimport { decrypt, encrypt } from \"./password\";\nimport { CmsEntry } from \"@webiny/api-headless-cms/types\";\n\ninterface TransformValuesFromEntryParams {\n entry: CmsEntry<TransportSettings>;\n secret: string | null;\n}\nexport const transformValuesFromEntry = (\n params: TransformValuesFromEntryParams\n): ExtendedTransportSettings => {\n const { entry, secret } = params;\n if (!secret) {\n throw new WebinyError(\n `There is no secret defined. Without it we cannot decrypt the password.`\n );\n }\n return {\n id: entry.id,\n ...entry.values,\n password: decrypt({\n value: entry.values.password,\n secret\n })\n };\n};\n\ninterface TransformValuesToEntryValuesParams {\n values: TransportSettings;\n secret: string | null;\n}\nexport const transformInputToEntryValues = (\n params: TransformValuesToEntryValuesParams\n): TransportSettings => {\n const { values, secret } = params;\n\n if (!secret) {\n throw new WebinyError(\n `There is no secret defined. Without it we cannot decrypt the password.`\n );\n }\n\n return {\n ...values,\n password: encrypt({\n value: values.password,\n secret\n })\n };\n};\n"],"mappings":";;;;;;;;AAAA;AAEA;AAOO,MAAMA,wBAAwB,GACjCC,MAAsC,IACV;EAC5B,MAAM;IAAEC,KAAK;IAAEC;EAAO,CAAC,GAAGF,MAAM;EAChC,IAAI,CAACE,MAAM,EAAE;IACT,MAAM,IAAIC,cAAW,CAChB,wEAAuE,CAC3E;EACL;EACA;IACIC,EAAE,EAAEH,KAAK,CAACG;EAAE,GACTH,KAAK,CAACI,MAAM;IACfC,QAAQ,EAAE,IAAAC,iBAAO,EAAC;MACdC,KAAK,EAAEP,KAAK,CAACI,MAAM,CAACC,QAAQ;MAC5BJ;IACJ,CAAC;EAAC;AAEV,CAAC;AAAC;AAMK,MAAMO,2BAA2B,GACpCT,MAA0C,IACtB;EACpB,MAAM;IAAEK,MAAM;IAAEH;EAAO,CAAC,GAAGF,MAAM;EAEjC,IAAI,CAACE,MAAM,EAAE;IACT,MAAM,IAAIC,cAAW,CAChB,wEAAuE,CAC3E;EACL;EAEA,mEACOE,MAAM;IACTC,QAAQ,EAAE,IAAAI,iBAAO,EAAC;MACdF,KAAK,EAAEH,MAAM,CAACC,QAAQ;MACtBJ;IACJ,CAAC;EAAC;AAEV,CAAC;AAAC"}
1
+ {"version":3,"names":["_error","_interopRequireDefault","require","_password","transformValuesFromEntry","params","entry","secret","WebinyError","id","values","password","decrypt","value","exports","transformInputToEntryValues","encrypt"],"sources":["transform.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { ExtendedTransportSettings, TransportSettings } from \"~/types\";\nimport { decrypt, encrypt } from \"./password\";\nimport { CmsEntry } from \"@webiny/api-headless-cms/types\";\n\ninterface TransformValuesFromEntryParams {\n entry: CmsEntry<TransportSettings>;\n secret: string | null;\n}\nexport const transformValuesFromEntry = (\n params: TransformValuesFromEntryParams\n): ExtendedTransportSettings => {\n const { entry, secret } = params;\n if (!secret) {\n throw new WebinyError(\n `There is no secret defined. Without it we cannot decrypt the password.`\n );\n }\n return {\n id: entry.id,\n ...entry.values,\n password: decrypt({\n value: entry.values.password,\n secret\n })\n };\n};\n\ninterface TransformValuesToEntryValuesParams {\n values: TransportSettings;\n secret: string | null;\n}\nexport const transformInputToEntryValues = (\n params: TransformValuesToEntryValuesParams\n): TransportSettings => {\n const { values, secret } = params;\n\n if (!secret) {\n throw new WebinyError(\n `There is no secret defined. Without it we cannot decrypt the password.`\n );\n }\n\n return {\n ...values,\n password: encrypt({\n value: values.password,\n secret\n })\n };\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,SAAA,GAAAD,OAAA;AAOO,MAAME,wBAAwB,GACjCC,MAAsC,IACV;EAC5B,MAAM;IAAEC,KAAK;IAAEC;EAAO,CAAC,GAAGF,MAAM;EAChC,IAAI,CAACE,MAAM,EAAE;IACT,MAAM,IAAIC,cAAW,CAChB,wEACL,CAAC;EACL;EACA,OAAO;IACHC,EAAE,EAAEH,KAAK,CAACG,EAAE;IACZ,GAAGH,KAAK,CAACI,MAAM;IACfC,QAAQ,EAAE,IAAAC,iBAAO,EAAC;MACdC,KAAK,EAAEP,KAAK,CAACI,MAAM,CAACC,QAAQ;MAC5BJ;IACJ,CAAC;EACL,CAAC;AACL,CAAC;AAACO,OAAA,CAAAV,wBAAA,GAAAA,wBAAA;AAMK,MAAMW,2BAA2B,GACpCV,MAA0C,IACtB;EACpB,MAAM;IAAEK,MAAM;IAAEH;EAAO,CAAC,GAAGF,MAAM;EAEjC,IAAI,CAACE,MAAM,EAAE;IACT,MAAM,IAAIC,cAAW,CAChB,wEACL,CAAC;EACL;EAEA,OAAO;IACH,GAAGE,MAAM;IACTC,QAAQ,EAAE,IAAAK,iBAAO,EAAC;MACdH,KAAK,EAAEH,MAAM,CAACC,QAAQ;MACtBJ;IACJ,CAAC;EACL,CAAC;AACL,CAAC;AAACO,OAAA,CAAAC,2BAAA,GAAAA,2BAAA"}
@@ -7,39 +7,39 @@ export declare const createValidation: zod.ZodObject<{
7
7
  host: zod.ZodString;
8
8
  user: zod.ZodString;
9
9
  }, "strip", zod.ZodTypeAny, {
10
- from: string;
11
- replyTo: string;
12
- password: string;
13
10
  port: number | null;
11
+ password: string;
14
12
  host: string;
15
13
  user: string;
16
- }, {
17
14
  from: string;
18
15
  replyTo: string;
19
- password: string;
16
+ }, {
20
17
  port: number | null;
18
+ password: string;
21
19
  host: string;
22
20
  user: string;
21
+ from: string;
22
+ replyTo: string;
23
23
  }>;
24
24
  export declare const updateValidation: zod.ZodObject<{
25
- password: zod.ZodNullable<zod.ZodString>;
25
+ password: zod.ZodEffects<zod.ZodOptional<zod.ZodOptional<zod.ZodNullable<zod.ZodString>>>, string | null, string | null | undefined>;
26
26
  from: zod.ZodString;
27
27
  port: zod.ZodNullable<zod.ZodNumber>;
28
28
  replyTo: zod.ZodString;
29
29
  host: zod.ZodString;
30
30
  user: zod.ZodString;
31
31
  }, "strip", zod.ZodTypeAny, {
32
- from: string;
33
- replyTo: string;
34
- password: string | null;
35
32
  port: number | null;
33
+ password: string | null;
36
34
  host: string;
37
35
  user: string;
38
- }, {
39
36
  from: string;
40
37
  replyTo: string;
41
- password: string | null;
38
+ }, {
42
39
  port: number | null;
43
40
  host: string;
44
41
  user: string;
42
+ from: string;
43
+ replyTo: string;
44
+ password?: string | null | undefined;
45
45
  }>;
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.updateValidation = exports.createValidation = void 0;
8
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
8
  var _zod = _interopRequireDefault(require("zod"));
10
9
  const password = _zod.default.string().describe("Password");
11
10
  const common = {
@@ -15,11 +14,17 @@ const common = {
15
14
  host: _zod.default.string().describe("Hostname"),
16
15
  user: _zod.default.string().describe("User")
17
16
  };
18
- const createValidation = _zod.default.object((0, _objectSpread2.default)((0, _objectSpread2.default)({}, common), {}, {
17
+ const createValidation = _zod.default.object({
18
+ ...common,
19
19
  password
20
- })).required();
20
+ }).required();
21
21
  exports.createValidation = createValidation;
22
- const updateValidation = _zod.default.object((0, _objectSpread2.default)((0, _objectSpread2.default)({}, common), {}, {
23
- password: password.nullish().optional()
24
- })).required();
25
- exports.updateValidation = updateValidation;
22
+ const updateValidation = _zod.default.object({
23
+ ...common,
24
+ password: password.nullish().optional().transform(value => {
25
+ return value === undefined ? null : value;
26
+ })
27
+ }).required();
28
+ exports.updateValidation = updateValidation;
29
+
30
+ //# sourceMappingURL=validation.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["password","zod","string","describe","common","from","email","port","number","optional","nullish","replyTo","host","user","createValidation","object","required","updateValidation"],"sources":["validation.ts"],"sourcesContent":["import zod from \"zod\";\n\nconst password = zod.string().describe(\"Password\");\n\nconst common = {\n from: zod.string().email().describe(\"Mail from\"),\n port: zod.number().optional().nullish().describe(\"Port\"),\n replyTo: zod.string().email().optional().describe(\"Mail reply-to\"),\n host: zod.string().describe(\"Hostname\"),\n user: zod.string().describe(\"User\")\n};\n\nexport const createValidation = zod\n .object({\n ...common,\n password\n })\n .required();\n\nexport const updateValidation = zod\n .object({\n ...common,\n password: password.nullish().optional()\n })\n .required();\n"],"mappings":";;;;;;;;AAAA;AAEA,MAAMA,QAAQ,GAAGC,YAAG,CAACC,MAAM,EAAE,CAACC,QAAQ,CAAC,UAAU,CAAC;AAElD,MAAMC,MAAM,GAAG;EACXC,IAAI,EAAEJ,YAAG,CAACC,MAAM,EAAE,CAACI,KAAK,EAAE,CAACH,QAAQ,CAAC,WAAW,CAAC;EAChDI,IAAI,EAAEN,YAAG,CAACO,MAAM,EAAE,CAACC,QAAQ,EAAE,CAACC,OAAO,EAAE,CAACP,QAAQ,CAAC,MAAM,CAAC;EACxDQ,OAAO,EAAEV,YAAG,CAACC,MAAM,EAAE,CAACI,KAAK,EAAE,CAACG,QAAQ,EAAE,CAACN,QAAQ,CAAC,eAAe,CAAC;EAClES,IAAI,EAAEX,YAAG,CAACC,MAAM,EAAE,CAACC,QAAQ,CAAC,UAAU,CAAC;EACvCU,IAAI,EAAEZ,YAAG,CAACC,MAAM,EAAE,CAACC,QAAQ,CAAC,MAAM;AACtC,CAAC;AAEM,MAAMW,gBAAgB,GAAGb,YAAG,CAC9Bc,MAAM,6DACAX,MAAM;EACTJ;AAAQ,GACV,CACDgB,QAAQ,EAAE;AAAC;AAET,MAAMC,gBAAgB,GAAGhB,YAAG,CAC9Bc,MAAM,6DACAX,MAAM;EACTJ,QAAQ,EAAEA,QAAQ,CAACU,OAAO,EAAE,CAACD,QAAQ;AAAE,GACzC,CACDO,QAAQ,EAAE;AAAC"}
1
+ {"version":3,"names":["_zod","_interopRequireDefault","require","password","zod","string","describe","common","from","email","port","number","optional","nullish","replyTo","host","user","createValidation","object","required","exports","updateValidation","transform","value","undefined"],"sources":["validation.ts"],"sourcesContent":["import zod from \"zod\";\n\nconst password = zod.string().describe(\"Password\");\n\nconst common = {\n from: zod.string().email().describe(\"Mail from\"),\n port: zod.number().optional().nullish().describe(\"Port\"),\n replyTo: zod.string().email().optional().describe(\"Mail reply-to\"),\n host: zod.string().describe(\"Hostname\"),\n user: zod.string().describe(\"User\")\n};\n\nexport const createValidation = zod\n .object({\n ...common,\n password\n })\n .required();\n\nexport const updateValidation = zod\n .object({\n ...common,\n password: password\n .nullish()\n .optional()\n .transform(value => {\n return value === undefined ? null : value;\n })\n })\n .required();\n"],"mappings":";;;;;;;AAAA,IAAAA,IAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,MAAMC,QAAQ,GAAGC,YAAG,CAACC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,UAAU,CAAC;AAElD,MAAMC,MAAM,GAAG;EACXC,IAAI,EAAEJ,YAAG,CAACC,MAAM,CAAC,CAAC,CAACI,KAAK,CAAC,CAAC,CAACH,QAAQ,CAAC,WAAW,CAAC;EAChDI,IAAI,EAAEN,YAAG,CAACO,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC,CAACP,QAAQ,CAAC,MAAM,CAAC;EACxDQ,OAAO,EAAEV,YAAG,CAACC,MAAM,CAAC,CAAC,CAACI,KAAK,CAAC,CAAC,CAACG,QAAQ,CAAC,CAAC,CAACN,QAAQ,CAAC,eAAe,CAAC;EAClES,IAAI,EAAEX,YAAG,CAACC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,UAAU,CAAC;EACvCU,IAAI,EAAEZ,YAAG,CAACC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,MAAM;AACtC,CAAC;AAEM,MAAMW,gBAAgB,GAAGb,YAAG,CAC9Bc,MAAM,CAAC;EACJ,GAAGX,MAAM;EACTJ;AACJ,CAAC,CAAC,CACDgB,QAAQ,CAAC,CAAC;AAACC,OAAA,CAAAH,gBAAA,GAAAA,gBAAA;AAET,MAAMI,gBAAgB,GAAGjB,YAAG,CAC9Bc,MAAM,CAAC;EACJ,GAAGX,MAAM;EACTJ,QAAQ,EAAEA,QAAQ,CACbU,OAAO,CAAC,CAAC,CACTD,QAAQ,CAAC,CAAC,CACVU,SAAS,CAACC,KAAK,IAAI;IAChB,OAAOA,KAAK,KAAKC,SAAS,GAAG,IAAI,GAAGD,KAAK;EAC7C,CAAC;AACT,CAAC,CAAC,CACDJ,QAAQ,CAAC,CAAC;AAACC,OAAA,CAAAC,gBAAA,GAAAA,gBAAA"}
@@ -5,8 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.createSettingsCrud = void 0;
8
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
9
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
10
8
  var _error = _interopRequireDefault(require("@webiny/error"));
11
9
  var _pubsub = require("@webiny/pubsub");
12
10
  var _model = require("./settings/model");
@@ -15,8 +13,6 @@ var _secret = require("./settings/secret");
15
13
  var _validation = require("./settings/validation");
16
14
  var _hooks = require("./settings/hooks");
17
15
  var _apiSecurity = require("@webiny/api-security");
18
- const _excluded = ["password"],
19
- _excluded2 = ["password"];
20
16
  const defaultPort = 25;
21
17
  /**
22
18
  * Note that settings cannot be used if there is no secret defined.
@@ -115,9 +111,10 @@ const createSettingsCrud = async context => {
115
111
  entry: entry,
116
112
  secret
117
113
  });
118
- const passwordlessSettings = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, settings), {}, {
114
+ const passwordlessSettings = {
115
+ ...settings,
119
116
  password: ""
120
- });
117
+ };
121
118
  await onSettingsAfterGet.publish({
122
119
  tenant,
123
120
  settings: passwordlessSettings
@@ -149,24 +146,25 @@ const createSettingsCrud = async context => {
149
146
  errors: result.error.errors
150
147
  });
151
148
  }
152
- const _result$data = result.data,
153
- {
154
- password
155
- } = _result$data,
156
- settings = (0, _objectWithoutProperties2.default)(_result$data, _excluded);
157
- const passwordlessSettings = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, settings), {}, {
149
+ const {
150
+ password,
151
+ ...settings
152
+ } = result.data;
153
+ const passwordlessSettings = {
154
+ ...settings,
158
155
  port: settings.port || defaultPort,
159
156
  password: ""
160
- });
157
+ };
161
158
  return await context.security.withoutAuthorization(async () => {
162
159
  try {
163
160
  await onSettingsBeforeCreate.publish({
164
161
  settings: passwordlessSettings
165
162
  });
166
163
  await context.cms.createEntry(model, (0, _transform.transformInputToEntryValues)({
167
- values: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, passwordlessSettings), {}, {
164
+ values: {
165
+ ...passwordlessSettings,
168
166
  password
169
- }),
167
+ },
170
168
  secret
171
169
  }));
172
170
  await onSettingsAfterCreate.publish({
@@ -208,15 +206,15 @@ const createSettingsCrud = async context => {
208
206
  if (!original) {
209
207
  throw new _error.default(`You are trying to update settings, but there is no existing record. Create it first!`, "NOT_FOUND");
210
208
  }
211
- const _result$data2 = result.data,
212
- {
213
- password
214
- } = _result$data2,
215
- settings = (0, _objectWithoutProperties2.default)(_result$data2, _excluded2);
216
- const passwordlessSettings = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, settings), {}, {
209
+ const {
210
+ password,
211
+ ...settings
212
+ } = result.data;
213
+ const passwordlessSettings = {
214
+ ...settings,
217
215
  port: settings.port || original.port || defaultPort,
218
216
  password: ""
219
- });
217
+ };
220
218
  return await context.security.withoutAuthorization(async () => {
221
219
  try {
222
220
  await onSettingsBeforeUpdate.publish({
@@ -224,9 +222,10 @@ const createSettingsCrud = async context => {
224
222
  original: original
225
223
  });
226
224
  const transformedInput = (0, _transform.transformInputToEntryValues)({
227
- values: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, passwordlessSettings), {}, {
225
+ values: {
226
+ ...passwordlessSettings,
228
227
  password: password || original.password
229
- }),
228
+ },
230
229
  secret
231
230
  });
232
231
  /**
@@ -265,4 +264,6 @@ const createSettingsCrud = async context => {
265
264
  }
266
265
  };
267
266
  };
268
- exports.createSettingsCrud = createSettingsCrud;
267
+ exports.createSettingsCrud = createSettingsCrud;
268
+
269
+ //# sourceMappingURL=settings.crud.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["defaultPort","createSettingsCrud","context","attachPasswordObfuscatingHooks","getTenant","tenancy","getCurrentTenant","id","validateAccess","permission","security","getPermission","NotAuthorizedError","data","reason","secret","getSecret","ex","getModel","withoutAuthorization","model","cms","SETTINGS_MODEL_ID","WebinyError","message","code","modelId","onSettingsBeforeGet","createTopic","onSettingsAfterGet","onSettingsGetError","onSettingsBeforeCreate","onSettingsAfterCreate","onSettingsCreateError","onSettingsBeforeUpdate","onSettingsAfterUpdate","onSettingsUpdateError","checkSecret","description","getSettings","tenant","publish","entries","listLatestEntries","limit","sort","entry","settings","transformValuesFromEntry","passwordlessSettings","password","error","createSettings","params","input","result","createValidation","safeParse","success","errors","port","createEntry","transformInputToEntryValues","values","updateSettings","original","initialOriginal","updateValidation","dbOriginal","transformedInput","updateEntry","saveSettings"],"sources":["settings.crud.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport {\n ExtendedTransportSettings,\n MailerContext,\n MailerContextObject,\n MailerSettingsContext,\n OnSettingsAfterCreateTopicParams,\n OnSettingsAfterGetTopicParams,\n OnSettingsAfterUpdateTopicParams,\n OnSettingsBeforeCreateTopicParams,\n OnSettingsBeforeGetTopicParams,\n OnSettingsBeforeUpdateTopicParams,\n OnSettingsCreateErrorTopicParams,\n OnSettingsGetErrorTopicParams,\n OnSettingsUpdateErrorTopicParams,\n TransportSettings\n} from \"~/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { SETTINGS_MODEL_ID } from \"./settings/model\";\nimport { transformInputToEntryValues, transformValuesFromEntry } from \"~/crud/settings/transform\";\nimport { getSecret } from \"~/crud/settings/secret\";\nimport { createValidation, updateValidation } from \"~/crud/settings/validation\";\nimport { CmsEntry, CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { attachPasswordObfuscatingHooks } from \"~/crud/settings/hooks\";\nimport { NotAuthorizedError } from \"@webiny/api-security\";\n\nconst defaultPort = 25;\n/**\n * Note that settings cannot be used if there is no secret defined.\n */\nexport const createSettingsCrud = async (\n context: MailerContext\n): Promise<MailerSettingsContext> => {\n /**\n * We need to remove password from all references on create and update in the CMS.\n */\n attachPasswordObfuscatingHooks(context);\n\n const getTenant = () => {\n return context.tenancy.getCurrentTenant().id;\n };\n\n const validateAccess = async () => {\n const permission = await context.security.getPermission(\"mailer.settings\");\n\n if (permission) {\n return;\n }\n throw new NotAuthorizedError({\n data: {\n reason: `Not allowed to update the mailer settings.`\n }\n });\n };\n\n let secret: string | null = null;\n try {\n secret = getSecret();\n } catch (ex) {}\n\n const getModel = async (): Promise<CmsModel> => {\n return context.security.withoutAuthorization(async () => {\n try {\n const model = await context.cms.getModel(SETTINGS_MODEL_ID);\n if (model) {\n return model;\n }\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code, ex.data);\n }\n throw new WebinyError(\n `Missing CMS Model \"${SETTINGS_MODEL_ID}\".`,\n \"CMS_MODEL_MISSING\",\n {\n modelId: SETTINGS_MODEL_ID\n }\n );\n });\n };\n\n // get\n const onSettingsBeforeGet = createTopic<OnSettingsBeforeGetTopicParams>(\n \"mailer.onSettingsBeforeGet\"\n );\n const onSettingsAfterGet = createTopic<OnSettingsAfterGetTopicParams>(\n \"mailer.onSettingsAfterGet\"\n );\n const onSettingsGetError = createTopic<OnSettingsGetErrorTopicParams>(\n \"mailer.onSettingsCreateError\"\n );\n // create\n const onSettingsBeforeCreate = createTopic<OnSettingsBeforeCreateTopicParams>(\n \"mailer.onSettingsBeforeCreate\"\n );\n const onSettingsAfterCreate = createTopic<OnSettingsAfterCreateTopicParams>(\n \"mailer.onSettingsAfterCreate\"\n );\n const onSettingsCreateError = createTopic<OnSettingsCreateErrorTopicParams>(\n \"mailer.onSettingsCreateError\"\n );\n // update\n const onSettingsBeforeUpdate = createTopic<OnSettingsBeforeUpdateTopicParams>(\n \"mailer.onSettingsBeforeUpdate\"\n );\n const onSettingsAfterUpdate = createTopic<OnSettingsAfterUpdateTopicParams>(\n \"mailer.onSettingsAfterUpdate\"\n );\n const onSettingsUpdateError = createTopic<OnSettingsUpdateErrorTopicParams>(\n \"mailer.onSettingsUpdateError\"\n );\n\n const checkSecret = (): void => {\n if (secret) {\n return;\n }\n throw new WebinyError(\"There must be a password secret defined!\", \"PASSWORD_SECRET_ERROR\", {\n description:\n \"To store the Mailer settings, you must have a password secret environment variable defined.\"\n });\n };\n\n return {\n onSettingsAfterGet,\n onSettingsBeforeGet,\n onSettingsGetError,\n onSettingsBeforeCreate,\n onSettingsAfterCreate,\n onSettingsCreateError,\n onSettingsBeforeUpdate,\n onSettingsAfterUpdate,\n onSettingsUpdateError,\n getSettings: async () => {\n checkSecret();\n\n const model = await getModel();\n\n const tenant = getTenant();\n return await context.security.withoutAuthorization(async () => {\n try {\n await onSettingsBeforeGet.publish({\n tenant\n });\n /**\n * We always list because we have no id or something like that to query by.\n * This should return one setting anyway.\n */\n const [entries] = await context.cms.listLatestEntries(model, {\n limit: 1,\n sort: [\"createdOn_DESC\"]\n });\n const [entry] = entries;\n if (!entry) {\n return null;\n }\n const settings = transformValuesFromEntry({\n entry: entry as CmsEntry<TransportSettings>,\n secret\n });\n\n const passwordlessSettings: TransportSettings = {\n ...settings,\n password: \"\"\n };\n\n await onSettingsAfterGet.publish({\n tenant,\n settings: passwordlessSettings\n });\n\n return settings;\n } catch (ex) {\n await onSettingsGetError.publish({\n tenant,\n error: ex\n });\n }\n return null;\n });\n },\n /**\n * Method should not be used outside of mailer\n * @internal\n */\n async createSettings(this: MailerContextObject, params) {\n checkSecret();\n await validateAccess();\n\n const { input } = params;\n\n const model = await getModel();\n\n const result = createValidation.safeParse(input);\n\n if (!result.success) {\n throw new WebinyError(\"Validation failed!\", \"VALIDATION_ERROR\", {\n errors: result.error.errors\n });\n }\n\n const { password, ...settings } = result.data;\n\n const passwordlessSettings: TransportSettings = {\n ...settings,\n port: settings.port || defaultPort,\n password: \"\"\n };\n\n return await context.security.withoutAuthorization(async () => {\n try {\n await onSettingsBeforeCreate.publish({\n settings: passwordlessSettings\n });\n\n await context.cms.createEntry(\n model,\n transformInputToEntryValues({\n values: {\n ...passwordlessSettings,\n password\n },\n secret\n })\n );\n\n await onSettingsAfterCreate.publish({\n settings: passwordlessSettings\n });\n return passwordlessSettings;\n } catch (ex) {\n await onSettingsCreateError.publish({\n settings: passwordlessSettings,\n error: ex\n });\n throw new WebinyError(ex.message, ex.code, ex.data);\n }\n });\n },\n /**\n * Method should not be used outside of mailer\n * @internal\n */\n async updateSettings(this: MailerContextObject, params) {\n checkSecret();\n await validateAccess();\n\n const { input, original: initialOriginal } = params;\n\n const model = await getModel();\n\n const result = updateValidation.safeParse(input);\n\n if (!result.success) {\n throw new WebinyError(\"Validation failed!\", \"VALIDATION_ERROR\", {\n errors: result.error.errors\n });\n }\n\n let dbOriginal: ExtendedTransportSettings | null = null;\n if (!initialOriginal) {\n dbOriginal = await this.getSettings();\n }\n const original = initialOriginal || dbOriginal;\n if (!original) {\n throw new WebinyError(\n `You are trying to update settings, but there is no existing record. Create it first!`,\n \"NOT_FOUND\"\n );\n }\n\n const { password, ...settings } = result.data;\n\n const passwordlessSettings: TransportSettings = {\n ...settings,\n port: settings.port || original.port || defaultPort,\n password: \"\"\n };\n return await context.security.withoutAuthorization(async () => {\n try {\n await onSettingsBeforeUpdate.publish({\n settings: passwordlessSettings,\n original: original\n });\n\n const transformedInput = transformInputToEntryValues({\n values: {\n ...passwordlessSettings,\n password: password || original.password\n },\n secret\n });\n /**\n * We want to make sure that old password gets stored again in case no password was sent in update input.\n */\n await context.cms.updateEntry(model, original.id, transformedInput);\n\n await onSettingsAfterUpdate.publish({\n settings: passwordlessSettings,\n original\n });\n return passwordlessSettings;\n } catch (ex) {\n await onSettingsUpdateError.publish({\n original,\n settings: passwordlessSettings,\n error: ex\n });\n throw new WebinyError(ex.message, ex.code, ex.data);\n }\n });\n },\n async saveSettings(this: MailerContextObject, params) {\n const { input } = params;\n\n const original = await this.getSettings();\n if (!original) {\n return this.createSettings({\n input\n });\n }\n return this.updateSettings({\n input,\n original\n });\n }\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["_error","_interopRequireDefault","require","_pubsub","_model","_transform","_secret","_validation","_hooks","_apiSecurity","defaultPort","createSettingsCrud","context","attachPasswordObfuscatingHooks","getTenant","tenancy","getCurrentTenant","id","validateAccess","permission","security","getPermission","NotAuthorizedError","data","reason","secret","getSecret","ex","getModel","withoutAuthorization","model","cms","SETTINGS_MODEL_ID","WebinyError","message","code","modelId","onSettingsBeforeGet","createTopic","onSettingsAfterGet","onSettingsGetError","onSettingsBeforeCreate","onSettingsAfterCreate","onSettingsCreateError","onSettingsBeforeUpdate","onSettingsAfterUpdate","onSettingsUpdateError","checkSecret","description","getSettings","tenant","publish","entries","listLatestEntries","limit","sort","entry","settings","transformValuesFromEntry","passwordlessSettings","password","error","createSettings","params","input","result","createValidation","safeParse","success","errors","port","createEntry","transformInputToEntryValues","values","updateSettings","original","initialOriginal","updateValidation","dbOriginal","transformedInput","updateEntry","saveSettings","exports"],"sources":["settings.crud.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport {\n ExtendedTransportSettings,\n MailerContext,\n MailerContextObject,\n MailerSettingsContext,\n OnSettingsAfterCreateTopicParams,\n OnSettingsAfterGetTopicParams,\n OnSettingsAfterUpdateTopicParams,\n OnSettingsBeforeCreateTopicParams,\n OnSettingsBeforeGetTopicParams,\n OnSettingsBeforeUpdateTopicParams,\n OnSettingsCreateErrorTopicParams,\n OnSettingsGetErrorTopicParams,\n OnSettingsUpdateErrorTopicParams,\n TransportSettings\n} from \"~/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { SETTINGS_MODEL_ID } from \"./settings/model\";\nimport { transformInputToEntryValues, transformValuesFromEntry } from \"~/crud/settings/transform\";\nimport { getSecret } from \"~/crud/settings/secret\";\nimport { createValidation, updateValidation } from \"~/crud/settings/validation\";\nimport { CmsEntry, CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { attachPasswordObfuscatingHooks } from \"~/crud/settings/hooks\";\nimport { NotAuthorizedError } from \"@webiny/api-security\";\n\nconst defaultPort = 25;\n/**\n * Note that settings cannot be used if there is no secret defined.\n */\nexport const createSettingsCrud = async (\n context: MailerContext\n): Promise<MailerSettingsContext> => {\n /**\n * We need to remove password from all references on create and update in the CMS.\n */\n attachPasswordObfuscatingHooks(context);\n\n const getTenant = () => {\n return context.tenancy.getCurrentTenant().id;\n };\n\n const validateAccess = async () => {\n const permission = await context.security.getPermission(\"mailer.settings\");\n\n if (permission) {\n return;\n }\n throw new NotAuthorizedError({\n data: {\n reason: `Not allowed to update the mailer settings.`\n }\n });\n };\n\n let secret: string | null = null;\n try {\n secret = getSecret();\n } catch (ex) {}\n\n const getModel = async (): Promise<CmsModel> => {\n return context.security.withoutAuthorization(async () => {\n try {\n const model = await context.cms.getModel(SETTINGS_MODEL_ID);\n if (model) {\n return model;\n }\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code, ex.data);\n }\n throw new WebinyError(\n `Missing CMS Model \"${SETTINGS_MODEL_ID}\".`,\n \"CMS_MODEL_MISSING\",\n {\n modelId: SETTINGS_MODEL_ID\n }\n );\n });\n };\n\n // get\n const onSettingsBeforeGet = createTopic<OnSettingsBeforeGetTopicParams>(\n \"mailer.onSettingsBeforeGet\"\n );\n const onSettingsAfterGet = createTopic<OnSettingsAfterGetTopicParams>(\n \"mailer.onSettingsAfterGet\"\n );\n const onSettingsGetError = createTopic<OnSettingsGetErrorTopicParams>(\n \"mailer.onSettingsCreateError\"\n );\n // create\n const onSettingsBeforeCreate = createTopic<OnSettingsBeforeCreateTopicParams>(\n \"mailer.onSettingsBeforeCreate\"\n );\n const onSettingsAfterCreate = createTopic<OnSettingsAfterCreateTopicParams>(\n \"mailer.onSettingsAfterCreate\"\n );\n const onSettingsCreateError = createTopic<OnSettingsCreateErrorTopicParams>(\n \"mailer.onSettingsCreateError\"\n );\n // update\n const onSettingsBeforeUpdate = createTopic<OnSettingsBeforeUpdateTopicParams>(\n \"mailer.onSettingsBeforeUpdate\"\n );\n const onSettingsAfterUpdate = createTopic<OnSettingsAfterUpdateTopicParams>(\n \"mailer.onSettingsAfterUpdate\"\n );\n const onSettingsUpdateError = createTopic<OnSettingsUpdateErrorTopicParams>(\n \"mailer.onSettingsUpdateError\"\n );\n\n const checkSecret = (): void => {\n if (secret) {\n return;\n }\n throw new WebinyError(\"There must be a password secret defined!\", \"PASSWORD_SECRET_ERROR\", {\n description:\n \"To store the Mailer settings, you must have a password secret environment variable defined.\"\n });\n };\n\n return {\n onSettingsAfterGet,\n onSettingsBeforeGet,\n onSettingsGetError,\n onSettingsBeforeCreate,\n onSettingsAfterCreate,\n onSettingsCreateError,\n onSettingsBeforeUpdate,\n onSettingsAfterUpdate,\n onSettingsUpdateError,\n getSettings: async () => {\n checkSecret();\n\n const model = await getModel();\n\n const tenant = getTenant();\n return await context.security.withoutAuthorization(async () => {\n try {\n await onSettingsBeforeGet.publish({\n tenant\n });\n /**\n * We always list because we have no id or something like that to query by.\n * This should return one setting anyway.\n */\n const [entries] = await context.cms.listLatestEntries(model, {\n limit: 1,\n sort: [\"createdOn_DESC\"]\n });\n const [entry] = entries;\n if (!entry) {\n return null;\n }\n const settings = transformValuesFromEntry({\n entry: entry as CmsEntry<TransportSettings>,\n secret\n });\n\n const passwordlessSettings: TransportSettings = {\n ...settings,\n password: \"\"\n };\n\n await onSettingsAfterGet.publish({\n tenant,\n settings: passwordlessSettings\n });\n\n return settings;\n } catch (ex) {\n await onSettingsGetError.publish({\n tenant,\n error: ex\n });\n }\n return null;\n });\n },\n /**\n * Method should not be used outside of mailer\n * @internal\n */\n async createSettings(this: MailerContextObject, params) {\n checkSecret();\n await validateAccess();\n\n const { input } = params;\n\n const model = await getModel();\n\n const result = createValidation.safeParse(input);\n\n if (!result.success) {\n throw new WebinyError(\"Validation failed!\", \"VALIDATION_ERROR\", {\n errors: result.error.errors\n });\n }\n\n const { password, ...settings } = result.data;\n\n const passwordlessSettings: TransportSettings = {\n ...settings,\n port: settings.port || defaultPort,\n password: \"\"\n };\n\n return await context.security.withoutAuthorization(async () => {\n try {\n await onSettingsBeforeCreate.publish({\n settings: passwordlessSettings\n });\n\n await context.cms.createEntry(\n model,\n transformInputToEntryValues({\n values: {\n ...passwordlessSettings,\n password\n },\n secret\n })\n );\n\n await onSettingsAfterCreate.publish({\n settings: passwordlessSettings\n });\n return passwordlessSettings;\n } catch (ex) {\n await onSettingsCreateError.publish({\n settings: passwordlessSettings,\n error: ex\n });\n throw new WebinyError(ex.message, ex.code, ex.data);\n }\n });\n },\n /**\n * Method should not be used outside of mailer\n * @internal\n */\n async updateSettings(this: MailerContextObject, params) {\n checkSecret();\n await validateAccess();\n\n const { input, original: initialOriginal } = params;\n\n const model = await getModel();\n\n const result = updateValidation.safeParse(input);\n\n if (!result.success) {\n throw new WebinyError(\"Validation failed!\", \"VALIDATION_ERROR\", {\n errors: result.error.errors\n });\n }\n\n let dbOriginal: ExtendedTransportSettings | null = null;\n if (!initialOriginal) {\n dbOriginal = await this.getSettings();\n }\n const original = initialOriginal || dbOriginal;\n if (!original) {\n throw new WebinyError(\n `You are trying to update settings, but there is no existing record. Create it first!`,\n \"NOT_FOUND\"\n );\n }\n\n const { password, ...settings } = result.data;\n\n const passwordlessSettings: TransportSettings = {\n ...settings,\n port: settings.port || original.port || defaultPort,\n password: \"\"\n };\n return await context.security.withoutAuthorization(async () => {\n try {\n await onSettingsBeforeUpdate.publish({\n settings: passwordlessSettings,\n original: original\n });\n\n const transformedInput = transformInputToEntryValues({\n values: {\n ...passwordlessSettings,\n password: password || original.password\n },\n secret\n });\n /**\n * We want to make sure that old password gets stored again in case no password was sent in update input.\n */\n await context.cms.updateEntry(model, original.id, transformedInput);\n\n await onSettingsAfterUpdate.publish({\n settings: passwordlessSettings,\n original\n });\n return passwordlessSettings;\n } catch (ex) {\n await onSettingsUpdateError.publish({\n original,\n settings: passwordlessSettings,\n error: ex\n });\n throw new WebinyError(ex.message, ex.code, ex.data);\n }\n });\n },\n async saveSettings(this: MailerContextObject, params) {\n const { input } = params;\n\n const original = await this.getSettings();\n if (!original) {\n return this.createSettings({\n input\n });\n }\n return this.updateSettings({\n input,\n original\n });\n }\n };\n};\n"],"mappings":"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"}
@@ -57,4 +57,6 @@ const attachOnTransportBeforeSend = params => {
57
57
  }
58
58
  });
59
59
  };
60
- exports.attachOnTransportBeforeSend = attachOnTransportBeforeSend;
60
+ exports.attachOnTransportBeforeSend = attachOnTransportBeforeSend;
61
+
62
+ //# sourceMappingURL=onTransportBeforeSend.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["requiredString","zod","string","requiredEmail","email","schema","object","to","array","optional","from","subject","max","min","cc","bcc","replyTo","text","html","refine","data","attachOnTransportBeforeSend","params","onTransportBeforeSend","subscribe","input","result","safeParse","success","WebinyError","message","code","error","ex"],"sources":["onTransportBeforeSend.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport zod from \"zod\";\nimport { Topic } from \"@webiny/pubsub/types\";\nimport { OnTransportBeforeSendParams } from \"~/types\";\nimport { SafeParseReturnType } from \"zod/lib/types\";\n\nconst requiredString = zod.string();\nconst requiredEmail = requiredString.email();\n\nconst schema = zod\n .object({\n to: zod.array(requiredEmail).optional(),\n from: zod.string().email().optional(),\n subject: requiredString.max(1024).min(2),\n cc: zod.array(requiredEmail).optional(),\n bcc: zod.array(requiredEmail).optional(),\n replyTo: zod.string().email().optional(),\n text: zod.string().optional(),\n html: zod.string().optional()\n })\n .refine(data => {\n return !!data.text || !!data.html;\n }, \"Either text or html is required.\");\n\ntype SchemaType = zod.infer<typeof schema>;\n\ninterface Params {\n onTransportBeforeSend: Topic<OnTransportBeforeSendParams>;\n}\nexport const attachOnTransportBeforeSend = (params: Params) => {\n const { onTransportBeforeSend } = params;\n\n onTransportBeforeSend.subscribe(async ({ data: input }) => {\n let result: SafeParseReturnType<SchemaType, SchemaType>;\n try {\n result = schema.safeParse(input);\n\n if (result.success) {\n return;\n }\n throw new WebinyError({\n message: \"Error while validating e-mail params.\",\n code: \"VALIDATION_ERROR\",\n data: {\n error: result.error,\n input\n }\n });\n } catch (ex) {\n if (ex instanceof WebinyError) {\n throw ex;\n }\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 });\n};\n"],"mappings":";;;;;;;AAAA;AACA;AAKA,MAAMA,cAAc,GAAGC,YAAG,CAACC,MAAM,EAAE;AACnC,MAAMC,aAAa,GAAGH,cAAc,CAACI,KAAK,EAAE;AAE5C,MAAMC,MAAM,GAAGJ,YAAG,CACbK,MAAM,CAAC;EACJC,EAAE,EAAEN,YAAG,CAACO,KAAK,CAACL,aAAa,CAAC,CAACM,QAAQ,EAAE;EACvCC,IAAI,EAAET,YAAG,CAACC,MAAM,EAAE,CAACE,KAAK,EAAE,CAACK,QAAQ,EAAE;EACrCE,OAAO,EAAEX,cAAc,CAACY,GAAG,CAAC,IAAI,CAAC,CAACC,GAAG,CAAC,CAAC,CAAC;EACxCC,EAAE,EAAEb,YAAG,CAACO,KAAK,CAACL,aAAa,CAAC,CAACM,QAAQ,EAAE;EACvCM,GAAG,EAAEd,YAAG,CAACO,KAAK,CAACL,aAAa,CAAC,CAACM,QAAQ,EAAE;EACxCO,OAAO,EAAEf,YAAG,CAACC,MAAM,EAAE,CAACE,KAAK,EAAE,CAACK,QAAQ,EAAE;EACxCQ,IAAI,EAAEhB,YAAG,CAACC,MAAM,EAAE,CAACO,QAAQ,EAAE;EAC7BS,IAAI,EAAEjB,YAAG,CAACC,MAAM,EAAE,CAACO,QAAQ;AAC/B,CAAC,CAAC,CACDU,MAAM,CAACC,IAAI,IAAI;EACZ,OAAO,CAAC,CAACA,IAAI,CAACH,IAAI,IAAI,CAAC,CAACG,IAAI,CAACF,IAAI;AACrC,CAAC,EAAE,kCAAkC,CAAC;AAOnC,MAAMG,2BAA2B,GAAIC,MAAc,IAAK;EAC3D,MAAM;IAAEC;EAAsB,CAAC,GAAGD,MAAM;EAExCC,qBAAqB,CAACC,SAAS,CAAC,OAAO;IAAEJ,IAAI,EAAEK;EAAM,CAAC,KAAK;IACvD,IAAIC,MAAmD;IACvD,IAAI;MACAA,MAAM,GAAGrB,MAAM,CAACsB,SAAS,CAACF,KAAK,CAAC;MAEhC,IAAIC,MAAM,CAACE,OAAO,EAAE;QAChB;MACJ;MACA,MAAM,IAAIC,cAAW,CAAC;QAClBC,OAAO,EAAE,uCAAuC;QAChDC,IAAI,EAAE,kBAAkB;QACxBX,IAAI,EAAE;UACFY,KAAK,EAAEN,MAAM,CAACM,KAAK;UACnBP;QACJ;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAOQ,EAAE,EAAE;MACT,IAAIA,EAAE,YAAYJ,cAAW,EAAE;QAC3B,MAAMI,EAAE;MACZ;MACA,MAAM,IAAIJ,cAAW,CAAC;QAClBC,OAAO,EAAE,uCAAuC;QAChDC,IAAI,EAAE,kBAAkB;QACxBX,IAAI,EAAE;UACFK,KAAK;UACLO,KAAK,EAAEC;QACX;MACJ,CAAC,CAAC;IACN;EACJ,CAAC,CAAC;AACN,CAAC;AAAC"}
1
+ {"version":3,"names":["_error","_interopRequireDefault","require","_zod","requiredString","zod","string","requiredEmail","email","schema","object","to","array","optional","from","subject","max","min","cc","bcc","replyTo","text","html","refine","data","attachOnTransportBeforeSend","params","onTransportBeforeSend","subscribe","input","result","safeParse","success","WebinyError","message","code","error","ex","exports"],"sources":["onTransportBeforeSend.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport zod from \"zod\";\nimport { Topic } from \"@webiny/pubsub/types\";\nimport { OnTransportBeforeSendParams } from \"~/types\";\nimport { SafeParseReturnType } from \"zod/lib/types\";\n\nconst requiredString = zod.string();\nconst requiredEmail = requiredString.email();\n\nconst schema = zod\n .object({\n to: zod.array(requiredEmail).optional(),\n from: zod.string().email().optional(),\n subject: requiredString.max(1024).min(2),\n cc: zod.array(requiredEmail).optional(),\n bcc: zod.array(requiredEmail).optional(),\n replyTo: zod.string().email().optional(),\n text: zod.string().optional(),\n html: zod.string().optional()\n })\n .refine(data => {\n return !!data.text || !!data.html;\n }, \"Either text or html is required.\");\n\ntype SchemaType = zod.infer<typeof schema>;\n\ninterface Params {\n onTransportBeforeSend: Topic<OnTransportBeforeSendParams>;\n}\nexport const attachOnTransportBeforeSend = (params: Params) => {\n const { onTransportBeforeSend } = params;\n\n onTransportBeforeSend.subscribe(async ({ data: input }) => {\n let result: SafeParseReturnType<SchemaType, SchemaType>;\n try {\n result = schema.safeParse(input);\n\n if (result.success) {\n return;\n }\n throw new WebinyError({\n message: \"Error while validating e-mail params.\",\n code: \"VALIDATION_ERROR\",\n data: {\n error: result.error,\n input\n }\n });\n } catch (ex) {\n if (ex instanceof WebinyError) {\n throw ex;\n }\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 });\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,IAAA,GAAAF,sBAAA,CAAAC,OAAA;AAKA,MAAME,cAAc,GAAGC,YAAG,CAACC,MAAM,CAAC,CAAC;AACnC,MAAMC,aAAa,GAAGH,cAAc,CAACI,KAAK,CAAC,CAAC;AAE5C,MAAMC,MAAM,GAAGJ,YAAG,CACbK,MAAM,CAAC;EACJC,EAAE,EAAEN,YAAG,CAACO,KAAK,CAACL,aAAa,CAAC,CAACM,QAAQ,CAAC,CAAC;EACvCC,IAAI,EAAET,YAAG,CAACC,MAAM,CAAC,CAAC,CAACE,KAAK,CAAC,CAAC,CAACK,QAAQ,CAAC,CAAC;EACrCE,OAAO,EAAEX,cAAc,CAACY,GAAG,CAAC,IAAI,CAAC,CAACC,GAAG,CAAC,CAAC,CAAC;EACxCC,EAAE,EAAEb,YAAG,CAACO,KAAK,CAACL,aAAa,CAAC,CAACM,QAAQ,CAAC,CAAC;EACvCM,GAAG,EAAEd,YAAG,CAACO,KAAK,CAACL,aAAa,CAAC,CAACM,QAAQ,CAAC,CAAC;EACxCO,OAAO,EAAEf,YAAG,CAACC,MAAM,CAAC,CAAC,CAACE,KAAK,CAAC,CAAC,CAACK,QAAQ,CAAC,CAAC;EACxCQ,IAAI,EAAEhB,YAAG,CAACC,MAAM,CAAC,CAAC,CAACO,QAAQ,CAAC,CAAC;EAC7BS,IAAI,EAAEjB,YAAG,CAACC,MAAM,CAAC,CAAC,CAACO,QAAQ,CAAC;AAChC,CAAC,CAAC,CACDU,MAAM,CAACC,IAAI,IAAI;EACZ,OAAO,CAAC,CAACA,IAAI,CAACH,IAAI,IAAI,CAAC,CAACG,IAAI,CAACF,IAAI;AACrC,CAAC,EAAE,kCAAkC,CAAC;AAOnC,MAAMG,2BAA2B,GAAIC,MAAc,IAAK;EAC3D,MAAM;IAAEC;EAAsB,CAAC,GAAGD,MAAM;EAExCC,qBAAqB,CAACC,SAAS,CAAC,OAAO;IAAEJ,IAAI,EAAEK;EAAM,CAAC,KAAK;IACvD,IAAIC,MAAmD;IACvD,IAAI;MACAA,MAAM,GAAGrB,MAAM,CAACsB,SAAS,CAACF,KAAK,CAAC;MAEhC,IAAIC,MAAM,CAACE,OAAO,EAAE;QAChB;MACJ;MACA,MAAM,IAAIC,cAAW,CAAC;QAClBC,OAAO,EAAE,uCAAuC;QAChDC,IAAI,EAAE,kBAAkB;QACxBX,IAAI,EAAE;UACFY,KAAK,EAAEN,MAAM,CAACM,KAAK;UACnBP;QACJ;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAOQ,EAAE,EAAE;MACT,IAAIA,EAAE,YAAYJ,cAAW,EAAE;QAC3B,MAAMI,EAAE;MACZ;MACA,MAAM,IAAIJ,cAAW,CAAC;QAClBC,OAAO,EAAE,uCAAuC;QAChDC,IAAI,EAAE,kBAAkB;QACxBX,IAAI,EAAE;UACFK,KAAK;UACLO,KAAK,EAAEC;QACX;MACJ,CAAC,CAAC;IACN;EACJ,CAAC,CAAC;AACN,CAAC;AAACC,OAAA,CAAAb,2BAAA,GAAAA,2BAAA"}
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.createTransporterCrud = void 0;
8
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
8
  var _pubsub = require("@webiny/pubsub");
10
9
  var _onTransportBeforeSend = require("./transport/onTransportBeforeSend");
11
10
  var _plugins = require("../plugins");
@@ -144,13 +143,16 @@ const createTransporterCrud = async context => {
144
143
  error: {
145
144
  message: ex.message,
146
145
  code: ex.code,
147
- data: (0, _objectSpread2.default)({
148
- data
149
- }, ex.data)
146
+ data: {
147
+ data,
148
+ ...ex.data
149
+ }
150
150
  }
151
151
  };
152
152
  }
153
153
  }
154
154
  };
155
155
  };
156
- exports.createTransporterCrud = createTransporterCrud;
156
+ exports.createTransporterCrud = createTransporterCrud;
157
+
158
+ //# sourceMappingURL=transporter.crud.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["buildTransporter","params","settings","context","plugins","plugin","buildMailerTransport","ex","console","log","name","message","WebinyError","getPort","value","port","Number","isNaN","getDefaultSettings","input","host","process","env","WEBINY_MAILER_HOST","WEBINY_MAILER_PORT","user","WEBINY_MAILER_USER","password","WEBINY_MAILER_PASSWORD","replyTo","WEBINY_MAILER_REPLY_TO","from","WEBINY_MAILER_FROM","hasAtLeastOneValue","Object","values","some","String","trim","result","createValidation","safeParse","success","data","createTransporterCrud","transporters","defaultSettings","byType","CreateTransportPlugin","type","reverse","onTransportBeforeSend","createTopic","onTransportAfterSend","onTransportError","attachOnTransportBeforeSend","getTransport","tenant","tenancy","getCurrentTenant","id","mailer","getSettings","code","transporter","sendMail","transport","error","publish","response","send"],"sources":["transporter.crud.ts"],"sourcesContent":["import {\n MailerContext,\n Transport,\n OnTransportAfterSendParams,\n OnTransportBeforeSendParams,\n OnTransportErrorParams,\n TransportSettings,\n MailerTransporterContext\n} from \"~/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { attachOnTransportBeforeSend } from \"~/crud/transport/onTransportBeforeSend\";\nimport { CreateTransportPlugin } from \"~/plugins\";\nimport WebinyError from \"@webiny/error\";\nimport { createValidation } from \"./settings/validation\";\n\ninterface BuildMailerParams {\n plugins: CreateTransportPlugin[];\n settings: TransportSettings | null;\n context: MailerContext;\n}\n\nconst buildTransporter = async (params: BuildMailerParams): Promise<Transport> => {\n const { settings, context, plugins } = params;\n\n for (const plugin of plugins) {\n try {\n return await plugin.buildMailerTransport({\n settings,\n context\n });\n } catch (ex) {\n console.log(`Could not build mailer with plugin \"${plugin.name}\".`);\n console.log(ex.message);\n }\n }\n throw new WebinyError(\n \"Could not build mailer via any of the available plugins.\",\n \"MAILER_PLUGINS_ERROR\"\n );\n};\n\nconst getPort = (value: any): number => {\n const port = Number(value);\n if (!!value && isNaN(port) === false) {\n return port;\n }\n return 25;\n};\n\nconst getDefaultSettings = (): TransportSettings | null => {\n const input: Partial<TransportSettings> = {\n host: process.env.WEBINY_MAILER_HOST,\n port: getPort(process.env.WEBINY_MAILER_PORT),\n user: process.env.WEBINY_MAILER_USER,\n password: process.env.WEBINY_MAILER_PASSWORD,\n replyTo: process.env.WEBINY_MAILER_REPLY_TO,\n from: process.env.WEBINY_MAILER_FROM\n };\n /**\n * No need to do the validation if there is not at least one variable defined.\n */\n const hasAtLeastOneValue = Object.values(input).some(value => !!String(value).trim());\n if (!hasAtLeastOneValue) {\n return null;\n }\n\n const result = createValidation.safeParse(input);\n\n return result.success ? (result.data as TransportSettings) : null;\n};\n\nexport const createTransporterCrud = async (\n context: MailerContext\n): Promise<MailerTransporterContext> => {\n const transporters: Record<string, Transport> = {};\n\n const defaultSettings: TransportSettings | null = getDefaultSettings();\n /**\n * We need the last possible plugin which is defined.\n * The last plugins are our default ones with the default configurations.\n * If users wants to override them, they just need to add new plugin with their own configuration and it will be constructed first.\n */\n const plugins = context.plugins\n .byType<CreateTransportPlugin>(CreateTransportPlugin.type)\n .reverse();\n\n /**\n * We define possible events to be hooked into.\n */\n const onTransportBeforeSend = createTopic<OnTransportBeforeSendParams>(\n \"mailer.onTransportBeforeSend\"\n );\n const onTransportAfterSend = createTopic<OnTransportAfterSendParams>(\n \"mailer.onTransportAfterSend\"\n );\n const onTransportError = createTopic<OnTransportErrorParams>(\"mailer.onTransportError\");\n /**\n * We attach our default ones.\n */\n attachOnTransportBeforeSend({\n onTransportBeforeSend\n });\n\n const getTransport = async (): Promise<Transport | null> => {\n const tenant = context.tenancy.getCurrentTenant().id;\n\n if (transporters[tenant]) {\n return transporters[tenant];\n }\n\n let settings: TransportSettings | null = null;\n try {\n settings = await context.mailer.getSettings();\n } catch (ex) {\n if (ex.code !== \"PASSWORD_SECRET_ERROR\") {\n console.log(ex.message);\n console.log(ex.code);\n }\n }\n if (!settings && !defaultSettings) {\n console.log(`There are no Mailer transport settings for tenant \"${tenant}\".`);\n }\n const transporter = await buildTransporter({\n settings: settings || defaultSettings,\n plugins,\n context\n });\n\n transporters[tenant] = transporter;\n\n return transporter;\n };\n\n return {\n onTransportBeforeSend,\n onTransportAfterSend,\n onTransportError,\n getTransport,\n sendMail: async data => {\n const transport = await getTransport();\n if (!transport) {\n return {\n result: null,\n error: {\n message: \"There is no transport available.\",\n code: \"NO_TRANSPORT_DEFINED\"\n }\n };\n }\n try {\n await onTransportBeforeSend.publish({\n data,\n transport\n });\n const response = await transport.send(data);\n await onTransportAfterSend.publish({\n data,\n transport\n });\n\n return {\n result: response.result,\n error: response.error\n };\n } catch (ex) {\n await onTransportError.publish({\n error: ex,\n data,\n transport\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":"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"}
1
+ {"version":3,"names":["_pubsub","require","_onTransportBeforeSend","_plugins","_error","_interopRequireDefault","_validation","buildTransporter","params","settings","context","plugins","plugin","buildMailerTransport","ex","console","log","name","message","WebinyError","getPort","value","port","Number","isNaN","getDefaultSettings","input","host","process","env","WEBINY_MAILER_HOST","WEBINY_MAILER_PORT","user","WEBINY_MAILER_USER","password","WEBINY_MAILER_PASSWORD","replyTo","WEBINY_MAILER_REPLY_TO","from","WEBINY_MAILER_FROM","hasAtLeastOneValue","Object","values","some","String","trim","result","createValidation","safeParse","success","data","createTransporterCrud","transporters","defaultSettings","byType","CreateTransportPlugin","type","reverse","onTransportBeforeSend","createTopic","onTransportAfterSend","onTransportError","attachOnTransportBeforeSend","getTransport","tenant","tenancy","getCurrentTenant","id","mailer","getSettings","code","transporter","sendMail","transport","error","publish","response","send","exports"],"sources":["transporter.crud.ts"],"sourcesContent":["import {\n MailerContext,\n Transport,\n OnTransportAfterSendParams,\n OnTransportBeforeSendParams,\n OnTransportErrorParams,\n TransportSettings,\n MailerTransporterContext\n} from \"~/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { attachOnTransportBeforeSend } from \"~/crud/transport/onTransportBeforeSend\";\nimport { CreateTransportPlugin } from \"~/plugins\";\nimport WebinyError from \"@webiny/error\";\nimport { createValidation } from \"./settings/validation\";\n\ninterface BuildMailerParams {\n plugins: CreateTransportPlugin[];\n settings: TransportSettings | null;\n context: MailerContext;\n}\n\nconst buildTransporter = async (params: BuildMailerParams): Promise<Transport> => {\n const { settings, context, plugins } = params;\n\n for (const plugin of plugins) {\n try {\n return await plugin.buildMailerTransport({\n settings,\n context\n });\n } catch (ex) {\n console.log(`Could not build mailer with plugin \"${plugin.name}\".`);\n console.log(ex.message);\n }\n }\n throw new WebinyError(\n \"Could not build mailer via any of the available plugins.\",\n \"MAILER_PLUGINS_ERROR\"\n );\n};\n\nconst getPort = (value: any): number => {\n const port = Number(value);\n if (!!value && isNaN(port) === false) {\n return port;\n }\n return 25;\n};\n\nconst getDefaultSettings = (): TransportSettings | null => {\n const input: Partial<TransportSettings> = {\n host: process.env.WEBINY_MAILER_HOST,\n port: getPort(process.env.WEBINY_MAILER_PORT),\n user: process.env.WEBINY_MAILER_USER,\n password: process.env.WEBINY_MAILER_PASSWORD,\n replyTo: process.env.WEBINY_MAILER_REPLY_TO,\n from: process.env.WEBINY_MAILER_FROM\n };\n /**\n * No need to do the validation if there is not at least one variable defined.\n */\n const hasAtLeastOneValue = Object.values(input).some(value => !!String(value).trim());\n if (!hasAtLeastOneValue) {\n return null;\n }\n\n const result = createValidation.safeParse(input);\n\n return result.success ? (result.data as TransportSettings) : null;\n};\n\nexport const createTransporterCrud = async (\n context: MailerContext\n): Promise<MailerTransporterContext> => {\n const transporters: Record<string, Transport> = {};\n\n const defaultSettings: TransportSettings | null = getDefaultSettings();\n /**\n * We need the last possible plugin which is defined.\n * The last plugins are our default ones with the default configurations.\n * If users wants to override them, they just need to add new plugin with their own configuration and it will be constructed first.\n */\n const plugins = context.plugins\n .byType<CreateTransportPlugin>(CreateTransportPlugin.type)\n .reverse();\n\n /**\n * We define possible events to be hooked into.\n */\n const onTransportBeforeSend = createTopic<OnTransportBeforeSendParams>(\n \"mailer.onTransportBeforeSend\"\n );\n const onTransportAfterSend = createTopic<OnTransportAfterSendParams>(\n \"mailer.onTransportAfterSend\"\n );\n const onTransportError = createTopic<OnTransportErrorParams>(\"mailer.onTransportError\");\n /**\n * We attach our default ones.\n */\n attachOnTransportBeforeSend({\n onTransportBeforeSend\n });\n\n const getTransport = async (): Promise<Transport | null> => {\n const tenant = context.tenancy.getCurrentTenant().id;\n\n if (transporters[tenant]) {\n return transporters[tenant];\n }\n\n let settings: TransportSettings | null = null;\n try {\n settings = await context.mailer.getSettings();\n } catch (ex) {\n if (ex.code !== \"PASSWORD_SECRET_ERROR\") {\n console.log(ex.message);\n console.log(ex.code);\n }\n }\n if (!settings && !defaultSettings) {\n console.log(`There are no Mailer transport settings for tenant \"${tenant}\".`);\n }\n const transporter = await buildTransporter({\n settings: settings || defaultSettings,\n plugins,\n context\n });\n\n transporters[tenant] = transporter;\n\n return transporter;\n };\n\n return {\n onTransportBeforeSend,\n onTransportAfterSend,\n onTransportError,\n getTransport,\n sendMail: async data => {\n const transport = await getTransport();\n if (!transport) {\n return {\n result: null,\n error: {\n message: \"There is no transport available.\",\n code: \"NO_TRANSPORT_DEFINED\"\n }\n };\n }\n try {\n await onTransportBeforeSend.publish({\n data,\n transport\n });\n const response = await transport.send(data);\n await onTransportAfterSend.publish({\n data,\n transport\n });\n\n return {\n result: response.result,\n error: response.error\n };\n } catch (ex) {\n await onTransportError.publish({\n error: ex,\n data,\n transport\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":"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"}
package/graphql/index.js CHANGED
@@ -8,4 +8,6 @@ var _settings = require("./settings");
8
8
  const createGraphQL = () => {
9
9
  return [(0, _settings.createSettingsGraphQL)()];
10
10
  };
11
- exports.createGraphQL = createGraphQL;
11
+ exports.createGraphQL = createGraphQL;
12
+
13
+ //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createGraphQL","createSettingsGraphQL"],"sources":["index.ts"],"sourcesContent":["import { createSettingsGraphQL } from \"~/graphql/settings\";\n\nexport const createGraphQL = () => {\n return [createSettingsGraphQL()];\n};\n"],"mappings":";;;;;;AAAA;AAEO,MAAMA,aAAa,GAAG,MAAM;EAC/B,OAAO,CAAC,IAAAC,+BAAqB,GAAE,CAAC;AACpC,CAAC;AAAC"}
1
+ {"version":3,"names":["_settings","require","createGraphQL","createSettingsGraphQL","exports"],"sources":["index.ts"],"sourcesContent":["import { createSettingsGraphQL } from \"~/graphql/settings\";\n\nexport const createGraphQL = () => {\n return [createSettingsGraphQL()];\n};\n"],"mappings":";;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AAEO,MAAMC,aAAa,GAAGA,CAAA,KAAM;EAC/B,OAAO,CAAC,IAAAC,+BAAqB,EAAC,CAAC,CAAC;AACpC,CAAC;AAACC,OAAA,CAAAF,aAAA,GAAAA,aAAA"}
@@ -63,8 +63,8 @@ const createSettingsGraphQL = () => {
63
63
  /**
64
64
  * We want to remove the password from the response, if it exists.
65
65
  */
66
- if (settings !== null && settings !== void 0 && settings.password) {
67
- // @ts-ignore
66
+ if (settings?.password) {
67
+ // @ts-expect-error
68
68
  delete settings.password;
69
69
  }
70
70
  return new _handlerGraphql.Response(settings);
@@ -85,8 +85,8 @@ const createSettingsGraphQL = () => {
85
85
  /**
86
86
  * We want to remove the password from the response, if it exists.
87
87
  */
88
- if (settings !== null && settings !== void 0 && settings.password) {
89
- // @ts-ignore
88
+ if (settings?.password) {
89
+ // @ts-expect-error
90
90
  delete settings.password;
91
91
  }
92
92
  return new _handlerGraphql.Response(settings);
@@ -98,4 +98,6 @@ const createSettingsGraphQL = () => {
98
98
  }
99
99
  });
100
100
  };
101
- exports.createSettingsGraphQL = createSettingsGraphQL;
101
+ exports.createSettingsGraphQL = createSettingsGraphQL;
102
+
103
+ //# sourceMappingURL=settings.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["emptyResolver","createSettingsGraphQL","GraphQLSchemaPlugin","typeDefs","resolvers","Query","mailer","MailerQuery","getSettings","_","__","context","settings","password","Response","ex","ErrorResponse","Mutation","MailerMutation","saveSettings","args","input","data"],"sources":["settings.ts"],"sourcesContent":["import { ErrorResponse, GraphQLSchemaPlugin, Response } from \"@webiny/handler-graphql\";\nimport { MailerContext } from \"~/types\";\n\nconst emptyResolver = () => ({});\n\nexport const createSettingsGraphQL = () => {\n return new GraphQLSchemaPlugin<MailerContext>({\n typeDefs: `\n type MailerTransportSettingsError {\n message: String!\n code: String\n data: JSON\n }\n \n type MailerTransportSettings {\n host: String\n port: Number\n user: String\n from: String\n replyTo: String\n }\n \n type MailerTransportSettingsResponse {\n data: MailerTransportSettings\n error: MailerTransportSettingsError\n }\n \n type MailerQuery {\n getSettings: MailerTransportSettingsResponse!\n }\n \n input MailerTransportSettingsInput {\n host: String!\n port: Number\n user: String!\n password: String\n from: String!\n replyTo: String\n }\n \n type MailerMutation {\n saveSettings(data: MailerTransportSettingsInput!): MailerTransportSettingsResponse!\n }\n \n extend type Query {\n mailer: MailerQuery\n }\n extend type Mutation {\n mailer: MailerMutation\n }\n `,\n resolvers: {\n Query: {\n mailer: emptyResolver\n },\n MailerQuery: {\n getSettings: async (_, __, context) => {\n try {\n const settings = await context.mailer.getSettings();\n /**\n * We want to remove the password from the response, if it exists.\n */\n if (settings?.password) {\n // @ts-ignore\n delete settings.password;\n }\n return new Response(settings);\n } catch (ex) {\n return new ErrorResponse(ex);\n }\n }\n },\n Mutation: {\n mailer: emptyResolver\n },\n MailerMutation: {\n saveSettings: async (_, args: any, context) => {\n try {\n const settings = await context.mailer.saveSettings({\n input: args.data\n });\n /**\n * We want to remove the password from the response, if it exists.\n */\n if (settings?.password) {\n // @ts-ignore\n delete settings.password;\n }\n return new Response(settings);\n } catch (ex) {\n return new ErrorResponse(ex);\n }\n }\n }\n }\n });\n};\n"],"mappings":";;;;;;AAAA;AAGA,MAAMA,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC;AAEzB,MAAMC,qBAAqB,GAAG,MAAM;EACvC,OAAO,IAAIC,mCAAmB,CAAgB;IAC1CC,QAAQ,EAAG;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;IACDC,SAAS,EAAE;MACPC,KAAK,EAAE;QACHC,MAAM,EAAEN;MACZ,CAAC;MACDO,WAAW,EAAE;QACTC,WAAW,EAAE,OAAOC,CAAC,EAAEC,EAAE,EAAEC,OAAO,KAAK;UACnC,IAAI;YACA,MAAMC,QAAQ,GAAG,MAAMD,OAAO,CAACL,MAAM,CAACE,WAAW,EAAE;YACnD;AACxB;AACA;YACwB,IAAII,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAEC,QAAQ,EAAE;cACpB;cACA,OAAOD,QAAQ,CAACC,QAAQ;YAC5B;YACA,OAAO,IAAIC,wBAAQ,CAACF,QAAQ,CAAC;UACjC,CAAC,CAAC,OAAOG,EAAE,EAAE;YACT,OAAO,IAAIC,6BAAa,CAACD,EAAE,CAAC;UAChC;QACJ;MACJ,CAAC;MACDE,QAAQ,EAAE;QACNX,MAAM,EAAEN;MACZ,CAAC;MACDkB,cAAc,EAAE;QACZC,YAAY,EAAE,OAAOV,CAAC,EAAEW,IAAS,EAAET,OAAO,KAAK;UAC3C,IAAI;YACA,MAAMC,QAAQ,GAAG,MAAMD,OAAO,CAACL,MAAM,CAACa,YAAY,CAAC;cAC/CE,KAAK,EAAED,IAAI,CAACE;YAChB,CAAC,CAAC;YACF;AACxB;AACA;YACwB,IAAIV,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAEC,QAAQ,EAAE;cACpB;cACA,OAAOD,QAAQ,CAACC,QAAQ;YAC5B;YACA,OAAO,IAAIC,wBAAQ,CAACF,QAAQ,CAAC;UACjC,CAAC,CAAC,OAAOG,EAAE,EAAE;YACT,OAAO,IAAIC,6BAAa,CAACD,EAAE,CAAC;UAChC;QACJ;MACJ;IACJ;EACJ,CAAC,CAAC;AACN,CAAC;AAAC"}
1
+ {"version":3,"names":["_handlerGraphql","require","emptyResolver","createSettingsGraphQL","GraphQLSchemaPlugin","typeDefs","resolvers","Query","mailer","MailerQuery","getSettings","_","__","context","settings","password","Response","ex","ErrorResponse","Mutation","MailerMutation","saveSettings","args","input","data","exports"],"sources":["settings.ts"],"sourcesContent":["import { ErrorResponse, GraphQLSchemaPlugin, Response } from \"@webiny/handler-graphql\";\nimport { MailerContext } from \"~/types\";\n\nconst emptyResolver = () => ({});\n\nexport const createSettingsGraphQL = () => {\n return new GraphQLSchemaPlugin<MailerContext>({\n typeDefs: `\n type MailerTransportSettingsError {\n message: String!\n code: String\n data: JSON\n }\n \n type MailerTransportSettings {\n host: String\n port: Number\n user: String\n from: String\n replyTo: String\n }\n \n type MailerTransportSettingsResponse {\n data: MailerTransportSettings\n error: MailerTransportSettingsError\n }\n \n type MailerQuery {\n getSettings: MailerTransportSettingsResponse!\n }\n \n input MailerTransportSettingsInput {\n host: String!\n port: Number\n user: String!\n password: String\n from: String!\n replyTo: String\n }\n \n type MailerMutation {\n saveSettings(data: MailerTransportSettingsInput!): MailerTransportSettingsResponse!\n }\n \n extend type Query {\n mailer: MailerQuery\n }\n extend type Mutation {\n mailer: MailerMutation\n }\n `,\n resolvers: {\n Query: {\n mailer: emptyResolver\n },\n MailerQuery: {\n getSettings: async (_, __, context) => {\n try {\n const settings = await context.mailer.getSettings();\n /**\n * We want to remove the password from the response, if it exists.\n */\n if (settings?.password) {\n // @ts-expect-error\n delete settings.password;\n }\n return new Response(settings);\n } catch (ex) {\n return new ErrorResponse(ex);\n }\n }\n },\n Mutation: {\n mailer: emptyResolver\n },\n MailerMutation: {\n saveSettings: async (_, args: any, context) => {\n try {\n const settings = await context.mailer.saveSettings({\n input: args.data\n });\n /**\n * We want to remove the password from the response, if it exists.\n */\n if (settings?.password) {\n // @ts-expect-error\n delete settings.password;\n }\n return new Response(settings);\n } catch (ex) {\n return new ErrorResponse(ex);\n }\n }\n }\n }\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AAGA,MAAMC,aAAa,GAAGA,CAAA,MAAO,CAAC,CAAC,CAAC;AAEzB,MAAMC,qBAAqB,GAAGA,CAAA,KAAM;EACvC,OAAO,IAAIC,mCAAmB,CAAgB;IAC1CC,QAAQ,EAAG;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;IACDC,SAAS,EAAE;MACPC,KAAK,EAAE;QACHC,MAAM,EAAEN;MACZ,CAAC;MACDO,WAAW,EAAE;QACTC,WAAW,EAAE,MAAAA,CAAOC,CAAC,EAAEC,EAAE,EAAEC,OAAO,KAAK;UACnC,IAAI;YACA,MAAMC,QAAQ,GAAG,MAAMD,OAAO,CAACL,MAAM,CAACE,WAAW,CAAC,CAAC;YACnD;AACxB;AACA;YACwB,IAAII,QAAQ,EAAEC,QAAQ,EAAE;cACpB;cACA,OAAOD,QAAQ,CAACC,QAAQ;YAC5B;YACA,OAAO,IAAIC,wBAAQ,CAACF,QAAQ,CAAC;UACjC,CAAC,CAAC,OAAOG,EAAE,EAAE;YACT,OAAO,IAAIC,6BAAa,CAACD,EAAE,CAAC;UAChC;QACJ;MACJ,CAAC;MACDE,QAAQ,EAAE;QACNX,MAAM,EAAEN;MACZ,CAAC;MACDkB,cAAc,EAAE;QACZC,YAAY,EAAE,MAAAA,CAAOV,CAAC,EAAEW,IAAS,EAAET,OAAO,KAAK;UAC3C,IAAI;YACA,MAAMC,QAAQ,GAAG,MAAMD,OAAO,CAACL,MAAM,CAACa,YAAY,CAAC;cAC/CE,KAAK,EAAED,IAAI,CAACE;YAChB,CAAC,CAAC;YACF;AACxB;AACA;YACwB,IAAIV,QAAQ,EAAEC,QAAQ,EAAE;cACpB;cACA,OAAOD,QAAQ,CAACC,QAAQ;YAC5B;YACA,OAAO,IAAIC,wBAAQ,CAACF,QAAQ,CAAC;UACjC,CAAC,CAAC,OAAOG,EAAE,EAAE;YACT,OAAO,IAAIC,6BAAa,CAACD,EAAE,CAAC;UAChC;QACJ;MACJ;IACJ;EACJ,CAAC,CAAC;AACN,CAAC;AAACQ,OAAA,CAAAtB,qBAAA,GAAAA,qBAAA"}
package/index.js CHANGED
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
@@ -9,7 +8,6 @@ var _exportNames = {
9
8
  createMailerGraphQL: true
10
9
  };
11
10
  exports.createMailerGraphQL = exports.createMailerContext = void 0;
12
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
13
11
  var _context = require("./context");
14
12
  var _createDummyTransport = require("./transports/createDummyTransport");
15
13
  var _createSmtpTransport = require("./transports/createSmtpTransport");
@@ -26,7 +24,6 @@ Object.keys(_plugins).forEach(function (key) {
26
24
  });
27
25
  });
28
26
  var _model = require("./crud/settings/model");
29
- var _group = require("./crud/group");
30
27
  var _graphql = require("./graphql");
31
28
  var _transports = require("./transports");
32
29
  Object.keys(_transports).forEach(function (key) {
@@ -41,12 +38,11 @@ Object.keys(_transports).forEach(function (key) {
41
38
  });
42
39
  });
43
40
  const createMailerContext = () => {
44
- const group = (0, _group.createGroup)();
45
- return [group,
41
+ return [
46
42
  /**
47
- * Groups and models to use via the CMS
43
+ * Models to use via the CMS
48
44
  */
49
- (0, _model.createSettingsModel)(group),
45
+ (0, _model.createSettingsModel)(),
50
46
  /**
51
47
  * If something is wrong with the smtp mailer, we will initialize the dummy one.
52
48
  */
@@ -64,7 +60,9 @@ const createMailerContext = () => {
64
60
  /**
65
61
  * We need to map our settings to the required settings for the SMTP NodeMailer transport.
66
62
  */
67
- const config = (0, _objectSpread2.default)({}, settings || {});
63
+ const config = {
64
+ ...(settings || {})
65
+ };
68
66
  if (settings) {
69
67
  config.auth = {
70
68
  user: settings.user,
@@ -80,4 +78,6 @@ exports.createMailerContext = createMailerContext;
80
78
  const createMailerGraphQL = () => {
81
79
  return [...(0, _graphql.createGraphQL)()];
82
80
  };
83
- exports.createMailerGraphQL = createMailerGraphQL;
81
+ exports.createMailerGraphQL = createMailerGraphQL;
82
+
83
+ //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["createMailerContext","group","createGroup","createSettingsModel","createTransport","plugin","createDummyTransport","name","settings","config","auth","user","pass","password","createSmtpTransport","createMailerContextPlugin","createMailerGraphQL","createGraphQL"],"sources":["index.ts"],"sourcesContent":["import { createMailerContext as createMailerContextPlugin } from \"~/context\";\nimport { createDummyTransport } from \"~/transports/createDummyTransport\";\nimport { createSmtpTransport, SmtpTransportConfig } from \"~/transports/createSmtpTransport\";\nimport { createTransport } from \"~/plugins\";\nimport { createSettingsModel } from \"~/crud/settings/model\";\nimport { createGroup } from \"~/crud/group\";\nimport { createGraphQL } from \"~/graphql\";\nimport { PluginCollection } from \"@webiny/plugins/types\";\n\nexport * from \"~/plugins\";\nexport * from \"~/transports\";\n\nexport const createMailerContext = (): PluginCollection => {\n const group = createGroup();\n return [\n group,\n /**\n * Groups and models to use via the CMS\n */\n createSettingsModel(group),\n /**\n * If something is wrong with the smtp mailer, we will initialize the dummy one.\n */\n createTransport(async () => {\n const plugin = await createDummyTransport();\n plugin.name = \"mailer.dummy-default\";\n return plugin;\n }),\n /**\n * Smtp mailer goes into the plugins after the dummy one because plugins are loaded in reverse.\n */\n createTransport(async ({ settings }) => {\n /**\n * We need to map our settings to the required settings for the SMTP NodeMailer transport.\n */\n const config: SmtpTransportConfig = {\n ...(settings || {})\n };\n if (settings) {\n config.auth = {\n user: settings.user,\n pass: settings.password\n };\n }\n const plugin = await createSmtpTransport(config);\n plugin.name = \"mailer.smtp-default\";\n return plugin;\n }),\n createMailerContextPlugin()\n ];\n};\n\nexport const createMailerGraphQL = () => {\n return [...createGraphQL()];\n};\n"],"mappings":";;;;;;;;;;;;AAAA;AACA;AACA;AACA;AAMA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AALA;AACA;AACA;AAIA;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AAEO,MAAMA,mBAAmB,GAAG,MAAwB;EACvD,MAAMC,KAAK,GAAG,IAAAC,kBAAW,GAAE;EAC3B,OAAO,CACHD,KAAK;EACL;AACR;AACA;EACQ,IAAAE,0BAAmB,EAACF,KAAK,CAAC;EAC1B;AACR;AACA;EACQ,IAAAG,wBAAe,EAAC,YAAY;IACxB,MAAMC,MAAM,GAAG,MAAM,IAAAC,0CAAoB,GAAE;IAC3CD,MAAM,CAACE,IAAI,GAAG,sBAAsB;IACpC,OAAOF,MAAM;EACjB,CAAC,CAAC;EACF;AACR;AACA;EACQ,IAAAD,wBAAe,EAAC,OAAO;IAAEI;EAAS,CAAC,KAAK;IACpC;AACZ;AACA;IACY,MAAMC,MAA2B,mCACzBD,QAAQ,IAAI,CAAC,CAAC,CACrB;IACD,IAAIA,QAAQ,EAAE;MACVC,MAAM,CAACC,IAAI,GAAG;QACVC,IAAI,EAAEH,QAAQ,CAACG,IAAI;QACnBC,IAAI,EAAEJ,QAAQ,CAACK;MACnB,CAAC;IACL;IACA,MAAMR,MAAM,GAAG,MAAM,IAAAS,wCAAmB,EAACL,MAAM,CAAC;IAChDJ,MAAM,CAACE,IAAI,GAAG,qBAAqB;IACnC,OAAOF,MAAM;EACjB,CAAC,CAAC,EACF,IAAAU,4BAAyB,GAAE,CAC9B;AACL,CAAC;AAAC;AAEK,MAAMC,mBAAmB,GAAG,MAAM;EACrC,OAAO,CAAC,GAAG,IAAAC,sBAAa,GAAE,CAAC;AAC/B,CAAC;AAAC"}
1
+ {"version":3,"names":["_context","require","_createDummyTransport","_createSmtpTransport","_plugins","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_model","_graphql","_transports","createMailerContext","createSettingsModel","createTransport","plugin","createDummyTransport","name","settings","config","auth","user","pass","password","createSmtpTransport","createMailerContextPlugin","createMailerGraphQL","createGraphQL"],"sources":["index.ts"],"sourcesContent":["import { PluginCollection } from \"@webiny/plugins/types\";\nimport { createMailerContext as createMailerContextPlugin } from \"~/context\";\nimport { createDummyTransport } from \"~/transports/createDummyTransport\";\nimport { createSmtpTransport, SmtpTransportConfig } from \"~/transports/createSmtpTransport\";\nimport { createTransport } from \"~/plugins\";\nimport { createSettingsModel } from \"~/crud/settings/model\";\nimport { createGraphQL } from \"~/graphql\";\n\nexport * from \"~/plugins\";\nexport * from \"~/transports\";\n\nexport const createMailerContext = (): PluginCollection => {\n return [\n /**\n * Models to use via the CMS\n */\n createSettingsModel(),\n /**\n * If something is wrong with the smtp mailer, we will initialize the dummy one.\n */\n createTransport(async () => {\n const plugin = await createDummyTransport();\n plugin.name = \"mailer.dummy-default\";\n return plugin;\n }),\n /**\n * Smtp mailer goes into the plugins after the dummy one because plugins are loaded in reverse.\n */\n createTransport(async ({ settings }) => {\n /**\n * We need to map our settings to the required settings for the SMTP NodeMailer transport.\n */\n const config: SmtpTransportConfig = {\n ...(settings || {})\n };\n if (settings) {\n config.auth = {\n user: settings.user,\n pass: settings.password\n };\n }\n const plugin = await createSmtpTransport(config);\n plugin.name = \"mailer.smtp-default\";\n return plugin;\n }),\n createMailerContextPlugin()\n ];\n};\n\nexport const createMailerGraphQL = () => {\n return [...createGraphQL()];\n};\n"],"mappings":";;;;;;;;;;AACA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,qBAAA,GAAAD,OAAA;AACA,IAAAE,oBAAA,GAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AAIAI,MAAA,CAAAC,IAAA,CAAAF,QAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,QAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,QAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AAHA,IAAAS,MAAA,GAAAhB,OAAA;AACA,IAAAiB,QAAA,GAAAjB,OAAA;AAGA,IAAAkB,WAAA,GAAAlB,OAAA;AAAAI,MAAA,CAAAC,IAAA,CAAAa,WAAA,EAAAZ,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAW,WAAA,CAAAX,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAG,WAAA,CAAAX,GAAA;IAAA;EAAA;AAAA;AAEO,MAAMY,mBAAmB,GAAGA,CAAA,KAAwB;EACvD,OAAO;EACH;AACR;AACA;EACQ,IAAAC,0BAAmB,EAAC,CAAC;EACrB;AACR;AACA;EACQ,IAAAC,wBAAe,EAAC,YAAY;IACxB,MAAMC,MAAM,GAAG,MAAM,IAAAC,0CAAoB,EAAC,CAAC;IAC3CD,MAAM,CAACE,IAAI,GAAG,sBAAsB;IACpC,OAAOF,MAAM;EACjB,CAAC,CAAC;EACF;AACR;AACA;EACQ,IAAAD,wBAAe,EAAC,OAAO;IAAEI;EAAS,CAAC,KAAK;IACpC;AACZ;AACA;IACY,MAAMC,MAA2B,GAAG;MAChC,IAAID,QAAQ,IAAI,CAAC,CAAC;IACtB,CAAC;IACD,IAAIA,QAAQ,EAAE;MACVC,MAAM,CAACC,IAAI,GAAG;QACVC,IAAI,EAAEH,QAAQ,CAACG,IAAI;QACnBC,IAAI,EAAEJ,QAAQ,CAACK;MACnB,CAAC;IACL;IACA,MAAMR,MAAM,GAAG,MAAM,IAAAS,wCAAmB,EAACL,MAAM,CAAC;IAChDJ,MAAM,CAACE,IAAI,GAAG,qBAAqB;IACnC,OAAOF,MAAM;EACjB,CAAC,CAAC,EACF,IAAAU,4BAAyB,EAAC,CAAC,CAC9B;AACL,CAAC;AAACpB,OAAA,CAAAO,mBAAA,GAAAA,mBAAA;AAEK,MAAMc,mBAAmB,GAAGA,CAAA,KAAM;EACrC,OAAO,CAAC,GAAG,IAAAC,sBAAa,EAAC,CAAC,CAAC;AAC/B,CAAC;AAACtB,OAAA,CAAAqB,mBAAA,GAAAA,mBAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-mailer",
3
- "version": "0.0.0-unstable.9e825fd5fb",
3
+ "version": "0.0.0-unstable.a9593f74dd",
4
4
  "main": "index.js",
5
5
  "repository": {
6
6
  "type": "git",
@@ -14,43 +14,39 @@
14
14
  "description": "The API to send e-mails.",
15
15
  "license": "MIT",
16
16
  "dependencies": {
17
- "@babel/runtime": "7.20.13",
18
- "@webiny/api": "0.0.0-unstable.9e825fd5fb",
19
- "@webiny/api-headless-cms": "0.0.0-unstable.9e825fd5fb",
20
- "@webiny/error": "0.0.0-unstable.9e825fd5fb",
21
- "@webiny/handler-graphql": "0.0.0-unstable.9e825fd5fb",
22
- "@webiny/plugins": "0.0.0-unstable.9e825fd5fb",
23
- "@webiny/pubsub": "0.0.0-unstable.9e825fd5fb",
17
+ "@babel/runtime": "7.22.6",
18
+ "@webiny/api": "0.0.0-unstable.a9593f74dd",
19
+ "@webiny/api-headless-cms": "0.0.0-unstable.a9593f74dd",
20
+ "@webiny/error": "0.0.0-unstable.a9593f74dd",
21
+ "@webiny/handler-graphql": "0.0.0-unstable.a9593f74dd",
22
+ "@webiny/plugins": "0.0.0-unstable.a9593f74dd",
23
+ "@webiny/pubsub": "0.0.0-unstable.a9593f74dd",
24
24
  "crypto-js": "4.1.1",
25
25
  "lodash": "4.17.21",
26
26
  "nodemailer": "6.9.1",
27
- "zod": "3.20.2"
27
+ "zod": "3.21.4"
28
28
  },
29
29
  "devDependencies": {
30
- "@babel/cli": "^7.19.3",
31
- "@babel/core": "^7.19.3",
32
- "@babel/preset-env": "^7.19.4",
33
- "@babel/preset-typescript": "^7.18.6",
34
- "@types/crypto-js": "^4.1.1",
35
- "@types/nodemailer": "^6.4.4",
36
- "@webiny/api-headless-cms-ddb": "^0.0.0-unstable.9e825fd5fb",
37
- "@webiny/api-i18n": "^0.0.0-unstable.9e825fd5fb",
38
- "@webiny/api-i18n-ddb": "^0.0.0-unstable.9e825fd5fb",
39
- "@webiny/api-security": "^0.0.0-unstable.9e825fd5fb",
40
- "@webiny/api-security-so-ddb": "^0.0.0-unstable.9e825fd5fb",
41
- "@webiny/api-tenancy": "^0.0.0-unstable.9e825fd5fb",
42
- "@webiny/api-tenancy-so-ddb": "^0.0.0-unstable.9e825fd5fb",
43
- "@webiny/cli": "^0.0.0-unstable.9e825fd5fb",
44
- "@webiny/db-dynamodb": "^0.0.0-unstable.9e825fd5fb",
45
- "@webiny/handler": "^0.0.0-unstable.9e825fd5fb",
46
- "@webiny/handler-aws": "^0.0.0-unstable.9e825fd5fb",
47
- "@webiny/handler-db": "^0.0.0-unstable.9e825fd5fb",
48
- "@webiny/project-utils": "^0.0.0-unstable.9e825fd5fb",
49
- "graphql": "^15.7.2",
50
- "jest": "^28.1.0",
51
- "jest-dynalite": "^3.6.1",
52
- "rimraf": "^3.0.2",
53
- "ttypescript": "^1.5.12",
30
+ "@babel/cli": "7.22.6",
31
+ "@babel/core": "7.22.8",
32
+ "@babel/preset-env": "7.22.7",
33
+ "@babel/preset-typescript": "7.22.5",
34
+ "@types/crypto-js": "4.1.1",
35
+ "@types/nodemailer": "6.4.7",
36
+ "@webiny/api-i18n": "0.0.0-unstable.a9593f74dd",
37
+ "@webiny/api-security": "0.0.0-unstable.a9593f74dd",
38
+ "@webiny/api-tenancy": "0.0.0-unstable.a9593f74dd",
39
+ "@webiny/cli": "0.0.0-unstable.a9593f74dd",
40
+ "@webiny/db-dynamodb": "0.0.0-unstable.a9593f74dd",
41
+ "@webiny/handler": "0.0.0-unstable.a9593f74dd",
42
+ "@webiny/handler-aws": "0.0.0-unstable.a9593f74dd",
43
+ "@webiny/handler-db": "0.0.0-unstable.a9593f74dd",
44
+ "@webiny/project-utils": "0.0.0-unstable.a9593f74dd",
45
+ "graphql": "15.8.0",
46
+ "jest": "29.5.0",
47
+ "jest-dynalite": "3.6.1",
48
+ "rimraf": "3.0.2",
49
+ "ttypescript": "1.5.15",
54
50
  "typescript": "4.7.4"
55
51
  },
56
52
  "publishConfig": {
@@ -61,5 +57,5 @@
61
57
  "build": "yarn webiny run build",
62
58
  "watch": "yarn webiny run watch"
63
59
  },
64
- "gitHead": "9e825fd5fb3c021691acbaee6c5fd925f5f5de4d"
60
+ "gitHead": "a9593f74ddf9ce93263eadb0ddc0807ed343f5ee"
65
61
  }
@@ -1,16 +1,14 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
6
  exports.createTransport = exports.CreateTransportPlugin = void 0;
8
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
7
  var _plugins = require("@webiny/plugins");
10
8
  class CreateTransportPlugin extends _plugins.Plugin {
9
+ static type = "mailer.builder.plugin";
11
10
  constructor(cb) {
12
11
  super();
13
- (0, _defineProperty2.default)(this, "cb", void 0);
14
12
  this.cb = cb;
15
13
  }
16
14
  async buildMailerTransport(params) {
@@ -18,8 +16,9 @@ class CreateTransportPlugin extends _plugins.Plugin {
18
16
  }
19
17
  }
20
18
  exports.CreateTransportPlugin = CreateTransportPlugin;
21
- (0, _defineProperty2.default)(CreateTransportPlugin, "type", "mailer.builder.plugin");
22
19
  const createTransport = cb => {
23
20
  return new CreateTransportPlugin(cb);
24
21
  };
25
- exports.createTransport = createTransport;
22
+ exports.createTransport = createTransport;
23
+
24
+ //# sourceMappingURL=CreateTransportPlugin.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["CreateTransportPlugin","BasePlugin","constructor","cb","buildMailerTransport","params","createTransport"],"sources":["CreateTransportPlugin.ts"],"sourcesContent":["import { Plugin as BasePlugin } from \"@webiny/plugins\";\nimport { Transport, MailerContext, TransportSettings } from \"~/types\";\n\ninterface TransportParams {\n settings: TransportSettings | null;\n context: MailerContext;\n}\n\nexport interface CreateTransportCallable<T> {\n (params: TransportParams): Promise<T>;\n}\n\nexport class CreateTransportPlugin<T extends Transport = Transport> extends BasePlugin {\n public static override type = \"mailer.builder.plugin\";\n\n private readonly cb: CreateTransportCallable<T>;\n\n public constructor(cb: CreateTransportCallable<T>) {\n super();\n this.cb = cb;\n }\n\n public async buildMailerTransport(params: TransportParams): Promise<T> {\n return this.cb(params);\n }\n}\n\nexport const createTransport = <T extends Transport = Transport>(\n cb: CreateTransportCallable<T>\n) => {\n return new CreateTransportPlugin<T>(cb);\n};\n"],"mappings":";;;;;;;;AAAA;AAYO,MAAMA,qBAAqB,SAA0CC,eAAU,CAAC;EAK5EC,WAAW,CAACC,EAA8B,EAAE;IAC/C,KAAK,EAAE;IAAC;IACR,IAAI,CAACA,EAAE,GAAGA,EAAE;EAChB;EAEA,MAAaC,oBAAoB,CAACC,MAAuB,EAAc;IACnE,OAAO,IAAI,CAACF,EAAE,CAACE,MAAM,CAAC;EAC1B;AACJ;AAAC;AAAA,8BAbYL,qBAAqB,UACA,uBAAuB;AAclD,MAAMM,eAAe,GACxBH,EAA8B,IAC7B;EACD,OAAO,IAAIH,qBAAqB,CAAIG,EAAE,CAAC;AAC3C,CAAC;AAAC"}
1
+ {"version":3,"names":["_plugins","require","CreateTransportPlugin","BasePlugin","type","constructor","cb","buildMailerTransport","params","exports","createTransport"],"sources":["CreateTransportPlugin.ts"],"sourcesContent":["import { Plugin as BasePlugin } from \"@webiny/plugins\";\nimport { Transport, MailerContext, TransportSettings } from \"~/types\";\n\ninterface TransportParams {\n settings: TransportSettings | null;\n context: MailerContext;\n}\n\nexport interface CreateTransportCallable<T> {\n (params: TransportParams): Promise<T>;\n}\n\nexport class CreateTransportPlugin<T extends Transport = Transport> extends BasePlugin {\n public static override type = \"mailer.builder.plugin\";\n\n private readonly cb: CreateTransportCallable<T>;\n\n public constructor(cb: CreateTransportCallable<T>) {\n super();\n this.cb = cb;\n }\n\n public async buildMailerTransport(params: TransportParams): Promise<T> {\n return this.cb(params);\n }\n}\n\nexport const createTransport = <T extends Transport = Transport>(\n cb: CreateTransportCallable<T>\n) => {\n return new CreateTransportPlugin<T>(cb);\n};\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAYO,MAAMC,qBAAqB,SAA0CC,eAAU,CAAC;EACnF,OAAuBC,IAAI,GAAG,uBAAuB;EAI9CC,WAAWA,CAACC,EAA8B,EAAE;IAC/C,KAAK,CAAC,CAAC;IACP,IAAI,CAACA,EAAE,GAAGA,EAAE;EAChB;EAEA,MAAaC,oBAAoBA,CAACC,MAAuB,EAAc;IACnE,OAAO,IAAI,CAACF,EAAE,CAACE,MAAM,CAAC;EAC1B;AACJ;AAACC,OAAA,CAAAP,qBAAA,GAAAA,qBAAA;AAEM,MAAMQ,eAAe,GACxBJ,EAA8B,IAC7B;EACD,OAAO,IAAIJ,qBAAqB,CAAII,EAAE,CAAC;AAC3C,CAAC;AAACG,OAAA,CAAAC,eAAA,GAAAA,eAAA"}
package/plugins/index.js CHANGED
@@ -13,4 +13,6 @@ Object.keys(_CreateTransportPlugin).forEach(function (key) {
13
13
  return _CreateTransportPlugin[key];
14
14
  }
15
15
  });
16
- });
16
+ });
17
+
18
+ //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./CreateTransportPlugin\";\n"],"mappings":";;;;;AAAA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
1
+ {"version":3,"names":["_CreateTransportPlugin","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["index.ts"],"sourcesContent":["export * from \"./CreateTransportPlugin\";\n"],"mappings":";;;;;AAAA,IAAAA,sBAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,sBAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,sBAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,sBAAA,CAAAK,GAAA;IAAA;EAAA;AAAA"}
@@ -20,4 +20,6 @@ const createDummyTransport = () => {
20
20
  }
21
21
  };
22
22
  };
23
- exports.createDummyTransport = createDummyTransport;
23
+ exports.createDummyTransport = createDummyTransport;
24
+
25
+ //# sourceMappingURL=createDummyTransport.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createDummyTransport","sent","name","send","params","push","result","error","getAllSent"],"sources":["createDummyTransport.ts"],"sourcesContent":["import { Transport, TransportSendData } from \"~/types\";\n\nexport interface DummyTransport extends Transport {\n getAllSent: () => TransportSendData[];\n}\nexport const createDummyTransport = (): DummyTransport => {\n const sent: TransportSendData[] = [];\n\n return {\n name: \"mailer.dummy-default\",\n send: async params => {\n sent.push(params);\n return {\n result: true,\n error: null\n };\n },\n getAllSent: () => {\n return sent;\n }\n };\n};\n"],"mappings":";;;;;;AAKO,MAAMA,oBAAoB,GAAG,MAAsB;EACtD,MAAMC,IAAyB,GAAG,EAAE;EAEpC,OAAO;IACHC,IAAI,EAAE,sBAAsB;IAC5BC,IAAI,EAAE,MAAMC,MAAM,IAAI;MAClBH,IAAI,CAACI,IAAI,CAACD,MAAM,CAAC;MACjB,OAAO;QACHE,MAAM,EAAE,IAAI;QACZC,KAAK,EAAE;MACX,CAAC;IACL,CAAC;IACDC,UAAU,EAAE,MAAM;MACd,OAAOP,IAAI;IACf;EACJ,CAAC;AACL,CAAC;AAAC"}
1
+ {"version":3,"names":["createDummyTransport","sent","name","send","params","push","result","error","getAllSent","exports"],"sources":["createDummyTransport.ts"],"sourcesContent":["import { Transport, TransportSendData } from \"~/types\";\n\nexport interface DummyTransport extends Transport {\n getAllSent: () => TransportSendData[];\n}\nexport const createDummyTransport = (): DummyTransport => {\n const sent: TransportSendData[] = [];\n\n return {\n name: \"mailer.dummy-default\",\n send: async params => {\n sent.push(params);\n return {\n result: true,\n error: null\n };\n },\n getAllSent: () => {\n return sent;\n }\n };\n};\n"],"mappings":";;;;;;AAKO,MAAMA,oBAAoB,GAAGA,CAAA,KAAsB;EACtD,MAAMC,IAAyB,GAAG,EAAE;EAEpC,OAAO;IACHC,IAAI,EAAE,sBAAsB;IAC5BC,IAAI,EAAE,MAAMC,MAAM,IAAI;MAClBH,IAAI,CAACI,IAAI,CAACD,MAAM,CAAC;MACjB,OAAO;QACHE,MAAM,EAAE,IAAI;QACZC,KAAK,EAAE;MACX,CAAC;IACL,CAAC;IACDC,UAAU,EAAEA,CAAA,KAAM;MACd,OAAOP,IAAI;IACf;EACJ,CAAC;AACL,CAAC;AAACQ,OAAA,CAAAT,oBAAA,GAAAA,oBAAA"}
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.createSmtpTransport = void 0;
8
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
8
  var _error = _interopRequireDefault(require("@webiny/error"));
10
9
  var _nodemailer = _interopRequireDefault(require("nodemailer"));
11
10
  /**
@@ -22,11 +21,13 @@ const applyDefaults = initialConfig => {
22
21
  return Object.keys(configDefaults).reduce((config, key) => {
23
22
  const configKey = key;
24
23
  if (config[configKey] === undefined || config[configKey] === null) {
25
- // @ts-ignore
24
+ // @ts-expect-error
26
25
  config[configKey] = configDefaults[configKey];
27
26
  }
28
27
  return config;
29
- }, (0, _objectSpread2.default)({}, initialConfig));
28
+ }, {
29
+ ...initialConfig
30
+ });
30
31
  };
31
32
  const createSmtpTransport = initialConfig => {
32
33
  if (!initialConfig || typeof initialConfig !== "object" || Object.keys(initialConfig).length === 0) {
@@ -68,7 +69,9 @@ const createSmtpTransport = initialConfig => {
68
69
  throw new _error.default({
69
70
  message: "nodemailer.sendMail does not have a messageId in the result. Something went wrong...",
70
71
  code: "MAILER_ERROR",
71
- data: (0, _objectSpread2.default)({}, result)
72
+ data: {
73
+ ...result
74
+ }
72
75
  });
73
76
  } catch (ex) {
74
77
  return {
@@ -76,11 +79,16 @@ const createSmtpTransport = initialConfig => {
76
79
  error: {
77
80
  message: ex.message,
78
81
  code: ex.code,
79
- data: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, params), ex.data)
82
+ data: {
83
+ ...params,
84
+ ...ex.data
85
+ }
80
86
  }
81
87
  };
82
88
  }
83
89
  }
84
90
  };
85
91
  };
86
- exports.createSmtpTransport = createSmtpTransport;
92
+ exports.createSmtpTransport = createSmtpTransport;
93
+
94
+ //# sourceMappingURL=createSmtpTransport.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["configDefaults","socketTimeout","connectionTimeout","greetingTimeout","applyDefaults","initialConfig","Object","keys","reduce","config","key","configKey","undefined","createSmtpTransport","length","WebinyError","transporter","nodemailer","createTransport","name","send","params","replyTo","text","html","to","bcc","cc","from","subject","result","sendMail","messageId","response","error","message","code","data","ex"],"sources":["createSmtpTransport.ts"],"sourcesContent":["/**\n * Nodemailer docs\n * https://nodemailer.com/about/\n */\nimport { Transport } from \"~/types\";\nimport WebinyError from \"@webiny/error\";\nimport nodemailer, { Transporter } from \"nodemailer\";\nimport SMTPTransport, { Options } from \"nodemailer/lib/smtp-transport\";\n\nexport type SmtpTransportConfig = Options;\n\nexport interface SmtpTransport extends Transport {\n transporter: Transporter<SMTPTransport.SentMessageInfo>;\n}\n\nconst configDefaults: Partial<SmtpTransportConfig> = {\n socketTimeout: 15000,\n connectionTimeout: 15000,\n greetingTimeout: 15000\n};\n\nconst applyDefaults = (\n initialConfig: Partial<SmtpTransportConfig>\n): Partial<SmtpTransportConfig> => {\n return Object.keys(configDefaults).reduce<Partial<SmtpTransportConfig>>(\n (config, key) => {\n const configKey = key as unknown as keyof SmtpTransportConfig;\n if (config[configKey] === undefined || config[configKey] === null) {\n // @ts-ignore\n config[configKey] = configDefaults[configKey];\n }\n\n return config;\n },\n { ...initialConfig }\n );\n};\n\nexport const createSmtpTransport = (\n initialConfig?: Partial<SmtpTransportConfig> | null\n): SmtpTransport => {\n if (\n !initialConfig ||\n typeof initialConfig !== \"object\" ||\n Object.keys(initialConfig).length === 0\n ) {\n throw new WebinyError(\"There is no configuration for the SMTP transport.\");\n }\n\n const config = applyDefaults(initialConfig);\n\n const transporter = nodemailer.createTransport(config);\n\n return {\n name: \"smtp-default\",\n transporter,\n send: async params => {\n const { replyTo, text, html, to, bcc, cc, from, subject } = params;\n\n try {\n const result = await transporter.sendMail({\n replyTo,\n bcc,\n cc,\n from,\n text,\n html,\n to,\n subject\n });\n if (result.messageId) {\n return {\n result: result.response,\n error: null\n };\n }\n\n throw new WebinyError({\n message:\n \"nodemailer.sendMail does not have a messageId in the result. Something went wrong...\",\n code: \"MAILER_ERROR\",\n data: {\n ...result\n }\n });\n } catch (ex) {\n return {\n result: null,\n error: {\n message: ex.message,\n code: ex.code,\n data: {\n ...params,\n ...ex.data\n }\n }\n };\n }\n }\n };\n};\n"],"mappings":";;;;;;;;AAKA;AACA;AANA;AACA;AACA;AACA;;AAYA,MAAMA,cAA4C,GAAG;EACjDC,aAAa,EAAE,KAAK;EACpBC,iBAAiB,EAAE,KAAK;EACxBC,eAAe,EAAE;AACrB,CAAC;AAED,MAAMC,aAAa,GACfC,aAA2C,IACZ;EAC/B,OAAOC,MAAM,CAACC,IAAI,CAACP,cAAc,CAAC,CAACQ,MAAM,CACrC,CAACC,MAAM,EAAEC,GAAG,KAAK;IACb,MAAMC,SAAS,GAAGD,GAA2C;IAC7D,IAAID,MAAM,CAACE,SAAS,CAAC,KAAKC,SAAS,IAAIH,MAAM,CAACE,SAAS,CAAC,KAAK,IAAI,EAAE;MAC/D;MACAF,MAAM,CAACE,SAAS,CAAC,GAAGX,cAAc,CAACW,SAAS,CAAC;IACjD;IAEA,OAAOF,MAAM;EACjB,CAAC,kCACIJ,aAAa,EACrB;AACL,CAAC;AAEM,MAAMQ,mBAAmB,GAC5BR,aAAmD,IACnC;EAChB,IACI,CAACA,aAAa,IACd,OAAOA,aAAa,KAAK,QAAQ,IACjCC,MAAM,CAACC,IAAI,CAACF,aAAa,CAAC,CAACS,MAAM,KAAK,CAAC,EACzC;IACE,MAAM,IAAIC,cAAW,CAAC,mDAAmD,CAAC;EAC9E;EAEA,MAAMN,MAAM,GAAGL,aAAa,CAACC,aAAa,CAAC;EAE3C,MAAMW,WAAW,GAAGC,mBAAU,CAACC,eAAe,CAACT,MAAM,CAAC;EAEtD,OAAO;IACHU,IAAI,EAAE,cAAc;IACpBH,WAAW;IACXI,IAAI,EAAE,MAAMC,MAAM,IAAI;MAClB,MAAM;QAAEC,OAAO;QAAEC,IAAI;QAAEC,IAAI;QAAEC,EAAE;QAAEC,GAAG;QAAEC,EAAE;QAAEC,IAAI;QAAEC;MAAQ,CAAC,GAAGR,MAAM;MAElE,IAAI;QACA,MAAMS,MAAM,GAAG,MAAMd,WAAW,CAACe,QAAQ,CAAC;UACtCT,OAAO;UACPI,GAAG;UACHC,EAAE;UACFC,IAAI;UACJL,IAAI;UACJC,IAAI;UACJC,EAAE;UACFI;QACJ,CAAC,CAAC;QACF,IAAIC,MAAM,CAACE,SAAS,EAAE;UAClB,OAAO;YACHF,MAAM,EAAEA,MAAM,CAACG,QAAQ;YACvBC,KAAK,EAAE;UACX,CAAC;QACL;QAEA,MAAM,IAAInB,cAAW,CAAC;UAClBoB,OAAO,EACH,sFAAsF;UAC1FC,IAAI,EAAE,cAAc;UACpBC,IAAI,kCACGP,MAAM;QAEjB,CAAC,CAAC;MACN,CAAC,CAAC,OAAOQ,EAAE,EAAE;QACT,OAAO;UACHR,MAAM,EAAE,IAAI;UACZI,KAAK,EAAE;YACHC,OAAO,EAAEG,EAAE,CAACH,OAAO;YACnBC,IAAI,EAAEE,EAAE,CAACF,IAAI;YACbC,IAAI,8DACGhB,MAAM,GACNiB,EAAE,CAACD,IAAI;UAElB;QACJ,CAAC;MACL;IACJ;EACJ,CAAC;AACL,CAAC;AAAC"}
1
+ {"version":3,"names":["_error","_interopRequireDefault","require","_nodemailer","configDefaults","socketTimeout","connectionTimeout","greetingTimeout","applyDefaults","initialConfig","Object","keys","reduce","config","key","configKey","undefined","createSmtpTransport","length","WebinyError","transporter","nodemailer","createTransport","name","send","params","replyTo","text","html","to","bcc","cc","from","subject","result","sendMail","messageId","response","error","message","code","data","ex","exports"],"sources":["createSmtpTransport.ts"],"sourcesContent":["/**\n * Nodemailer docs\n * https://nodemailer.com/about/\n */\nimport { Transport } from \"~/types\";\nimport WebinyError from \"@webiny/error\";\nimport nodemailer, { Transporter } from \"nodemailer\";\nimport SMTPTransport, { Options } from \"nodemailer/lib/smtp-transport\";\n\nexport type SmtpTransportConfig = Options;\n\nexport interface SmtpTransport extends Transport {\n transporter: Transporter<SMTPTransport.SentMessageInfo>;\n}\n\nconst configDefaults: Partial<SmtpTransportConfig> = {\n socketTimeout: 15000,\n connectionTimeout: 15000,\n greetingTimeout: 15000\n};\n\nconst applyDefaults = (\n initialConfig: Partial<SmtpTransportConfig>\n): Partial<SmtpTransportConfig> => {\n return Object.keys(configDefaults).reduce<Partial<SmtpTransportConfig>>(\n (config, key) => {\n const configKey = key as unknown as keyof SmtpTransportConfig;\n if (config[configKey] === undefined || config[configKey] === null) {\n // @ts-expect-error\n config[configKey] = configDefaults[configKey];\n }\n\n return config;\n },\n { ...initialConfig }\n );\n};\n\nexport const createSmtpTransport = (\n initialConfig?: Partial<SmtpTransportConfig> | null\n): SmtpTransport => {\n if (\n !initialConfig ||\n typeof initialConfig !== \"object\" ||\n Object.keys(initialConfig).length === 0\n ) {\n throw new WebinyError(\"There is no configuration for the SMTP transport.\");\n }\n\n const config = applyDefaults(initialConfig);\n\n const transporter = nodemailer.createTransport(config);\n\n return {\n name: \"smtp-default\",\n transporter,\n send: async params => {\n const { replyTo, text, html, to, bcc, cc, from, subject } = params;\n\n try {\n const result = await transporter.sendMail({\n replyTo,\n bcc,\n cc,\n from,\n text,\n html,\n to,\n subject\n });\n if (result.messageId) {\n return {\n result: result.response,\n error: null\n };\n }\n\n throw new WebinyError({\n message:\n \"nodemailer.sendMail does not have a messageId in the result. Something went wrong...\",\n code: \"MAILER_ERROR\",\n data: {\n ...result\n }\n });\n } catch (ex) {\n return {\n result: null,\n error: {\n message: ex.message,\n code: ex.code,\n data: {\n ...params,\n ...ex.data\n }\n }\n };\n }\n }\n };\n};\n"],"mappings":";;;;;;;AAKA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,WAAA,GAAAF,sBAAA,CAAAC,OAAA;AANA;AACA;AACA;AACA;;AAYA,MAAME,cAA4C,GAAG;EACjDC,aAAa,EAAE,KAAK;EACpBC,iBAAiB,EAAE,KAAK;EACxBC,eAAe,EAAE;AACrB,CAAC;AAED,MAAMC,aAAa,GACfC,aAA2C,IACZ;EAC/B,OAAOC,MAAM,CAACC,IAAI,CAACP,cAAc,CAAC,CAACQ,MAAM,CACrC,CAACC,MAAM,EAAEC,GAAG,KAAK;IACb,MAAMC,SAAS,GAAGD,GAA2C;IAC7D,IAAID,MAAM,CAACE,SAAS,CAAC,KAAKC,SAAS,IAAIH,MAAM,CAACE,SAAS,CAAC,KAAK,IAAI,EAAE;MAC/D;MACAF,MAAM,CAACE,SAAS,CAAC,GAAGX,cAAc,CAACW,SAAS,CAAC;IACjD;IAEA,OAAOF,MAAM;EACjB,CAAC,EACD;IAAE,GAAGJ;EAAc,CACvB,CAAC;AACL,CAAC;AAEM,MAAMQ,mBAAmB,GAC5BR,aAAmD,IACnC;EAChB,IACI,CAACA,aAAa,IACd,OAAOA,aAAa,KAAK,QAAQ,IACjCC,MAAM,CAACC,IAAI,CAACF,aAAa,CAAC,CAACS,MAAM,KAAK,CAAC,EACzC;IACE,MAAM,IAAIC,cAAW,CAAC,mDAAmD,CAAC;EAC9E;EAEA,MAAMN,MAAM,GAAGL,aAAa,CAACC,aAAa,CAAC;EAE3C,MAAMW,WAAW,GAAGC,mBAAU,CAACC,eAAe,CAACT,MAAM,CAAC;EAEtD,OAAO;IACHU,IAAI,EAAE,cAAc;IACpBH,WAAW;IACXI,IAAI,EAAE,MAAMC,MAAM,IAAI;MAClB,MAAM;QAAEC,OAAO;QAAEC,IAAI;QAAEC,IAAI;QAAEC,EAAE;QAAEC,GAAG;QAAEC,EAAE;QAAEC,IAAI;QAAEC;MAAQ,CAAC,GAAGR,MAAM;MAElE,IAAI;QACA,MAAMS,MAAM,GAAG,MAAMd,WAAW,CAACe,QAAQ,CAAC;UACtCT,OAAO;UACPI,GAAG;UACHC,EAAE;UACFC,IAAI;UACJL,IAAI;UACJC,IAAI;UACJC,EAAE;UACFI;QACJ,CAAC,CAAC;QACF,IAAIC,MAAM,CAACE,SAAS,EAAE;UAClB,OAAO;YACHF,MAAM,EAAEA,MAAM,CAACG,QAAQ;YACvBC,KAAK,EAAE;UACX,CAAC;QACL;QAEA,MAAM,IAAInB,cAAW,CAAC;UAClBoB,OAAO,EACH,sFAAsF;UAC1FC,IAAI,EAAE,cAAc;UACpBC,IAAI,EAAE;YACF,GAAGP;UACP;QACJ,CAAC,CAAC;MACN,CAAC,CAAC,OAAOQ,EAAE,EAAE;QACT,OAAO;UACHR,MAAM,EAAE,IAAI;UACZI,KAAK,EAAE;YACHC,OAAO,EAAEG,EAAE,CAACH,OAAO;YACnBC,IAAI,EAAEE,EAAE,CAACF,IAAI;YACbC,IAAI,EAAE;cACF,GAAGhB,MAAM;cACT,GAAGiB,EAAE,CAACD;YACV;UACJ;QACJ,CAAC;MACL;IACJ;EACJ,CAAC;AACL,CAAC;AAACE,OAAA,CAAA1B,mBAAA,GAAAA,mBAAA"}
@@ -24,4 +24,6 @@ Object.keys(_createSmtpTransport).forEach(function (key) {
24
24
  return _createSmtpTransport[key];
25
25
  }
26
26
  });
27
- });
27
+ });
28
+
29
+ //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./createDummyTransport\";\nexport * from \"./createSmtpTransport\";\n"],"mappings":";;;;;AAAA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
1
+ {"version":3,"names":["_createDummyTransport","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_createSmtpTransport"],"sources":["index.ts"],"sourcesContent":["export * from \"./createDummyTransport\";\nexport * from \"./createSmtpTransport\";\n"],"mappings":";;;;;AAAA,IAAAA,qBAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,qBAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,qBAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,qBAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,oBAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,oBAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,oBAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,oBAAA,CAAAL,GAAA;IAAA;EAAA;AAAA"}
package/types.js CHANGED
@@ -2,4 +2,6 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
- });
5
+ });
6
+
7
+ //# sourceMappingURL=types.js.map
package/crud/group.d.ts DELETED
@@ -1,2 +0,0 @@
1
- import { CmsGroupPlugin } from "@webiny/api-headless-cms";
2
- export declare const createGroup: () => CmsGroupPlugin;
package/crud/group.js DELETED
@@ -1,18 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.createGroup = void 0;
7
- var _apiHeadlessCms = require("@webiny/api-headless-cms");
8
- const createGroup = () => {
9
- return (0, _apiHeadlessCms.createCmsGroup)({
10
- name: "Mailer Group",
11
- description: "Mailer Group for CMS",
12
- id: "mailerGroup",
13
- slug: "mailerGroup",
14
- icon: "none",
15
- isPrivate: true
16
- });
17
- };
18
- exports.createGroup = createGroup;
package/crud/group.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"names":["createGroup","createCmsGroup","name","description","id","slug","icon","isPrivate"],"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 isPrivate: true\n });\n};\n"],"mappings":";;;;;;AAAA;AAEO,MAAMA,WAAW,GAAG,MAAsB;EAC7C,OAAO,IAAAC,8BAAc,EAAC;IAClBC,IAAI,EAAE,cAAc;IACpBC,WAAW,EAAE,sBAAsB;IACnCC,EAAE,EAAE,aAAa;IACjBC,IAAI,EAAE,aAAa;IACnBC,IAAI,EAAE,MAAM;IACZC,SAAS,EAAE;EACf,CAAC,CAAC;AACN,CAAC;AAAC"}