@codee-sh/medusa-plugin-notification-emails 0.1.1 → 0.2.0

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 (66) hide show
  1. package/.medusa/server/emails-previews/contact-form.js +14 -8
  2. package/.medusa/server/emails-previews/inventory-level.js +8 -4
  3. package/.medusa/server/emails-previews/order-completed.js +70 -35
  4. package/.medusa/server/emails-previews/order-placed.js +70 -34
  5. package/.medusa/server/src/admin/index.js +1684 -262
  6. package/.medusa/server/src/admin/index.mjs +1684 -262
  7. package/.medusa/server/src/api/admin/notification-plugin/render-template/route.js +9 -5
  8. package/.medusa/server/src/subscribers/order-completed.js +10 -6
  9. package/.medusa/server/src/subscribers/order-placed.js +8 -4
  10. package/.medusa/server/src/templates/emails/contact-form/config.js +5 -1
  11. package/.medusa/server/src/templates/emails/email-template-service.js +210 -0
  12. package/.medusa/server/src/templates/emails/index.js +6 -248
  13. package/.medusa/server/src/templates/emails/inventory-level/config.js +5 -1
  14. package/.medusa/server/src/templates/emails/order/completed/config.js +5 -1
  15. package/.medusa/server/src/templates/emails/order/completed/index.js +1 -2
  16. package/.medusa/server/src/templates/emails/order/placed/config.js +5 -1
  17. package/.medusa/server/src/templates/emails/order/updated/config.js +5 -1
  18. package/.medusa/server/src/templates/emails/types.js +1 -1
  19. package/.medusa/server/src/templates/shared/abstract-template-service.js +104 -0
  20. package/.medusa/server/src/templates/shared/index.js +22 -0
  21. package/.medusa/server/src/templates/shared/types.js +6 -0
  22. package/.medusa/server/src/templates/slack/index.js +12 -0
  23. package/.medusa/server/src/templates/slack/inventory-level/config.js +52 -0
  24. package/.medusa/server/src/templates/slack/inventory-level/index.js +8 -0
  25. package/.medusa/server/src/templates/slack/inventory-level/translations/en.json +18 -0
  26. package/.medusa/server/src/templates/slack/inventory-level/translations/pl.json +18 -0
  27. package/.medusa/server/src/templates/slack/order/archived/config.js +48 -0
  28. package/.medusa/server/src/templates/slack/order/archived/index.js +7 -0
  29. package/.medusa/server/src/templates/slack/order/archived/translations/en.json +11 -0
  30. package/.medusa/server/src/templates/slack/order/archived/translations/index.js +15 -0
  31. package/.medusa/server/src/templates/slack/order/archived/translations/pl.json +11 -0
  32. package/.medusa/server/src/templates/slack/order/canceled/config.js +48 -0
  33. package/.medusa/server/src/templates/slack/order/canceled/index.js +7 -0
  34. package/.medusa/server/src/templates/slack/order/canceled/translations/en.json +11 -0
  35. package/.medusa/server/src/templates/slack/order/canceled/translations/index.js +15 -0
  36. package/.medusa/server/src/templates/slack/order/canceled/translations/pl.json +11 -0
  37. package/.medusa/server/src/templates/slack/order/completed/config.js +48 -0
  38. package/.medusa/server/src/templates/slack/order/completed/index.js +7 -0
  39. package/.medusa/server/src/templates/slack/order/completed/translations/en.json +11 -0
  40. package/.medusa/server/src/templates/slack/order/completed/translations/index.js +15 -0
  41. package/.medusa/server/src/templates/slack/order/completed/translations/pl.json +11 -0
  42. package/.medusa/server/src/templates/slack/order/placed/config.js +48 -0
  43. package/.medusa/server/src/templates/slack/order/placed/index.js +7 -0
  44. package/.medusa/server/src/templates/slack/order/placed/translations/en.json +11 -0
  45. package/.medusa/server/src/templates/slack/order/placed/translations/index.js +15 -0
  46. package/.medusa/server/src/templates/slack/order/placed/translations/pl.json +11 -0
  47. package/.medusa/server/src/templates/slack/order/updated/config.js +48 -0
  48. package/.medusa/server/src/templates/slack/order/updated/index.js +7 -0
  49. package/.medusa/server/src/templates/slack/order/updated/translations/en.json +11 -0
  50. package/.medusa/server/src/templates/slack/order/updated/translations/index.js +15 -0
  51. package/.medusa/server/src/templates/slack/order/updated/translations/pl.json +11 -0
  52. package/.medusa/server/src/templates/slack/product/config.js +48 -0
  53. package/.medusa/server/src/templates/slack/product/index.js +7 -0
  54. package/.medusa/server/src/templates/slack/product/translations/en.json +14 -0
  55. package/.medusa/server/src/templates/slack/product/translations/pl.json +14 -0
  56. package/.medusa/server/src/templates/slack/product-variant/config.js +48 -0
  57. package/.medusa/server/src/templates/slack/product-variant/index.js +7 -0
  58. package/.medusa/server/src/templates/slack/product-variant/translations/en.json +14 -0
  59. package/.medusa/server/src/templates/slack/product-variant/translations/index.js +15 -0
  60. package/.medusa/server/src/templates/slack/product-variant/translations/pl.json +14 -0
  61. package/.medusa/server/src/templates/slack/slack-template-service.js +219 -0
  62. package/.medusa/server/src/templates/slack/types.js +15 -0
  63. package/.medusa/server/src/utils/i18n/i18n.js +7 -10
  64. package/README.md +45 -15
  65. package/package.json +4 -1
  66. package/.medusa/server/src/subscribers/payment-captured.js +0 -86
@@ -16,14 +16,18 @@ async function POST(req, res) {
16
16
  throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_ARGUMENT, "Template name, template data and locale are required");
17
17
  }
18
18
  const transformedTemplateData = (0, transforms_1.transformContext)(contextType, context, locale);
19
- const { html, text } = await (0, emails_1.renderTemplate)(templateName, transformedTemplateData, {
20
- locale: locale,
21
- theme: pluginOptions?.theme || theme_1.defaultTheme,
22
- customTranslations: pluginOptions?.customTranslations?.[templateName]
19
+ const { html, text } = await emails_1.emailService.render({
20
+ templateName,
21
+ data: transformedTemplateData,
22
+ options: {
23
+ locale: locale,
24
+ theme: pluginOptions?.theme || theme_1.defaultTheme,
25
+ translations: pluginOptions?.customTranslations?.[templateName]
26
+ }
23
27
  });
24
28
  res.status(200).json({
25
29
  html,
26
30
  text,
27
31
  });
28
32
  }
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL25vdGlmaWNhdGlvbi1wbHVnaW4vcmVuZGVyLXRlbXBsYXRlL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBT0Esb0JBZ0NDO0FBdENELHFEQUF1RDtBQUN2RCw4REFBaUU7QUFDakUseURBQXlGO0FBQ3pGLDZEQUErRDtBQUMvRCx1REFBNEQ7QUFFckQsS0FBSyxVQUFVLElBQUksQ0FDeEIsR0FBNEYsRUFDNUYsR0FBbUI7SUFFbkIsTUFBTSxhQUFhLEdBQUcsSUFBQSwwQkFBZ0IsRUFBQyxHQUFHLENBQUMsS0FBSyxFQUFFLHNDQUFzQyxDQUFDLENBQUE7SUFFekYsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxZQUE0QixDQUFBO0lBQzNELE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBdUIsQ0FBQTtJQUNqRCxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQTtJQUV6QyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUE7SUFFdkMsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3pDLE1BQU0sSUFBSSxtQkFBVyxDQUFDLG1CQUFXLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLHNEQUFzRCxDQUFDLENBQUE7SUFDbkgsQ0FBQztJQUVELE1BQU0sdUJBQXVCLEdBQUcsSUFBQSw2QkFBZ0IsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBRTlFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFBLHVCQUFjLEVBQ3pDLFlBQVksRUFDWix1QkFBdUIsRUFDdkI7UUFDRSxNQUFNLEVBQUUsTUFBTTtRQUNkLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxJQUFJLG9CQUFZO1FBQzNDLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLFlBQVksQ0FBQztLQUN0RSxDQUNGLENBQUE7SUFFRCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNuQixJQUFJO1FBQ0osSUFBSTtLQUNMLENBQUMsQ0FBQTtBQUNKLENBQUMifQ==
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL25vdGlmaWNhdGlvbi1wbHVnaW4vcmVuZGVyLXRlbXBsYXRlL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBT0Esb0JBZ0NDO0FBdENELHFEQUF1RDtBQUN2RCw4REFBaUU7QUFDakUseURBQTRFO0FBQzVFLDZEQUErRDtBQUMvRCx1REFBNEQ7QUFFckQsS0FBSyxVQUFVLElBQUksQ0FDeEIsR0FBNEYsRUFDNUYsR0FBbUI7SUFFbkIsTUFBTSxhQUFhLEdBQUcsSUFBQSwwQkFBZ0IsRUFBQyxHQUFHLENBQUMsS0FBSyxFQUFFLHNDQUFzQyxDQUFDLENBQUE7SUFFekYsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxZQUFZLENBQUE7SUFDM0MsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUE7SUFDakMsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUE7SUFFekMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLElBQUksSUFBSSxDQUFBO0lBRXZDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN6QyxNQUFNLElBQUksbUJBQVcsQ0FBQyxtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxzREFBc0QsQ0FBQyxDQUFBO0lBQ25ILENBQUM7SUFFRCxNQUFNLHVCQUF1QixHQUFHLElBQUEsNkJBQWdCLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUU5RSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0scUJBQVksQ0FBQyxNQUFNLENBQUM7UUFDL0MsWUFBWTtRQUNaLElBQUksRUFBRSx1QkFBdUI7UUFDN0IsT0FBTyxFQUFFO1lBQ1AsTUFBTSxFQUFFLE1BQU07WUFDZCxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssSUFBSSxvQkFBWTtZQUMzQyxZQUFZLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLENBQUMsWUFBWSxDQUFDO1NBQ2hFO0tBQ0YsQ0FBQyxDQUFBO0lBRUYsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbkIsSUFBSTtRQUNKLElBQUk7S0FDTCxDQUFDLENBQUE7QUFDSixDQUFDIn0=
@@ -24,11 +24,15 @@ async function orderPlacedEmailsHandler({ event: { data: { id, trigger_type } },
24
24
  return;
25
25
  }
26
26
  // Transform raw order data to email template format
27
- const templateData = (0, transforms_1.transformContext)("order", order, "pl");
27
+ const context = (0, transforms_1.transformContext)("order", order, "pl");
28
28
  const templateName = types_1.TEMPLATES_NAMES.ORDER_COMPLETED;
29
- const { html, text, subject } = await (0, emails_1.renderTemplate)(templateName, templateData, {
30
- locale: "pl",
31
- customTranslations: pluginOptions?.customTranslations?.[templateName]
29
+ const { html, text, subject } = await emails_1.emailService.render({
30
+ templateName,
31
+ data: context,
32
+ options: {
33
+ locale: "pl",
34
+ translations: pluginOptions?.customTranslations?.[templateName]
35
+ }
32
36
  });
33
37
  const result = await notificationModuleService.createNotifications({
34
38
  to: order.order.customer.email,
@@ -37,7 +41,7 @@ async function orderPlacedEmailsHandler({ event: { data: { id, trigger_type } },
37
41
  trigger_type: triggerType,
38
42
  resource_id: id,
39
43
  resource_type: "order",
40
- data: templateData,
44
+ data: context,
41
45
  content: {
42
46
  subject: subject,
43
47
  html,
@@ -48,4 +52,4 @@ async function orderPlacedEmailsHandler({ event: { data: { id, trigger_type } },
48
52
  exports.config = {
49
53
  event: "order.completed",
50
54
  };
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItY29tcGxldGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL29yZGVyLWNvbXBsZXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFXQSwyQ0FxREM7QUE1REQscURBQWdFO0FBQ2hFLGdEQUFvRDtBQUNwRCxxREFBMkQ7QUFDM0Qsb0RBQXNEO0FBQ3RELDhDQUFtRDtBQUNuRCx3RUFBeUU7QUFFMUQsS0FBSyxVQUFVLHdCQUF3QixDQUFDLEVBQ3JELEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUNyQyxTQUFTLEdBQzRDO0lBQ3JELE1BQU0sYUFBYSxHQUFHLElBQUEsMEJBQWdCLEVBQUMsU0FBUyxFQUFFLDZDQUE2QyxDQUFDLENBQUE7SUFFaEcsTUFBTSx5QkFBeUIsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUNqRCxlQUFPLENBQUMsWUFBWSxDQUNyQixDQUFBO0lBQ0QsTUFBTSxXQUFXLEdBQUcsWUFBWSxJQUFJLFFBQVEsQ0FBQTtJQUU1QyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDUixNQUFNLElBQUksbUJBQVcsQ0FBQyxtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFBO0lBQ25GLENBQUM7SUFFRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBQSxzQ0FBb0IsRUFBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDbEUsS0FBSyxFQUFFO1lBQ0wsUUFBUSxFQUFFLEVBQUU7U0FDYjtLQUNGLENBQUMsQ0FBQTtJQUVGLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU07SUFDUixDQUFDO0lBRUQsb0RBQW9EO0lBQ3BELE1BQU0sWUFBWSxHQUFHLElBQUEsNkJBQWdCLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUUzRCxNQUFNLFlBQVksR0FBRyx1QkFBZSxDQUFDLGVBQWUsQ0FBQTtJQUVwRCxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLElBQUEsdUJBQWMsRUFDbEQsWUFBWSxFQUNaLFlBQVksRUFDWjtRQUNFLE1BQU0sRUFBRSxJQUFJO1FBQ1osa0JBQWtCLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLENBQUMsWUFBWSxDQUFDO0tBQ3RFLENBQ0YsQ0FBQTtJQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0seUJBQXlCLENBQUMsbUJBQW1CLENBQUM7UUFDakUsRUFBRSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUs7UUFDOUIsT0FBTyxFQUFFLE9BQU87UUFDaEIsUUFBUSxFQUFFLFlBQVk7UUFDdEIsWUFBWSxFQUFFLFdBQVc7UUFDekIsV0FBVyxFQUFFLEVBQUU7UUFDZixhQUFhLEVBQUUsT0FBTztRQUN0QixJQUFJLEVBQUUsWUFBWTtRQUNsQixPQUFPLEVBQUU7WUFDUCxPQUFPLEVBQUUsT0FBTztZQUNoQixJQUFJO1lBQ0osSUFBSTtTQUNMO0tBQ0YsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFxQjtJQUN0QyxLQUFLLEVBQUUsaUJBQWlCO0NBQ3pCLENBQUEifQ==
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItY29tcGxldGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL29yZGVyLWNvbXBsZXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFXQSwyQ0FxREM7QUE1REQscURBQWdFO0FBQ2hFLGdEQUFrRDtBQUNsRCxxREFBMkQ7QUFDM0Qsb0RBQXNEO0FBQ3RELDhDQUFtRDtBQUNuRCx3RUFBeUU7QUFFMUQsS0FBSyxVQUFVLHdCQUF3QixDQUFDLEVBQ3JELEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUNyQyxTQUFTLEdBQzRDO0lBQ3JELE1BQU0sYUFBYSxHQUFHLElBQUEsMEJBQWdCLEVBQUMsU0FBUyxFQUFFLDZDQUE2QyxDQUFDLENBQUE7SUFFaEcsTUFBTSx5QkFBeUIsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUNqRCxlQUFPLENBQUMsWUFBWSxDQUNyQixDQUFBO0lBQ0QsTUFBTSxXQUFXLEdBQUcsWUFBWSxJQUFJLFFBQVEsQ0FBQTtJQUU1QyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDUixNQUFNLElBQUksbUJBQVcsQ0FBQyxtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFBO0lBQ25GLENBQUM7SUFFRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBQSxzQ0FBb0IsRUFBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDbEUsS0FBSyxFQUFFO1lBQ0wsUUFBUSxFQUFFLEVBQUU7U0FDYjtLQUNGLENBQUMsQ0FBQTtJQUVGLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU07SUFDUixDQUFDO0lBRUQsb0RBQW9EO0lBQ3BELE1BQU0sT0FBTyxHQUFHLElBQUEsNkJBQWdCLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUV0RCxNQUFNLFlBQVksR0FBRyx1QkFBZSxDQUFDLGVBQWUsQ0FBQTtJQUVwRCxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLHFCQUFZLENBQUMsTUFBTSxDQUFDO1FBQ3hELFlBQVk7UUFDWixJQUFJLEVBQUUsT0FBTztRQUNiLE9BQU8sRUFBRTtZQUNQLE1BQU0sRUFBRSxJQUFJO1lBQ1osWUFBWSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLFlBQVksQ0FBQztTQUNoRTtLQUNGLENBQUMsQ0FBQTtJQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0seUJBQXlCLENBQUMsbUJBQW1CLENBQUM7UUFDakUsRUFBRSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUs7UUFDOUIsT0FBTyxFQUFFLE9BQU87UUFDaEIsUUFBUSxFQUFFLFlBQVk7UUFDdEIsWUFBWSxFQUFFLFdBQVc7UUFDekIsV0FBVyxFQUFFLEVBQUU7UUFDZixhQUFhLEVBQUUsT0FBTztRQUN0QixJQUFJLEVBQUUsT0FBTztRQUNiLE9BQU8sRUFBRTtZQUNQLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLElBQUk7WUFDSixJQUFJO1NBQ0w7S0FDRixDQUFDLENBQUE7QUFDSixDQUFDO0FBRVksUUFBQSxNQUFNLEdBQXFCO0lBQ3RDLEtBQUssRUFBRSxpQkFBaUI7Q0FDekIsQ0FBQSJ9
@@ -26,9 +26,13 @@ async function orderPlacedEmailsHandler({ event: { data: { id, trigger_type } },
26
26
  // Transform raw order data to email template format
27
27
  const templateData = (0, transforms_1.transformContext)("order", order, "pl");
28
28
  const templateName = types_1.TEMPLATES_NAMES.ORDER_PLACED;
29
- const { html, text, subject } = await (0, emails_1.renderTemplate)(templateName, templateData, {
30
- locale: "pl",
31
- customTranslations: pluginOptions?.customTranslations?.[templateName]
29
+ const { html, text, subject } = await emails_1.emailService.render({
30
+ templateName,
31
+ data: templateData,
32
+ options: {
33
+ locale: "pl",
34
+ customTranslations: pluginOptions?.customTranslations?.[templateName]
35
+ }
32
36
  });
33
37
  const result = await notificationModuleService.createNotifications({
34
38
  to: order.order.customer.email,
@@ -48,4 +52,4 @@ async function orderPlacedEmailsHandler({ event: { data: { id, trigger_type } },
48
52
  exports.config = {
49
53
  event: "order.placed",
50
54
  };
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItcGxhY2VkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL29yZGVyLXBsYWNlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFXQSwyQ0FxREM7QUE1REQscURBQWdFO0FBQ2hFLGdEQUFvRDtBQUNwRCxxREFBMkQ7QUFDM0Qsb0RBQXNEO0FBQ3RELDhDQUFtRDtBQUNuRCx3RUFBeUU7QUFFMUQsS0FBSyxVQUFVLHdCQUF3QixDQUFDLEVBQ3JELEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUNyQyxTQUFTLEdBQzRDO0lBQ3JELE1BQU0sYUFBYSxHQUFHLElBQUEsMEJBQWdCLEVBQUMsU0FBUyxFQUFFLDZDQUE2QyxDQUFDLENBQUE7SUFFaEcsTUFBTSx5QkFBeUIsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUNqRCxlQUFPLENBQUMsWUFBWSxDQUNyQixDQUFBO0lBQ0QsTUFBTSxXQUFXLEdBQUcsWUFBWSxJQUFJLFFBQVEsQ0FBQTtJQUU1QyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDUixNQUFNLElBQUksbUJBQVcsQ0FBQyxtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFBO0lBQ25GLENBQUM7SUFFRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBQSxzQ0FBb0IsRUFBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDbEUsS0FBSyxFQUFFO1lBQ0wsUUFBUSxFQUFFLEVBQUU7U0FDYjtLQUNGLENBQUMsQ0FBQTtJQUVGLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU07SUFDUixDQUFDO0lBRUQsb0RBQW9EO0lBQ3BELE1BQU0sWUFBWSxHQUFHLElBQUEsNkJBQWdCLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUUzRCxNQUFNLFlBQVksR0FBRyx1QkFBZSxDQUFDLFlBQVksQ0FBQTtJQUVqRCxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLElBQUEsdUJBQWMsRUFDbEQsWUFBWSxFQUNaLFlBQVksRUFDWjtRQUNFLE1BQU0sRUFBRSxJQUFJO1FBQ1osa0JBQWtCLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLENBQUMsWUFBWSxDQUFDO0tBQ3RFLENBQ0YsQ0FBQTtJQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0seUJBQXlCLENBQUMsbUJBQW1CLENBQUM7UUFDakUsRUFBRSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUs7UUFDOUIsT0FBTyxFQUFFLE9BQU87UUFDaEIsUUFBUSxFQUFFLFlBQVk7UUFDdEIsWUFBWSxFQUFFLFdBQVc7UUFDekIsV0FBVyxFQUFFLEVBQUU7UUFDZixhQUFhLEVBQUUsT0FBTztRQUN0QixJQUFJLEVBQUUsWUFBWTtRQUNsQixPQUFPLEVBQUU7WUFDUCxPQUFPLEVBQUUsT0FBTztZQUNoQixJQUFJO1lBQ0osSUFBSTtTQUNMO0tBQ0YsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFxQjtJQUN0QyxLQUFLLEVBQUUsY0FBYztDQUN0QixDQUFBIn0=
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItcGxhY2VkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL29yZGVyLXBsYWNlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFXQSwyQ0FxREM7QUE1REQscURBQWdFO0FBQ2hFLGdEQUFrRDtBQUNsRCxxREFBMkQ7QUFDM0Qsb0RBQXNEO0FBQ3RELDhDQUFtRDtBQUNuRCx3RUFBeUU7QUFFMUQsS0FBSyxVQUFVLHdCQUF3QixDQUFDLEVBQ3JELEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUNyQyxTQUFTLEdBQzRDO0lBQ3JELE1BQU0sYUFBYSxHQUFHLElBQUEsMEJBQWdCLEVBQUMsU0FBUyxFQUFFLDZDQUE2QyxDQUFDLENBQUE7SUFFaEcsTUFBTSx5QkFBeUIsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUNqRCxlQUFPLENBQUMsWUFBWSxDQUNyQixDQUFBO0lBQ0QsTUFBTSxXQUFXLEdBQUcsWUFBWSxJQUFJLFFBQVEsQ0FBQTtJQUU1QyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDUixNQUFNLElBQUksbUJBQVcsQ0FBQyxtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFBO0lBQ25GLENBQUM7SUFFRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBQSxzQ0FBb0IsRUFBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDbEUsS0FBSyxFQUFFO1lBQ0wsUUFBUSxFQUFFLEVBQUU7U0FDYjtLQUNGLENBQUMsQ0FBQTtJQUVGLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU07SUFDUixDQUFDO0lBRUQsb0RBQW9EO0lBQ3BELE1BQU0sWUFBWSxHQUFHLElBQUEsNkJBQWdCLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUUzRCxNQUFNLFlBQVksR0FBRyx1QkFBZSxDQUFDLFlBQVksQ0FBQTtJQUUvQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLHFCQUFZLENBQUMsTUFBTSxDQUFDO1FBQzFELFlBQVk7UUFDWixJQUFJLEVBQUUsWUFBWTtRQUNsQixPQUFPLEVBQUU7WUFDUCxNQUFNLEVBQUUsSUFBSTtZQUNaLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLFlBQVksQ0FBQztTQUN0RTtLQUNGLENBQUMsQ0FBQTtJQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0seUJBQXlCLENBQUMsbUJBQW1CLENBQUM7UUFDakUsRUFBRSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUs7UUFDOUIsT0FBTyxFQUFFLE9BQU87UUFDaEIsUUFBUSxFQUFFLFlBQVk7UUFDdEIsWUFBWSxFQUFFLFdBQVc7UUFDekIsV0FBVyxFQUFFLEVBQUU7UUFDZixhQUFhLEVBQUUsT0FBTztRQUN0QixJQUFJLEVBQUUsWUFBWTtRQUNsQixPQUFPLEVBQUU7WUFDUCxPQUFPLEVBQUUsT0FBTztZQUNoQixJQUFJO1lBQ0osSUFBSTtTQUNMO0tBQ0YsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFxQjtJQUN0QyxLQUFLLEVBQUUsY0FBYztDQUN0QixDQUFBIn0=
@@ -15,6 +15,10 @@ exports.translations = {
15
15
  en: en_json_1.default,
16
16
  de: de_json_1.default,
17
17
  };
18
+ /**
19
+ * Contact form template blocks
20
+ *
21
+ */
18
22
  exports.templateBlocks = [
19
23
  {
20
24
  type: "section",
@@ -76,4 +80,4 @@ exports.templateBlocks = [
76
80
  },
77
81
  },
78
82
  ];
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3RlbXBsYXRlcy9lbWFpbHMvY29udGFjdC1mb3JtL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxxRUFBd0M7QUFJL0IsYUFKRixpQkFBRSxDQUlFO0FBSFgscUVBQXdDO0FBRzNCLGFBSE4saUJBQUUsQ0FHTTtBQUZmLHFFQUF3QztBQUV2QixhQUZWLGlCQUFFLENBRVU7QUFFTixRQUFBLFlBQVksR0FBcUI7SUFDNUMsRUFBRSxFQUFFLGlCQUFFO0lBQ04sRUFBRSxFQUFFLGlCQUFFO0lBQ04sRUFBRSxFQUFFLGlCQUFFO0NBQ1AsQ0FBQztBQUVXLFFBQUEsY0FBYyxHQUFHO0lBQzVCO1FBQ0UsSUFBSSxFQUFFLFNBQVM7UUFDZixFQUFFLEVBQUUsV0FBVztRQUNmLEtBQUssRUFBRTtZQUNMLE1BQU0sRUFBRTtnQkFDTjtvQkFDRSxFQUFFLEVBQUUsV0FBVztvQkFDZixJQUFJLEVBQUUsU0FBUztvQkFDZixLQUFLLEVBQUU7d0JBQ0wsS0FBSyxFQUFFLDhCQUE4QjtxQkFDdEM7aUJBQ0Y7YUFDRjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLEVBQUUsRUFBRSxhQUFhO1FBQ2pCLElBQUksRUFBRSxXQUFXO0tBQ2xCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsU0FBUztRQUNmLEVBQUUsRUFBRSxXQUFXO1FBQ2YsS0FBSyxFQUFFO1lBQ0wsTUFBTSxFQUFFO2dCQUNOO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsK0JBQStCO3dCQUN0QyxLQUFLLEVBQUUsNkJBQTZCO3FCQUNyQztpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsYUFBYTtvQkFDakIsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsK0JBQStCO3dCQUN0QyxLQUFLLEVBQUUsNkJBQTZCO3FCQUNyQztpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsYUFBYTtvQkFDakIsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsaUNBQWlDO3dCQUN4QyxLQUFLLEVBQUUsK0JBQStCO3FCQUN2QztpQkFDRjthQUNGO1NBQ0Y7S0FDRjtDQUNGLENBQUMifQ==
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3RlbXBsYXRlcy9lbWFpbHMvY29udGFjdC1mb3JtL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxxRUFBd0M7QUFJL0IsYUFKRixpQkFBRSxDQUlFO0FBSFgscUVBQXdDO0FBRzNCLGFBSE4saUJBQUUsQ0FHTTtBQUZmLHFFQUF3QztBQUV2QixhQUZWLGlCQUFFLENBRVU7QUFFTixRQUFBLFlBQVksR0FBcUI7SUFDNUMsRUFBRSxFQUFFLGlCQUFFO0lBQ04sRUFBRSxFQUFFLGlCQUFFO0lBQ04sRUFBRSxFQUFFLGlCQUFFO0NBQ1AsQ0FBQztBQUVGOzs7R0FHRztBQUNVLFFBQUEsY0FBYyxHQUFHO0lBQzVCO1FBQ0UsSUFBSSxFQUFFLFNBQVM7UUFDZixFQUFFLEVBQUUsV0FBVztRQUNmLEtBQUssRUFBRTtZQUNMLE1BQU0sRUFBRTtnQkFDTjtvQkFDRSxFQUFFLEVBQUUsV0FBVztvQkFDZixJQUFJLEVBQUUsU0FBUztvQkFDZixLQUFLLEVBQUU7d0JBQ0wsS0FBSyxFQUFFLDhCQUE4QjtxQkFDdEM7aUJBQ0Y7YUFDRjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLEVBQUUsRUFBRSxhQUFhO1FBQ2pCLElBQUksRUFBRSxXQUFXO0tBQ2xCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsU0FBUztRQUNmLEVBQUUsRUFBRSxXQUFXO1FBQ2YsS0FBSyxFQUFFO1lBQ0wsTUFBTSxFQUFFO2dCQUNOO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsK0JBQStCO3dCQUN0QyxLQUFLLEVBQUUsNkJBQTZCO3FCQUNyQztpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsYUFBYTtvQkFDakIsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsK0JBQStCO3dCQUN0QyxLQUFLLEVBQUUsNkJBQTZCO3FCQUNyQztpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsYUFBYTtvQkFDakIsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsaUNBQWlDO3dCQUN4QyxLQUFLLEVBQUUsK0JBQStCO3FCQUN2QztpQkFDRjthQUNGO1NBQ0Y7S0FDRjtDQUNGLENBQUMifQ==
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EmailTemplateService = void 0;
4
+ const abstract_template_service_1 = require("../shared/abstract-template-service");
5
+ const utils_1 = require("../../utils");
6
+ const base_template_1 = require("./base-template");
7
+ const contact_form_1 = require("./contact-form");
8
+ const inventory_level_1 = require("./inventory-level");
9
+ const placed_1 = require("./order/placed");
10
+ const completed_1 = require("./order/completed");
11
+ const updated_1 = require("./order/updated");
12
+ const types_1 = require("./types");
13
+ /**
14
+ * Email template service
15
+ * Handles registration and rendering of email templates
16
+ */
17
+ class EmailTemplateService extends abstract_template_service_1.AbstractTemplateService {
18
+ constructor() {
19
+ super();
20
+ this.baseTemplateConfig = {
21
+ getHtml: async (data, options) => {
22
+ return await (0, base_template_1.getBaseTemplateHtml)(data, options);
23
+ },
24
+ getText: async (data, options) => {
25
+ return await (0, base_template_1.getBaseTemplateText)(data, options);
26
+ },
27
+ getReactNode: (data, options) => {
28
+ return (0, base_template_1.getBaseTemplateReactNode)(data, options);
29
+ },
30
+ };
31
+ this.interpolateFunction = this.interpolateBlocks.bind(this);
32
+ // Register base template
33
+ this.registerTemplate(types_1.TEMPLATES_NAMES.BASE_TEMPLATE, this.baseTemplateConfig);
34
+ // Initialize default templates
35
+ this.initializeDefaultTemplates();
36
+ }
37
+ /**
38
+ * Initialize default email templates
39
+ */
40
+ initializeDefaultTemplates() {
41
+ // Contact form template
42
+ this.registerTemplate(types_1.TEMPLATES_NAMES.CONTACT_FORM, {
43
+ ...this.baseTemplateConfig,
44
+ getConfig: () => {
45
+ return {
46
+ blocks: contact_form_1.templateBlocks,
47
+ translations: contact_form_1.translations,
48
+ };
49
+ },
50
+ });
51
+ // Order placed template
52
+ this.registerTemplate(types_1.TEMPLATES_NAMES.ORDER_PLACED, {
53
+ ...this.baseTemplateConfig,
54
+ getConfig: () => {
55
+ return {
56
+ blocks: placed_1.templateBlocks,
57
+ translations: placed_1.translations,
58
+ };
59
+ },
60
+ });
61
+ // Order completed template
62
+ this.registerTemplate(types_1.TEMPLATES_NAMES.ORDER_COMPLETED, {
63
+ ...this.baseTemplateConfig,
64
+ getConfig: () => {
65
+ return {
66
+ blocks: completed_1.templateBlocks,
67
+ translations: completed_1.translations,
68
+ };
69
+ },
70
+ });
71
+ // Order updated template
72
+ this.registerTemplate(types_1.TEMPLATES_NAMES.ORDER_UPDATED, {
73
+ ...this.baseTemplateConfig,
74
+ getConfig: () => {
75
+ return {
76
+ blocks: updated_1.templateBlocks,
77
+ translations: updated_1.translations,
78
+ };
79
+ },
80
+ });
81
+ // Inventory level template
82
+ this.registerTemplate(types_1.TEMPLATES_NAMES.INVENTORY_LEVEL, {
83
+ ...this.baseTemplateConfig,
84
+ getConfig: () => {
85
+ return {
86
+ blocks: inventory_level_1.templateBlocks,
87
+ translations: inventory_level_1.translations,
88
+ };
89
+ },
90
+ });
91
+ }
92
+ /**
93
+ * Recursively interpolate text in blocks using the multiInterpolate function
94
+ * Processes props.[property] in each block and nested blocks
95
+ *
96
+ * @param blocks - Blocks to interpolate
97
+ * @param data - Data object for interpolation
98
+ * @param translator - Translator instance with t method (created using createTranslator function)
99
+ * @param config - Configuration object
100
+ * @returns Interpolated blocks
101
+ *
102
+ * @example
103
+ *
104
+ * const blocks = [ { type: "text", props: { value: "Order {{data.order.id}} - {{translations.headerTitle}}" } } ]
105
+ * const data = { order: { id: "123" } }
106
+ * const translator = translator instance (created using createTranslator function)
107
+ * const config = {}
108
+ *
109
+ * const interpolatedBlocks = interpolateBlocks(blocks, data, translator, config)
110
+ *
111
+ * Return: [ { type: "text", props: { value: "Order 123 - Order Confirmation" } } ]
112
+ *
113
+ */
114
+ interpolateBlocks(blocks, data, translator, config) {
115
+ return blocks.map((block) => {
116
+ const processedBlock = { ...block };
117
+ // Process all string properties in props
118
+ if (processedBlock.props && typeof processedBlock.props === "object") {
119
+ const processedProps = { ...processedBlock.props };
120
+ // Iterate over all properties in props
121
+ for (const [key, value] of Object.entries(processedProps)) {
122
+ // Skip non-string values and special properties (blocks, itemBlocks, separator, arrayPath)
123
+ if (typeof value === "string" &&
124
+ key !== "blocks" &&
125
+ key !== "itemBlocks" &&
126
+ key !== "arrayPath") {
127
+ processedProps[key] = (0, utils_1.multiInterpolate)(value, data, translator, config);
128
+ }
129
+ }
130
+ processedBlock.props = processedProps;
131
+ }
132
+ // Recursively process nested blocks
133
+ if (processedBlock.props?.blocks &&
134
+ Array.isArray(processedBlock.props.blocks)) {
135
+ processedBlock.props = {
136
+ ...processedBlock.props,
137
+ blocks: this.interpolateBlocks(processedBlock.props.blocks, data, translator),
138
+ };
139
+ }
140
+ if (processedBlock.type === "repeater") {
141
+ const { arrayPath, itemBlocks } = processedBlock.props || {};
142
+ if (arrayPath && itemBlocks) {
143
+ const array = (0, utils_1.pickValueFromObject)(arrayPath, data);
144
+ if (Array.isArray(array) && array.length > 0) {
145
+ const interpolatedItemBlocks = array.map((item) => this.interpolateBlocks(itemBlocks, item, translator, {
146
+ arrayPath: arrayPath,
147
+ })[0]);
148
+ processedBlock.props = {
149
+ ...processedBlock.props,
150
+ itemBlocks: interpolatedItemBlocks,
151
+ };
152
+ }
153
+ }
154
+ }
155
+ return processedBlock;
156
+ });
157
+ }
158
+ /**
159
+ * Render email template
160
+ *
161
+ * @param params - Render parameters
162
+ * @returns Rendered email with html, text, and subject
163
+ */
164
+ async render(params) {
165
+ if (!params.templateName) {
166
+ throw new Error("Template name is required");
167
+ }
168
+ const { template, blocks, translator } = this.prepareData({
169
+ templateName: params.templateName,
170
+ data: params.data,
171
+ options: params.options,
172
+ });
173
+ const options = {
174
+ ...params.options,
175
+ blocks,
176
+ };
177
+ return {
178
+ html: await template.getHtml(params.data, options),
179
+ text: await template.getText(params.data, options),
180
+ subject: (0, utils_1.multiInterpolate)("{{translations.headerTitle}}", params.data, translator),
181
+ };
182
+ }
183
+ /**
184
+ * Render email template synchronously (for previews)
185
+ *
186
+ * @param params - Render parameters
187
+ * @returns React node
188
+ */
189
+ renderSync(params) {
190
+ if (!params.templateName) {
191
+ throw new Error("Template name is required");
192
+ }
193
+ const { template, blocks } = this.prepareData({
194
+ templateName: params.templateName,
195
+ data: params.data,
196
+ options: params.options,
197
+ });
198
+ const options = {
199
+ ...params.options,
200
+ blocks,
201
+ };
202
+ return {
203
+ reactNode: template.getReactNode
204
+ ? template.getReactNode(params.data, options)
205
+ : undefined,
206
+ };
207
+ }
208
+ }
209
+ exports.EmailTemplateService = EmailTemplateService;
210
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtdGVtcGxhdGUtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy90ZW1wbGF0ZXMvZW1haWxzL2VtYWlsLXRlbXBsYXRlLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsbUZBRzRDO0FBQzVDLHVDQUdvQjtBQUNwQixtREFJd0I7QUFDeEIsaURBR3VCO0FBQ3ZCLHVEQUcwQjtBQUMxQiwyQ0FHdUI7QUFDdkIsaURBRzBCO0FBQzFCLDZDQUd3QjtBQUN4QixtQ0FJZ0I7QUFFaEI7OztHQUdHO0FBQ0gsTUFBYSxvQkFBcUIsU0FBUSxtREFBNEI7SUFDcEU7UUFDRSxLQUFLLEVBQUUsQ0FBQTtRQUVQLElBQUksQ0FBQyxrQkFBa0IsR0FBRztZQUN4QixPQUFPLEVBQUUsS0FBSyxFQUNaLElBQVMsRUFDVCxPQUE2QixFQUNaLEVBQUU7Z0JBQ25CLE9BQU8sTUFBTSxJQUFBLG1DQUFtQixFQUFDLElBQUksRUFBRSxPQUFjLENBQUMsQ0FBQTtZQUN4RCxDQUFDO1lBQ0QsT0FBTyxFQUFFLEtBQUssRUFDWixJQUFTLEVBQ1QsT0FBNkIsRUFDWixFQUFFO2dCQUNuQixPQUFPLE1BQU0sSUFBQSxtQ0FBbUIsRUFBQyxJQUFJLEVBQUUsT0FBYyxDQUFDLENBQUE7WUFDeEQsQ0FBQztZQUNELFlBQVksRUFBRSxDQUNaLElBQVMsRUFDVCxPQUE2QixFQUNaLEVBQUU7Z0JBQ25CLE9BQU8sSUFBQSx3Q0FBd0IsRUFBQyxJQUFJLEVBQUUsT0FBYyxDQUFDLENBQUE7WUFDdkQsQ0FBQztTQUNGLENBQUE7UUFFRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUU1RCx5QkFBeUI7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixDQUNuQix1QkFBZSxDQUFDLGFBQWEsRUFDN0IsSUFBSSxDQUFDLGtCQUFrQixDQUN4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
@@ -1,254 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TEMPLATES_NAMES = void 0;
4
- exports.interpolateBlocks = interpolateBlocks;
5
- exports.getTemplate = getTemplate;
6
- exports.renderTemplate = renderTemplate;
7
- exports.renderTemplateSync = renderTemplateSync;
8
- const index_1 = require("./base-template/index");
3
+ exports.emailService = exports.TEMPLATES_NAMES = void 0;
9
4
  const types_1 = require("./types");
10
5
  Object.defineProperty(exports, "TEMPLATES_NAMES", { enumerable: true, get: function () { return types_1.TEMPLATES_NAMES; } });
11
- const contact_form_1 = require("./contact-form");
12
- const inventory_level_1 = require("./inventory-level");
13
- const placed_1 = require("./order/placed");
14
- const completed_1 = require("./order/completed");
15
- const updated_1 = require("./order/updated");
16
- const utils_1 = require("../../utils");
6
+ const email_template_service_1 = require("./email-template-service");
17
7
  /**
18
- * Template translations registry mapping template names to their translations
8
+ * Email template service instance (singleton)
9
+ * Use this to register custom templates or access service methods
19
10
  */
20
- const templateTranslationsRegistry = {
21
- [types_1.TEMPLATES_NAMES.INVENTORY_LEVEL]: inventory_level_1.translations,
22
- };
23
- const baseTemplateConfig = {
24
- [types_1.TEMPLATES_NAMES.BASE_TEMPLATE]: {
25
- getHtml: async (data, options) => {
26
- return await (0, index_1.getBaseTemplateHtml)(data, options);
27
- },
28
- getText: async (data, options) => {
29
- return await (0, index_1.getBaseTemplateText)(data, options);
30
- },
31
- getReactNode: (data, options) => {
32
- return (0, index_1.getBaseTemplateReactNode)(data, options);
33
- },
34
- }
35
- };
36
- /**
37
- * Template registry mapping template names to their renderers
38
- */
39
- const templateRegistry = {
40
- ...baseTemplateConfig,
41
- [types_1.TEMPLATES_NAMES.CONTACT_FORM]: {
42
- ...baseTemplateConfig[types_1.TEMPLATES_NAMES.BASE_TEMPLATE],
43
- getConfig: () => {
44
- return {
45
- blocks: contact_form_1.templateBlocks,
46
- translations: contact_form_1.translations,
47
- };
48
- },
49
- },
50
- [types_1.TEMPLATES_NAMES.ORDER_PLACED]: {
51
- ...baseTemplateConfig[types_1.TEMPLATES_NAMES.BASE_TEMPLATE],
52
- getConfig: () => {
53
- return {
54
- blocks: placed_1.templateBlocks,
55
- translations: placed_1.translations,
56
- };
57
- },
58
- },
59
- [types_1.TEMPLATES_NAMES.ORDER_COMPLETED]: {
60
- ...baseTemplateConfig[types_1.TEMPLATES_NAMES.BASE_TEMPLATE],
61
- getConfig: () => {
62
- return {
63
- blocks: completed_1.templateBlocks,
64
- translations: completed_1.translations,
65
- };
66
- },
67
- },
68
- [types_1.TEMPLATES_NAMES.ORDER_UPDATED]: {
69
- ...baseTemplateConfig[types_1.TEMPLATES_NAMES.BASE_TEMPLATE],
70
- getConfig: () => {
71
- return {
72
- blocks: updated_1.templateBlocks,
73
- translations: updated_1.translations,
74
- };
75
- },
76
- },
77
- [types_1.TEMPLATES_NAMES.INVENTORY_LEVEL]: {
78
- ...baseTemplateConfig[types_1.TEMPLATES_NAMES.BASE_TEMPLATE],
79
- getConfig: () => {
80
- return {
81
- blocks: inventory_level_1.templateBlocks,
82
- translations: inventory_level_1.translations,
83
- };
84
- },
85
- }
86
- };
87
- /**
88
- * Recursively interpolate text in blocks
89
- * Processes props.[property] in each block and nested blocks
90
- */
91
- function interpolateBlocks(blocks, data, translator, config) {
92
- return blocks.map((block) => {
93
- const processedBlock = { ...block };
94
- // Process all string properties in props
95
- if (processedBlock.props && typeof processedBlock.props === "object") {
96
- const processedProps = { ...processedBlock.props };
97
- // Iterate over all properties in props
98
- for (const [key, value] of Object.entries(processedProps)) {
99
- // Skip non-string values and special properties (blocks, itemBlocks, separator, arrayPath)
100
- if ((typeof value === "string") &&
101
- key !== "blocks" &&
102
- key !== "itemBlocks" &&
103
- key !== "arrayPath") {
104
- processedProps[key] = (0, utils_1.multiInterpolate)(value, data, translator, config);
105
- }
106
- }
107
- processedBlock.props = processedProps;
108
- }
109
- // Recursively process nested blocks
110
- if (processedBlock.props?.blocks &&
111
- Array.isArray(processedBlock.props.blocks)) {
112
- processedBlock.props = {
113
- ...processedBlock.props,
114
- blocks: interpolateBlocks(processedBlock.props.blocks, data, translator),
115
- };
116
- }
117
- if (processedBlock.type === "repeater") {
118
- const { arrayPath, itemBlocks } = processedBlock.props || {};
119
- if (arrayPath && itemBlocks) {
120
- const array = (0, utils_1.pickValueFromObject)(arrayPath, data);
121
- if (Array.isArray(array) && array.length > 0) {
122
- const interpolatedItemBlocks = array.map((item) => interpolateBlocks(itemBlocks, item, translator, {
123
- arrayPath: arrayPath,
124
- })[0]);
125
- processedBlock.props = {
126
- ...processedBlock.props,
127
- itemBlocks: interpolatedItemBlocks,
128
- };
129
- }
130
- }
131
- }
132
- return processedBlock;
133
- });
134
- }
135
- /**
136
- * Get template renderer by template name
137
- *
138
- * @param templateName - Name of the template
139
- * @returns Template renderer with getHtml and getText methods
140
- * @throws Error if template name is not found
141
- */
142
- function getTemplate(templateName) {
143
- const template = templateRegistry[templateName];
144
- if (!template) {
145
- throw new Error(`Template "${templateName}" not found. Available templates: ${Object.keys(templateRegistry).join(", ")}`);
146
- }
147
- return template;
148
- }
149
- /**
150
- * Prepare template data (translations, blocks, translator, processedBlocks)
151
- * Shared logic for renderTemplate and renderTemplateSync
152
- */
153
- function prepareTemplateData(templateName, data, options) {
154
- const locale = options?.locale || "pl";
155
- const template = getTemplate(templateName);
156
- const config = template.getConfig?.() || {};
157
- // Get translations for this template
158
- const translations = config?.translations || templateTranslationsRegistry[templateName] || {};
159
- // If blocks are not provided, use basic blocks from config
160
- const providedBlocks = options?.blocks || [];
161
- let blocks = providedBlocks.length > 0 ? providedBlocks : config?.blocks || [];
162
- // Process translations once
163
- const customTranslations = options?.customTranslations?.[templateName];
164
- // Merge translations
165
- const mergedTranslations = (0, utils_1.mergeTranslations)(translations, customTranslations);
166
- // Create translator function
167
- const translator = (0, utils_1.createTranslator)(locale, mergedTranslations);
168
- // Interpolate blocks if provided
169
- const processedBlocks = blocks.length > 0 ? interpolateBlocks(blocks, data, translator) : blocks;
170
- // Pass processed blocks in options to render functions
171
- const renderOptions = {
172
- ...options,
173
- blocks: processedBlocks,
174
- };
175
- return {
176
- template,
177
- translator,
178
- processedBlocks,
179
- renderOptions,
180
- };
181
- }
182
- /**
183
- * Generate HTML and text for a template
184
- *
185
- * @param templateName - Name of the template (optional if createTemplate is provided)
186
- * @param data - Template data
187
- * @param options - Optional theme and locale configuration
188
- * @param createTemplate - Optional custom template function that takes data and options, returns React.ReactElement
189
- * @returns Object with html, text, and subject properties
190
- */
191
- async function renderTemplate(templateName, data, options, createTemplate) {
192
- // // If createTemplate is provided, use custom template
193
- // if (createTemplate) {
194
- // // Create basic i18n if not provided (for custom templates)
195
- // let i18n = options?.customTranslations?.[templateName];
196
- // if (!i18n) {
197
- // // Create a simple i18n object for custom templates
198
- // i18n = {
199
- // t: (key: string, data?: any) => {
200
- // // Try to get from customTranslations if available
201
- // if (options?.customTranslations && templateName) {
202
- // const custom = options.customTranslations[templateName];
203
- // if (custom && custom[key]) {
204
- // return typeof custom[key] === "function"
205
- // ? custom[key](data)
206
- // : custom[key];
207
- // }
208
- // }
209
- // // Fallback to key or empty string
210
- // return key;
211
- // },
212
- // };
213
- // }
214
- // // Pass processed i18n in options to render functions
215
- // const renderOptions: TemplateOptionsType = {
216
- // ...options,
217
- // i18n,
218
- // };
219
- // // Render React component to HTML
220
- // const reactNode = createTemplate(data, renderOptions);
221
- // const htmlRendered = await render(reactNode);
222
- // const html = await pretty(htmlRendered);
223
- // const text = toPlainText(htmlRendered);
224
- // // Get subject from i18n or use default
225
- // const subject = i18n.t("headerTitle", data) || "Email";
226
- // return {
227
- // html,
228
- // text,
229
- // subject,
230
- // };
231
- // }
232
- // Original behavior: use template from registry
233
- if (!templateName) {
234
- throw new Error("Either templateName or createTemplate must be provided");
235
- }
236
- const { template, translator, renderOptions } = prepareTemplateData(templateName, data, options);
237
- return {
238
- html: await template.getHtml(data, renderOptions),
239
- text: await template.getText(data, renderOptions),
240
- subject: (0, utils_1.multiInterpolate)("{{translations.headerTitle}}", data, translator),
241
- };
242
- }
243
- function renderTemplateSync(templateName, data, options) {
244
- if (!templateName) {
245
- throw new Error("Either templateName or createTemplate must be provided");
246
- }
247
- const { template, renderOptions } = prepareTemplateData(templateName, data, options);
248
- return {
249
- reactNode: template.getReactNode
250
- ? template.getReactNode(data, renderOptions)
251
- : undefined,
252
- };
253
- }
254
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdGVtcGxhdGVzL2VtYWlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUErSkEsOENBd0VDO0FBU0Qsa0NBVUM7QUFrRUQsd0NBdUVDO0FBRUQsZ0RBZ0JDO0FBblpELGlEQUkrQjtBQUUvQixtQ0FBMEM7QUFpQ2pDLGdHQWpDQSx1QkFBZSxPQWlDQTtBQS9CeEIsaURBR3dCO0FBQ3hCLHVEQUcyQjtBQUMzQiwyQ0FHd0I7QUFDeEIsaURBRzJCO0FBQzNCLDZDQUd5QjtBQUV6Qix1Q0FLcUI7QUFpQnJCOztHQUVHO0FBQ0gsTUFBTSw0QkFBNEIsR0FFOUI7SUFDRixDQUFDLHVCQUFlLENBQUMsZUFBZSxDQUFDLEVBQUUsOEJBQTBCO0NBQzlELENBQUM7QUFFRixNQUFNLGtCQUFrQixHQUEyQztJQUNqRSxDQUFDLHVCQUFlLENBQUMsYUFBYSxDQUFDLEVBQUU7UUFDL0IsT0FBTyxFQUFFLEtBQUssRUFDWixJQUFTLEVBQ1QsT0FBNkIsRUFDWixFQUFFO1lBQ25CLE9BQU8sTUFBTSxJQUFBLDJCQUFtQixFQUFDLElBQUksRUFBRSxPQUFjLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsT0FBTyxFQUFFLEtBQUssRUFDWixJQUFTLEVBQ1QsT0FBNkIsRUFDWixFQUFFO1lBQ25CLE9BQU8sTUFBTSxJQUFBLDJCQUFtQixFQUFDLElBQUksRUFBRSxPQUFjLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsWUFBWSxFQUFFLENBQ1osSUFBUyxFQUNULE9BQTZCLEVBQ1osRUFBRTtZQUNuQixPQUFPLElBQUEsZ0NBQXdCLEVBQUMsSUFBSSxFQUFFLE9BQWMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7S0FDRjtDQUNGLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sZ0JBQWdCLEdBUWxCO0lBQ0YsR0FBRyxrQkFBa0I7SUFDckIsQ0FBQyx1QkFBZSxDQUFDLFlBQVksQ0FBQyxFQUFFO1FBQzlCLEdBQUcsa0JBQWtCLENBQUMsdUJBQWUsQ0FBQyxhQUFhLENBQUM7UUFDcEQsU0FBUyxFQUFFLEdBQVEsRUFBRTtZQUNuQixPQUFPO2dCQUNMLE1BQU0sRUFBRSw2QkFBeUI7Z0JBQ2pDLFlBQVksRUFBRSwyQkFBdUI7YUFDdEMsQ0FBQztRQUNKLENBQUM7S0FDRjtJQUNELENBQUMsdUJBQWUsQ0FBQyxZQUFZLENBQUMsRUFBRTtRQUM5QixHQUFHLGtCQUFrQixDQUFDLHVCQUFlLENBQUMsYUFBYSxDQUFDO1FBQ3BELFNBQVMsRUFBRSxHQUFRLEVBQUU7WUFDbkIsT0FBTztnQkFDTCxNQUFNLEVBQUUsdUJBQXlCO2dCQUNqQyxZQUFZLEVBQUUscUJBQXVCO2FBQ3RDLENBQUM7UUFDSixDQUFDO0tBQ0Y7SUFDRCxDQUFDLHVCQUFlLENBQUMsZUFBZSxDQUFDLEVBQUU7UUFDakMsR0FBRyxrQkFBa0IsQ0FBQyx1QkFBZSxDQUFDLGFBQWEsQ0FBQztRQUNwRCxTQUFTLEVBQUUsR0FBUSxFQUFFO1lBQ25CLE9BQU87Z0JBQ0wsTUFBTSxFQUFFLDBCQUE0QjtnQkFDcEMsWUFBWSxFQUFFLHdCQUEwQjthQUN6QyxDQUFDO1FBQ0osQ0FBQztLQUNGO0lBQ0QsQ0FBQyx1QkFBZSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1FBQy9CLEdBQUcsa0JBQWtCLENBQUMsdUJBQWUsQ0FBQyxhQUFhLENBQUM7UUFDcEQsU0FBUyxFQUFFLEdBQVEsRUFBRTtZQUNuQixPQUFPO2dCQUNMLE1BQU0sRUFBRSx3QkFBMEI7Z0JBQ2xDLFlBQVksRUFBRSxzQkFBd0I7YUFDdkMsQ0FBQztRQUNKLENBQUM7S0FDRjtJQUNELENBQUMsdUJBQWUsQ0FBQyxlQUFlLENBQUMsRUFBRTtRQUNqQyxHQUFHLGtCQUFrQixDQUFDLHVCQUFlLENBQUMsYUFBYSxDQUFDO1FBQ3BELFNBQVMsRUFBRSxHQUFRLEVBQUU7WUFDbkIsT0FBTztnQkFDTCxNQUFNLEVBQUUsZ0NBQTRCO2dCQUNwQyxZQUFZLEVBQUUsOEJBQTBCO2FBQ3pDLENBQUM7UUFDSixDQUFDO0tBQ0Y7Q0FDRixDQUFDO0FBWUY7OztHQUdHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQy9CLE1BQWEsRUFDYixJQUFTLEVBQ1QsVUFBZSxFQUNmLE1BQVk7SUFFWixPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUMxQixNQUFNLGNBQWMsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7UUFFcEMseUNBQXlDO1FBQ3pDLElBQUksY0FBYyxDQUFDLEtBQUssSUFBSSxPQUFPLGNBQWMsQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDckUsTUFBTSxjQUFjLEdBQVEsRUFBRSxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUV4RCx1Q0FBdUM7WUFDdkMsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztnQkFDMUQsMkZBQTJGO2dCQUMzRixJQUNFLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDO29CQUMzQixHQUFHLEtBQUssUUFBUTtvQkFDaEIsR0FBRyxLQUFLLFlBQVk7b0JBQ3BCLEdBQUcsS0FBSyxXQUFXLEVBQ25CLENBQUM7b0JBQ0QsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUEsd0JBQWdCLEVBQ3BDLEtBQUssRUFDTCxJQUFJLEVBQ0osVUFBVSxFQUNWLE1BQU0sQ0FDUCxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBRUQsY0FBYyxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUM7UUFDeEMsQ0FBQztRQUVELG9DQUFvQztRQUNwQyxJQUNFLGNBQWMsQ0FBQyxLQUFLLEVBQUUsTUFBTTtZQUM1QixLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQzFDLENBQUM7WUFDRCxjQUFjLENBQUMsS0FBSyxHQUFHO2dCQUNyQixHQUFHLGNBQWMsQ0FBQyxLQUFLO2dCQUN2QixNQUFNLEVBQUUsaUJBQWlCLENBQ3ZCLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUMzQixJQUFJLEVBQ0osVUFBVSxDQUNYO2FBQ0YsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLGNBQWMsQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDdkMsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsR0FBRyxjQUFjLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUU3RCxJQUFJLFNBQVMsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxLQUFLLEdBQUcsSUFBQSwyQkFBbUIsRUFBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBRW5ELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUM3QyxNQUFNLHNCQUFzQixHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUNyRCxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTt3QkFDOUMsU0FBUyxFQUFFLFNBQVM7cUJBQ3JCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDTixDQUFDO29CQUVGLGNBQWMsQ0FBQyxLQUFLLEdBQUc7d0JBQ3JCLEdBQUcsY0FBYyxDQUFDLEtBQUs7d0JBQ3ZCLFVBQVUsRUFBRSxzQkFBc0I7cUJBQ25DLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsV0FBVyxDQUFDLFlBQWlCO0lBQzNDLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRWhELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE1BQU0sSUFBSSxLQUFLLENBQ2IsYUFBYSxZQUFZLHFDQUFxQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ3pHLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsbUJBQW1CLENBQzFCLFlBQTBCLEVBQzFCLElBQWtCLEVBQ2xCLE9BQW1DO0lBT25DLE1BQU0sTUFBTSxHQUFHLE9BQU8sRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDO0lBQ3ZDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMzQyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFFNUMscUNBQXFDO0lBQ3JDLE1BQU0sWUFBWSxHQUFHLE1BQU0sRUFBRSxZQUFZLElBQUksNEJBQTRCLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0lBRTlGLDJEQUEyRDtJQUMzRCxNQUFNLGNBQWMsR0FBRyxPQUFPLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUM3QyxJQUFJLE1BQU0sR0FBRyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUUvRSw0QkFBNEI7SUFDNUIsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUV2RSxxQkFBcUI7SUFDckIsTUFBTSxrQkFBa0IsR0FBRyxJQUFBLHlCQUFpQixFQUMxQyxZQUFZLEVBQ1osa0JBQWtCLENBQ25CLENBQUM7SUFFRiw2QkFBNkI7SUFDN0IsTUFBTSxVQUFVLEdBQUcsSUFBQSx3QkFBZ0IsRUFBQyxNQUFNLEVBQUUsa0JBQXlCLENBQUMsQ0FBQztJQUV2RSxpQ0FBaUM7SUFDakMsTUFBTSxlQUFlLEdBQ25CLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFFM0UsdURBQXVEO0lBQ3ZELE1BQU0sYUFBYSxHQUF3QjtRQUN6QyxHQUFHLE9BQU87UUFDVixNQUFNLEVBQUUsZUFBZTtLQUN4QixDQUFDO0lBRUYsT0FBTztRQUNMLFFBQVE7UUFDUixVQUFVO1FBQ1YsZUFBZTtRQUNmLGFBQWE7S0FDZCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0ksS0FBSyxVQUFVLGNBQWMsQ0FDbEMsWUFBaUMsRUFDakMsSUFBa0IsRUFDbEIsT0FBbUMsRUFDbkMsY0FHNEI7SUFPNUIsd0RBQXdEO0lBQ3hELHdCQUF3QjtJQUN4QixnRUFBZ0U7SUFDaEUsNERBQTREO0lBQzVELGlCQUFpQjtJQUNqQiwwREFBMEQ7SUFDMUQsZUFBZTtJQUNmLDBDQUEwQztJQUMxQyw2REFBNkQ7SUFDN0QsNkRBQTZEO0lBQzdELHFFQUFxRTtJQUNyRSx5Q0FBeUM7SUFDekMsdURBQXVEO0lBQ3ZELG9DQUFvQztJQUNwQywrQkFBK0I7SUFDL0IsY0FBYztJQUNkLFlBQVk7SUFDWiw2Q0FBNkM7SUFDN0Msc0JBQXNCO0lBQ3RCLFdBQVc7SUFDWCxTQUFTO0lBQ1QsTUFBTTtJQUVOLDBEQUEwRDtJQUMxRCxpREFBaUQ7SUFDakQsa0JBQWtCO0lBQ2xCLFlBQVk7SUFDWixPQUFPO0lBRVAsc0NBQXNDO0lBQ3RDLDJEQUEyRDtJQUMzRCxrREFBa0Q7SUFDbEQsNkNBQTZDO0lBQzdDLDRDQUE0QztJQUU1Qyw0Q0FBNEM7SUFDNUMsNERBQTREO0lBRTVELGFBQWE7SUFDYixZQUFZO0lBQ1osWUFBWTtJQUNaLGVBQWU7SUFDZixPQUFPO0lBQ1AsSUFBSTtJQUVKLGdEQUFnRDtJQUNoRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRWpHLE9BQU87UUFDTCxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxhQUFhLENBQUM7UUFDakQsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDO1FBQ2pELE9BQU8sRUFBRSxJQUFBLHdCQUFnQixFQUFDLDhCQUE4QixFQUFFLElBQUksRUFBRSxVQUFVLENBQUM7S0FDNUUsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQixrQkFBa0IsQ0FDaEMsWUFBaUMsRUFDakMsSUFBa0IsRUFDbEIsT0FBbUM7SUFFbkMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0RBQXdELENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXJGLE9BQU87UUFDTCxTQUFTLEVBQUUsUUFBUSxDQUFDLFlBQVk7WUFDOUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQztZQUM1QyxDQUFDLENBQUMsU0FBUztLQUNkLENBQUM7QUFDSixDQUFDIn0=
11
+ exports.emailService = new email_template_service_1.EmailTemplateService();
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdGVtcGxhdGVzL2VtYWlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxtQ0FBMEk7QUFPakksZ0dBUGdELHVCQUFlLE9BT2hEO0FBTnhCLHFFQUFnRTtBQWlCaEU7OztHQUdHO0FBQ1UsUUFBQSxZQUFZLEdBQUcsSUFBSSw2Q0FBb0IsRUFBRSxDQUFDIn0=
@@ -12,6 +12,10 @@ exports.translations = {
12
12
  pl: pl_json_1.default,
13
13
  en: en_json_1.default,
14
14
  };
15
+ /**
16
+ * Inventory level template blocks
17
+ *
18
+ */
15
19
  exports.templateBlocks = [
16
20
  {
17
21
  type: "section",
@@ -123,4 +127,4 @@ exports.templateBlocks = [
123
127
  },
124
128
  },
125
129
  ];
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3RlbXBsYXRlcy9lbWFpbHMvaW52ZW50b3J5LWxldmVsL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxxRUFBd0M7QUFHL0IsYUFIRixpQkFBRSxDQUdFO0FBRlgscUVBQXdDO0FBRTNCLGFBRk4saUJBQUUsQ0FFTTtBQUVGLFFBQUEsWUFBWSxHQUFxQjtJQUM1QyxFQUFFLEVBQUUsaUJBQUU7SUFDTixFQUFFLEVBQUUsaUJBQUU7Q0FDUCxDQUFDO0FBRVcsUUFBQSxjQUFjLEdBQUc7SUFDNUI7UUFDRSxJQUFJLEVBQUUsU0FBUztRQUNmLEVBQUUsRUFBRSxXQUFXO1FBQ2YsS0FBSyxFQUFFO1lBQ0wsTUFBTSxFQUFFO2dCQUNOO29CQUNFLEVBQUUsRUFBRSxXQUFXO29CQUNmLElBQUksRUFBRSxTQUFTO29CQUNmLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsOEJBQThCO3FCQUN0QztpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsUUFBUTtvQkFDWixJQUFJLEVBQUUsTUFBTTtvQkFDWixLQUFLLEVBQUU7d0JBQ0wsS0FBSyxFQUFFLG9DQUFvQztxQkFDNUM7aUJBQ0Y7YUFDRjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLEVBQUUsRUFBRSxhQUFhO1FBQ2pCLElBQUksRUFBRSxXQUFXO0tBQ2xCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsU0FBUztRQUNmLEVBQUUsRUFBRSxXQUFXO1FBQ2YsS0FBSyxFQUFFO1lBQ0wsTUFBTSxFQUFFO2dCQUNOO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsMENBQTBDO3dCQUNqRCxLQUFLLEVBQUUsNkJBQTZCO3FCQUNyQztpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsYUFBYTtvQkFDakIsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsZ0RBQWdEO3dCQUN2RCxLQUFLLEVBQUUsc0NBQXNDO3FCQUM5QztpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsYUFBYTtvQkFDakIsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsdURBQXVEO3dCQUM5RCxLQUFLLEVBQUUsMkNBQTJDO3FCQUNuRDtpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsYUFBYTtvQkFDakIsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsd0RBQXdEO3dCQUMvRCxLQUFLLEVBQUUsNENBQTRDO3FCQUNwRDtpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsYUFBYTtvQkFDakIsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUseURBQXlEO3dCQUNoRSxLQUFLLEVBQUUsNkNBQTZDO3FCQUNyRDtpQkFDRjthQUNGO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsRUFBRSxFQUFFLGFBQWE7UUFDakIsSUFBSSxFQUFFLFdBQVc7S0FDbEI7SUFDRDtRQUNFLElBQUksRUFBRSxTQUFTO1FBQ2YsRUFBRSxFQUFFLFdBQVc7UUFDZixLQUFLLEVBQUU7WUFDTCxNQUFNLEVBQUU7Z0JBQ047b0JBQ0UsRUFBRSxFQUFFLFFBQVE7b0JBQ1osSUFBSSxFQUFFLE1BQU07b0JBQ1osS0FBSyxFQUFFO3dCQUNMLEtBQUssRUFBRSx5QkFBeUI7cUJBQ2pDO2lCQUNGO2FBQ0Y7U0FDRjtLQUNGO0NBQ0YsQ0FBQyJ9
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3RlbXBsYXRlcy9lbWFpbHMvaW52ZW50b3J5LWxldmVsL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxxRUFBd0M7QUFHL0IsYUFIRixpQkFBRSxDQUdFO0FBRlgscUVBQXdDO0FBRTNCLGFBRk4saUJBQUUsQ0FFTTtBQUVGLFFBQUEsWUFBWSxHQUFxQjtJQUM1QyxFQUFFLEVBQUUsaUJBQUU7SUFDTixFQUFFLEVBQUUsaUJBQUU7Q0FDUCxDQUFDO0FBRUY7OztHQUdHO0FBQ1UsUUFBQSxjQUFjLEdBQUc7SUFDNUI7UUFDRSxJQUFJLEVBQUUsU0FBUztRQUNmLEVBQUUsRUFBRSxXQUFXO1FBQ2YsS0FBSyxFQUFFO1lBQ0wsTUFBTSxFQUFFO2dCQUNOO29CQUNFLEVBQUUsRUFBRSxXQUFXO29CQUNmLElBQUksRUFBRSxTQUFTO29CQUNmLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsOEJBQThCO3FCQUN0QztpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsUUFBUTtvQkFDWixJQUFJLEVBQUUsTUFBTTtvQkFDWixLQUFLLEVBQUU7d0JBQ0wsS0FBSyxFQUFFLG9DQUFvQztxQkFDNUM7aUJBQ0Y7YUFDRjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLEVBQUUsRUFBRSxhQUFhO1FBQ2pCLElBQUksRUFBRSxXQUFXO0tBQ2xCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsU0FBUztRQUNmLEVBQUUsRUFBRSxXQUFXO1FBQ2YsS0FBSyxFQUFFO1lBQ0wsTUFBTSxFQUFFO2dCQUNOO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsMENBQTBDO3dCQUNqRCxLQUFLLEVBQUUsNkJBQTZCO3FCQUNyQztpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsYUFBYTtvQkFDakIsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsZ0RBQWdEO3dCQUN2RCxLQUFLLEVBQUUsc0NBQXNDO3FCQUM5QztpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsYUFBYTtvQkFDakIsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsdURBQXVEO3dCQUM5RCxLQUFLLEVBQUUsMkNBQTJDO3FCQUNuRDtpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsYUFBYTtvQkFDakIsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsd0RBQXdEO3dCQUMvRCxLQUFLLEVBQUUsNENBQTRDO3FCQUNwRDtpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsYUFBYTtvQkFDakIsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUseURBQXlEO3dCQUNoRSxLQUFLLEVBQUUsNkNBQTZDO3FCQUNyRDtpQkFDRjthQUNGO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsRUFBRSxFQUFFLGFBQWE7UUFDakIsSUFBSSxFQUFFLFdBQVc7S0FDbEI7SUFDRDtRQUNFLElBQUksRUFBRSxTQUFTO1FBQ2YsRUFBRSxFQUFFLFdBQVc7UUFDZixLQUFLLEVBQUU7WUFDTCxNQUFNLEVBQUU7Z0JBQ047b0JBQ0UsRUFBRSxFQUFFLFFBQVE7b0JBQ1osSUFBSSxFQUFFLE1BQU07b0JBQ1osS0FBSyxFQUFFO3dCQUNMLEtBQUssRUFBRSx5QkFBeUI7cUJBQ2pDO2lCQUNGO2FBQ0Y7U0FDRjtLQUNGO0NBQ0YsQ0FBQyJ9