@platform-x/hep-notification-client 1.3.3 → 1.3.5

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 (141) hide show
  1. package/dist/src/common/service/requestService.d.ts +26 -0
  2. package/dist/src/common/service/requestService.js +1 -79
  3. package/dist/src/common/service/secretKeyManager.services.d.ts +0 -0
  4. package/{src/common/service/secretKeyManager.services.ts → dist/src/common/service/secretKeyManager.services.js} +2 -1
  5. package/dist/src/common/service/twilioService.d.ts +19 -0
  6. package/dist/src/common/service/twilioService.js +11 -3
  7. package/dist/src/common/util/commonUtil.d.ts +22 -0
  8. package/dist/src/common/util/commonUtil.js +1 -119
  9. package/dist/src/common/util/errorHandler.d.ts +44 -0
  10. package/dist/src/common/util/errorHandler.js +6 -4
  11. package/dist/src/common/util/logger.d.ts +68 -0
  12. package/dist/src/common/util/logger.js +1 -1
  13. package/dist/src/common/util/requestTracer.d.ts +2 -0
  14. package/dist/src/common/util/requestTracer.js +1 -18
  15. package/dist/src/common/util/solrConnector.d.ts +47 -0
  16. package/dist/src/common/util/solrConnector.js +226 -85
  17. package/dist/src/config/index.d.ts +30 -0
  18. package/dist/src/config/index.js +4 -49
  19. package/dist/src/index.d.ts +5 -0
  20. package/dist/src/index.js +22 -0
  21. package/dist/src/platform-x/constants/index.d.ts +18 -0
  22. package/dist/src/platform-x/constants/index.js +14 -2
  23. package/dist/src/platform-x/constants/style.d.ts +1 -0
  24. package/dist/src/platform-x/dataSource/emailDataSource.d.ts +5 -0
  25. package/dist/src/platform-x/dataSource/emailDataSource.js +13 -4
  26. package/dist/src/platform-x/database/connection.d.ts +8 -0
  27. package/dist/src/platform-x/database/connection.js +6 -3
  28. package/dist/src/platform-x/database/dao/formBuilder.dao.d.ts +9 -0
  29. package/dist/src/platform-x/database/dao/formBuilder.dao.js +1 -1
  30. package/dist/src/platform-x/database/index.d.ts +7 -0
  31. package/dist/src/platform-x/database/models/formBuilder.model.d.ts +34 -0
  32. package/dist/src/platform-x/util/emailHandler.d.ts +62 -0
  33. package/dist/src/platform-x/util/emailHandler.js +148 -56
  34. package/dist/src/platform-x/util/emailTemplate.d.ts +4 -0
  35. package/dist/src/platform-x/util/emailTemplate.js +1 -4
  36. package/dist/src/platform-x/util/solr-data-source/SolrHttpDataSource.d.ts +29 -0
  37. package/dist/src/platform-x/util/solr-data-source/SolrHttpDataSource.js +45 -31
  38. package/package.json +1 -1
  39. package/dist/jest-setup.js +0 -28
  40. package/dist/jest-setup.js.map +0 -1
  41. package/dist/src/common/controllers/common_controller.js +0 -72
  42. package/dist/src/common/controllers/common_controller.js.map +0 -1
  43. package/dist/src/common/controllers/index.js +0 -29
  44. package/dist/src/common/controllers/index.js.map +0 -1
  45. package/dist/src/common/middleware/commonMiddleware.js +0 -141
  46. package/dist/src/common/middleware/commonMiddleware.js.map +0 -1
  47. package/dist/src/common/service/requestService.js.map +0 -1
  48. package/dist/src/common/service/twilioService.js.map +0 -1
  49. package/dist/src/common/util/commonUtil.js.map +0 -1
  50. package/dist/src/common/util/constants.js +0 -18
  51. package/dist/src/common/util/constants.js.map +0 -1
  52. package/dist/src/common/util/errorHandler.js.map +0 -1
  53. package/dist/src/common/util/httpCodes.js +0 -26
  54. package/dist/src/common/util/httpCodes.js.map +0 -1
  55. package/dist/src/common/util/logger.js.map +0 -1
  56. package/dist/src/common/util/requestTracer.js.map +0 -1
  57. package/dist/src/common/util/solrConnector.js.map +0 -1
  58. package/dist/src/config/index.js.map +0 -1
  59. package/dist/src/platform-x/app.js +0 -35
  60. package/dist/src/platform-x/app.js.map +0 -1
  61. package/dist/src/platform-x/constants/index.js.map +0 -1
  62. package/dist/src/platform-x/constants/style.js.map +0 -1
  63. package/dist/src/platform-x/controllers/cronController.js +0 -399
  64. package/dist/src/platform-x/controllers/cronController.js.map +0 -1
  65. package/dist/src/platform-x/controllers/fileUploadController.js +0 -76
  66. package/dist/src/platform-x/controllers/fileUploadController.js.map +0 -1
  67. package/dist/src/platform-x/controllers/graphRESTControllers.js +0 -183
  68. package/dist/src/platform-x/controllers/graphRESTControllers.js.map +0 -1
  69. package/dist/src/platform-x/controllers/index.js +0 -30
  70. package/dist/src/platform-x/controllers/index.js.map +0 -1
  71. package/dist/src/platform-x/controllers/siteDomainController.js +0 -74
  72. package/dist/src/platform-x/controllers/siteDomainController.js.map +0 -1
  73. package/dist/src/platform-x/dataSource/emailDataSource.js.map +0 -1
  74. package/dist/src/platform-x/database/connection.js.map +0 -1
  75. package/dist/src/platform-x/database/dao/formBuilder.dao.js.map +0 -1
  76. package/dist/src/platform-x/database/dao/siteDomain.dao.js +0 -73
  77. package/dist/src/platform-x/database/dao/siteDomain.dao.js.map +0 -1
  78. package/dist/src/platform-x/database/index.js.map +0 -1
  79. package/dist/src/platform-x/database/interfaces/site_domain.interface.js +0 -3
  80. package/dist/src/platform-x/database/interfaces/site_domain.interface.js.map +0 -1
  81. package/dist/src/platform-x/database/models/formBuilder.model.js.map +0 -1
  82. package/dist/src/platform-x/database/models/site_domains.model.js +0 -51
  83. package/dist/src/platform-x/database/models/site_domains.model.js.map +0 -1
  84. package/dist/src/platform-x/routes/index.js +0 -19
  85. package/dist/src/platform-x/routes/index.js.map +0 -1
  86. package/dist/src/platform-x/services/cron.services.js +0 -117
  87. package/dist/src/platform-x/services/cron.services.js.map +0 -1
  88. package/dist/src/platform-x/util/emailHandler.js.map +0 -1
  89. package/dist/src/platform-x/util/emailTemplate.js.map +0 -1
  90. package/dist/src/platform-x/util/solr-data-source/SolrHttpDataSource.js.map +0 -1
  91. package/dist/src/server.js +0 -38
  92. package/dist/src/server.js.map +0 -1
  93. package/dist/swagger.json +0 -247
  94. package/dist/test/controllers/common_controller.spec.js +0 -79
  95. package/dist/test/controllers/common_controller.spec.js.map +0 -1
  96. package/dist/test/middleware/commonMiddleware.spec.js +0 -88
  97. package/dist/test/middleware/commonMiddleware.spec.js.map +0 -1
  98. package/dist/test/platform-x/controllers/graphRESTControllers.spec.js +0 -195
  99. package/dist/test/platform-x/controllers/graphRESTControllers.spec.js.map +0 -1
  100. package/dist/test/platform-x/datasource/emailDataSource.spec.js +0 -81
  101. package/dist/test/platform-x/datasource/emailDataSource.spec.js.map +0 -1
  102. package/dist/test/platform-x/util/emailHandler.spec.js +0 -474
  103. package/dist/test/platform-x/util/emailHandler.spec.js.map +0 -1
  104. package/dist/test/platform-x/util/solr-data-source/SolrHttpDataSource.spec.js +0 -80
  105. package/dist/test/platform-x/util/solr-data-source/SolrHttpDataSource.spec.js.map +0 -1
  106. package/dist/test/services/requestService.spec.js +0 -108
  107. package/dist/test/services/requestService.spec.js.map +0 -1
  108. package/dist/test/services/requestServiceGet.spec.js +0 -43
  109. package/dist/test/services/requestServiceGet.spec.js.map +0 -1
  110. package/dist/test/src/common/service/twilioService.spec.js +0 -65
  111. package/dist/test/src/common/service/twilioService.spec.js.map +0 -1
  112. package/dist/test/util/commonUtil.spec.js +0 -110
  113. package/dist/test/util/commonUtil.spec.js.map +0 -1
  114. package/dist/test/util/logger.spec.js +0 -51
  115. package/dist/test/util/logger.spec.js.map +0 -1
  116. package/dist/test/util/requestTracer.spec.js +0 -64
  117. package/dist/test/util/requestTracer.spec.js.map +0 -1
  118. package/dist/test/util/solrconnector.spec.js +0 -145
  119. package/dist/test/util/solrconnector.spec.js.map +0 -1
  120. package/src/common/service/requestService.ts +0 -87
  121. package/src/common/service/twilioService.ts +0 -58
  122. package/src/common/util/commonUtil.ts +0 -39
  123. package/src/common/util/errorHandler.ts +0 -120
  124. package/src/common/util/logger.ts +0 -215
  125. package/src/common/util/requestTracer.ts +0 -10
  126. package/src/common/util/solrConnector.ts +0 -319
  127. package/src/config/index.ts +0 -35
  128. package/src/index.ts +0 -34
  129. package/src/platform-x/constants/index.ts +0 -20
  130. package/src/platform-x/constants/style.ts +0 -99
  131. package/src/platform-x/dataSource/emailDataSource.ts +0 -34
  132. package/src/platform-x/database/connection.ts +0 -47
  133. package/src/platform-x/database/dao/formBuilder.dao.ts +0 -33
  134. package/src/platform-x/database/index.ts +0 -7
  135. package/src/platform-x/database/models/formBuilder.model.ts +0 -23
  136. package/src/platform-x/util/emailHandler.ts +0 -580
  137. package/src/platform-x/util/emailTemplate.ts +0 -66
  138. package/src/platform-x/util/solr-data-source/SolrHttpDataSource.ts +0 -97
  139. package/src/templates/orderPlaced.ejs +0 -173
  140. package/src/templates/orderPlaced.html +0 -190
  141. package/tsconfig.json +0 -73
@@ -15,17 +15,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
15
  const mongoose_1 = __importDefault(require("mongoose"));
16
16
  const logger_1 = require("../../common/util/logger");
17
17
  const index_1 = __importDefault(require("../../config/index"));
18
+ const constants_1 = require("../constants");
19
+ const __1 = require("../..");
18
20
  let database = mongoose_1.default.connection;
19
21
  // Exit on error
20
22
  mongoose_1.default.connection.on('error', (err) => {
21
23
  logger_1.Logger.info(`MongoDB connection error: ${err}`, 'mongoose');
22
24
  process.exit(-1);
23
25
  });
24
- const connect = () => {
26
+ const connect = () => __awaiter(void 0, void 0, void 0, function* () {
25
27
  if (database.readyState) {
26
28
  return;
27
29
  }
28
- mongoose_1.default.connect(`mongodb://${index_1.default.MONGO.USER}:${index_1.default.MONGO.PASS}@${index_1.default.MONGO.HOST}:${index_1.default.MONGO.PORT}/${index_1.default.MONGO.DB_NAME}?directConnection=true&authMechanism=DEFAULT&authSource=${index_1.default.MONGO.DB_NAME}`);
30
+ const secrets = yield (0, __1.getIAMSecrets)();
31
+ mongoose_1.default.connect(`mongodb://${index_1.default.MONGO.USER}:${secrets === null || secrets === void 0 ? void 0 : secrets[constants_1.DynamicValues === null || constants_1.DynamicValues === void 0 ? void 0 : constants_1.DynamicValues.MONGO_PASS]}@${index_1.default.MONGO.HOST}:${index_1.default.MONGO.PORT}/${index_1.default.MONGO.DB_NAME}?directConnection=true&authMechanism=DEFAULT&authSource=${index_1.default.MONGO.DB_NAME}`);
29
32
  database = mongoose_1.default.connection;
30
33
  database.once('open', () => __awaiter(void 0, void 0, void 0, function* () {
31
34
  logger_1.Logger.info(`[Server] connected to MongoDB`, 'connect');
@@ -34,7 +37,7 @@ const connect = () => {
34
37
  logger_1.Logger.error(`[Server] error connecting to MongoDB`, 'connect', err);
35
38
  process.exit(-1);
36
39
  });
37
- };
40
+ });
38
41
  const disconnect = () => {
39
42
  if (!database) {
40
43
  return;
@@ -0,0 +1,9 @@
1
+ export default class FormBuilderDao {
2
+ /**
3
+ * Get data based on collectionName collection
4
+ * @param email
5
+ * @returns
6
+ */
7
+ fetch(collectionName: string, data: any): Promise<any>;
8
+ details(collectionName: string, filter: any, sort: any): Promise<any>;
9
+ }
@@ -12,8 +12,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- const logger_1 = require("../../../common/util/logger");
16
15
  const formBuilder_model_1 = __importDefault(require("../models/formBuilder.model"));
16
+ const logger_1 = require("../../../common/util/logger");
17
17
  class FormBuilderDao {
18
18
  /**
19
19
  * Get data based on collectionName collection
@@ -0,0 +1,7 @@
1
+ declare const db: {
2
+ database: import("mongoose").Connection;
3
+ mongoose: typeof import("mongoose");
4
+ connect: () => Promise<void>;
5
+ disconnect: () => void;
6
+ };
7
+ export default db;
@@ -0,0 +1,34 @@
1
+ import mongoose from 'mongoose';
2
+ /**
3
+ * Function for create model with dynamic collection name
4
+ * @param collectionName
5
+ * @returns
6
+ */
7
+ declare const dynamicModelName: (collectionName: string) => Promise<mongoose.Model<any, unknown, unknown, unknown, any, any> | mongoose.Model<{
8
+ createdAt: NativeDate;
9
+ updatedAt: NativeDate;
10
+ } & {}, {}, {}, {}, mongoose.Document<unknown, {}, {
11
+ createdAt: NativeDate;
12
+ updatedAt: NativeDate;
13
+ } & {}> & Omit<{
14
+ createdAt: NativeDate;
15
+ updatedAt: NativeDate;
16
+ } & {} & {
17
+ _id: mongoose.Types.ObjectId;
18
+ }, never>, mongoose.Schema<any, mongoose.Model<any, any, any, any, any, any>, {}, {}, {}, {}, mongoose.ResolveSchemaOptions<{
19
+ timestamps: true;
20
+ minimize: false;
21
+ strict: false;
22
+ }>, {
23
+ createdAt: NativeDate;
24
+ updatedAt: NativeDate;
25
+ } & {}, mongoose.Document<unknown, {}, mongoose.FlatRecord<{
26
+ createdAt: NativeDate;
27
+ updatedAt: NativeDate;
28
+ } & {}>> & Omit<mongoose.FlatRecord<{
29
+ createdAt: NativeDate;
30
+ updatedAt: NativeDate;
31
+ } & {}> & {
32
+ _id: mongoose.Types.ObjectId;
33
+ }, never>>>>;
34
+ export default dynamicModelName;
@@ -0,0 +1,62 @@
1
+ interface EmailOptions {
2
+ email: string;
3
+ emailTemplate: string;
4
+ subject: string;
5
+ bcc?: string;
6
+ cc?: string | string[];
7
+ personalizations?: Personalize;
8
+ }
9
+ interface Personalize {
10
+ to: [ToWithSubstitutions];
11
+ cc?: [ToWithSubstitutions];
12
+ bcc?: [ToWithSubstitutions];
13
+ }
14
+ interface ToWithSubstitutions {
15
+ to: string;
16
+ substitutions?: [string];
17
+ }
18
+ export declare class EmailHandler {
19
+ constructor();
20
+ /**
21
+ * post - handler to do emails triggering
22
+ * @param emailConfig
23
+ * @returns
24
+ */
25
+ sendEmail(emailConfig: EmailOptions): Promise<unknown>;
26
+ prepareEmailRequest(reqBody: any, emailType: any): Promise<any>;
27
+ /**
28
+ *
29
+ * @param reqBody
30
+ * @param emailType
31
+ * @returns
32
+ */
33
+ prepareSendEmailRequest(reqBody: any, emailType: any): Promise<any>;
34
+ /**
35
+ *
36
+ * @param emailConfiguration
37
+ * @returns
38
+ */
39
+ pushEmails(emailConfiguration: any): Promise<any>;
40
+ /**
41
+ * Function to send email with personalize data using sendgrid
42
+ * @param emailConfig
43
+ * @returns
44
+ */
45
+ sendEmailWithPersonalizations(emailConfig: any, email_from?: any): Promise<unknown>;
46
+ /**
47
+ * Utility method to prepare CC emails in standardized format
48
+ * @param ccEmails - Can be string, array of strings, or Recipients array
49
+ * @returns Array of email strings
50
+ */
51
+ private prepareCCEmails;
52
+ /**
53
+ * prepare personalize email request to send email through sendgrid
54
+ * @param reqBody
55
+ * @returns
56
+ */
57
+ sendPersonalizeEmailRequest(reqBody: any): Promise<any>;
58
+ sendPlaceOrderEmail(reqBody: any): Promise<any>;
59
+ sendPlaceOrderEmailv1(reqBody: any): Promise<any>;
60
+ private fetchEmailTemplateData;
61
+ }
62
+ export {};
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
36
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
37
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -36,9 +46,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
36
46
  };
37
47
  Object.defineProperty(exports, "__esModule", { value: true });
38
48
  exports.EmailHandler = void 0;
39
- const logger_1 = require("../../common/util/logger");
40
49
  const emailDataSource_1 = require("../dataSource/emailDataSource");
41
- const node_html_parser_1 = require("node-html-parser");
50
+ const HTMLParser = __importStar(require("node-html-parser"));
42
51
  const style_1 = require("../constants/style");
43
52
  const config_1 = __importDefault(require("../../config"));
44
53
  const constants_1 = require("../constants");
@@ -48,8 +57,15 @@ const moment = require('moment-timezone');
48
57
  const sgMail = require('@sendgrid/mail');
49
58
  const sgHelpers = require('@sendgrid/helpers');
50
59
  const ejs = __importStar(require("ejs"));
51
- const dompurify_1 = __importDefault(require("dompurify")); // Include DOMPurify for sanitization
60
+ // import DOMPurify from 'dompurify'; // Include DOMPurify for sanitization
52
61
  const formBuilder_dao_1 = __importDefault(require("../database/dao/formBuilder.dao"));
62
+ const dompurify_1 = __importDefault(require("dompurify"));
63
+ const jsdom_1 = require("jsdom");
64
+ const logger_1 = require("../../common/util/logger");
65
+ const path_1 = __importDefault(require("path"));
66
+ const __1 = require("../..");
67
+ const window = new jsdom_1.JSDOM('').window;
68
+ const DOMPurify = (0, dompurify_1.default)(window);
53
69
  // NOSONAR-NEXT-LINE
54
70
  class EmailHandler {
55
71
  constructor() { } // NOSONAR
@@ -61,14 +77,24 @@ class EmailHandler {
61
77
  sendEmail(emailConfig) {
62
78
  return __awaiter(this, void 0, void 0, function* () {
63
79
  logger_1.Logger.info('EmailHandler: Reached sendEmail method', 'sendEmail');
64
- sgMail.setApiKey(config_1.default.SENDGRID_API_KEY);
80
+ const secrets = yield (0, __1.getIAMSecrets)();
81
+ sgMail.setApiKey(secrets === null || secrets === void 0 ? void 0 : secrets[constants_1.DynamicValues === null || constants_1.DynamicValues === void 0 ? void 0 : constants_1.DynamicValues.SENDGRID_API_KEY]);
82
+ // Build personalization object
83
+ const personalization = {
84
+ to: [{ email: emailConfig.email }],
85
+ };
86
+ // Add CC emails if provided
87
+ if (emailConfig.cc) {
88
+ const ccEmails = Array.isArray(emailConfig.cc) ? emailConfig.cc : [emailConfig.cc];
89
+ personalization.cc = ccEmails.map((email) => ({ email }));
90
+ logger_1.Logger.info(`Adding CC emails to non-personalized email: ${ccEmails.join(', ')}`, 'sendEmail');
91
+ }
92
+ // Add BCC if provided
93
+ if (emailConfig.bcc) {
94
+ personalization.bcc = [{ email: emailConfig.bcc }];
95
+ }
65
96
  const msg = {
66
- personalizations: [
67
- {
68
- to: [{ email: emailConfig.email }],
69
- // cc: emailCC,
70
- },
71
- ],
97
+ personalizations: [personalization],
72
98
  from: { email: config_1.default.EMAIL_FROM },
73
99
  html: emailConfig.emailTemplate,
74
100
  subject: emailConfig.subject,
@@ -90,8 +116,8 @@ class EmailHandler {
90
116
  });
91
117
  }
92
118
  prepareEmailRequest(reqBody, emailType) {
93
- var _a;
94
119
  return __awaiter(this, void 0, void 0, function* () {
120
+ var _a, _b;
95
121
  logger_1.Logger.info('Reached prepareEmailRequest', 'prepareEmailRequest');
96
122
  try {
97
123
  let dataSource = new emailDataSource_1.EmailDataSource();
@@ -102,13 +128,13 @@ class EmailHandler {
102
128
  let curentTimeZone = start
103
129
  .tz(reqBody.timezoneOffset)
104
130
  .format('Do MMMM YYYY, h:mm a');
105
- const root = (0, node_html_parser_1.parse)((_a = response[0]) === null || _a === void 0 ? void 0 : _a.hclplatformx_Body);
131
+ const root = HTMLParser.parse((_a = response[0]) === null || _a === void 0 ? void 0 : _a.hclplatformx_Body);
106
132
  root.querySelector('#1_dynamic_text').textContent = ` ${reqBody.userName}`;
107
- root.querySelector('#2_dynamic_text').textContent = dompurify_1.default.sanitize(`<b> ${reqBody.pageTitle} </b>`);
108
- root.querySelector('#3_dynamic_text').textContent = dompurify_1.default.sanitize(`<b>${curentTimeZone}</b>`);
109
- root.querySelector('#dynamic_contentType').textContent = dompurify_1.default.sanitize(`<b>${reqBody.contentType}</b>`);
110
- root.querySelector('#dynamic_event').textContent = dompurify_1.default.sanitize(`<b>${reqBody.event[0] + reqBody.event.slice(1)}</b>`);
111
- if (reqBody.event.toLowerCase() === 'published') {
133
+ root.querySelector('#2_dynamic_text').textContent = DOMPurify.sanitize(`<b> ${reqBody.pageTitle} </b>`);
134
+ root.querySelector('#3_dynamic_text').textContent = DOMPurify.sanitize(`<b>${curentTimeZone}</b>`);
135
+ root.querySelector('#dynamic_contentType').textContent = DOMPurify.sanitize(`<b>${reqBody.contentType}</b>`);
136
+ root.querySelector('#dynamic_event').textContent = DOMPurify.sanitize(`<b>${reqBody.event[0] + reqBody.event.slice(1)}</b>`);
137
+ if (((_b = reqBody === null || reqBody === void 0 ? void 0 : reqBody.event) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === 'published') {
112
138
  root
113
139
  .querySelector('.dynamic_links_btn')
114
140
  .setAttribute('href', reqBody.publishPageUrl);
@@ -117,11 +143,11 @@ class EmailHandler {
117
143
  root.querySelector('#viewButton').setAttribute('style', 'display:none');
118
144
  }
119
145
  const append = root.querySelector('head');
120
- append.insertAdjacentHTML('beforeend', dompurify_1.default.sanitize(style_1.style));
146
+ append.insertAdjacentHTML('beforeend', DOMPurify.sanitize(style_1.style));
121
147
  let emailConfiguration = {
122
148
  email: reqBody.emailTo,
123
149
  emailTemplate: root.toString(),
124
- subject: dompurify_1.default.sanitize(response[0].hclplatformx_Subject.replace('{{pageType}}', reqBody.contentType[0] + reqBody.contentType.slice(1))
150
+ subject: DOMPurify.sanitize(response[0].hclplatformx_Subject.replace('{{pageType}}', reqBody.contentType[0] + reqBody.contentType.slice(1))
125
151
  .replace('{{publishOrUnpublish}}', reqBody.event[0] + reqBody.event.slice(1))),
126
152
  };
127
153
  logger_1.Logger.debug('Reached prepareEmailRequest - emailConfiguration', 'prepareEmailRequest', emailConfiguration);
@@ -142,8 +168,8 @@ class EmailHandler {
142
168
  * @returns
143
169
  */
144
170
  prepareSendEmailRequest(reqBody, emailType) {
145
- var _a, _b, _c, _d;
146
171
  return __awaiter(this, void 0, void 0, function* () {
172
+ var _a, _b, _c, _d;
147
173
  logger_1.Logger.info('Reached prepareSendEmailRequest in emailHandler', 'prepareSendEmailRequest');
148
174
  try {
149
175
  let dataSource = new emailDataSource_1.EmailDataSource();
@@ -157,7 +183,7 @@ class EmailHandler {
157
183
  }
158
184
  }
159
185
  }
160
- const root = (0, node_html_parser_1.parse)((_c = templateData[0]) === null || _c === void 0 ? void 0 : _c.hclplatformx_Body);
186
+ const root = HTMLParser.parse((_c = templateData[0]) === null || _c === void 0 ? void 0 : _c.hclplatformx_Body);
161
187
  let emailConfiguration = {
162
188
  email: (_d = reqBody.replacement_variables) === null || _d === void 0 ? void 0 : _d.EMAIL,
163
189
  emailTemplate: root ? root.toString() : '',
@@ -183,7 +209,7 @@ class EmailHandler {
183
209
  return __awaiter(this, void 0, void 0, function* () {
184
210
  logger_1.Logger.info('Reached pushEmails in emailHandler', 'pushEmails');
185
211
  return yield this.sendEmail(emailConfiguration).then((response) => __awaiter(this, void 0, void 0, function* () {
186
- if (response.statusCode === '202') {
212
+ if ((response === null || response === void 0 ? void 0 : response.statusCode) === '202' || response.statusCode === 202) {
187
213
  response.msg =
188
214
  'Thanks for getting in touch with us. We shall contact you soon.';
189
215
  return response;
@@ -200,14 +226,16 @@ class EmailHandler {
200
226
  * @param emailConfig
201
227
  * @returns
202
228
  */
203
- sendEmailWithPersonalizations(emailConfig, isCFF) {
229
+ sendEmailWithPersonalizations(emailConfig, email_from) {
204
230
  return __awaiter(this, void 0, void 0, function* () {
205
231
  logger_1.Logger.info(`EmailHandler: Reached sendEmailWithPersonalizations method with emailConfig: ${JSON.stringify(emailConfig)}`, 'sendEmailWithPersonalizations');
232
+ logger_1.Logger.info(`EMAIL_FROM-------> ${email_from}`, 'sendEmailWithPersonalizations');
206
233
  const Mail = sgHelpers.classes.Mail;
207
- let email_from = isCFF ? config_1.default === null || config_1.default === void 0 ? void 0 : config_1.default.CFF_MAIL_FROM : config_1.default === null || config_1.default === void 0 ? void 0 : config_1.default.EMAIL_FROM;
234
+ // let email_from = isCFF ? config?.CFF_MAIL_FROM : config?.EMAIL_FROM;
208
235
  logger_1.Logger.info('sendEmailWithPersonalizations : Email From:', JSON.stringify(email_from));
209
236
  const Personalization = sgHelpers.classes.Personalization;
210
- sgMail.setApiKey(config_1.default.SENDGRID_API_KEY);
237
+ const secrets = yield (0, __1.getIAMSecrets)();
238
+ sgMail.setApiKey(secrets === null || secrets === void 0 ? void 0 : secrets[constants_1.DynamicValues === null || constants_1.DynamicValues === void 0 ? void 0 : constants_1.DynamicValues.SENDGRID_API_KEY]);
211
239
  const mail = new Mail();
212
240
  mail.setFrom(email_from);
213
241
  mail.setSubject(emailConfig.subject);
@@ -216,10 +244,19 @@ class EmailHandler {
216
244
  // Set personalizations as per the emailConfig
217
245
  if ((emailConfig === null || emailConfig === void 0 ? void 0 : emailConfig.personalizations) &&
218
246
  (emailConfig === null || emailConfig === void 0 ? void 0 : emailConfig.personalizations.to.length)) {
219
- const { to } = emailConfig === null || emailConfig === void 0 ? void 0 : emailConfig.personalizations;
220
- to === null || to === void 0 ? void 0 : to.forEach((toData) => {
247
+ const { to, cc } = emailConfig === null || emailConfig === void 0 ? void 0 : emailConfig.personalizations;
248
+ // Create separate personalization for each TO recipient with their unique substitutions
249
+ to.forEach((toData, index) => {
221
250
  const personalization = new Personalization();
222
251
  personalization.addTo(toData.to);
252
+ // Add CC emails to EACH personalization (CC gets email for each TO recipient)
253
+ if (cc && cc.length > 0) {
254
+ cc.forEach((ccData) => {
255
+ personalization.addCc(ccData.to);
256
+ logger_1.Logger.info(`Adding CC email ${ccData.to} to personalization ${index + 1} for TO: ${toData.to}`, 'sendEmailWithPersonalizations');
257
+ });
258
+ }
259
+ // Add unique substitutions for each TO recipient
223
260
  if (toData === null || toData === void 0 ? void 0 : toData.substitutions) {
224
261
  for (const key in toData === null || toData === void 0 ? void 0 : toData.substitutions) {
225
262
  if (key) {
@@ -228,11 +265,13 @@ class EmailHandler {
228
265
  }
229
266
  }
230
267
  mail.addPersonalization(personalization);
268
+ logger_1.Logger.info(`Personalization ${index + 1} created for TO: ${toData.to} with ${(cc === null || cc === void 0 ? void 0 : cc.length) || 0} CC recipients`, 'sendEmailWithPersonalizations');
231
269
  });
270
+ // Handle attachments
232
271
  if ((emailConfig === null || emailConfig === void 0 ? void 0 : emailConfig.attachments) && Array.isArray(emailConfig.attachments)) {
233
272
  emailConfig.attachments.forEach((attachment) => {
234
273
  mail.addAttachment({
235
- content: attachment.base64,
274
+ content: attachment.base64, // base64 string
236
275
  filename: attachment.filename,
237
276
  type: attachment.type || 'application/octet-stream',
238
277
  disposition: 'attachment',
@@ -242,9 +281,17 @@ class EmailHandler {
242
281
  }
243
282
  }
244
283
  else {
245
- // set to email for non personalized email
284
+ // set to email for non personalized email with CC support
246
285
  const personalization = new Personalization();
247
286
  personalization.addTo(emailConfig.email);
287
+ // Add CC emails if provided in non-personalized mode
288
+ if (emailConfig.cc) {
289
+ const ccEmails = Array.isArray(emailConfig.cc) ? emailConfig.cc : [emailConfig.cc];
290
+ ccEmails.forEach((ccEmail) => {
291
+ personalization.addCc(ccEmail);
292
+ logger_1.Logger.info(`Adding CC email to non-personalized email: ${ccEmail}`, 'sendEmailWithPersonalizations');
293
+ });
294
+ }
248
295
  logger_1.Logger.info('sendEmailWithPersonalizations : Email personalizations:', JSON.stringify(personalization));
249
296
  mail.addPersonalization(personalization);
250
297
  }
@@ -262,20 +309,46 @@ class EmailHandler {
262
309
  });
263
310
  });
264
311
  }
312
+ /**
313
+ * Utility method to prepare CC emails in standardized format
314
+ * @param ccEmails - Can be string, array of strings, or Recipients array
315
+ * @returns Array of email strings
316
+ */
317
+ prepareCCEmails(ccEmails) {
318
+ if (!ccEmails)
319
+ return [];
320
+ if (typeof ccEmails === 'string') {
321
+ return [ccEmails];
322
+ }
323
+ if (Array.isArray(ccEmails)) {
324
+ return ccEmails.map((cc) => {
325
+ if (typeof cc === 'string')
326
+ return cc;
327
+ if (cc.email)
328
+ return cc.email; // Recipients object
329
+ return cc.to || cc; // ToWithSubstitutions object
330
+ }).filter(email => email && typeof email === 'string');
331
+ }
332
+ return [];
333
+ }
265
334
  /**
266
335
  * prepare personalize email request to send email through sendgrid
267
336
  * @param reqBody
268
337
  * @returns
269
338
  */
270
339
  sendPersonalizeEmailRequest(reqBody) {
271
- var _a, _b;
272
340
  return __awaiter(this, void 0, void 0, function* () {
341
+ var _a, _b;
273
342
  try {
274
- let { email_type, replacement_variables, recipients, isCFF = false } = reqBody;
275
- logger_1.Logger.info(`EmailHandler: reached in sendPersonalizeEmailRequest with emailType: ${email_type}`, 'sendPersonalizeEmailRequest');
343
+ let { email_type, replacement_variables, recipients, cc_recipients, isCFF = config_1.default === null || config_1.default === void 0 ? void 0 : config_1.default.EMAIL_FROM, sender_info = {} } = reqBody;
344
+ logger_1.Logger.info(`EmailHandler: reached in sendPersonalizeEmailRequest with emailType: ${email_type} and ${isCFF}`, 'sendPersonalizeEmailRequest');
345
+ console.log('sender_info ***********', sender_info);
276
346
  // disable SOLR because of connectivity issue
277
347
  logger_1.Logger.debug('Reached sendPersonalizeEmailRequest in emailHandler', 'sendPersonalizeEmailRequest');
278
- let templateData = yield this.fetchEmailTemplateData(reqBody);
348
+ const { name, email, documentpath } = sender_info;
349
+ console.log('email and name document path ***********', email, name, documentpath);
350
+ let templateData = yield this.fetchEmailTemplateData(reqBody, documentpath);
351
+ console.log('templateData ***********', templateData);
279
352
  logger_1.Logger.debug('Reached sendPersonalizeEmailRequest in emailHandler', 'sendPersonalizeEmailRequest', templateData);
280
353
  let recipientsData = {};
281
354
  if ((0, lodash_1.isArray)(recipients)) {
@@ -290,9 +363,20 @@ class EmailHandler {
290
363
  recipientsData = {
291
364
  to,
292
365
  };
366
+ // Add CC recipients if they exist
367
+ if (cc_recipients && (0, lodash_1.isArray)(cc_recipients)) {
368
+ const cc = [];
369
+ cc_recipients.forEach((ccRecipient) => {
370
+ cc.push({
371
+ to: ccRecipient === null || ccRecipient === void 0 ? void 0 : ccRecipient.email,
372
+ });
373
+ });
374
+ recipientsData.cc = cc;
375
+ }
293
376
  }
294
377
  if (templateData && ((_a = Object.keys(templateData)) === null || _a === void 0 ? void 0 : _a.length) !== 0) {
295
- const root = (0, node_html_parser_1.parse)(templateData === null || templateData === void 0 ? void 0 : templateData.body);
378
+ const root = HTMLParser.parse(templateData === null || templateData === void 0 ? void 0 : templateData.body);
379
+ isCFF = (templateData === null || templateData === void 0 ? void 0 : templateData.email_from) && (templateData === null || templateData === void 0 ? void 0 : templateData.email_from) !== '' ? templateData === null || templateData === void 0 ? void 0 : templateData.email_from : isCFF;
296
380
  const emailConfiguration = {
297
381
  email: (_b = reqBody.replacement_variables) === null || _b === void 0 ? void 0 : _b.EMAIL,
298
382
  emailTemplate: root ? root.toString() : '',
@@ -300,12 +384,17 @@ class EmailHandler {
300
384
  personalizations: recipientsData,
301
385
  attachments: reqBody === null || reqBody === void 0 ? void 0 : reqBody.attachments,
302
386
  };
303
- let is_cff = (isCFF && isCFF === true) ? true : false;
387
+ // let is_cff: boolean = (isCFF && isCFF === true) ? true : false;
304
388
  logger_1.Logger.info(`sendPersonalizeEmailRequest -${JSON.stringify(emailConfiguration)}`, 'sendPersonalizeEmailRequest');
305
- return yield this.sendEmailWithPersonalizations(emailConfiguration, is_cff).then((response) => __awaiter(this, void 0, void 0, function* () {
389
+ const senderFrom = email && name ? { email, name } : isCFF;
390
+ console.log('senderFrom ***********', senderFrom);
391
+ console.log('emailConfiguration ***********', emailConfiguration);
392
+ logger_1.Logger.info(`sendPersonalizeEmailRequest - senderFrom: ${JSON.stringify(senderFrom)}`, 'sendPersonalizeEmailRequest');
393
+ return yield this.sendEmailWithPersonalizations(emailConfiguration, senderFrom).then((response) => __awaiter(this, void 0, void 0, function* () {
306
394
  if (response.statusCode === 202) {
307
395
  response.msg =
308
396
  'Thanks for getting in touch with us. We shall contact you soon.';
397
+ logger_1.Logger.info(`sendPersonalizeEmailRequest - response: ${JSON.stringify(response)}`, 'sendPersonalizeEmailRequest');
309
398
  return response;
310
399
  }
311
400
  else {
@@ -330,15 +419,15 @@ class EmailHandler {
330
419
  const start = moment.tz(reqBody.dateTime, 'UTC'); // original timezone
331
420
  start.tz(reqBody.timezoneOffset).format('Do MMMM YYYY, h:mm a');
332
421
  let str = yield emailTemplate_1.EmailTemplateHandler.prepareEmailTemplate(reqBody);
333
- let root = (0, node_html_parser_1.parse)(str);
422
+ let root = HTMLParser.parse(str);
334
423
  root.querySelector('#1_dynamic_text').textContent = `${reqBody.userName}`;
335
- root.querySelector('#2_dynamic_text').textContent = dompurify_1.default.sanitize(`<b> ${reqBody.total_price} </b>`);
336
- root.querySelector('#3_dynamic_text').textContent = dompurify_1.default.sanitize(`<b>${reqBody.currency_code}</b>`);
337
- root.querySelector('#4_dynamic_text').textContent = dompurify_1.default.sanitize(`<b>${reqBody.shipping_address.streetName} ${reqBody.shipping_address.city} ${reqBody.shipping_address.state} ${reqBody.shipping_address.country}${reqBody.shipping_address.postalCode} </b>`);
338
- root.querySelector('#5_dynamic_text').textContent = dompurify_1.default.sanitize(`<b>${reqBody.total_tax}</b>`);
339
- root.querySelector('#6_dynamic_text').textContent = dompurify_1.default.sanitize(`<b>${reqBody.orderNumber}</b>`);
424
+ root.querySelector('#2_dynamic_text').textContent = DOMPurify.sanitize(`<b> ${reqBody.total_price} </b>`);
425
+ root.querySelector('#3_dynamic_text').textContent = DOMPurify.sanitize(`<b>${reqBody.currency_code}</b>`);
426
+ root.querySelector('#4_dynamic_text').textContent = DOMPurify.sanitize(`<b>${reqBody.shipping_address.streetName} ${reqBody.shipping_address.city} ${reqBody.shipping_address.state} ${reqBody.shipping_address.country}${reqBody.shipping_address.postalCode} </b>`);
427
+ root.querySelector('#5_dynamic_text').textContent = DOMPurify.sanitize(`<b>${reqBody.total_tax}</b>`);
428
+ root.querySelector('#6_dynamic_text').textContent = DOMPurify.sanitize(`<b>${reqBody.orderNumber}</b>`);
340
429
  const apeend = root.querySelector('head');
341
- apeend.insertAdjacentHTML('beforeend', dompurify_1.default.sanitize(style_1.style));
430
+ apeend.insertAdjacentHTML('beforeend', DOMPurify.sanitize(style_1.style));
342
431
  let emailConfiguration = {
343
432
  email: reqBody.emailTo,
344
433
  emailTemplate: root.toString(),
@@ -362,7 +451,8 @@ class EmailHandler {
362
451
  const start = moment.tz(reqBody.dateTime, 'UTC'); // original timezone
363
452
  let curentTimeZone = start;
364
453
  curentTimeZone.tz(reqBody.timezoneOffset).format('Do MMMM YYYY, h:mm a');
365
- let emailTemplate = 'templates/orderPlaced.ejs';
454
+ const emailTemplate = path_1.default.resolve(__dirname, '../../../templates/orderPlaced.ejs');
455
+ console.log('>>>>>>>>>>>>>>>>>>>>>>>>>>.', emailTemplate);
366
456
  let billingStr = '';
367
457
  billingStr +=
368
458
  Object.keys(reqBody.billing_address).length !== 0
@@ -410,25 +500,27 @@ class EmailHandler {
410
500
  }
411
501
  });
412
502
  }
413
- fetchEmailTemplateData(reqBody) {
414
- var _a, _b, _c, _d;
503
+ fetchEmailTemplateData(reqBody, documentpath) {
415
504
  return __awaiter(this, void 0, void 0, function* () {
505
+ var _a, _b, _c, _d, _e, _f;
416
506
  try {
417
507
  logger_1.Logger.info('EmailHandler: Reached fetchEmailTemplateData', 'fetchEmailTemplateData');
418
508
  let { email_type } = reqBody;
419
509
  let dataSource = new emailDataSource_1.EmailDataSource();
420
510
  let templateData = {};
421
511
  if ((config_1.default === null || config_1.default === void 0 ? void 0 : config_1.default.MULTISITE_WITH_SOLR) === 'true') {
422
- let templateSolrRes = yield dataSource.fetchPageModel(email_type);
512
+ let templateSolrRes = yield dataSource.fetchPageModel(email_type, documentpath);
423
513
  if ((templateSolrRes === null || templateSolrRes === void 0 ? void 0 : templateSolrRes.length) > 0) {
424
514
  templateData.body = ((_a = templateSolrRes === null || templateSolrRes === void 0 ? void 0 : templateSolrRes[0]) === null || _a === void 0 ? void 0 : _a.hclplatformx_Body) || '';
425
515
  templateData.subject = ((_b = templateSolrRes === null || templateSolrRes === void 0 ? void 0 : templateSolrRes[0]) === null || _b === void 0 ? void 0 : _b.hclplatformx_Subject) || '';
516
+ templateData.email_from = ((_c = templateSolrRes === null || templateSolrRes === void 0 ? void 0 : templateSolrRes[0]) === null || _c === void 0 ? void 0 : _c.hclplatformx_To) || '';
426
517
  }
427
518
  }
428
519
  else {
429
520
  let templateRes = yield new formBuilder_dao_1.default().fetch('email_templates', { name: email_type });
430
- templateData.body = (_c = templateRes === null || templateRes === void 0 ? void 0 : templateRes[0]) === null || _c === void 0 ? void 0 : _c.body;
431
- templateData.subject = (_d = templateRes === null || templateRes === void 0 ? void 0 : templateRes[0]) === null || _d === void 0 ? void 0 : _d.subject;
521
+ templateData.body = (_d = templateRes === null || templateRes === void 0 ? void 0 : templateRes[0]) === null || _d === void 0 ? void 0 : _d.body;
522
+ templateData.subject = (_e = templateRes === null || templateRes === void 0 ? void 0 : templateRes[0]) === null || _e === void 0 ? void 0 : _e.subject;
523
+ templateData.email_from = ((_f = templateRes === null || templateRes === void 0 ? void 0 : templateRes[0]) === null || _f === void 0 ? void 0 : _f.to) || '';
432
524
  }
433
525
  return templateData;
434
526
  }
@@ -0,0 +1,4 @@
1
+ export declare class EmailTemplateHandler {
2
+ constructor();
3
+ static prepareEmailTemplate(reqBody: any): Promise<string>;
4
+ }
@@ -10,11 +10,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.EmailTemplateHandler = void 0;
13
- // NOSONAR-NEXT-LINE
14
13
  class EmailTemplateHandler {
15
- // NOSONAR
16
- // NOSONAR-NEXT-LINE
17
- constructor() { } // NOSONAR
14
+ constructor() { }
18
15
  static prepareEmailTemplate(reqBody) {
19
16
  return __awaiter(this, void 0, void 0, function* () {
20
17
  let str = `<!DOCTYPE html>\r\n
@@ -0,0 +1,29 @@
1
+ import { DataSource } from 'apollo-datasource';
2
+ export interface Pagination {
3
+ start: number;
4
+ rows: number;
5
+ }
6
+ export interface FilterQueryType {
7
+ field: string;
8
+ value: string;
9
+ }
10
+ export interface SolrQueryRequest {
11
+ query: string | object;
12
+ filterQuery?: FilterQueryType[] | null;
13
+ pagination?: Pagination;
14
+ filter?: object | string[];
15
+ sort?: object;
16
+ }
17
+ export declare class SolrHttpDataSource<TContext = any> extends DataSource {
18
+ context: TContext;
19
+ private solr;
20
+ private cache;
21
+ private memoizedResults;
22
+ constructor(core?: string);
23
+ initialize({ context, cache }?: any): void;
24
+ didEncounterError(error: any): void;
25
+ cacheKey(id: string): string;
26
+ memoizedCacheKey(): string;
27
+ createQuery(queryRequest: SolrQueryRequest): void;
28
+ executeSearch(): Promise<any>;
29
+ }