diff --git a/api/package-lock.json b/api/package-lock.json
index 2284efe6..1abb8898 100644
--- a/api/package-lock.json
+++ b/api/package-lock.json
@@ -33,7 +33,6 @@
"connect-mongo": "^5.1.0",
"cookie-parser": "^1.4.6",
"dotenv": "^16.3.1",
- "ejs": "^3.1.9",
"express-session": "^1.17.3",
"handlebars": "^4.7.8",
"module-alias": "^2.2.3",
@@ -7408,7 +7407,8 @@
"node_modules/async": {
"version": "3.2.5",
"resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
- "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg=="
+ "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==",
+ "optional": true
},
"node_modules/async-mutex": {
"version": "0.4.1",
@@ -9629,6 +9629,7 @@
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
"integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
+ "optional": true,
"dependencies": {
"jake": "^10.8.5"
},
@@ -10805,6 +10806,7 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
"integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
+ "optional": true,
"dependencies": {
"minimatch": "^5.0.1"
}
@@ -10813,6 +10815,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "optional": true,
"dependencies": {
"balanced-match": "^1.0.0"
}
@@ -10821,6 +10824,7 @@
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
"integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "optional": true,
"dependencies": {
"brace-expansion": "^2.0.1"
},
@@ -12526,6 +12530,7 @@
"version": "10.8.7",
"resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz",
"integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==",
+ "optional": true,
"dependencies": {
"async": "^3.2.3",
"chalk": "^4.0.2",
diff --git a/api/package.json b/api/package.json
index 70e5d59a..2f514805 100644
--- a/api/package.json
+++ b/api/package.json
@@ -68,7 +68,6 @@
"connect-mongo": "^5.1.0",
"cookie-parser": "^1.4.6",
"dotenv": "^16.3.1",
- "ejs": "^3.1.9",
"express-session": "^1.17.3",
"handlebars": "^4.7.8",
"module-alias": "^2.2.3",
diff --git a/api/src/app.module.ts b/api/src/app.module.ts
index 3c4692a1..86c35c44 100644
--- a/api/src/app.module.ts
+++ b/api/src/app.module.ts
@@ -71,7 +71,15 @@ const i18nOptions: I18nOptions = {
debug: false,
}),
template: {
- adapter: new MjmlAdapter('ejs', { inlineCssEnabled: false }),
+ adapter: new MjmlAdapter(
+ 'handlebars',
+ {
+ inlineCssEnabled: false,
+ },
+ {
+ handlebar: {},
+ },
+ ),
dir: path.join(process.cwd(), 'dist', 'templates'),
options: {
context: {
diff --git a/api/src/templates/account_confirmation.mjml b/api/src/templates/account_confirmation.mjml
index 07230f9d..debb4d1a 100644
--- a/api/src/templates/account_confirmation.mjml
+++ b/api/src/templates/account_confirmation.mjml
@@ -2,34 +2,38 @@
-
+
- <%= t('hi') %> <%= first_name %>,
- <%= t('account_successfully_created_confirm_password') %>
+
+ {{t 'hi'}} {{first_name}},
+
+
+ {{t 'account_successfully_created_confirm_password'}}
+
- <%= t('confirm_account') %>
+
+ {{t 'confirm_account'}}
+
<%= t('confirm') %>
+ {{t 'confirm'}}
+
- <%= t('best_regards') %>
- <%= this.appName %>
+
+ {{t 'best_regards'}}
+
+
+ {{appName}}
+
diff --git a/api/src/templates/invitation.mjml b/api/src/templates/invitation.mjml
index 515a4899..1cd21878 100644
--- a/api/src/templates/invitation.mjml
+++ b/api/src/templates/invitation.mjml
@@ -2,36 +2,39 @@
-
+
- <%= t('welcome') %>,
+ {{t 'welcome'}}
+
+
+
+ {{t 'invitation_for_account_creation'}} {{appName}} {{t 'account'}}.
<%= `${t('invitation_for_account_creation')} ${this.appName}
- ${t('account')}.` %>
-
- <%= t('create_account') %>{{ t 'create_account'}}
<%= t('join') %>
+ {{t 'join'}}
<%= t('best_regards') %>
+ >{{t 'best_regards'}}
+
<%= this.appName %>{{this.appName }}
diff --git a/api/src/templates/password_reset.mjml b/api/src/templates/password_reset.mjml
index 015425ae..2e66de56 100644
--- a/api/src/templates/password_reset.mjml
+++ b/api/src/templates/password_reset.mjml
@@ -2,33 +2,37 @@
-
+
- <%= t('hi') %> <%= first_name %>,
- <%= t('password_reset_request') %>
- <%= t('click_to_reset_password') %>
+
+ {{t 'hi'}} {{first_name}},
+
+
+ {{t 'password_reset_request'}}
+
+
+ {{t 'click_to_reset_password'}}
+
<%= t('reset') %>
+ {{t 'reset'}}
+
- <%= t('best_regards') %>
- <%= this.appName %>
+
+ {{t 'best_regards'}}
+
+
+ {{appName}}
+
diff --git a/api/src/user/services/invitation.service.ts b/api/src/user/services/invitation.service.ts
index 69a1cc75..9e287f61 100644
--- a/api/src/user/services/invitation.service.ts
+++ b/api/src/user/services/invitation.service.ts
@@ -1,5 +1,5 @@
/*
- * Copyright © 2024 Hexastack. All rights reserved.
+ * Copyright © 2025 Hexastack. All rights reserved.
*
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.