@codee-sh/medusa-plugin-notification-emails 0.2.1 → 1.0.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.
Files changed (177) hide show
  1. package/.medusa/server/emails-previews/contact-form.js +5 -4
  2. package/.medusa/server/emails-previews/inventory-level.js +5 -4
  3. package/.medusa/server/emails-previews/order-completed.js +5 -4
  4. package/.medusa/server/emails-previews/order-placed.js +5 -4
  5. package/.medusa/server/medusa-config.js +20 -0
  6. package/.medusa/server/src/admin/index.js +17284 -2259
  7. package/.medusa/server/src/admin/index.mjs +17135 -2127
  8. package/.medusa/server/src/api/admin/mpn/available-templates/route.js +14 -0
  9. package/.medusa/server/src/api/admin/mpn/events/route.js +20 -0
  10. package/.medusa/server/src/api/admin/mpn/notifications/route.js +31 -0
  11. package/.medusa/server/src/api/admin/mpn/render-template/route.js +36 -0
  12. package/.medusa/server/src/api/admin/mpn/templates/[id]/blocks/route.js +119 -0
  13. package/.medusa/server/src/api/admin/mpn/templates/route.js +72 -0
  14. package/.medusa/server/src/api/admin/mpn/templates/types/[type]/services/[service]/templates/route.js +18 -0
  15. package/.medusa/server/src/api/admin/mpn/templates/types/[type]/services/route.js +16 -0
  16. package/.medusa/server/src/api/admin/mpn/templates/types/route.js +13 -0
  17. package/.medusa/server/src/api/middlewares.js +69 -3
  18. package/.medusa/server/src/hooks/api/available-templates/available-templates.js +37 -0
  19. package/.medusa/server/src/hooks/api/available-templates/index.js +18 -0
  20. package/.medusa/server/src/hooks/api/events.js +3 -3
  21. package/.medusa/server/src/hooks/api/notifications.js +4 -4
  22. package/.medusa/server/src/hooks/api/orders.js +3 -6
  23. package/.medusa/server/src/hooks/api/preview.js +6 -6
  24. package/.medusa/server/src/hooks/api/templates/blocks/blocks.js +49 -0
  25. package/.medusa/server/src/hooks/api/templates/blocks/index.js +18 -0
  26. package/.medusa/server/src/hooks/api/templates/index.js +18 -0
  27. package/.medusa/server/src/hooks/api/templates/services/index.js +18 -0
  28. package/.medusa/server/src/hooks/api/templates/services/services.js +36 -0
  29. package/.medusa/server/src/hooks/api/templates/services/templates/index.js +18 -0
  30. package/.medusa/server/src/hooks/api/templates/services/templates/templates.js +38 -0
  31. package/.medusa/server/src/hooks/api/templates/templates.js +74 -0
  32. package/.medusa/server/src/hooks/api/templates/types/index.js +18 -0
  33. package/.medusa/server/src/hooks/api/templates/types/types.js +34 -0
  34. package/.medusa/server/src/modules/mpn-builder/index.js +13 -0
  35. package/.medusa/server/src/modules/mpn-builder/migrations/Migration20260126192907.js +23 -0
  36. package/.medusa/server/src/modules/mpn-builder/migrations/Migration20260129194255.js +20 -0
  37. package/.medusa/server/src/modules/mpn-builder/migrations/Migration20260202123904.js +14 -0
  38. package/.medusa/server/src/modules/mpn-builder/models/builder_template.js +32 -0
  39. package/.medusa/server/src/modules/mpn-builder/models/builder_template_block.js +30 -0
  40. package/.medusa/server/src/modules/mpn-builder/models/index.js +11 -0
  41. package/.medusa/server/src/modules/mpn-builder/service.js +167 -0
  42. package/.medusa/server/src/modules/mpn-builder/services-local/base-template-service.js +123 -0
  43. package/.medusa/server/src/modules/mpn-builder/services-local/email-template-service.js +402 -0
  44. package/.medusa/server/src/modules/mpn-builder/services-local/index.js +13 -0
  45. package/.medusa/server/src/modules/mpn-builder/services-local/slack-template-service.js +452 -0
  46. package/.medusa/server/src/modules/mpn-builder/types/constants.js +14 -0
  47. package/.medusa/server/src/modules/mpn-builder/types/index.js +24 -0
  48. package/.medusa/server/src/modules/mpn-builder/types/interfaces.js +3 -0
  49. package/.medusa/server/src/modules/mpn-builder/types/template-service-interface.js +3 -0
  50. package/.medusa/server/src/{templates/emails/blocks → modules/mpn-builder/types}/types.js +1 -1
  51. package/.medusa/server/src/subscribers/order-completed.js +17 -14
  52. package/.medusa/server/src/subscribers/order-placed.js +29 -17
  53. package/.medusa/server/src/templates/emails/base-template/index.js +1 -1
  54. package/.medusa/server/src/templates/emails/base-template/template.js +2 -2
  55. package/.medusa/server/src/templates/emails/blocks/components/group.js +14 -0
  56. package/.medusa/server/src/templates/emails/blocks/components/heading.js +1 -1
  57. package/.medusa/server/src/templates/emails/blocks/components/product-item.js +4 -3
  58. package/.medusa/server/src/templates/emails/blocks/components/repeater.js +1 -1
  59. package/.medusa/server/src/templates/emails/blocks/components/row.js +4 -2
  60. package/.medusa/server/src/templates/emails/blocks/components/section.js +1 -1
  61. package/.medusa/server/src/templates/emails/blocks/components/separator.js +2 -2
  62. package/.medusa/server/src/templates/emails/blocks/components/text.js +2 -2
  63. package/.medusa/server/src/templates/emails/blocks/index.js +5 -2
  64. package/.medusa/server/src/templates/emails/contact-form/config.js +4 -4
  65. package/.medusa/server/src/templates/emails/contact-form/index.js +1 -1
  66. package/.medusa/server/src/templates/emails/index.js +1 -10
  67. package/.medusa/server/src/templates/emails/inventory-level/config.js +4 -4
  68. package/.medusa/server/src/templates/emails/inventory-level/index.js +1 -1
  69. package/.medusa/server/src/templates/emails/inventory-level/translations/index.js +1 -1
  70. package/.medusa/server/src/templates/emails/order/completed/config.js +7 -7
  71. package/.medusa/server/src/templates/emails/order/completed/index.js +1 -1
  72. package/.medusa/server/src/templates/emails/order/completed/translations/index.js +1 -1
  73. package/.medusa/server/src/templates/emails/order/placed/config.js +7 -7
  74. package/.medusa/server/src/templates/emails/order/placed/index.js +1 -1
  75. package/.medusa/server/src/templates/emails/order/placed/translations/index.js +1 -1
  76. package/.medusa/server/src/templates/emails/order/updated/config.js +7 -7
  77. package/.medusa/server/src/templates/emails/order/updated/index.js +1 -1
  78. package/.medusa/server/src/templates/emails/order/updated/translations/index.js +1 -1
  79. package/.medusa/server/src/templates/emails/types/index.js +18 -0
  80. package/.medusa/server/src/templates/emails/types/types.js +12 -0
  81. package/.medusa/server/src/templates/shared/abstract-template-service.js +4 -2
  82. package/.medusa/server/src/templates/shared/theme/index.js +1 -1
  83. package/.medusa/server/src/templates/shared/theme/presets/default/index.js +1 -1
  84. package/.medusa/server/src/templates/shared/utils/index.js +1 -1
  85. package/.medusa/server/src/templates/slack/index.js +1 -10
  86. package/.medusa/server/src/templates/slack/inventory-level/config.js +5 -5
  87. package/.medusa/server/src/templates/slack/inventory-level/index.js +1 -1
  88. package/.medusa/server/src/templates/slack/order/archived/config.js +1 -1
  89. package/.medusa/server/src/templates/slack/order/archived/index.js +1 -1
  90. package/.medusa/server/src/templates/slack/order/archived/translations/index.js +1 -1
  91. package/.medusa/server/src/templates/slack/order/canceled/config.js +1 -1
  92. package/.medusa/server/src/templates/slack/order/canceled/index.js +1 -1
  93. package/.medusa/server/src/templates/slack/order/canceled/translations/index.js +1 -1
  94. package/.medusa/server/src/templates/slack/order/completed/config.js +1 -1
  95. package/.medusa/server/src/templates/slack/order/completed/index.js +1 -1
  96. package/.medusa/server/src/templates/slack/order/completed/translations/index.js +1 -1
  97. package/.medusa/server/src/templates/slack/order/placed/config.js +1 -1
  98. package/.medusa/server/src/templates/slack/order/placed/index.js +1 -1
  99. package/.medusa/server/src/templates/slack/order/placed/translations/index.js +1 -1
  100. package/.medusa/server/src/templates/slack/order/updated/config.js +1 -1
  101. package/.medusa/server/src/templates/slack/order/updated/index.js +1 -1
  102. package/.medusa/server/src/templates/slack/order/updated/translations/index.js +1 -1
  103. package/.medusa/server/src/templates/slack/product/config.js +2 -2
  104. package/.medusa/server/src/templates/slack/product/index.js +1 -1
  105. package/.medusa/server/src/templates/slack/product-variant/config.js +2 -2
  106. package/.medusa/server/src/templates/slack/product-variant/index.js +1 -1
  107. package/.medusa/server/src/templates/slack/types/index.js +18 -0
  108. package/.medusa/server/src/templates/slack/types/types.js +15 -0
  109. package/.medusa/server/src/utils/addresses.js +4 -2
  110. package/.medusa/server/src/utils/data/countries.js +1 -1
  111. package/.medusa/server/src/utils/data/country-states.js +1 -1
  112. package/.medusa/server/src/utils/data/modules/inventory/inventory.js +6 -2
  113. package/.medusa/server/src/utils/data/modules/order/order.js +43 -42
  114. package/.medusa/server/src/utils/data/modules/product/helpers.js +1 -1
  115. package/.medusa/server/src/utils/data/modules/product/product.js +27 -7
  116. package/.medusa/server/src/utils/data/modules/product-category/product-category.js +19 -5
  117. package/.medusa/server/src/utils/data/modules/product-tag/product-tag.js +16 -4
  118. package/.medusa/server/src/utils/data/modules/product-type/product-type.js +16 -4
  119. package/.medusa/server/src/utils/data/modules/product-variant/product-variant.js +19 -5
  120. package/.medusa/server/src/utils/dnd/handle-drag-end.js +22 -0
  121. package/.medusa/server/src/utils/dnd/index.js +6 -0
  122. package/.medusa/server/src/utils/i18n/i18n.js +6 -5
  123. package/.medusa/server/src/utils/index.js +4 -1
  124. package/.medusa/server/src/utils/money-amount-helpers.js +9 -4
  125. package/.medusa/server/src/utils/omit.js +1 -1
  126. package/.medusa/server/src/utils/payment.js +1 -1
  127. package/.medusa/server/src/utils/pick-value-from-object.js +4 -2
  128. package/.medusa/server/src/utils/plugins.js +4 -2
  129. package/.medusa/server/src/utils/string-helpers.js +21 -0
  130. package/.medusa/server/src/utils/transforms/index.js +2 -2
  131. package/.medusa/server/src/utils/transforms/order-transformer.js +22 -8
  132. package/.medusa/server/src/utils/tree.js +34 -0
  133. package/.medusa/server/src/workflows/mpn-builder/create-template.js +24 -0
  134. package/.medusa/server/src/workflows/mpn-builder/delete-template.js +24 -0
  135. package/.medusa/server/src/workflows/mpn-builder/edit-template-blocks.js +26 -0
  136. package/.medusa/server/src/workflows/mpn-builder/edit-template.js +25 -0
  137. package/.medusa/server/src/workflows/mpn-builder/get-blocks-by-template-id.js +23 -0
  138. package/.medusa/server/src/workflows/mpn-builder/get-services-types-templates.js +23 -0
  139. package/.medusa/server/src/workflows/mpn-builder/get-template.js +28 -0
  140. package/.medusa/server/src/workflows/mpn-builder/get-templates-by-type-service.js +22 -0
  141. package/.medusa/server/src/workflows/mpn-builder/get-templates-services.js +21 -0
  142. package/.medusa/server/src/workflows/mpn-builder/get-templates-types.js +19 -0
  143. package/.medusa/server/src/workflows/mpn-builder/index.js +21 -0
  144. package/.medusa/server/src/workflows/mpn-builder/steps/create-template.js +28 -0
  145. package/.medusa/server/src/workflows/mpn-builder/steps/delete-template.js +22 -0
  146. package/.medusa/server/src/workflows/mpn-builder/steps/edit-template-blocks.js +128 -0
  147. package/.medusa/server/src/workflows/mpn-builder/steps/edit-template.js +29 -0
  148. package/.medusa/server/src/workflows/mpn-builder/steps/get-blocks-by-template-id.js +61 -0
  149. package/.medusa/server/src/workflows/mpn-builder/steps/get-services-types-templates.js +53 -0
  150. package/.medusa/server/src/workflows/mpn-builder/steps/get-template-services.js +24 -0
  151. package/.medusa/server/src/workflows/mpn-builder/steps/get-template-types.js +22 -0
  152. package/.medusa/server/src/workflows/mpn-builder/steps/get-template.js +71 -0
  153. package/.medusa/server/src/workflows/mpn-builder/steps/get-templates-by-type-service.js +45 -0
  154. package/.medusa/server/src/workflows/mpn-builder/steps/index.js +21 -0
  155. package/.medusa/server/src/workflows/mpn-builder-services/email-service.js +32 -0
  156. package/.medusa/server/src/workflows/mpn-builder-services/slack-service.js +33 -0
  157. package/.medusa/server/src/workflows/mpn-builder-services/steps/email-service.js +69 -0
  158. package/.medusa/server/src/workflows/mpn-builder-services/steps/slack-service.js +67 -0
  159. package/.medusa/server/src/workflows/order/steps/get-order-by-id.js +1 -1
  160. package/.medusa/server/src/workflows/region/get-region-by-id.js +25 -0
  161. package/.medusa/server/src/workflows/region/index.js +18 -0
  162. package/.medusa/server/src/workflows/region/steps/get-region-by-id.js +26 -0
  163. package/.medusa/server/src/workflows/region/steps/index.js +18 -0
  164. package/.medusa/server/src/workflows/steps/log-step.js +16 -0
  165. package/.medusa/server/src/workflows/store/get-store-by-id.js +23 -0
  166. package/.medusa/server/src/workflows/store/index.js +18 -0
  167. package/.medusa/server/src/workflows/store/steps/get-store-by-id.js +25 -0
  168. package/.medusa/server/src/workflows/store/steps/index.js +18 -0
  169. package/README.md +40 -103
  170. package/package.json +21 -8
  171. package/.medusa/server/src/api/admin/notification-plugin/events/route.js +0 -20
  172. package/.medusa/server/src/api/admin/notification-plugin/notifications/route.js +0 -31
  173. package/.medusa/server/src/api/admin/notification-plugin/render-template/route.js +0 -33
  174. package/.medusa/server/src/templates/emails/email-template-service.js +0 -210
  175. package/.medusa/server/src/templates/emails/types.js +0 -12
  176. package/.medusa/server/src/templates/slack/slack-template-service.js +0 -219
  177. package/.medusa/server/src/templates/slack/types.js +0 -15
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("@medusajs/framework/utils");
4
+ const models_1 = require("./models");
5
+ const email_template_service_1 = require("./services-local/email-template-service");
6
+ const slack_template_service_1 = require("./services-local/slack-template-service");
7
+ const constants_1 = require("./types/constants");
8
+ class MpnBuilderService extends (0, utils_1.MedusaService)({
9
+ MpnBuilderTemplate: models_1.MpnBuilderTemplate,
10
+ MpnBuilderTemplateBlock: models_1.MpnBuilderTemplateBlock,
11
+ }) {
12
+ constructor({ logger }, options) {
13
+ super(...arguments);
14
+ this.templateServices_ = new Map();
15
+ this.logger_ = logger;
16
+ this.options_ = options || {};
17
+ // Initialize default templates
18
+ this.initializeTemplateServices();
19
+ // Initialize extended services (custom handlers and templates)
20
+ // Note: templates with import paths will be loaded asynchronously
21
+ this.initializeExtendedServices().catch((error) => {
22
+ this.logger_.error(`Failed to initialize extended services: ${error?.message || "Unknown error"}`);
23
+ });
24
+ }
25
+ /**
26
+ * Initialize template services from defaults and options
27
+ *
28
+ * @returns void
29
+ */
30
+ initializeTemplateServices() {
31
+ const defaultTemplateServices = [
32
+ new email_template_service_1.EmailTemplateService(),
33
+ new slack_template_service_1.SlackTemplateService(),
34
+ ];
35
+ defaultTemplateServices.forEach((templateService) => {
36
+ this.templateServices_.set(templateService.id, {
37
+ templateService: templateService,
38
+ enabled: true,
39
+ });
40
+ this.logger_.info(`Template service for ${templateService.id} registered`);
41
+ });
42
+ }
43
+ /**
44
+ * Initialize extended actions (custom handlers and templates)
45
+ * Handles both custom handler registration and template loading
46
+ *
47
+ * @returns Promise<void>
48
+ */
49
+ async initializeExtendedServices() {
50
+ const extendedServices = this.options_.extend?.services || [];
51
+ await Promise.all(extendedServices.map(async (serviceConfig) => {
52
+ // 2. Register templates (for existing or newly registered handler)
53
+ if (serviceConfig.templates) {
54
+ const handlerData = this.getTemplateService(serviceConfig.id);
55
+ if (!handlerData) {
56
+ this.logger_.warn(`Cannot register templates for "${serviceConfig.id}" - handler not found`);
57
+ return;
58
+ }
59
+ const { templateService } = handlerData;
60
+ if (!templateService.registerTemplate) {
61
+ this.logger_.warn(`Handler "${serviceConfig.id}" does not support template registration`);
62
+ return;
63
+ }
64
+ await Promise.all(serviceConfig.templates.map(async (template) => {
65
+ const templateName = template.name;
66
+ const templateValue = template.path;
67
+ let renderer = templateValue;
68
+ try {
69
+ const templateModule = await import(templateValue);
70
+ const template = templateModule.default;
71
+ // renderer = template?.default || template
72
+ renderer = template?.default || templateModule;
73
+ if (!renderer) {
74
+ this.logger_.warn(`Template module from "${templateValue}" does not export a default function or expected named export`);
75
+ return;
76
+ }
77
+ }
78
+ catch (error) {
79
+ this.logger_.warn(`Failed to load template from "${templateValue}": ${error?.message || "Unknown error"}`);
80
+ return;
81
+ }
82
+ if (templateName) {
83
+ templateService.registerTemplate(templateName, renderer, "external");
84
+ this.logger_.info(`Custom template "${templateName}" registered for handler "${serviceConfig.id}"`);
85
+ }
86
+ }));
87
+ }
88
+ }));
89
+ }
90
+ /**
91
+ * Get template types
92
+ *
93
+ * @returns Array of template types with key, value, and name
94
+ */
95
+ getTemplateTypes() {
96
+ return [
97
+ {
98
+ id: constants_1.TEMPLATE_TYPES.DB_TEMPLATE,
99
+ name: constants_1.TEMPLATE_TYPES_NAMES.DB_TEMPLATE,
100
+ },
101
+ {
102
+ id: constants_1.TEMPLATE_TYPES.SYSTEM_TEMPLATE,
103
+ name: constants_1.TEMPLATE_TYPES_NAMES.SYSTEM_TEMPLATE,
104
+ },
105
+ {
106
+ id: constants_1.TEMPLATE_TYPES.EXTERNAL_TEMPLATE,
107
+ name: constants_1.TEMPLATE_TYPES_NAMES.EXTERNAL_TEMPLATE,
108
+ },
109
+ ];
110
+ }
111
+ /**
112
+ * Get template services map
113
+ *
114
+ * @returns Map of template services
115
+ */
116
+ getTemplateServices() {
117
+ return this.templateServices_;
118
+ }
119
+ /**
120
+ * Get template service by ID for the admin panel form
121
+ *
122
+ * @param templateServiceId - Template service ID
123
+ * @returns Template service
124
+ */
125
+ getTemplateService(templateServiceId) {
126
+ const templateServices = this.getTemplateServices();
127
+ return templateServices.get(templateServiceId);
128
+ }
129
+ /**
130
+ * List all registered template services (e.g., email, slack)
131
+ *
132
+ * @param type - Optional type to filter by service ID
133
+ * @returns Array of template service configurations
134
+ */
135
+ listTemplateServices(type) {
136
+ let templates = this.getTemplateServices();
137
+ if (type) {
138
+ const templateService = templates.get(type);
139
+ const template = templateService?.templateService;
140
+ const enabled = templateService?.enabled ?? true;
141
+ const templateBlocks = template?.blocks || [];
142
+ return [
143
+ {
144
+ id: template?.id,
145
+ label: template?.label,
146
+ description: template?.description,
147
+ configComponentKey: template?.configComponentKey,
148
+ blocks: templateBlocks,
149
+ enabled: enabled,
150
+ }
151
+ ];
152
+ }
153
+ return Array.from(templates.values()).map((template) => {
154
+ let blocks = template.templateService.blocks || [];
155
+ return {
156
+ id: template.templateService.id,
157
+ label: template.templateService.label,
158
+ description: template.templateService.description,
159
+ configComponentKey: template.templateService.configComponentKey,
160
+ blocks: blocks,
161
+ enabled: template.enabled,
162
+ };
163
+ });
164
+ }
165
+ }
166
+ exports.default = MpnBuilderService;
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL21wbi1idWlsZGVyL3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxREFHa0M7QUFDbEMscUNBR2lCO0FBS2pCLG9GQUE4RTtBQUU5RSxvRkFBOEU7QUFDOUUsaURBQXdFO0FBTXhFLE1BQU0saUJBQWtCLFNBQVEsSUFBQSxxQkFBYSxFQUFDO0lBQzVDLGtCQUFrQixFQUFsQiwyQkFBa0I7SUFDbEIsdUJBQXVCLEVBQXZCLGdDQUF1QjtDQUN4QixDQUFDO0lBS0EsWUFDRSxFQUFFLE1BQU0sRUFBd0IsRUFDaEMsT0FBdUI7UUFFdkIsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUE7UUFOYixzQkFBaUIsR0FBNEUsSUFBSSxHQUFHLEVBQUUsQ0FBQTtRQVE1RyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQTtRQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUE7UUFFN0IsK0JBQStCO1FBQy9CLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFBO1FBRWpDLCtEQUErRDtRQUMvRCxrRUFBa0U7UUFDbEUsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDaEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQ2hCLDJDQUEyQyxLQUFLLEVBQUUsT0FBTyxJQUFJLGVBQWUsRUFBRSxDQUMvRSxDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLDBCQUEwQjtRQUNoQyxNQUFNLHVCQUF1QixHQUEwQjtZQUNyRCxJQUFJLDZDQUFvQixFQUFFO1lBQzFCLElBQUksNkNBQW9CLEVBQUU7U0FDM0IsQ0FBQTtRQUVELHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDLGVBQWUsRUFBRSxFQUFF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
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseTemplateService = void 0;
4
+ const constants_1 = require("../types/constants");
5
+ const utils_1 = require("../../../utils");
6
+ /**
7
+ * Base action service class
8
+ *
9
+ * @param id - Action ID (default: "base")
10
+ * @param label - Template label (default: "Base")
11
+ * @param description - Template description (default: "")
12
+ * @param configComponentKey - Template config component key (default: "BaseConfigComponent")
13
+ * @param blocks - Template blocks (default: [])
14
+ */
15
+ class BaseTemplateService {
16
+ constructor() {
17
+ this.id = "base";
18
+ this.label = "Base";
19
+ this.description = "";
20
+ this.configComponentKey = "BaseConfigComponent";
21
+ // Fields for the Template configuration rendered in the admin panel then saved in the metadata config
22
+ this.blocks = [];
23
+ // Template registry - each service manages its own templates
24
+ this.templates_ = new Map();
25
+ }
26
+ /**
27
+ * Register a template for this service
28
+ * @param name - Template name
29
+ * @param renderer - Template renderer function
30
+ * @param type - Template type (default: "system")
31
+ */
32
+ registerTemplate(name, renderer, type = constants_1.TEMPLATE_TYPES.SYSTEM_TEMPLATE) {
33
+ this.templates_.set(name, { renderer, type: type });
34
+ }
35
+ /**
36
+ * Get template by name
37
+ *
38
+ * @param name - Template name
39
+ * @returns Template renderer
40
+ * @throws Error if template not found
41
+ */
42
+ getTemplate(name) {
43
+ const template = this.templates_.get(name);
44
+ if (!template) {
45
+ throw new Error(`Template "${name}" not found. Available templates: ${Array.from(this.templates_.keys()).join(", ")}`);
46
+ }
47
+ return template.renderer;
48
+ }
49
+ /**
50
+ * Get templates by type
51
+ * @param type - Template type (TEMPLATE_TYPES.SYSTEM_TEMPLATE or TEMPLATE_TYPES.EXTERNAL_TEMPLATE)
52
+ * @returns Array of templates matching the specified type
53
+ */
54
+ getTemplatesByType(type) {
55
+ return Array.from(this.templates_.entries())
56
+ .filter(([_, renderer]) => renderer.type === type)
57
+ .map(([name, renderer]) => ({
58
+ id: name,
59
+ name,
60
+ label: name,
61
+ description: null,
62
+ channel: this.id,
63
+ is_system: type === constants_1.TEMPLATE_TYPES.SYSTEM_TEMPLATE,
64
+ is_active: true,
65
+ type: renderer.type,
66
+ blocks: renderer.renderer?.getConfig?.()?.blocks || [],
67
+ }));
68
+ }
69
+ /**
70
+ * Get system templates (type: "system")
71
+ * @returns Array of system templates
72
+ */
73
+ getSystemTemplates() {
74
+ return this.getTemplatesByType(constants_1.TEMPLATE_TYPES.SYSTEM_TEMPLATE);
75
+ }
76
+ /**
77
+ * Get external templates (type: "external")
78
+ * @returns Array of external templates
79
+ */
80
+ getExternalTemplates() {
81
+ return this.getTemplatesByType(constants_1.TEMPLATE_TYPES.EXTERNAL_TEMPLATE);
82
+ }
83
+ /**
84
+ * Prepare template data.
85
+ *
86
+ * This method prepares the data for the template renderer.
87
+ * Merge translations from template config and options (if provided),
88
+ * then interpolate blocks using the interpolate function.
89
+ *
90
+ * @param params - Parameters object
91
+ * @returns Prepared template data
92
+ */
93
+ prepareData(params) {
94
+ // Get locale from options or default to "en"
95
+ const locale = params.options?.locale || "en";
96
+ // Get registered template
97
+ const template = this.getTemplate(params.templateName);
98
+ const config = (template)?.getConfig?.() || {};
99
+ const configTranslations = config?.translations || {};
100
+ const configBlocks = config?.blocks || [];
101
+ const optionsBlocks = params.options?.blocks || []; // blocks from data in mpn builder
102
+ const optionsTranslations = params.options?.translations;
103
+ // If blocks are not provided in options, use basic blocks from config
104
+ const blocks = optionsBlocks.length > 0
105
+ ? optionsBlocks
106
+ : configBlocks;
107
+ // Merge translations
108
+ const mergedTranslations = (0, utils_1.mergeTranslations)(configTranslations, optionsTranslations);
109
+ // Create translator function
110
+ const translator = (0, utils_1.createTranslator)(locale, mergedTranslations);
111
+ // Interpolate blocks using the interpolate function
112
+ const interpolatedBlocks = blocks.length > 0
113
+ ? this.interpolateFunction(blocks, params.data, translator)
114
+ : blocks;
115
+ return {
116
+ template,
117
+ translator,
118
+ blocks: interpolatedBlocks,
119
+ };
120
+ }
121
+ }
122
+ exports.BaseTemplateService = BaseTemplateService;
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS10ZW1wbGF0ZS1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvbXBuLWJ1aWxkZXIvc2VydmljZXMtbG9jYWwvYmFzZS10ZW1wbGF0ZS1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLGtEQUFtRDtBQUNuRCwwQ0FHdUI7QUFFdkI7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFhLG1CQUFtQjtJQUFoQztRQUNFLE9BQUUsR0FBRyxNQUFNLENBQUE7UUFDWCxVQUFLLEdBQUcsTUFBTSxDQUFBO1FBQ2QsZ0JBQVcsR0FBRyxFQUFFLENBQUE7UUFFaEIsdUJBQWtCLEdBQUcscUJBQXFCLENBQUE7UUFFMUMsc0dBQXNHO1FBQ3RHLFdBQU0sR0FBZ0IsRUFBRSxDQUFBO1FBRXhCLDZEQUE2RDtRQUNuRCxlQUFVLEdBQ2xCLElBQUksR0FBRyxFQUFFLENBQUE7SUF5SmIsQ0FBQztJQXZKQzs7Ozs7T0FLRztJQUNILGdCQUFnQixDQUNkLElBQVksRUFDWixRQUEwQixFQUMxQixPQUFlLDBCQUFjLENBQUMsZUFBZTtRQUU3QyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7SUFDckQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFdBQVcsQ0FBQyxJQUFZO1FBQ3RCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRTFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLE1BQU0sSUFBSSxLQUFLLENBQ2IsYUFBYSxJQUFJLHFDQUFxQyxLQUFLLENBQUMsSUFBSSxDQUM5RCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUN2QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUNm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