@webiny/api-mailer 0.0.0-unstable.df6d94b531 → 0.0.0-unstable.df7a8bb475

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 (168) hide show
  1. package/README.md +10 -13
  2. package/constants.d.ts +1 -0
  3. package/constants.js +3 -0
  4. package/constants.js.map +1 -0
  5. package/domain/Encryption/abstractions.d.ts +8 -0
  6. package/domain/Encryption/abstractions.js +4 -0
  7. package/domain/Encryption/abstractions.js.map +1 -0
  8. package/domain/MailTransport/abstractions.d.ts +18 -0
  9. package/domain/MailTransport/abstractions.js +5 -0
  10. package/domain/MailTransport/abstractions.js.map +1 -0
  11. package/domain/MailerService/abstractions.d.ts +19 -0
  12. package/domain/MailerService/abstractions.js +4 -0
  13. package/domain/MailerService/abstractions.js.map +1 -0
  14. package/domain/MailerService/errors.d.ts +16 -0
  15. package/domain/MailerService/errors.js +30 -0
  16. package/domain/MailerService/errors.js.map +1 -0
  17. package/domain/errors.d.ts +24 -0
  18. package/domain/errors.js +44 -0
  19. package/domain/errors.js.map +1 -0
  20. package/features/DummyTransport/DummyMailTransport.d.ts +9 -0
  21. package/features/DummyTransport/DummyMailTransport.js +12 -0
  22. package/features/DummyTransport/DummyMailTransport.js.map +1 -0
  23. package/features/DummyTransport/DummyMailTransportFactory.d.ts +8 -0
  24. package/features/DummyTransport/DummyMailTransportFactory.js +13 -0
  25. package/features/DummyTransport/DummyMailTransportFactory.js.map +1 -0
  26. package/features/DummyTransport/feature.d.ts +1 -0
  27. package/features/DummyTransport/feature.js +10 -0
  28. package/features/DummyTransport/feature.js.map +1 -0
  29. package/features/Encryption/PasswordEncryption.d.ts +9 -0
  30. package/features/Encryption/PasswordEncryption.js +23 -0
  31. package/features/Encryption/PasswordEncryption.js.map +1 -0
  32. package/features/Encryption/feature.d.ts +1 -0
  33. package/features/Encryption/feature.js +10 -0
  34. package/features/Encryption/feature.js.map +1 -0
  35. package/features/Encryption/utils/password.js +56 -0
  36. package/features/Encryption/utils/password.js.map +1 -0
  37. package/features/Encryption/utils/secret.js +11 -0
  38. package/features/Encryption/utils/secret.js.map +1 -0
  39. package/features/GetSettings/GetSettingsRepository.d.ts +15 -0
  40. package/features/GetSettings/GetSettingsRepository.js +39 -0
  41. package/features/GetSettings/GetSettingsRepository.js.map +1 -0
  42. package/features/GetSettings/GetSettingsUseCase.d.ts +12 -0
  43. package/features/GetSettings/GetSettingsUseCase.js +15 -0
  44. package/features/GetSettings/GetSettingsUseCase.js.map +1 -0
  45. package/features/GetSettings/abstractions.d.ts +16 -0
  46. package/features/GetSettings/abstractions.js +5 -0
  47. package/features/GetSettings/abstractions.js.map +1 -0
  48. package/features/GetSettings/feature.d.ts +1 -0
  49. package/features/GetSettings/feature.js +12 -0
  50. package/features/GetSettings/feature.js.map +1 -0
  51. package/features/GetSettings/index.d.ts +1 -0
  52. package/features/GetSettings/index.js +3 -0
  53. package/features/GetSettings/index.js.map +1 -0
  54. package/features/MailerService/MailerService.d.ts +15 -0
  55. package/features/MailerService/MailerService.js +52 -0
  56. package/features/MailerService/MailerService.js.map +1 -0
  57. package/features/MailerService/TransportFactory.d.ts +2 -0
  58. package/features/MailerService/TransportFactory.js +31 -0
  59. package/features/MailerService/TransportFactory.js.map +1 -0
  60. package/features/MailerService/feature.d.ts +1 -0
  61. package/features/MailerService/feature.js +10 -0
  62. package/features/MailerService/feature.js.map +1 -0
  63. package/features/SaveSettings/SaveSettingsRepository.d.ts +13 -0
  64. package/features/SaveSettings/SaveSettingsRepository.js +57 -0
  65. package/features/SaveSettings/SaveSettingsRepository.js.map +1 -0
  66. package/features/SaveSettings/SaveSettingsUseCase.d.ts +14 -0
  67. package/features/SaveSettings/SaveSettingsUseCase.js +51 -0
  68. package/features/SaveSettings/SaveSettingsUseCase.js.map +1 -0
  69. package/features/SaveSettings/abstractions.d.ts +53 -0
  70. package/features/SaveSettings/abstractions.js +11 -0
  71. package/features/SaveSettings/abstractions.js.map +1 -0
  72. package/features/SaveSettings/events.d.ts +10 -0
  73. package/features/SaveSettings/events.js +16 -0
  74. package/features/SaveSettings/events.js.map +1 -0
  75. package/features/SaveSettings/feature.d.ts +1 -0
  76. package/features/SaveSettings/feature.js +12 -0
  77. package/features/SaveSettings/feature.js.map +1 -0
  78. package/features/SaveSettings/index.d.ts +1 -0
  79. package/features/SaveSettings/index.js +3 -0
  80. package/features/SaveSettings/index.js.map +1 -0
  81. package/features/SaveSettings/validation.d.ts +23 -0
  82. package/features/SaveSettings/validation.js +19 -0
  83. package/features/SaveSettings/validation.js.map +1 -0
  84. package/features/SendMail/SendMailUseCase.d.ts +16 -0
  85. package/features/SendMail/SendMailUseCase.js +62 -0
  86. package/features/SendMail/SendMailUseCase.js.map +1 -0
  87. package/features/SendMail/abstractions.d.ts +45 -0
  88. package/features/SendMail/abstractions.js +11 -0
  89. package/features/SendMail/abstractions.js.map +1 -0
  90. package/features/SendMail/events.d.ts +14 -0
  91. package/features/SendMail/events.js +22 -0
  92. package/features/SendMail/events.js.map +1 -0
  93. package/features/SendMail/feature.d.ts +1 -0
  94. package/features/SendMail/feature.js +10 -0
  95. package/features/SendMail/feature.js.map +1 -0
  96. package/features/SmtpTransport/SmtpConfig.d.ts +6 -0
  97. package/features/SmtpTransport/SmtpConfig.js +29 -0
  98. package/features/SmtpTransport/SmtpConfig.js.map +1 -0
  99. package/features/SmtpTransport/SmtpMailTransport.d.ts +18 -0
  100. package/features/SmtpTransport/SmtpMailTransport.js +61 -0
  101. package/features/SmtpTransport/SmtpMailTransport.js.map +1 -0
  102. package/features/SmtpTransport/SmtpMailTransportFactory.d.ts +9 -0
  103. package/features/SmtpTransport/SmtpMailTransportFactory.js +14 -0
  104. package/features/SmtpTransport/SmtpMailTransportFactory.js.map +1 -0
  105. package/features/SmtpTransport/feature.d.ts +1 -0
  106. package/features/SmtpTransport/feature.js +10 -0
  107. package/features/SmtpTransport/feature.js.map +1 -0
  108. package/graphql/settings.d.ts +2 -2
  109. package/graphql/settings.js +50 -36
  110. package/graphql/settings.js.map +1 -1
  111. package/index.d.ts +4 -5
  112. package/index.js +24 -80
  113. package/index.js.map +1 -1
  114. package/package.json +32 -42
  115. package/types.d.ts +1 -108
  116. package/types.js +2 -4
  117. package/types.js.map +1 -1
  118. package/context.d.ts +0 -3
  119. package/context.js +0 -17
  120. package/context.js.map +0 -1
  121. package/crud/group.d.ts +0 -2
  122. package/crud/group.js +0 -18
  123. package/crud/group.js.map +0 -1
  124. package/crud/settings/hooks.d.ts +0 -5
  125. package/crud/settings/hooks.js +0 -43
  126. package/crud/settings/hooks.js.map +0 -1
  127. package/crud/settings/model.d.ts +0 -3
  128. package/crud/settings/model.js +0 -78
  129. package/crud/settings/model.js.map +0 -1
  130. package/crud/settings/password.js +0 -53
  131. package/crud/settings/password.js.map +0 -1
  132. package/crud/settings/secret.js +0 -17
  133. package/crud/settings/secret.js.map +0 -1
  134. package/crud/settings/transform.d.ts +0 -13
  135. package/crud/settings/transform.js +0 -44
  136. package/crud/settings/transform.js.map +0 -1
  137. package/crud/settings/validation.d.ts +0 -45
  138. package/crud/settings/validation.js +0 -25
  139. package/crud/settings/validation.js.map +0 -1
  140. package/crud/settings.crud.d.ts +0 -5
  141. package/crud/settings.crud.js +0 -271
  142. package/crud/settings.crud.js.map +0 -1
  143. package/crud/transport/onTransportBeforeSend.d.ts +0 -7
  144. package/crud/transport/onTransportBeforeSend.js +0 -60
  145. package/crud/transport/onTransportBeforeSend.js.map +0 -1
  146. package/crud/transporter.crud.d.ts +0 -2
  147. package/crud/transporter.crud.js +0 -156
  148. package/crud/transporter.crud.js.map +0 -1
  149. package/graphql/index.d.ts +0 -1
  150. package/graphql/index.js +0 -11
  151. package/graphql/index.js.map +0 -1
  152. package/plugins/CreateTransportPlugin.d.ts +0 -17
  153. package/plugins/CreateTransportPlugin.js +0 -25
  154. package/plugins/CreateTransportPlugin.js.map +0 -1
  155. package/plugins/index.d.ts +0 -1
  156. package/plugins/index.js +0 -16
  157. package/plugins/index.js.map +0 -1
  158. package/transports/createDummyTransport.d.ts +0 -5
  159. package/transports/createDummyTransport.js +0 -23
  160. package/transports/createDummyTransport.js.map +0 -1
  161. package/transports/createSmtpTransport.d.ts +0 -12
  162. package/transports/createSmtpTransport.js +0 -86
  163. package/transports/createSmtpTransport.js.map +0 -1
  164. package/transports/index.d.ts +0 -2
  165. package/transports/index.js +0 -27
  166. package/transports/index.js.map +0 -1
  167. /package/{crud/settings → features/Encryption/utils}/password.d.ts +0 -0
  168. /package/{crud/settings → features/Encryption/utils}/secret.d.ts +0 -0
@@ -1 +0,0 @@
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,17 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.getSecret = void 0;
8
- var _error = _interopRequireDefault(require("@webiny/error"));
9
- const getSecret = () => {
10
- const envValue = process.env.WEBINY_MAILER_PASSWORD_SECRET;
11
- const value = String(envValue).trim();
12
- if (!envValue || !value) {
13
- throw new _error.default(`There must be a password secret defined!`, "PASSWORD_SECRET_ERROR");
14
- }
15
- return value;
16
- };
17
- exports.getSecret = getSecret;
@@ -1 +0,0 @@
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,13 +0,0 @@
1
- import { ExtendedTransportSettings, TransportSettings } from "../../types";
2
- import { CmsEntry } from "@webiny/api-headless-cms/types";
3
- interface TransformValuesFromEntryParams {
4
- entry: CmsEntry<TransportSettings>;
5
- secret: string | null;
6
- }
7
- export declare const transformValuesFromEntry: (params: TransformValuesFromEntryParams) => ExtendedTransportSettings;
8
- interface TransformValuesToEntryValuesParams {
9
- values: TransportSettings;
10
- secret: string | null;
11
- }
12
- export declare const transformInputToEntryValues: (params: TransformValuesToEntryValuesParams) => TransportSettings;
13
- export {};
@@ -1,44 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.transformValuesFromEntry = exports.transformInputToEntryValues = void 0;
8
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
- var _error = _interopRequireDefault(require("@webiny/error"));
10
- var _password = require("./password");
11
- const transformValuesFromEntry = params => {
12
- const {
13
- entry,
14
- secret
15
- } = params;
16
- if (!secret) {
17
- throw new _error.default(`There is no secret defined. Without it we cannot decrypt the password.`);
18
- }
19
- return (0, _objectSpread2.default)((0, _objectSpread2.default)({
20
- id: entry.id
21
- }, entry.values), {}, {
22
- password: (0, _password.decrypt)({
23
- value: entry.values.password,
24
- secret
25
- })
26
- });
27
- };
28
- exports.transformValuesFromEntry = transformValuesFromEntry;
29
- const transformInputToEntryValues = params => {
30
- const {
31
- values,
32
- secret
33
- } = params;
34
- if (!secret) {
35
- throw new _error.default(`There is no secret defined. Without it we cannot decrypt the password.`);
36
- }
37
- return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, values), {}, {
38
- password: (0, _password.encrypt)({
39
- value: values.password,
40
- secret
41
- })
42
- });
43
- };
44
- exports.transformInputToEntryValues = transformInputToEntryValues;
@@ -1 +0,0 @@
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,45 +0,0 @@
1
- import zod from "zod";
2
- export declare const createValidation: zod.ZodObject<{
3
- password: zod.ZodString;
4
- from: zod.ZodString;
5
- port: zod.ZodNullable<zod.ZodNumber>;
6
- replyTo: zod.ZodString;
7
- host: zod.ZodString;
8
- user: zod.ZodString;
9
- }, "strip", zod.ZodTypeAny, {
10
- from: string;
11
- replyTo: string;
12
- password: string;
13
- port: number | null;
14
- host: string;
15
- user: string;
16
- }, {
17
- from: string;
18
- replyTo: string;
19
- password: string;
20
- port: number | null;
21
- host: string;
22
- user: string;
23
- }>;
24
- export declare const updateValidation: zod.ZodObject<{
25
- password: zod.ZodNullable<zod.ZodString>;
26
- from: zod.ZodString;
27
- port: zod.ZodNullable<zod.ZodNumber>;
28
- replyTo: zod.ZodString;
29
- host: zod.ZodString;
30
- user: zod.ZodString;
31
- }, "strip", zod.ZodTypeAny, {
32
- from: string;
33
- replyTo: string;
34
- password: string | null;
35
- port: number | null;
36
- host: string;
37
- user: string;
38
- }, {
39
- from: string;
40
- replyTo: string;
41
- password: string | null;
42
- port: number | null;
43
- host: string;
44
- user: string;
45
- }>;
@@ -1,25 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.updateValidation = exports.createValidation = void 0;
8
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
- var _zod = _interopRequireDefault(require("zod"));
10
- const password = _zod.default.string().describe("Password");
11
- const common = {
12
- from: _zod.default.string().email().describe("Mail from"),
13
- port: _zod.default.number().optional().nullish().describe("Port"),
14
- replyTo: _zod.default.string().email().optional().describe("Mail reply-to"),
15
- host: _zod.default.string().describe("Hostname"),
16
- user: _zod.default.string().describe("User")
17
- };
18
- const createValidation = _zod.default.object((0, _objectSpread2.default)((0, _objectSpread2.default)({}, common), {}, {
19
- password
20
- })).required();
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;
@@ -1 +0,0 @@
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,5 +0,0 @@
1
- import { MailerContext, MailerSettingsContext } from "../types";
2
- /**
3
- * Note that settings cannot be used if there is no secret defined.
4
- */
5
- export declare const createSettingsCrud: (context: MailerContext) => Promise<MailerSettingsContext>;
@@ -1,271 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.createSettingsCrud = void 0;
8
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
9
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
10
- var _error = _interopRequireDefault(require("@webiny/error"));
11
- var _pubsub = require("@webiny/pubsub");
12
- var _model = require("./settings/model");
13
- var _transform = require("./settings/transform");
14
- var _secret = require("./settings/secret");
15
- var _validation = require("./settings/validation");
16
- var _hooks = require("./settings/hooks");
17
- var _apiSecurity = require("@webiny/api-security");
18
- const _excluded = ["password"],
19
- _excluded2 = ["password"];
20
- const defaultPort = 25;
21
- /**
22
- * Note that settings cannot be used if there is no secret defined.
23
- */
24
- const createSettingsCrud = async context => {
25
- /**
26
- * We need to remove password from all references on create and update in the CMS.
27
- */
28
- (0, _hooks.attachPasswordObfuscatingHooks)(context);
29
- const getTenant = () => {
30
- return context.tenancy.getCurrentTenant().id;
31
- };
32
- const validateAccess = async () => {
33
- const permission = await context.security.getPermission("mailer.settings");
34
- if (permission) {
35
- return;
36
- }
37
- throw new _apiSecurity.NotAuthorizedError({
38
- data: {
39
- reason: `Not allowed to update the mailer settings.`
40
- }
41
- });
42
- };
43
- let secret = null;
44
- try {
45
- secret = (0, _secret.getSecret)();
46
- } catch (ex) {}
47
- const getModel = async () => {
48
- try {
49
- context.security.disableAuthorization();
50
- const model = await context.cms.getModel(_model.SETTINGS_MODEL_ID);
51
- if (model) {
52
- return model;
53
- }
54
- } catch (ex) {
55
- throw new _error.default(ex.message, ex.code, ex.data);
56
- } finally {
57
- context.security.enableAuthorization();
58
- }
59
- throw new _error.default(`Missing CMS Model "${_model.SETTINGS_MODEL_ID}".`, "CMS_MODEL_MISSING", {
60
- modelId: _model.SETTINGS_MODEL_ID
61
- });
62
- };
63
-
64
- // get
65
- const onSettingsBeforeGet = (0, _pubsub.createTopic)("mailer.onSettingsBeforeGet");
66
- const onSettingsAfterGet = (0, _pubsub.createTopic)("mailer.onSettingsAfterGet");
67
- const onSettingsGetError = (0, _pubsub.createTopic)("mailer.onSettingsCreateError");
68
- // create
69
- const onSettingsBeforeCreate = (0, _pubsub.createTopic)("mailer.onSettingsBeforeCreate");
70
- const onSettingsAfterCreate = (0, _pubsub.createTopic)("mailer.onSettingsAfterCreate");
71
- const onSettingsCreateError = (0, _pubsub.createTopic)("mailer.onSettingsCreateError");
72
- // update
73
- const onSettingsBeforeUpdate = (0, _pubsub.createTopic)("mailer.onSettingsBeforeUpdate");
74
- const onSettingsAfterUpdate = (0, _pubsub.createTopic)("mailer.onSettingsAfterUpdate");
75
- const onSettingsUpdateError = (0, _pubsub.createTopic)("mailer.onSettingsUpdateError");
76
- const checkSecret = () => {
77
- if (secret) {
78
- return;
79
- }
80
- throw new _error.default("There must be a password secret defined!", "PASSWORD_SECRET_ERROR", {
81
- description: "To store the Mailer settings, you must have a password secret environment variable defined."
82
- });
83
- };
84
- return {
85
- onSettingsAfterGet,
86
- onSettingsBeforeGet,
87
- onSettingsGetError,
88
- onSettingsBeforeCreate,
89
- onSettingsAfterCreate,
90
- onSettingsCreateError,
91
- onSettingsBeforeUpdate,
92
- onSettingsAfterUpdate,
93
- onSettingsUpdateError,
94
- getSettings: async () => {
95
- checkSecret();
96
- const model = await getModel();
97
- const tenant = getTenant();
98
- try {
99
- context.security.disableAuthorization();
100
- await onSettingsBeforeGet.publish({
101
- tenant
102
- });
103
- /**
104
- * We always list because we have no id or something like that to query by.
105
- * This should return one setting anyway.
106
- */
107
- const [entries] = await context.cms.listLatestEntries(model, {
108
- limit: 1,
109
- sort: ["createdOn_DESC"]
110
- });
111
- const [entry] = entries;
112
- if (!entry) {
113
- return null;
114
- }
115
- const settings = (0, _transform.transformValuesFromEntry)({
116
- entry: entry,
117
- secret
118
- });
119
- const passwordlessSettings = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, settings), {}, {
120
- password: ""
121
- });
122
- await onSettingsAfterGet.publish({
123
- tenant,
124
- settings: passwordlessSettings
125
- });
126
- return settings;
127
- } catch (ex) {
128
- await onSettingsGetError.publish({
129
- tenant,
130
- error: ex
131
- });
132
- } finally {
133
- context.security.enableAuthorization();
134
- }
135
- return null;
136
- },
137
- /**
138
- * Method should not be used outside of mailer
139
- * @internal
140
- */
141
- async createSettings(params) {
142
- checkSecret();
143
- await validateAccess();
144
- const {
145
- input
146
- } = params;
147
- const model = await getModel();
148
- const result = _validation.createValidation.safeParse(input);
149
- if (!result.success) {
150
- throw new _error.default("Validation failed!", "VALIDATION_ERROR", {
151
- errors: result.error.errors
152
- });
153
- }
154
- const _result$data = result.data,
155
- {
156
- password
157
- } = _result$data,
158
- settings = (0, _objectWithoutProperties2.default)(_result$data, _excluded);
159
- const passwordlessSettings = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, settings), {}, {
160
- port: settings.port || defaultPort,
161
- password: ""
162
- });
163
- try {
164
- context.security.disableAuthorization();
165
- await onSettingsBeforeCreate.publish({
166
- settings: passwordlessSettings
167
- });
168
- await context.cms.createEntry(model, (0, _transform.transformInputToEntryValues)({
169
- values: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, passwordlessSettings), {}, {
170
- password
171
- }),
172
- secret
173
- }));
174
- await onSettingsAfterCreate.publish({
175
- settings: passwordlessSettings
176
- });
177
- return passwordlessSettings;
178
- } catch (ex) {
179
- await onSettingsCreateError.publish({
180
- settings: passwordlessSettings,
181
- error: ex
182
- });
183
- throw new _error.default(ex.message, ex.code, ex.data);
184
- } finally {
185
- context.security.enableAuthorization();
186
- }
187
- },
188
- /**
189
- * Method should not be used outside of mailer
190
- * @internal
191
- */
192
- async updateSettings(params) {
193
- checkSecret();
194
- await validateAccess();
195
- const {
196
- input,
197
- original: initialOriginal
198
- } = params;
199
- const model = await getModel();
200
- const result = _validation.updateValidation.safeParse(input);
201
- if (!result.success) {
202
- throw new _error.default("Validation failed!", "VALIDATION_ERROR", {
203
- errors: result.error.errors
204
- });
205
- }
206
- let original = initialOriginal;
207
- if (!original) {
208
- original = await this.getSettings();
209
- if (!original) {
210
- throw new _error.default(`You are trying to update settings, but there is no existing record. Create it first!`, "NOT_FOUND");
211
- }
212
- }
213
- const _result$data2 = result.data,
214
- {
215
- password
216
- } = _result$data2,
217
- settings = (0, _objectWithoutProperties2.default)(_result$data2, _excluded2);
218
- const passwordlessSettings = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, settings), {}, {
219
- port: settings.port || original.port || defaultPort,
220
- password: ""
221
- });
222
- try {
223
- context.security.disableAuthorization();
224
- await onSettingsBeforeUpdate.publish({
225
- settings: passwordlessSettings,
226
- original
227
- });
228
- const transformedInput = (0, _transform.transformInputToEntryValues)({
229
- values: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, passwordlessSettings), {}, {
230
- password: password || original.password
231
- }),
232
- secret
233
- });
234
- /**
235
- * We want to make sure that old password gets stored again in case no password was sent in update input.
236
- */
237
- await context.cms.updateEntry(model, original.id, transformedInput);
238
- await onSettingsAfterUpdate.publish({
239
- settings: passwordlessSettings,
240
- original
241
- });
242
- return passwordlessSettings;
243
- } catch (ex) {
244
- await onSettingsUpdateError.publish({
245
- original,
246
- settings: passwordlessSettings,
247
- error: ex
248
- });
249
- throw new _error.default(ex.message, ex.code, ex.data);
250
- } finally {
251
- context.security.enableAuthorization();
252
- }
253
- },
254
- async saveSettings(params) {
255
- const {
256
- input
257
- } = params;
258
- const original = await this.getSettings();
259
- if (!original) {
260
- return this.createSettings({
261
- input
262
- });
263
- }
264
- return this.updateSettings({
265
- input,
266
- original
267
- });
268
- }
269
- };
270
- };
271
- exports.createSettingsCrud = createSettingsCrud;
@@ -1 +0,0 @@
1
- {"version":3,"names":["defaultPort","createSettingsCrud","context","attachPasswordObfuscatingHooks","getTenant","tenancy","getCurrentTenant","id","validateAccess","permission","security","getPermission","NotAuthorizedError","data","reason","secret","getSecret","ex","getModel","disableAuthorization","model","cms","SETTINGS_MODEL_ID","WebinyError","message","code","enableAuthorization","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","transformedInput","updateEntry","saveSettings"],"sources":["settings.crud.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport {\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 { transformValuesFromEntry, transformInputToEntryValues } 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 try {\n context.security.disableAuthorization();\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 } finally {\n context.security.enableAuthorization();\n }\n throw new WebinyError(`Missing CMS Model \"${SETTINGS_MODEL_ID}\".`, \"CMS_MODEL_MISSING\", {\n modelId: SETTINGS_MODEL_ID\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 try {\n context.security.disableAuthorization();\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 } finally {\n context.security.enableAuthorization();\n }\n return null;\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 try {\n context.security.disableAuthorization();\n\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 } finally {\n context.security.enableAuthorization();\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 let original = initialOriginal;\n if (!original) {\n original = await this.getSettings();\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\n const { password, ...settings } = result.data;\n\n const passwordlessSettings: TransportSettings = {\n ...settings,\n port: settings.port || original.port || defaultPort,\n password: \"\"\n };\n try {\n context.security.disableAuthorization();\n\n await onSettingsBeforeUpdate.publish({\n settings: passwordlessSettings,\n 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 } finally {\n context.security.enableAuthorization();\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":";;;;;;;;;AAAA;AAgBA;AACA;AACA;AACA;AACA;AAEA;AACA;AAA0D;EAAA;AAE1D,MAAMA,WAAW,GAAG,EAAE;AACtB;AACA;AACA;AACO,MAAMC,kBAAkB,GAAG,MAC9BC,OAAsB,IACW;EACjC;AACJ;AACA;EACI,IAAAC,qCAA8B,EAACD,OAAO,CAAC;EAEvC,MAAME,SAAS,GAAG,MAAM;IACpB,OAAOF,OAAO,CAACG,OAAO,CAACC,gBAAgB,EAAE,CAACC,EAAE;EAChD,CAAC;EAED,MAAMC,cAAc,GAAG,YAAY;IAC/B,MAAMC,UAAU,GAAG,MAAMP,OAAO,CAACQ,QAAQ,CAACC,aAAa,CAAC,iBAAiB,CAAC;IAE1E,IAAIF,UAAU,EAAE;MACZ;IACJ;IACA,MAAM,IAAIG,+BAAkB,CAAC;MACzBC,IAAI,EAAE;QACFC,MAAM,EAAG;MACb;IACJ,CAAC,CAAC;EACN,CAAC;EAED,IAAIC,MAAqB,GAAG,IAAI;EAChC,IAAI;IACAA,MAAM,GAAG,IAAAC,iBAAS,GAAE;EACxB,CAAC,CAAC,OAAOC,EAAE,EAAE,CAAC;EAEd,MAAMC,QAAQ,GAAG,YAA+B;IAC5C,IAAI;MACAhB,OAAO,CAACQ,QAAQ,CAACS,oBAAoB,EAAE;MACvC,MAAMC,KAAK,GAAG,MAAMlB,OAAO,CAACmB,GAAG,CAACH,QAAQ,CAACI,wBAAiB,CAAC;MAC3D,IAAIF,KAAK,EAAE;QACP,OAAOA,KAAK;MAChB;IACJ,CAAC,CAAC,OAAOH,EAAE,EAAE;MACT,MAAM,IAAIM,cAAW,CAACN,EAAE,CAACO,OAAO,EAAEP,EAAE,CAACQ,IAAI,EAAER,EAAE,CAACJ,IAAI,CAAC;IACvD,CAAC,SAAS;MACNX,OAAO,CAACQ,QAAQ,CAACgB,mBAAmB,EAAE;IAC1C;IACA,MAAM,IAAIH,cAAW,CAAE,sBAAqBD,wBAAkB,IAAG,EAAE,mBAAmB,EAAE;MACpFK,OAAO,EAAEL;IACb,CAAC,CAAC;EACN,CAAC;;EAED;EACA,MAAMM,mBAAmB,GAAG,IAAAC,mBAAW,EACnC,4BAA4B,CAC/B;EACD,MAAMC,kBAAkB,GAAG,IAAAD,mBAAW,EAClC,2BAA2B,CAC9B;EACD,MAAME,kBAAkB,GAAG,IAAAF,mBAAW,EAClC,8BAA8B,CACjC;EACD;EACA,MAAMG,sBAAsB,GAAG,IAAAH,mBAAW,EACtC,+BAA+B,CAClC;EACD,MAAMI,qBAAqB,GAAG,IAAAJ,mBAAW,EACrC,8BAA8B,CACjC;EACD,MAAMK,qBAAqB,GAAG,IAAAL,mBAAW,EACrC,8BAA8B,CACjC;EACD;EACA,MAAMM,sBAAsB,GAAG,IAAAN,mBAAW,EACtC,+BAA+B,CAClC;EACD,MAAMO,qBAAqB,GAAG,IAAAP,mBAAW,EACrC,8BAA8B,CACjC;EACD,MAAMQ,qBAAqB,GAAG,IAAAR,mBAAW,EACrC,8BAA8B,CACjC;EAED,MAAMS,WAAW,GAAG,MAAY;IAC5B,IAAIvB,MAAM,EAAE;MACR;IACJ;IACA,MAAM,IAAIQ,cAAW,CAAC,0CAA0C,EAAE,uBAAuB,EAAE;MACvFgB,WAAW,EACP;IACR,CAAC,CAAC;EACN,CAAC;EAED,OAAO;IACHT,kBAAkB;IAClBF,mBAAmB;IACnBG,kBAAkB;IAClBC,sBAAsB;IACtBC,qBAAqB;IACrBC,qBAAqB;IACrBC,sBAAsB;IACtBC,qBAAqB;IACrBC,qBAAqB;IACrBG,WAAW,EAAE,YAAY;MACrBF,WAAW,EAAE;MAEb,MAAMlB,KAAK,GAAG,MAAMF,QAAQ,EAAE;MAE9B,MAAMuB,MAAM,GAAGrC,SAAS,EAAE;MAC1B,IAAI;QACAF,OAAO,CAACQ,QAAQ,CAACS,oBAAoB,EAAE;QACvC,MAAMS,mBAAmB,CAACc,OAAO,CAAC;UAC9BD;QACJ,CAAC,CAAC;QACF;AAChB;AACA;AACA;QACgB,MAAM,CAACE,OAAO,CAAC,GAAG,MAAMzC,OAAO,CAACmB,GAAG,CAACuB,iBAAiB,CAACxB,KAAK,EAAE;UACzDyB,KAAK,EAAE,CAAC;UACRC,IAAI,EAAE,CAAC,gBAAgB;QAC3B,CAAC,CAAC;QACF,MAAM,CAACC,KAAK,CAAC,GAAGJ,OAAO;QACvB,IAAI,CAACI,KAAK,EAAE;UACR,OAAO,IAAI;QACf;QACA,MAAMC,QAAQ,GAAG,IAAAC,mCAAwB,EAAC;UACtCF,KAAK,EAAEA,KAAoC;UAC3ChC;QACJ,CAAC,CAAC;QAEF,MAAMmC,oBAAuC,+DACtCF,QAAQ;UACXG,QAAQ,EAAE;QAAE,EACf;QAED,MAAMrB,kBAAkB,CAACY,OAAO,CAAC;UAC7BD,MAAM;UACNO,QAAQ,EAAEE;QACd,CAAC,CAAC;QAEF,OAAOF,QAAQ;MACnB,CAAC,CAAC,OAAO/B,EAAE,EAAE;QACT,MAAMc,kBAAkB,CAACW,OAAO,CAAC;UAC7BD,MAAM;UACNW,KAAK,EAAEnC;QACX,CAAC,CAAC;MACN,CAAC,SAAS;QACNf,OAAO,CAACQ,QAAQ,CAACgB,mBAAmB,EAAE;MAC1C;MACA,OAAO,IAAI;IACf,CAAC;IACD;AACR;AACA;AACA;IACQ,MAAM2B,cAAc,CAA4BC,MAAM,EAAE;MACpDhB,WAAW,EAAE;MACb,MAAM9B,cAAc,EAAE;MAEtB,MAAM;QAAE+C;MAAM,CAAC,GAAGD,MAAM;MAExB,MAAMlC,KAAK,GAAG,MAAMF,QAAQ,EAAE;MAE9B,MAAMsC,MAAM,GAAGC,4BAAgB,CAACC,SAAS,CAACH,KAAK,CAAC;MAEhD,IAAI,CAACC,MAAM,CAACG,OAAO,EAAE;QACjB,MAAM,IAAIpC,cAAW,CAAC,oBAAoB,EAAE,kBAAkB,EAAE;UAC5DqC,MAAM,EAAEJ,MAAM,CAACJ,KAAK,CAACQ;QACzB,CAAC,CAAC;MACN;MAEA,qBAAkCJ,MAAM,CAAC3C,IAAI;QAAvC;UAAEsC;QAAsB,CAAC;QAAVH,QAAQ;MAE7B,MAAME,oBAAuC,+DACtCF,QAAQ;QACXa,IAAI,EAAEb,QAAQ,CAACa,IAAI,IAAI7D,WAAW;QAClCmD,QAAQ,EAAE;MAAE,EACf;MAED,IAAI;QACAjD,OAAO,CAACQ,QAAQ,CAACS,oBAAoB,EAAE;QAEvC,MAAMa,sBAAsB,CAACU,OAAO,CAAC;UACjCM,QAAQ,EAAEE;QACd,CAAC,CAAC;QAEF,MAAMhD,OAAO,CAACmB,GAAG,CAACyC,WAAW,CACzB1C,KAAK,EACL,IAAA2C,sCAA2B,EAAC;UACxBC,MAAM,8DACCd,oBAAoB;YACvBC;UAAQ,EACX;UACDpC;QACJ,CAAC,CAAC,CACL;QAED,MAAMkB,qBAAqB,CAACS,OAAO,CAAC;UAChCM,QAAQ,EAAEE;QACd,CAAC,CAAC;QACF,OAAOA,oBAAoB;MAC/B,CAAC,CAAC,OAAOjC,EAAE,EAAE;QACT,MAAMiB,qBAAqB,CAACQ,OAAO,CAAC;UAChCM,QAAQ,EAAEE,oBAAoB;UAC9BE,KAAK,EAAEnC;QACX,CAAC,CAAC;QACF,MAAM,IAAIM,cAAW,CAACN,EAAE,CAACO,OAAO,EAAEP,EAAE,CAACQ,IAAI,EAAER,EAAE,CAACJ,IAAI,CAAC;MACvD,CAAC,SAAS;QACNX,OAAO,CAACQ,QAAQ,CAACgB,mBAAmB,EAAE;MAC1C;IACJ,CAAC;IACD;AACR;AACA;AACA;IACQ,MAAMuC,cAAc,CAA4BX,MAAM,EAAE;MACpDhB,WAAW,EAAE;MACb,MAAM9B,cAAc,EAAE;MAEtB,MAAM;QAAE+C,KAAK;QAAEW,QAAQ,EAAEC;MAAgB,CAAC,GAAGb,MAAM;MAEnD,MAAMlC,KAAK,GAAG,MAAMF,QAAQ,EAAE;MAE9B,MAAMsC,MAAM,GAAGY,4BAAgB,CAACV,SAAS,CAACH,KAAK,CAAC;MAEhD,IAAI,CAACC,MAAM,CAACG,OAAO,EAAE;QACjB,MAAM,IAAIpC,cAAW,CAAC,oBAAoB,EAAE,kBAAkB,EAAE;UAC5DqC,MAAM,EAAEJ,MAAM,CAACJ,KAAK,CAACQ;QACzB,CAAC,CAAC;MACN;MACA,IAAIM,QAAQ,GAAGC,eAAe;MAC9B,IAAI,CAACD,QAAQ,EAAE;QACXA,QAAQ,GAAG,MAAM,IAAI,CAAC1B,WAAW,EAAE;QACnC,IAAI,CAAC0B,QAAQ,EAAE;UACX,MAAM,IAAI3C,cAAW,CAChB,sFAAqF,EACtF,WAAW,CACd;QACL;MACJ;MAEA,sBAAkCiC,MAAM,CAAC3C,IAAI;QAAvC;UAAEsC;QAAsB,CAAC;QAAVH,QAAQ;MAE7B,MAAME,oBAAuC,+DACtCF,QAAQ;QACXa,IAAI,EAAEb,QAAQ,CAACa,IAAI,IAAIK,QAAQ,CAACL,IAAI,IAAI7D,WAAW;QACnDmD,QAAQ,EAAE;MAAE,EACf;MACD,IAAI;QACAjD,OAAO,CAACQ,QAAQ,CAACS,oBAAoB,EAAE;QAEvC,MAAMgB,sBAAsB,CAACO,OAAO,CAAC;UACjCM,QAAQ,EAAEE,oBAAoB;UAC9BgB;QACJ,CAAC,CAAC;QAEF,MAAMG,gBAAgB,GAAG,IAAAN,sCAA2B,EAAC;UACjDC,MAAM,8DACCd,oBAAoB;YACvBC,QAAQ,EAAEA,QAAQ,IAAIe,QAAQ,CAACf;UAAQ,EAC1C;UACDpC;QACJ,CAAC,CAAC;QACF;AAChB;AACA;QACgB,MAAMb,OAAO,CAACmB,GAAG,CAACiD,WAAW,CAAClD,KAAK,EAAE8C,QAAQ,CAAC3D,EAAE,EAAE8D,gBAAgB,CAAC;QAEnE,MAAMjC,qBAAqB,CAACM,OAAO,CAAC;UAChCM,QAAQ,EAAEE,oBAAoB;UAC9BgB;QACJ,CAAC,CAAC;QACF,OAAOhB,oBAAoB;MAC/B,CAAC,CAAC,OAAOjC,EAAE,EAAE;QACT,MAAMoB,qBAAqB,CAACK,OAAO,CAAC;UAChCwB,QAAQ;UACRlB,QAAQ,EAAEE,oBAAoB;UAC9BE,KAAK,EAAEnC;QACX,CAAC,CAAC;QACF,MAAM,IAAIM,cAAW,CAACN,EAAE,CAACO,OAAO,EAAEP,EAAE,CAACQ,IAAI,EAAER,EAAE,CAACJ,IAAI,CAAC;MACvD,CAAC,SAAS;QACNX,OAAO,CAACQ,QAAQ,CAACgB,mBAAmB,EAAE;MAC1C;IACJ,CAAC;IACD,MAAM6C,YAAY,CAA4BjB,MAAM,EAAE;MAClD,MAAM;QAAEC;MAAM,CAAC,GAAGD,MAAM;MAExB,MAAMY,QAAQ,GAAG,MAAM,IAAI,CAAC1B,WAAW,EAAE;MACzC,IAAI,CAAC0B,QAAQ,EAAE;QACX,OAAO,IAAI,CAACb,cAAc,CAAC;UACvBE;QACJ,CAAC,CAAC;MACN;MACA,OAAO,IAAI,CAACU,cAAc,CAAC;QACvBV,KAAK;QACLW;MACJ,CAAC,CAAC;IACN;EACJ,CAAC;AACL,CAAC;AAAC"}
@@ -1,7 +0,0 @@
1
- import { Topic } from "@webiny/pubsub/types";
2
- import { OnTransportBeforeSendParams } from "../../types";
3
- interface Params {
4
- onTransportBeforeSend: Topic<OnTransportBeforeSendParams>;
5
- }
6
- export declare const attachOnTransportBeforeSend: (params: Params) => void;
7
- export {};
@@ -1,60 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.attachOnTransportBeforeSend = void 0;
8
- var _error = _interopRequireDefault(require("@webiny/error"));
9
- var _zod = _interopRequireDefault(require("zod"));
10
- const requiredString = _zod.default.string();
11
- const requiredEmail = requiredString.email();
12
- const schema = _zod.default.object({
13
- to: _zod.default.array(requiredEmail).optional(),
14
- from: _zod.default.string().email().optional(),
15
- subject: requiredString.max(1024).min(2),
16
- cc: _zod.default.array(requiredEmail).optional(),
17
- bcc: _zod.default.array(requiredEmail).optional(),
18
- replyTo: _zod.default.string().email().optional(),
19
- text: _zod.default.string().optional(),
20
- html: _zod.default.string().optional()
21
- }).refine(data => {
22
- return !!data.text || !!data.html;
23
- }, "Either text or html is required.");
24
- const attachOnTransportBeforeSend = params => {
25
- const {
26
- onTransportBeforeSend
27
- } = params;
28
- onTransportBeforeSend.subscribe(async ({
29
- data: input
30
- }) => {
31
- let result;
32
- try {
33
- result = schema.safeParse(input);
34
- if (result.success) {
35
- return;
36
- }
37
- throw new _error.default({
38
- message: "Error while validating e-mail params.",
39
- code: "VALIDATION_ERROR",
40
- data: {
41
- error: result.error,
42
- input
43
- }
44
- });
45
- } catch (ex) {
46
- if (ex instanceof _error.default) {
47
- throw ex;
48
- }
49
- throw new _error.default({
50
- message: "Error while validating e-mail params.",
51
- code: "VALIDATION_ERROR",
52
- data: {
53
- input,
54
- error: ex
55
- }
56
- });
57
- }
58
- });
59
- };
60
- exports.attachOnTransportBeforeSend = attachOnTransportBeforeSend;
@@ -1 +0,0 @@
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,2 +0,0 @@
1
- import { MailerContext, MailerTransporterContext } from "../types";
2
- export declare const createTransporterCrud: (context: MailerContext) => Promise<MailerTransporterContext>;