@hartl-services/medusa-base 2.5.0 → 2.6.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 (287) hide show
  1. package/.medusa/server/src/admin/admin-components/features/plugin-features/components/ImageSettingInput.js +48 -0
  2. package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginActionsSection.js +3 -2
  3. package/.medusa/server/src/admin/admin-components/features/plugin-features/components/PluginFeaturesSettingsPage.js +17 -0
  4. package/.medusa/server/src/admin/admin-components/features/plugin-features/components/PluginPageShell.js +20 -0
  5. package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginSettingsForm.js +16 -3
  6. package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/hooks/usePluginFeatureEnabled.d.ts +5 -1
  7. package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/hooks/usePluginFeatures.d.ts +20 -4
  8. package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/hooks/usePluginFeatures.js +1 -1
  9. package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/hooks/usePluginSettingsForm.d.ts +5 -1
  10. package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/lib/action-runs.d.ts +1 -1
  11. package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/lib/action-runs.js +3 -2
  12. package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/lib/plugin-features-admin-client.d.ts +20 -4
  13. package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/lib/plugin-features-admin-client.js +1 -1
  14. package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/lib/settings-draft.d.ts +17 -2
  15. package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/lib/settings-draft.js +33 -1
  16. package/{dist → .medusa/server/src/admin}/admin-components/i18n/texts.d.ts +3 -0
  17. package/{dist → .medusa/server/src/admin}/admin-components/i18n/texts.js +3 -0
  18. package/.medusa/server/src/admin/admin-components/index.d.ts +36 -0
  19. package/.medusa/server/src/admin/admin-components/index.js +37 -0
  20. package/.medusa/server/src/admin/admin-components/shared/lib/date-input.d.ts +8 -0
  21. package/.medusa/server/src/admin/admin-components/shared/lib/date-input.js +43 -0
  22. package/.medusa/server/src/admin/admin-components/shared/lib/errors.d.ts +9 -0
  23. package/{dist/admin-components → .medusa/server/src/admin/admin-components/shared}/lib/errors.js +4 -6
  24. package/.medusa/server/src/admin/admin-components/shared/lib/file-validation.d.ts +24 -0
  25. package/.medusa/server/src/admin/admin-components/shared/lib/file-validation.js +18 -0
  26. package/.medusa/server/src/admin/admin-components/shared/lib/format.d.ts +32 -0
  27. package/.medusa/server/src/admin/admin-components/shared/lib/format.js +77 -0
  28. package/.medusa/server/src/admin/admin-components/shared/lib/pdf-preview.d.ts +16 -0
  29. package/.medusa/server/src/admin/admin-components/shared/lib/pdf-preview.js +31 -0
  30. package/.medusa/server/src/admin/admin-components/shared/lib/pdf.d.ts +6 -0
  31. package/.medusa/server/src/admin/admin-components/shared/lib/pdf.js +13 -0
  32. package/.medusa/server/src/admin/admin-components/shared/lib/use-debounced-value.d.ts +2 -0
  33. package/.medusa/server/src/admin/admin-components/shared/lib/use-debounced-value.js +10 -0
  34. package/.medusa/server/src/admin/admin-components/shared/lib/use-pdf-preview.d.ts +24 -0
  35. package/.medusa/server/src/admin/admin-components/shared/lib/use-pdf-preview.js +47 -0
  36. package/.medusa/server/src/admin/admin-components/shared/ui/AdminDatePicker.d.ts +8 -0
  37. package/.medusa/server/src/admin/admin-components/shared/ui/AdminDatePicker.js +9 -0
  38. package/.medusa/server/src/admin/admin-components/shared/ui/BackLink.d.ts +8 -0
  39. package/.medusa/server/src/admin/admin-components/shared/ui/BackLink.js +5 -0
  40. package/.medusa/server/src/admin/admin-components/shared/ui/DateRangeFilter.d.ts +20 -0
  41. package/.medusa/server/src/admin/admin-components/shared/ui/DateRangeFilter.js +17 -0
  42. package/.medusa/server/src/admin/admin-components/shared/ui/FilePickerButton.d.ts +14 -0
  43. package/.medusa/server/src/admin/admin-components/shared/ui/FilePickerButton.js +14 -0
  44. package/.medusa/server/src/admin/admin-components/shared/ui/MappedStatusBadge.d.ts +17 -0
  45. package/.medusa/server/src/admin/admin-components/shared/ui/MappedStatusBadge.js +12 -0
  46. package/.medusa/server/src/admin/admin-components/shared/ui/OffsetTablePagination.d.ts +15 -0
  47. package/.medusa/server/src/admin/admin-components/shared/ui/OffsetTablePagination.js +19 -0
  48. package/.medusa/server/src/admin/admin-components/shared/ui/PdfPreviewModal.d.ts +20 -0
  49. package/.medusa/server/src/admin/admin-components/shared/ui/PdfPreviewModal.js +7 -0
  50. package/.medusa/server/src/admin/admin-components/shared/ui/PluginFeatureRoute.d.ts +19 -0
  51. package/.medusa/server/src/admin/admin-components/shared/ui/PluginFeatureRoute.js +16 -0
  52. package/.medusa/server/src/admin/admin-components/shared/ui/QueryState.d.ts +24 -0
  53. package/.medusa/server/src/admin/admin-components/shared/ui/QueryState.js +23 -0
  54. package/.medusa/server/src/admin/admin-components/shared/ui/SearchableReferenceField.d.ts +63 -0
  55. package/.medusa/server/src/admin/admin-components/shared/ui/SearchableReferenceField.js +84 -0
  56. package/.medusa/server/src/admin/admin-components/shared/ui/SectionHeader.d.ts +15 -0
  57. package/.medusa/server/src/admin/admin-components/shared/ui/SectionHeader.js +13 -0
  58. package/.medusa/server/src/admin/admin-components/shared/ui/mapped-status.d.ts +6 -0
  59. package/.medusa/server/src/admin/admin-components/shared/ui/mapped-status.js +10 -0
  60. package/.medusa/server/src/admin/admin-components/shared/ui/offset-pagination.d.ts +17 -0
  61. package/.medusa/server/src/admin/admin-components/shared/ui/offset-pagination.js +15 -0
  62. package/.medusa/server/src/admin/admin-components/shared/ui/reference-results-state.d.ts +16 -0
  63. package/.medusa/server/src/admin/admin-components/shared/ui/reference-results-state.js +13 -0
  64. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/InsertMenu.d.ts +8 -0
  65. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/InsertMenu.js +10 -0
  66. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/LinkPrompt.d.ts +14 -0
  67. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/LinkPrompt.js +26 -0
  68. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/RichTextEditor.d.ts +15 -0
  69. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/RichTextEditor.js +8 -0
  70. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/RichTextToolbar.d.ts +10 -0
  71. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/RichTextToolbar.js +49 -0
  72. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/SlashMenu.d.ts +11 -0
  73. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/SlashMenu.js +44 -0
  74. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/build-extensions.d.ts +8 -0
  75. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/build-extensions.js +43 -0
  76. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/drag-handle.d.ts +15 -0
  77. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/drag-handle.js +161 -0
  78. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/drag-target.d.ts +30 -0
  79. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/drag-target.js +47 -0
  80. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/editor-styles.d.ts +6 -0
  81. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/editor-styles.js +46 -0
  82. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/index.d.ts +9 -0
  83. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/index.js +6 -0
  84. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/link-href.d.ts +8 -0
  85. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/link-href.js +21 -0
  86. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/link-policy.d.ts +13 -0
  87. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/link-policy.js +20 -0
  88. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/slash-command.d.ts +13 -0
  89. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/slash-command.js +60 -0
  90. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/slash-items.d.ts +25 -0
  91. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/slash-items.js +10 -0
  92. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/tiptap.d.ts +7 -0
  93. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/tiptap.js +7 -0
  94. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/use-rich-text-editor.d.ts +44 -0
  95. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/use-rich-text-editor.js +37 -0
  96. package/.medusa/server/src/admin/index.js +4513 -1447
  97. package/.medusa/server/src/admin/index.mjs +4515 -1452
  98. package/.medusa/server/src/api/admin/email/attachments/[id]/mail-kinds/route.js +16 -0
  99. package/.medusa/server/src/api/admin/email/attachments/[id]/route.js +15 -0
  100. package/.medusa/server/src/api/admin/email/attachments/[id]/versions/[version_id]/download/route.js +16 -0
  101. package/.medusa/server/src/api/admin/email/attachments/[id]/versions/route.js +41 -0
  102. package/.medusa/server/src/api/admin/email/attachments/route.js +21 -0
  103. package/.medusa/server/src/api/admin/email/templates/[kind]/preview/route.js +31 -0
  104. package/.medusa/server/src/api/admin/email/templates/[kind]/route.js +28 -0
  105. package/.medusa/server/src/api/admin/email/templates/[kind]/send-test/route.js +179 -0
  106. package/.medusa/server/src/api/admin/email/templates/[kind]/test-sources/route.js +19 -0
  107. package/.medusa/server/src/api/admin/email/templates/route.js +15 -0
  108. package/.medusa/server/src/api/admin/plugin-features/[plugin_key]/actions/[action_key]/route.js +2 -2
  109. package/.medusa/server/src/api/admin/plugin-features/[plugin_key]/actions/[action_key]/runs/route.js +2 -2
  110. package/.medusa/server/src/api/admin/plugin-features/[plugin_key]/route.js +2 -2
  111. package/.medusa/server/src/api/admin/plugin-features/[plugin_key]/settings/route.js +2 -2
  112. package/.medusa/server/src/api/admin/plugin-features/route.js +2 -2
  113. package/.medusa/server/src/api/attachment-download-response.js +12 -0
  114. package/.medusa/server/src/api/email-template-response.js +43 -0
  115. package/.medusa/server/src/api/middlewares.js +75 -17
  116. package/.medusa/server/src/api/plugin-actions.js +6 -5
  117. package/.medusa/server/src/api/plugin-features-http.js +4 -9
  118. package/.medusa/server/src/api/store/carts/[id]/completion-check/route.js +2 -2
  119. package/.medusa/server/src/api/store/plugin-features/[plugin_key]/route.js +2 -2
  120. package/.medusa/server/src/api/store/plugin-features/route.js +2 -2
  121. package/.medusa/server/src/documents/plugin-features.js +1 -7
  122. package/.medusa/server/src/documents/templates/financial-document.js +12 -11
  123. package/.medusa/server/src/documents/templates/html-factory.js +1 -1
  124. package/.medusa/server/src/documents/templates/html-utils.js +4 -10
  125. package/.medusa/server/src/documents/templates/layout.js +30 -11
  126. package/.medusa/server/src/documents/templates/packing-list.js +8 -7
  127. package/.medusa/server/src/documents/utils/document-render-settings.js +9 -6
  128. package/.medusa/server/src/email/application/handle-customer-verification-event.js +8 -3
  129. package/.medusa/server/src/email/application/handle-invite-event.js +8 -3
  130. package/.medusa/server/src/email/application/handle-password-reset-event.js +8 -3
  131. package/.medusa/server/src/email/application/notification-attachments.js +86 -0
  132. package/.medusa/server/src/email/application/template-data-from-order.js +339 -0
  133. package/.medusa/server/src/email/config/index.js +5 -29
  134. package/.medusa/server/src/email/domain/business-keys.js +5 -5
  135. package/.medusa/server/src/email/domain/documents-fact-fingerprint.js +3 -3
  136. package/.medusa/server/src/email/domain/order-summary.js +21 -27
  137. package/.medusa/server/src/email/domain/refund-summary.js +7 -12
  138. package/.medusa/server/src/email/domain/return-summary.js +32 -38
  139. package/.medusa/server/src/email/domain/shipment-summary.js +22 -28
  140. package/.medusa/server/src/email/plugin-features.js +2 -10
  141. package/.medusa/server/src/email/rendering/calendar-dates.js +19 -0
  142. package/.medusa/server/src/email/rendering/default-templates.js +99 -682
  143. package/.medusa/server/src/email/rendering/email-html.js +189 -0
  144. package/.medusa/server/src/email/rendering/load-email-shop-details.js +14 -12
  145. package/.medusa/server/src/email/rendering/render-email.js +46 -13
  146. package/.medusa/server/src/email/rendering/resolve-shop-configuration.js +3 -14
  147. package/.medusa/server/src/email/templates/blocks/dynamic-blocks.js +427 -0
  148. package/.medusa/server/src/email/templates/blocks/placeholders.js +71 -0
  149. package/.medusa/server/src/email/templates/blocks/render-document.js +137 -0
  150. package/.medusa/server/src/email/templates/code-override.js +18 -0
  151. package/.medusa/server/src/email/templates/defaults/documents.js +129 -0
  152. package/.medusa/server/src/email/templates/defaults/subjects.js +62 -0
  153. package/.medusa/server/src/email/templates/defaults/texts.js +42 -0
  154. package/.medusa/server/src/email/templates/index.js +22 -0
  155. package/.medusa/server/src/email/templates/load-template.js +39 -0
  156. package/.medusa/server/src/email/templates/preview.js +33 -0
  157. package/.medusa/server/src/email/templates/render.js +70 -0
  158. package/.medusa/server/src/email/templates/sample-data.js +165 -0
  159. package/.medusa/server/src/email/templates/types.js +3 -0
  160. package/.medusa/server/src/email/templates/validate.js +113 -0
  161. package/.medusa/server/src/files/config/index.js +6 -9
  162. package/.medusa/server/src/migration-scripts/move-logo-to-shop-appearance.js +53 -0
  163. package/.medusa/server/src/modules/documents/domain/cancellation-snapshot.js +4 -3
  164. package/.medusa/server/src/modules/documents/domain/merchant.js +4 -3
  165. package/.medusa/server/src/modules/documents/domain/options.js +3 -5
  166. package/.medusa/server/src/modules/documents/domain/tax-breakdown.js +4 -7
  167. package/.medusa/server/src/modules/documents/service.js +12 -33
  168. package/.medusa/server/src/modules/email/domain/attachment.js +22 -8
  169. package/.medusa/server/src/modules/email/migrations/Migration20261009083539.js +80 -0
  170. package/.medusa/server/src/modules/email/migrations/Migration20261009100654.js +17 -0
  171. package/.medusa/server/src/modules/email/models/email-attachment-document-version.js +39 -0
  172. package/.medusa/server/src/modules/email/models/email-attachment-document.js +27 -0
  173. package/.medusa/server/src/modules/email/models/email-template.js +25 -0
  174. package/.medusa/server/src/modules/email/service.js +370 -93
  175. package/.medusa/server/src/modules/plugin-features/domain/plugin-settings.js +9 -11
  176. package/.medusa/server/src/modules/plugin-features/service.js +2 -1
  177. package/.medusa/server/src/providers/s3-cache/cache/cache-manager.js +3 -3
  178. package/.medusa/server/src/providers/s3-cache/s3-object-store.js +3 -9
  179. package/.medusa/server/src/providers/smtp/service.js +13 -13
  180. package/.medusa/server/src/public/descriptor.js +16 -18
  181. package/.medusa/server/src/public/enforcement.js +29 -1
  182. package/.medusa/server/src/public/index.js +8 -2
  183. package/.medusa/server/src/public/module-access.js +9 -2
  184. package/.medusa/server/src/public/shop-master-data.js +109 -18
  185. package/.medusa/server/src/shared/lib/coerce.js +26 -0
  186. package/.medusa/server/src/shared/lib/collections.js +19 -0
  187. package/.medusa/server/src/shared/lib/dates.js +43 -0
  188. package/.medusa/server/src/shared/lib/errors.js +11 -0
  189. package/.medusa/server/src/shared/lib/hash.js +8 -0
  190. package/.medusa/server/src/shared/lib/index.js +29 -0
  191. package/.medusa/server/src/shared/lib/logging.js +61 -0
  192. package/.medusa/server/src/shared/lib/money.js +47 -0
  193. package/.medusa/server/src/shared/lib/text.js +53 -0
  194. package/.medusa/server/src/shared/lib/transaction.js +58 -0
  195. package/.medusa/server/src/{api → shared/lib}/wire-response.js +1 -1
  196. package/.medusa/server/src/shop-config/options.js +3 -5
  197. package/.medusa/server/src/subscribers/packing-list-fulfillment-canceled.js +4 -6
  198. package/.medusa/server/src/workflows/documents/issue-invoice-after-shipment.js +10 -12
  199. package/.medusa/server/src/workflows/documents/issue-packing-list.js +5 -6
  200. package/.medusa/server/src/workflows/documents/reconcile-order-cancellation.js +6 -8
  201. package/.medusa/server/src/workflows/email/dispatch-email-message.js +11 -41
  202. package/.medusa/server/src/workflows/email/prepare-order-received-email.js +2 -2
  203. package/.medusa/server/src/workflows/hooks/complete-cart-participants.js +4 -8
  204. package/README.md +427 -54
  205. package/dist/documents/templates/financial-document.js +11 -10
  206. package/dist/documents/templates/html-factory.d.ts +1 -1
  207. package/dist/documents/templates/html-factory.js +1 -1
  208. package/dist/documents/templates/html-utils.d.ts +0 -1
  209. package/dist/documents/templates/html-utils.js +3 -9
  210. package/dist/documents/templates/layout.js +29 -10
  211. package/dist/documents/templates/packing-list.js +7 -6
  212. package/dist/documents/types/documents.d.ts +7 -1
  213. package/dist/email/config/index.js +4 -28
  214. package/dist/email/types/shop-configuration.d.ts +6 -5
  215. package/dist/files/config/index.js +5 -8
  216. package/dist/modules/documents/domain/options.js +2 -4
  217. package/dist/public/descriptor.js +15 -17
  218. package/dist/public/enforcement.d.ts +21 -1
  219. package/dist/public/enforcement.js +28 -0
  220. package/dist/public/index.d.ts +3 -2
  221. package/dist/public/index.js +7 -1
  222. package/dist/public/module-access.d.ts +8 -0
  223. package/dist/public/module-access.js +8 -1
  224. package/dist/public/shop-master-data.d.ts +22 -5
  225. package/dist/public/shop-master-data.js +108 -17
  226. package/dist/public/types.d.ts +10 -2
  227. package/dist/shared/lib/coerce.d.ts +19 -0
  228. package/dist/shared/lib/coerce.js +25 -0
  229. package/dist/shared/lib/collections.d.ts +3 -0
  230. package/dist/shared/lib/collections.js +18 -0
  231. package/dist/shared/lib/dates.d.ts +12 -0
  232. package/dist/shared/lib/dates.js +42 -0
  233. package/dist/shared/lib/errors.d.ts +2 -0
  234. package/dist/shared/lib/errors.js +10 -0
  235. package/dist/shared/lib/hash.d.ts +2 -0
  236. package/dist/shared/lib/hash.js +7 -0
  237. package/dist/shared/lib/index.d.ts +10 -0
  238. package/dist/shared/lib/index.js +28 -0
  239. package/dist/shared/lib/logging.d.ts +26 -0
  240. package/dist/shared/lib/logging.js +60 -0
  241. package/dist/shared/lib/money.d.ts +13 -0
  242. package/dist/shared/lib/money.js +46 -0
  243. package/dist/shared/lib/text.d.ts +19 -0
  244. package/dist/shared/lib/text.js +52 -0
  245. package/dist/shared/lib/transaction.d.ts +26 -0
  246. package/dist/shared/lib/transaction.js +57 -0
  247. package/dist/shared/lib/wire-response.d.ts +6 -0
  248. package/dist/shared/lib/wire-response.js +9 -0
  249. package/dist/shop-config/options.js +2 -4
  250. package/package.json +19 -4
  251. package/.medusa/server/src/api/admin/email/terms-versions/[id]/download/route.js +0 -16
  252. package/.medusa/server/src/api/admin/email/terms-versions/route.js +0 -47
  253. package/.medusa/server/src/api/terms-download-response.js +0 -12
  254. package/.medusa/server/src/modules/email/models/email-terms-version.js +0 -37
  255. package/dist/admin-components/features/plugin-features/components/ImageSettingInput.js +0 -42
  256. package/dist/admin-components/features/plugin-features/components/PluginFeaturesSettingsPage.js +0 -16
  257. package/dist/admin-components/features/plugin-features/components/PluginPageShell.js +0 -20
  258. package/dist/admin-components/features/plugin-features/lib/image-upload.d.ts +0 -6
  259. package/dist/admin-components/features/plugin-features/lib/image-upload.js +0 -17
  260. package/dist/admin-components/index.d.ts +0 -14
  261. package/dist/admin-components/index.js +0 -14
  262. package/dist/admin-components/lib/errors.d.ts +0 -6
  263. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/ImageSettingInput.d.ts +0 -0
  264. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginActionsSection.d.ts +0 -0
  265. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginDetailPage.d.ts +0 -0
  266. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginDetailPage.js +0 -0
  267. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginFeatureGate.d.ts +0 -0
  268. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginFeatureGate.js +0 -0
  269. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginFeatureSections.d.ts +0 -0
  270. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginFeatureSections.js +0 -0
  271. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginFeaturesCard.d.ts +0 -0
  272. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginFeaturesCard.js +0 -0
  273. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginFeaturesSettingsPage.d.ts +0 -0
  274. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginHubCard.d.ts +0 -0
  275. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginHubCard.js +0 -0
  276. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginPageShell.d.ts +0 -0
  277. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginSettingsForm.d.ts +0 -0
  278. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginStatusChips.d.ts +0 -0
  279. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginStatusChips.js +0 -0
  280. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/hooks/usePluginFeatureEnabled.js +0 -0
  281. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/hooks/usePluginSettingsForm.js +0 -0
  282. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/lib/plugin-paths.d.ts +0 -0
  283. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/lib/plugin-paths.js +0 -0
  284. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/queries/pluginFeatureKeys.d.ts +0 -0
  285. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/queries/pluginFeatureKeys.js +0 -0
  286. /package/{dist/admin-components → .medusa/server/src/admin/admin-components/shared}/lib/sdk.d.ts +0 -0
  287. /package/{dist/admin-components → .medusa/server/src/admin/admin-components/shared}/lib/sdk.js +0 -0
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isNonEmptyString = exports.isHttpUrl = exports.escapeHtml = exports.escapeLikePattern = exports.normalizeEmail = exports.normalizeVatNumber = exports.VAT_NUMBER_PLACEHOLDER = void 0;
4
+ /** Placeholder UID for development; never a real merchant UID. */
5
+ exports.VAT_NUMBER_PLACEHOLDER = "ATU00000000";
6
+ /** A VAT number without whitespace, upper-case: " atu 1234 5678 " -> "ATU12345678". */
7
+ const normalizeVatNumber = (value) => value.replace(/\s+/g, "").toUpperCase();
8
+ exports.normalizeVatNumber = normalizeVatNumber;
9
+ /**
10
+ * Provider-agnostic e-mail normalization: only surrounding whitespace and
11
+ * casing change (plus tags and dots can name different mailboxes). `null` for
12
+ * a blank value or one without a local part, "@" or domain; callers decide
13
+ * whether that is an error.
14
+ */
15
+ const normalizeEmail = (value) => {
16
+ const normalized = value?.trim().toLowerCase();
17
+ return normalized &&
18
+ normalized.includes("@") &&
19
+ !normalized.startsWith("@") &&
20
+ !normalized.endsWith("@")
21
+ ? normalized
22
+ : null;
23
+ };
24
+ exports.normalizeEmail = normalizeEmail;
25
+ /** Escapes `\`, `%` and `_` so a value matches literally in `LIKE` / `ILIKE`. */
26
+ const escapeLikePattern = (value) => value.replace(/[\\%_]/g, "\\$&");
27
+ exports.escapeLikePattern = escapeLikePattern;
28
+ /** Escapes text for HTML content and double- or single-quoted attributes. */
29
+ const escapeHtml = (value) => String(value ?? "")
30
+ .replaceAll("&", "&")
31
+ .replaceAll("<", "&lt;")
32
+ .replaceAll(">", "&gt;")
33
+ .replaceAll('"', "&quot;")
34
+ .replaceAll("'", "&#039;");
35
+ exports.escapeHtml = escapeHtml;
36
+ /** Whether the value parses as an absolute `http:` or `https:` URL. */
37
+ const isHttpUrl = (value) => {
38
+ if (!value) {
39
+ return false;
40
+ }
41
+ try {
42
+ const { protocol } = new URL(value);
43
+ return protocol === "http:" || protocol === "https:";
44
+ }
45
+ catch {
46
+ return false;
47
+ }
48
+ };
49
+ exports.isHttpUrl = isHttpUrl;
50
+ /** A string with at least one non-whitespace character. */
51
+ const isNonEmptyString = (value) => typeof value === "string" && value.trim().length > 0;
52
+ exports.isNonEmptyString = isNonEmptyString;
@@ -0,0 +1,26 @@
1
+ /** The raw SQL surface of a module's transaction manager (MikroORM). */
2
+ export type SqlManager = {
3
+ execute<T = unknown>(query: string, params?: unknown[], method?: string): Promise<T>;
4
+ flush?(): Promise<void>;
5
+ };
6
+ /**
7
+ * The transaction manager of a module service's shared context. Throws
8
+ * `UNEXPECTED_STATE` without one: raw SQL that relies on a lock or on
9
+ * atomicity must never silently run outside the surrounding transaction, so
10
+ * there is deliberately no fallback to `sharedContext.manager`.
11
+ */
12
+ export declare const requireTransactionManager: <T = SqlManager>(sharedContext: {
13
+ transactionManager?: unknown;
14
+ } | undefined, message?: string) => T;
15
+ /**
16
+ * Whether an error is a Postgres unique violation (SQLSTATE 23505), directly
17
+ * or nested in `cause` / `driverError`, or the `INVALID_DATA` MedusaError
18
+ * Medusa's database error mapper turns it into.
19
+ */
20
+ export declare const isUniqueConstraintViolation: (error: unknown) => boolean;
21
+ /**
22
+ * Takes a transaction-scoped Postgres advisory lock on a string key
23
+ * (`pg_advisory_xact_lock(hashtext(?))`): it serializes work for a business
24
+ * key before a row exists to lock, and releases on commit or rollback.
25
+ */
26
+ export declare const acquireAdvisoryXactLock: (manager: Pick<SqlManager, "execute">, key: string) => Promise<void>;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.acquireAdvisoryXactLock = exports.isUniqueConstraintViolation = exports.requireTransactionManager = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ /**
6
+ * The transaction manager of a module service's shared context. Throws
7
+ * `UNEXPECTED_STATE` without one: raw SQL that relies on a lock or on
8
+ * atomicity must never silently run outside the surrounding transaction, so
9
+ * there is deliberately no fallback to `sharedContext.manager`.
10
+ */
11
+ const requireTransactionManager = (sharedContext, message = "A database transaction manager is required.") => {
12
+ const manager = sharedContext?.transactionManager;
13
+ if (!manager) {
14
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, message);
15
+ }
16
+ return manager;
17
+ };
18
+ exports.requireTransactionManager = requireTransactionManager;
19
+ const UNIQUE_VIOLATION_CODE = "23505";
20
+ // Medusa's database error mapper words a unique violation like this:
21
+ // "Tax compliance validation with cart_id: cart_1, already exists."
22
+ const MAPPED_UNIQUE_VIOLATION_MESSAGE = /^[\s\S]+ with [^:]+: [\s\S]*already exists\.$/i;
23
+ const MAX_CAUSE_DEPTH = 5;
24
+ /**
25
+ * Whether an error is a Postgres unique violation (SQLSTATE 23505), directly
26
+ * or nested in `cause` / `driverError`, or the `INVALID_DATA` MedusaError
27
+ * Medusa's database error mapper turns it into.
28
+ */
29
+ const isUniqueConstraintViolation = (error) => {
30
+ let current = error;
31
+ for (let depth = 0; depth < MAX_CAUSE_DEPTH; depth += 1) {
32
+ if (typeof current !== "object" || current === null) {
33
+ return false;
34
+ }
35
+ if (current.code === UNIQUE_VIOLATION_CODE) {
36
+ return true;
37
+ }
38
+ if (utils_1.MedusaError.isMedusaError(current) &&
39
+ current.type === utils_1.MedusaError.Types.INVALID_DATA &&
40
+ MAPPED_UNIQUE_VIOLATION_MESSAGE.test(current.message)) {
41
+ return true;
42
+ }
43
+ const next = current;
44
+ current = next.cause ?? next.driverError;
45
+ }
46
+ return false;
47
+ };
48
+ exports.isUniqueConstraintViolation = isUniqueConstraintViolation;
49
+ /**
50
+ * Takes a transaction-scoped Postgres advisory lock on a string key
51
+ * (`pg_advisory_xact_lock(hashtext(?))`): it serializes work for a business
52
+ * key before a row exists to lock, and releases on commit or rollback.
53
+ */
54
+ const acquireAdvisoryXactLock = async (manager, key) => {
55
+ await manager.execute("select pg_advisory_xact_lock(hashtext(?))", [key]);
56
+ };
57
+ exports.acquireAdvisoryXactLock = acquireAdvisoryXactLock;
@@ -0,0 +1,6 @@
1
+ import type { z } from "@medusajs/framework/zod";
2
+ /**
3
+ * Serializes module values exactly as HTTP JSON does, then validates and strips
4
+ * fields that aren't part of the deliberate public response contract.
5
+ */
6
+ export declare const toWireResponse: <TSchema extends z.ZodTypeAny>(schema: TSchema, value: unknown) => z.infer<TSchema>;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toWireResponse = void 0;
4
+ /**
5
+ * Serializes module values exactly as HTTP JSON does, then validates and strips
6
+ * fields that aren't part of the deliberate public response contract.
7
+ */
8
+ const toWireResponse = (schema, value) => schema.parse(JSON.parse(JSON.stringify(value)));
9
+ exports.toWireResponse = toWireResponse;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.assertFoodShopConfigOptions = assertFoodShopConfigOptions;
4
+ const lib_1 = require("../shared/lib");
4
5
  const fail = (name, expectation) => {
5
6
  throw new TypeError(`Food shop option "${name}" must be ${expectation}.`);
6
7
  };
@@ -18,10 +19,7 @@ const requireCountryCode = (value, name) => {
18
19
  };
19
20
  const requireTimeZone = (value, name) => {
20
21
  const timeZone = requireText(value, name);
21
- try {
22
- new Intl.DateTimeFormat("en-US", { timeZone });
23
- }
24
- catch {
22
+ if (!(0, lib_1.isValidTimeZone)(timeZone)) {
25
23
  return fail(name, 'a valid IANA time zone such as "Europe/Vienna"');
26
24
  }
27
25
  return timeZone;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hartl-services/medusa-base",
3
- "version": "2.5.0",
3
+ "version": "2.6.0",
4
4
  "description": "Base plugin for Hartl Services Medusa shops: per-plugin feature toggles with a generic Admin settings page, a Store endpoint for storefronts, enforcement helpers, the complete-cart hook composition, the root redirect, cart-promotion link repair, the built-in E-Mail, Documents and S3 file storage modules, config helpers with the turnkey food-shop preset, and the Sentry logger wrapper and instrumentation.",
5
5
  "license": "MIT",
6
6
  "files": [
@@ -58,9 +58,14 @@
58
58
  "import": "./dist/public/instrumentation.js",
59
59
  "require": "./dist/public/instrumentation.js"
60
60
  },
61
+ "./lib": {
62
+ "types": "./dist/shared/lib/index.d.ts",
63
+ "import": "./dist/shared/lib/index.js",
64
+ "require": "./dist/shared/lib/index.js"
65
+ },
61
66
  "./admin-components": {
62
- "types": "./dist/admin-components/index.d.ts",
63
- "import": "./dist/admin-components/index.js"
67
+ "types": "./.medusa/server/src/admin/admin-components/index.d.ts",
68
+ "import": "./.medusa/server/src/admin/admin-components/index.js"
64
69
  },
65
70
  "./providers/*": "./.medusa/server/src/providers/*/index.js",
66
71
  "./.medusa/server/src/modules/*": "./.medusa/server/src/modules/*/index.js",
@@ -73,27 +78,36 @@
73
78
  "peerDependencies": {
74
79
  "@medusajs/admin-sdk": "^2.19.0",
75
80
  "@medusajs/framework": "^2.19.0",
81
+ "@medusajs/icons": "^2.19.0",
76
82
  "@medusajs/js-sdk": "^2.19.0",
77
83
  "@medusajs/medusa": "^2.19.0",
78
84
  "@medusajs/ui": "^4.2.1",
79
85
  "@sentry/node": "^10.74.0",
80
86
  "@tanstack/react-query": "^5.64.2",
81
87
  "react": "^18.3.1",
88
+ "react-dom": "^18.3.1",
82
89
  "react-router-dom": "^7.18.2"
83
90
  },
84
91
  "dependencies": {
85
92
  "@aws-sdk/client-s3": "^3.948.0",
86
93
  "@aws-sdk/lib-storage": "^3.954.0",
94
+ "@floating-ui/dom": "1.7.4",
95
+ "@tiptap/extension-link": "3.31.4",
96
+ "@tiptap/pm": "3.31.4",
97
+ "@tiptap/react": "3.31.4",
98
+ "@tiptap/starter-kit": "3.31.4",
99
+ "@tiptap/suggestion": "3.31.4",
87
100
  "jsonwebtoken": "9.0.3",
88
101
  "mime-types": "3.0.1",
89
102
  "nodemailer": "6.10.1",
90
103
  "ulid": "^2.4.0",
91
- "@hartl-services/medusa-food-supplements-contracts": "^0.25.0"
104
+ "@hartl-services/medusa-food-supplements-contracts": "^0.26.0"
92
105
  },
93
106
  "devDependencies": {
94
107
  "@medusajs/admin-sdk": "2.19.0",
95
108
  "@medusajs/cli": "2.19.0",
96
109
  "@medusajs/framework": "2.19.0",
110
+ "@medusajs/icons": "2.19.0",
97
111
  "@medusajs/js-sdk": "2.19.0",
98
112
  "@medusajs/medusa": "2.19.0",
99
113
  "@medusajs/test-utils": "2.19.0",
@@ -114,6 +128,7 @@
114
128
  "jest": "^29.7.0",
115
129
  "mailparser": "3.7.2",
116
130
  "react": "^18.3.1",
131
+ "react-dom": "^18.3.1",
117
132
  "react-router-dom": "7.18.2",
118
133
  "smtp-server": "3.13.6",
119
134
  "typescript": "^5.6.2",
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GET = void 0;
4
- const utils_1 = require("@medusajs/framework/utils");
5
- const email_1 = require("../../../../../../modules/email");
6
- const terms_download_response_1 = require("../../../../../terms-download-response");
7
- const GET = async (req, res) => {
8
- const email = req.scope.resolve(email_1.EMAIL_MODULE);
9
- const version = await email.getEmailTermsVersionFile(req.params.id);
10
- const files = req.scope.resolve(utils_1.Modules.FILE);
11
- const stream = await files.getDownloadStream(version.file_id);
12
- (0, terms_download_response_1.setTermsDownloadHeaders)(res, version.filename);
13
- stream.pipe(res);
14
- };
15
- exports.GET = GET;
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2VtYWlsL3Rlcm1zLXZlcnNpb25zL1tpZF0vZG93bmxvYWQvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0EscURBQW9EO0FBRXBELDJEQUErRDtBQUUvRCxvRkFBaUY7QUFFMUUsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUN0QixHQUErQixFQUMvQixHQUFtQixFQUNKLEVBQUU7SUFDakIsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQXFCLG9CQUFZLENBQUMsQ0FBQztJQUNsRSxNQUFNLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFxQixlQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlELElBQUEsaURBQXVCLEVBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLENBQUMsQ0FBQztBQVZXLFFBQUEsR0FBRyxPQVVkIn0=
@@ -1,47 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.POST = exports.GET = void 0;
4
- const node_crypto_1 = require("node:crypto");
5
- const utils_1 = require("@medusajs/framework/utils");
6
- const email_1 = require("@hartl-services/medusa-food-supplements-contracts/schemas/email");
7
- const email_2 = require("../../../../modules/email");
8
- const decodePdf = (contentBase64) => {
9
- const content = Buffer.from(contentBase64, "base64");
10
- if (content.length < 1 ||
11
- content.length > email_1.EMAIL_TERMS_MAX_PDF_BYTES ||
12
- content.toString("base64") !== contentBase64 ||
13
- content.subarray(0, 5).toString("ascii") !== "%PDF-") {
14
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "content_base64 must contain a valid PDF of at most 5 MiB.");
15
- }
16
- return content;
17
- };
18
- const GET = async (req, res) => {
19
- const email = req.scope.resolve(email_2.EMAIL_MODULE);
20
- const response = email_1.ListAdminEmailTermsVersionsResponseSchema.parse(await email.listAdminEmailTermsVersions(req.validatedQuery));
21
- res.json(response);
22
- };
23
- exports.GET = GET;
24
- const POST = async (req, res) => {
25
- const body = req.validatedBody;
26
- const content = decodePdf(body.content_base64);
27
- const email = req.scope.resolve(email_2.EMAIL_MODULE);
28
- const files = req.scope.resolve(utils_1.Modules.FILE);
29
- const result = await email.createEmailTermsVersion({
30
- request_id: body.request_id,
31
- filename: body.filename,
32
- effective_at: new Date(body.effective_at),
33
- byte_size: content.byteLength,
34
- sha256: (0, node_crypto_1.createHash)("sha256").update(content).digest("hex"),
35
- }, async () => (await files.createFiles({
36
- filename: body.filename,
37
- mimeType: "application/pdf",
38
- content: content.toString("base64"),
39
- access: "private",
40
- })).id, async (fileId) => {
41
- await files.deleteFiles([fileId]);
42
- });
43
- const response = email_1.CreateAdminEmailTermsVersionResponseSchema.parse(result);
44
- res.status(result.created ? 201 : 200).json(response);
45
- };
46
- exports.POST = POST;
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2VtYWlsL3Rlcm1zLXZlcnNpb25zL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUF5QztBQU96QyxxREFBaUU7QUFDakUsMkZBSXlFO0FBUXpFLHFEQUF5RDtBQUd6RCxNQUFNLFNBQVMsR0FBRyxDQUFDLGFBQXFCLEVBQVUsRUFBRTtJQUNsRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNyRCxJQUNFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUNsQixPQUFPLENBQUMsTUFBTSxHQUFHLGlDQUF5QjtRQUMxQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLGFBQWE7UUFDNUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLE9BQU8sRUFDcEQsQ0FBQztRQUNELE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLDJEQUEyRCxDQUM1RCxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUVLLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFDdEIsR0FBd0UsRUFDeEUsR0FBd0QsRUFDekMsRUFBRTtJQUNqQixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBcUIsb0JBQVksQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sUUFBUSxHQUFHLGlEQUF5QyxDQUFDLEtBQUssQ0FDOUQsTUFBTSxLQUFLLENBQUMsMkJBQTJCLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUM1RCxDQUFDO0lBQ0YsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNyQixDQUFDLENBQUM7QUFUVyxRQUFBLEdBQUcsT0FTZDtBQUVLLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFDdkIsR0FBNkQsRUFDN0QsR0FBeUQsRUFDMUMsRUFBRTtJQUNqQixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDO0lBQy9CLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDL0MsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQXFCLG9CQUFZLENBQUMsQ0FBQztJQUNsRSxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBcUIsZUFBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLHVCQUF1QixDQUNoRDtRQUNFLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtRQUMzQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7UUFDdkIsWUFBWSxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDekMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxVQUFVO1FBQzdCLE1BQU0sRUFBRSxJQUFBLHdCQUFVLEVBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7S0FDM0QsRUFDRCxLQUFLLElBQUksRUFBRSxDQUNULENBQ0UsTUFBTSxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3RCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtRQUN2QixRQUFRLEVBQUUsaUJBQWlCO1FBQzNCLE9BQU8sRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUNuQyxNQUFNLEVBQUUsU0FBUztLQUNsQixDQUFDLENBQ0gsQ0FBQyxFQUFFLEVBQ04sS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ2YsTUFBTSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwQyxDQUFDLENBQ0YsQ0FBQztJQUNGLE1BQU0sUUFBUSxHQUFHLGtEQUEwQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxRSxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3hELENBQUMsQ0FBQztBQS9CVyxRQUFBLElBQUksUUErQmYifQ==
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setTermsDownloadHeaders = void 0;
4
- const safeFilename = (filename) => filename.replaceAll(/[^a-zA-Z0-9._-]/g, "_");
5
- const setTermsDownloadHeaders = (res, filename) => {
6
- res.setHeader("Cache-Control", "private, no-store, max-age=0");
7
- res.setHeader("Content-Type", "application/pdf");
8
- res.setHeader("Content-Disposition", `attachment; filename="${safeFilename(filename)}"`);
9
- res.setHeader("X-Content-Type-Options", "nosniff");
10
- };
11
- exports.setTermsDownloadHeaders = setTermsDownloadHeaders;
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybXMtZG93bmxvYWQtcmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL3Rlcm1zLWRvd25sb2FkLXJlc3BvbnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLE1BQU0sWUFBWSxHQUFHLENBQUMsUUFBZ0IsRUFBVSxFQUFFLENBQ2hELFFBQVEsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFFeEMsTUFBTSx1QkFBdUIsR0FBRyxDQUNyQyxHQUFtQixFQUNuQixRQUFnQixFQUNWLEVBQUU7SUFDUixHQUFHLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSw4QkFBOEIsQ0FBQyxDQUFDO0lBQy9ELEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDakQsR0FBRyxDQUFDLFNBQVMsQ0FDWCxxQkFBcUIsRUFDckIseUJBQXlCLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUNuRCxDQUFDO0lBQ0YsR0FBRyxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNyRCxDQUFDLENBQUM7QUFYVyxRQUFBLHVCQUF1QiwyQkFXbEMifQ==
@@ -1,37 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const utils_1 = require("@medusajs/framework/utils");
4
- const EmailTermsVersion = utils_1.model
5
- .define({
6
- name: "email_terms_version",
7
- tableName: "email_terms_version",
8
- }, {
9
- id: utils_1.model.id({ prefix: "eterm" }).primaryKey(),
10
- request_id: utils_1.model.text(),
11
- filename: utils_1.model.text(),
12
- file_id: utils_1.model.text(),
13
- effective_at: utils_1.model.dateTime(),
14
- byte_size: utils_1.model.number(),
15
- sha256: utils_1.model.text(),
16
- })
17
- .indexes([
18
- {
19
- name: "IDX_email_terms_version_request_id_unique",
20
- on: ["request_id"],
21
- unique: true,
22
- where: null,
23
- },
24
- {
25
- name: "IDX_email_terms_version_file_id_unique",
26
- on: ["file_id"],
27
- unique: true,
28
- where: null,
29
- },
30
- {
31
- name: "IDX_email_terms_version_effective_at",
32
- on: ["effective_at"],
33
- where: "deleted_at IS NULL",
34
- },
35
- ]);
36
- exports.default = EmailTermsVersion;
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtdGVybXMtdmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2VtYWlsL21vZGVscy9lbWFpbC10ZXJtcy12ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscURBQWtEO0FBRWxELE1BQU0saUJBQWlCLEdBQUcsYUFBSztLQUM1QixNQUFNLENBQ0w7SUFDRSxJQUFJLEVBQUUscUJBQXFCO0lBQzNCLFNBQVMsRUFBRSxxQkFBcUI7Q0FDakMsRUFDRDtJQUNFLEVBQUUsRUFBRSxhQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFO0lBQzlDLFVBQVUsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQ3hCLFFBQVEsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQ3RCLE9BQU8sRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQ3JCLFlBQVksRUFBRSxhQUFLLENBQUMsUUFBUSxFQUFFO0lBQzlCLFNBQVMsRUFBRSxhQUFLLENBQUMsTUFBTSxFQUFFO0lBQ3pCLE1BQU0sRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0NBQ3JCLENBQ0Y7S0FDQSxPQUFPLENBQUM7SUFDUDtRQUNFLElBQUksRUFBRSwyQ0FBMkM7UUFDakQsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDO1FBQ2xCLE1BQU0sRUFBRSxJQUFJO1FBQ1osS0FBSyxFQUFFLElBQUk7S0FDWjtJQUNEO1FBQ0UsSUFBSSxFQUFFLHdDQUF3QztRQUM5QyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUM7UUFDZixNQUFNLEVBQUUsSUFBSTtRQUNaLEtBQUssRUFBRSxJQUFJO0tBQ1o7SUFDRDtRQUNFLElBQUksRUFBRSxzQ0FBc0M7UUFDNUMsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDO1FBQ3BCLEtBQUssRUFBRSxvQkFBb0I7S0FDNUI7Q0FDRixDQUFDLENBQUM7QUFFTCxrQkFBZSxpQkFBaUIsQ0FBQyJ9
@@ -1,42 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Button, Hint, Text } from "@medusajs/ui";
3
- import { useMutation } from "@tanstack/react-query";
4
- import { useRef, useState } from "react";
5
- import { texts } from "../../../i18n/texts";
6
- import { sdk } from "../../../lib/sdk";
7
- import { validateSettingImage } from "../lib/image-upload";
8
- /**
9
- * Uploads an image to the public File Module storage and hands its URL to
10
- * the settings draft; the form stores it on save like any other value.
11
- */
12
- export const ImageSettingInput = ({ id, hintId, label, value, disabled, onChange, }) => {
13
- const fileInput = useRef(null);
14
- const [error, setError] = useState(null);
15
- const upload = useMutation({
16
- mutationFn: async (file) => {
17
- const { files } = await sdk.admin.upload.create({ files: [file] });
18
- const url = files[0]?.url;
19
- if (!url) {
20
- throw new Error("upload returned no file");
21
- }
22
- return url;
23
- },
24
- onSuccess: (url) => onChange(url),
25
- onError: () => setError(texts.settings.imageUploadFailed),
26
- });
27
- const busy = disabled || upload.isPending;
28
- const selectFile = (file) => {
29
- if (!file) {
30
- return;
31
- }
32
- const invalid = validateSettingImage(file);
33
- setError(invalid);
34
- if (!invalid) {
35
- upload.mutate(file);
36
- }
37
- };
38
- return (_jsxs("div", { className: "grid gap-2", children: [value && (_jsx("div", { className: "bg-ui-bg-subtle flex items-center justify-center rounded-md border p-4", children: _jsx("img", { src: value, alt: texts.settings.imagePreviewAlt(label), className: "max-h-24 max-w-full object-contain" }) })), _jsx("input", { ref: fileInput, id: id, "aria-describedby": hintId, type: "file", accept: "image/png,image/jpeg", className: "hidden", onChange: (event) => {
39
- selectFile(event.target.files?.[0]);
40
- event.target.value = "";
41
- } }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Button, { type: "button", size: "small", variant: "secondary", isLoading: upload.isPending, disabled: busy, onClick: () => fileInput.current?.click(), children: value ? texts.settings.imageReplace : texts.settings.imageUpload }), value && (_jsx(Button, { type: "button", size: "small", variant: "transparent", disabled: busy, onClick: () => onChange(""), children: texts.settings.imageRemove })), !value && (_jsx(Text, { size: "small", className: "text-ui-fg-muted", children: texts.settings.imageNone }))] }), error && _jsx(Hint, { variant: "error", children: error })] }));
42
- };
@@ -1,16 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Button, Container, Heading, Text } from "@medusajs/ui";
3
- import { texts } from "../../../i18n/texts";
4
- import { usePluginFeatures } from "../hooks/usePluginFeatures";
5
- import { PluginHubCard } from "./PluginHubCard";
6
- /**
7
- * Hub: one card per installed plugin. Plugins that cannot be switched off
8
- * (the shop master data) come first; the rest keep the server's order.
9
- */
10
- export const PluginFeaturesSettingsPage = () => {
11
- const query = usePluginFeatures();
12
- return (_jsxs("div", { className: "flex flex-col gap-y-3", children: [_jsxs(Container, { className: "px-6 py-4", children: [_jsx(Heading, { level: "h1", children: texts.page.title }), _jsx(Text, { className: "text-ui-fg-subtle", children: texts.page.description })] }), query.isPending ? (_jsx(Container, { children: _jsx(Text, { className: "text-ui-fg-subtle", children: texts.states.loading }) })) : query.isError ? (_jsxs(Container, { className: "flex flex-wrap items-center justify-between gap-3", children: [_jsx(Text, { className: "text-ui-fg-error", children: texts.states.error }), _jsx(Button, { size: "small", variant: "secondary", isLoading: query.isFetching, onClick: () => void query.refetch(), children: texts.states.retry })] })) : query.data.plugins.length === 0 ? (_jsx(Container, { children: _jsx(Text, { className: "text-ui-fg-subtle", children: texts.states.empty }) })) : ([
13
- ...query.data.plugins.filter((plugin) => !plugin.switchable),
14
- ...query.data.plugins.filter((plugin) => plugin.switchable),
15
- ].map((plugin) => (_jsx(PluginHubCard, { plugin: plugin }, plugin.plugin_key))))] }));
16
- };
@@ -1,20 +0,0 @@
1
- import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { Button, Container, Heading, Text } from "@medusajs/ui";
3
- import { Link } from "react-router-dom";
4
- import { texts } from "../../../i18n/texts";
5
- import { usePluginFeature } from "../hooks/usePluginFeatures";
6
- import { PLUGIN_HUB_PATH } from "../lib/plugin-paths";
7
- import { PluginStatusChips } from "./PluginStatusChips";
8
- const isNotFound = (error) => typeof error === "object" &&
9
- error !== null &&
10
- error.status === 404;
11
- /**
12
- * Frame of a plugin's page: back link to the hub, the plugin's label,
13
- * description and status, then `children`. Shows loading, not-installed and
14
- * error states instead of `children`.
15
- */
16
- export const PluginPageShell = ({ pluginKey, children }) => {
17
- const query = usePluginFeature(pluginKey);
18
- const plugin = query.data?.plugin;
19
- return (_jsxs("div", { className: "flex flex-col gap-y-3", children: [_jsx("div", { children: _jsxs(Link, { to: PLUGIN_HUB_PATH, className: "text-ui-fg-subtle hover:text-ui-fg-base txt-compact-small-plus", children: ["\u2190 ", texts.detail.back] }) }), plugin ? (_jsxs(_Fragment, { children: [_jsxs(Container, { className: "px-6 py-4", children: [_jsx(Heading, { level: "h1", children: plugin.label }), plugin.description && (_jsx(Text, { className: "text-ui-fg-subtle", children: plugin.description })), _jsx(PluginStatusChips, { plugin: plugin })] }), children] })) : query.isPending ? (_jsx(Container, { children: _jsx(Text, { className: "text-ui-fg-subtle", children: texts.states.loading }) })) : isNotFound(query.error) ? (_jsx(Container, { children: _jsx(Text, { className: "text-ui-fg-subtle", children: texts.states.notFound }) })) : (_jsxs(Container, { className: "flex flex-wrap items-center justify-between gap-3", children: [_jsx(Text, { className: "text-ui-fg-error", children: texts.states.error }), _jsx(Button, { size: "small", variant: "secondary", isLoading: query.isFetching, onClick: () => void query.refetch(), children: texts.states.retry })] }))] }));
20
- };
@@ -1,6 +0,0 @@
1
- /** Largest image an `image` setting accepts in the Admin. */
2
- export declare const SETTING_IMAGE_MAX_BYTES: number;
3
- type ImageSelection = Pick<File, "size" | "type">;
4
- /** Why `file` cannot be uploaded for an `image` setting; `null` = valid. */
5
- export declare const validateSettingImage: (file: ImageSelection) => string | null;
6
- export {};
@@ -1,17 +0,0 @@
1
- /** Largest image an `image` setting accepts in the Admin. */
2
- export const SETTING_IMAGE_MAX_BYTES = 2 * 1024 * 1024;
3
- // Gmail and Outlook do not display SVG or WebP in e-mails.
4
- const IMAGE_TYPES = new Set(["image/png", "image/jpeg"]);
5
- /** Why `file` cannot be uploaded for an `image` setting; `null` = valid. */
6
- export const validateSettingImage = (file) => {
7
- if (!IMAGE_TYPES.has(file.type)) {
8
- return "Bitte eine PNG- oder JPG-Datei auswählen.";
9
- }
10
- if (file.size === 0) {
11
- return "Die Bilddatei ist leer.";
12
- }
13
- if (file.size > SETTING_IMAGE_MAX_BYTES) {
14
- return "Die Bilddatei darf maximal 2 MiB groß sein.";
15
- }
16
- return null;
17
- };
@@ -1,14 +0,0 @@
1
- /**
2
- * Entry of `@hartl-services/medusa-base/admin-components` (built by
3
- * `tsconfig.admin-components.json` into `dist/admin-components`). Not an
4
- * Admin extension: routes and widgets live in `routes/`.
5
- *
6
- * Other plugins compose these into their own Admin page. Everything here
7
- * uses the host Admin's React, React Query, React Router and `@medusajs/ui`.
8
- */
9
- export { PluginPageShell } from "./features/plugin-features/components/PluginPageShell";
10
- export { PluginFeatureSections } from "./features/plugin-features/components/PluginFeatureSections";
11
- export { PluginFeatureDisabledNotice, PluginFeatureGate, } from "./features/plugin-features/components/PluginFeatureGate";
12
- export { usePluginFeature } from "./features/plugin-features/hooks/usePluginFeatures";
13
- export { usePluginFeatureEnabled, type PluginFeatureEnabledState, } from "./features/plugin-features/hooks/usePluginFeatureEnabled";
14
- export { pluginFeatureKeys } from "./features/plugin-features/queries/pluginFeatureKeys";
@@ -1,14 +0,0 @@
1
- /**
2
- * Entry of `@hartl-services/medusa-base/admin-components` (built by
3
- * `tsconfig.admin-components.json` into `dist/admin-components`). Not an
4
- * Admin extension: routes and widgets live in `routes/`.
5
- *
6
- * Other plugins compose these into their own Admin page. Everything here
7
- * uses the host Admin's React, React Query, React Router and `@medusajs/ui`.
8
- */
9
- export { PluginPageShell } from "./features/plugin-features/components/PluginPageShell";
10
- export { PluginFeatureSections } from "./features/plugin-features/components/PluginFeatureSections";
11
- export { PluginFeatureDisabledNotice, PluginFeatureGate, } from "./features/plugin-features/components/PluginFeatureGate";
12
- export { usePluginFeature } from "./features/plugin-features/hooks/usePluginFeatures";
13
- export { usePluginFeatureEnabled, } from "./features/plugin-features/hooks/usePluginFeatureEnabled";
14
- export { pluginFeatureKeys } from "./features/plugin-features/queries/pluginFeatureKeys";
@@ -1,6 +0,0 @@
1
- /**
2
- * Extracts a human-readable message from an unknown thrown value / failed
3
- * response. Returns `undefined` when nothing usable is found so callers can
4
- * fall back to a localized "unknown error" string instead of a hard-coded one.
5
- */
6
- export declare const getErrorMessage: (error: unknown) => string | undefined;