@webiny/api-mailer 6.3.0 → 6.4.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 (82) hide show
  1. package/constants.js +2 -1
  2. package/constants.js.map +1 -1
  3. package/domain/CodeMailerSettings/abstractions.js +2 -1
  4. package/domain/CodeMailerSettings/abstractions.js.map +1 -1
  5. package/domain/MailTransport/abstractions.js +4 -3
  6. package/domain/MailTransport/abstractions.js.map +1 -1
  7. package/domain/MailerService/abstractions.js +2 -1
  8. package/domain/MailerService/abstractions.js.map +1 -1
  9. package/domain/MailerService/errors.js +22 -24
  10. package/domain/MailerService/errors.js.map +1 -1
  11. package/domain/errors.js +40 -44
  12. package/domain/errors.js.map +1 -1
  13. package/exports/api/mailer.js +3 -5
  14. package/features/CodeMailerSettings/CodeMailerSettingsImpl.js +14 -13
  15. package/features/CodeMailerSettings/CodeMailerSettingsImpl.js.map +1 -1
  16. package/features/CodeMailerSettings/feature.js +6 -5
  17. package/features/CodeMailerSettings/feature.js.map +1 -1
  18. package/features/DummyTransport/DummyMailTransport.js +11 -9
  19. package/features/DummyTransport/DummyMailTransport.js.map +1 -1
  20. package/features/DummyTransport/DummyMailTransportFactory.js +10 -7
  21. package/features/DummyTransport/DummyMailTransportFactory.js.map +1 -1
  22. package/features/DummyTransport/feature.js +6 -5
  23. package/features/DummyTransport/feature.js.map +1 -1
  24. package/features/GetSettings/GetSettingsRepository.js +41 -45
  25. package/features/GetSettings/GetSettingsRepository.js.map +1 -1
  26. package/features/GetSettings/GetSettingsUseCase.js +13 -10
  27. package/features/GetSettings/GetSettingsUseCase.js.map +1 -1
  28. package/features/GetSettings/abstractions.js +3 -2
  29. package/features/GetSettings/abstractions.js.map +1 -1
  30. package/features/GetSettings/feature.js +7 -6
  31. package/features/GetSettings/feature.js.map +1 -1
  32. package/features/GetSettings/index.js +1 -3
  33. package/features/MailerService/ActiveTransport.js +18 -14
  34. package/features/MailerService/ActiveTransport.js.map +1 -1
  35. package/features/MailerService/MailerService.js +38 -42
  36. package/features/MailerService/MailerService.js.map +1 -1
  37. package/features/MailerService/feature.js +7 -6
  38. package/features/MailerService/feature.js.map +1 -1
  39. package/features/SaveSettings/SaveSettingsRepository.js +29 -45
  40. package/features/SaveSettings/SaveSettingsRepository.js.map +1 -1
  41. package/features/SaveSettings/SaveSettingsUseCase.js +38 -56
  42. package/features/SaveSettings/SaveSettingsUseCase.js.map +1 -1
  43. package/features/SaveSettings/abstractions.js +5 -17
  44. package/features/SaveSettings/abstractions.js.map +1 -1
  45. package/features/SaveSettings/events.js +16 -11
  46. package/features/SaveSettings/events.js.map +1 -1
  47. package/features/SaveSettings/feature.js +7 -6
  48. package/features/SaveSettings/feature.js.map +1 -1
  49. package/features/SaveSettings/index.js +1 -3
  50. package/features/SaveSettings/validation.d.ts +1 -1
  51. package/features/SaveSettings/validation.js +11 -14
  52. package/features/SaveSettings/validation.js.map +1 -1
  53. package/features/SendMail/SendMailUseCase.js +40 -47
  54. package/features/SendMail/SendMailUseCase.js.map +1 -1
  55. package/features/SendMail/abstractions.js +5 -8
  56. package/features/SendMail/abstractions.js.map +1 -1
  57. package/features/SendMail/events.js +23 -16
  58. package/features/SendMail/events.js.map +1 -1
  59. package/features/SendMail/feature.js +6 -5
  60. package/features/SendMail/feature.js.map +1 -1
  61. package/features/SendMail/index.js +1 -3
  62. package/features/SmtpTransport/SmtpConfig.js +20 -24
  63. package/features/SmtpTransport/SmtpConfig.js.map +1 -1
  64. package/features/SmtpTransport/SmtpMailTransport.js +47 -61
  65. package/features/SmtpTransport/SmtpMailTransport.js.map +1 -1
  66. package/features/SmtpTransport/SmtpMailTransportFactory.js +10 -7
  67. package/features/SmtpTransport/SmtpMailTransportFactory.js.map +1 -1
  68. package/features/SmtpTransport/feature.js +6 -5
  69. package/features/SmtpTransport/feature.js.map +1 -1
  70. package/graphql/settings.js +54 -74
  71. package/graphql/settings.js.map +1 -1
  72. package/index.js +11 -15
  73. package/index.js.map +1 -1
  74. package/package.json +17 -17
  75. package/types.js +0 -3
  76. package/utils/isMailboxAddress.js +3 -10
  77. package/utils/isMailboxAddress.js.map +1 -1
  78. package/exports/api/mailer.js.map +0 -1
  79. package/features/GetSettings/index.js.map +0 -1
  80. package/features/SaveSettings/index.js.map +0 -1
  81. package/features/SendMail/index.js.map +0 -1
  82. package/types.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["nodemailer","SmtpMailTransport","name","constructor","config","transporter","createTransport","send","params","replyTo","text","html","to","bcc","cc","from","subject","result","sendMail","messageId","response","error","message","code","data","ex","command","responseCode"],"sources":["SmtpMailTransport.ts"],"sourcesContent":["import type { Transporter } from \"nodemailer\";\nimport nodemailer from \"nodemailer\";\nimport type SMTPTransport from \"nodemailer/lib/smtp-transport\";\nimport { MailTransport } from \"~/domain/MailTransport/abstractions.js\";\n\nexport class SmtpMailTransport implements MailTransport.Interface {\n public readonly name = \"Mailer/SmtpTransport\";\n private readonly transporter: Transporter<SMTPTransport.SentMessageInfo>;\n\n constructor(config: SMTPTransport.Options) {\n this.transporter = nodemailer.createTransport(config);\n }\n\n async send(params: MailTransport.SendParams) {\n const { replyTo, text, html, to, bcc, cc, from, subject } = params;\n\n try {\n const result = await this.transporter.sendMail({\n replyTo,\n bcc,\n cc,\n from,\n text,\n html,\n to,\n subject\n });\n\n if (result.messageId) {\n return {\n result: result.response,\n error: null\n };\n }\n\n return {\n result: null,\n error: {\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 };\n } catch (ex: any) {\n // Allow-list specific nodemailer/SMTP error fields. Spreading `ex`\n // or `ex.data` blindly would risk surfacing the transporter's auth\n // config (or anything else a future nodemailer version stamps onto\n // its errors) in error responses.\n return {\n result: null,\n error: {\n message: ex.message,\n code: ex.code,\n data: {\n ...params,\n command: ex.command,\n response: ex.response,\n responseCode: ex.responseCode\n }\n }\n };\n }\n }\n}\n"],"mappings":"AACA,OAAOA,UAAU,MAAM,YAAY;AAInC,OAAO,MAAMC,iBAAiB,CAAoC;EAC9CC,IAAI,GAAG,sBAAsB;EAG7CC,WAAWA,CAACC,MAA6B,EAAE;IACvC,IAAI,CAACC,WAAW,GAAGL,UAAU,CAACM,eAAe,CAACF,MAAM,CAAC;EACzD;EAEA,MAAMG,IAAIA,CAACC,MAAgC,EAAE;IACzC,MAAM;MAAEC,OAAO;MAAEC,IAAI;MAAEC,IAAI;MAAEC,EAAE;MAAEC,GAAG;MAAEC,EAAE;MAAEC,IAAI;MAAEC;IAAQ,CAAC,GAAGR,MAAM;IAElE,IAAI;MACA,MAAMS,MAAM,GAAG,MAAM,IAAI,CAACZ,WAAW,CAACa,QAAQ,CAAC;QAC3CT,OAAO;QACPI,GAAG;QACHC,EAAE;QACFC,IAAI;QACJL,IAAI;QACJC,IAAI;QACJC,EAAE;QACFI;MACJ,CAAC,CAAC;MAEF,IAAIC,MAAM,CAACE,SAAS,EAAE;QAClB,OAAO;UACHF,MAAM,EAAEA,MAAM,CAACG,QAAQ;UACvBC,KAAK,EAAE;QACX,CAAC;MACL;MAEA,OAAO;QACHJ,MAAM,EAAE,IAAI;QACZI,KAAK,EAAE;UACHC,OAAO,EACH,sFAAsF;UAC1FC,IAAI,EAAE,cAAc;UACpBC,IAAI,EAAE;YACF,GAAGP;UACP;QACJ;MACJ,CAAC;IACL,CAAC,CAAC,OAAOQ,EAAO,EAAE;MACd;MACA;MACA;MACA;MACA,OAAO;QACHR,MAAM,EAAE,IAAI;QACZI,KAAK,EAAE;UACHC,OAAO,EAAEG,EAAE,CAACH,OAAO;UACnBC,IAAI,EAAEE,EAAE,CAACF,IAAI;UACbC,IAAI,EAAE;YACF,GAAGhB,MAAM;YACTkB,OAAO,EAAED,EAAE,CAACC,OAAO;YACnBN,QAAQ,EAAEK,EAAE,CAACL,QAAQ;YACrBO,YAAY,EAAEF,EAAE,CAACE;UACrB;QACJ;MACJ,CAAC;IACL;EACJ;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"features/SmtpTransport/SmtpMailTransport.js","sources":["../../../src/features/SmtpTransport/SmtpMailTransport.ts"],"sourcesContent":["import type { Transporter } from \"nodemailer\";\nimport nodemailer from \"nodemailer\";\nimport type SMTPTransport from \"nodemailer/lib/smtp-transport\";\nimport { MailTransport } from \"~/domain/MailTransport/abstractions.js\";\n\nexport class SmtpMailTransport implements MailTransport.Interface {\n public readonly name = \"Mailer/SmtpTransport\";\n private readonly transporter: Transporter<SMTPTransport.SentMessageInfo>;\n\n constructor(config: SMTPTransport.Options) {\n this.transporter = nodemailer.createTransport(config);\n }\n\n async send(params: MailTransport.SendParams) {\n const { replyTo, text, html, to, bcc, cc, from, subject } = params;\n\n try {\n const result = await this.transporter.sendMail({\n replyTo,\n bcc,\n cc,\n from,\n text,\n html,\n to,\n subject\n });\n\n if (result.messageId) {\n return {\n result: result.response,\n error: null\n };\n }\n\n return {\n result: null,\n error: {\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 };\n } catch (ex: any) {\n // Allow-list specific nodemailer/SMTP error fields. Spreading `ex`\n // or `ex.data` blindly would risk surfacing the transporter's auth\n // config (or anything else a future nodemailer version stamps onto\n // its errors) in error responses.\n return {\n result: null,\n error: {\n message: ex.message,\n code: ex.code,\n data: {\n ...params,\n command: ex.command,\n response: ex.response,\n responseCode: ex.responseCode\n }\n }\n };\n }\n }\n}\n"],"names":["SmtpMailTransport","config","nodemailer","params","replyTo","text","html","to","bcc","cc","from","subject","result","ex"],"mappings":";AAKO,MAAMA;IAIT,YAAYC,MAA6B,CAAE;aAH3B,IAAI,GAAG;QAInB,IAAI,CAAC,WAAW,GAAGC,WAAW,eAAe,CAACD;IAClD;IAEA,MAAM,KAAKE,MAAgC,EAAE;QACzC,MAAM,EAAEC,OAAO,EAAEC,IAAI,EAAEC,IAAI,EAAEC,EAAE,EAAEC,GAAG,EAAEC,EAAE,EAAEC,IAAI,EAAEC,OAAO,EAAE,GAAGR;QAE5D,IAAI;YACA,MAAMS,SAAS,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;gBAC3CR;gBACAI;gBACAC;gBACAC;gBACAL;gBACAC;gBACAC;gBACAI;YACJ;YAEA,IAAIC,OAAO,SAAS,EAChB,OAAO;gBACH,QAAQA,OAAO,QAAQ;gBACvB,OAAO;YACX;YAGJ,OAAO;gBACH,QAAQ;gBACR,OAAO;oBACH,SACI;oBACJ,MAAM;oBACN,MAAM;wBACF,GAAGA,MAAM;oBACb;gBACJ;YACJ;QACJ,EAAE,OAAOC,IAAS;YAKd,OAAO;gBACH,QAAQ;gBACR,OAAO;oBACH,SAASA,GAAG,OAAO;oBACnB,MAAMA,GAAG,IAAI;oBACb,MAAM;wBACF,GAAGV,MAAM;wBACT,SAASU,GAAG,OAAO;wBACnB,UAAUA,GAAG,QAAQ;wBACrB,cAAcA,GAAG,YAAY;oBACjC;gBACJ;YACJ;QACJ;IACJ;AACJ"}
@@ -2,14 +2,17 @@ import { MailTransportFactory } from "../../domain/MailTransport/abstractions.js
2
2
  import { SmtpMailTransport } from "./SmtpMailTransport.js";
3
3
  import { SmtpConfig } from "./SmtpConfig.js";
4
4
  class SmtpMailTransportFactoryImpl {
5
- name = "Mailer/SmtpTransport";
6
- async createTransport(settings) {
7
- return new SmtpMailTransport(SmtpConfig.fromTransportSettings(settings));
8
- }
5
+ async createTransport(settings) {
6
+ return new SmtpMailTransport(SmtpConfig.fromTransportSettings(settings));
7
+ }
8
+ constructor(){
9
+ this.name = "Mailer/SmtpTransport";
10
+ }
9
11
  }
10
- export const SmtpMailTransportFactory = MailTransportFactory.createImplementation({
11
- implementation: SmtpMailTransportFactoryImpl,
12
- dependencies: []
12
+ const SmtpMailTransportFactory = MailTransportFactory.createImplementation({
13
+ implementation: SmtpMailTransportFactoryImpl,
14
+ dependencies: []
13
15
  });
16
+ export { SmtpMailTransportFactory };
14
17
 
15
18
  //# sourceMappingURL=SmtpMailTransportFactory.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["MailTransportFactory","SmtpMailTransport","SmtpConfig","SmtpMailTransportFactoryImpl","name","createTransport","settings","fromTransportSettings","SmtpMailTransportFactory","createImplementation","implementation","dependencies"],"sources":["SmtpMailTransportFactory.ts"],"sourcesContent":["import { MailTransportFactory } from \"~/domain/MailTransport/abstractions.js\";\nimport type { TransportSettings } from \"~/types.js\";\nimport { SmtpMailTransport } from \"~/features/SmtpTransport/SmtpMailTransport.js\";\nimport { SmtpConfig } from \"~/features/SmtpTransport/SmtpConfig.js\";\n\nclass SmtpMailTransportFactoryImpl implements MailTransportFactory.Interface {\n public readonly name = \"Mailer/SmtpTransport\";\n\n async createTransport(settings: TransportSettings): MailTransportFactory.Return {\n return new SmtpMailTransport(SmtpConfig.fromTransportSettings(settings));\n }\n}\n\nexport const SmtpMailTransportFactory = MailTransportFactory.createImplementation({\n implementation: SmtpMailTransportFactoryImpl,\n dependencies: []\n});\n"],"mappings":"AAAA,SAASA,oBAAoB;AAE7B,SAASC,iBAAiB;AAC1B,SAASC,UAAU;AAEnB,MAAMC,4BAA4B,CAA2C;EACzDC,IAAI,GAAG,sBAAsB;EAE7C,MAAMC,eAAeA,CAACC,QAA2B,EAA+B;IAC5E,OAAO,IAAIL,iBAAiB,CAACC,UAAU,CAACK,qBAAqB,CAACD,QAAQ,CAAC,CAAC;EAC5E;AACJ;AAEA,OAAO,MAAME,wBAAwB,GAAGR,oBAAoB,CAACS,oBAAoB,CAAC;EAC9EC,cAAc,EAAEP,4BAA4B;EAC5CQ,YAAY,EAAE;AAClB,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/SmtpTransport/SmtpMailTransportFactory.js","sources":["../../../src/features/SmtpTransport/SmtpMailTransportFactory.ts"],"sourcesContent":["import { MailTransportFactory } from \"~/domain/MailTransport/abstractions.js\";\nimport type { TransportSettings } from \"~/types.js\";\nimport { SmtpMailTransport } from \"~/features/SmtpTransport/SmtpMailTransport.js\";\nimport { SmtpConfig } from \"~/features/SmtpTransport/SmtpConfig.js\";\n\nclass SmtpMailTransportFactoryImpl implements MailTransportFactory.Interface {\n public readonly name = \"Mailer/SmtpTransport\";\n\n async createTransport(settings: TransportSettings): MailTransportFactory.Return {\n return new SmtpMailTransport(SmtpConfig.fromTransportSettings(settings));\n }\n}\n\nexport const SmtpMailTransportFactory = MailTransportFactory.createImplementation({\n implementation: SmtpMailTransportFactoryImpl,\n dependencies: []\n});\n"],"names":["SmtpMailTransportFactoryImpl","settings","SmtpMailTransport","SmtpConfig","SmtpMailTransportFactory","MailTransportFactory"],"mappings":";;;AAKA,MAAMA;IAGF,MAAM,gBAAgBC,QAA2B,EAA+B;QAC5E,OAAO,IAAIC,kBAAkBC,WAAW,qBAAqB,CAACF;IAClE;;aAJgB,IAAI,GAAG;;AAK3B;AAEO,MAAMG,2BAA2BC,qBAAqB,oBAAoB,CAAC;IAC9E,gBAAgBL;IAChB,cAAc,EAAE;AACpB"}
@@ -1,10 +1,11 @@
1
1
  import { createFeature } from "@webiny/feature/api";
2
2
  import { SmtpMailTransportFactory } from "./SmtpMailTransportFactory.js";
3
- export const SmtpTransportFeature = createFeature({
4
- name: "SmtpTransport",
5
- register(container) {
6
- container.register(SmtpMailTransportFactory).inSingletonScope();
7
- }
3
+ const SmtpTransportFeature = createFeature({
4
+ name: "SmtpTransport",
5
+ register (container) {
6
+ container.register(SmtpMailTransportFactory).inSingletonScope();
7
+ }
8
8
  });
9
+ export { SmtpTransportFeature };
9
10
 
10
11
  //# sourceMappingURL=feature.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createFeature","SmtpMailTransportFactory","SmtpTransportFeature","name","register","container","inSingletonScope"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { SmtpMailTransportFactory } from \"./SmtpMailTransportFactory.js\";\n\nexport const SmtpTransportFeature = createFeature({\n name: \"SmtpTransport\",\n register(container) {\n container.register(SmtpMailTransportFactory).inSingletonScope();\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,wBAAwB;AAEjC,OAAO,MAAMC,oBAAoB,GAAGF,aAAa,CAAC;EAC9CG,IAAI,EAAE,eAAe;EACrBC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACH,wBAAwB,CAAC,CAACK,gBAAgB,CAAC,CAAC;EACnE;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/SmtpTransport/feature.js","sources":["../../../src/features/SmtpTransport/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { SmtpMailTransportFactory } from \"./SmtpMailTransportFactory.js\";\n\nexport const SmtpTransportFeature = createFeature({\n name: \"SmtpTransport\",\n register(container) {\n container.register(SmtpMailTransportFactory).inSingletonScope();\n }\n});\n"],"names":["SmtpTransportFeature","createFeature","container","SmtpMailTransportFactory"],"mappings":";;AAGO,MAAMA,uBAAuBC,cAAc;IAC9C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,0BAA0B,gBAAgB;IACjE;AACJ"}
@@ -2,30 +2,17 @@ import { ErrorResponse, GraphQLSchemaPlugin } from "@webiny/handler-graphql";
2
2
  import { GetSettingsUseCase } from "../features/GetSettings/abstractions.js";
3
3
  import { SaveSettingsUseCase } from "../features/SaveSettings/abstractions.js";
4
4
  import { ActiveTransport } from "../domain/MailTransport/abstractions.js";
5
- const emptyResolver = () => ({});
6
-
7
- // Strip `password` before the settings leave the server and tack on `source`
8
- // so the admin UI can branch on code-vs-storage. Accepts both the full
9
- // `TransportSettings` (from getSettings) and the already-stripped
10
- // `Omit<TransportSettings, "password">` (from saveSettings) — defense in depth
11
- // even when the input type carries no password to begin with.
12
- const toPublicSettings = (settings, source) => {
13
- if (!settings) {
14
- return null;
15
- }
16
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
17
- const {
18
- password: _password,
19
- ...publicSettings
20
- } = settings;
21
- return {
22
- ...publicSettings,
23
- source
24
- };
5
+ const emptyResolver = ()=>({});
6
+ const toPublicSettings = (settings, source)=>{
7
+ if (!settings) return null;
8
+ const { password: _password, ...publicSettings } = settings;
9
+ return {
10
+ ...publicSettings,
11
+ source
12
+ };
25
13
  };
26
- export const createSettingsGraphQL = () => {
27
- return new GraphQLSchemaPlugin({
28
- typeDefs: `
14
+ const createSettingsGraphQL = ()=>new GraphQLSchemaPlugin({
15
+ typeDefs: `
29
16
  type MailerTransportSettingsError {
30
17
  message: String!
31
18
  code: String
@@ -70,58 +57,51 @@ export const createSettingsGraphQL = () => {
70
57
  mailer: MailerMutation
71
58
  }
72
59
  `,
73
- resolvers: {
74
- Query: {
75
- mailer: emptyResolver
76
- },
77
- MailerQuery: {
78
- getSettings: async (_, __, context) => {
79
- try {
80
- const activeTransport = context.container.resolve(ActiveTransport);
81
- const transportName = activeTransport.name();
82
- if (!transportName) {
83
- return {
84
- data: null,
85
- error: null
86
- };
87
- }
88
- const getSettings = context.container.resolve(GetSettingsUseCase);
89
- const result = await getSettings.execute(transportName);
90
- const {
91
- settings,
92
- source
93
- } = result.value;
94
- return {
95
- data: toPublicSettings(settings, source),
96
- error: null
97
- };
98
- } catch (ex) {
99
- return new ErrorResponse(ex);
100
- }
101
- }
102
- },
103
- Mutation: {
104
- mailer: emptyResolver
105
- },
106
- MailerMutation: {
107
- saveSettings: async (_, args, context) => {
108
- try {
109
- const saveSettings = context.container.resolve(SaveSettingsUseCase);
110
- const result = await saveSettings.execute(args.data);
111
- if (result.isFail()) {
112
- return new ErrorResponse(result.error);
60
+ resolvers: {
61
+ Query: {
62
+ mailer: emptyResolver
63
+ },
64
+ MailerQuery: {
65
+ getSettings: async (_, __, context)=>{
66
+ try {
67
+ const activeTransport = context.container.resolve(ActiveTransport);
68
+ const transportName = activeTransport.name();
69
+ if (!transportName) return {
70
+ data: null,
71
+ error: null
72
+ };
73
+ const getSettings = context.container.resolve(GetSettingsUseCase);
74
+ const result = await getSettings.execute(transportName);
75
+ const { settings, source } = result.value;
76
+ return {
77
+ data: toPublicSettings(settings, source),
78
+ error: null
79
+ };
80
+ } catch (ex) {
81
+ return new ErrorResponse(ex);
82
+ }
83
+ }
84
+ },
85
+ Mutation: {
86
+ mailer: emptyResolver
87
+ },
88
+ MailerMutation: {
89
+ saveSettings: async (_, args, context)=>{
90
+ try {
91
+ const saveSettings = context.container.resolve(SaveSettingsUseCase);
92
+ const result = await saveSettings.execute(args.data);
93
+ if (result.isFail()) return new ErrorResponse(result.error);
94
+ return {
95
+ data: toPublicSettings(result.value, "storage"),
96
+ error: null
97
+ };
98
+ } catch (ex) {
99
+ return new ErrorResponse(ex);
100
+ }
101
+ }
113
102
  }
114
- return {
115
- data: toPublicSettings(result.value, "storage"),
116
- error: null
117
- };
118
- } catch (ex) {
119
- return new ErrorResponse(ex);
120
- }
121
103
  }
122
- }
123
- }
124
- });
125
- };
104
+ });
105
+ export { createSettingsGraphQL };
126
106
 
127
107
  //# sourceMappingURL=settings.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["ErrorResponse","GraphQLSchemaPlugin","GetSettingsUseCase","SaveSettingsUseCase","ActiveTransport","emptyResolver","toPublicSettings","settings","source","password","_password","publicSettings","createSettingsGraphQL","typeDefs","resolvers","Query","mailer","MailerQuery","getSettings","_","__","context","activeTransport","container","resolve","transportName","name","data","error","result","execute","value","ex","Mutation","MailerMutation","saveSettings","args","isFail"],"sources":["settings.ts"],"sourcesContent":["import { ErrorResponse, GraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { GetSettingsUseCase } from \"~/features/GetSettings/abstractions.js\";\nimport { SaveSettingsUseCase } from \"~/features/SaveSettings/abstractions.js\";\nimport { ActiveTransport } from \"~/domain/MailTransport/abstractions.js\";\nimport type { MailerSettingsSource } from \"~/features/GetSettings/abstractions.js\";\nimport type { Context } from \"@webiny/api/types.js\";\nimport type { TransportSettings } from \"~/types.js\";\n\nconst emptyResolver = () => ({});\n\n// Strip `password` before the settings leave the server and tack on `source`\n// so the admin UI can branch on code-vs-storage. Accepts both the full\n// `TransportSettings` (from getSettings) and the already-stripped\n// `Omit<TransportSettings, \"password\">` (from saveSettings) — defense in depth\n// even when the input type carries no password to begin with.\nconst toPublicSettings = (\n settings: TransportSettings | Omit<TransportSettings, \"password\"> | null,\n source: MailerSettingsSource\n): (Omit<TransportSettings, \"password\"> & { source: MailerSettingsSource }) | null => {\n if (!settings) {\n return null;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { password: _password, ...publicSettings } = settings as TransportSettings;\n return { ...publicSettings, source };\n};\n\nexport const createSettingsGraphQL = () => {\n return new GraphQLSchemaPlugin<Context>({\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 source: 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 activeTransport = context.container.resolve(ActiveTransport);\n const transportName = activeTransport.name();\n\n if (!transportName) {\n return { data: null, error: null };\n }\n\n const getSettings = context.container.resolve(GetSettingsUseCase);\n const result = await getSettings.execute(transportName);\n\n const { settings, source } = result.value;\n\n return {\n data: toPublicSettings(settings, source),\n error: null\n };\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 saveSettings = context.container.resolve(SaveSettingsUseCase);\n const result = await saveSettings.execute(args.data);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return {\n data: toPublicSettings(result.value, \"storage\"),\n error: null\n };\n } catch (ex) {\n return new ErrorResponse(ex);\n }\n }\n }\n }\n });\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"graphql/settings.js","sources":["../../src/graphql/settings.ts"],"sourcesContent":["import { ErrorResponse, GraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { GetSettingsUseCase } from \"~/features/GetSettings/abstractions.js\";\nimport { SaveSettingsUseCase } from \"~/features/SaveSettings/abstractions.js\";\nimport { ActiveTransport } from \"~/domain/MailTransport/abstractions.js\";\nimport type { MailerSettingsSource } from \"~/features/GetSettings/abstractions.js\";\nimport type { Context } from \"@webiny/api/types.js\";\nimport type { TransportSettings } from \"~/types.js\";\n\nconst emptyResolver = () => ({});\n\n// Strip `password` before the settings leave the server and tack on `source`\n// so the admin UI can branch on code-vs-storage. Accepts both the full\n// `TransportSettings` (from getSettings) and the already-stripped\n// `Omit<TransportSettings, \"password\">` (from saveSettings) — defense in depth\n// even when the input type carries no password to begin with.\nconst toPublicSettings = (\n settings: TransportSettings | Omit<TransportSettings, \"password\"> | null,\n source: MailerSettingsSource\n): (Omit<TransportSettings, \"password\"> & { source: MailerSettingsSource }) | null => {\n if (!settings) {\n return null;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { password: _password, ...publicSettings } = settings as TransportSettings;\n return { ...publicSettings, source };\n};\n\nexport const createSettingsGraphQL = () => {\n return new GraphQLSchemaPlugin<Context>({\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 source: 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 activeTransport = context.container.resolve(ActiveTransport);\n const transportName = activeTransport.name();\n\n if (!transportName) {\n return { data: null, error: null };\n }\n\n const getSettings = context.container.resolve(GetSettingsUseCase);\n const result = await getSettings.execute(transportName);\n\n const { settings, source } = result.value;\n\n return {\n data: toPublicSettings(settings, source),\n error: null\n };\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 saveSettings = context.container.resolve(SaveSettingsUseCase);\n const result = await saveSettings.execute(args.data);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return {\n data: toPublicSettings(result.value, \"storage\"),\n error: null\n };\n } catch (ex) {\n return new ErrorResponse(ex);\n }\n }\n }\n }\n });\n};\n"],"names":["emptyResolver","toPublicSettings","settings","source","_password","publicSettings","createSettingsGraphQL","GraphQLSchemaPlugin","_","__","context","activeTransport","ActiveTransport","transportName","getSettings","GetSettingsUseCase","result","ex","ErrorResponse","args","saveSettings","SaveSettingsUseCase"],"mappings":";;;;AAQA,MAAMA,gBAAgB,IAAO,EAAC;AAO9B,MAAMC,mBAAmB,CACrBC,UACAC;IAEA,IAAI,CAACD,UACD,OAAO;IAGX,MAAM,EAAE,UAAUE,SAAS,EAAE,GAAGC,gBAAgB,GAAGH;IACnD,OAAO;QAAE,GAAGG,cAAc;QAAEF;IAAO;AACvC;AAEO,MAAMG,wBAAwB,IAC1B,IAAIC,oBAA6B;QACpC,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4CX,CAAC;QACD,WAAW;YACP,OAAO;gBACH,QAAQP;YACZ;YACA,aAAa;gBACT,aAAa,OAAOQ,GAAGC,IAAIC;oBACvB,IAAI;wBACA,MAAMC,kBAAkBD,QAAQ,SAAS,CAAC,OAAO,CAACE;wBAClD,MAAMC,gBAAgBF,gBAAgB,IAAI;wBAE1C,IAAI,CAACE,eACD,OAAO;4BAAE,MAAM;4BAAM,OAAO;wBAAK;wBAGrC,MAAMC,cAAcJ,QAAQ,SAAS,CAAC,OAAO,CAACK;wBAC9C,MAAMC,SAAS,MAAMF,YAAY,OAAO,CAACD;wBAEzC,MAAM,EAAEX,QAAQ,EAAEC,MAAM,EAAE,GAAGa,OAAO,KAAK;wBAEzC,OAAO;4BACH,MAAMf,iBAAiBC,UAAUC;4BACjC,OAAO;wBACX;oBACJ,EAAE,OAAOc,IAAI;wBACT,OAAO,IAAIC,cAAcD;oBAC7B;gBACJ;YACJ;YACA,UAAU;gBACN,QAAQjB;YACZ;YACA,gBAAgB;gBACZ,cAAc,OAAOQ,GAAGW,MAAWT;oBAC/B,IAAI;wBACA,MAAMU,eAAeV,QAAQ,SAAS,CAAC,OAAO,CAACW;wBAC/C,MAAML,SAAS,MAAMI,aAAa,OAAO,CAACD,KAAK,IAAI;wBAEnD,IAAIH,OAAO,MAAM,IACb,OAAO,IAAIE,cAAcF,OAAO,KAAK;wBAGzC,OAAO;4BACH,MAAMf,iBAAiBe,OAAO,KAAK,EAAE;4BACrC,OAAO;wBACX;oBACJ,EAAE,OAAOC,IAAI;wBACT,OAAO,IAAIC,cAAcD;oBAC7B;gBACJ;YACJ;QACJ;IACJ"}
package/index.js CHANGED
@@ -7,21 +7,17 @@ import { SmtpTransportFeature } from "./features/SmtpTransport/feature.js";
7
7
  import { MailerServiceFeature } from "./features/MailerService/feature.js";
8
8
  import { SendMailFeature } from "./features/SendMail/feature.js";
9
9
  import { createSettingsGraphQL } from "./graphql/settings.js";
10
+ const createMailerContext = ()=>createContextPlugin((context)=>{
11
+ CodeMailerSettingsFeature.register(context.container);
12
+ DummyTransportFeature.register(context.container);
13
+ SmtpTransportFeature.register(context.container);
14
+ GetSettingsFeature.register(context.container);
15
+ SaveSettingsFeature.register(context.container);
16
+ MailerServiceFeature.register(context.container);
17
+ SendMailFeature.register(context.container);
18
+ });
19
+ const createMailerGraphQL = ()=>createSettingsGraphQL();
10
20
  export { MailerService } from "./domain/MailerService/abstractions.js";
11
- export const createMailerContext = () => {
12
- return createContextPlugin(context => {
13
- // Register all features.
14
- CodeMailerSettingsFeature.register(context.container);
15
- DummyTransportFeature.register(context.container);
16
- SmtpTransportFeature.register(context.container);
17
- GetSettingsFeature.register(context.container);
18
- SaveSettingsFeature.register(context.container);
19
- MailerServiceFeature.register(context.container);
20
- SendMailFeature.register(context.container);
21
- });
22
- };
23
- export const createMailerGraphQL = () => {
24
- return createSettingsGraphQL();
25
- };
21
+ export { createMailerContext, createMailerGraphQL };
26
22
 
27
23
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["createContextPlugin","CodeMailerSettingsFeature","GetSettingsFeature","SaveSettingsFeature","DummyTransportFeature","SmtpTransportFeature","MailerServiceFeature","SendMailFeature","createSettingsGraphQL","MailerService","createMailerContext","context","register","container","createMailerGraphQL"],"sources":["index.ts"],"sourcesContent":["import { createContextPlugin } from \"@webiny/api\";\nimport { CodeMailerSettingsFeature } from \"~/features/CodeMailerSettings/feature.js\";\nimport { GetSettingsFeature } from \"~/features/GetSettings/feature.js\";\nimport { SaveSettingsFeature } from \"~/features/SaveSettings/feature.js\";\nimport { DummyTransportFeature } from \"~/features/DummyTransport/feature.js\";\nimport { SmtpTransportFeature } from \"~/features/SmtpTransport/feature.js\";\nimport { MailerServiceFeature } from \"~/features/MailerService/feature.js\";\nimport { SendMailFeature } from \"~/features/SendMail/feature.js\";\nimport { createSettingsGraphQL } from \"~/graphql/settings.js\";\n\nexport { MailerService } from \"./domain/MailerService/abstractions.js\";\nexport type { IMailerService, IMailerServiceErrors } from \"./domain/MailerService/abstractions.js\";\n\nexport const createMailerContext = () => {\n return createContextPlugin(context => {\n // Register all features.\n CodeMailerSettingsFeature.register(context.container);\n DummyTransportFeature.register(context.container);\n SmtpTransportFeature.register(context.container);\n GetSettingsFeature.register(context.container);\n SaveSettingsFeature.register(context.container);\n MailerServiceFeature.register(context.container);\n SendMailFeature.register(context.container);\n });\n};\n\nexport const createMailerGraphQL = () => {\n return createSettingsGraphQL();\n};\n"],"mappings":"AAAA,SAASA,mBAAmB,QAAQ,aAAa;AACjD,SAASC,yBAAyB;AAClC,SAASC,kBAAkB;AAC3B,SAASC,mBAAmB;AAC5B,SAASC,qBAAqB;AAC9B,SAASC,oBAAoB;AAC7B,SAASC,oBAAoB;AAC7B,SAASC,eAAe;AACxB,SAASC,qBAAqB;AAE9B,SAASC,aAAa;AAGtB,OAAO,MAAMC,mBAAmB,GAAGA,CAAA,KAAM;EACrC,OAAOV,mBAAmB,CAACW,OAAO,IAAI;IAClC;IACAV,yBAAyB,CAACW,QAAQ,CAACD,OAAO,CAACE,SAAS,CAAC;IACrDT,qBAAqB,CAACQ,QAAQ,CAACD,OAAO,CAACE,SAAS,CAAC;IACjDR,oBAAoB,CAACO,QAAQ,CAACD,OAAO,CAACE,SAAS,CAAC;IAChDX,kBAAkB,CAACU,QAAQ,CAACD,OAAO,CAACE,SAAS,CAAC;IAC9CV,mBAAmB,CAACS,QAAQ,CAACD,OAAO,CAACE,SAAS,CAAC;IAC/CP,oBAAoB,CAACM,QAAQ,CAACD,OAAO,CAACE,SAAS,CAAC;IAChDN,eAAe,CAACK,QAAQ,CAACD,OAAO,CAACE,SAAS,CAAC;EAC/C,CAAC,CAAC;AACN,CAAC;AAED,OAAO,MAAMC,mBAAmB,GAAGA,CAAA,KAAM;EACrC,OAAON,qBAAqB,CAAC,CAAC;AAClC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { createContextPlugin } from \"@webiny/api\";\nimport { CodeMailerSettingsFeature } from \"~/features/CodeMailerSettings/feature.js\";\nimport { GetSettingsFeature } from \"~/features/GetSettings/feature.js\";\nimport { SaveSettingsFeature } from \"~/features/SaveSettings/feature.js\";\nimport { DummyTransportFeature } from \"~/features/DummyTransport/feature.js\";\nimport { SmtpTransportFeature } from \"~/features/SmtpTransport/feature.js\";\nimport { MailerServiceFeature } from \"~/features/MailerService/feature.js\";\nimport { SendMailFeature } from \"~/features/SendMail/feature.js\";\nimport { createSettingsGraphQL } from \"~/graphql/settings.js\";\n\nexport { MailerService } from \"./domain/MailerService/abstractions.js\";\nexport type { IMailerService, IMailerServiceErrors } from \"./domain/MailerService/abstractions.js\";\n\nexport const createMailerContext = () => {\n return createContextPlugin(context => {\n // Register all features.\n CodeMailerSettingsFeature.register(context.container);\n DummyTransportFeature.register(context.container);\n SmtpTransportFeature.register(context.container);\n GetSettingsFeature.register(context.container);\n SaveSettingsFeature.register(context.container);\n MailerServiceFeature.register(context.container);\n SendMailFeature.register(context.container);\n });\n};\n\nexport const createMailerGraphQL = () => {\n return createSettingsGraphQL();\n};\n"],"names":["createMailerContext","createContextPlugin","context","CodeMailerSettingsFeature","DummyTransportFeature","SmtpTransportFeature","GetSettingsFeature","SaveSettingsFeature","MailerServiceFeature","SendMailFeature","createMailerGraphQL","createSettingsGraphQL"],"mappings":";;;;;;;;;AAaO,MAAMA,sBAAsB,IACxBC,oBAAoBC,CAAAA;QAEvBC,0BAA0B,QAAQ,CAACD,QAAQ,SAAS;QACpDE,sBAAsB,QAAQ,CAACF,QAAQ,SAAS;QAChDG,qBAAqB,QAAQ,CAACH,QAAQ,SAAS;QAC/CI,mBAAmB,QAAQ,CAACJ,QAAQ,SAAS;QAC7CK,oBAAoB,QAAQ,CAACL,QAAQ,SAAS;QAC9CM,qBAAqB,QAAQ,CAACN,QAAQ,SAAS;QAC/CO,gBAAgB,QAAQ,CAACP,QAAQ,SAAS;IAC9C;AAGG,MAAMQ,sBAAsB,IACxBC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-mailer",
3
- "version": "6.3.0",
3
+ "version": "6.4.0-beta.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./index.js",
@@ -18,33 +18,33 @@
18
18
  "description": "The API to send e-mails.",
19
19
  "license": "MIT",
20
20
  "dependencies": {
21
- "@webiny/api": "6.3.0",
22
- "@webiny/api-headless-cms": "6.3.0",
23
- "@webiny/feature": "6.3.0",
24
- "@webiny/handler-graphql": "6.3.0",
25
- "@webiny/plugins": "6.3.0",
21
+ "@webiny/api": "6.4.0-beta.0",
22
+ "@webiny/api-headless-cms": "6.4.0-beta.0",
23
+ "@webiny/feature": "6.4.0-beta.0",
24
+ "@webiny/handler-graphql": "6.4.0-beta.0",
25
+ "@webiny/plugins": "6.4.0-beta.0",
26
26
  "email-addresses": "5.0.0",
27
27
  "nodemailer": "8.0.7",
28
- "zod": "4.3.6"
28
+ "zod": "4.4.3"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@types/nodemailer": "8.0.0",
32
- "@webiny/api-core": "6.3.0",
33
- "@webiny/build-tools": "6.3.0",
34
- "@webiny/db-dynamodb": "6.3.0",
35
- "@webiny/handler": "6.3.0",
36
- "@webiny/handler-aws": "6.3.0",
37
- "@webiny/handler-db": "6.3.0",
38
- "@webiny/project-utils": "6.3.0",
39
- "graphql": "16.13.2",
32
+ "@webiny/api-core": "6.4.0-beta.0",
33
+ "@webiny/build-tools": "6.4.0-beta.0",
34
+ "@webiny/db-dynamodb": "6.4.0-beta.0",
35
+ "@webiny/handler": "6.4.0-beta.0",
36
+ "@webiny/handler-aws": "6.4.0-beta.0",
37
+ "@webiny/handler-db": "6.4.0-beta.0",
38
+ "@webiny/project-utils": "6.4.0-beta.0",
39
+ "graphql": "16.14.0",
40
40
  "jest-dynalite": "3.6.1",
41
41
  "rimraf": "6.1.3",
42
42
  "typescript": "6.0.3",
43
- "vitest": "4.1.5"
43
+ "vitest": "4.1.6"
44
44
  },
45
45
  "publishConfig": {
46
46
  "access": "public",
47
47
  "directory": "dist"
48
48
  },
49
- "gitHead": "7cefe15431dbd65504e1f58147dc9e55bcbfa693"
49
+ "gitHead": "a545d7529828af07d08d49c3da1bcb967483b9ce"
50
50
  }
package/types.js CHANGED
@@ -1,3 +0,0 @@
1
- export {};
2
-
3
- //# sourceMappingURL=types.js.map
@@ -1,12 +1,5 @@
1
- import emailAddresses from "email-addresses";
2
-
3
- /**
4
- * RFC 5322 mailbox validator. Accepts both addr-spec ("addr@domain") and
5
- * name-addr ("Display Name <addr@domain>") forms — both are valid SMTP
6
- * From / Reply-To inputs that nodemailer and most providers accept.
7
- */
8
- export const isMailboxAddress = value => {
9
- return emailAddresses.parseOneAddress(value) !== null;
10
- };
1
+ import email_addresses from "email-addresses";
2
+ const isMailboxAddress = (value)=>null !== email_addresses.parseOneAddress(value);
3
+ export { isMailboxAddress };
11
4
 
12
5
  //# sourceMappingURL=isMailboxAddress.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["emailAddresses","isMailboxAddress","value","parseOneAddress"],"sources":["isMailboxAddress.ts"],"sourcesContent":["import emailAddresses from \"email-addresses\";\n\n/**\n * RFC 5322 mailbox validator. Accepts both addr-spec (\"addr@domain\") and\n * name-addr (\"Display Name <addr@domain>\") forms — both are valid SMTP\n * From / Reply-To inputs that nodemailer and most providers accept.\n */\nexport const isMailboxAddress = (value: string): boolean => {\n return emailAddresses.parseOneAddress(value) !== null;\n};\n"],"mappings":"AAAA,OAAOA,cAAc,MAAM,iBAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,gBAAgB,GAAIC,KAAa,IAAc;EACxD,OAAOF,cAAc,CAACG,eAAe,CAACD,KAAK,CAAC,KAAK,IAAI;AACzD,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"utils/isMailboxAddress.js","sources":["../../src/utils/isMailboxAddress.ts"],"sourcesContent":["import emailAddresses from \"email-addresses\";\n\n/**\n * RFC 5322 mailbox validator. Accepts both addr-spec (\"addr@domain\") and\n * name-addr (\"Display Name <addr@domain>\") forms — both are valid SMTP\n * From / Reply-To inputs that nodemailer and most providers accept.\n */\nexport const isMailboxAddress = (value: string): boolean => {\n return emailAddresses.parseOneAddress(value) !== null;\n};\n"],"names":["isMailboxAddress","value","emailAddresses"],"mappings":";AAOO,MAAMA,mBAAmB,CAACC,QACtBC,AAA0C,SAA1CA,gBAAAA,eAA8B,CAACD"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["SendMailUseCase","MailSendErrorEventHandler","MailBeforeSendEventHandler","MailAfterSendEventHandler","GetSettingsUseCase","GetSettingsRepository","SaveSettingsUseCase","SaveSettingsRepository","MailerSettingsAfterSaveEventHandler","MailerSettingsBeforeSaveEventHandler","MailerService"],"sources":["mailer.ts"],"sourcesContent":["export {\n SendMailUseCase,\n MailSendErrorEventHandler,\n MailBeforeSendEventHandler,\n MailAfterSendEventHandler\n} from \"~/features/SendMail/index.js\";\nexport { GetSettingsUseCase, GetSettingsRepository } from \"~/features/GetSettings/index.js\";\nexport {\n SaveSettingsUseCase,\n SaveSettingsRepository,\n MailerSettingsAfterSaveEventHandler,\n MailerSettingsBeforeSaveEventHandler\n} from \"~/features/SaveSettings/index.js\";\nexport { MailerService } from \"~/domain/MailerService/abstractions.js\";\n"],"mappings":"AAAA,SACIA,eAAe,EACfC,yBAAyB,EACzBC,0BAA0B,EAC1BC,yBAAyB;AAE7B,SAASC,kBAAkB,EAAEC,qBAAqB;AAClD,SACIC,mBAAmB,EACnBC,sBAAsB,EACtBC,mCAAmC,EACnCC,oCAAoC;AAExC,SAASC,aAAa","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["GetSettingsUseCase","GetSettingsRepository"],"sources":["index.ts"],"sourcesContent":["export { GetSettingsUseCase, GetSettingsRepository } from \"./abstractions.js\";\n"],"mappings":"AAAA,SAASA,kBAAkB,EAAEC,qBAAqB","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["SaveSettingsUseCase","SaveSettingsRepository","MailerSettingsAfterSaveEventHandler","MailerSettingsBeforeSaveEventHandler"],"sources":["index.ts"],"sourcesContent":["export {\n SaveSettingsUseCase,\n SaveSettingsRepository,\n MailerSettingsAfterSaveEventHandler,\n MailerSettingsBeforeSaveEventHandler\n} from \"./abstractions.js\";\n"],"mappings":"AAAA,SACIA,mBAAmB,EACnBC,sBAAsB,EACtBC,mCAAmC,EACnCC,oCAAoC","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["SendMailUseCase","MailAfterSendEventHandler","MailBeforeSendEventHandler","MailSendErrorEventHandler"],"sources":["index.ts"],"sourcesContent":["export {\n SendMailUseCase,\n MailAfterSendEventHandler,\n MailBeforeSendEventHandler,\n MailSendErrorEventHandler\n} from \"./abstractions.js\";\n"],"mappings":"AAAA,SACIA,eAAe,EACfC,yBAAyB,EACzBC,0BAA0B,EAC1BC,yBAAyB","ignoreList":[]}
package/types.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["// TODO: place types into appropriate domain abstractions\n\n/**\n * Interface to implement the actual mailer.\n */\nexport interface TransportSendResponse<T = any> {\n result: T | null;\n error: {\n message: string;\n code: string;\n data?: {\n [key: string]: any;\n };\n } | null;\n}\n\ninterface TransportSendToData {\n to: string[];\n}\ninterface TransportSendCcData {\n cc: string[];\n}\ninterface TransportSendBccData {\n bcc: string[];\n}\n\ninterface BaseTransportSendData {\n to?: string[];\n cc?: string[];\n bcc?: string[];\n from?: string;\n subject: string;\n text?: string;\n html?: string;\n replyTo?: string;\n}\n\nexport type TransportSendData = BaseTransportSendData &\n (TransportSendToData | TransportSendBccData | TransportSendCcData);\n\nexport interface TransportSettings {\n host: string;\n port: number;\n user: string;\n password: string;\n from: string;\n replyTo?: string;\n}\n"],"mappings":"","ignoreList":[]}