@webiny/api-mailer 6.3.0-beta.2 → 6.3.0-beta.3
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.
- package/domain/CodeMailerSettings/abstractions.d.ts +8 -0
- package/domain/CodeMailerSettings/abstractions.js +4 -0
- package/domain/CodeMailerSettings/abstractions.js.map +1 -0
- package/domain/MailTransport/abstractions.d.ts +8 -0
- package/domain/MailTransport/abstractions.js +1 -0
- package/domain/MailTransport/abstractions.js.map +1 -1
- package/domain/errors.d.ts +4 -0
- package/domain/errors.js +8 -0
- package/domain/errors.js.map +1 -1
- package/exports/api/mailer.d.ts +4 -0
- package/exports/api/mailer.js +6 -0
- package/exports/api/mailer.js.map +1 -0
- package/features/CodeMailerSettings/CodeMailerSettingsImpl.d.ts +12 -0
- package/features/CodeMailerSettings/CodeMailerSettingsImpl.js +22 -0
- package/features/CodeMailerSettings/CodeMailerSettingsImpl.js.map +1 -0
- package/features/{Encryption → CodeMailerSettings}/feature.d.ts +1 -1
- package/features/CodeMailerSettings/feature.js +10 -0
- package/features/CodeMailerSettings/feature.js.map +1 -0
- package/features/DummyTransport/DummyMailTransportFactory.d.ts +1 -0
- package/features/DummyTransport/DummyMailTransportFactory.js +1 -0
- package/features/DummyTransport/DummyMailTransportFactory.js.map +1 -1
- package/features/GetSettings/GetSettingsRepository.d.ts +6 -5
- package/features/GetSettings/GetSettingsRepository.js +29 -10
- package/features/GetSettings/GetSettingsRepository.js.map +1 -1
- package/features/GetSettings/GetSettingsUseCase.d.ts +3 -4
- package/features/GetSettings/GetSettingsUseCase.js +2 -2
- package/features/GetSettings/GetSettingsUseCase.js.map +1 -1
- package/features/GetSettings/abstractions.d.ts +11 -5
- package/features/GetSettings/abstractions.js.map +1 -1
- package/features/GetSettings/index.d.ts +1 -1
- package/features/GetSettings/index.js +1 -1
- package/features/GetSettings/index.js.map +1 -1
- package/features/MailerService/ActiveTransport.d.ts +10 -0
- package/features/MailerService/ActiveTransport.js +20 -0
- package/features/MailerService/ActiveTransport.js.map +1 -0
- package/features/MailerService/MailerService.d.ts +3 -2
- package/features/MailerService/MailerService.js +16 -15
- package/features/MailerService/MailerService.js.map +1 -1
- package/features/MailerService/feature.js +2 -0
- package/features/MailerService/feature.js.map +1 -1
- package/features/SaveSettings/SaveSettingsRepository.d.ts +1 -1
- package/features/SaveSettings/SaveSettingsRepository.js +12 -10
- package/features/SaveSettings/SaveSettingsRepository.js.map +1 -1
- package/features/SaveSettings/SaveSettingsUseCase.d.ts +5 -1
- package/features/SaveSettings/SaveSettingsUseCase.js +26 -8
- package/features/SaveSettings/SaveSettingsUseCase.js.map +1 -1
- package/features/SaveSettings/abstractions.d.ts +15 -7
- package/features/SaveSettings/abstractions.js +10 -1
- package/features/SaveSettings/abstractions.js.map +1 -1
- package/features/SaveSettings/index.d.ts +1 -1
- package/features/SaveSettings/index.js +1 -1
- package/features/SaveSettings/index.js.map +1 -1
- package/features/SaveSettings/validation.js +7 -3
- package/features/SaveSettings/validation.js.map +1 -1
- package/features/SendMail/SendMailUseCase.js +9 -6
- package/features/SendMail/SendMailUseCase.js.map +1 -1
- package/features/SendMail/index.d.ts +1 -0
- package/features/SendMail/index.js +3 -0
- package/features/SendMail/index.js.map +1 -0
- package/features/SmtpTransport/SmtpMailTransport.d.ts +51 -1
- package/features/SmtpTransport/SmtpMailTransport.js +7 -1
- package/features/SmtpTransport/SmtpMailTransport.js.map +1 -1
- package/features/SmtpTransport/SmtpMailTransportFactory.d.ts +1 -0
- package/features/SmtpTransport/SmtpMailTransportFactory.js +1 -0
- package/features/SmtpTransport/SmtpMailTransportFactory.js.map +1 -1
- package/graphql/settings.js +44 -32
- package/graphql/settings.js.map +1 -1
- package/index.js +3 -3
- package/index.js.map +1 -1
- package/package.json +20 -24
- package/utils/isMailboxAddress.d.ts +6 -0
- package/utils/isMailboxAddress.js +12 -0
- package/utils/isMailboxAddress.js.map +1 -0
- package/domain/Encryption/abstractions.d.ts +0 -8
- package/domain/Encryption/abstractions.js +0 -4
- package/domain/Encryption/abstractions.js.map +0 -1
- package/features/Encryption/PasswordEncryption.d.ts +0 -9
- package/features/Encryption/PasswordEncryption.js +0 -23
- package/features/Encryption/PasswordEncryption.js.map +0 -1
- package/features/Encryption/feature.js +0 -10
- package/features/Encryption/feature.js.map +0 -1
- package/features/Encryption/utils/password.d.ts +0 -7
- package/features/Encryption/utils/password.js +0 -56
- package/features/Encryption/utils/password.js.map +0 -1
- package/features/Encryption/utils/secret.d.ts +0 -1
- package/features/Encryption/utils/secret.js +0 -11
- package/features/Encryption/utils/secret.js.map +0 -1
- package/features/MailerService/TransportFactory.d.ts +0 -2
- package/features/MailerService/TransportFactory.js +0 -31
- package/features/MailerService/TransportFactory.js.map +0 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { TransportSettings } from "../../types.js";
|
|
2
|
+
export interface ICodeMailerSettings {
|
|
3
|
+
get(transportName: string): TransportSettings | null;
|
|
4
|
+
}
|
|
5
|
+
export declare const CodeMailerSettings: import("@webiny/di").Abstraction<ICodeMailerSettings>;
|
|
6
|
+
export declare namespace CodeMailerSettings {
|
|
7
|
+
type Interface = ICodeMailerSettings;
|
|
8
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createAbstraction","CodeMailerSettings"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { TransportSettings } from \"~/types.js\";\n\nexport interface ICodeMailerSettings {\n get(transportName: string): TransportSettings | null;\n}\n\nexport const CodeMailerSettings = createAbstraction<ICodeMailerSettings>(\"CodeMailerSettings\");\n\nexport namespace CodeMailerSettings {\n export type Interface = ICodeMailerSettings;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAOvD,OAAO,MAAMC,kBAAkB,GAAGD,iBAAiB,CAAsB,oBAAoB,CAAC","ignoreList":[]}
|
|
@@ -9,6 +9,7 @@ export declare namespace MailTransport {
|
|
|
9
9
|
type SendParams = TransportSendData;
|
|
10
10
|
}
|
|
11
11
|
export interface IMailTransportFactory {
|
|
12
|
+
name: string;
|
|
12
13
|
createTransport(settings: TransportSettings): Promise<IMailTransport>;
|
|
13
14
|
}
|
|
14
15
|
export declare const MailTransportFactory: import("@webiny/di").Abstraction<IMailTransportFactory>;
|
|
@@ -16,3 +17,10 @@ export declare namespace MailTransportFactory {
|
|
|
16
17
|
type Interface = IMailTransportFactory;
|
|
17
18
|
type Return = Promise<IMailTransport>;
|
|
18
19
|
}
|
|
20
|
+
export interface IActiveTransport {
|
|
21
|
+
name(): string | null;
|
|
22
|
+
}
|
|
23
|
+
export declare const ActiveTransport: import("@webiny/di").Abstraction<IActiveTransport>;
|
|
24
|
+
export declare namespace ActiveTransport {
|
|
25
|
+
type Interface = IActiveTransport;
|
|
26
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createAbstraction } from "@webiny/feature/api";
|
|
2
2
|
export const MailTransport = createAbstraction("MailTransport");
|
|
3
3
|
export const MailTransportFactory = createAbstraction("MailTransportFactory");
|
|
4
|
+
export const ActiveTransport = createAbstraction("ActiveTransport");
|
|
4
5
|
|
|
5
6
|
//# sourceMappingURL=abstractions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","MailTransport","MailTransportFactory"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { TransportSendData, TransportSendResponse, TransportSettings } from \"~/types.js\";\n\nexport interface IMailTransport {\n name: string;\n send(params: TransportSendData): Promise<TransportSendResponse>;\n}\n\nexport const MailTransport = createAbstraction<IMailTransport>(\"MailTransport\");\n\nexport namespace MailTransport {\n export type Interface = IMailTransport;\n export type SendParams = TransportSendData;\n}\n\nexport interface IMailTransportFactory {\n createTransport(settings: TransportSettings): Promise<IMailTransport>;\n}\n\nexport const MailTransportFactory =\n createAbstraction<IMailTransportFactory>(\"MailTransportFactory\");\n\nexport namespace MailTransportFactory {\n export type Interface = IMailTransportFactory;\n export type Return = Promise<IMailTransport>;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAQvD,OAAO,MAAMC,aAAa,GAAGD,iBAAiB,CAAiB,eAAe,CAAC;
|
|
1
|
+
{"version":3,"names":["createAbstraction","MailTransport","MailTransportFactory","ActiveTransport"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { TransportSendData, TransportSendResponse, TransportSettings } from \"~/types.js\";\n\nexport interface IMailTransport {\n name: string;\n send(params: TransportSendData): Promise<TransportSendResponse>;\n}\n\nexport const MailTransport = createAbstraction<IMailTransport>(\"MailTransport\");\n\nexport namespace MailTransport {\n export type Interface = IMailTransport;\n export type SendParams = TransportSendData;\n}\n\nexport interface IMailTransportFactory {\n name: string;\n createTransport(settings: TransportSettings): Promise<IMailTransport>;\n}\n\nexport const MailTransportFactory =\n createAbstraction<IMailTransportFactory>(\"MailTransportFactory\");\n\nexport namespace MailTransportFactory {\n export type Interface = IMailTransportFactory;\n export type Return = Promise<IMailTransport>;\n}\n\nexport interface IActiveTransport {\n name(): string | null;\n}\n\nexport const ActiveTransport = createAbstraction<IActiveTransport>(\"ActiveTransport\");\n\nexport namespace ActiveTransport {\n export type Interface = IActiveTransport;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAQvD,OAAO,MAAMC,aAAa,GAAGD,iBAAiB,CAAiB,eAAe,CAAC;AAY/E,OAAO,MAAME,oBAAoB,GAC7BF,iBAAiB,CAAwB,sBAAsB,CAAC;AAWpE,OAAO,MAAMG,eAAe,GAAGH,iBAAiB,CAAmB,iBAAiB,CAAC","ignoreList":[]}
|
package/domain/errors.d.ts
CHANGED
|
@@ -22,3 +22,7 @@ export declare class SettingsPersistenceError extends BaseError<{
|
|
|
22
22
|
readonly code: "Mailer/Settings/Persistence";
|
|
23
23
|
constructor(error: Error);
|
|
24
24
|
}
|
|
25
|
+
export declare class SettingsLockedByCode extends BaseError {
|
|
26
|
+
readonly code: "Mailer/Settings/LockedByCode";
|
|
27
|
+
constructor();
|
|
28
|
+
}
|
package/domain/errors.js
CHANGED
|
@@ -40,5 +40,13 @@ export class SettingsPersistenceError extends BaseError {
|
|
|
40
40
|
});
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
+
export class SettingsLockedByCode extends BaseError {
|
|
44
|
+
code = "Mailer/Settings/LockedByCode";
|
|
45
|
+
constructor() {
|
|
46
|
+
super({
|
|
47
|
+
message: "Mailer settings are managed by code and cannot be saved via the API."
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
43
51
|
|
|
44
52
|
//# sourceMappingURL=errors.js.map
|
package/domain/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BaseError","MailValidationError","code","constructor","errors","message","data","SettingsValidationError","SettingsNotAuthorized","SettingsPersistenceError","error"],"sources":["errors.ts"],"sourcesContent":["import { BaseError } from \"@webiny/feature/api\";\nimport type { ZodError } from \"zod\";\n\nexport class MailValidationError extends BaseError<{ errors: ZodError[\"issues\"] }> {\n override readonly code = \"Mailer/SendMail/Validation\" as const;\n\n constructor(errors: ZodError[\"issues\"]) {\n super({\n message: \"Email params are invalid.\",\n data: {\n errors\n }\n });\n }\n}\n\nexport class SettingsValidationError extends BaseError<{ errors: ZodError[\"issues\"] }> {\n override readonly code = \"Mailer/Settings/Validation\" as const;\n\n constructor(errors: ZodError[\"issues\"]) {\n super({\n message: \"Settings validation failed.\",\n data: {\n errors\n }\n });\n }\n}\n\nexport class SettingsNotAuthorized extends BaseError {\n override readonly code = \"Mailer/Settings/NotAuthorized\" as const;\n\n constructor() {\n super({ message: \"Not allowed to update the mailer settings.\" });\n }\n}\n\nexport class SettingsPersistenceError extends BaseError<{ error: Error }> {\n override readonly code = \"Mailer/Settings/Persistence\" as const;\n\n constructor(error: Error) {\n super({\n message: \"Failed to persist settings.\",\n data: {\n error\n }\n });\n }\n}\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,qBAAqB;AAG/C,OAAO,MAAMC,mBAAmB,SAASD,SAAS,CAAiC;EAC7DE,IAAI,GAAG,4BAA4B;EAErDC,WAAWA,CAACC,MAA0B,EAAE;IACpC,KAAK,CAAC;MACFC,OAAO,EAAE,2BAA2B;MACpCC,IAAI,EAAE;QACFF;MACJ;IACJ,CAAC,CAAC;EACN;AACJ;AAEA,OAAO,MAAMG,uBAAuB,SAASP,SAAS,CAAiC;EACjEE,IAAI,GAAG,4BAA4B;EAErDC,WAAWA,CAACC,MAA0B,EAAE;IACpC,KAAK,CAAC;MACFC,OAAO,EAAE,6BAA6B;MACtCC,IAAI,EAAE;QACFF;MACJ;IACJ,CAAC,CAAC;EACN;AACJ;AAEA,OAAO,MAAMI,qBAAqB,SAASR,SAAS,CAAC;EAC/BE,IAAI,GAAG,+BAA+B;EAExDC,WAAWA,CAAA,EAAG;IACV,KAAK,CAAC;MAAEE,OAAO,EAAE;IAA6C,CAAC,CAAC;EACpE;AACJ;AAEA,OAAO,MAAMI,wBAAwB,SAAST,SAAS,CAAmB;EACpDE,IAAI,GAAG,6BAA6B;EAEtDC,WAAWA,CAACO,KAAY,EAAE;IACtB,KAAK,CAAC;MACFL,OAAO,EAAE,6BAA6B;MACtCC,IAAI,EAAE;QACFI;MACJ;IACJ,CAAC,CAAC;EACN;AACJ","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["BaseError","MailValidationError","code","constructor","errors","message","data","SettingsValidationError","SettingsNotAuthorized","SettingsPersistenceError","error","SettingsLockedByCode"],"sources":["errors.ts"],"sourcesContent":["import { BaseError } from \"@webiny/feature/api\";\nimport type { ZodError } from \"zod\";\n\nexport class MailValidationError extends BaseError<{ errors: ZodError[\"issues\"] }> {\n override readonly code = \"Mailer/SendMail/Validation\" as const;\n\n constructor(errors: ZodError[\"issues\"]) {\n super({\n message: \"Email params are invalid.\",\n data: {\n errors\n }\n });\n }\n}\n\nexport class SettingsValidationError extends BaseError<{ errors: ZodError[\"issues\"] }> {\n override readonly code = \"Mailer/Settings/Validation\" as const;\n\n constructor(errors: ZodError[\"issues\"]) {\n super({\n message: \"Settings validation failed.\",\n data: {\n errors\n }\n });\n }\n}\n\nexport class SettingsNotAuthorized extends BaseError {\n override readonly code = \"Mailer/Settings/NotAuthorized\" as const;\n\n constructor() {\n super({ message: \"Not allowed to update the mailer settings.\" });\n }\n}\n\nexport class SettingsPersistenceError extends BaseError<{ error: Error }> {\n override readonly code = \"Mailer/Settings/Persistence\" as const;\n\n constructor(error: Error) {\n super({\n message: \"Failed to persist settings.\",\n data: {\n error\n }\n });\n }\n}\n\nexport class SettingsLockedByCode extends BaseError {\n override readonly code = \"Mailer/Settings/LockedByCode\" as const;\n\n constructor() {\n super({\n message: \"Mailer settings are managed by code and cannot be saved via the API.\"\n });\n }\n}\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,qBAAqB;AAG/C,OAAO,MAAMC,mBAAmB,SAASD,SAAS,CAAiC;EAC7DE,IAAI,GAAG,4BAA4B;EAErDC,WAAWA,CAACC,MAA0B,EAAE;IACpC,KAAK,CAAC;MACFC,OAAO,EAAE,2BAA2B;MACpCC,IAAI,EAAE;QACFF;MACJ;IACJ,CAAC,CAAC;EACN;AACJ;AAEA,OAAO,MAAMG,uBAAuB,SAASP,SAAS,CAAiC;EACjEE,IAAI,GAAG,4BAA4B;EAErDC,WAAWA,CAACC,MAA0B,EAAE;IACpC,KAAK,CAAC;MACFC,OAAO,EAAE,6BAA6B;MACtCC,IAAI,EAAE;QACFF;MACJ;IACJ,CAAC,CAAC;EACN;AACJ;AAEA,OAAO,MAAMI,qBAAqB,SAASR,SAAS,CAAC;EAC/BE,IAAI,GAAG,+BAA+B;EAExDC,WAAWA,CAAA,EAAG;IACV,KAAK,CAAC;MAAEE,OAAO,EAAE;IAA6C,CAAC,CAAC;EACpE;AACJ;AAEA,OAAO,MAAMI,wBAAwB,SAAST,SAAS,CAAmB;EACpDE,IAAI,GAAG,6BAA6B;EAEtDC,WAAWA,CAACO,KAAY,EAAE;IACtB,KAAK,CAAC;MACFL,OAAO,EAAE,6BAA6B;MACtCC,IAAI,EAAE;QACFI;MACJ;IACJ,CAAC,CAAC;EACN;AACJ;AAEA,OAAO,MAAMC,oBAAoB,SAASX,SAAS,CAAC;EAC9BE,IAAI,GAAG,8BAA8B;EAEvDC,WAAWA,CAAA,EAAG;IACV,KAAK,CAAC;MACFE,OAAO,EAAE;IACb,CAAC,CAAC;EACN;AACJ","ignoreList":[]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { SendMailUseCase, MailSendErrorEventHandler, MailBeforeSendEventHandler, MailAfterSendEventHandler } from "../../features/SendMail/index.js";
|
|
2
|
+
export { GetSettingsUseCase, GetSettingsRepository } from "../../features/GetSettings/index.js";
|
|
3
|
+
export { SaveSettingsUseCase, SaveSettingsRepository, MailerSettingsAfterSaveEventHandler, MailerSettingsBeforeSaveEventHandler } from "../../features/SaveSettings/index.js";
|
|
4
|
+
export { MailerService } from "../../domain/MailerService/abstractions.js";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { SendMailUseCase, MailSendErrorEventHandler, MailBeforeSendEventHandler, MailAfterSendEventHandler } from "../../features/SendMail/index.js";
|
|
2
|
+
export { GetSettingsUseCase, GetSettingsRepository } from "../../features/GetSettings/index.js";
|
|
3
|
+
export { SaveSettingsUseCase, SaveSettingsRepository, MailerSettingsAfterSaveEventHandler, MailerSettingsBeforeSaveEventHandler } from "../../features/SaveSettings/index.js";
|
|
4
|
+
export { MailerService } from "../../domain/MailerService/abstractions.js";
|
|
5
|
+
|
|
6
|
+
//# sourceMappingURL=mailer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SendMailUseCase","MailSendErrorEventHandler","MailBeforeSendEventHandler","MailAfterSendEventHandler","GetSettingsUseCase","GetSettingsRepository","SaveSettingsUseCase","SaveSettingsRepository","MailerSettingsAfterSaveEventHandler","MailerSettingsBeforeSaveEventHandler","MailerService"],"sources":["mailer.ts"],"sourcesContent":["export {\n SendMailUseCase,\n MailSendErrorEventHandler,\n MailBeforeSendEventHandler,\n MailAfterSendEventHandler\n} from \"~/features/SendMail/index.js\";\nexport { GetSettingsUseCase, GetSettingsRepository } from \"~/features/GetSettings/index.js\";\nexport {\n SaveSettingsUseCase,\n SaveSettingsRepository,\n MailerSettingsAfterSaveEventHandler,\n MailerSettingsBeforeSaveEventHandler\n} from \"~/features/SaveSettings/index.js\";\nexport { MailerService } from \"~/domain/MailerService/abstractions.js\";\n"],"mappings":"AAAA,SACIA,eAAe,EACfC,yBAAyB,EACzBC,0BAA0B,EAC1BC,yBAAyB;AAE7B,SAASC,kBAAkB,EAAEC,qBAAqB;AAClD,SACIC,mBAAmB,EACnBC,sBAAsB,EACtBC,mCAAmC,EACnCC,oCAAoC;AAExC,SAASC,aAAa","ignoreList":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BuildParams } from "@webiny/api-core/features/buildParams/index.js";
|
|
2
|
+
import { CodeMailerSettings as Abstraction } from "../../domain/CodeMailerSettings/abstractions.js";
|
|
3
|
+
import type { TransportSettings } from "../../types.js";
|
|
4
|
+
declare class CodeMailerSettingsImpl implements Abstraction.Interface {
|
|
5
|
+
private buildParams;
|
|
6
|
+
constructor(buildParams: BuildParams.Interface);
|
|
7
|
+
get(transportName: string): TransportSettings | null;
|
|
8
|
+
}
|
|
9
|
+
export declare const CodeMailerSettings: typeof CodeMailerSettingsImpl & {
|
|
10
|
+
__abstraction: import("@webiny/di").Abstraction<import("~/domain/CodeMailerSettings/abstractions.js").ICodeMailerSettings>;
|
|
11
|
+
};
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { BuildParams } from "@webiny/api-core/features/buildParams/index.js";
|
|
2
|
+
import { CodeMailerSettings as Abstraction } from "../../domain/CodeMailerSettings/abstractions.js";
|
|
3
|
+
const SMTP_TRANSPORT_NAME = "Mailer/SmtpTransport";
|
|
4
|
+
const SMTP_BUILD_PARAM_KEY = "Mailer.SmtpSettings";
|
|
5
|
+
class CodeMailerSettingsImpl {
|
|
6
|
+
constructor(buildParams) {
|
|
7
|
+
this.buildParams = buildParams;
|
|
8
|
+
}
|
|
9
|
+
get(transportName) {
|
|
10
|
+
if (transportName !== SMTP_TRANSPORT_NAME) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
const value = this.buildParams.get(SMTP_BUILD_PARAM_KEY);
|
|
14
|
+
return value ?? null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export const CodeMailerSettings = Abstraction.createImplementation({
|
|
18
|
+
implementation: CodeMailerSettingsImpl,
|
|
19
|
+
dependencies: [BuildParams]
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=CodeMailerSettingsImpl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["BuildParams","CodeMailerSettings","Abstraction","SMTP_TRANSPORT_NAME","SMTP_BUILD_PARAM_KEY","CodeMailerSettingsImpl","constructor","buildParams","get","transportName","value","createImplementation","implementation","dependencies"],"sources":["CodeMailerSettingsImpl.ts"],"sourcesContent":["import { BuildParams } from \"@webiny/api-core/features/buildParams/index.js\";\nimport { CodeMailerSettings as Abstraction } from \"~/domain/CodeMailerSettings/abstractions.js\";\nimport type { TransportSettings } from \"~/types.js\";\n\nconst SMTP_TRANSPORT_NAME = \"Mailer/SmtpTransport\";\nconst SMTP_BUILD_PARAM_KEY = \"Mailer.SmtpSettings\";\n\nclass CodeMailerSettingsImpl implements Abstraction.Interface {\n constructor(private buildParams: BuildParams.Interface) {}\n\n get(transportName: string): TransportSettings | null {\n if (transportName !== SMTP_TRANSPORT_NAME) {\n return null;\n }\n const value = this.buildParams.get<TransportSettings>(SMTP_BUILD_PARAM_KEY);\n return value ?? null;\n }\n}\n\nexport const CodeMailerSettings = Abstraction.createImplementation({\n implementation: CodeMailerSettingsImpl,\n dependencies: [BuildParams]\n});\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,gDAAgD;AAC5E,SAASC,kBAAkB,IAAIC,WAAW;AAG1C,MAAMC,mBAAmB,GAAG,sBAAsB;AAClD,MAAMC,oBAAoB,GAAG,qBAAqB;AAElD,MAAMC,sBAAsB,CAAkC;EAC1DC,WAAWA,CAASC,WAAkC,EAAE;IAAA,KAApCA,WAAkC,GAAlCA,WAAkC;EAAG;EAEzDC,GAAGA,CAACC,aAAqB,EAA4B;IACjD,IAAIA,aAAa,KAAKN,mBAAmB,EAAE;MACvC,OAAO,IAAI;IACf;IACA,MAAMO,KAAK,GAAG,IAAI,CAACH,WAAW,CAACC,GAAG,CAAoBJ,oBAAoB,CAAC;IAC3E,OAAOM,KAAK,IAAI,IAAI;EACxB;AACJ;AAEA,OAAO,MAAMT,kBAAkB,GAAGC,WAAW,CAACS,oBAAoB,CAAC;EAC/DC,cAAc,EAAEP,sBAAsB;EACtCQ,YAAY,EAAE,CAACb,WAAW;AAC9B,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import { CodeMailerSettings } from "./CodeMailerSettingsImpl.js";
|
|
3
|
+
export const CodeMailerSettingsFeature = createFeature({
|
|
4
|
+
name: "Mailer/CodeMailerSettings",
|
|
5
|
+
register(container) {
|
|
6
|
+
container.register(CodeMailerSettings).inSingletonScope();
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createFeature","CodeMailerSettings","CodeMailerSettingsFeature","name","register","container","inSingletonScope"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { CodeMailerSettings } from \"./CodeMailerSettingsImpl.js\";\n\nexport const CodeMailerSettingsFeature = createFeature({\n name: \"Mailer/CodeMailerSettings\",\n register(container) {\n container.register(CodeMailerSettings).inSingletonScope();\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,kBAAkB;AAE3B,OAAO,MAAMC,yBAAyB,GAAGF,aAAa,CAAC;EACnDG,IAAI,EAAE,2BAA2B;EACjCC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACH,kBAAkB,CAAC,CAACK,gBAAgB,CAAC,CAAC;EAC7D;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type IMailTransport, MailTransportFactory } from "../../domain/MailTransport/abstractions.js";
|
|
2
2
|
declare class DummyMailTransportFactoryImpl implements MailTransportFactory.Interface {
|
|
3
|
+
readonly name = "Mailer/DummyTransport";
|
|
3
4
|
createTransport(): Promise<IMailTransport>;
|
|
4
5
|
}
|
|
5
6
|
export declare const DummyMailTransportFactory: typeof DummyMailTransportFactoryImpl & {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { MailTransportFactory } from "../../domain/MailTransport/abstractions.js";
|
|
2
2
|
import { DummyMailTransport } from "./DummyMailTransport.js";
|
|
3
3
|
class DummyMailTransportFactoryImpl {
|
|
4
|
+
name = "Mailer/DummyTransport";
|
|
4
5
|
async createTransport() {
|
|
5
6
|
return new DummyMailTransport();
|
|
6
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["MailTransportFactory","DummyMailTransport","DummyMailTransportFactoryImpl","createTransport","DummyMailTransportFactory","createImplementation","implementation","dependencies"],"sources":["DummyMailTransportFactory.ts"],"sourcesContent":["import { type IMailTransport, MailTransportFactory } from \"~/domain/MailTransport/abstractions.js\";\nimport { DummyMailTransport } from \"./DummyMailTransport.js\";\n\nclass DummyMailTransportFactoryImpl implements MailTransportFactory.Interface {\n async createTransport(): Promise<IMailTransport> {\n return new DummyMailTransport();\n }\n}\n\nexport const DummyMailTransportFactory = MailTransportFactory.createImplementation({\n implementation: DummyMailTransportFactoryImpl,\n dependencies: []\n});\n"],"mappings":"AAAA,SAA8BA,oBAAoB;AAClD,SAASC,kBAAkB;AAE3B,MAAMC,6BAA6B,CAA2C;
|
|
1
|
+
{"version":3,"names":["MailTransportFactory","DummyMailTransport","DummyMailTransportFactoryImpl","name","createTransport","DummyMailTransportFactory","createImplementation","implementation","dependencies"],"sources":["DummyMailTransportFactory.ts"],"sourcesContent":["import { type IMailTransport, MailTransportFactory } from \"~/domain/MailTransport/abstractions.js\";\nimport { DummyMailTransport } from \"./DummyMailTransport.js\";\n\nclass DummyMailTransportFactoryImpl implements MailTransportFactory.Interface {\n public readonly name = \"Mailer/DummyTransport\";\n\n async createTransport(): Promise<IMailTransport> {\n return new DummyMailTransport();\n }\n}\n\nexport const DummyMailTransportFactory = MailTransportFactory.createImplementation({\n implementation: DummyMailTransportFactoryImpl,\n dependencies: []\n});\n"],"mappings":"AAAA,SAA8BA,oBAAoB;AAClD,SAASC,kBAAkB;AAE3B,MAAMC,6BAA6B,CAA2C;EAC1DC,IAAI,GAAG,uBAAuB;EAE9C,MAAMC,eAAeA,CAAA,EAA4B;IAC7C,OAAO,IAAIH,kBAAkB,CAAC,CAAC;EACnC;AACJ;AAEA,OAAO,MAAMI,yBAAyB,GAAGL,oBAAoB,CAACM,oBAAoB,CAAC;EAC/EC,cAAc,EAAEL,6BAA6B;EAC7CM,YAAY,EAAE;AAClB,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { Result } from "@webiny/feature/api";
|
|
2
|
-
import { Encryption } from "
|
|
3
|
-
import { GetSettingsRepository } from "./abstractions.js";
|
|
4
|
-
import type { TransportSettings } from "../../types.js";
|
|
2
|
+
import { Encryption } from "@webiny/api-core/features/encryption/index.js";
|
|
5
3
|
import { KeyValueStore } from "@webiny/api-core/features/keyValueStore/index.js";
|
|
4
|
+
import { GetSettingsRepository, type ISettingsWithSource } from "./abstractions.js";
|
|
5
|
+
import { CodeMailerSettings } from "../../domain/CodeMailerSettings/abstractions.js";
|
|
6
6
|
declare class GetSettingsRepositoryImpl implements GetSettingsRepository.Interface {
|
|
7
7
|
private keyValueStore;
|
|
8
8
|
private encryption;
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
private codeSettings;
|
|
10
|
+
constructor(keyValueStore: KeyValueStore.Interface, encryption: Encryption.Interface, codeSettings: CodeMailerSettings.Interface);
|
|
11
|
+
get(transportName: string): Promise<Result<ISettingsWithSource>>;
|
|
11
12
|
}
|
|
12
13
|
export declare const GetSettingsRepositoryImplementation: typeof GetSettingsRepositoryImpl & {
|
|
13
14
|
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IGetSettingsRepository>;
|
|
@@ -1,25 +1,41 @@
|
|
|
1
1
|
import { Result } from "@webiny/feature/api";
|
|
2
|
-
import { Encryption } from "
|
|
3
|
-
import { GetSettingsRepository } from "./abstractions.js";
|
|
2
|
+
import { Encryption } from "@webiny/api-core/features/encryption/index.js";
|
|
4
3
|
import { KeyValueStore } from "@webiny/api-core/features/keyValueStore/index.js";
|
|
4
|
+
import { GetSettingsRepository } from "./abstractions.js";
|
|
5
|
+
import { CodeMailerSettings } from "../../domain/CodeMailerSettings/abstractions.js";
|
|
5
6
|
import { MAILER_TRANSPORT_SETTINGS } from "../../constants.js";
|
|
6
7
|
class GetSettingsRepositoryImpl {
|
|
7
|
-
constructor(keyValueStore, encryption) {
|
|
8
|
+
constructor(keyValueStore, encryption, codeSettings) {
|
|
8
9
|
this.keyValueStore = keyValueStore;
|
|
9
10
|
this.encryption = encryption;
|
|
11
|
+
this.codeSettings = codeSettings;
|
|
10
12
|
}
|
|
11
|
-
async get() {
|
|
13
|
+
async get(transportName) {
|
|
14
|
+
// Code-defined settings win over the KV store.
|
|
15
|
+
const codeSettingsValue = this.codeSettings.get(transportName);
|
|
16
|
+
if (codeSettingsValue !== null) {
|
|
17
|
+
return Result.ok({
|
|
18
|
+
settings: codeSettingsValue,
|
|
19
|
+
source: "code"
|
|
20
|
+
});
|
|
21
|
+
}
|
|
12
22
|
const result = await this.keyValueStore.get(MAILER_TRANSPORT_SETTINGS);
|
|
13
23
|
if (result.isFail()) {
|
|
14
|
-
return Result.ok(
|
|
24
|
+
return Result.ok({
|
|
25
|
+
settings: null,
|
|
26
|
+
source: null
|
|
27
|
+
});
|
|
15
28
|
}
|
|
16
29
|
const settings = result.value;
|
|
17
30
|
if (!settings) {
|
|
18
|
-
return Result.ok(
|
|
31
|
+
return Result.ok({
|
|
32
|
+
settings: null,
|
|
33
|
+
source: null
|
|
34
|
+
});
|
|
19
35
|
}
|
|
20
36
|
|
|
21
|
-
// Decrypt password if present
|
|
22
|
-
const password = settings.password ?
|
|
37
|
+
// Decrypt password if present.
|
|
38
|
+
const password = settings.password ? this.encryption.decrypt(String(settings.password)) : "";
|
|
23
39
|
const transportSettings = {
|
|
24
40
|
host: String(settings.host || ""),
|
|
25
41
|
port: Number(settings.port || 25),
|
|
@@ -28,12 +44,15 @@ class GetSettingsRepositoryImpl {
|
|
|
28
44
|
from: String(settings.from || ""),
|
|
29
45
|
replyTo: settings.replyTo ? String(settings.replyTo) : undefined
|
|
30
46
|
};
|
|
31
|
-
return Result.ok(
|
|
47
|
+
return Result.ok({
|
|
48
|
+
settings: transportSettings,
|
|
49
|
+
source: "storage"
|
|
50
|
+
});
|
|
32
51
|
}
|
|
33
52
|
}
|
|
34
53
|
export const GetSettingsRepositoryImplementation = GetSettingsRepository.createImplementation({
|
|
35
54
|
implementation: GetSettingsRepositoryImpl,
|
|
36
|
-
dependencies: [KeyValueStore, Encryption]
|
|
55
|
+
dependencies: [KeyValueStore, Encryption, CodeMailerSettings]
|
|
37
56
|
});
|
|
38
57
|
|
|
39
58
|
//# sourceMappingURL=GetSettingsRepository.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Result","Encryption","GetSettingsRepository","
|
|
1
|
+
{"version":3,"names":["Result","Encryption","KeyValueStore","GetSettingsRepository","CodeMailerSettings","MAILER_TRANSPORT_SETTINGS","GetSettingsRepositoryImpl","constructor","keyValueStore","encryption","codeSettings","get","transportName","codeSettingsValue","ok","settings","source","result","isFail","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 \"@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 ? 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"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,UAAU,QAAQ,+CAA+C;AAC1E,SAASC,aAAa,QAAQ,kDAAkD;AAChF,SAASC,qBAAqB;AAC9B,SAASC,kBAAkB;AAE3B,SAASC,yBAAyB;AAElC,MAAMC,yBAAyB,CAA4C;EACvEC,WAAWA,CACCC,aAAsC,EACtCC,UAAgC,EAChCC,YAA0C,EACpD;IAAA,KAHUF,aAAsC,GAAtCA,aAAsC;IAAA,KACtCC,UAAgC,GAAhCA,UAAgC;IAAA,KAChCC,YAA0C,GAA1CA,YAA0C;EACnD;EAEH,MAAMC,GAAGA,CAACC,aAAqB,EAAwC;IACnE;IACA,MAAMC,iBAAiB,GAAG,IAAI,CAACH,YAAY,CAACC,GAAG,CAACC,aAAa,CAAC;IAC9D,IAAIC,iBAAiB,KAAK,IAAI,EAAE;MAC5B,OAAOb,MAAM,CAACc,EAAE,CAAC;QACbC,QAAQ,EAAEF,iBAAiB;QAC3BG,MAAM,EAAE;MACZ,CAAC,CAAC;IACN;IAEA,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACT,aAAa,CAACG,GAAG,CAAoBN,yBAAyB,CAAC;IAEzF,IAAIY,MAAM,CAACC,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOlB,MAAM,CAACc,EAAE,CAAC;QAAEC,QAAQ,EAAE,IAAI;QAAEC,MAAM,EAAE;MAAK,CAAC,CAAC;IACtD;IAEA,MAAMD,QAAQ,GAAGE,MAAM,CAACE,KAAK;IAC7B,IAAI,CAACJ,QAAQ,EAAE;MACX,OAAOf,MAAM,CAACc,EAAE,CAAC;QAAEC,QAAQ,EAAE,IAAI;QAAEC,MAAM,EAAE;MAAK,CAAC,CAAC;IACtD;;IAEA;IACA,MAAMI,QAAQ,GAAGL,QAAQ,CAACK,QAAQ,GAC5B,IAAI,CAACX,UAAU,CAACY,OAAO,CAACC,MAAM,CAACP,QAAQ,CAACK,QAAQ,CAAC,CAAC,GAClD,EAAE;IAER,MAAMG,iBAAoC,GAAG;MACzCC,IAAI,EAAEF,MAAM,CAACP,QAAQ,CAACS,IAAI,IAAI,EAAE,CAAC;MACjCC,IAAI,EAAEC,MAAM,CAACX,QAAQ,CAACU,IAAI,IAAI,EAAE,CAAC;MACjCE,IAAI,EAAEL,MAAM,CAACP,QAAQ,CAACY,IAAI,IAAI,EAAE,CAAC;MACjCP,QAAQ;MACRQ,IAAI,EAAEN,MAAM,CAACP,QAAQ,CAACa,IAAI,IAAI,EAAE,CAAC;MACjCC,OAAO,EAAEd,QAAQ,CAACc,OAAO,GAAGP,MAAM,CAACP,QAAQ,CAACc,OAAO,CAAC,GAAGC;IAC3D,CAAC;IAED,OAAO9B,MAAM,CAACc,EAAE,CAAC;MAAEC,QAAQ,EAAEQ,iBAAiB;MAAEP,MAAM,EAAE;IAAU,CAAC,CAAC;EACxE;AACJ;AAEA,OAAO,MAAMe,mCAAmC,GAAG5B,qBAAqB,CAAC6B,oBAAoB,CAAC;EAC1FC,cAAc,EAAE3B,yBAAyB;EACzC4B,YAAY,EAAE,CAAChC,aAAa,EAAED,UAAU,EAAEG,kBAAkB;AAChE,CAAC,CAAC","ignoreList":[]}
|
|
@@ -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<
|
|
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").
|
|
9
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IGetSettingsUseCase>;
|
|
11
10
|
};
|
|
12
11
|
export {};
|
|
@@ -3,8 +3,8 @@ class GetSettingsUseCaseImpl {
|
|
|
3
3
|
constructor(repository) {
|
|
4
4
|
this.repository = repository;
|
|
5
5
|
}
|
|
6
|
-
execute() {
|
|
7
|
-
return this.repository.get();
|
|
6
|
+
execute(transportName) {
|
|
7
|
+
return this.repository.get(transportName);
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
10
|
export const GetSettingsUseCaseImplementation = GetSettingsUseCase.createImplementation({
|
|
@@ -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 {
|
|
1
|
+
{"version":3,"names":["GetSettingsUseCase","GetSettingsRepository","GetSettingsUseCaseImpl","constructor","repository","execute","transportName","get","GetSettingsUseCaseImplementation","createImplementation","implementation","dependencies"],"sources":["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"],"mappings":"AACA,SACIA,kBAAkB,EAClBC,qBAAqB;AAIzB,MAAMC,sBAAsB,CAAyC;EACjEC,WAAWA,CAASC,UAA2C,EAAE;IAAA,KAA7CA,UAA2C,GAA3CA,UAA2C;EAAG;EAElEC,OAAOA,CAACC,aAAqB,EAAwC;IACjE,OAAO,IAAI,CAACF,UAAU,CAACG,GAAG,CAACD,aAAa,CAAC;EAC7C;AACJ;AAEA,OAAO,MAAME,gCAAgC,GAAGR,kBAAkB,CAACS,oBAAoB,CAAC;EACpFC,cAAc,EAAER,sBAAsB;EACtCS,YAAY,EAAE,CAACV,qBAAqB;AACxC,CAAC,CAAC","ignoreList":[]}
|
|
@@ -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<
|
|
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
|
|
11
|
-
execute(): Promise<Result<
|
|
16
|
+
export interface IGetSettingsUseCase {
|
|
17
|
+
execute(transportName: string): Promise<Result<ISettingsWithSource>>;
|
|
12
18
|
}
|
|
13
|
-
export declare const GetSettingsUseCase: import("@webiny/di").Abstraction<
|
|
19
|
+
export declare const GetSettingsUseCase: import("@webiny/di").Abstraction<IGetSettingsUseCase>;
|
|
14
20
|
export declare namespace GetSettingsUseCase {
|
|
15
|
-
type Interface =
|
|
21
|
+
type Interface = IGetSettingsUseCase;
|
|
16
22
|
}
|
|
@@ -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<
|
|
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 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"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAevD,OAAO,MAAMC,qBAAqB,GAC9BD,iBAAiB,CAAyB,uBAAuB,CAAC;AAWtE,OAAO,MAAME,kBAAkB,GAAGF,iBAAiB,CAAsB,oBAAoB,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { GetSettingsUseCase } from "./abstractions.js";
|
|
1
|
+
export { GetSettingsUseCase, GetSettingsRepository } from "./abstractions.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["GetSettingsUseCase"],"sources":["index.ts"],"sourcesContent":["export { GetSettingsUseCase } from \"./abstractions.js\";\n"],"mappings":"AAAA,SAASA,kBAAkB","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["GetSettingsUseCase","GetSettingsRepository"],"sources":["index.ts"],"sourcesContent":["export { GetSettingsUseCase, GetSettingsRepository } from \"./abstractions.js\";\n"],"mappings":"AAAA,SAASA,kBAAkB,EAAEC,qBAAqB","ignoreList":[]}
|
|
@@ -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,20 @@
|
|
|
1
|
+
import { ActiveTransport as ActiveTransportAbstraction, MailTransportFactory } from "../../domain/MailTransport/abstractions.js";
|
|
2
|
+
class ActiveTransportImpl {
|
|
3
|
+
constructor(transportFactories) {
|
|
4
|
+
this.transportFactories = transportFactories;
|
|
5
|
+
}
|
|
6
|
+
name() {
|
|
7
|
+
if (this.transportFactories.length === 0) {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
return this.transportFactories[this.transportFactories.length - 1].name;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export const ActiveTransport = ActiveTransportAbstraction.createImplementation({
|
|
14
|
+
implementation: ActiveTransportImpl,
|
|
15
|
+
dependencies: [[MailTransportFactory, {
|
|
16
|
+
multiple: true
|
|
17
|
+
}]]
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=ActiveTransport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ActiveTransport","ActiveTransportAbstraction","MailTransportFactory","ActiveTransportImpl","constructor","transportFactories","name","length","createImplementation","implementation","dependencies","multiple"],"sources":["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"],"mappings":"AAAA,SACIA,eAAe,IAAIC,0BAA0B,EAC7CC,oBAAoB;AAGxB,MAAMC,mBAAmB,CAAiD;EACtEC,WAAWA,CAASC,kBAAoD,EAAE;IAAA,KAAtDA,kBAAoD,GAApDA,kBAAoD;EAAG;EAE3EC,IAAIA,CAAA,EAAkB;IAClB,IAAI,IAAI,CAACD,kBAAkB,CAACE,MAAM,KAAK,CAAC,EAAE;MACtC,OAAO,IAAI;IACf;IACA,OAAO,IAAI,CAACF,kBAAkB,CAAC,IAAI,CAACA,kBAAkB,CAACE,MAAM,GAAG,CAAC,CAAC,CAACD,IAAI;EAC3E;AACJ;AAEA,OAAO,MAAMN,eAAe,GAAGC,0BAA0B,CAACO,oBAAoB,CAAC;EAC3EC,cAAc,EAAEN,mBAAmB;EACnCO,YAAY,EAAE,CAAC,CAACR,oBAAoB,EAAE;IAAES,QAAQ,EAAE;EAAK,CAAC,CAAC;AAC7D,CAAC,CAAC","ignoreList":[]}
|
|
@@ -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,31 +1,32 @@
|
|
|
1
1
|
import { Result } from "@webiny/feature/api";
|
|
2
2
|
import { MailerService as Abstraction } from "../../domain/MailerService/abstractions.js";
|
|
3
3
|
import { NoTransportAvailableError, NoSettingsConfiguredError, TransportSendError } from "../../domain/MailerService/errors.js";
|
|
4
|
-
import { MailTransportFactory } from "../../domain/MailTransport/abstractions.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) {
|
|
7
|
+
constructor(getSettingsRepository, activeTransport, transportFactories) {
|
|
9
8
|
this.getSettingsRepository = getSettingsRepository;
|
|
9
|
+
this.activeTransport = activeTransport;
|
|
10
10
|
this.transportFactories = transportFactories;
|
|
11
11
|
}
|
|
12
12
|
async sendMail(data) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
const transportName = this.activeTransport.name();
|
|
14
|
+
if (!transportName) {
|
|
15
|
+
return Result.fail(new NoTransportAvailableError());
|
|
16
|
+
}
|
|
17
|
+
const result = await this.getSettingsRepository.get(transportName);
|
|
18
|
+
const {
|
|
19
|
+
settings
|
|
20
|
+
} = result.value;
|
|
16
21
|
if (!settings) {
|
|
17
22
|
return Result.fail(new NoSettingsConfiguredError());
|
|
18
23
|
}
|
|
19
|
-
|
|
20
|
-
// Get and configure transport
|
|
21
|
-
const transport = await this.getTransport(settings);
|
|
24
|
+
const transport = await this.getTransport(transportName, settings);
|
|
22
25
|
if (!transport) {
|
|
23
26
|
return Result.fail(new NoTransportAvailableError());
|
|
24
27
|
}
|
|
25
28
|
try {
|
|
26
29
|
const response = await transport.send(data);
|
|
27
|
-
|
|
28
|
-
// If transport.send returned an error in the response
|
|
29
30
|
if (response.error) {
|
|
30
31
|
return Result.fail(new TransportSendError(response.error));
|
|
31
32
|
}
|
|
@@ -34,17 +35,17 @@ class MailerServiceImpl {
|
|
|
34
35
|
return Result.fail(new TransportSendError(error));
|
|
35
36
|
}
|
|
36
37
|
}
|
|
37
|
-
async getTransport(settings) {
|
|
38
|
-
|
|
38
|
+
async getTransport(transportName, settings) {
|
|
39
|
+
const factory = this.transportFactories.find(f => f.name === transportName);
|
|
40
|
+
if (!factory) {
|
|
39
41
|
return null;
|
|
40
42
|
}
|
|
41
|
-
const factory = this.transportFactories[this.transportFactories.length - 1];
|
|
42
43
|
return factory.createTransport(settings);
|
|
43
44
|
}
|
|
44
45
|
}
|
|
45
46
|
export const MailerService = Abstraction.createImplementation({
|
|
46
47
|
implementation: MailerServiceImpl,
|
|
47
|
-
dependencies: [GetSettingsRepository, [MailTransportFactory, {
|
|
48
|
+
dependencies: [GetSettingsRepository, ActiveTransport, [MailTransportFactory, {
|
|
48
49
|
multiple: true
|
|
49
50
|
}]]
|
|
50
51
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Result","MailerService","Abstraction","NoTransportAvailableError","NoSettingsConfiguredError","TransportSendError","
|
|
1
|
+
{"version":3,"names":["Result","MailerService","Abstraction","NoTransportAvailableError","NoSettingsConfiguredError","TransportSendError","ActiveTransport","MailTransportFactory","GetSettingsRepository","MailerServiceImpl","constructor","getSettingsRepository","activeTransport","transportFactories","sendMail","data","transportName","name","fail","result","get","settings","value","transport","getTransport","response","send","error","ok","factory","find","f","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 {\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"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,aAAa,IAAIC,WAAW;AACrC,SACIC,yBAAyB,EACzBC,yBAAyB,EACzBC,kBAAkB;AAEtB,SACIC,eAAe,EAEfC,oBAAoB;AAExB,SAASC,qBAAqB;AAG9B,MAAMC,iBAAiB,CAAkC;EACrDC,WAAWA,CACCC,qBAAsD,EACtDC,eAA0C,EAC1CC,kBAAoD,EAC9D;IAAA,KAHUF,qBAAsD,GAAtDA,qBAAsD;IAAA,KACtDC,eAA0C,GAA1CA,eAA0C;IAAA,KAC1CC,kBAAoD,GAApDA,kBAAoD;EAC7D;EAEH,MAAMC,QAAQA,CAAUC,IAAuB,EAAyB;IACpE,MAAMC,aAAa,GAAG,IAAI,CAACJ,eAAe,CAACK,IAAI,CAAC,CAAC;IAEjD,IAAI,CAACD,aAAa,EAAE;MAChB,OAAOhB,MAAM,CAACkB,IAAI,CAAC,IAAIf,yBAAyB,CAAC,CAAC,CAAC;IACvD;IAEA,MAAMgB,MAAM,GAAG,MAAM,IAAI,CAACR,qBAAqB,CAACS,GAAG,CAACJ,aAAa,CAAC;IAClE,MAAM;MAAEK;IAAS,CAAC,GAAGF,MAAM,CAACG,KAAK;IAEjC,IAAI,CAACD,QAAQ,EAAE;MACX,OAAOrB,MAAM,CAACkB,IAAI,CAAC,IAAId,yBAAyB,CAAC,CAAC,CAAC;IACvD;IAEA,MAAMmB,SAAS,GAAG,MAAM,IAAI,CAACC,YAAY,CAACR,aAAa,EAAEK,QAAQ,CAAC;IAElE,IAAI,CAACE,SAAS,EAAE;MACZ,OAAOvB,MAAM,CAACkB,IAAI,CAAC,IAAIf,yBAAyB,CAAC,CAAC,CAAC;IACvD;IAEA,IAAI;MACA,MAAMsB,QAAQ,GAAG,MAAMF,SAAS,CAACG,IAAI,CAACX,IAAI,CAAC;MAE3C,IAAIU,QAAQ,CAACE,KAAK,EAAE;QAChB,OAAO3B,MAAM,CAACkB,IAAI,CAAC,IAAIb,kBAAkB,CAACoB,QAAQ,CAACE,KAAK,CAAC,CAAC;MAC9D;MAEA,OAAO3B,MAAM,CAAC4B,EAAE,CAACH,QAAQ,CAAC;IAC9B,CAAC,CAAC,OAAOE,KAAK,EAAE;MACZ,OAAO3B,MAAM,CAACkB,IAAI,CAAC,IAAIb,kBAAkB,CAACsB,KAAK,CAAC,CAAC;IACrD;EACJ;EAEA,MAAcH,YAAYA,CACtBR,aAAqB,EACrBK,QAA2B,EACY;IACvC,MAAMQ,OAAO,GAAG,IAAI,CAAChB,kBAAkB,CAACiB,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACd,IAAI,KAAKD,aAAa,CAAC;IAC3E,IAAI,CAACa,OAAO,EAAE;MACV,OAAO,IAAI;IACf;IACA,OAAOA,OAAO,CAACG,eAAe,CAACX,QAAQ,CAAC;EAC5C;AACJ;AAEA,OAAO,MAAMpB,aAAa,GAAGC,WAAW,CAAC+B,oBAAoB,CAAC;EAC1DC,cAAc,EAAEzB,iBAAiB;EACjC0B,YAAY,EAAE,CACV3B,qBAAqB,EACrBF,eAAe,EACf,CAACC,oBAAoB,EAAE;IAAE6B,QAAQ,EAAE;EAAK,CAAC,CAAC;AAElD,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { createFeature } from "@webiny/feature/api";
|
|
2
2
|
import { MailerService } from "./MailerService.js";
|
|
3
|
+
import { ActiveTransport } from "./ActiveTransport.js";
|
|
3
4
|
export const MailerServiceFeature = createFeature({
|
|
4
5
|
name: "Mailer/MailerService",
|
|
5
6
|
register(container) {
|
|
7
|
+
container.register(ActiveTransport).inSingletonScope();
|
|
6
8
|
container.register(MailerService).inSingletonScope();
|
|
7
9
|
}
|
|
8
10
|
});
|
|
@@ -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;
|
|
1
|
+
{"version":3,"names":["createFeature","MailerService","ActiveTransport","MailerServiceFeature","name","register","container","inSingletonScope"],"sources":["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"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,aAAa;AACtB,SAASC,eAAe;AAExB,OAAO,MAAMC,oBAAoB,GAAGH,aAAa,CAAC;EAC9CI,IAAI,EAAE,sBAAsB;EAC5BC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACH,eAAe,CAAC,CAACK,gBAAgB,CAAC,CAAC;IACtDD,SAAS,CAACD,QAAQ,CAACJ,aAAa,CAAC,CAACM,gBAAgB,CAAC,CAAC;EACxD;AACJ,CAAC,CAAC","ignoreList":[]}
|