@hartl-services/medusa-base 0.4.0 → 1.1.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 (258) hide show
  1. package/.medusa/server/src/admin/index.js +1657 -111
  2. package/.medusa/server/src/admin/index.mjs +1647 -101
  3. package/.medusa/server/src/api/admin/email/messages/[id]/resends/route.js +24 -0
  4. package/.medusa/server/src/api/admin/email/messages/[id]/route.js +12 -0
  5. package/.medusa/server/src/api/admin/email/messages/route.js +12 -0
  6. package/.medusa/server/src/api/admin/email/terms-versions/[id]/download/route.js +16 -0
  7. package/.medusa/server/src/api/admin/email/terms-versions/route.js +47 -0
  8. package/.medusa/server/src/api/admin/orders/[id]/documents/[document_id]/download/route.js +21 -0
  9. package/.medusa/server/src/api/admin/orders/[id]/documents/[document_id]/regenerate/route.js +38 -0
  10. package/.medusa/server/src/api/admin/orders/[id]/documents/regenerate/route.js +32 -0
  11. package/.medusa/server/src/api/admin/orders/[id]/documents/route.js +36 -0
  12. package/.medusa/server/src/api/admin/orders/[id]/packing-lists/[fulfillment_id]/download/route.js +24 -0
  13. package/.medusa/server/src/api/admin/orders/[id]/packing-lists/[fulfillment_id]/retry/route.js +44 -0
  14. package/.medusa/server/src/api/admin/orders/[id]/packing-lists/route.js +82 -0
  15. package/.medusa/server/src/api/document-download-response.js +16 -0
  16. package/.medusa/server/src/api/document-response.js +23 -0
  17. package/.medusa/server/src/api/files/[asset]/route.js +24 -0
  18. package/.medusa/server/src/api/files/file-response.js +43 -0
  19. package/.medusa/server/src/api/files/gateway-options.js +31 -0
  20. package/.medusa/server/src/api/files/private/[token]/route.js +29 -0
  21. package/.medusa/server/src/api/files/upload/[token]/route.js +66 -0
  22. package/.medusa/server/src/api/middlewares.js +168 -1
  23. package/.medusa/server/src/api/packing-list-response.js +22 -0
  24. package/.medusa/server/src/api/route.js +27 -0
  25. package/.medusa/server/src/api/store/documents/[id]/download/route.js +21 -0
  26. package/.medusa/server/src/api/store/documents/[id]/route.js +15 -0
  27. package/.medusa/server/src/api/store/documents/route.js +11 -0
  28. package/.medusa/server/src/api/terms-download-response.js +12 -0
  29. package/.medusa/server/src/documents/config/index.js +18 -0
  30. package/.medusa/server/src/documents/paths/documents.js +6 -0
  31. package/.medusa/server/src/documents/paths/index.js +18 -0
  32. package/.medusa/server/src/documents/plugin-features.js +38 -0
  33. package/.medusa/server/src/documents/schemas/documents.js +18 -0
  34. package/.medusa/server/src/documents/schemas/index.js +18 -0
  35. package/.medusa/server/src/documents/scripts/verify-documents-file-storage.js +55 -0
  36. package/.medusa/server/src/documents/templates/financial-document.js +160 -0
  37. package/.medusa/server/src/documents/templates/format.js +73 -0
  38. package/.medusa/server/src/documents/templates/html-factory.js +42 -0
  39. package/.medusa/server/src/documents/templates/html-utils.js +23 -0
  40. package/.medusa/server/src/documents/templates/layout.js +142 -0
  41. package/.medusa/server/src/documents/templates/packing-list.js +52 -0
  42. package/.medusa/server/src/documents/types/admin-api.js +3 -0
  43. package/.medusa/server/src/documents/types/document-summary.js +3 -0
  44. package/.medusa/server/src/documents/types/documents.js +3 -0
  45. package/.medusa/server/src/documents/types/html-factory.js +6 -0
  46. package/.medusa/server/src/documents/types/index.js +22 -0
  47. package/.medusa/server/src/documents/types/store-api.js +3 -0
  48. package/.medusa/server/src/documents/utils/document-merchant.js +22 -0
  49. package/.medusa/server/src/documents/utils/document-render-settings.js +59 -0
  50. package/.medusa/server/src/documents/utils/html-to-pdf.js +61 -0
  51. package/.medusa/server/src/documents/utils/private-file-storage.js +64 -0
  52. package/.medusa/server/src/documents/utils/resolve-services.js +7 -0
  53. package/.medusa/server/src/email/application/handle-invite-event.js +318 -0
  54. package/.medusa/server/src/email/application/handle-password-reset-event.js +366 -0
  55. package/.medusa/server/src/email/config/index.js +84 -0
  56. package/.medusa/server/src/email/config/notification-module.js +20 -0
  57. package/.medusa/server/src/email/domain/business-keys.js +50 -0
  58. package/.medusa/server/src/email/domain/documents-fact-fingerprint.js +7 -0
  59. package/.medusa/server/src/email/domain/event-schemas.js +36 -0
  60. package/.medusa/server/src/email/domain/failure-classification.js +53 -0
  61. package/.medusa/server/src/email/domain/order-summary.js +103 -0
  62. package/.medusa/server/src/email/domain/refund-summary.js +43 -0
  63. package/.medusa/server/src/email/domain/return-summary.js +118 -0
  64. package/.medusa/server/src/email/domain/shipment-summary.js +74 -0
  65. package/.medusa/server/src/email/plugin-features.js +39 -0
  66. package/.medusa/server/src/email/rendering/default-templates.js +719 -0
  67. package/.medusa/server/src/email/rendering/load-email-shop-details.js +36 -0
  68. package/.medusa/server/src/email/rendering/render-email.js +50 -0
  69. package/.medusa/server/src/email/rendering/resolve-shop-configuration.js +67 -0
  70. package/.medusa/server/src/email/types/email-kinds.js +18 -0
  71. package/.medusa/server/src/email/types/index.js +21 -0
  72. package/.medusa/server/src/email/types/shop-configuration.js +3 -0
  73. package/.medusa/server/src/email/types/smtp-configuration.js +3 -0
  74. package/.medusa/server/src/email/types/template-data.js +232 -0
  75. package/.medusa/server/src/files/config/index.js +256 -0
  76. package/.medusa/server/src/files/gateway/index.js +115 -0
  77. package/.medusa/server/src/files/types/index.js +6 -0
  78. package/.medusa/server/src/files/types/public.js +6 -0
  79. package/.medusa/server/src/jobs/document-fact-publication-reconciliation.js +18 -0
  80. package/.medusa/server/src/jobs/document-resolution-reconciliation.js +20 -0
  81. package/.medusa/server/src/jobs/packing-list-reconciliation.js +49 -0
  82. package/.medusa/server/src/jobs/reconcile-email-attempts.js +63 -0
  83. package/.medusa/server/src/jobs/reconcile-pending-email-messages.js +41 -0
  84. package/.medusa/server/src/jobs/retry-email-messages.js +27 -0
  85. package/.medusa/server/src/migration-scripts/dismiss-orphaned-cart-promotion-links.js +26 -0
  86. package/.medusa/server/src/modules/documents/domain/cancellation-snapshot.js +97 -0
  87. package/.medusa/server/src/modules/documents/domain/document-number.js +36 -0
  88. package/.medusa/server/src/modules/documents/domain/document-resolution.js +24 -0
  89. package/.medusa/server/src/modules/documents/domain/issuance-rules.js +37 -0
  90. package/.medusa/server/src/modules/documents/domain/merchant.js +86 -0
  91. package/.medusa/server/src/modules/documents/domain/options.js +40 -0
  92. package/.medusa/server/src/modules/documents/domain/packing-list.js +90 -0
  93. package/.medusa/server/src/modules/documents/domain/snapshot-normalization.js +17 -0
  94. package/.medusa/server/src/modules/documents/domain/tax-breakdown.js +66 -0
  95. package/.medusa/server/src/modules/documents/index.js +15 -0
  96. package/.medusa/server/src/modules/documents/loaders/assert-private-file-storage.js +20 -0
  97. package/.medusa/server/src/modules/documents/migrations/Migration20260827061749.js +75 -0
  98. package/.medusa/server/src/modules/documents/migrations/Migration20260830111207.js +28 -0
  99. package/.medusa/server/src/modules/documents/models/document-artifact.js +25 -0
  100. package/.medusa/server/src/modules/documents/models/document-number-sequence.js +29 -0
  101. package/.medusa/server/src/modules/documents/models/document.js +82 -0
  102. package/.medusa/server/src/modules/documents/models/order-cancellation-resolution.js +51 -0
  103. package/.medusa/server/src/modules/documents/models/packing-list-revision.js +36 -0
  104. package/.medusa/server/src/modules/documents/models/packing-list.js +27 -0
  105. package/.medusa/server/src/modules/documents/models/refund-document-resolution.js +66 -0
  106. package/.medusa/server/src/modules/documents/models/shipment-invoice-assignment.js +51 -0
  107. package/.medusa/server/src/modules/documents/models/shipment-invoice-coordinator.js +44 -0
  108. package/.medusa/server/src/modules/documents/service.js +1701 -0
  109. package/.medusa/server/src/modules/email/domain/attachment.js +25 -0
  110. package/.medusa/server/src/modules/email/domain/message-state.js +69 -0
  111. package/.medusa/server/src/modules/email/index.js +13 -0
  112. package/.medusa/server/src/modules/email/migrations/Migration20260826173422.js +32 -0
  113. package/.medusa/server/src/modules/email/migrations/Migration20260827172945.js +16 -0
  114. package/.medusa/server/src/modules/email/migrations/Migration20260827194804.js +22 -0
  115. package/.medusa/server/src/modules/email/migrations/Migration20260906195205.js +16 -0
  116. package/.medusa/server/src/modules/email/models/email-attempt.js +56 -0
  117. package/.medusa/server/src/modules/email/models/email-message.js +71 -0
  118. package/.medusa/server/src/modules/email/models/email-terms-version.js +37 -0
  119. package/.medusa/server/src/modules/email/service.js +1285 -0
  120. package/.medusa/server/src/modules/plugin-features/domain/plugin-settings.js +4 -3
  121. package/.medusa/server/src/providers/s3-cache/cache/atomic-write.js +25 -0
  122. package/.medusa/server/src/providers/s3-cache/cache/cache-manager.js +115 -0
  123. package/.medusa/server/src/providers/s3-cache/cache/keyed-lock.js +28 -0
  124. package/.medusa/server/src/providers/s3-cache/index.js +8 -0
  125. package/.medusa/server/src/providers/s3-cache/object-key.js +53 -0
  126. package/.medusa/server/src/providers/s3-cache/s3-cache-file.js +229 -0
  127. package/.medusa/server/src/providers/s3-cache/s3-object-store.js +86 -0
  128. package/.medusa/server/src/providers/smtp/index.js +8 -0
  129. package/.medusa/server/src/providers/smtp/service.js +236 -0
  130. package/.medusa/server/src/providers/smtp/types.js +11 -0
  131. package/.medusa/server/src/public/config.js +186 -0
  132. package/.medusa/server/src/public/descriptor.js +3 -1
  133. package/.medusa/server/src/public/gateway.js +19 -0
  134. package/.medusa/server/src/public/instrumentation.js +56 -0
  135. package/.medusa/server/src/public/shop-config.js +12 -0
  136. package/.medusa/server/src/public/shop-master-data.js +2 -2
  137. package/.medusa/server/src/public/shop-types.js +24 -0
  138. package/.medusa/server/src/shop-config/build-food-shop-config.js +252 -0
  139. package/.medusa/server/src/shop-config/options.js +75 -0
  140. package/.medusa/server/src/subscribers/affiliate-consignment-reminder-due.js +26 -0
  141. package/.medusa/server/src/subscribers/documents-order-canceled.js +24 -0
  142. package/.medusa/server/src/subscribers/documents-order-cancellation-ready.js +26 -0
  143. package/.medusa/server/src/subscribers/documents-refund-ready.js +24 -0
  144. package/.medusa/server/src/subscribers/documents-shipment-created.js +36 -0
  145. package/.medusa/server/src/subscribers/documents-shipment-invoice-assignment-decided.js +26 -0
  146. package/.medusa/server/src/subscribers/email-order-canceled.js +28 -0
  147. package/.medusa/server/src/subscribers/email-shipment-created.js +32 -0
  148. package/.medusa/server/src/subscribers/order-placed.js +27 -0
  149. package/.medusa/server/src/subscribers/packing-list-allocation-revised.js +32 -0
  150. package/.medusa/server/src/subscribers/packing-list-fulfillment-canceled.js +54 -0
  151. package/.medusa/server/src/subscribers/packing-list-fulfillment-created.js +31 -0
  152. package/.medusa/server/src/subscribers/password-reset.js +23 -0
  153. package/.medusa/server/src/subscribers/payment-refunded.js +38 -0
  154. package/.medusa/server/src/subscribers/return-received.js +27 -0
  155. package/.medusa/server/src/subscribers/return-requested.js +27 -0
  156. package/.medusa/server/src/subscribers/user-invite.js +23 -0
  157. package/.medusa/server/src/utils/cart-promotion-links.js +101 -0
  158. package/.medusa/server/src/workflows/documents/issue-cancellation-after-refund.js +246 -0
  159. package/.medusa/server/src/workflows/documents/issue-document.js +165 -0
  160. package/.medusa/server/src/workflows/documents/issue-invoice-after-shipment.js +521 -0
  161. package/.medusa/server/src/workflows/documents/issue-packing-list.js +390 -0
  162. package/.medusa/server/src/workflows/documents/publish-document-facts.js +53 -0
  163. package/.medusa/server/src/workflows/documents/reconcile-document-resolutions.js +48 -0
  164. package/.medusa/server/src/workflows/documents/reconcile-order-cancellation.js +92 -0
  165. package/.medusa/server/src/workflows/documents/regenerate-issued-document.js +61 -0
  166. package/.medusa/server/src/workflows/email/dispatch-email-message.js +301 -0
  167. package/.medusa/server/src/workflows/email/documents-required-facts.js +30 -0
  168. package/.medusa/server/src/workflows/email/prepare-affiliate-reminder-email.js +58 -0
  169. package/.medusa/server/src/workflows/email/prepare-order-canceled-email.js +102 -0
  170. package/.medusa/server/src/workflows/email/prepare-order-received-email.js +82 -0
  171. package/.medusa/server/src/workflows/email/prepare-refund-email.js +71 -0
  172. package/.medusa/server/src/workflows/email/prepare-return-email.js +136 -0
  173. package/.medusa/server/src/workflows/email/prepare-shipment-email.js +115 -0
  174. package/.medusa/server/src/workflows/email/retry-email-messages.js +31 -0
  175. package/.medusa/server/src/workflows/hooks/dismiss-deleted-promotion-cart-links.js +23 -0
  176. package/README.md +1777 -8
  177. package/dist/admin-components/features/plugin-features/components/ImageSettingInput.d.ts +15 -0
  178. package/dist/admin-components/features/plugin-features/components/ImageSettingInput.js +42 -0
  179. package/dist/admin-components/features/plugin-features/components/PluginSettingsForm.js +4 -2
  180. package/dist/admin-components/features/plugin-features/hooks/usePluginFeatureEnabled.d.ts +1 -1
  181. package/dist/admin-components/features/plugin-features/hooks/usePluginFeatures.d.ts +4 -4
  182. package/dist/admin-components/features/plugin-features/hooks/usePluginSettingsForm.d.ts +1 -1
  183. package/dist/admin-components/features/plugin-features/lib/image-upload.d.ts +6 -0
  184. package/dist/admin-components/features/plugin-features/lib/image-upload.js +17 -0
  185. package/dist/admin-components/features/plugin-features/lib/plugin-features-admin-client.d.ts +4 -4
  186. package/dist/admin-components/i18n/texts.d.ts +6 -0
  187. package/dist/admin-components/i18n/texts.js +6 -0
  188. package/dist/documents/config/index.d.ts +11 -0
  189. package/dist/documents/config/index.js +17 -0
  190. package/dist/documents/templates/financial-document.d.ts +3 -0
  191. package/dist/documents/templates/financial-document.js +159 -0
  192. package/dist/documents/templates/format.d.ts +30 -0
  193. package/dist/documents/templates/format.js +72 -0
  194. package/dist/documents/templates/html-factory.d.ts +15 -0
  195. package/dist/documents/templates/html-factory.js +41 -0
  196. package/dist/documents/templates/html-utils.d.ts +8 -0
  197. package/dist/documents/templates/html-utils.js +22 -0
  198. package/dist/documents/templates/layout.d.ts +35 -0
  199. package/dist/documents/templates/layout.js +141 -0
  200. package/dist/documents/templates/packing-list.d.ts +3 -0
  201. package/dist/documents/templates/packing-list.js +51 -0
  202. package/dist/documents/types/admin-api.d.ts +1 -0
  203. package/dist/documents/types/admin-api.js +2 -0
  204. package/dist/documents/types/document-summary.d.ts +1 -0
  205. package/dist/documents/types/document-summary.js +2 -0
  206. package/dist/documents/types/documents.d.ts +191 -0
  207. package/dist/documents/types/documents.js +2 -0
  208. package/dist/documents/types/html-factory.d.ts +8 -0
  209. package/dist/documents/types/html-factory.js +5 -0
  210. package/dist/documents/types/index.d.ts +5 -0
  211. package/dist/documents/types/index.js +21 -0
  212. package/dist/documents/types/store-api.d.ts +1 -0
  213. package/dist/documents/types/store-api.js +2 -0
  214. package/dist/email/config/index.d.ts +17 -0
  215. package/dist/email/config/index.js +83 -0
  216. package/dist/email/config/notification-module.d.ts +22 -0
  217. package/dist/email/config/notification-module.js +19 -0
  218. package/dist/email/types/email-kinds.d.ts +15 -0
  219. package/dist/email/types/email-kinds.js +17 -0
  220. package/dist/email/types/index.d.ts +4 -0
  221. package/dist/email/types/index.js +20 -0
  222. package/dist/email/types/shop-configuration.d.ts +68 -0
  223. package/dist/email/types/shop-configuration.js +2 -0
  224. package/dist/email/types/smtp-configuration.d.ts +9 -0
  225. package/dist/email/types/smtp-configuration.js +2 -0
  226. package/dist/email/types/template-data.d.ts +609 -0
  227. package/dist/email/types/template-data.js +231 -0
  228. package/dist/files/config/index.d.ts +32 -0
  229. package/dist/files/config/index.js +255 -0
  230. package/dist/files/gateway/index.d.ts +30 -0
  231. package/dist/files/gateway/index.js +114 -0
  232. package/dist/files/types/index.d.ts +2 -0
  233. package/dist/files/types/index.js +5 -0
  234. package/dist/files/types/public.d.ts +90 -0
  235. package/dist/files/types/public.js +5 -0
  236. package/dist/modules/documents/domain/merchant.d.ts +22 -0
  237. package/dist/modules/documents/domain/merchant.js +85 -0
  238. package/dist/modules/documents/domain/options.d.ts +34 -0
  239. package/dist/modules/documents/domain/options.js +39 -0
  240. package/dist/public/config.d.ts +59 -0
  241. package/dist/public/config.js +185 -0
  242. package/dist/public/descriptor.js +2 -0
  243. package/dist/public/gateway.d.ts +2 -0
  244. package/dist/public/gateway.js +18 -0
  245. package/dist/public/instrumentation.d.ts +12 -0
  246. package/dist/public/instrumentation.js +55 -0
  247. package/dist/public/shop-config.d.ts +8 -0
  248. package/dist/public/shop-config.js +11 -0
  249. package/dist/public/shop-master-data.d.ts +1 -1
  250. package/dist/public/shop-master-data.js +1 -1
  251. package/dist/public/shop-types.d.ts +7 -0
  252. package/dist/public/shop-types.js +23 -0
  253. package/dist/public/types.d.ts +19 -2
  254. package/dist/shop-config/build-food-shop-config.d.ts +44 -0
  255. package/dist/shop-config/build-food-shop-config.js +251 -0
  256. package/dist/shop-config/options.d.ts +48 -0
  257. package/dist/shop-config/options.js +74 -0
  258. package/package.json +48 -5
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadEmailShopDetails = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const public_1 = require("../../public");
6
+ const plugin_features_1 = require("../plugin-features");
7
+ const warn = (container, message) => {
8
+ try {
9
+ container.resolve(utils_1.ContainerRegistrationKeys.LOGGER).warn(message);
10
+ }
11
+ catch {
12
+ // No logger registered (e.g. unit tests); nothing else to do.
13
+ }
14
+ };
15
+ /**
16
+ * The shop master data and the E-Mail logo for the layout of one mail.
17
+ * Branding must never block a mail: each failed read renders without its
18
+ * part (company details or logo).
19
+ */
20
+ const loadEmailShopDetails = async (container) => {
21
+ const [masterData, logo] = await Promise.all([
22
+ (0, public_1.getShopMasterData)(container).then(({ values }) => values, () => {
23
+ warn(container, "Email: shop master data unavailable; rendering without it.");
24
+ return {};
25
+ }),
26
+ (0, public_1.getPluginSettings)(container, plugin_features_1.emailPluginFeatures).then(({ values }) => values.logo, () => {
27
+ warn(container, "Email: logo setting unavailable; rendering without it.");
28
+ return undefined;
29
+ }),
30
+ ]);
31
+ return typeof logo === "string" && logo
32
+ ? { ...masterData, logo }
33
+ : masterData;
34
+ };
35
+ exports.loadEmailShopDetails = loadEmailShopDetails;
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC1lbWFpbC1zaG9wLWRldGFpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZW1haWwvcmVuZGVyaW5nL2xvYWQtZW1haWwtc2hvcC1kZXRhaWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUFzRTtBQUV0RSx5Q0FBb0U7QUFDcEUsd0RBQXlEO0FBR3pELE1BQU0sSUFBSSxHQUFHLENBQUMsU0FBMEIsRUFBRSxPQUFlLEVBQVEsRUFBRTtJQUNqRSxJQUFJLENBQUM7UUFDSCxTQUFTLENBQUMsT0FBTyxDQUFTLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsOERBQThEO0lBQ2hFLENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRjs7OztHQUlHO0FBQ0ksTUFBTSxvQkFBb0IsR0FBRyxLQUFLLEVBQ3ZDLFNBQTBCLEVBQ0MsRUFBRTtJQUM3QixNQUFNLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUMzQyxJQUFBLDBCQUFpQixFQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FDL0IsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQ3RCLEdBQUcsRUFBRTtZQUNILElBQUksQ0FDRixTQUFTLEVBQ1QsNERBQTRELENBQzdELENBQUM7WUFDRixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FDRjtRQUNELElBQUEsMEJBQWlCLEVBQUMsU0FBUyxFQUFFLHFDQUFtQixDQUFDLENBQUMsSUFBSSxDQUNwRCxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQzNCLEdBQUcsRUFBRTtZQUNILElBQUksQ0FDRixTQUFTLEVBQ1Qsd0RBQXdELENBQ3pELENBQUM7WUFDRixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDLENBQ0Y7S0FDRixDQUFDLENBQUM7SUFDSCxPQUFPLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJO1FBQ3JDLENBQUMsQ0FBQyxFQUFFLEdBQUcsVUFBVSxFQUFFLElBQUksRUFBRTtRQUN6QixDQUFDLENBQUMsVUFBVSxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQTVCVyxRQUFBLG9CQUFvQix3QkE0Qi9CIn0=
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderEmail = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const types_1 = require("../types");
6
+ /** Kinds that go to the shop's own team instead of a customer. */
7
+ const SHOP_AUDIENCE_KINDS = new Set([
8
+ "order.received.admin",
9
+ "user.invite",
10
+ ]);
11
+ const invalidRenderInput = () => {
12
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Invalid email render input.");
13
+ };
14
+ const requireContent = (value) => {
15
+ if (typeof value !== "string" || !value.trim()) {
16
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "Email renderer returned empty content.");
17
+ }
18
+ return value;
19
+ };
20
+ const renderEmail = (configuration, input, shop) => {
21
+ const kindResult = types_1.EmailKindSchema.safeParse(input.kind);
22
+ if (!kindResult.success) {
23
+ return invalidRenderInput();
24
+ }
25
+ const kind = kindResult.data;
26
+ const dataResult = types_1.EmailRenderDataSchemas[kind].safeParse(input.data);
27
+ if (!dataResult.success) {
28
+ return invalidRenderInput();
29
+ }
30
+ const renderer = configuration.renderers[kind];
31
+ if (typeof renderer !== "function") {
32
+ return invalidRenderInput();
33
+ }
34
+ const rendered = renderer(dataResult.data);
35
+ const bodyHtml = requireContent(rendered?.bodyHtml);
36
+ const subject = requireContent(rendered?.subject);
37
+ const text = requireContent(rendered?.text);
38
+ const html = requireContent(configuration.layout({
39
+ audience: (SHOP_AUDIENCE_KINDS.has(kind)
40
+ ? "shop"
41
+ : "customer"),
42
+ bodyHtml,
43
+ preheader: text,
44
+ subject,
45
+ shop,
46
+ }));
47
+ return { bodyHtml, html, subject, text };
48
+ };
49
+ exports.renderEmail = renderEmail;
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWVtYWlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2VtYWlsL3JlbmRlcmluZy9yZW5kZXItZW1haWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQXdEO0FBRXhELG9DQVFrQjtBQWdCbEIsa0VBQWtFO0FBQ2xFLE1BQU0sbUJBQW1CLEdBQTJCLElBQUksR0FBRyxDQUFDO0lBQzFELHNCQUFzQjtJQUN0QixhQUFhO0NBQ2QsQ0FBQyxDQUFDO0FBRUgsTUFBTSxrQkFBa0IsR0FBRyxHQUFVLEVBQUU7SUFDckMsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsNkJBQTZCLENBQzlCLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWMsRUFBVSxFQUFFO0lBQ2hELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDL0MsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUNsQyx3Q0FBd0MsQ0FDekMsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQztBQUVLLE1BQU0sV0FBVyxHQUFHLENBQ3pCLGFBQTZDLEVBQzdDLEtBQXVCLEVBQ3ZCLElBQXNCLEVBQ1AsRUFBRTtJQUNqQixNQUFNLFVBQVUsR0FBRyx1QkFBZSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN4QixPQUFPLGtCQUFrQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7SUFDN0IsTUFBTSxVQUFVLEdBQUcsOEJBQXNCLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3hCLE9BQU8sa0JBQWtCLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBRWpDLENBQUM7SUFDYixJQUFJLE9BQU8sUUFBUSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ25DLE9BQU8sa0JBQWtCLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQTRCLENBQUM7SUFDdEUsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNwRCxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUMsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUN6QixhQUFhLENBQUMsTUFBTSxDQUFDO1FBQ25CLFFBQVEsRUFBRSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDdEMsQ0FBQyxDQUFDLE1BQU07WUFDUixDQUFDLENBQUMsVUFBVSxDQUF5QjtRQUN2QyxRQUFRO1FBQ1IsU0FBUyxFQUFFLElBQUk7UUFDZixPQUFPO1FBQ1AsSUFBSTtLQUNMLENBQUMsQ0FDSCxDQUFDO0lBRUYsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzNDLENBQUMsQ0FBQztBQXJDVyxRQUFBLFdBQVcsZUFxQ3RCIn0=
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveShopEmailConfiguration = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const types_1 = require("../types");
6
+ const default_templates_1 = require("./default-templates");
7
+ const isTimeZone = (value) => {
8
+ if (typeof value !== "string" || !value.trim()) {
9
+ return false;
10
+ }
11
+ try {
12
+ new Intl.DateTimeFormat("de", { timeZone: value });
13
+ return true;
14
+ }
15
+ catch {
16
+ return false;
17
+ }
18
+ };
19
+ const invalidConfiguration = (message) => {
20
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Invalid email shop configuration: ${message}`);
21
+ };
22
+ /**
23
+ * Validates the shop configuration and merges the default layout and
24
+ * renderers into it. Runs once when the Email module boots, so a bad
25
+ * configuration fails at startup and not at the first send.
26
+ */
27
+ const resolveShopEmailConfiguration = (shop) => {
28
+ if (typeof shop?.displayName !== "string" || !shop.displayName.trim()) {
29
+ invalidConfiguration("displayName must be a non-empty string.");
30
+ }
31
+ if (shop.layout !== undefined && typeof shop.layout !== "function") {
32
+ invalidConfiguration("layout must be a function.");
33
+ }
34
+ if (shop.adminOrderUrl !== undefined &&
35
+ typeof shop.adminOrderUrl !== "function") {
36
+ invalidConfiguration("adminOrderUrl must be a function.");
37
+ }
38
+ if (shop.timeZone !== undefined && !isTimeZone(shop.timeZone)) {
39
+ invalidConfiguration("timeZone must be an IANA time zone.");
40
+ }
41
+ if (shop.renderers !== undefined &&
42
+ (typeof shop.renderers !== "object" || shop.renderers === null)) {
43
+ invalidConfiguration("renderers must be an object.");
44
+ }
45
+ const overrides = { ...shop.renderers };
46
+ for (const kind of Object.keys(overrides)) {
47
+ if (!types_1.EMAIL_KINDS.includes(kind)) {
48
+ invalidConfiguration(`renderers contains the unknown kind "${kind}".`);
49
+ }
50
+ if (overrides[kind] === undefined) {
51
+ delete overrides[kind];
52
+ }
53
+ else if (typeof overrides[kind] !== "function") {
54
+ invalidConfiguration(`renderers["${kind}"] must be a function.`);
55
+ }
56
+ }
57
+ return {
58
+ ...shop,
59
+ layout: shop.layout ?? (0, default_templates_1.createDefaultEmailLayout)(shop.displayName),
60
+ renderers: {
61
+ ...(0, default_templates_1.createDefaultEmailRenderers)(shop),
62
+ ...overrides,
63
+ },
64
+ };
65
+ };
66
+ exports.resolveShopEmailConfiguration = resolveShopEmailConfiguration;
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS1zaG9wLWNvbmZpZ3VyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZW1haWwvcmVuZGVyaW5nL3Jlc29sdmUtc2hvcC1jb25maWd1cmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUF3RDtBQUV4RCxvQ0FJa0I7QUFDbEIsMkRBRzZCO0FBRTdCLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBYyxFQUFXLEVBQUU7SUFDN0MsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUMvQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxJQUFJLENBQUM7UUFDSCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDbkQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLE9BQWUsRUFBUyxFQUFFO0lBQ3RELE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHFDQUFxQyxPQUFPLEVBQUUsQ0FDL0MsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSSxNQUFNLDZCQUE2QixHQUFHLENBQzNDLElBQTRCLEVBQ0ksRUFBRTtJQUNsQyxJQUFJLE9BQU8sSUFBSSxFQUFFLFdBQVcsS0FBSyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDdEUsb0JBQW9CLENBQUMseUNBQXlDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDbkUsb0JBQW9CLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQ0QsSUFDRSxJQUFJLENBQUMsYUFBYSxLQUFLLFNBQVM7UUFDaEMsT0FBTyxJQUFJLENBQUMsYUFBYSxLQUFLLFVBQVUsRUFDeEMsQ0FBQztRQUNELG9CQUFvQixDQUFDLG1DQUFtQyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUNELElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDOUQsb0JBQW9CLENBQUMscUNBQXFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBQ0QsSUFDRSxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVM7UUFDNUIsQ0FBQyxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLEVBQy9ELENBQUM7UUFDRCxvQkFBb0IsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBNEIsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNqRSxLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUUsbUJBQWlDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdkQsb0JBQW9CLENBQUMsd0NBQXdDLElBQUksSUFBSSxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUNELElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLENBQUM7YUFBTSxJQUFJLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ2pELG9CQUFvQixDQUFDLGNBQWMsSUFBSSx3QkFBd0IsQ0FBQyxDQUFDO1FBQ25FLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLEdBQUcsSUFBSTtRQUNQLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUEsNENBQXdCLEVBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNqRSxTQUFTLEVBQUU7WUFDVCxHQUFHLElBQUEsK0NBQTJCLEVBQUMsSUFBSSxDQUFDO1lBQ3BDLEdBQUcsU0FBUztTQUNiO0tBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQztBQTdDVyxRQUFBLDZCQUE2QixpQ0E2Q3hDIn0=
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EmailKindSchema = exports.EMAIL_KINDS = void 0;
4
+ const zod_1 = require("@medusajs/framework/zod");
5
+ exports.EMAIL_KINDS = [
6
+ "order.received",
7
+ "order.received.admin",
8
+ "order.shipped",
9
+ "order.canceled",
10
+ "order.return_requested",
11
+ "order.return_received",
12
+ "order.refunded",
13
+ "auth.password_reset",
14
+ "affiliate.consignment_report_due",
15
+ "user.invite",
16
+ ];
17
+ exports.EmailKindSchema = zod_1.z.enum(exports.EMAIL_KINDS);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwta2luZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZW1haWwvdHlwZXMvZW1haWwta2luZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaURBQTRDO0FBRS9CLFFBQUEsV0FBVyxHQUFHO0lBQ3pCLGdCQUFnQjtJQUNoQixzQkFBc0I7SUFDdEIsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQix3QkFBd0I7SUFDeEIsdUJBQXVCO0lBQ3ZCLGdCQUFnQjtJQUNoQixxQkFBcUI7SUFDckIsa0NBQWtDO0lBQ2xDLGFBQWE7Q0FDTCxDQUFDO0FBRUUsUUFBQSxlQUFlLEdBQUcsT0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBVyxDQUFDLENBQUMifQ==
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./email-kinds"), exports);
18
+ __exportStar(require("./shop-configuration"), exports);
19
+ __exportStar(require("./smtp-configuration"), exports);
20
+ __exportStar(require("./template-data"), exports);
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZW1haWwvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdEQUE4QjtBQUM5Qix1REFBcUM7QUFDckMsdURBQXFDO0FBQ3JDLGtEQUFnQyJ9
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvcC1jb25maWd1cmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2VtYWlsL3R5cGVzL3Nob3AtY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic210cC1jb25maWd1cmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2VtYWlsL3R5cGVzL3NtdHAtY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
@@ -0,0 +1,232 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EmailRenderDataSchemas = exports.EmailPersistedDataSchemas = exports.RefundSummarySchema = exports.ReturnReceivedSummarySchema = exports.ReturnSummarySchema = exports.ShipmentSummarySchema = exports.OrderSummarySchema = void 0;
4
+ const zod_1 = require("@medusajs/framework/zod");
5
+ const affiliate_1 = require("@hartl-services/medusa-food-supplements-contracts/schemas/affiliate");
6
+ const NonEmptyStringSchema = zod_1.z.string().trim().min(1);
7
+ const NullableLocaleSchema = NonEmptyStringSchema.max(35).nullable();
8
+ const DocumentsFactFingerprintSchema = zod_1.z
9
+ .string()
10
+ .regex(/^[a-f0-9]{64}$/)
11
+ .optional();
12
+ const AmountSchema = zod_1.z.string().regex(/^-?\d+(\.\d+)?$/);
13
+ const OptionalTextSchema = zod_1.z.string().nullable();
14
+ const OrderSummaryAddressSchema = zod_1.z
15
+ .object({
16
+ first_name: OptionalTextSchema,
17
+ last_name: OptionalTextSchema,
18
+ company: OptionalTextSchema,
19
+ address_1: OptionalTextSchema,
20
+ address_2: OptionalTextSchema,
21
+ postal_code: OptionalTextSchema,
22
+ city: OptionalTextSchema,
23
+ country_code: OptionalTextSchema,
24
+ })
25
+ .strict();
26
+ /**
27
+ * Snapshot of an order when it was placed. Amounts are Medusa's gross
28
+ * decimal strings: item and shipping rows before discounts, so
29
+ * `original_item_total + original_shipping_total - discount_total` is the
30
+ * `total`, which already contains `tax_total`.
31
+ */
32
+ exports.OrderSummarySchema = zod_1.z
33
+ .object({
34
+ display_id: zod_1.z.number().int().nullable(),
35
+ /** The order's e-mail address; `null` when the order has none. */
36
+ email: OptionalTextSchema,
37
+ /** When the order was placed (ISO 8601). */
38
+ placed_at: zod_1.z.string().datetime(),
39
+ currency_code: NonEmptyStringSchema,
40
+ items: zod_1.z.array(zod_1.z
41
+ .object({
42
+ title: NonEmptyStringSchema,
43
+ variant_title: OptionalTextSchema,
44
+ quantity: zod_1.z.number().positive(),
45
+ original_total: AmountSchema,
46
+ })
47
+ .strict()),
48
+ shipping_method_names: zod_1.z.array(NonEmptyStringSchema),
49
+ original_item_total: AmountSchema,
50
+ original_shipping_total: AmountSchema,
51
+ discount_total: AmountSchema,
52
+ tax_total: AmountSchema,
53
+ total: AmountSchema,
54
+ billing_address: OrderSummaryAddressSchema.nullable(),
55
+ shipping_address: OrderSummaryAddressSchema.nullable(),
56
+ })
57
+ .strict();
58
+ /**
59
+ * Snapshot of one shipment when it was shipped: the parcel's items (title
60
+ * of the order line, shipped quantity), tracking numbers and links as
61
+ * entered at shipping, and whether more of the order is still to be shipped.
62
+ */
63
+ exports.ShipmentSummarySchema = zod_1.z
64
+ .object({
65
+ display_id: zod_1.z.number().int().nullable(),
66
+ shipping_method_name: OptionalTextSchema,
67
+ tracking: zod_1.z.array(zod_1.z
68
+ .object({
69
+ number: OptionalTextSchema,
70
+ url: OptionalTextSchema,
71
+ })
72
+ .strict()),
73
+ items: zod_1.z.array(zod_1.z
74
+ .object({
75
+ title: NonEmptyStringSchema,
76
+ variant_title: OptionalTextSchema,
77
+ quantity: zod_1.z.number().positive(),
78
+ })
79
+ .strict()),
80
+ delivery_address: OrderSummaryAddressSchema.nullable(),
81
+ more_to_follow: zod_1.z.boolean(),
82
+ })
83
+ .strict();
84
+ /**
85
+ * Snapshot of a return when it was requested: the return and order numbers,
86
+ * the items to send back (title of the order line, quantity, reason label),
87
+ * the return shipping option and where to send the parcel.
88
+ */
89
+ exports.ReturnSummarySchema = zod_1.z
90
+ .object({
91
+ display_id: zod_1.z.number().int().nullable(),
92
+ order_display_id: zod_1.z.number().int().nullable(),
93
+ shipping_method_name: OptionalTextSchema,
94
+ items: zod_1.z.array(zod_1.z
95
+ .object({
96
+ title: NonEmptyStringSchema,
97
+ variant_title: OptionalTextSchema,
98
+ quantity: zod_1.z.number().positive(),
99
+ reason: OptionalTextSchema,
100
+ })
101
+ .strict()),
102
+ return_address: OrderSummaryAddressSchema.nullable(),
103
+ })
104
+ .strict();
105
+ /**
106
+ * Snapshot of a return when it was completely received: the return and
107
+ * order numbers, when it arrived and the received items (title of the order
108
+ * line, received quantity and how much of it arrived damaged).
109
+ */
110
+ exports.ReturnReceivedSummarySchema = zod_1.z
111
+ .object({
112
+ display_id: zod_1.z.number().int().nullable(),
113
+ order_display_id: zod_1.z.number().int().nullable(),
114
+ received_at: zod_1.z.string().datetime().nullable(),
115
+ items: zod_1.z.array(zod_1.z
116
+ .object({
117
+ title: NonEmptyStringSchema,
118
+ variant_title: OptionalTextSchema,
119
+ quantity: zod_1.z.number().positive(),
120
+ damaged_quantity: zod_1.z.number().nonnegative(),
121
+ })
122
+ .strict()),
123
+ })
124
+ .strict();
125
+ /**
126
+ * Snapshot of one refund when its Documents fact arrived: the order number,
127
+ * the refunded gross amount, when it was refunded and the refund reason
128
+ * chosen in the Admin.
129
+ */
130
+ exports.RefundSummarySchema = zod_1.z
131
+ .object({
132
+ order_display_id: zod_1.z.number().int().nullable(),
133
+ amount: AmountSchema,
134
+ currency_code: NonEmptyStringSchema,
135
+ refunded_at: zod_1.z.string().datetime().nullable(),
136
+ reason: OptionalTextSchema,
137
+ })
138
+ .strict();
139
+ exports.EmailPersistedDataSchemas = {
140
+ "order.received": zod_1.z
141
+ .object({
142
+ order_id: NonEmptyStringSchema,
143
+ // Optional: messages stored before the summary existed have none.
144
+ summary: exports.OrderSummarySchema.optional(),
145
+ })
146
+ .strict(),
147
+ "order.received.admin": zod_1.z
148
+ .object({
149
+ order_id: NonEmptyStringSchema,
150
+ // Optional: messages stored before the summary existed have none.
151
+ summary: exports.OrderSummarySchema.optional(),
152
+ })
153
+ .strict(),
154
+ "order.shipped": zod_1.z
155
+ .object({
156
+ order_id: NonEmptyStringSchema,
157
+ fulfillment_id: NonEmptyStringSchema,
158
+ documents_fact_fingerprint: DocumentsFactFingerprintSchema,
159
+ // Optional: messages stored before the snapshot existed have none.
160
+ shipment: exports.ShipmentSummarySchema.optional(),
161
+ /** The invoice PDF is attached (Documents chose this shipment). */
162
+ invoice_attached: zod_1.z.boolean().optional(),
163
+ })
164
+ .strict(),
165
+ "order.canceled": zod_1.z
166
+ .object({
167
+ order_id: NonEmptyStringSchema,
168
+ documents_fact_fingerprint: DocumentsFactFingerprintSchema,
169
+ // Optional: messages stored before the snapshot existed have none.
170
+ summary: exports.OrderSummarySchema.optional(),
171
+ /** When the order was canceled (ISO 8601). */
172
+ canceled_at: zod_1.z.string().datetime().optional(),
173
+ /** A cancellation document PDF is attached (from Documents). */
174
+ cancellation_attached: zod_1.z.boolean().optional(),
175
+ })
176
+ .strict(),
177
+ "order.return_requested": zod_1.z
178
+ .object({
179
+ order_id: NonEmptyStringSchema,
180
+ return_id: NonEmptyStringSchema,
181
+ // Optional: messages stored before the snapshot existed have none.
182
+ summary: exports.ReturnSummarySchema.optional(),
183
+ })
184
+ .strict(),
185
+ "order.return_received": zod_1.z
186
+ .object({
187
+ order_id: NonEmptyStringSchema,
188
+ return_id: NonEmptyStringSchema,
189
+ // Optional: messages stored before the snapshot existed have none.
190
+ summary: exports.ReturnReceivedSummarySchema.optional(),
191
+ })
192
+ .strict(),
193
+ "order.refunded": zod_1.z
194
+ .object({
195
+ order_id: NonEmptyStringSchema,
196
+ refund_id: NonEmptyStringSchema,
197
+ documents_fact_fingerprint: DocumentsFactFingerprintSchema,
198
+ // Optional: messages stored before the snapshot existed have none.
199
+ summary: exports.RefundSummarySchema.optional(),
200
+ /** A cancellation document PDF is attached (from Documents). */
201
+ cancellation_attached: zod_1.z.boolean().optional(),
202
+ })
203
+ .strict(),
204
+ "auth.password_reset": zod_1.z
205
+ .object({
206
+ locale: NullableLocaleSchema,
207
+ })
208
+ .strict(),
209
+ "affiliate.consignment_report_due": zod_1.z
210
+ .object({
211
+ affiliate_display_name: NonEmptyStringSchema,
212
+ period_start: affiliate_1.CalendarMonthSchema,
213
+ due_date: affiliate_1.CalendarDateSchema,
214
+ locale: NullableLocaleSchema,
215
+ })
216
+ .strict(),
217
+ "user.invite": zod_1.z.object({}).strict(),
218
+ };
219
+ exports.EmailRenderDataSchemas = {
220
+ ...exports.EmailPersistedDataSchemas,
221
+ "auth.password_reset": exports.EmailPersistedDataSchemas["auth.password_reset"].extend({
222
+ reset_url: zod_1.z.string().url(),
223
+ /** How long the reset link is valid, from the token; `undefined` if unknown. */
224
+ valid_minutes: zod_1.z.number().int().positive().optional(),
225
+ }),
226
+ "user.invite": exports.EmailPersistedDataSchemas["user.invite"].extend({
227
+ invite_url: zod_1.z.string().url(),
228
+ /** When the invite expires (ISO 8601), from the current invite. */
229
+ expires_at: zod_1.z.string().datetime().optional(),
230
+ }),
231
+ };
232
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbWFpbC90eXBlcy90ZW1wbGF0ZS1kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlEQUE0QztBQUM1QyxtR0FHNkU7QUFJN0UsTUFBTSxvQkFBb0IsR0FBRyxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELE1BQU0sb0JBQW9CLEdBQUcsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3JFLE1BQU0sOEJBQThCLEdBQUcsT0FBQztLQUNyQyxNQUFNLEVBQUU7S0FDUixLQUFLLENBQUMsZ0JBQWdCLENBQUM7S0FDdkIsUUFBUSxFQUFFLENBQUM7QUFFZCxNQUFNLFlBQVksR0FBRyxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDekQsTUFBTSxrQkFBa0IsR0FBRyxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7QUFFakQsTUFBTSx5QkFBeUIsR0FBRyxPQUFDO0tBQ2hDLE1BQU0sQ0FBQztJQUNOLFVBQVUsRUFBRSxrQkFBa0I7SUFDOUIsU0FBUyxFQUFFLGtCQUFrQjtJQUM3QixPQUFPLEVBQUUsa0JBQWtCO0lBQzNCLFNBQVMsRUFBRSxrQkFBa0I7SUFDN0IsU0FBUyxFQUFFLGtCQUFrQjtJQUM3QixXQUFXLEVBQUUsa0JBQWtCO0lBQy9CLElBQUksRUFBRSxrQkFBa0I7SUFDeEIsWUFBWSxFQUFFLGtCQUFrQjtDQUNqQyxDQUFDO0tBQ0QsTUFBTSxFQUFFLENBQUM7QUFFWjs7Ozs7R0FLRztBQUNVLFFBQUEsa0JBQWtCLEdBQUcsT0FBQztLQUNoQyxNQUFNLENBQUM7SUFDTixVQUFVLEVBQUUsT0FBQyxDQUFDLE1B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