@webiny/api-mailer 0.0.0-unstable.6f45466a1d → 0.0.0-unstable.7be00a75a9

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 (129) hide show
  1. package/constants.js +2 -1
  2. package/constants.js.map +1 -1
  3. package/domain/CodeMailerSettings/abstractions.d.ts +8 -0
  4. package/domain/CodeMailerSettings/abstractions.js +5 -0
  5. package/domain/CodeMailerSettings/abstractions.js.map +1 -0
  6. package/domain/MailTransport/abstractions.d.ts +8 -0
  7. package/domain/MailTransport/abstractions.js +4 -2
  8. package/domain/MailTransport/abstractions.js.map +1 -1
  9. package/domain/MailerService/abstractions.js +2 -1
  10. package/domain/MailerService/abstractions.js.map +1 -1
  11. package/domain/MailerService/errors.js +22 -24
  12. package/domain/MailerService/errors.js.map +1 -1
  13. package/domain/errors.d.ts +8 -4
  14. package/domain/errors.js +41 -37
  15. package/domain/errors.js.map +1 -1
  16. package/exports/api/mailer.d.ts +4 -0
  17. package/exports/api/mailer.js +4 -0
  18. package/features/CodeMailerSettings/CodeMailerSettingsImpl.d.ts +12 -0
  19. package/features/CodeMailerSettings/CodeMailerSettingsImpl.js +23 -0
  20. package/features/CodeMailerSettings/CodeMailerSettingsImpl.js.map +1 -0
  21. package/features/CodeMailerSettings/feature.d.ts +4 -0
  22. package/features/CodeMailerSettings/feature.js +11 -0
  23. package/features/CodeMailerSettings/feature.js.map +1 -0
  24. package/features/DummyTransport/DummyMailTransport.js +11 -9
  25. package/features/DummyTransport/DummyMailTransport.js.map +1 -1
  26. package/features/DummyTransport/DummyMailTransportFactory.d.ts +1 -0
  27. package/features/DummyTransport/DummyMailTransportFactory.js +10 -6
  28. package/features/DummyTransport/DummyMailTransportFactory.js.map +1 -1
  29. package/features/DummyTransport/feature.d.ts +4 -1
  30. package/features/DummyTransport/feature.js +6 -5
  31. package/features/DummyTransport/feature.js.map +1 -1
  32. package/features/GetSettings/GetSettingsRepository.d.ts +6 -5
  33. package/features/GetSettings/GetSettingsRepository.js +44 -29
  34. package/features/GetSettings/GetSettingsRepository.js.map +1 -1
  35. package/features/GetSettings/GetSettingsUseCase.d.ts +3 -4
  36. package/features/GetSettings/GetSettingsUseCase.js +13 -10
  37. package/features/GetSettings/GetSettingsUseCase.js.map +1 -1
  38. package/features/GetSettings/abstractions.d.ts +11 -5
  39. package/features/GetSettings/abstractions.js +3 -2
  40. package/features/GetSettings/abstractions.js.map +1 -1
  41. package/features/GetSettings/feature.d.ts +4 -1
  42. package/features/GetSettings/feature.js +7 -6
  43. package/features/GetSettings/feature.js.map +1 -1
  44. package/features/GetSettings/index.d.ts +1 -1
  45. package/features/GetSettings/index.js +1 -3
  46. package/features/MailerService/ActiveTransport.d.ts +10 -0
  47. package/features/MailerService/ActiveTransport.js +24 -0
  48. package/features/MailerService/ActiveTransport.js.map +1 -0
  49. package/features/MailerService/MailerService.d.ts +3 -2
  50. package/features/MailerService/MailerService.js +39 -42
  51. package/features/MailerService/MailerService.js.map +1 -1
  52. package/features/MailerService/feature.d.ts +4 -1
  53. package/features/MailerService/feature.js +8 -5
  54. package/features/MailerService/feature.js.map +1 -1
  55. package/features/SaveSettings/SaveSettingsRepository.d.ts +1 -1
  56. package/features/SaveSettings/SaveSettingsRepository.js +30 -44
  57. package/features/SaveSettings/SaveSettingsRepository.js.map +1 -1
  58. package/features/SaveSettings/SaveSettingsUseCase.d.ts +6 -2
  59. package/features/SaveSettings/SaveSettingsUseCase.js +41 -41
  60. package/features/SaveSettings/SaveSettingsUseCase.js.map +1 -1
  61. package/features/SaveSettings/abstractions.d.ts +20 -12
  62. package/features/SaveSettings/abstractions.js +5 -8
  63. package/features/SaveSettings/abstractions.js.map +1 -1
  64. package/features/SaveSettings/events.d.ts +3 -3
  65. package/features/SaveSettings/events.js +17 -12
  66. package/features/SaveSettings/events.js.map +1 -1
  67. package/features/SaveSettings/feature.d.ts +4 -1
  68. package/features/SaveSettings/feature.js +7 -6
  69. package/features/SaveSettings/feature.js.map +1 -1
  70. package/features/SaveSettings/index.d.ts +1 -1
  71. package/features/SaveSettings/index.js +1 -3
  72. package/features/SaveSettings/validation.d.ts +3 -17
  73. package/features/SaveSettings/validation.js +14 -13
  74. package/features/SaveSettings/validation.js.map +1 -1
  75. package/features/SendMail/SendMailUseCase.d.ts +1 -1
  76. package/features/SendMail/SendMailUseCase.js +44 -48
  77. package/features/SendMail/SendMailUseCase.js.map +1 -1
  78. package/features/SendMail/abstractions.d.ts +7 -7
  79. package/features/SendMail/abstractions.js +5 -8
  80. package/features/SendMail/abstractions.js.map +1 -1
  81. package/features/SendMail/events.d.ts +4 -4
  82. package/features/SendMail/events.js +24 -17
  83. package/features/SendMail/events.js.map +1 -1
  84. package/features/SendMail/feature.d.ts +4 -1
  85. package/features/SendMail/feature.js +6 -5
  86. package/features/SendMail/feature.js.map +1 -1
  87. package/features/SendMail/index.d.ts +1 -0
  88. package/features/SendMail/index.js +1 -0
  89. package/features/SmtpTransport/SmtpConfig.js +20 -24
  90. package/features/SmtpTransport/SmtpConfig.js.map +1 -1
  91. package/features/SmtpTransport/SmtpMailTransport.d.ts +51 -1
  92. package/features/SmtpTransport/SmtpMailTransport.js +47 -55
  93. package/features/SmtpTransport/SmtpMailTransport.js.map +1 -1
  94. package/features/SmtpTransport/SmtpMailTransportFactory.d.ts +1 -0
  95. package/features/SmtpTransport/SmtpMailTransportFactory.js +10 -6
  96. package/features/SmtpTransport/SmtpMailTransportFactory.js.map +1 -1
  97. package/features/SmtpTransport/feature.d.ts +4 -1
  98. package/features/SmtpTransport/feature.js +6 -5
  99. package/features/SmtpTransport/feature.js.map +1 -1
  100. package/graphql/settings.js +58 -66
  101. package/graphql/settings.js.map +1 -1
  102. package/index.js +12 -16
  103. package/index.js.map +1 -1
  104. package/package.json +29 -32
  105. package/types.js +0 -3
  106. package/utils/isMailboxAddress.d.ts +6 -0
  107. package/utils/isMailboxAddress.js +5 -0
  108. package/utils/isMailboxAddress.js.map +1 -0
  109. package/domain/Encryption/abstractions.d.ts +0 -8
  110. package/domain/Encryption/abstractions.js +0 -4
  111. package/domain/Encryption/abstractions.js.map +0 -1
  112. package/features/Encryption/PasswordEncryption.d.ts +0 -9
  113. package/features/Encryption/PasswordEncryption.js +0 -23
  114. package/features/Encryption/PasswordEncryption.js.map +0 -1
  115. package/features/Encryption/feature.d.ts +0 -1
  116. package/features/Encryption/feature.js +0 -10
  117. package/features/Encryption/feature.js.map +0 -1
  118. package/features/Encryption/utils/password.d.ts +0 -7
  119. package/features/Encryption/utils/password.js +0 -56
  120. package/features/Encryption/utils/password.js.map +0 -1
  121. package/features/Encryption/utils/secret.d.ts +0 -1
  122. package/features/Encryption/utils/secret.js +0 -11
  123. package/features/Encryption/utils/secret.js.map +0 -1
  124. package/features/GetSettings/index.js.map +0 -1
  125. package/features/MailerService/TransportFactory.d.ts +0 -2
  126. package/features/MailerService/TransportFactory.js +0 -31
  127. package/features/MailerService/TransportFactory.js.map +0 -1
  128. package/features/SaveSettings/index.js.map +0 -1
  129. package/types.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["Result","Encryption","GetSettingsRepository","KeyValueStore","MAILER_TRANSPORT_SETTINGS","GetSettingsRepositoryImpl","constructor","keyValueStore","encryption","get","result","isFail","ok","settings","value","password","decrypt","String","transportSettings","host","port","Number","user","from","replyTo","undefined","GetSettingsRepositoryImplementation","createImplementation","implementation","dependencies"],"sources":["GetSettingsRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { Encryption } from \"~/domain/Encryption/abstractions.js\";\nimport { GetSettingsRepository } from \"./abstractions.js\";\nimport type { TransportSettings } from \"~/types.js\";\nimport { KeyValueStore } from \"@webiny/api-core/features/keyValueStore/index.js\";\nimport { MAILER_TRANSPORT_SETTINGS } from \"~/constants.js\";\n\nclass GetSettingsRepositoryImpl implements GetSettingsRepository.Interface {\n constructor(\n private keyValueStore: KeyValueStore.Interface,\n private encryption: Encryption.Interface\n ) {}\n\n async get(): Promise<Result<TransportSettings | null>> {\n const result = await this.keyValueStore.get<TransportSettings>(MAILER_TRANSPORT_SETTINGS);\n\n if (result.isFail()) {\n return Result.ok(null);\n }\n\n const settings = result.value;\n if (!settings) {\n return Result.ok(null);\n }\n\n // Decrypt password if present\n const password = settings.password\n ? await this.encryption.decrypt(String(settings.password))\n : \"\";\n\n const transportSettings: TransportSettings = {\n host: String(settings.host || \"\"),\n port: Number(settings.port || 25),\n user: String(settings.user || \"\"),\n password,\n from: String(settings.from || \"\"),\n replyTo: settings.replyTo ? String(settings.replyTo) : undefined\n };\n\n return Result.ok(transportSettings);\n }\n}\n\nexport const GetSettingsRepositoryImplementation = GetSettingsRepository.createImplementation({\n implementation: GetSettingsRepositoryImpl,\n dependencies: [KeyValueStore, Encryption]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,UAAU;AACnB,SAASC,qBAAqB;AAE9B,SAASC,aAAa,QAAQ,kDAAkD;AAChF,SAASC,yBAAyB;AAElC,MAAMC,yBAAyB,CAA4C;EACvEC,WAAWA,CACCC,aAAsC,EACtCC,UAAgC,EAC1C;IAAA,KAFUD,aAAsC,GAAtCA,aAAsC;IAAA,KACtCC,UAAgC,GAAhCA,UAAgC;EACzC;EAEH,MAAMC,GAAGA,CAAA,EAA8C;IACnD,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACH,aAAa,CAACE,GAAG,CAAoBL,yBAAyB,CAAC;IAEzF,IAAIM,MAAM,CAACC,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOX,MAAM,CAACY,EAAE,CAAC,IAAI,CAAC;IAC1B;IAEA,MAAMC,QAAQ,GAAGH,MAAM,CAACI,KAAK;IAC7B,IAAI,CAACD,QAAQ,EAAE;MACX,OAAOb,MAAM,CAACY,EAAE,CAAC,IAAI,CAAC;IAC1B;;IAEA;IACA,MAAMG,QAAQ,GAAGF,QAAQ,CAACE,QAAQ,GAC5B,MAAM,IAAI,CAACP,UAAU,CAACQ,OAAO,CAACC,MAAM,CAACJ,QAAQ,CAACE,QAAQ,CAAC,CAAC,GACxD,EAAE;IAER,MAAMG,iBAAoC,GAAG;MACzCC,IAAI,EAAEF,MAAM,CAACJ,QAAQ,CAACM,IAAI,IAAI,EAAE,CAAC;MACjCC,IAAI,EAAEC,MAAM,CAACR,QAAQ,CAACO,IAAI,IAAI,EAAE,CAAC;MACjCE,IAAI,EAAEL,MAAM,CAACJ,QAAQ,CAACS,IAAI,IAAI,EAAE,CAAC;MACjCP,QAAQ;MACRQ,IAAI,EAAEN,MAAM,CAACJ,QAAQ,CAACU,IAAI,IAAI,EAAE,CAAC;MACjCC,OAAO,EAAEX,QAAQ,CAACW,OAAO,GAAGP,MAAM,CAACJ,QAAQ,CAACW,OAAO,CAAC,GAAGC;IAC3D,CAAC;IAED,OAAOzB,MAAM,CAACY,EAAE,CAACM,iBAAiB,CAAC;EACvC;AACJ;AAEA,OAAO,MAAMQ,mCAAmC,GAAGxB,qBAAqB,CAACyB,oBAAoB,CAAC;EAC1FC,cAAc,EAAEvB,yBAAyB;EACzCwB,YAAY,EAAE,CAAC1B,aAAa,EAAEF,UAAU;AAC5C,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/GetSettings/GetSettingsRepository.js","sources":["../../../src/features/GetSettings/GetSettingsRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { Encryption } from \"@webiny/api-core/features/encryption/index.js\";\nimport { KeyValueStore } from \"@webiny/api-core/features/keyValueStore/index.js\";\nimport { GetSettingsRepository, type ISettingsWithSource } from \"./abstractions.js\";\nimport { CodeMailerSettings } from \"~/domain/CodeMailerSettings/abstractions.js\";\nimport type { TransportSettings } from \"~/types.js\";\nimport { MAILER_TRANSPORT_SETTINGS } from \"~/constants.js\";\n\nclass GetSettingsRepositoryImpl implements GetSettingsRepository.Interface {\n constructor(\n private keyValueStore: KeyValueStore.Interface,\n private encryption: Encryption.Interface,\n private codeSettings: CodeMailerSettings.Interface\n ) {}\n\n async get(transportName: string): Promise<Result<ISettingsWithSource>> {\n // Code-defined settings win over the KV store.\n const codeSettingsValue = this.codeSettings.get(transportName);\n if (codeSettingsValue !== null) {\n return Result.ok({\n settings: codeSettingsValue,\n source: \"code\"\n });\n }\n\n const result = await this.keyValueStore.get<TransportSettings>(MAILER_TRANSPORT_SETTINGS);\n\n if (result.isFail()) {\n return Result.ok({ settings: null, source: null });\n }\n\n const settings = result.value;\n if (!settings) {\n return Result.ok({ settings: null, source: null });\n }\n\n // Decrypt password if present.\n const password = settings.password\n ? await this.encryption.decrypt(String(settings.password))\n : \"\";\n\n const transportSettings: TransportSettings = {\n host: String(settings.host || \"\"),\n port: Number(settings.port || 25),\n user: String(settings.user || \"\"),\n password,\n from: String(settings.from || \"\"),\n replyTo: settings.replyTo ? String(settings.replyTo) : undefined\n };\n\n return Result.ok({ settings: transportSettings, source: \"storage\" });\n }\n}\n\nexport const GetSettingsRepositoryImplementation = GetSettingsRepository.createImplementation({\n implementation: GetSettingsRepositoryImpl,\n dependencies: [KeyValueStore, Encryption, CodeMailerSettings]\n});\n"],"names":["GetSettingsRepositoryImpl","keyValueStore","encryption","codeSettings","transportName","codeSettingsValue","Result","result","MAILER_TRANSPORT_SETTINGS","settings","password","String","transportSettings","Number","undefined","GetSettingsRepositoryImplementation","GetSettingsRepository","KeyValueStore","Encryption","CodeMailerSettings"],"mappings":";;;;;;AAQA,MAAMA;IACF,YACYC,aAAsC,EACtCC,UAAgC,EAChCC,YAA0C,CACpD;aAHUF,aAAa,GAAbA;aACAC,UAAU,GAAVA;aACAC,YAAY,GAAZA;IACT;IAEH,MAAM,IAAIC,aAAqB,EAAwC;QAEnE,MAAMC,oBAAoB,IAAI,CAAC,YAAY,CAAC,GAAG,CAACD;QAChD,IAAIC,AAAsB,SAAtBA,mBACA,OAAOC,OAAO,EAAE,CAAC;YACb,UAAUD;YACV,QAAQ;QACZ;QAGJ,MAAME,SAAS,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAoBC;QAE/D,IAAID,OAAO,MAAM,IACb,OAAOD,OAAO,EAAE,CAAC;YAAE,UAAU;YAAM,QAAQ;QAAK;QAGpD,MAAMG,WAAWF,OAAO,KAAK;QAC7B,IAAI,CAACE,UACD,OAAOH,OAAO,EAAE,CAAC;YAAE,UAAU;YAAM,QAAQ;QAAK;QAIpD,MAAMI,WAAWD,SAAS,QAAQ,GAC5B,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACE,OAAOF,SAAS,QAAQ,KACtD;QAEN,MAAMG,oBAAuC;YACzC,MAAMD,OAAOF,SAAS,IAAI,IAAI;YAC9B,MAAMI,OAAOJ,SAAS,IAAI,IAAI;YAC9B,MAAME,OAAOF,SAAS,IAAI,IAAI;YAC9BC;YACA,MAAMC,OAAOF,SAAS,IAAI,IAAI;YAC9B,SAASA,SAAS,OAAO,GAAGE,OAAOF,SAAS,OAAO,IAAIK;QAC3D;QAEA,OAAOR,OAAO,EAAE,CAAC;YAAE,UAAUM;YAAmB,QAAQ;QAAU;IACtE;AACJ;AAEO,MAAMG,sCAAsCC,sBAAsB,oBAAoB,CAAC;IAC1F,gBAAgBhB;IAChB,cAAc;QAACiB;QAAeC;QAAYC;KAAmB;AACjE"}
@@ -1,12 +1,11 @@
1
1
  import { Result } from "@webiny/feature/api";
2
- import { GetSettingsUseCase, GetSettingsRepository } from "./abstractions.js";
3
- import type { TransportSettings } from "../../types.js";
2
+ import { GetSettingsUseCase, GetSettingsRepository, type ISettingsWithSource } from "./abstractions.js";
4
3
  declare class GetSettingsUseCaseImpl implements GetSettingsUseCase.Interface {
5
4
  private repository;
6
5
  constructor(repository: GetSettingsRepository.Interface);
7
- execute(): Promise<Result<TransportSettings | null>>;
6
+ execute(transportName: string): Promise<Result<ISettingsWithSource>>;
8
7
  }
9
8
  export declare const GetSettingsUseCaseImplementation: typeof GetSettingsUseCaseImpl & {
10
- __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IGetSettingsUSeCase>;
9
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IGetSettingsUseCase>;
11
10
  };
12
11
  export {};
@@ -1,15 +1,18 @@
1
- import { GetSettingsUseCase, GetSettingsRepository } from "./abstractions.js";
1
+ import { GetSettingsRepository, GetSettingsUseCase } from "./abstractions.js";
2
2
  class GetSettingsUseCaseImpl {
3
- constructor(repository) {
4
- this.repository = repository;
5
- }
6
- execute() {
7
- return this.repository.get();
8
- }
3
+ constructor(repository){
4
+ this.repository = repository;
5
+ }
6
+ execute(transportName) {
7
+ return this.repository.get(transportName);
8
+ }
9
9
  }
10
- export const GetSettingsUseCaseImplementation = GetSettingsUseCase.createImplementation({
11
- implementation: GetSettingsUseCaseImpl,
12
- dependencies: [GetSettingsRepository]
10
+ const GetSettingsUseCaseImplementation = GetSettingsUseCase.createImplementation({
11
+ implementation: GetSettingsUseCaseImpl,
12
+ dependencies: [
13
+ GetSettingsRepository
14
+ ]
13
15
  });
16
+ export { GetSettingsUseCaseImplementation };
14
17
 
15
18
  //# sourceMappingURL=GetSettingsUseCase.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["GetSettingsUseCase","GetSettingsRepository","GetSettingsUseCaseImpl","constructor","repository","execute","get","GetSettingsUseCaseImplementation","createImplementation","implementation","dependencies"],"sources":["GetSettingsUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { GetSettingsUseCase, GetSettingsRepository } from \"./abstractions.js\";\nimport type { TransportSettings } from \"~/types.js\";\n\nclass GetSettingsUseCaseImpl implements GetSettingsUseCase.Interface {\n constructor(private repository: GetSettingsRepository.Interface) {}\n\n execute(): Promise<Result<TransportSettings | null>> {\n return this.repository.get();\n }\n}\n\nexport const GetSettingsUseCaseImplementation = GetSettingsUseCase.createImplementation({\n implementation: GetSettingsUseCaseImpl,\n dependencies: [GetSettingsRepository]\n});\n"],"mappings":"AACA,SAASA,kBAAkB,EAAEC,qBAAqB;AAGlD,MAAMC,sBAAsB,CAAyC;EACjEC,WAAWA,CAASC,UAA2C,EAAE;IAAA,KAA7CA,UAA2C,GAA3CA,UAA2C;EAAG;EAElEC,OAAOA,CAAA,EAA8C;IACjD,OAAO,IAAI,CAACD,UAAU,CAACE,GAAG,CAAC,CAAC;EAChC;AACJ;AAEA,OAAO,MAAMC,gCAAgC,GAAGP,kBAAkB,CAACQ,oBAAoB,CAAC;EACpFC,cAAc,EAAEP,sBAAsB;EACtCQ,YAAY,EAAE,CAACT,qBAAqB;AACxC,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/GetSettings/GetSettingsUseCase.js","sources":["../../../src/features/GetSettings/GetSettingsUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n GetSettingsUseCase,\n GetSettingsRepository,\n type ISettingsWithSource\n} from \"./abstractions.js\";\n\nclass GetSettingsUseCaseImpl implements GetSettingsUseCase.Interface {\n constructor(private repository: GetSettingsRepository.Interface) {}\n\n execute(transportName: string): Promise<Result<ISettingsWithSource>> {\n return this.repository.get(transportName);\n }\n}\n\nexport const GetSettingsUseCaseImplementation = GetSettingsUseCase.createImplementation({\n implementation: GetSettingsUseCaseImpl,\n dependencies: [GetSettingsRepository]\n});\n"],"names":["GetSettingsUseCaseImpl","repository","transportName","GetSettingsUseCaseImplementation","GetSettingsUseCase","GetSettingsRepository"],"mappings":";AAOA,MAAMA;IACF,YAAoBC,UAA2C,CAAE;aAA7CA,UAAU,GAAVA;IAA8C;IAElE,QAAQC,aAAqB,EAAwC;QACjE,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAACA;IAC/B;AACJ;AAEO,MAAMC,mCAAmCC,mBAAmB,oBAAoB,CAAC;IACpF,gBAAgBJ;IAChB,cAAc;QAACK;KAAsB;AACzC"}
@@ -1,16 +1,22 @@
1
1
  import { Result } from "@webiny/feature/api";
2
2
  import type { TransportSettings } from "../../types.js";
3
+ export type MailerSettingsSource = "code" | "storage" | null;
4
+ export interface ISettingsWithSource {
5
+ settings: TransportSettings | null;
6
+ source: MailerSettingsSource;
7
+ }
3
8
  export interface IGetSettingsRepository {
4
- get(): Promise<Result<TransportSettings | null>>;
9
+ get(transportName: string): Promise<Result<ISettingsWithSource>>;
5
10
  }
6
11
  export declare const GetSettingsRepository: import("@webiny/di").Abstraction<IGetSettingsRepository>;
7
12
  export declare namespace GetSettingsRepository {
8
13
  type Interface = IGetSettingsRepository;
14
+ type Return = Promise<Result<ISettingsWithSource>>;
9
15
  }
10
- export interface IGetSettingsUSeCase {
11
- execute(): Promise<Result<TransportSettings | null>>;
16
+ export interface IGetSettingsUseCase {
17
+ execute(transportName: string): Promise<Result<ISettingsWithSource>>;
12
18
  }
13
- export declare const GetSettingsUseCase: import("@webiny/di").Abstraction<IGetSettingsUSeCase>;
19
+ export declare const GetSettingsUseCase: import("@webiny/di").Abstraction<IGetSettingsUseCase>;
14
20
  export declare namespace GetSettingsUseCase {
15
- type Interface = IGetSettingsUSeCase;
21
+ type Interface = IGetSettingsUseCase;
16
22
  }
@@ -1,5 +1,6 @@
1
1
  import { createAbstraction } from "@webiny/feature/api";
2
- export const GetSettingsRepository = createAbstraction("GetSettingsRepository");
3
- export const GetSettingsUseCase = createAbstraction("GetSettingsUseCase");
2
+ const GetSettingsRepository = createAbstraction("GetSettingsRepository");
3
+ const GetSettingsUseCase = createAbstraction("GetSettingsUseCase");
4
+ export { GetSettingsRepository, GetSettingsUseCase };
4
5
 
5
6
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","GetSettingsRepository","GetSettingsUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { TransportSettings } from \"~/types.js\";\n\nexport interface IGetSettingsRepository {\n get(): Promise<Result<TransportSettings | null>>;\n}\n\nexport const GetSettingsRepository =\n createAbstraction<IGetSettingsRepository>(\"GetSettingsRepository\");\n\nexport namespace GetSettingsRepository {\n export type Interface = IGetSettingsRepository;\n}\n\nexport interface IGetSettingsUSeCase {\n execute(): Promise<Result<TransportSettings | null>>;\n}\n\nexport const GetSettingsUseCase = createAbstraction<IGetSettingsUSeCase>(\"GetSettingsUseCase\");\n\nexport namespace GetSettingsUseCase {\n export type Interface = IGetSettingsUSeCase;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAQvD,OAAO,MAAMC,qBAAqB,GAC9BD,iBAAiB,CAAyB,uBAAuB,CAAC;AAUtE,OAAO,MAAME,kBAAkB,GAAGF,iBAAiB,CAAsB,oBAAoB,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/GetSettings/abstractions.js","sources":["../../../src/features/GetSettings/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { TransportSettings } from \"~/types.js\";\n\nexport type MailerSettingsSource = \"code\" | \"storage\" | null;\n\nexport interface ISettingsWithSource {\n settings: TransportSettings | null;\n source: MailerSettingsSource;\n}\n\nexport interface IGetSettingsRepository {\n get(transportName: string): Promise<Result<ISettingsWithSource>>;\n}\n\nexport const GetSettingsRepository =\n createAbstraction<IGetSettingsRepository>(\"GetSettingsRepository\");\n\nexport namespace GetSettingsRepository {\n export type Interface = IGetSettingsRepository;\n export type Return = Promise<Result<ISettingsWithSource>>;\n}\n\nexport interface IGetSettingsUseCase {\n execute(transportName: string): Promise<Result<ISettingsWithSource>>;\n}\n\nexport const GetSettingsUseCase = createAbstraction<IGetSettingsUseCase>(\"GetSettingsUseCase\");\n\nexport namespace GetSettingsUseCase {\n export type Interface = IGetSettingsUseCase;\n}\n"],"names":["GetSettingsRepository","createAbstraction","GetSettingsUseCase"],"mappings":";AAeO,MAAMA,wBACTC,kBAA0C;AAWvC,MAAMC,qBAAqBD,kBAAuC"}
@@ -1 +1,4 @@
1
- export declare const GetSettingsFeature: import("@webiny/feature/api/createFeature.js").FeatureDefinition<unknown>;
1
+ export declare const GetSettingsFeature: {
2
+ name: string;
3
+ register(container: import("@webiny/di").Container): void;
4
+ };
@@ -1,12 +1,13 @@
1
1
  import { createFeature } from "@webiny/feature/api";
2
2
  import { GetSettingsRepositoryImplementation } from "./GetSettingsRepository.js";
3
3
  import { GetSettingsUseCaseImplementation } from "./GetSettingsUseCase.js";
4
- export const GetSettingsFeature = createFeature({
5
- name: "GetSettings",
6
- register(container) {
7
- container.register(GetSettingsRepositoryImplementation).inSingletonScope();
8
- container.register(GetSettingsUseCaseImplementation);
9
- }
4
+ const GetSettingsFeature = createFeature({
5
+ name: "GetSettings",
6
+ register (container) {
7
+ container.register(GetSettingsRepositoryImplementation).inSingletonScope();
8
+ container.register(GetSettingsUseCaseImplementation);
9
+ }
10
10
  });
11
+ export { GetSettingsFeature };
11
12
 
12
13
  //# sourceMappingURL=feature.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createFeature","GetSettingsRepositoryImplementation","GetSettingsUseCaseImplementation","GetSettingsFeature","name","register","container","inSingletonScope"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { GetSettingsRepositoryImplementation } from \"./GetSettingsRepository.js\";\nimport { GetSettingsUseCaseImplementation } from \"./GetSettingsUseCase.js\";\n\nexport const GetSettingsFeature = createFeature({\n name: \"GetSettings\",\n register(container) {\n container.register(GetSettingsRepositoryImplementation).inSingletonScope();\n container.register(GetSettingsUseCaseImplementation);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,mCAAmC;AAC5C,SAASC,gCAAgC;AAEzC,OAAO,MAAMC,kBAAkB,GAAGH,aAAa,CAAC;EAC5CI,IAAI,EAAE,aAAa;EACnBC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACJ,mCAAmC,CAAC,CAACM,gBAAgB,CAAC,CAAC;IAC1ED,SAAS,CAACD,QAAQ,CAACH,gCAAgC,CAAC;EACxD;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/GetSettings/feature.js","sources":["../../../src/features/GetSettings/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { GetSettingsRepositoryImplementation } from \"./GetSettingsRepository.js\";\nimport { GetSettingsUseCaseImplementation } from \"./GetSettingsUseCase.js\";\n\nexport const GetSettingsFeature = createFeature({\n name: \"GetSettings\",\n register(container) {\n container.register(GetSettingsRepositoryImplementation).inSingletonScope();\n container.register(GetSettingsUseCaseImplementation);\n }\n});\n"],"names":["GetSettingsFeature","createFeature","container","GetSettingsRepositoryImplementation","GetSettingsUseCaseImplementation"],"mappings":";;;AAIO,MAAMA,qBAAqBC,cAAc;IAC5C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,qCAAqC,gBAAgB;QACxED,UAAU,QAAQ,CAACE;IACvB;AACJ"}
@@ -1 +1 @@
1
- export { GetSettingsUseCase } from "./abstractions.js";
1
+ export { GetSettingsUseCase, GetSettingsRepository } from "./abstractions.js";
@@ -1,3 +1 @@
1
- export { GetSettingsUseCase } from "./abstractions.js";
2
-
3
- //# sourceMappingURL=index.js.map
1
+ export { GetSettingsRepository, GetSettingsUseCase } from "./abstractions.js";
@@ -0,0 +1,10 @@
1
+ import { ActiveTransport as ActiveTransportAbstraction, MailTransportFactory } from "../../domain/MailTransport/abstractions.js";
2
+ declare class ActiveTransportImpl implements ActiveTransportAbstraction.Interface {
3
+ private transportFactories;
4
+ constructor(transportFactories: MailTransportFactory.Interface[]);
5
+ name(): string | null;
6
+ }
7
+ export declare const ActiveTransport: typeof ActiveTransportImpl & {
8
+ __abstraction: import("@webiny/di").Abstraction<import("~/domain/MailTransport/abstractions.js").IActiveTransport>;
9
+ };
10
+ export {};
@@ -0,0 +1,24 @@
1
+ import { ActiveTransport, MailTransportFactory } from "../../domain/MailTransport/abstractions.js";
2
+ class ActiveTransportImpl {
3
+ constructor(transportFactories){
4
+ this.transportFactories = transportFactories;
5
+ }
6
+ name() {
7
+ if (0 === this.transportFactories.length) return null;
8
+ return this.transportFactories[this.transportFactories.length - 1].name;
9
+ }
10
+ }
11
+ const ActiveTransport_ActiveTransport = ActiveTransport.createImplementation({
12
+ implementation: ActiveTransportImpl,
13
+ dependencies: [
14
+ [
15
+ MailTransportFactory,
16
+ {
17
+ multiple: true
18
+ }
19
+ ]
20
+ ]
21
+ });
22
+ export { ActiveTransport_ActiveTransport as ActiveTransport };
23
+
24
+ //# sourceMappingURL=ActiveTransport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/MailerService/ActiveTransport.js","sources":["../../../src/features/MailerService/ActiveTransport.ts"],"sourcesContent":["import {\n ActiveTransport as ActiveTransportAbstraction,\n MailTransportFactory\n} from \"~/domain/MailTransport/abstractions.js\";\n\nclass ActiveTransportImpl implements ActiveTransportAbstraction.Interface {\n constructor(private transportFactories: MailTransportFactory.Interface[]) {}\n\n name(): string | null {\n if (this.transportFactories.length === 0) {\n return null;\n }\n return this.transportFactories[this.transportFactories.length - 1].name;\n }\n}\n\nexport const ActiveTransport = ActiveTransportAbstraction.createImplementation({\n implementation: ActiveTransportImpl,\n dependencies: [[MailTransportFactory, { multiple: true }]]\n});\n"],"names":["ActiveTransportImpl","transportFactories","ActiveTransport","ActiveTransportAbstraction","MailTransportFactory"],"mappings":";AAKA,MAAMA;IACF,YAAoBC,kBAAoD,CAAE;aAAtDA,kBAAkB,GAAlBA;IAAuD;IAE3E,OAAsB;QAClB,IAAI,AAAmC,MAAnC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAC9B,OAAO;QAEX,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,EAAE,CAAC,IAAI;IAC3E;AACJ;AAEO,MAAMC,kCAAkBC,gBAAAA,oBAA+C,CAAC;IAC3E,gBAAgBH;IAChB,cAAc;QAAC;YAACI;YAAsB;gBAAE,UAAU;YAAK;SAAE;KAAC;AAC9D"}
@@ -1,11 +1,12 @@
1
1
  import { MailerService as Abstraction } from "../../domain/MailerService/abstractions.js";
2
- import { MailTransportFactory } from "../../domain/MailTransport/abstractions.js";
2
+ import { ActiveTransport, MailTransportFactory } from "../../domain/MailTransport/abstractions.js";
3
3
  import { GetSettingsRepository } from "../GetSettings/abstractions.js";
4
4
  import type { TransportSendData } from "../../types.js";
5
5
  declare class MailerServiceImpl implements Abstraction.Interface {
6
6
  private getSettingsRepository;
7
+ private activeTransport;
7
8
  private transportFactories;
8
- constructor(getSettingsRepository: GetSettingsRepository.Interface, transportFactories: MailTransportFactory.Interface[]);
9
+ constructor(getSettingsRepository: GetSettingsRepository.Interface, activeTransport: ActiveTransport.Interface, transportFactories: MailTransportFactory.Interface[]);
9
10
  sendMail<T = any>(data: TransportSendData): Abstraction.Return<T>;
10
11
  private getTransport;
11
12
  }
@@ -1,52 +1,49 @@
1
1
  import { Result } from "@webiny/feature/api";
2
- import { MailerService as Abstraction } from "../../domain/MailerService/abstractions.js";
3
- import { NoTransportAvailableError, NoSettingsConfiguredError, TransportSendError } from "../../domain/MailerService/errors.js";
4
- import { MailTransportFactory } from "../../domain/MailTransport/abstractions.js";
2
+ import { MailerService } from "../../domain/MailerService/abstractions.js";
3
+ import { NoSettingsConfiguredError, NoTransportAvailableError, TransportSendError } from "../../domain/MailerService/errors.js";
4
+ import { ActiveTransport, MailTransportFactory } from "../../domain/MailTransport/abstractions.js";
5
5
  import { GetSettingsRepository } from "../GetSettings/abstractions.js";
6
- import { getDefaultSettingsFromEnv } from "./TransportFactory.js";
7
6
  class MailerServiceImpl {
8
- constructor(getSettingsRepository, transportFactories) {
9
- this.getSettingsRepository = getSettingsRepository;
10
- this.transportFactories = transportFactories;
11
- }
12
- async sendMail(data) {
13
- // Get settings from repository or environment variables
14
- const result = await this.getSettingsRepository.get();
15
- const settings = result.value ?? getDefaultSettingsFromEnv();
16
- if (!settings) {
17
- return Result.fail(new NoSettingsConfiguredError());
7
+ constructor(getSettingsRepository, activeTransport, transportFactories){
8
+ this.getSettingsRepository = getSettingsRepository;
9
+ this.activeTransport = activeTransport;
10
+ this.transportFactories = transportFactories;
18
11
  }
19
-
20
- // Get and configure transport
21
- const transport = await this.getTransport(settings);
22
- if (!transport) {
23
- return Result.fail(new NoTransportAvailableError());
24
- }
25
- try {
26
- const response = await transport.send(data);
27
-
28
- // If transport.send returned an error in the response
29
- if (response.error) {
30
- return Result.fail(new TransportSendError(response.error));
31
- }
32
- return Result.ok(response);
33
- } catch (error) {
34
- return Result.fail(new TransportSendError(error));
12
+ async sendMail(data) {
13
+ const transportName = this.activeTransport.name();
14
+ if (!transportName) return Result.fail(new NoTransportAvailableError());
15
+ const result = await this.getSettingsRepository.get(transportName);
16
+ const { settings } = result.value;
17
+ if (!settings) return Result.fail(new NoSettingsConfiguredError());
18
+ const transport = await this.getTransport(transportName, settings);
19
+ if (!transport) return Result.fail(new NoTransportAvailableError());
20
+ try {
21
+ const response = await transport.send(data);
22
+ if (response.error) return Result.fail(new TransportSendError(response.error));
23
+ return Result.ok(response);
24
+ } catch (error) {
25
+ return Result.fail(new TransportSendError(error));
26
+ }
35
27
  }
36
- }
37
- async getTransport(settings) {
38
- if (this.transportFactories.length === 0) {
39
- return null;
28
+ async getTransport(transportName, settings) {
29
+ const factory = this.transportFactories.find((f)=>f.name === transportName);
30
+ if (!factory) return null;
31
+ return factory.createTransport(settings);
40
32
  }
41
- const factory = this.transportFactories[this.transportFactories.length - 1];
42
- return factory.createTransport(settings);
43
- }
44
33
  }
45
- export const MailerService = Abstraction.createImplementation({
46
- implementation: MailerServiceImpl,
47
- dependencies: [GetSettingsRepository, [MailTransportFactory, {
48
- multiple: true
49
- }]]
34
+ const MailerService_MailerService = MailerService.createImplementation({
35
+ implementation: MailerServiceImpl,
36
+ dependencies: [
37
+ GetSettingsRepository,
38
+ ActiveTransport,
39
+ [
40
+ MailTransportFactory,
41
+ {
42
+ multiple: true
43
+ }
44
+ ]
45
+ ]
50
46
  });
47
+ export { MailerService_MailerService as MailerService };
51
48
 
52
49
  //# sourceMappingURL=MailerService.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Result","MailerService","Abstraction","NoTransportAvailableError","NoSettingsConfiguredError","TransportSendError","MailTransportFactory","GetSettingsRepository","getDefaultSettingsFromEnv","MailerServiceImpl","constructor","getSettingsRepository","transportFactories","sendMail","data","result","get","settings","value","fail","transport","getTransport","response","send","error","ok","length","factory","createTransport","createImplementation","implementation","dependencies","multiple"],"sources":["MailerService.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { MailerService as Abstraction } from \"~/domain/MailerService/abstractions.js\";\nimport {\n NoTransportAvailableError,\n NoSettingsConfiguredError,\n TransportSendError\n} from \"~/domain/MailerService/errors.js\";\nimport { MailTransport, MailTransportFactory } from \"~/domain/MailTransport/abstractions.js\";\nimport { GetSettingsRepository } from \"../GetSettings/abstractions.js\";\nimport type { TransportSettings, TransportSendData } from \"~/types.js\";\nimport { getDefaultSettingsFromEnv } from \"./TransportFactory.js\";\n\nclass MailerServiceImpl implements Abstraction.Interface {\n constructor(\n private getSettingsRepository: GetSettingsRepository.Interface,\n private transportFactories: MailTransportFactory.Interface[]\n ) {}\n\n async sendMail<T = any>(data: TransportSendData): Abstraction.Return<T> {\n // Get settings from repository or environment variables\n const result = await this.getSettingsRepository.get();\n const settings = result.value ?? getDefaultSettingsFromEnv();\n\n if (!settings) {\n return Result.fail(new NoSettingsConfiguredError());\n }\n\n // Get and configure transport\n const transport = await this.getTransport(settings);\n\n if (!transport) {\n return Result.fail(new NoTransportAvailableError());\n }\n\n try {\n const response = await transport.send(data);\n\n // If transport.send returned an error in the response\n if (response.error) {\n return Result.fail(new TransportSendError(response.error));\n }\n\n return Result.ok(response);\n } catch (error) {\n return Result.fail(new TransportSendError(error));\n }\n }\n\n private async getTransport(\n settings: TransportSettings\n ): Promise<MailTransport.Interface | null> {\n if (this.transportFactories.length === 0) {\n return null;\n }\n\n const factory = this.transportFactories[this.transportFactories.length - 1];\n\n return factory.createTransport(settings);\n }\n}\n\nexport const MailerService = Abstraction.createImplementation({\n implementation: MailerServiceImpl,\n dependencies: [GetSettingsRepository, [MailTransportFactory, { multiple: true }]]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,aAAa,IAAIC,WAAW;AACrC,SACIC,yBAAyB,EACzBC,yBAAyB,EACzBC,kBAAkB;AAEtB,SAAwBC,oBAAoB;AAC5C,SAASC,qBAAqB;AAE9B,SAASC,yBAAyB;AAElC,MAAMC,iBAAiB,CAAkC;EACrDC,WAAWA,CACCC,qBAAsD,EACtDC,kBAAoD,EAC9D;IAAA,KAFUD,qBAAsD,GAAtDA,qBAAsD;IAAA,KACtDC,kBAAoD,GAApDA,kBAAoD;EAC7D;EAEH,MAAMC,QAAQA,CAAUC,IAAuB,EAAyB;IACpE;IACA,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACJ,qBAAqB,CAACK,GAAG,CAAC,CAAC;IACrD,MAAMC,QAAQ,GAAGF,MAAM,CAACG,KAAK,IAAIV,yBAAyB,CAAC,CAAC;IAE5D,IAAI,CAACS,QAAQ,EAAE;MACX,OAAOjB,MAAM,CAACmB,IAAI,CAAC,IAAIf,yBAAyB,CAAC,CAAC,CAAC;IACvD;;IAEA;IACA,MAAMgB,SAAS,GAAG,MAAM,IAAI,CAACC,YAAY,CAACJ,QAAQ,CAAC;IAEnD,IAAI,CAACG,SAAS,EAAE;MACZ,OAAOpB,MAAM,CAACmB,IAAI,CAAC,IAAIhB,yBAAyB,CAAC,CAAC,CAAC;IACvD;IAEA,IAAI;MACA,MAAMmB,QAAQ,GAAG,MAAMF,SAAS,CAACG,IAAI,CAACT,IAAI,CAAC;;MAE3C;MACA,IAAIQ,QAAQ,CAACE,KAAK,EAAE;QAChB,OAAOxB,MAAM,CAACmB,IAAI,CAAC,IAAId,kBAAkB,CAACiB,QAAQ,CAACE,KAAK,CAAC,CAAC;MAC9D;MAEA,OAAOxB,MAAM,CAACyB,EAAE,CAACH,QAAQ,CAAC;IAC9B,CAAC,CAAC,OAAOE,KAAK,EAAE;MACZ,OAAOxB,MAAM,CAACmB,IAAI,CAAC,IAAId,kBAAkB,CAACmB,KAAK,CAAC,CAAC;IACrD;EACJ;EAEA,MAAcH,YAAYA,CACtBJ,QAA2B,EACY;IACvC,IAAI,IAAI,CAACL,kBAAkB,CAACc,MAAM,KAAK,CAAC,EAAE;MACtC,OAAO,IAAI;IACf;IAEA,MAAMC,OAAO,GAAG,IAAI,CAACf,kBAAkB,CAAC,IAAI,CAACA,kBAAkB,CAACc,MAAM,GAAG,CAAC,CAAC;IAE3E,OAAOC,OAAO,CAACC,eAAe,CAACX,QAAQ,CAAC;EAC5C;AACJ;AAEA,OAAO,MAAMhB,aAAa,GAAGC,WAAW,CAAC2B,oBAAoB,CAAC;EAC1DC,cAAc,EAAErB,iBAAiB;EACjCsB,YAAY,EAAE,CAACxB,qBAAqB,EAAE,CAACD,oBAAoB,EAAE;IAAE0B,QAAQ,EAAE;EAAK,CAAC,CAAC;AACpF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/MailerService/MailerService.js","sources":["../../../src/features/MailerService/MailerService.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { MailerService as Abstraction } from \"~/domain/MailerService/abstractions.js\";\nimport {\n NoTransportAvailableError,\n NoSettingsConfiguredError,\n TransportSendError\n} from \"~/domain/MailerService/errors.js\";\nimport {\n ActiveTransport,\n MailTransport,\n MailTransportFactory\n} from \"~/domain/MailTransport/abstractions.js\";\nimport { GetSettingsRepository } from \"../GetSettings/abstractions.js\";\nimport type { TransportSettings, TransportSendData } from \"~/types.js\";\n\nclass MailerServiceImpl implements Abstraction.Interface {\n constructor(\n private getSettingsRepository: GetSettingsRepository.Interface,\n private activeTransport: ActiveTransport.Interface,\n private transportFactories: MailTransportFactory.Interface[]\n ) {}\n\n async sendMail<T = any>(data: TransportSendData): Abstraction.Return<T> {\n const transportName = this.activeTransport.name();\n\n if (!transportName) {\n return Result.fail(new NoTransportAvailableError());\n }\n\n const result = await this.getSettingsRepository.get(transportName);\n const { settings } = result.value;\n\n if (!settings) {\n return Result.fail(new NoSettingsConfiguredError());\n }\n\n const transport = await this.getTransport(transportName, settings);\n\n if (!transport) {\n return Result.fail(new NoTransportAvailableError());\n }\n\n try {\n const response = await transport.send(data);\n\n if (response.error) {\n return Result.fail(new TransportSendError(response.error));\n }\n\n return Result.ok(response);\n } catch (error) {\n return Result.fail(new TransportSendError(error));\n }\n }\n\n private async getTransport(\n transportName: string,\n settings: TransportSettings\n ): Promise<MailTransport.Interface | null> {\n const factory = this.transportFactories.find(f => f.name === transportName);\n if (!factory) {\n return null;\n }\n return factory.createTransport(settings);\n }\n}\n\nexport const MailerService = Abstraction.createImplementation({\n implementation: MailerServiceImpl,\n dependencies: [\n GetSettingsRepository,\n ActiveTransport,\n [MailTransportFactory, { multiple: true }]\n ]\n});\n"],"names":["MailerServiceImpl","getSettingsRepository","activeTransport","transportFactories","data","transportName","Result","NoTransportAvailableError","result","settings","NoSettingsConfiguredError","transport","response","TransportSendError","error","factory","f","MailerService","Abstraction","GetSettingsRepository","ActiveTransport","MailTransportFactory"],"mappings":";;;;;AAeA,MAAMA;IACF,YACYC,qBAAsD,EACtDC,eAA0C,EAC1CC,kBAAoD,CAC9D;aAHUF,qBAAqB,GAArBA;aACAC,eAAe,GAAfA;aACAC,kBAAkB,GAAlBA;IACT;IAEH,MAAM,SAAkBC,IAAuB,EAAyB;QACpE,MAAMC,gBAAgB,IAAI,CAAC,eAAe,CAAC,IAAI;QAE/C,IAAI,CAACA,eACD,OAAOC,OAAO,IAAI,CAAC,IAAIC;QAG3B,MAAMC,SAAS,MAAM,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAACH;QACpD,MAAM,EAAEI,QAAQ,EAAE,GAAGD,OAAO,KAAK;QAEjC,IAAI,CAACC,UACD,OAAOH,OAAO,IAAI,CAAC,IAAII;QAG3B,MAAMC,YAAY,MAAM,IAAI,CAAC,YAAY,CAACN,eAAeI;QAEzD,IAAI,CAACE,WACD,OAAOL,OAAO,IAAI,CAAC,IAAIC;QAG3B,IAAI;YACA,MAAMK,WAAW,MAAMD,UAAU,IAAI,CAACP;YAEtC,IAAIQ,SAAS,KAAK,EACd,OAAON,OAAO,IAAI,CAAC,IAAIO,mBAAmBD,SAAS,KAAK;YAG5D,OAAON,OAAO,EAAE,CAACM;QACrB,EAAE,OAAOE,OAAO;YACZ,OAAOR,OAAO,IAAI,CAAC,IAAIO,mBAAmBC;QAC9C;IACJ;IAEA,MAAc,aACVT,aAAqB,EACrBI,QAA2B,EACY;QACvC,MAAMM,UAAU,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAACC,CAAAA,IAAKA,EAAE,IAAI,KAAKX;QAC7D,IAAI,CAACU,SACD,OAAO;QAEX,OAAOA,QAAQ,eAAe,CAACN;IACnC;AACJ;AAEO,MAAMQ,8BAAgBC,cAAAA,oBAAgC,CAAC;IAC1D,gBAAgBlB;IAChB,cAAc;QACVmB;QACAC;QACA;YAACC;YAAsB;gBAAE,UAAU;YAAK;SAAE;KAC7C;AACL"}
@@ -1 +1,4 @@
1
- export declare const MailerServiceFeature: import("@webiny/feature/api/createFeature.js").FeatureDefinition<unknown>;
1
+ export declare const MailerServiceFeature: {
2
+ name: string;
3
+ register(container: import("@webiny/di").Container): void;
4
+ };
@@ -1,10 +1,13 @@
1
1
  import { createFeature } from "@webiny/feature/api";
2
2
  import { MailerService } from "./MailerService.js";
3
- export const MailerServiceFeature = createFeature({
4
- name: "Mailer/MailerService",
5
- register(container) {
6
- container.register(MailerService).inSingletonScope();
7
- }
3
+ import { ActiveTransport } from "./ActiveTransport.js";
4
+ const MailerServiceFeature = createFeature({
5
+ name: "Mailer/MailerService",
6
+ register (container) {
7
+ container.register(ActiveTransport).inSingletonScope();
8
+ container.register(MailerService).inSingletonScope();
9
+ }
8
10
  });
11
+ export { MailerServiceFeature };
9
12
 
10
13
  //# sourceMappingURL=feature.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createFeature","MailerService","MailerServiceFeature","name","register","container","inSingletonScope"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { MailerService } from \"./MailerService.js\";\n\nexport const MailerServiceFeature = createFeature({\n name: \"Mailer/MailerService\",\n register(container) {\n container.register(MailerService).inSingletonScope();\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,aAAa;AAEtB,OAAO,MAAMC,oBAAoB,GAAGF,aAAa,CAAC;EAC9CG,IAAI,EAAE,sBAAsB;EAC5BC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACH,aAAa,CAAC,CAACK,gBAAgB,CAAC,CAAC;EACxD;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/MailerService/feature.js","sources":["../../../src/features/MailerService/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { MailerService } from \"./MailerService.js\";\nimport { ActiveTransport } from \"./ActiveTransport.js\";\n\nexport const MailerServiceFeature = createFeature({\n name: \"Mailer/MailerService\",\n register(container) {\n container.register(ActiveTransport).inSingletonScope();\n container.register(MailerService).inSingletonScope();\n }\n});\n"],"names":["MailerServiceFeature","createFeature","container","ActiveTransport","MailerService"],"mappings":";;;AAIO,MAAMA,uBAAuBC,cAAc;IAC9C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,iBAAiB,gBAAgB;QACpDD,UAAU,QAAQ,CAACE,eAAe,gBAAgB;IACtD;AACJ"}
@@ -1,4 +1,4 @@
1
- import { Encryption } from "../../domain/Encryption/abstractions.js";
1
+ import { Encryption } from "@webiny/api-core/features/encryption/index.js";
2
2
  import { SaveSettingsRepository, type SaveSettingsInput } from "./abstractions.js";
3
3
  import { KeyValueStore } from "@webiny/api-core/features/keyValueStore/index.js";
4
4
  declare class SaveSettingsRepositoryImpl implements SaveSettingsRepository.Interface {
@@ -1,57 +1,43 @@
1
1
  import { Result } from "@webiny/feature/api";
2
- import { Encryption } from "../../domain/Encryption/abstractions.js";
2
+ import { Encryption } from "@webiny/api-core/features/encryption/index.js";
3
3
  import { SaveSettingsRepository } from "./abstractions.js";
4
4
  import { SettingsPersistenceError } from "../../domain/errors.js";
5
5
  import { KeyValueStore } from "@webiny/api-core/features/keyValueStore/index.js";
6
6
  import { MAILER_TRANSPORT_SETTINGS } from "../../constants.js";
7
7
  const DEFAULT_PORT = 25;
8
8
  class SaveSettingsRepositoryImpl {
9
- constructor(keyValueStore, encryption) {
10
- this.keyValueStore = keyValueStore;
11
- this.encryption = encryption;
12
- }
13
- async execute(input) {
14
- // Check if settings exist
15
- const existingResult = await this.keyValueStore.get(MAILER_TRANSPORT_SETTINGS);
16
- const existingSettings = existingResult.isOk() ? existingResult.value : null;
17
- const transportSettings = existingSettings ?? {};
18
-
19
- // If updating and no password provided, keep the existing password
20
- let passwordToStore = input.password || "";
21
- if (!input.password && existingSettings) {
22
- passwordToStore = await this.encryption.decrypt(transportSettings.password || "");
9
+ constructor(keyValueStore, encryption){
10
+ this.keyValueStore = keyValueStore;
11
+ this.encryption = encryption;
23
12
  }
24
-
25
- // Encrypt password
26
- const encryptedPassword = await this.encryption.encrypt(passwordToStore);
27
-
28
- // Prepare data
29
- const data = {
30
- host: input.host ?? transportSettings.host,
31
- port: input.port ?? transportSettings.port ?? DEFAULT_PORT,
32
- user: input.user ?? transportSettings.user,
33
- password: encryptedPassword,
34
- from: input.from ?? transportSettings.from,
35
- replyTo: input.replyTo ?? transportSettings.replyTo
36
- };
37
-
38
- // Save settings
39
- const result = await this.keyValueStore.set(MAILER_TRANSPORT_SETTINGS, data);
40
- if (result.isFail()) {
41
- return Result.fail(new SettingsPersistenceError(result.error));
13
+ async execute(input) {
14
+ const existingResult = await this.keyValueStore.get(MAILER_TRANSPORT_SETTINGS);
15
+ const existingSettings = existingResult.isOk() ? existingResult.value : null;
16
+ const transportSettings = existingSettings ?? {};
17
+ let passwordToStore = input.password || "";
18
+ if (!input.password && existingSettings) passwordToStore = await this.encryption.decrypt(transportSettings.password || "");
19
+ const encryptedPassword = await this.encryption.encrypt(passwordToStore);
20
+ const data = {
21
+ host: input.host ?? transportSettings.host,
22
+ port: input.port ?? transportSettings.port ?? DEFAULT_PORT,
23
+ user: input.user ?? transportSettings.user,
24
+ password: encryptedPassword,
25
+ from: input.from ?? transportSettings.from,
26
+ replyTo: input.replyTo ?? transportSettings.replyTo
27
+ };
28
+ const result = await this.keyValueStore.set(MAILER_TRANSPORT_SETTINGS, data);
29
+ if (result.isFail()) return Result.fail(new SettingsPersistenceError(result.error));
30
+ const { password: _password, ...savedSettings } = data;
31
+ return Result.ok(savedSettings);
42
32
  }
43
-
44
- // Return without encrypted password
45
- const returnSettings = {
46
- ...data,
47
- password: "" // Don't return password
48
- };
49
- return Result.ok(returnSettings);
50
- }
51
33
  }
52
- export const SaveSettingsRepositoryImplementation = SaveSettingsRepository.createImplementation({
53
- implementation: SaveSettingsRepositoryImpl,
54
- dependencies: [KeyValueStore, Encryption]
34
+ const SaveSettingsRepositoryImplementation = SaveSettingsRepository.createImplementation({
35
+ implementation: SaveSettingsRepositoryImpl,
36
+ dependencies: [
37
+ KeyValueStore,
38
+ Encryption
39
+ ]
55
40
  });
41
+ export { SaveSettingsRepositoryImplementation };
56
42
 
57
43
  //# sourceMappingURL=SaveSettingsRepository.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Result","Encryption","SaveSettingsRepository","SettingsPersistenceError","KeyValueStore","MAILER_TRANSPORT_SETTINGS","DEFAULT_PORT","SaveSettingsRepositoryImpl","constructor","keyValueStore","encryption","execute","input","existingResult","get","existingSettings","isOk","value","transportSettings","passwordToStore","password","decrypt","encryptedPassword","encrypt","data","host","port","user","from","replyTo","result","set","isFail","fail","error","returnSettings","ok","SaveSettingsRepositoryImplementation","createImplementation","implementation","dependencies"],"sources":["SaveSettingsRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { Encryption } from \"~/domain/Encryption/abstractions.js\";\nimport { SaveSettingsRepository, type SaveSettingsInput } from \"./abstractions.js\";\nimport type { TransportSettings } from \"~/types.js\";\nimport { SettingsPersistenceError } from \"~/domain/errors.js\";\nimport { KeyValueStore } from \"@webiny/api-core/features/keyValueStore/index.js\";\nimport { MAILER_TRANSPORT_SETTINGS } from \"~/constants.js\";\n\nconst DEFAULT_PORT = 25;\n\nclass SaveSettingsRepositoryImpl implements SaveSettingsRepository.Interface {\n constructor(\n private keyValueStore: KeyValueStore.Interface,\n private encryption: Encryption.Interface\n ) {}\n\n async execute(input: SaveSettingsInput): SaveSettingsRepository.Return {\n // Check if settings exist\n const existingResult =\n await this.keyValueStore.get<TransportSettings>(MAILER_TRANSPORT_SETTINGS);\n const existingSettings = existingResult.isOk() ? existingResult.value : null;\n const transportSettings: Partial<TransportSettings> = existingSettings ?? {};\n\n // If updating and no password provided, keep the existing password\n let passwordToStore = input.password || \"\";\n if (!input.password && existingSettings) {\n passwordToStore = await this.encryption.decrypt(transportSettings.password || \"\");\n }\n\n // Encrypt password\n const encryptedPassword = await this.encryption.encrypt(passwordToStore);\n\n // Prepare data\n const data = {\n host: input.host ?? transportSettings.host,\n port: input.port ?? transportSettings.port ?? DEFAULT_PORT,\n user: input.user ?? transportSettings.user,\n password: encryptedPassword,\n from: input.from ?? transportSettings.from,\n replyTo: input.replyTo ?? transportSettings.replyTo\n };\n\n // Save settings\n const result = await this.keyValueStore.set(MAILER_TRANSPORT_SETTINGS, data);\n\n if (result.isFail()) {\n return Result.fail(new SettingsPersistenceError(result.error));\n }\n\n // Return without encrypted password\n const returnSettings: TransportSettings = {\n ...data,\n password: \"\" // Don't return password\n };\n\n return Result.ok(returnSettings);\n }\n}\n\nexport const SaveSettingsRepositoryImplementation = SaveSettingsRepository.createImplementation({\n implementation: SaveSettingsRepositoryImpl,\n dependencies: [KeyValueStore, Encryption]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,UAAU;AACnB,SAASC,sBAAsB;AAE/B,SAASC,wBAAwB;AACjC,SAASC,aAAa,QAAQ,kDAAkD;AAChF,SAASC,yBAAyB;AAElC,MAAMC,YAAY,GAAG,EAAE;AAEvB,MAAMC,0BAA0B,CAA6C;EACzEC,WAAWA,CACCC,aAAsC,EACtCC,UAAgC,EAC1C;IAAA,KAFUD,aAAsC,GAAtCA,aAAsC;IAAA,KACtCC,UAAgC,GAAhCA,UAAgC;EACzC;EAEH,MAAMC,OAAOA,CAACC,KAAwB,EAAiC;IACnE;IACA,MAAMC,cAAc,GAChB,MAAM,IAAI,CAACJ,aAAa,CAACK,GAAG,CAAoBT,yBAAyB,CAAC;IAC9E,MAAMU,gBAAgB,GAAGF,cAAc,CAACG,IAAI,CAAC,CAAC,GAAGH,cAAc,CAACI,KAAK,GAAG,IAAI;IAC5E,MAAMC,iBAA6C,GAAGH,gBAAgB,IAAI,CAAC,CAAC;;IAE5E;IACA,IAAII,eAAe,GAAGP,KAAK,CAACQ,QAAQ,IAAI,EAAE;IAC1C,IAAI,CAACR,KAAK,CAACQ,QAAQ,IAAIL,gBAAgB,EAAE;MACrCI,eAAe,GAAG,MAAM,IAAI,CAACT,UAAU,CAACW,OAAO,CAACH,iBAAiB,CAACE,QAAQ,IAAI,EAAE,CAAC;IACrF;;IAEA;IACA,MAAME,iBAAiB,GAAG,MAAM,IAAI,CAACZ,UAAU,CAACa,OAAO,CAACJ,eAAe,CAAC;;IAExE;IACA,MAAMK,IAAI,GAAG;MACTC,IAAI,EAAEb,KAAK,CAACa,IAAI,IAAIP,iBAAiB,CAACO,IAAI;MAC1CC,IAAI,EAAEd,KAAK,CAACc,IAAI,IAAIR,iBAAiB,CAACQ,IAAI,IAAIpB,YAAY;MAC1DqB,IAAI,EAAEf,KAAK,CAACe,IAAI,IAAIT,iBAAiB,CAACS,IAAI;MAC1CP,QAAQ,EAAEE,iBAAiB;MAC3BM,IAAI,EAAEhB,KAAK,CAACgB,IAAI,IAAIV,iBAAiB,CAACU,IAAI;MAC1CC,OAAO,EAAEjB,KAAK,CAACiB,OAAO,IAAIX,iBAAiB,CAACW;IAChD,CAAC;;IAED;IACA,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACrB,aAAa,CAACsB,GAAG,CAAC1B,yBAAyB,EAAEmB,IAAI,CAAC;IAE5E,IAAIM,MAAM,CAACE,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOhC,MAAM,CAACiC,IAAI,CAAC,IAAI9B,wBAAwB,CAAC2B,MAAM,CAACI,KAAK,CAAC,CAAC;IAClE;;IAEA;IACA,MAAMC,cAAiC,GAAG;MACtC,GAAGX,IAAI;MACPJ,QAAQ,EAAE,EAAE,CAAC;IACjB,CAAC;IAED,OAAOpB,MAAM,CAACoC,EAAE,CAACD,cAAc,CAAC;EACpC;AACJ;AAEA,OAAO,MAAME,oCAAoC,GAAGnC,sBAAsB,CAACoC,oBAAoB,CAAC;EAC5FC,cAAc,EAAEhC,0BAA0B;EAC1CiC,YAAY,EAAE,CAACpC,aAAa,EAAEH,UAAU;AAC5C,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/SaveSettings/SaveSettingsRepository.js","sources":["../../../src/features/SaveSettings/SaveSettingsRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { Encryption } from \"@webiny/api-core/features/encryption/index.js\";\nimport { SaveSettingsRepository, type SaveSettingsInput } from \"./abstractions.js\";\nimport type { TransportSettings } from \"~/types.js\";\nimport { SettingsPersistenceError } from \"~/domain/errors.js\";\nimport { KeyValueStore } from \"@webiny/api-core/features/keyValueStore/index.js\";\nimport { MAILER_TRANSPORT_SETTINGS } from \"~/constants.js\";\n\nconst DEFAULT_PORT = 25;\n\nclass SaveSettingsRepositoryImpl implements SaveSettingsRepository.Interface {\n constructor(\n private keyValueStore: KeyValueStore.Interface,\n private encryption: Encryption.Interface\n ) {}\n\n async execute(input: SaveSettingsInput): SaveSettingsRepository.Return {\n // Check if settings exist\n const existingResult =\n await this.keyValueStore.get<TransportSettings>(MAILER_TRANSPORT_SETTINGS);\n const existingSettings = existingResult.isOk() ? existingResult.value : null;\n const transportSettings: Partial<TransportSettings> = existingSettings ?? {};\n\n // If updating and no password provided, keep the existing password\n let passwordToStore = input.password || \"\";\n if (!input.password && existingSettings) {\n passwordToStore = await this.encryption.decrypt(transportSettings.password || \"\");\n }\n\n // Encrypt password\n const encryptedPassword = await this.encryption.encrypt(passwordToStore);\n\n // Prepare data\n const data = {\n host: input.host ?? transportSettings.host,\n port: input.port ?? transportSettings.port ?? DEFAULT_PORT,\n user: input.user ?? transportSettings.user,\n password: encryptedPassword,\n from: input.from ?? transportSettings.from,\n replyTo: input.replyTo ?? transportSettings.replyTo\n };\n\n // Save settings.\n const result = await this.keyValueStore.set(MAILER_TRANSPORT_SETTINGS, data);\n\n if (result.isFail()) {\n return Result.fail(new SettingsPersistenceError(result.error));\n }\n\n // Return the stored state without the password. Callers that need the\n // plaintext password go through GetSettingsRepository.get(transportName).\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { password: _password, ...savedSettings } = data as TransportSettings;\n return Result.ok(savedSettings);\n }\n}\n\nexport const SaveSettingsRepositoryImplementation = SaveSettingsRepository.createImplementation({\n implementation: SaveSettingsRepositoryImpl,\n dependencies: [KeyValueStore, Encryption]\n});\n"],"names":["DEFAULT_PORT","SaveSettingsRepositoryImpl","keyValueStore","encryption","input","existingResult","MAILER_TRANSPORT_SETTINGS","existingSettings","transportSettings","passwordToStore","encryptedPassword","data","result","Result","SettingsPersistenceError","_password","savedSettings","SaveSettingsRepositoryImplementation","SaveSettingsRepository","KeyValueStore","Encryption"],"mappings":";;;;;;AAQA,MAAMA,eAAe;AAErB,MAAMC;IACF,YACYC,aAAsC,EACtCC,UAAgC,CAC1C;aAFUD,aAAa,GAAbA;aACAC,UAAU,GAAVA;IACT;IAEH,MAAM,QAAQC,KAAwB,EAAiC;QAEnE,MAAMC,iBACF,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAoBC;QACpD,MAAMC,mBAAmBF,eAAe,IAAI,KAAKA,eAAe,KAAK,GAAG;QACxE,MAAMG,oBAAgDD,oBAAoB,CAAC;QAG3E,IAAIE,kBAAkBL,MAAM,QAAQ,IAAI;QACxC,IAAI,CAACA,MAAM,QAAQ,IAAIG,kBACnBE,kBAAkB,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACD,kBAAkB,QAAQ,IAAI;QAIlF,MAAME,oBAAoB,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACD;QAGxD,MAAME,OAAO;YACT,MAAMP,MAAM,IAAI,IAAII,kBAAkB,IAAI;YAC1C,MAAMJ,MAAM,IAAI,IAAII,kBAAkB,IAAI,IAAIR;YAC9C,MAAMI,MAAM,IAAI,IAAII,kBAAkB,IAAI;YAC1C,UAAUE;YACV,MAAMN,MAAM,IAAI,IAAII,kBAAkB,IAAI;YAC1C,SAASJ,MAAM,OAAO,IAAII,kBAAkB,OAAO;QACvD;QAGA,MAAMI,SAAS,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAACN,2BAA2BK;QAEvE,IAAIC,OAAO,MAAM,IACb,OAAOC,OAAO,IAAI,CAAC,IAAIC,yBAAyBF,OAAO,KAAK;QAMhE,MAAM,EAAE,UAAUG,SAAS,EAAE,GAAGC,eAAe,GAAGL;QAClD,OAAOE,OAAO,EAAE,CAACG;IACrB;AACJ;AAEO,MAAMC,uCAAuCC,uBAAuB,oBAAoB,CAAC;IAC5F,gBAAgBjB;IAChB,cAAc;QAACkB;QAAeC;KAAW;AAC7C"}
@@ -1,11 +1,15 @@
1
- import { EventPublisher as EventPublisherAbstraction } from "@webiny/api-core/features/EventPublisher";
1
+ import { EventPublisher as EventPublisherAbstraction } from "@webiny/api-core/features/eventPublisher/index.js";
2
2
  import { SaveSettingsUseCase, SaveSettingsRepository, type SaveSettingsInput } from "./abstractions.js";
3
3
  import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
4
+ import { CodeMailerSettings } from "../../domain/CodeMailerSettings/abstractions.js";
5
+ import { ActiveTransport } from "../../domain/MailTransport/abstractions.js";
4
6
  declare class SaveSettingsUseCaseImpl implements SaveSettingsUseCase.Interface {
5
7
  private identityContext;
6
8
  private eventPublisher;
7
9
  private repository;
8
- constructor(identityContext: IdentityContext.Interface, eventPublisher: EventPublisherAbstraction.Interface, repository: SaveSettingsRepository.Interface);
10
+ private codeSettings;
11
+ private activeTransport;
12
+ constructor(identityContext: IdentityContext.Interface, eventPublisher: EventPublisherAbstraction.Interface, repository: SaveSettingsRepository.Interface, codeSettings: CodeMailerSettings.Interface, activeTransport: ActiveTransport.Interface);
9
13
  execute(input: SaveSettingsInput): SaveSettingsUseCase.Return;
10
14
  }
11
15
  export declare const SaveSettingsUseCaseImplementation: typeof SaveSettingsUseCaseImpl & {