@atlantjs/backend 7.1.24 → 7.2.1

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.
@@ -1,5 +1,10 @@
1
1
  import { EnvironmentPoint } from "@atlantjs/arch";
2
+ import { EmailDeliveryProviderPoint } from "../../../email-delivery/points/email-delivery-provider.point";
2
3
  export declare const APP_PORT: number;
3
4
  export declare const LOAD_MODULES: string[];
4
5
  export declare const CORS_ALLOWED_ORIGINS: string;
5
6
  export declare const ENVIRONMENT: EnvironmentPoint;
7
+ export declare const EMAIL_DELIVERY_SERVICE_PROVIDER: EmailDeliveryProviderPoint;
8
+ export declare const EMAIL_DELIVERY_FALLBACK_PROVIDER: EmailDeliveryProviderPoint;
9
+ export declare const RESEND_API_KEY: string;
10
+ export declare const AWS_REGION: string;
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ENVIRONMENT = exports.CORS_ALLOWED_ORIGINS = exports.LOAD_MODULES = exports.APP_PORT = void 0;
3
+ exports.AWS_REGION = exports.RESEND_API_KEY = exports.EMAIL_DELIVERY_FALLBACK_PROVIDER = exports.EMAIL_DELIVERY_SERVICE_PROVIDER = exports.ENVIRONMENT = exports.CORS_ALLOWED_ORIGINS = exports.LOAD_MODULES = exports.APP_PORT = void 0;
4
4
  const arch_1 = require("@atlantjs/arch");
5
5
  const parchment_1 = require("@atlantjs/parchment");
6
+ const email_delivery_provider_point_1 = require("../../../email-delivery/points/email-delivery-provider.point");
6
7
  exports.APP_PORT = parchment_1.Parchment.verse({
7
8
  name: "APP_PORT",
8
9
  type: "port-number",
@@ -34,3 +35,35 @@ exports.ENVIRONMENT = parchment_1.Parchment.verse({
34
35
  ],
35
36
  description: "The current environment in which the application is running",
36
37
  });
38
+ exports.EMAIL_DELIVERY_SERVICE_PROVIDER = parchment_1.Parchment.verse({
39
+ name: "EMAIL_DELIVERY_SERVICE_PROVIDER",
40
+ type: "enum",
41
+ isRequired: true,
42
+ values: [
43
+ email_delivery_provider_point_1.EmailDeliveryProviderPoint.amazonSES,
44
+ email_delivery_provider_point_1.EmailDeliveryProviderPoint.resend,
45
+ ],
46
+ description: "The current environment in which the application is running",
47
+ });
48
+ exports.EMAIL_DELIVERY_FALLBACK_PROVIDER = parchment_1.Parchment.verse({
49
+ name: "EMAIL_DELIVERY_FALLBACK_PROVIDER",
50
+ type: "enum",
51
+ isRequired: true,
52
+ values: [
53
+ email_delivery_provider_point_1.EmailDeliveryProviderPoint.amazonSES,
54
+ email_delivery_provider_point_1.EmailDeliveryProviderPoint.resend,
55
+ ],
56
+ description: "The current environment in which the application is running",
57
+ });
58
+ exports.RESEND_API_KEY = parchment_1.Parchment.verse({
59
+ name: "RESEND_API_KEY",
60
+ type: "text",
61
+ isRequired: true,
62
+ description: "API key used to authenticate requests to the Resend email delivery service",
63
+ });
64
+ exports.AWS_REGION = parchment_1.Parchment.verse({
65
+ name: "AWS_REGION",
66
+ type: "text",
67
+ isRequired: true,
68
+ description: "Specifies the AWS region to be used by the application",
69
+ });
@@ -0,0 +1,4 @@
1
+ import { EmailDeliveryProviderParamsInterface } from "./email-delivery.provider.type";
2
+ export declare class EmailDeliveryProvider {
3
+ static send({ to, from, subject, html, }: EmailDeliveryProviderParamsInterface): Promise<void>;
4
+ }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EmailDeliveryProvider = void 0;
4
+ const env_vars_1 = require("../backend/application/envs/env-vars");
5
+ const email_delivery_service_1 = require("./email-delivery.service");
6
+ const email_delivery_provider_point_1 = require("./points/email-delivery-provider.point");
7
+ const email_delivery_amazon_ses_provider_1 = require("./providers/email-delivery-amazon-ses.provider");
8
+ const email_delivery_resend_provider_1 = require("./providers/email-delivery-resend.provider");
9
+ function createEmailServiceProvider() {
10
+ switch (env_vars_1.EMAIL_DELIVERY_SERVICE_PROVIDER) {
11
+ case email_delivery_provider_point_1.EmailDeliveryProviderPoint.amazonSES:
12
+ return new email_delivery_amazon_ses_provider_1.SESProvider();
13
+ default:
14
+ return new email_delivery_resend_provider_1.ResendProvider();
15
+ }
16
+ }
17
+ function createEmailFallBackProvider() {
18
+ switch (env_vars_1.EMAIL_DELIVERY_FALLBACK_PROVIDER) {
19
+ case email_delivery_provider_point_1.EmailDeliveryProviderPoint.amazonSES:
20
+ return new email_delivery_amazon_ses_provider_1.SESProvider();
21
+ default:
22
+ return new email_delivery_resend_provider_1.ResendProvider();
23
+ }
24
+ }
25
+ const emailService = new email_delivery_service_1.EmailDeliveryService(createEmailServiceProvider());
26
+ const emailFallback = new email_delivery_service_1.EmailDeliveryService(createEmailFallBackProvider());
27
+ class EmailDeliveryProvider {
28
+ static async send({ to, from, subject, html, }) {
29
+ try {
30
+ await emailService.send({ to, from, subject, html });
31
+ }
32
+ catch {
33
+ await emailFallback.send({ to, from, subject, html });
34
+ }
35
+ }
36
+ }
37
+ exports.EmailDeliveryProvider = EmailDeliveryProvider;
@@ -0,0 +1,9 @@
1
+ export interface EmailDeliveryProviderParamsInterface {
2
+ to: string;
3
+ subject: string;
4
+ html: string;
5
+ from: string;
6
+ }
7
+ export interface EmailDeliveryProviderInterface {
8
+ send(params: EmailDeliveryProviderParamsInterface): Promise<void>;
9
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,6 @@
1
+ import { EmailDeliveryProviderInterface, EmailDeliveryProviderParamsInterface } from "./email-delivery.provider.type";
2
+ export declare class EmailDeliveryService {
3
+ private provider;
4
+ constructor(provider: EmailDeliveryProviderInterface);
5
+ send(params: EmailDeliveryProviderParamsInterface): Promise<void>;
6
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EmailDeliveryService = void 0;
4
+ class EmailDeliveryService {
5
+ constructor(provider) {
6
+ this.provider = provider;
7
+ }
8
+ async send(params) {
9
+ return this.provider.send(params);
10
+ }
11
+ }
12
+ exports.EmailDeliveryService = EmailDeliveryService;
@@ -0,0 +1,4 @@
1
+ export declare enum EmailDeliveryProviderPoint {
2
+ resend = "resend",
3
+ amazonSES = "amazonSES"
4
+ }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EmailDeliveryProviderPoint = void 0;
4
+ var EmailDeliveryProviderPoint;
5
+ (function (EmailDeliveryProviderPoint) {
6
+ EmailDeliveryProviderPoint["resend"] = "resend";
7
+ EmailDeliveryProviderPoint["amazonSES"] = "amazonSES";
8
+ })(EmailDeliveryProviderPoint || (exports.EmailDeliveryProviderPoint = EmailDeliveryProviderPoint = {}));
@@ -0,0 +1,4 @@
1
+ import { EmailDeliveryProvider } from "../email-delivery.factory";
2
+ export declare class SESProvider implements EmailDeliveryProvider {
3
+ send({ to, subject, html, from }: any): Promise<void>;
4
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SESProvider = void 0;
4
+ const client_ses_1 = require("@aws-sdk/client-ses");
5
+ const env_vars_1 = require("../../backend/application/envs/env-vars");
6
+ const ses = new client_ses_1.SESClient({
7
+ region: env_vars_1.AWS_REGION,
8
+ });
9
+ class SESProvider {
10
+ async send({ to, subject, html, from }) {
11
+ const command = new client_ses_1.SendEmailCommand({
12
+ Source: from,
13
+ Destination: {
14
+ ToAddresses: [to],
15
+ },
16
+ Message: {
17
+ Subject: { Data: subject },
18
+ Body: {
19
+ Html: { Data: html },
20
+ },
21
+ },
22
+ });
23
+ await ses.send(command);
24
+ }
25
+ }
26
+ exports.SESProvider = SESProvider;
@@ -0,0 +1,4 @@
1
+ import { EmailDeliveryProvider } from "../email-delivery.factory";
2
+ export declare class ResendProvider implements EmailDeliveryProvider {
3
+ send({ to, subject, html, from }: any): Promise<void>;
4
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResendProvider = void 0;
4
+ const resend_1 = require("resend");
5
+ const env_vars_1 = require("../../backend/application/envs/env-vars");
6
+ const resend = new resend_1.Resend(env_vars_1.RESEND_API_KEY);
7
+ class ResendProvider {
8
+ async send({ to, subject, html, from }) {
9
+ await resend.emails.send({
10
+ from,
11
+ to,
12
+ subject,
13
+ html,
14
+ });
15
+ }
16
+ }
17
+ exports.ResendProvider = ResendProvider;
package/index.d.ts CHANGED
@@ -22,3 +22,4 @@ export { initializeApi } from "./setup";
22
22
  export { InjectionsAbstract } from "./backend/application/injections.abstract";
23
23
  export { Injections } from "./backend/application/injections.abstract.type";
24
24
  export { ControllerResponse } from "./backend/infrastructure/controllers/controller-response.abstract";
25
+ export { EmailDeliveryProvider } from "./email-delivery/email-delivery.factory";
package/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ControllerResponse = exports.InjectionsAbstract = exports.initializeApi = exports.injectable = exports.inject = exports.Container = exports.Server = exports.DefaultErrorHandlerMiddleware = exports.CorsMiddleware = exports.BodyParserMiddleware = exports.DiContainerAbstract = exports.diContainer = exports.startContainer = exports.ValidatorAbstract = exports.ControllerAbstract = exports.CommandAbstract = exports.ServiceAbstract = exports.RepositoryAbstract = exports.ProviderAbstract = exports.MiddlewareHandlerAbstract = exports.BeforeUpdate = exports.BeforeInsert = exports.ManyToMany = exports.OneToOne = exports.OneToMany = exports.ManyToOne = exports.JoinColumn = exports.Entity = exports.Column = exports.PrimaryColumn = exports.ENVIRONMENT = exports.CORS_ALLOWED_ORIGINS = exports.LOAD_MODULES = exports.APP_PORT = exports.Params = exports.Param = exports.Req = exports.Body = exports.Res = exports.JsonController = exports.UseBefore = exports.Patch = exports.Delete = exports.Post = exports.Get = exports.getFromContainer = void 0;
3
+ exports.EmailDeliveryProvider = exports.ControllerResponse = exports.InjectionsAbstract = exports.initializeApi = exports.injectable = exports.inject = exports.Container = exports.Server = exports.DefaultErrorHandlerMiddleware = exports.CorsMiddleware = exports.BodyParserMiddleware = exports.DiContainerAbstract = exports.diContainer = exports.startContainer = exports.ValidatorAbstract = exports.ControllerAbstract = exports.CommandAbstract = exports.ServiceAbstract = exports.RepositoryAbstract = exports.ProviderAbstract = exports.MiddlewareHandlerAbstract = exports.BeforeUpdate = exports.BeforeInsert = exports.ManyToMany = exports.OneToOne = exports.OneToMany = exports.ManyToOne = exports.JoinColumn = exports.Entity = exports.Column = exports.PrimaryColumn = exports.ENVIRONMENT = exports.CORS_ALLOWED_ORIGINS = exports.LOAD_MODULES = exports.APP_PORT = exports.Params = exports.Param = exports.Req = exports.Body = exports.Res = exports.JsonController = exports.UseBefore = exports.Patch = exports.Delete = exports.Post = exports.Get = exports.getFromContainer = void 0;
4
4
  require("./backend/application/envs/load-envs");
5
5
  require("reflect-metadata");
6
6
  const setup_1 = require("./setup");
@@ -71,3 +71,5 @@ var injections_abstract_1 = require("./backend/application/injections.abstract")
71
71
  Object.defineProperty(exports, "InjectionsAbstract", { enumerable: true, get: function () { return injections_abstract_1.InjectionsAbstract; } });
72
72
  var controller_response_abstract_1 = require("./backend/infrastructure/controllers/controller-response.abstract");
73
73
  Object.defineProperty(exports, "ControllerResponse", { enumerable: true, get: function () { return controller_response_abstract_1.ControllerResponse; } });
74
+ var email_delivery_factory_1 = require("./email-delivery/email-delivery.factory");
75
+ Object.defineProperty(exports, "EmailDeliveryProvider", { enumerable: true, get: function () { return email_delivery_factory_1.EmailDeliveryProvider; } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlantjs/backend",
3
- "version": "7.1.24",
3
+ "version": "7.2.1",
4
4
  "main": "index.js",
5
5
  "license": "UNLICENSED",
6
6
  "publishConfig": {
@@ -28,9 +28,10 @@
28
28
  "test:unit:cov": "yarn test:unit --coverage --runInBand"
29
29
  },
30
30
  "dependencies": {
31
- "@atlantjs/arch": "14.0.3",
32
- "@atlantjs/database": "1.0.29",
33
- "@atlantjs/parchment": "1.0.21",
31
+ "@atlantjs/arch": "14.0.4",
32
+ "@atlantjs/database": "1.0.30",
33
+ "@atlantjs/parchment": "1.0.22",
34
+ "@aws-sdk/client-ses": "3.1009.0",
34
35
  "body-parser": "1.20.2",
35
36
  "class-transformer": "0.5.1",
36
37
  "class-validator": "0.14.1",
@@ -40,9 +41,10 @@
40
41
  "express": "4.19.2",
41
42
  "helmet": "7.1.0",
42
43
  "inversify": "6.0.2",
43
- "lodash": "^4.17.21",
44
+ "lodash": "4.17.21",
44
45
  "module-alias": "2.2.3",
45
46
  "reflect-metadata": "0.2.2",
47
+ "resend": "6.9.3",
46
48
  "routing-controllers": "0.10.4",
47
49
  "routing-controllers-openapi": "4.0.0"
48
50
  },
@@ -51,7 +53,7 @@
51
53
  "@types/cookie-parser": "1.4.8",
52
54
  "@types/cors": "2.8.17",
53
55
  "@types/express": "5.0.0",
54
- "@types/lodash": "^4.17.16",
56
+ "@types/lodash": "4.17.16",
55
57
  "@types/node": "22.13.5",
56
58
  "copyfiles": "2.4.1",
57
59
  "cross-env": "7.0.3",