@webiny/api-mailer 0.0.0-unstable.615a930a68 → 0.0.0-unstable.61c048f412

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 (177) 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 +47 -41
  110. package/graphql/settings.js.map +1 -1
  111. package/index.d.ts +4 -8
  112. package/index.js +24 -86
  113. package/index.js.map +1 -1
  114. package/package.json +32 -42
  115. package/types.d.ts +2 -109
  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 -24
  120. package/context.js.map +0 -1
  121. package/crud/group.d.ts +0 -2
  122. package/crud/group.js +0 -21
  123. package/crud/group.js.map +0 -1
  124. package/crud/mailer/onBeforeSend.d.ts +0 -7
  125. package/crud/mailer/onBeforeSend.js +0 -69
  126. package/crud/mailer/onBeforeSend.js.map +0 -1
  127. package/crud/mailer.crud.d.ts +0 -2
  128. package/crud/mailer.crud.js +0 -123
  129. package/crud/mailer.crud.js.map +0 -1
  130. package/crud/settings/hooks.d.ts +0 -5
  131. package/crud/settings/hooks.js +0 -55
  132. package/crud/settings/hooks.js.map +0 -1
  133. package/crud/settings/model.d.ts +0 -3
  134. package/crud/settings/model.js +0 -90
  135. package/crud/settings/model.js.map +0 -1
  136. package/crud/settings/password.js +0 -71
  137. package/crud/settings/password.js.map +0 -1
  138. package/crud/settings/secret.js +0 -23
  139. package/crud/settings/secret.js.map +0 -1
  140. package/crud/settings/transform.d.ts +0 -13
  141. package/crud/settings/transform.js +0 -56
  142. package/crud/settings/transform.js.map +0 -1
  143. package/crud/settings/validation.d.ts +0 -4
  144. package/crud/settings/validation.js +0 -38
  145. package/crud/settings/validation.js.map +0 -1
  146. package/crud/settings.crud.d.ts +0 -5
  147. package/crud/settings.crud.js +0 -331
  148. package/crud/settings.crud.js.map +0 -1
  149. package/crud/transport/onTransportBeforeSend.d.ts +0 -7
  150. package/crud/transport/onTransportBeforeSend.js +0 -69
  151. package/crud/transport/onTransportBeforeSend.js.map +0 -1
  152. package/crud/transporter.crud.d.ts +0 -2
  153. package/crud/transporter.crud.js +0 -193
  154. package/crud/transporter.crud.js.map +0 -1
  155. package/graphql/index.d.ts +0 -1
  156. package/graphql/index.js +0 -14
  157. package/graphql/index.js.map +0 -1
  158. package/mailers/createDummyMailer.d.ts +0 -5
  159. package/mailers/createDummyMailer.js +0 -24
  160. package/mailers/createDummyMailer.js.map +0 -1
  161. package/mailers/createSmtpMailer.d.ts +0 -13
  162. package/mailers/createSmtpMailer.js +0 -106
  163. package/mailers/createSmtpMailer.js.map +0 -1
  164. package/plugins/CreateTransportPlugin.d.ts +0 -17
  165. package/plugins/CreateTransportPlugin.js +0 -34
  166. package/plugins/CreateTransportPlugin.js.map +0 -1
  167. package/plugins/index.d.ts +0 -1
  168. package/plugins/index.js +0 -18
  169. package/plugins/index.js.map +0 -1
  170. package/transports/createDummyTransport.d.ts +0 -5
  171. package/transports/createDummyTransport.js +0 -25
  172. package/transports/createDummyTransport.js.map +0 -1
  173. package/transports/createSmtpTransport.d.ts +0 -12
  174. package/transports/createSmtpTransport.js +0 -101
  175. package/transports/createSmtpTransport.js.map +0 -1
  176. /package/{crud/settings → features/Encryption/utils}/password.d.ts +0 -0
  177. /package/{crud/settings → features/Encryption/utils}/secret.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["zod","EventPublisher","SendMailUseCase","MailBeforeSendEvent","MailAfterSendEvent","MailSendErrorEvent","MailerService","MailValidationError","Result","requiredString","string","requiredEmail","email","schema","object","to","array","optional","from","subject","max","min","cc","bcc","replyTo","text","html","refine","data","SendMailUseCaseImpl","constructor","mailerService","eventPublisher","execute","validation","safeParse","success","fail","error","errors","publish","result","sendMail","isFail","response","value","SendMailUseCaseImplementation","createImplementation","implementation","dependencies"],"sources":["SendMailUseCase.ts"],"sourcesContent":["import zod from \"zod\";\nimport {\n EventPublisher,\n EventPublisher as EventPublisherAbstraction\n} from \"@webiny/api-core/features/EventPublisher\";\nimport { SendMailUseCase } from \"./abstractions.js\";\nimport { MailBeforeSendEvent, MailAfterSendEvent, MailSendErrorEvent } from \"./events.js\";\nimport { MailerService } from \"~/domain/MailerService/abstractions.js\";\nimport type { TransportSendData } from \"~/types.js\";\nimport { MailValidationError } from \"~/domain/errors.js\";\nimport { Result } from \"@webiny/feature/api\";\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\nclass SendMailUseCaseImpl implements SendMailUseCase.Interface {\n constructor(\n private mailerService: MailerService.Interface,\n private eventPublisher: EventPublisherAbstraction.Interface\n ) {}\n\n async execute(data: TransportSendData) {\n const validation = schema.safeParse(data);\n if (!validation.success) {\n return Result.fail(new MailValidationError(validation.error.errors));\n }\n\n // Publish before send event\n await this.eventPublisher.publish(new MailBeforeSendEvent({ data }));\n\n // Send mail\n const result = await this.mailerService.sendMail(data);\n\n if (result.isFail()) {\n // Publish error event\n await this.eventPublisher.publish(\n new MailSendErrorEvent({\n data,\n error: result.error\n })\n );\n\n return result;\n }\n\n // Publish after send event\n await this.eventPublisher.publish(\n new MailAfterSendEvent({\n data,\n response: result.value\n })\n );\n\n return result;\n }\n}\n\nexport const SendMailUseCaseImplementation = SendMailUseCase.createImplementation({\n implementation: SendMailUseCaseImpl,\n dependencies: [MailerService, EventPublisher]\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,45 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import type { DomainEvent, IEventHandler } from "@webiny/api-core/features/EventPublisher";
3
+ import type { TransportSendData, TransportSendResponse } from "../../types.js";
4
+ import type { MailerService } from "../../domain/MailerService/abstractions.js";
5
+ import { MailValidationError } from "../../domain/errors.js";
6
+ export interface ISendMailErrors {
7
+ validation: MailValidationError;
8
+ mailService: MailerService.Error;
9
+ }
10
+ type SendMailErrors = ISendMailErrors[keyof ISendMailErrors];
11
+ export interface ISendMailUseCase {
12
+ execute(data: TransportSendData): Promise<Result<TransportSendResponse, SendMailErrors>>;
13
+ }
14
+ export declare const SendMailUseCase: import("@webiny/di").Abstraction<ISendMailUseCase>;
15
+ export declare namespace SendMailUseCase {
16
+ type Interface = ISendMailUseCase;
17
+ type Error = SendMailErrors;
18
+ }
19
+ export interface MailBeforeSendPayload {
20
+ data: TransportSendData;
21
+ }
22
+ export interface MailAfterSendPayload {
23
+ data: TransportSendData;
24
+ response: TransportSendResponse;
25
+ }
26
+ export interface MailSendErrorPayload {
27
+ data: TransportSendData;
28
+ error: Error;
29
+ }
30
+ export declare const MailBeforeSendHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<MailBeforeSendPayload>>>;
31
+ export declare namespace MailBeforeSendHandler {
32
+ type Interface = IEventHandler<DomainEvent<MailBeforeSendPayload>>;
33
+ type Event = DomainEvent<MailBeforeSendPayload>;
34
+ }
35
+ export declare const MailAfterSendHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<MailAfterSendPayload>>>;
36
+ export declare namespace MailAfterSendHandler {
37
+ type Interface = IEventHandler<DomainEvent<MailAfterSendPayload>>;
38
+ type Event = DomainEvent<MailAfterSendPayload>;
39
+ }
40
+ export declare const MailSendErrorHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<MailSendErrorPayload>>>;
41
+ export declare namespace MailSendErrorHandler {
42
+ type Interface = IEventHandler<DomainEvent<MailSendErrorPayload>>;
43
+ type Event = DomainEvent<MailSendErrorPayload>;
44
+ }
45
+ export {};
@@ -0,0 +1,11 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ export const SendMailUseCase = createAbstraction("SendMail");
3
+
4
+ // Domain Events
5
+
6
+ // Event Handler Abstractions
7
+ export const MailBeforeSendHandler = createAbstraction("MailBeforeSendHandler");
8
+ export const MailAfterSendHandler = createAbstraction("MailAfterSendHandler");
9
+ export const MailSendErrorHandler = createAbstraction("MailSendErrorHandler");
10
+
11
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createAbstraction","SendMailUseCase","MailBeforeSendHandler","MailAfterSendHandler","MailSendErrorHandler"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { DomainEvent, IEventHandler } from \"@webiny/api-core/features/EventPublisher\";\nimport type { TransportSendData, TransportSendResponse } from \"~/types.js\";\nimport type { MailerService } from \"~/domain/MailerService/abstractions.js\";\nimport { MailValidationError } from \"~/domain/errors.js\";\n\nexport interface ISendMailErrors {\n validation: MailValidationError;\n mailService: MailerService.Error;\n}\n\ntype SendMailErrors = ISendMailErrors[keyof ISendMailErrors];\n\nexport interface ISendMailUseCase {\n execute(data: TransportSendData): Promise<Result<TransportSendResponse, SendMailErrors>>;\n}\n\nexport const SendMailUseCase = createAbstraction<ISendMailUseCase>(\"SendMail\");\n\nexport namespace SendMailUseCase {\n export type Interface = ISendMailUseCase;\n export type Error = SendMailErrors;\n}\n\n// Domain Events\nexport interface MailBeforeSendPayload {\n data: TransportSendData;\n}\n\nexport interface MailAfterSendPayload {\n data: TransportSendData;\n response: TransportSendResponse;\n}\n\nexport interface MailSendErrorPayload {\n data: TransportSendData;\n error: Error;\n}\n\n// Event Handler Abstractions\nexport const MailBeforeSendHandler =\n createAbstraction<IEventHandler<DomainEvent<MailBeforeSendPayload>>>(\"MailBeforeSendHandler\");\n\nexport namespace MailBeforeSendHandler {\n export type Interface = IEventHandler<DomainEvent<MailBeforeSendPayload>>;\n export type Event = DomainEvent<MailBeforeSendPayload>;\n}\n\nexport const MailAfterSendHandler =\n createAbstraction<IEventHandler<DomainEvent<MailAfterSendPayload>>>(\"MailAfterSendHandler\");\n\nexport namespace MailAfterSendHandler {\n export type Interface = IEventHandler<DomainEvent<MailAfterSendPayload>>;\n export type Event = DomainEvent<MailAfterSendPayload>;\n}\n\nexport const MailSendErrorHandler =\n createAbstraction<IEventHandler<DomainEvent<MailSendErrorPayload>>>(\"MailSendErrorHandler\");\n\nexport namespace MailSendErrorHandler {\n export type Interface = IEventHandler<DomainEvent<MailSendErrorPayload>>;\n export type Event = DomainEvent<MailSendErrorPayload>;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAkBvD,OAAO,MAAMC,eAAe,GAAGD,iBAAiB,CAAmB,UAAU,CAAC;;AAO9E;;AAeA;AACA,OAAO,MAAME,qBAAqB,GAC9BF,iBAAiB,CAAoD,uBAAuB,CAAC;AAOjG,OAAO,MAAMG,oBAAoB,GAC7BH,iBAAiB,CAAmD,sBAAsB,CAAC;AAO/F,OAAO,MAAMI,oBAAoB,GAC7BJ,iBAAiB,CAAmD,sBAAsB,CAAC","ignoreList":[]}
@@ -0,0 +1,14 @@
1
+ import { DomainEvent } from "@webiny/api-core/features/EventPublisher";
2
+ import type { MailBeforeSendPayload, MailAfterSendPayload, MailSendErrorPayload } from "./abstractions.js";
3
+ export declare class MailBeforeSendEvent extends DomainEvent<MailBeforeSendPayload> {
4
+ eventType: "mailer.mail.beforeSend";
5
+ getHandlerAbstraction(): import("@webiny/di").Abstraction<import("@webiny/api-core/features/EventPublisher").IEventHandler<DomainEvent<MailBeforeSendPayload>>>;
6
+ }
7
+ export declare class MailAfterSendEvent extends DomainEvent<MailAfterSendPayload> {
8
+ eventType: "mailer.mail.afterSend";
9
+ getHandlerAbstraction(): import("@webiny/di").Abstraction<import("@webiny/api-core/features/EventPublisher").IEventHandler<DomainEvent<MailAfterSendPayload>>>;
10
+ }
11
+ export declare class MailSendErrorEvent extends DomainEvent<MailSendErrorPayload> {
12
+ eventType: "mailer.mail.sendError";
13
+ getHandlerAbstraction(): import("@webiny/di").Abstraction<import("@webiny/api-core/features/EventPublisher").IEventHandler<DomainEvent<MailSendErrorPayload>>>;
14
+ }
@@ -0,0 +1,22 @@
1
+ import { DomainEvent } from "@webiny/api-core/features/EventPublisher";
2
+ import { MailBeforeSendHandler, MailAfterSendHandler, MailSendErrorHandler } from "./abstractions.js";
3
+ export class MailBeforeSendEvent extends DomainEvent {
4
+ eventType = "mailer.mail.beforeSend";
5
+ getHandlerAbstraction() {
6
+ return MailBeforeSendHandler;
7
+ }
8
+ }
9
+ export class MailAfterSendEvent extends DomainEvent {
10
+ eventType = "mailer.mail.afterSend";
11
+ getHandlerAbstraction() {
12
+ return MailAfterSendHandler;
13
+ }
14
+ }
15
+ export class MailSendErrorEvent extends DomainEvent {
16
+ eventType = "mailer.mail.sendError";
17
+ getHandlerAbstraction() {
18
+ return MailSendErrorHandler;
19
+ }
20
+ }
21
+
22
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DomainEvent","MailBeforeSendHandler","MailAfterSendHandler","MailSendErrorHandler","MailBeforeSendEvent","eventType","getHandlerAbstraction","MailAfterSendEvent","MailSendErrorEvent"],"sources":["events.ts"],"sourcesContent":["import { DomainEvent } from \"@webiny/api-core/features/EventPublisher\";\nimport {\n MailBeforeSendHandler,\n MailAfterSendHandler,\n MailSendErrorHandler\n} from \"./abstractions.js\";\nimport type {\n MailBeforeSendPayload,\n MailAfterSendPayload,\n MailSendErrorPayload\n} from \"./abstractions.js\";\n\nexport class MailBeforeSendEvent extends DomainEvent<MailBeforeSendPayload> {\n eventType = \"mailer.mail.beforeSend\" as const;\n\n getHandlerAbstraction() {\n return MailBeforeSendHandler;\n }\n}\n\nexport class MailAfterSendEvent extends DomainEvent<MailAfterSendPayload> {\n eventType = \"mailer.mail.afterSend\" as const;\n\n getHandlerAbstraction() {\n return MailAfterSendHandler;\n }\n}\n\nexport class MailSendErrorEvent extends DomainEvent<MailSendErrorPayload> {\n eventType = \"mailer.mail.sendError\" as const;\n\n getHandlerAbstraction() {\n return MailSendErrorHandler;\n }\n}\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,0CAA0C;AACtE,SACIC,qBAAqB,EACrBC,oBAAoB,EACpBC,oBAAoB;AAQxB,OAAO,MAAMC,mBAAmB,SAASJ,WAAW,CAAwB;EACxEK,SAAS,GAAG,wBAAwB;EAEpCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOL,qBAAqB;EAChC;AACJ;AAEA,OAAO,MAAMM,kBAAkB,SAASP,WAAW,CAAuB;EACtEK,SAAS,GAAG,uBAAuB;EAEnCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOJ,oBAAoB;EAC/B;AACJ;AAEA,OAAO,MAAMM,kBAAkB,SAASR,WAAW,CAAuB;EACtEK,SAAS,GAAG,uBAAuB;EAEnCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOH,oBAAoB;EAC/B;AACJ","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export declare const SendMailFeature: import("@webiny/feature/api/createFeature.js").FeatureDefinition<unknown>;
@@ -0,0 +1,10 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import { SendMailUseCaseImplementation } from "./SendMailUseCase.js";
3
+ export const SendMailFeature = createFeature({
4
+ name: "SendMail",
5
+ register(container) {
6
+ container.register(SendMailUseCaseImplementation);
7
+ }
8
+ });
9
+
10
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createFeature","SendMailUseCaseImplementation","SendMailFeature","name","register","container"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { SendMailUseCaseImplementation } from \"./SendMailUseCase.js\";\n\nexport const SendMailFeature = createFeature({\n name: \"SendMail\",\n register(container) {\n container.register(SendMailUseCaseImplementation);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,6BAA6B;AAEtC,OAAO,MAAMC,eAAe,GAAGF,aAAa,CAAC;EACzCG,IAAI,EAAE,UAAU;EAChBC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACH,6BAA6B,CAAC;EACrD;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ import type { TransportSettings } from "../../types.js";
2
+ import type SMTPTransport from "nodemailer/lib/smtp-transport";
3
+ export type SmtpTransportConfig = SMTPTransport.Options;
4
+ export declare class SmtpConfig {
5
+ static fromTransportSettings(settings: TransportSettings): SmtpTransportConfig;
6
+ }
@@ -0,0 +1,29 @@
1
+ const configDefaults = {
2
+ socketTimeout: 15000,
3
+ connectionTimeout: 15000,
4
+ greetingTimeout: 15000
5
+ };
6
+ export class SmtpConfig {
7
+ static fromTransportSettings(settings) {
8
+ const baseConfig = {
9
+ host: settings.host,
10
+ port: settings.port,
11
+ auth: {
12
+ user: settings.user,
13
+ pass: settings.password
14
+ }
15
+ };
16
+
17
+ // Apply defaults
18
+ return Object.keys(configDefaults).reduce((config, key) => {
19
+ const configKey = key;
20
+ if (config[configKey] === undefined || config[configKey] === null) {
21
+ // @ts-expect-error
22
+ config[configKey] = configDefaults[configKey];
23
+ }
24
+ return config;
25
+ }, baseConfig);
26
+ }
27
+ }
28
+
29
+ //# sourceMappingURL=SmtpConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["configDefaults","socketTimeout","connectionTimeout","greetingTimeout","SmtpConfig","fromTransportSettings","settings","baseConfig","host","port","auth","user","pass","password","Object","keys","reduce","config","key","configKey","undefined"],"sources":["SmtpConfig.ts"],"sourcesContent":["import type { TransportSettings } from \"~/types.js\";\nimport type SMTPTransport from \"nodemailer/lib/smtp-transport\";\n\nexport type SmtpTransportConfig = SMTPTransport.Options;\n\nconst configDefaults: Partial<SmtpTransportConfig> = {\n socketTimeout: 15000,\n connectionTimeout: 15000,\n greetingTimeout: 15000\n};\n\nexport class SmtpConfig {\n static fromTransportSettings(settings: TransportSettings): SmtpTransportConfig {\n const baseConfig: SmtpTransportConfig = {\n host: settings.host,\n port: settings.port,\n auth: {\n user: settings.user,\n pass: settings.password\n }\n };\n\n // Apply defaults\n return Object.keys(configDefaults).reduce<SmtpTransportConfig>((config, key) => {\n const configKey = key as keyof SmtpTransportConfig;\n if (config[configKey] === undefined || config[configKey] === null) {\n // @ts-expect-error\n config[configKey] = configDefaults[configKey];\n }\n return config;\n }, baseConfig);\n }\n}\n"],"mappings":"AAKA,MAAMA,cAA4C,GAAG;EACjDC,aAAa,EAAE,KAAK;EACpBC,iBAAiB,EAAE,KAAK;EACxBC,eAAe,EAAE;AACrB,CAAC;AAED,OAAO,MAAMC,UAAU,CAAC;EACpB,OAAOC,qBAAqBA,CAACC,QAA2B,EAAuB;IAC3E,MAAMC,UAA+B,GAAG;MACpCC,IAAI,EAAEF,QAAQ,CAACE,IAAI;MACnBC,IAAI,EAAEH,QAAQ,CAACG,IAAI;MACnBC,IAAI,EAAE;QACFC,IAAI,EAAEL,QAAQ,CAACK,IAAI;QACnBC,IAAI,EAAEN,QAAQ,CAACO;MACnB;IACJ,CAAC;;IAED;IACA,OAAOC,MAAM,CAACC,IAAI,CAACf,cAAc,CAAC,CAACgB,MAAM,CAAsB,CAACC,MAAM,EAAEC,GAAG,KAAK;MAC5E,MAAMC,SAAS,GAAGD,GAAgC;MAClD,IAAID,MAAM,CAACE,SAAS,CAAC,KAAKC,SAAS,IAAIH,MAAM,CAACE,SAAS,CAAC,KAAK,IAAI,EAAE;QAC/D;QACAF,MAAM,CAACE,SAAS,CAAC,GAAGnB,cAAc,CAACmB,SAAS,CAAC;MACjD;MACA,OAAOF,MAAM;IACjB,CAAC,EAAEV,UAAU,CAAC;EAClB;AACJ","ignoreList":[]}
@@ -0,0 +1,18 @@
1
+ import type SMTPTransport from "nodemailer/lib/smtp-transport";
2
+ import { MailTransport } from "../../domain/MailTransport/abstractions.js";
3
+ export declare class SmtpMailTransport implements MailTransport.Interface {
4
+ readonly name = "Mailer/SmtpTransport";
5
+ private readonly transporter;
6
+ constructor(config: SMTPTransport.Options);
7
+ send(params: MailTransport.SendParams): Promise<{
8
+ result: string;
9
+ error: null;
10
+ } | {
11
+ result: null;
12
+ error: {
13
+ message: any;
14
+ code: any;
15
+ data: any;
16
+ };
17
+ }>;
18
+ }
@@ -0,0 +1,61 @@
1
+ import nodemailer from "nodemailer";
2
+ export class SmtpMailTransport {
3
+ name = "Mailer/SmtpTransport";
4
+ constructor(config) {
5
+ this.transporter = nodemailer.createTransport(config);
6
+ }
7
+ async send(params) {
8
+ const {
9
+ replyTo,
10
+ text,
11
+ html,
12
+ to,
13
+ bcc,
14
+ cc,
15
+ from,
16
+ subject
17
+ } = params;
18
+ try {
19
+ const result = await this.transporter.sendMail({
20
+ replyTo,
21
+ bcc,
22
+ cc,
23
+ from,
24
+ text,
25
+ html,
26
+ to,
27
+ subject
28
+ });
29
+ if (result.messageId) {
30
+ return {
31
+ result: result.response,
32
+ error: null
33
+ };
34
+ }
35
+ return {
36
+ result: null,
37
+ error: {
38
+ message: "nodemailer.sendMail does not have a messageId in the result. Something went wrong...",
39
+ code: "MAILER_ERROR",
40
+ data: {
41
+ ...result
42
+ }
43
+ }
44
+ };
45
+ } catch (ex) {
46
+ return {
47
+ result: null,
48
+ error: {
49
+ message: ex.message,
50
+ code: ex.code,
51
+ data: {
52
+ ...params,
53
+ ...ex.data
54
+ }
55
+ }
56
+ };
57
+ }
58
+ }
59
+ }
60
+
61
+ //# sourceMappingURL=SmtpMailTransport.js.map
@@ -0,0 +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"],"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 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"],"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,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;YACT,GAAGiB,EAAE,CAACD;UACV;QACJ;MACJ,CAAC;IACL;EACJ;AACJ","ignoreList":[]}
@@ -0,0 +1,9 @@
1
+ import { MailTransportFactory } from "../../domain/MailTransport/abstractions.js";
2
+ import type { TransportSettings } from "../../types.js";
3
+ declare class SmtpMailTransportFactoryImpl implements MailTransportFactory.Interface {
4
+ createTransport(settings: TransportSettings): MailTransportFactory.Return;
5
+ }
6
+ export declare const SmtpMailTransportFactory: typeof SmtpMailTransportFactoryImpl & {
7
+ __abstraction: import("@webiny/di").Abstraction<import("~/domain/MailTransport/abstractions.js").IMailTransportFactory>;
8
+ };
9
+ export {};
@@ -0,0 +1,14 @@
1
+ import { MailTransportFactory } from "../../domain/MailTransport/abstractions.js";
2
+ import { SmtpMailTransport } from "./SmtpMailTransport.js";
3
+ import { SmtpConfig } from "./SmtpConfig.js";
4
+ class SmtpMailTransportFactoryImpl {
5
+ async createTransport(settings) {
6
+ return new SmtpMailTransport(SmtpConfig.fromTransportSettings(settings));
7
+ }
8
+ }
9
+ export const SmtpMailTransportFactory = MailTransportFactory.createImplementation({
10
+ implementation: SmtpMailTransportFactoryImpl,
11
+ dependencies: []
12
+ });
13
+
14
+ //# sourceMappingURL=SmtpMailTransportFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["MailTransportFactory","SmtpMailTransport","SmtpConfig","SmtpMailTransportFactoryImpl","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 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;EACzE,MAAMC,eAAeA,CAACC,QAA2B,EAA+B;IAC5E,OAAO,IAAIJ,iBAAiB,CAACC,UAAU,CAACI,qBAAqB,CAACD,QAAQ,CAAC,CAAC;EAC5E;AACJ;AAEA,OAAO,MAAME,wBAAwB,GAAGP,oBAAoB,CAACQ,oBAAoB,CAAC;EAC9EC,cAAc,EAAEN,4BAA4B;EAC5CO,YAAY,EAAE;AAClB,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export declare const SmtpTransportFeature: import("@webiny/feature/api/createFeature.js").FeatureDefinition<unknown>;
@@ -0,0 +1,10 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import { SmtpMailTransportFactory } from "./SmtpMailTransportFactory.js";
3
+ export const SmtpTransportFeature = createFeature({
4
+ name: "SmtpTransport",
5
+ register(container) {
6
+ container.register(SmtpMailTransportFactory).inSingletonScope();
7
+ }
8
+ });
9
+
10
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +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,3 +1,3 @@
1
1
  import { GraphQLSchemaPlugin } from "@webiny/handler-graphql";
2
- import { MailerContext } from "../types";
3
- export declare const createSettingsGraphQL: () => GraphQLSchemaPlugin<MailerContext>;
2
+ import type { Context } from "@webiny/api/types.js";
3
+ export declare const createSettingsGraphQL: () => GraphQLSchemaPlugin<Context>;
@@ -1,23 +1,17 @@
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
-
1
+ import { ErrorResponse, GraphQLSchemaPlugin, Response } from "@webiny/handler-graphql";
2
+ import { GetSettingsUseCase } from "../features/GetSettings/abstractions.js";
3
+ import { SaveSettingsUseCase } from "../features/SaveSettings/abstractions.js";
4
+ import { getSecret } from "../features/Encryption/utils/secret.js";
10
5
  const emptyResolver = () => ({});
11
-
12
- const createSettingsGraphQL = () => {
13
- return new _handlerGraphql.GraphQLSchemaPlugin({
6
+ export const createSettingsGraphQL = () => {
7
+ return new GraphQLSchemaPlugin({
14
8
  typeDefs: `
15
9
  type MailerTransportSettingsError {
16
10
  message: String!
17
11
  code: String
18
12
  data: JSON
19
13
  }
20
-
14
+
21
15
  type MailerTransportSettings {
22
16
  host: String
23
17
  port: Number
@@ -25,16 +19,16 @@ const createSettingsGraphQL = () => {
25
19
  from: String
26
20
  replyTo: String
27
21
  }
28
-
22
+
29
23
  type MailerTransportSettingsResponse {
30
24
  data: MailerTransportSettings
31
25
  error: MailerTransportSettingsError
32
26
  }
33
-
27
+
34
28
  type MailerQuery {
35
29
  getSettings: MailerTransportSettingsResponse!
36
30
  }
37
-
31
+
38
32
  input MailerTransportSettingsInput {
39
33
  host: String!
40
34
  port: Number
@@ -43,11 +37,11 @@ const createSettingsGraphQL = () => {
43
37
  from: String!
44
38
  replyTo: String
45
39
  }
46
-
40
+
47
41
  type MailerMutation {
48
42
  saveSettings(data: MailerTransportSettingsInput!): MailerTransportSettingsResponse!
49
43
  }
50
-
44
+
51
45
  extend type Query {
52
46
  mailer: MailerQuery
53
47
  }
@@ -62,19 +56,26 @@ const createSettingsGraphQL = () => {
62
56
  MailerQuery: {
63
57
  getSettings: async (_, __, context) => {
64
58
  try {
65
- const settings = await context.mailer.getSettings();
66
- /**
67
- * We want to remove the password from the response, if it exists.
68
- */
59
+ // First check of encryption key is set!
60
+ // If not, this function will throw an error.
61
+ // TODO: refactor this to make more sense.
62
+ getSecret();
63
+ const getSettings = context.container.resolve(GetSettingsUseCase);
64
+ const result = await getSettings.execute();
65
+ const settings = result.value;
69
66
 
70
- if (settings !== null && settings !== void 0 && settings.password) {
71
- // @ts-ignore
72
- delete settings.password;
67
+ // Remove password from response
68
+ if (settings?.password) {
69
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
70
+ const {
71
+ password,
72
+ ...settingsWithoutPassword
73
+ } = settings;
74
+ return new Response(settingsWithoutPassword);
73
75
  }
74
-
75
- return new _handlerGraphql.Response(settings);
76
+ return new Response(settings);
76
77
  } catch (ex) {
77
- return new _handlerGraphql.ErrorResponse(ex);
78
+ return new ErrorResponse(ex);
78
79
  }
79
80
  }
80
81
  },
@@ -84,21 +85,26 @@ const createSettingsGraphQL = () => {
84
85
  MailerMutation: {
85
86
  saveSettings: async (_, args, context) => {
86
87
  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;
88
+ const saveSettings = context.container.resolve(SaveSettingsUseCase);
89
+ const result = await saveSettings.execute(args.data);
90
+ if (result.isFail()) {
91
+ return new ErrorResponse(result.error);
97
92
  }
93
+ const settings = result.value;
98
94
 
99
- return new _handlerGraphql.Response(settings);
95
+ // Remove password from response
96
+ // TODO: create a GraphQL output mapper
97
+ if (settings?.password) {
98
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
99
+ const {
100
+ password,
101
+ ...settingsWithoutPassword
102
+ } = settings;
103
+ return new Response(settingsWithoutPassword);
104
+ }
105
+ return new Response(settings);
100
106
  } catch (ex) {
101
- return new _handlerGraphql.ErrorResponse(ex);
107
+ return new ErrorResponse(ex);
102
108
  }
103
109
  }
104
110
  }
@@ -106,4 +112,4 @@ const createSettingsGraphQL = () => {
106
112
  });
107
113
  };
108
114
 
109
- exports.createSettingsGraphQL = createSettingsGraphQL;
115
+ //# sourceMappingURL=settings.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["emptyResolver","createSettingsGraphQL","GraphQLSchemaPlugin","typeDefs","resolvers","Query","mailer","MailerQuery","getSettings","_","__","context","settings","password","Response","ex","ErrorResponse","Mutation","MailerMutation","saveSettings","args","input","data"],"sources":["settings.ts"],"sourcesContent":["import { ErrorResponse, GraphQLSchemaPlugin, Response } from \"@webiny/handler-graphql\";\nimport { MailerContext } from \"~/types\";\n\nconst emptyResolver = () => ({});\n\nexport const createSettingsGraphQL = () => {\n return new GraphQLSchemaPlugin<MailerContext>({\n typeDefs: `\n type MailerTransportSettingsError {\n message: String!\n code: String\n data: JSON\n }\n \n type MailerTransportSettings {\n host: String\n port: Number\n user: String\n from: String\n replyTo: String\n }\n \n type MailerTransportSettingsResponse {\n data: MailerTransportSettings\n error: MailerTransportSettingsError\n }\n \n type MailerQuery {\n getSettings: MailerTransportSettingsResponse!\n }\n \n input MailerTransportSettingsInput {\n host: String!\n port: Number\n user: String!\n password: String\n from: String!\n replyTo: String\n }\n \n type MailerMutation {\n saveSettings(data: MailerTransportSettingsInput!): MailerTransportSettingsResponse!\n }\n \n extend type Query {\n mailer: MailerQuery\n }\n extend type Mutation {\n mailer: MailerMutation\n }\n `,\n resolvers: {\n Query: {\n mailer: emptyResolver\n },\n MailerQuery: {\n getSettings: async (_, __, context) => {\n try {\n const settings = await context.mailer.getSettings();\n /**\n * We want to remove the password from the response, if it exists.\n */\n if (settings?.password) {\n // @ts-ignore\n delete settings.password;\n }\n return new Response(settings);\n } catch (ex) {\n return new ErrorResponse(ex);\n }\n }\n },\n Mutation: {\n mailer: emptyResolver\n },\n MailerMutation: {\n saveSettings: async (_, args: any, context) => {\n try {\n const settings = await context.mailer.saveSettings({\n input: args.data\n });\n /**\n * We want to remove the password from the response, if it exists.\n */\n if (settings?.password) {\n // @ts-ignore\n delete settings.password;\n }\n return new Response(settings);\n } catch (ex) {\n return new ErrorResponse(ex);\n }\n }\n }\n }\n });\n};\n"],"mappings":";;;;;;;AAAA;;AAGA,MAAMA,aAAa,GAAG,OAAO,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"}
1
+ {"version":3,"names":["ErrorResponse","GraphQLSchemaPlugin","Response","GetSettingsUseCase","SaveSettingsUseCase","getSecret","emptyResolver","createSettingsGraphQL","typeDefs","resolvers","Query","mailer","MailerQuery","getSettings","_","__","context","container","resolve","result","execute","settings","value","password","settingsWithoutPassword","ex","Mutation","MailerMutation","saveSettings","args","data","isFail","error"],"sources":["settings.ts"],"sourcesContent":["import { ErrorResponse, GraphQLSchemaPlugin, Response } from \"@webiny/handler-graphql\";\nimport { GetSettingsUseCase } from \"~/features/GetSettings/abstractions.js\";\nimport { SaveSettingsUseCase } from \"~/features/SaveSettings/abstractions.js\";\nimport type { Context } from \"@webiny/api/types.js\";\nimport { getSecret } from \"~/features/Encryption/utils/secret.js\";\n\nconst emptyResolver = () => ({});\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 }\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 // First check of encryption key is set!\n // If not, this function will throw an error.\n // TODO: refactor this to make more sense.\n getSecret();\n\n const getSettings = context.container.resolve(GetSettingsUseCase);\n const result = await getSettings.execute();\n\n const settings = result.value;\n\n // Remove password from response\n if (settings?.password) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { password, ...settingsWithoutPassword } = settings;\n return new Response(settingsWithoutPassword);\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 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 const settings = result.value;\n\n // Remove password from response\n // TODO: create a GraphQL output mapper\n if (settings?.password) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { password, ...settingsWithoutPassword } = settings;\n return new Response(settingsWithoutPassword);\n }\n return new Response(settings);\n } catch (ex) {\n return new ErrorResponse(ex);\n }\n }\n }\n }\n });\n};\n"],"mappings":"AAAA,SAASA,aAAa,EAAEC,mBAAmB,EAAEC,QAAQ,QAAQ,yBAAyB;AACtF,SAASC,kBAAkB;AAC3B,SAASC,mBAAmB;AAE5B,SAASC,SAAS;AAElB,MAAMC,aAAa,GAAGA,CAAA,MAAO,CAAC,CAAC,CAAC;AAEhC,OAAO,MAAMC,qBAAqB,GAAGA,CAAA,KAAM;EACvC,OAAO,IAAIN,mBAAmB,CAAU;IACpCO,QAAQ,EAAE;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;IACDC,SAAS,EAAE;MACPC,KAAK,EAAE;QACHC,MAAM,EAAEL;MACZ,CAAC;MACDM,WAAW,EAAE;QACTC,WAAW,EAAE,MAAAA,CAAOC,CAAC,EAAEC,EAAE,EAAEC,OAAO,KAAK;UACnC,IAAI;YACA;YACA;YACA;YACAX,SAAS,CAAC,CAAC;YAEX,MAAMQ,WAAW,GAAGG,OAAO,CAACC,SAAS,CAACC,OAAO,CAACf,kBAAkB,CAAC;YACjE,MAAMgB,MAAM,GAAG,MAAMN,WAAW,CAACO,OAAO,CAAC,CAAC;YAE1C,MAAMC,QAAQ,GAAGF,MAAM,CAACG,KAAK;;YAE7B;YACA,IAAID,QAAQ,EAAEE,QAAQ,EAAE;cACpB;cACA,MAAM;gBAAEA,QAAQ;gBAAE,GAAGC;cAAwB,CAAC,GAAGH,QAAQ;cACzD,OAAO,IAAInB,QAAQ,CAACsB,uBAAuB,CAAC;YAChD;YACA,OAAO,IAAItB,QAAQ,CAACmB,QAAQ,CAAC;UACjC,CAAC,CAAC,OAAOI,EAAE,EAAE;YACT,OAAO,IAAIzB,aAAa,CAACyB,EAAE,CAAC;UAChC;QACJ;MACJ,CAAC;MACDC,QAAQ,EAAE;QACNf,MAAM,EAAEL;MACZ,CAAC;MACDqB,cAAc,EAAE;QACZC,YAAY,EAAE,MAAAA,CAAOd,CAAC,EAAEe,IAAS,EAAEb,OAAO,KAAK;UAC3C,IAAI;YACA,MAAMY,YAAY,GAAGZ,OAAO,CAACC,SAAS,CAACC,OAAO,CAACd,mBAAmB,CAAC;YACnE,MAAMe,MAAM,GAAG,MAAMS,YAAY,CAACR,OAAO,CAACS,IAAI,CAACC,IAAI,CAAC;YAEpD,IAAIX,MAAM,CAACY,MAAM,CAAC,CAAC,EAAE;cACjB,OAAO,IAAI/B,aAAa,CAACmB,MAAM,CAACa,KAAK,CAAC;YAC1C;YAEA,MAAMX,QAAQ,GAAGF,MAAM,CAACG,KAAK;;YAE7B;YACA;YACA,IAAID,QAAQ,EAAEE,QAAQ,EAAE;cACpB;cACA,MAAM;gBAAEA,QAAQ;gBAAE,GAAGC;cAAwB,CAAC,GAAGH,QAAQ;cACzD,OAAO,IAAInB,QAAQ,CAACsB,uBAAuB,CAAC;YAChD;YACA,OAAO,IAAItB,QAAQ,CAACmB,QAAQ,CAAC;UACjC,CAAC,CAAC,OAAOI,EAAE,EAAE;YACT,OAAO,IAAIzB,aAAa,CAACyB,EAAE,CAAC;UAChC;QACJ;MACJ;IACJ;EACJ,CAAC,CAAC;AACN,CAAC","ignoreList":[]}
package/index.d.ts CHANGED
@@ -1,8 +1,4 @@
1
- import { PluginCollection } from "@webiny/plugins/types";
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>[];
1
+ export { MailerService } from "./domain/MailerService/abstractions.js";
2
+ export type { IMailerService, IMailerServiceErrors } from "./domain/MailerService/abstractions.js";
3
+ export declare const createMailerContext: () => import("@webiny/api").ContextPlugin<import("@webiny/api/types.js").Context>;
4
+ export declare const createMailerGraphQL: () => import("@webiny/handler-graphql/index.js").GraphQLSchemaPlugin<import("@webiny/api/types.js").Context>;