@webiny/api-mailer 5.33.5 → 5.34.0-beta.0

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 (68) hide show
  1. package/context.d.ts +2 -2
  2. package/context.js +9 -3
  3. package/context.js.map +1 -1
  4. package/crud/group.d.ts +2 -0
  5. package/crud/group.js +21 -0
  6. package/crud/group.js.map +1 -0
  7. package/crud/settings/hooks.d.ts +5 -0
  8. package/crud/settings/hooks.js +55 -0
  9. package/crud/settings/hooks.js.map +1 -0
  10. package/crud/settings/model.d.ts +3 -0
  11. package/crud/settings/model.js +90 -0
  12. package/crud/settings/model.js.map +1 -0
  13. package/crud/settings/password.d.ts +7 -0
  14. package/crud/settings/password.js +71 -0
  15. package/crud/settings/password.js.map +1 -0
  16. package/crud/settings/secret.d.ts +1 -0
  17. package/crud/settings/secret.js +23 -0
  18. package/crud/settings/secret.js.map +1 -0
  19. package/crud/settings/transform.d.ts +13 -0
  20. package/crud/settings/transform.js +56 -0
  21. package/crud/settings/transform.js.map +1 -0
  22. package/crud/settings/validation.d.ts +4 -0
  23. package/crud/settings/validation.js +38 -0
  24. package/crud/settings/validation.js.map +1 -0
  25. package/crud/settings.crud.d.ts +5 -0
  26. package/crud/settings.crud.js +331 -0
  27. package/crud/settings.crud.js.map +1 -0
  28. package/crud/transport/onTransportBeforeSend.d.ts +7 -0
  29. package/crud/transport/onTransportBeforeSend.js +69 -0
  30. package/crud/transport/onTransportBeforeSend.js.map +1 -0
  31. package/crud/transporter.crud.d.ts +2 -0
  32. package/crud/transporter.crud.js +193 -0
  33. package/crud/transporter.crud.js.map +1 -0
  34. package/graphql/index.d.ts +1 -0
  35. package/graphql/index.js +14 -0
  36. package/graphql/index.js.map +1 -0
  37. package/graphql/settings.d.ts +3 -0
  38. package/graphql/settings.js +109 -0
  39. package/graphql/settings.js.map +1 -0
  40. package/index.d.ts +7 -6
  41. package/index.js +69 -10
  42. package/index.js.map +1 -1
  43. package/package.json +33 -15
  44. package/plugins/CreateTransportPlugin.d.ts +17 -0
  45. package/plugins/CreateTransportPlugin.js +34 -0
  46. package/plugins/CreateTransportPlugin.js.map +1 -0
  47. package/plugins/index.d.ts +1 -0
  48. package/plugins/index.js +18 -0
  49. package/plugins/index.js.map +1 -0
  50. package/transports/createDummyTransport.d.ts +5 -0
  51. package/{mailers/createDummyMailer.js → transports/createDummyTransport.js} +4 -3
  52. package/transports/createDummyTransport.js.map +1 -0
  53. package/transports/createSmtpTransport.d.ts +12 -0
  54. package/transports/createSmtpTransport.js +101 -0
  55. package/transports/createSmtpTransport.js.map +1 -0
  56. package/types.d.ts +124 -34
  57. package/types.js.map +1 -1
  58. package/crud/mailer/onBeforeSend.d.ts +0 -7
  59. package/crud/mailer/onBeforeSend.js +0 -69
  60. package/crud/mailer/onBeforeSend.js.map +0 -1
  61. package/crud/mailer.crud.d.ts +0 -2
  62. package/crud/mailer.crud.js +0 -123
  63. package/crud/mailer.crud.js.map +0 -1
  64. package/mailers/createDummyMailer.d.ts +0 -5
  65. package/mailers/createDummyMailer.js.map +0 -1
  66. package/mailers/createSmtpMailer.d.ts +0 -13
  67. package/mailers/createSmtpMailer.js +0 -106
  68. package/mailers/createSmtpMailer.js.map +0 -1
@@ -0,0 +1 @@
1
+ export declare const createGraphQL: () => import("@webiny/handler-graphql").GraphQLSchemaPlugin<import("../types").MailerContext>[];
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createGraphQL = void 0;
7
+
8
+ var _settings = require("./settings");
9
+
10
+ const createGraphQL = () => {
11
+ return [(0, _settings.createSettingsGraphQL)()];
12
+ };
13
+
14
+ exports.createGraphQL = createGraphQL;
@@ -0,0 +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,+BAAA,GAAD,CAAP;AACH,CAFM"}
@@ -0,0 +1,3 @@
1
+ import { GraphQLSchemaPlugin } from "@webiny/handler-graphql";
2
+ import { MailerContext } from "../types";
3
+ export declare const createSettingsGraphQL: () => GraphQLSchemaPlugin<MailerContext>;
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createSettingsGraphQL = void 0;
7
+
8
+ var _handlerGraphql = require("@webiny/handler-graphql");
9
+
10
+ const emptyResolver = () => ({});
11
+
12
+ const createSettingsGraphQL = () => {
13
+ return new _handlerGraphql.GraphQLSchemaPlugin({
14
+ typeDefs: `
15
+ type MailerTransportSettingsError {
16
+ message: String!
17
+ code: String
18
+ data: JSON
19
+ }
20
+
21
+ type MailerTransportSettings {
22
+ host: String
23
+ port: Number
24
+ user: String
25
+ from: String
26
+ replyTo: String
27
+ }
28
+
29
+ type MailerTransportSettingsResponse {
30
+ data: MailerTransportSettings
31
+ error: MailerTransportSettingsError
32
+ }
33
+
34
+ type MailerQuery {
35
+ getSettings: MailerTransportSettingsResponse!
36
+ }
37
+
38
+ input MailerTransportSettingsInput {
39
+ host: String!
40
+ port: Number
41
+ user: String!
42
+ password: String
43
+ from: String!
44
+ replyTo: String
45
+ }
46
+
47
+ type MailerMutation {
48
+ saveSettings(data: MailerTransportSettingsInput!): MailerTransportSettingsResponse!
49
+ }
50
+
51
+ extend type Query {
52
+ mailer: MailerQuery
53
+ }
54
+ extend type Mutation {
55
+ mailer: MailerMutation
56
+ }
57
+ `,
58
+ resolvers: {
59
+ Query: {
60
+ mailer: emptyResolver
61
+ },
62
+ MailerQuery: {
63
+ getSettings: async (_, __, context) => {
64
+ try {
65
+ const settings = await context.mailer.getSettings();
66
+ /**
67
+ * We want to remove the password from the response, if it exists.
68
+ */
69
+
70
+ if (settings !== null && settings !== void 0 && settings.password) {
71
+ // @ts-ignore
72
+ delete settings.password;
73
+ }
74
+
75
+ return new _handlerGraphql.Response(settings);
76
+ } catch (ex) {
77
+ return new _handlerGraphql.ErrorResponse(ex);
78
+ }
79
+ }
80
+ },
81
+ Mutation: {
82
+ mailer: emptyResolver
83
+ },
84
+ MailerMutation: {
85
+ saveSettings: async (_, args, context) => {
86
+ try {
87
+ const settings = await context.mailer.saveSettings({
88
+ input: args.data
89
+ });
90
+ /**
91
+ * We want to remove the password from the response, if it exists.
92
+ */
93
+
94
+ if (settings !== null && settings !== void 0 && settings.password) {
95
+ // @ts-ignore
96
+ delete settings.password;
97
+ }
98
+
99
+ return new _handlerGraphql.Response(settings);
100
+ } catch (ex) {
101
+ return new _handlerGraphql.ErrorResponse(ex);
102
+ }
103
+ }
104
+ }
105
+ }
106
+ });
107
+ };
108
+
109
+ exports.createSettingsGraphQL = createSettingsGraphQL;
@@ -0,0 +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,EAAP,CAAtB;;AAEO,MAAMC,qBAAqB,GAAG,MAAM;EACvC,OAAO,IAAIC,mCAAJ,CAAuC;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,SA5CkD;IA6C1CC,SAAS,EAAE;MACPC,KAAK,EAAE;QACHC,MAAM,EAAEN;MADL,CADA;MAIPO,WAAW,EAAE;QACTC,WAAW,EAAE,OAAOC,CAAP,EAAUC,EAAV,EAAcC,OAAd,KAA0B;UACnC,IAAI;YACA,MAAMC,QAAQ,GAAG,MAAMD,OAAO,CAACL,MAAR,CAAeE,WAAf,EAAvB;YACA;AACxB;AACA;;YACwB,IAAII,QAAJ,aAAIA,QAAJ,eAAIA,QAAQ,CAAEC,QAAd,EAAwB;cACpB;cACA,OAAOD,QAAQ,CAACC,QAAhB;YACH;;YACD,OAAO,IAAIC,wBAAJ,CAAaF,QAAb,CAAP;UACH,CAVD,CAUE,OAAOG,EAAP,EAAW;YACT,OAAO,IAAIC,6BAAJ,CAAkBD,EAAlB,CAAP;UACH;QACJ;MAfQ,CAJN;MAqBPE,QAAQ,EAAE;QACNX,MAAM,EAAEN;MADF,CArBH;MAwBPkB,cAAc,EAAE;QACZC,YAAY,EAAE,OAAOV,CAAP,EAAUW,IAAV,EAAqBT,OAArB,KAAiC;UAC3C,IAAI;YACA,MAAMC,QAAQ,GAAG,MAAMD,OAAO,CAACL,MAAR,CAAea,YAAf,CAA4B;cAC/CE,KAAK,EAAED,IAAI,CAACE;YADmC,CAA5B,CAAvB;YAGA;AACxB;AACA;;YACwB,IAAIV,QAAJ,aAAIA,QAAJ,eAAIA,QAAQ,CAAEC,QAAd,EAAwB;cACpB;cACA,OAAOD,QAAQ,CAACC,QAAhB;YACH;;YACD,OAAO,IAAIC,wBAAJ,CAAaF,QAAb,CAAP;UACH,CAZD,CAYE,OAAOG,EAAP,EAAW;YACT,OAAO,IAAIC,6BAAJ,CAAkBD,EAAlB,CAAP;UACH;QACJ;MAjBW;IAxBT;EA7C+B,CAAvC,CAAP;AA0FH,CA3FM"}
package/index.d.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  import { PluginCollection } from "@webiny/plugins/types";
2
- import { MailerConfig } from "./types";
3
- import { createDummyMailer, DummyMailer } from "./mailers/createDummyMailer";
4
- import { createSmtpMailer, SmtpMailerConfig, SmtpMailer } from "./mailers/createSmtpMailer";
5
- export { createDummyMailer, createSmtpMailer };
6
- export type { SmtpMailerConfig, SmtpMailer, DummyMailer };
7
- export declare const createMailer: (config?: MailerConfig) => PluginCollection;
2
+ import { createDummyTransport, DummyTransport } from "./transports/createDummyTransport";
3
+ import { createSmtpTransport, SmtpTransport, SmtpTransportConfig } from "./transports/createSmtpTransport";
4
+ import { createTransport } from "./plugins";
5
+ export { createDummyTransport, createSmtpTransport, createTransport };
6
+ export type { SmtpTransport, SmtpTransportConfig, DummyTransport };
7
+ export declare const createMailerContext: () => PluginCollection;
8
+ export declare const createMailerGraphQL: () => import("@webiny/handler-graphql").GraphQLSchemaPlugin<import("./types").MailerContext>[];
package/index.js CHANGED
@@ -1,30 +1,89 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
3
5
  Object.defineProperty(exports, "__esModule", {
4
6
  value: true
5
7
  });
6
- Object.defineProperty(exports, "createDummyMailer", {
8
+ Object.defineProperty(exports, "createDummyTransport", {
9
+ enumerable: true,
10
+ get: function () {
11
+ return _createDummyTransport.createDummyTransport;
12
+ }
13
+ });
14
+ exports.createMailerGraphQL = exports.createMailerContext = void 0;
15
+ Object.defineProperty(exports, "createSmtpTransport", {
7
16
  enumerable: true,
8
17
  get: function () {
9
- return _createDummyMailer.createDummyMailer;
18
+ return _createSmtpTransport.createSmtpTransport;
10
19
  }
11
20
  });
12
- exports.createMailer = void 0;
13
- Object.defineProperty(exports, "createSmtpMailer", {
21
+ Object.defineProperty(exports, "createTransport", {
14
22
  enumerable: true,
15
23
  get: function () {
16
- return _createSmtpMailer.createSmtpMailer;
24
+ return _plugins.createTransport;
17
25
  }
18
26
  });
19
27
 
28
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
29
+
20
30
  var _context = require("./context");
21
31
 
22
- var _createDummyMailer = require("./mailers/createDummyMailer");
32
+ var _createDummyTransport = require("./transports/createDummyTransport");
33
+
34
+ var _createSmtpTransport = require("./transports/createSmtpTransport");
35
+
36
+ var _plugins = require("./plugins");
37
+
38
+ var _model = require("./crud/settings/model");
39
+
40
+ var _group = require("./crud/group");
41
+
42
+ var _graphql = require("./graphql");
43
+
44
+ const createMailerContext = () => {
45
+ const group = (0, _group.createGroup)();
46
+ return [group,
47
+ /**
48
+ * Groups and models to use via the CMS
49
+ */
50
+ (0, _model.createSettingsModel)(group),
51
+ /**
52
+ * If something is wrong with the smtp mailer, we will initialize the dummy one.
53
+ */
54
+ (0, _plugins.createTransport)(async () => {
55
+ const plugin = await (0, _createDummyTransport.createDummyTransport)();
56
+ plugin.name = "dummy-default";
57
+ return plugin;
58
+ }),
59
+ /**
60
+ * Smtp mailer goes into the plugins after the dummy one because plugins are loaded in reverse.
61
+ */
62
+ (0, _plugins.createTransport)(async ({
63
+ settings
64
+ }) => {
65
+ /**
66
+ * We need to map our settings to the required settings for the SMTP NodeMailer transport.
67
+ */
68
+ const config = (0, _objectSpread2.default)({}, settings || {});
69
+
70
+ if (settings) {
71
+ config.auth = {
72
+ user: settings.user,
73
+ pass: settings.password
74
+ };
75
+ }
76
+
77
+ const plugin = await (0, _createSmtpTransport.createSmtpTransport)(config);
78
+ plugin.name = "smtp-default";
79
+ return plugin;
80
+ }), (0, _context.createMailerContext)()];
81
+ };
23
82
 
24
- var _createSmtpMailer = require("./mailers/createSmtpMailer");
83
+ exports.createMailerContext = createMailerContext;
25
84
 
26
- const createMailer = config => {
27
- return [(0, _context.createMailerContext)(config)];
85
+ const createMailerGraphQL = () => {
86
+ return [...(0, _graphql.createGraphQL)()];
28
87
  };
29
88
 
30
- exports.createMailer = createMailer;
89
+ exports.createMailerGraphQL = createMailerGraphQL;
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["createMailer","config","createMailerContext"],"sources":["index.ts"],"sourcesContent":["import { PluginCollection } from \"@webiny/plugins/types\";\nimport { createMailerContext } from \"~/context\";\nimport { MailerConfig } from \"~/types\";\nimport { createDummyMailer, DummyMailer } from \"~/mailers/createDummyMailer\";\nimport { createSmtpMailer, SmtpMailerConfig, SmtpMailer } from \"~/mailers/createSmtpMailer\";\n\nexport { createDummyMailer, createSmtpMailer };\nexport type { SmtpMailerConfig, SmtpMailer, DummyMailer };\n\nexport const createMailer = (config?: MailerConfig): PluginCollection => {\n return [createMailerContext(config)];\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;AACA;;AAEA;;AACA;;AAKO,MAAMA,YAAY,GAAIC,MAAD,IAA6C;EACrE,OAAO,CAAC,IAAAC,4BAAA,EAAoBD,MAApB,CAAD,CAAP;AACH,CAFM"}
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 { PluginCollection } from \"@webiny/plugins/types\";\nimport { createMailerContext as createMailerContextPlugin } from \"~/context\";\nimport { createDummyTransport, DummyTransport } from \"~/transports/createDummyTransport\";\nimport {\n createSmtpTransport,\n SmtpTransport,\n SmtpTransportConfig\n} from \"~/transports/createSmtpTransport\";\nimport { createTransport } from \"~/plugins\";\nimport { createSettingsModel } from \"~/crud/settings/model\";\nimport { createGroup } from \"~/crud/group\";\nimport { createGraphQL } from \"~/graphql\";\n\nexport { createDummyTransport, createSmtpTransport, createTransport };\nexport type { SmtpTransport, SmtpTransportConfig, DummyTransport };\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 = \"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 = \"smtp-default\";\n return plugin;\n }),\n createMailerContextPlugin()\n ];\n};\n\nexport const createMailerGraphQL = () => {\n return [...createGraphQL()];\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;AACA;;AACA;;AAKA;;AACA;;AACA;;AACA;;AAKO,MAAMA,mBAAmB,GAAG,MAAwB;EACvD,MAAMC,KAAK,GAAG,IAAAC,kBAAA,GAAd;EACA,OAAO,CACHD,KADG;EAEH;AACR;AACA;EACQ,IAAAE,0BAAA,EAAoBF,KAApB,CALG;EAMH;AACR;AACA;EACQ,IAAAG,wBAAA,EAAgB,YAAY;IACxB,MAAMC,MAAM,GAAG,MAAM,IAAAC,0CAAA,GAArB;IACAD,MAAM,CAACE,IAAP,GAAc,eAAd;IACA,OAAOF,MAAP;EACH,CAJD,CATG;EAcH;AACR;AACA;EACQ,IAAAD,wBAAA,EAAgB,OAAO;IAAEI;EAAF,CAAP,KAAwB;IACpC;AACZ;AACA;IACY,MAAMC,MAA2B,mCACzBD,QAAQ,IAAI,EADa,CAAjC;;IAGA,IAAIA,QAAJ,EAAc;MACVC,MAAM,CAACC,IAAP,GAAc;QACVC,IAAI,EAAEH,QAAQ,CAACG,IADL;QAEVC,IAAI,EAAEJ,QAAQ,CAACK;MAFL,CAAd;IAIH;;IACD,MAAMR,MAAM,GAAG,MAAM,IAAAS,wCAAA,EAAoBL,MAApB,CAArB;IACAJ,MAAM,CAACE,IAAP,GAAc,cAAd;IACA,OAAOF,MAAP;EACH,CAhBD,CAjBG,EAkCH,IAAAU,4BAAA,GAlCG,CAAP;AAoCH,CAtCM;;;;AAwCA,MAAMC,mBAAmB,GAAG,MAAM;EACrC,OAAO,CAAC,GAAG,IAAAC,sBAAA,GAAJ,CAAP;AACH,CAFM"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-mailer",
3
- "version": "5.33.5",
3
+ "version": "5.34.0-beta.0",
4
4
  "main": "index.js",
5
5
  "repository": {
6
6
  "type": "git",
@@ -14,23 +14,41 @@
14
14
  "description": "The API to send e-mails.",
15
15
  "license": "MIT",
16
16
  "dependencies": {
17
- "@babel/runtime": "7.18.9",
18
- "@webiny/api": "5.33.5",
19
- "@webiny/error": "5.33.5",
20
- "@webiny/plugins": "5.33.5",
21
- "@webiny/pubsub": "5.33.5",
22
- "joi": "17.6.0",
23
- "nodemailer": "6.7.7"
17
+ "@babel/runtime": "7.19.0",
18
+ "@webiny/api": "5.34.0-beta.0",
19
+ "@webiny/api-headless-cms": "5.34.0-beta.0",
20
+ "@webiny/error": "5.34.0-beta.0",
21
+ "@webiny/handler-graphql": "5.34.0-beta.0",
22
+ "@webiny/plugins": "5.34.0-beta.0",
23
+ "@webiny/pubsub": "5.34.0-beta.0",
24
+ "crypto-js": "4.1.1",
25
+ "joi": "17.6.2",
26
+ "lodash": "4.17.21",
27
+ "nodemailer": "6.8.0"
24
28
  },
25
29
  "devDependencies": {
26
- "@babel/cli": "^7.16.0",
27
- "@babel/core": "^7.16.0",
28
- "@babel/preset-env": "^7.16.4",
29
- "@babel/preset-typescript": "^7.16.0",
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",
30
35
  "@types/nodemailer": "^6.4.4",
31
- "@webiny/cli": "^5.33.5",
32
- "@webiny/project-utils": "^5.33.5",
36
+ "@webiny/api-headless-cms-ddb": "^5.34.0-beta.0",
37
+ "@webiny/api-i18n": "^5.34.0-beta.0",
38
+ "@webiny/api-i18n-ddb": "^5.34.0-beta.0",
39
+ "@webiny/api-security": "^5.34.0-beta.0",
40
+ "@webiny/api-security-so-ddb": "^5.34.0-beta.0",
41
+ "@webiny/api-tenancy": "^5.34.0-beta.0",
42
+ "@webiny/api-tenancy-so-ddb": "^5.34.0-beta.0",
43
+ "@webiny/cli": "^5.34.0-beta.0",
44
+ "@webiny/db-dynamodb": "^5.34.0-beta.0",
45
+ "@webiny/handler": "^5.34.0-beta.0",
46
+ "@webiny/handler-aws": "^5.34.0-beta.0",
47
+ "@webiny/handler-db": "^5.34.0-beta.0",
48
+ "@webiny/project-utils": "^5.34.0-beta.0",
49
+ "graphql": "^15.7.2",
33
50
  "jest": "^28.1.0",
51
+ "jest-dynalite": "^3.6.1",
34
52
  "rimraf": "^3.0.2",
35
53
  "ttypescript": "^1.5.12",
36
54
  "typescript": "4.7.4"
@@ -43,5 +61,5 @@
43
61
  "build": "yarn webiny run build",
44
62
  "watch": "yarn webiny run watch"
45
63
  },
46
- "gitHead": "5063045cd2abdcdb360f97262f9b90b8858ec1df"
64
+ "gitHead": "9648454619a1bfb35040eb00f27a64ed75194e61"
47
65
  }
@@ -0,0 +1,17 @@
1
+ import { Plugin as BasePlugin } from "@webiny/plugins";
2
+ import { Transport, MailerContext, TransportSettings } from "../types";
3
+ interface TransportParams {
4
+ settings: TransportSettings | null;
5
+ context: MailerContext;
6
+ }
7
+ export interface CreateTransportCallable<T> {
8
+ (params: TransportParams): Promise<T>;
9
+ }
10
+ export declare class CreateTransportPlugin<T extends Transport = Transport> extends BasePlugin {
11
+ static type: string;
12
+ private readonly cb;
13
+ constructor(cb: CreateTransportCallable<T>);
14
+ buildMailerTransport(params: TransportParams): Promise<T>;
15
+ }
16
+ export declare const createTransport: <T extends Transport<any> = Transport<any>>(cb: CreateTransportCallable<T>) => CreateTransportPlugin<T>;
17
+ export {};
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.createTransport = exports.CreateTransportPlugin = void 0;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var _plugins = require("@webiny/plugins");
13
+
14
+ class CreateTransportPlugin extends _plugins.Plugin {
15
+ constructor(cb) {
16
+ super();
17
+ (0, _defineProperty2.default)(this, "cb", void 0);
18
+ this.cb = cb;
19
+ }
20
+
21
+ async buildMailerTransport(params) {
22
+ return this.cb(params);
23
+ }
24
+
25
+ }
26
+
27
+ exports.CreateTransportPlugin = CreateTransportPlugin;
28
+ (0, _defineProperty2.default)(CreateTransportPlugin, "type", "mailer.builder.plugin");
29
+
30
+ const createTransport = cb => {
31
+ return new CreateTransportPlugin(cb);
32
+ };
33
+
34
+ exports.createTransport = createTransport;
@@ -0,0 +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,qBAAN,SAAqEC,eAArE,CAAgF;EAK5EC,WAAW,CAACC,EAAD,EAAiC;IAC/C;IAD+C;IAE/C,KAAKA,EAAL,GAAUA,EAAV;EACH;;EAEgC,MAApBC,oBAAoB,CAACC,MAAD,EAAsC;IACnE,OAAO,KAAKF,EAAL,CAAQE,MAAR,CAAP;EACH;;AAZkF;;;8BAA1EL,qB,UACqB,uB;;AAc3B,MAAMM,eAAe,GACxBH,EAD2B,IAE1B;EACD,OAAO,IAAIH,qBAAJ,CAA6BG,EAA7B,CAAP;AACH,CAJM"}
@@ -0,0 +1 @@
1
+ export * from "./CreateTransportPlugin";
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+
7
+ var _CreateTransportPlugin = require("./CreateTransportPlugin");
8
+
9
+ Object.keys(_CreateTransportPlugin).forEach(function (key) {
10
+ if (key === "default" || key === "__esModule") return;
11
+ if (key in exports && exports[key] === _CreateTransportPlugin[key]) return;
12
+ Object.defineProperty(exports, key, {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _CreateTransportPlugin[key];
16
+ }
17
+ });
18
+ });
@@ -0,0 +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"}
@@ -0,0 +1,5 @@
1
+ import { Transport, TransportSendData } from "../types";
2
+ export interface DummyTransport extends Transport {
3
+ getAllSent: () => TransportSendData[];
4
+ }
5
+ export declare const createDummyTransport: () => DummyTransport;
@@ -3,11 +3,12 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.createDummyMailer = void 0;
6
+ exports.createDummyTransport = void 0;
7
7
 
8
- const createDummyMailer = () => {
8
+ const createDummyTransport = () => {
9
9
  const sent = [];
10
10
  return {
11
+ name: "dummy-default",
11
12
  send: async params => {
12
13
  sent.push(params);
13
14
  return {
@@ -21,4 +22,4 @@ const createDummyMailer = () => {
21
22
  };
22
23
  };
23
24
 
24
- exports.createDummyMailer = createDummyMailer;
25
+ exports.createDummyTransport = createDummyTransport;
@@ -0,0 +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: \"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,EAAlC;EAEA,OAAO;IACHC,IAAI,EAAE,eADH;IAEHC,IAAI,EAAE,MAAMC,MAAN,IAAgB;MAClBH,IAAI,CAACI,IAAL,CAAUD,MAAV;MACA,OAAO;QACHE,MAAM,EAAE,IADL;QAEHC,KAAK,EAAE;MAFJ,CAAP;IAIH,CARE;IASHC,UAAU,EAAE,MAAM;MACd,OAAOP,IAAP;IACH;EAXE,CAAP;AAaH,CAhBM"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Nodemailer docs
3
+ * https://nodemailer.com/about/
4
+ */
5
+ import { Transport } from "../types";
6
+ import { Transporter } from "nodemailer";
7
+ import SMTPTransport, { Options } from "nodemailer/lib/smtp-transport";
8
+ export declare type SmtpTransportConfig = Options;
9
+ export interface SmtpTransport extends Transport {
10
+ transporter: Transporter<SMTPTransport.SentMessageInfo>;
11
+ }
12
+ export declare const createSmtpTransport: (initialConfig?: Partial<SmtpTransportConfig> | null) => SmtpTransport;
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.createSmtpTransport = void 0;
9
+
10
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
+
12
+ var _error = _interopRequireDefault(require("@webiny/error"));
13
+
14
+ var _nodemailer = _interopRequireDefault(require("nodemailer"));
15
+
16
+ /**
17
+ * Nodemailer docs
18
+ * https://nodemailer.com/about/
19
+ */
20
+ const configDefaults = {
21
+ socketTimeout: 15000,
22
+ connectionTimeout: 15000,
23
+ greetingTimeout: 15000
24
+ };
25
+
26
+ const applyDefaults = initialConfig => {
27
+ return Object.keys(configDefaults).reduce((config, key) => {
28
+ const configKey = key;
29
+
30
+ if (config[configKey] === undefined || config[configKey] === null) {
31
+ // @ts-ignore
32
+ config[configKey] = configDefaults[configKey];
33
+ }
34
+
35
+ return config;
36
+ }, (0, _objectSpread2.default)({}, initialConfig));
37
+ };
38
+
39
+ const createSmtpTransport = initialConfig => {
40
+ if (!initialConfig || typeof initialConfig !== "object" || Object.keys(initialConfig).length === 0) {
41
+ throw new _error.default("There is no configuration for the SMTP transport.");
42
+ }
43
+
44
+ const config = applyDefaults(initialConfig);
45
+
46
+ const transporter = _nodemailer.default.createTransport(config);
47
+
48
+ return {
49
+ name: "smtp-default",
50
+ transporter,
51
+ send: async params => {
52
+ const {
53
+ replyTo,
54
+ text,
55
+ html,
56
+ to,
57
+ bcc,
58
+ cc,
59
+ from,
60
+ subject
61
+ } = params;
62
+
63
+ try {
64
+ const result = await transporter.sendMail({
65
+ replyTo,
66
+ bcc,
67
+ cc,
68
+ from,
69
+ text,
70
+ html,
71
+ to,
72
+ subject
73
+ });
74
+
75
+ if (result.messageId) {
76
+ return {
77
+ result: result.response,
78
+ error: null
79
+ };
80
+ }
81
+
82
+ throw new _error.default({
83
+ message: "nodemailer.sendMail does not have a messageId in the result. Something went wrong...",
84
+ code: "MAILER_ERROR",
85
+ data: (0, _objectSpread2.default)({}, result)
86
+ });
87
+ } catch (ex) {
88
+ return {
89
+ result: null,
90
+ error: {
91
+ message: ex.message,
92
+ code: ex.code,
93
+ data: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, params), ex.data)
94
+ }
95
+ };
96
+ }
97
+ }
98
+ };
99
+ };
100
+
101
+ exports.createSmtpTransport = createSmtpTransport;
@@ -0,0 +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,KADkC;EAEjDC,iBAAiB,EAAE,KAF8B;EAGjDC,eAAe,EAAE;AAHgC,CAArD;;AAMA,MAAMC,aAAa,GACfC,aADkB,IAEa;EAC/B,OAAOC,MAAM,CAACC,IAAP,CAAYP,cAAZ,EAA4BQ,MAA5B,CACH,CAACC,MAAD,EAASC,GAAT,KAAiB;IACb,MAAMC,SAAS,GAAGD,GAAlB;;IACA,IAAID,MAAM,CAACE,SAAD,CAAN,KAAsBC,SAAtB,IAAmCH,MAAM,CAACE,SAAD,CAAN,KAAsB,IAA7D,EAAmE;MAC/D;MACAF,MAAM,CAACE,SAAD,CAAN,GAAoBX,cAAc,CAACW,SAAD,CAAlC;IACH;;IAED,OAAOF,MAAP;EACH,CATE,kCAUEJ,aAVF,EAAP;AAYH,CAfD;;AAiBO,MAAMQ,mBAAmB,GAC5BR,aAD+B,IAEf;EAChB,IACI,CAACA,aAAD,IACA,OAAOA,aAAP,KAAyB,QADzB,IAEAC,MAAM,CAACC,IAAP,CAAYF,aAAZ,EAA2BS,MAA3B,KAAsC,CAH1C,EAIE;IACE,MAAM,IAAIC,cAAJ,CAAgB,mDAAhB,CAAN;EACH;;EAED,MAAMN,MAAM,GAAGL,aAAa,CAACC,aAAD,CAA5B;;EAEA,MAAMW,WAAW,GAAGC,mBAAA,CAAWC,eAAX,CAA2BT,MAA3B,CAApB;;EAEA,OAAO;IACHU,IAAI,EAAE,cADH;IAEHH,WAFG;IAGHI,IAAI,EAAE,MAAMC,MAAN,IAAgB;MAClB,MAAM;QAAEC,OAAF;QAAWC,IAAX;QAAiBC,IAAjB;QAAuBC,EAAvB;QAA2BC,GAA3B;QAAgCC,EAAhC;QAAoCC,IAApC;QAA0CC;MAA1C,IAAsDR,MAA5D;;MAEA,IAAI;QACA,MAAMS,MAAM,GAAG,MAAMd,WAAW,CAACe,QAAZ,CAAqB;UACtCT,OADsC;UAEtCI,GAFsC;UAGtCC,EAHsC;UAItCC,IAJsC;UAKtCL,IALsC;UAMtCC,IANsC;UAOtCC,EAPsC;UAQtCI;QARsC,CAArB,CAArB;;QAUA,IAAIC,MAAM,CAACE,SAAX,EAAsB;UAClB,OAAO;YACHF,MAAM,EAAEA,MAAM,CAACG,QADZ;YAEHC,KAAK,EAAE;UAFJ,CAAP;QAIH;;QAED,MAAM,IAAInB,cAAJ,CAAgB;UAClBoB,OAAO,EACH,sFAFc;UAGlBC,IAAI,EAAE,cAHY;UAIlBC,IAAI,kCACGP,MADH;QAJc,CAAhB,CAAN;MAQH,CA1BD,CA0BE,OAAOQ,EAAP,EAAW;QACT,OAAO;UACHR,MAAM,EAAE,IADL;UAEHI,KAAK,EAAE;YACHC,OAAO,EAAEG,EAAE,CAACH,OADT;YAEHC,IAAI,EAAEE,EAAE,CAACF,IAFN;YAGHC,IAAI,8DACGhB,MADH,GAEGiB,EAAE,CAACD,IAFN;UAHD;QAFJ,CAAP;MAWH;IACJ;EA7CE,CAAP;AA+CH,CA9DM"}