@hartl-services/medusa-base 2.5.0 → 2.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +4519 -1447
  97. package/.medusa/server/src/admin/index.mjs +4521 -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
@@ -1,3 +1,11 @@
1
1
  import type { MedusaContainer } from "@medusajs/framework/types";
2
2
  /** Resolves the base module or fails with a clear `UNEXPECTED_STATE`. */
3
3
  export declare const resolveBaseModule: <T>(container: MedusaContainer) => T;
4
+ /**
5
+ * Whether the base module is registered, for a boot-time check that names the
6
+ * problem ("add @hartl-services/medusa-base to medusa-config") instead of
7
+ * failing at the first request.
8
+ */
9
+ export declare const isBasePluginRegistered: (container: {
10
+ hasRegistration(name: string): boolean;
11
+ }) => boolean;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolveBaseModule = void 0;
3
+ exports.isBasePluginRegistered = exports.resolveBaseModule = void 0;
4
4
  const utils_1 = require("@medusajs/framework/utils");
5
5
  const constants_1 = require("./constants");
6
6
  /** Resolves the base module or fails with a clear `UNEXPECTED_STATE`. */
@@ -11,3 +11,10 @@ const resolveBaseModule = (container) => {
11
11
  return container.resolve(constants_1.PLUGIN_FEATURES_MODULE);
12
12
  };
13
13
  exports.resolveBaseModule = resolveBaseModule;
14
+ /**
15
+ * Whether the base module is registered, for a boot-time check that names the
16
+ * problem ("add @hartl-services/medusa-base to medusa-config") instead of
17
+ * failing at the first request.
18
+ */
19
+ const isBasePluginRegistered = (container) => container.hasRegistration(constants_1.PLUGIN_FEATURES_MODULE);
20
+ exports.isBasePluginRegistered = isBasePluginRegistered;
@@ -1,12 +1,14 @@
1
1
  import type { MedusaContainer } from "@medusajs/framework/types";
2
2
  /**
3
- * The base's own descriptor: the shop's master data (Firmenangaben), edited
4
- * on the generic plugin page like any plugin's settings. It cannot be
3
+ * The base's own descriptor: the shop's master data (Firmenangaben) and its
4
+ * appearance (logo and colors of the default e-mail and document layouts),
5
+ * edited on the generic plugin page like any plugin's settings. It cannot be
5
6
  * switched off and declares no features.
6
7
  */
7
- export declare const shopMasterDataDescriptor: import("./types").PluginFeatureDescriptor<string, "country_code" | "legal_name" | "address_line1" | "address_line2" | "postal_code" | "city" | "vat_number" | "email" | "phone" | "website" | "iban" | "bic" | "company_register_number" | "company_register_court", never>;
8
- /** Keys of the shop master data settings. */
9
- export type ShopMasterDataKey = "legal_name" | "address_line1" | "address_line2" | "postal_code" | "city" | "country_code" | "vat_number" | "email" | "phone" | "website" | "iban" | "bic" | "company_register_number" | "company_register_court";
8
+ export declare const shopMasterDataDescriptor: import("./types").PluginFeatureDescriptor<string, "legal_name" | "address_line1" | "address_line2" | "postal_code" | "city" | "country_code" | "vat_number" | "email" | "phone" | "website" | "iban" | "bic" | "company_register_number" | "company_register_court" | "logo" | "color_accent" | "color_text" | "color_muted" | "color_line" | "color_surface", never>;
9
+ declare const SHOP_MASTER_DATA_KEYS: readonly ["legal_name", "address_line1", "address_line2", "postal_code", "city", "country_code", "vat_number", "email", "phone", "website", "iban", "bic", "company_register_number", "company_register_court"];
10
+ /** Keys of the shop master data (company) settings. */
11
+ export type ShopMasterDataKey = (typeof SHOP_MASTER_DATA_KEYS)[number];
10
12
  /** Every key that has a value (stored > fallback). All values are strings. */
11
13
  export type ShopMasterData = Partial<Record<ShopMasterDataKey, string>>;
12
14
  export type ResolvedShopMasterData = {
@@ -22,3 +24,18 @@ export type ResolvedShopMasterData = {
22
24
  * `UNEXPECTED_STATE`; read failures propagate.
23
25
  */
24
26
  export declare function getShopMasterData(container: MedusaContainer): Promise<ResolvedShopMasterData>;
27
+ /** Colors of the default e-mail and document layouts; unset = their default. */
28
+ export type ShopAppearanceColors = Partial<Record<"accent" | "text" | "muted" | "line" | "surface", string>>;
29
+ export type ShopAppearance = {
30
+ /** Public http(s) URL of the logo, when one is set. */
31
+ logo?: string;
32
+ /** Lowercase `#rrggbb` values; only the colors that are set. */
33
+ colors: ShopAppearanceColors;
34
+ };
35
+ /**
36
+ * The shop's appearance (Erscheinungsbild) for server-side code, as stored
37
+ * in the Admin. A missing base plugin fails with `UNEXPECTED_STATE`; read
38
+ * failures propagate.
39
+ */
40
+ export declare function getShopAppearance(container: MedusaContainer): Promise<ShopAppearance>;
41
+ export {};
@@ -2,27 +2,33 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.shopMasterDataDescriptor = void 0;
4
4
  exports.getShopMasterData = getShopMasterData;
5
+ exports.getShopAppearance = getShopAppearance;
5
6
  const descriptor_1 = require("./descriptor");
6
7
  const settings_1 = require("./settings");
8
+ const COMPANY = "Firmendaten";
9
+ const APPEARANCE = "Erscheinungsbild";
10
+ const DEFAULT_COLOR_HINT = "Leer lassen für die Standardfarbe von E-Mails und Dokumenten.";
7
11
  /**
8
- * The base's own descriptor: the shop's master data (Firmenangaben), edited
9
- * on the generic plugin page like any plugin's settings. It cannot be
12
+ * The base's own descriptor: the shop's master data (Firmenangaben) and its
13
+ * appearance (logo and colors of the default e-mail and document layouts),
14
+ * edited on the generic plugin page like any plugin's settings. It cannot be
10
15
  * switched off and declares no features.
11
16
  */
12
17
  exports.shopMasterDataDescriptor = (0, descriptor_1.definePluginFeatures)({
13
18
  plugin_key: "shop",
14
19
  label: "Shop-Stammdaten",
15
- description: "Firmenangaben des Shops für E-Mails, Rechnungen, Dokumente und Steuerprüfungen.",
20
+ description: "Firmenangaben des Shops für E-Mails, Rechnungen, Dokumente und Steuerprüfungen sowie Logo und Farben von E-Mails und Dokumenten.",
16
21
  switchable: false,
17
22
  features: [],
18
23
  settings: [
19
- { key: "legal_name", label: "Firmenname", type: "string", required: true },
20
- { key: "address_line1", label: "Adresse", type: "string", required: true },
21
- { key: "address_line2", label: "Adresszusatz", type: "string" },
22
- { key: "postal_code", label: "Postleitzahl", type: "string", required: true },
23
- { key: "city", label: "Ort", type: "string", required: true },
24
+ { key: "legal_name", group: COMPANY, label: "Firmenname", type: "string", required: true },
25
+ { key: "address_line1", group: COMPANY, label: "Adresse", type: "string", required: true },
26
+ { key: "address_line2", group: COMPANY, label: "Adresszusatz", type: "string" },
27
+ { key: "postal_code", group: COMPANY, label: "Postleitzahl", type: "string", required: true },
28
+ { key: "city", group: COMPANY, label: "Ort", type: "string", required: true },
24
29
  {
25
30
  key: "country_code",
31
+ group: COMPANY,
26
32
  label: "Land",
27
33
  type: "select",
28
34
  required: true,
@@ -63,16 +69,74 @@ exports.shopMasterDataDescriptor = (0, descriptor_1.definePluginFeatures)({
63
69
  { value: "cy", label: "Zypern" },
64
70
  ],
65
71
  },
66
- { key: "vat_number", label: "UID-Nummer", type: "string", required: true },
67
- { key: "email", label: "E-Mail", type: "string" },
68
- { key: "phone", label: "Telefon", type: "string" },
69
- { key: "website", label: "Website", type: "url" },
70
- { key: "iban", label: "IBAN", type: "string" },
71
- { key: "bic", label: "BIC", type: "string" },
72
- { key: "company_register_number", label: "Firmenbuchnummer", type: "string" },
73
- { key: "company_register_court", label: "Firmenbuchgericht", type: "string" },
72
+ { key: "vat_number", group: COMPANY, label: "UID-Nummer", type: "string", required: true },
73
+ { key: "email", group: COMPANY, label: "E-Mail", type: "string" },
74
+ { key: "phone", group: COMPANY, label: "Telefon", type: "string" },
75
+ { key: "website", group: COMPANY, label: "Website", type: "url" },
76
+ { key: "iban", group: COMPANY, label: "IBAN", type: "string" },
77
+ { key: "bic", group: COMPANY, label: "BIC", type: "string" },
78
+ { key: "company_register_number", group: COMPANY, label: "Firmenbuchnummer", type: "string" },
79
+ { key: "company_register_court", group: COMPANY, label: "Firmenbuchgericht", type: "string" },
80
+ {
81
+ key: "logo",
82
+ group: APPEARANCE,
83
+ label: "Logo",
84
+ description: "PNG oder JPG, erscheint oben in den E-Mails und auf Rechnungen und Lieferscheinen. Ohne Logo steht dort der Firmenname bzw. Shopname.",
85
+ type: "image",
86
+ },
87
+ {
88
+ key: "color_accent",
89
+ group: APPEARANCE,
90
+ label: "Akzentfarbe",
91
+ description: `Buttons, Überschriften und Links. ${DEFAULT_COLOR_HINT}`,
92
+ type: "color",
93
+ },
94
+ {
95
+ key: "color_text",
96
+ group: APPEARANCE,
97
+ label: "Textfarbe",
98
+ description: `Fließtext und Beträge. ${DEFAULT_COLOR_HINT}`,
99
+ type: "color",
100
+ },
101
+ {
102
+ key: "color_muted",
103
+ group: APPEARANCE,
104
+ label: "Nebentextfarbe",
105
+ description: `Beschriftungen, Hinweise und Fußzeilen. ${DEFAULT_COLOR_HINT}`,
106
+ type: "color",
107
+ },
108
+ {
109
+ key: "color_line",
110
+ group: APPEARANCE,
111
+ label: "Linienfarbe",
112
+ description: `Rahmen und Trennlinien. ${DEFAULT_COLOR_HINT}`,
113
+ type: "color",
114
+ },
115
+ {
116
+ key: "color_surface",
117
+ group: APPEARANCE,
118
+ label: "Flächenfarbe",
119
+ description: `Hinterlegte Flächen wie Infoboxen und Tabellenköpfe. ${DEFAULT_COLOR_HINT}`,
120
+ type: "color",
121
+ },
74
122
  ],
75
123
  });
124
+ const SHOP_MASTER_DATA_KEYS = [
125
+ "legal_name",
126
+ "address_line1",
127
+ "address_line2",
128
+ "postal_code",
129
+ "city",
130
+ "country_code",
131
+ "vat_number",
132
+ "email",
133
+ "phone",
134
+ "website",
135
+ "iban",
136
+ "bic",
137
+ "company_register_number",
138
+ "company_register_court",
139
+ ];
76
140
  /**
77
141
  * The shop's master data for server-side code, exactly as stored in the
78
142
  * Admin: there is no config fallback. A missing base plugin fails with
@@ -81,7 +145,8 @@ exports.shopMasterDataDescriptor = (0, descriptor_1.definePluginFeatures)({
81
145
  async function getShopMasterData(container) {
82
146
  const resolved = await (0, settings_1.getPluginSettings)(container, exports.shopMasterDataDescriptor);
83
147
  const values = {};
84
- for (const [key, value] of Object.entries(resolved.values)) {
148
+ for (const key of SHOP_MASTER_DATA_KEYS) {
149
+ const value = resolved.values[key];
85
150
  if (typeof value === "string") {
86
151
  values[key] = value;
87
152
  }
@@ -92,3 +157,29 @@ async function getShopMasterData(container) {
92
157
  missing: resolved.missing,
93
158
  };
94
159
  }
160
+ const APPEARANCE_COLOR_KEYS = {
161
+ accent: "color_accent",
162
+ text: "color_text",
163
+ muted: "color_muted",
164
+ line: "color_line",
165
+ surface: "color_surface",
166
+ };
167
+ /**
168
+ * The shop's appearance (Erscheinungsbild) for server-side code, as stored
169
+ * in the Admin. A missing base plugin fails with `UNEXPECTED_STATE`; read
170
+ * failures propagate.
171
+ */
172
+ async function getShopAppearance(container) {
173
+ const { values } = await (0, settings_1.getPluginSettings)(container, exports.shopMasterDataDescriptor);
174
+ const colors = {};
175
+ for (const [token, key] of Object.entries(APPEARANCE_COLOR_KEYS)) {
176
+ const value = values[key];
177
+ if (typeof value === "string") {
178
+ colors[token] = value;
179
+ }
180
+ }
181
+ return {
182
+ ...(typeof values.logo === "string" ? { logo: values.logo } : {}),
183
+ colors,
184
+ };
185
+ }
@@ -30,8 +30,11 @@ export type PluginFeatureDefinition<K extends string = string> = {
30
30
  readonly default_enabled: boolean;
31
31
  readonly parent_key?: K;
32
32
  };
33
- /** `image`: public http(s) URL of an image the Admin uploads (PNG/JPEG). */
34
- export type PluginSettingType = "string" | "url" | "number" | "boolean" | "secret" | "select" | "image";
33
+ /**
34
+ * `image`: public http(s) URL of an image the Admin uploads (PNG/JPEG).
35
+ * `color`: lowercase hex color `#rrggbb`.
36
+ */
37
+ export type PluginSettingType = "string" | "url" | "number" | "boolean" | "secret" | "select" | "image" | "color";
35
38
  /** One allowed value of a `"select"` setting. */
36
39
  export type PluginSettingOption = {
37
40
  readonly value: string;
@@ -42,6 +45,11 @@ export type PluginSettingDefinition<S extends string = string> = {
42
45
  readonly key: S;
43
46
  readonly label: string;
44
47
  readonly description?: string;
48
+ /**
49
+ * Section heading the Admin shows above this setting; consecutive settings
50
+ * with the same group share one heading.
51
+ */
52
+ readonly group?: string;
45
53
  readonly type: PluginSettingType;
46
54
  /** `false` when omitted. */
47
55
  readonly required?: boolean;
@@ -0,0 +1,19 @@
1
+ type RawRecord = Record<string, unknown>;
2
+ /** Reads untyped data (query results, event payloads) defensively. */
3
+ /** The object itself, else `{}`: safe to read properties from. */
4
+ export declare const asRecord: (value: unknown) => RawRecord;
5
+ /** The object itself, else `null` (arrays are not records). */
6
+ export declare const asRecordOrNull: (value: unknown) => RawRecord | null;
7
+ /** The trimmed string, `null` for a blank or non-string value. */
8
+ export declare const asText: (value: unknown) => string | null;
9
+ export declare const asArray: (value: unknown) => unknown[];
10
+ /**
11
+ * The string as it is (not trimmed), `null` for a non-string value. A blank
12
+ * string is `null` unless `allowBlank` is set.
13
+ */
14
+ export declare const asOptionalString: (value: unknown, { allowBlank }?: {
15
+ allowBlank?: boolean;
16
+ }) => string | null;
17
+ /** The number if it is finite, else `null` (no string or BigNumber parsing). */
18
+ export declare const asFiniteNumber: (value: unknown) => number | null;
19
+ export {};
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.asFiniteNumber = exports.asOptionalString = exports.asArray = exports.asText = exports.asRecordOrNull = exports.asRecord = void 0;
4
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
5
+ /** Reads untyped data (query results, event payloads) defensively. */
6
+ /** The object itself, else `{}`: safe to read properties from. */
7
+ const asRecord = (value) => isRecord(value) ? value : {};
8
+ exports.asRecord = asRecord;
9
+ /** The object itself, else `null` (arrays are not records). */
10
+ const asRecordOrNull = (value) => isRecord(value) ? value : null;
11
+ exports.asRecordOrNull = asRecordOrNull;
12
+ /** The trimmed string, `null` for a blank or non-string value. */
13
+ const asText = (value) => typeof value === "string" && value.trim() ? value.trim() : null;
14
+ exports.asText = asText;
15
+ const asArray = (value) => Array.isArray(value) ? value : [];
16
+ exports.asArray = asArray;
17
+ /**
18
+ * The string as it is (not trimmed), `null` for a non-string value. A blank
19
+ * string is `null` unless `allowBlank` is set.
20
+ */
21
+ const asOptionalString = (value, { allowBlank = false } = {}) => typeof value === "string" && (allowBlank || value.trim()) ? value : null;
22
+ exports.asOptionalString = asOptionalString;
23
+ /** The number if it is finite, else `null` (no string or BigNumber parsing). */
24
+ const asFiniteNumber = (value) => typeof value === "number" && Number.isFinite(value) ? value : null;
25
+ exports.asFiniteNumber = asFiniteNumber;
@@ -0,0 +1,3 @@
1
+ /** Splits a list into consecutive slices of at most `size` items. */
2
+ export declare const chunk: <Item>(items: readonly Item[], size: number) => Item[][];
3
+ export declare const sleep: (milliseconds: number) => Promise<void>;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sleep = exports.chunk = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ /** Splits a list into consecutive slices of at most `size` items. */
6
+ const chunk = (items, size) => {
7
+ if (!Number.isInteger(size) || size < 1) {
8
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "The chunk size must be a positive integer.");
9
+ }
10
+ const chunks = [];
11
+ for (let index = 0; index < items.length; index += size) {
12
+ chunks.push(items.slice(index, index + size));
13
+ }
14
+ return chunks;
15
+ };
16
+ exports.chunk = chunk;
17
+ const sleep = (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds));
18
+ exports.sleep = sleep;
@@ -0,0 +1,12 @@
1
+ /** A valid `Date`; throws `INVALID_DATA` for an unparsable value. */
2
+ export declare const toValidDate: (value: Date | string | number, message?: string) => Date;
3
+ /** Midnight UTC of the value's UTC calendar day. */
4
+ export declare const startOfUtcDate: (value: Date | string | number) => Date;
5
+ /** `yyyy-mm-dd` of the value's UTC calendar day; throws for an invalid date. */
6
+ export declare const toIsoDate: (value: Date | string | number) => string;
7
+ /** ISO-8601 instant for an HTTP response; throws for an invalid date. */
8
+ export declare const toWireDate: (value: Date | string) => string;
9
+ /** Like `toWireDate`, `null` for `null` / `undefined`. */
10
+ export declare const toOptionalWireDate: (value: Date | string | null | undefined) => string | null;
11
+ /** Whether the value is an IANA time zone this runtime knows ("Europe/Vienna"). */
12
+ export declare const isValidTimeZone: (value: unknown) => value is string;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isValidTimeZone = exports.toOptionalWireDate = exports.toWireDate = exports.toIsoDate = exports.startOfUtcDate = exports.toValidDate = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ /** A valid `Date`; throws `INVALID_DATA` for an unparsable value. */
6
+ const toValidDate = (value, message = "Invalid date.") => {
7
+ const date = value instanceof Date ? value : new Date(value);
8
+ if (Number.isNaN(date.getTime())) {
9
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, message);
10
+ }
11
+ return date;
12
+ };
13
+ exports.toValidDate = toValidDate;
14
+ /** Midnight UTC of the value's UTC calendar day. */
15
+ const startOfUtcDate = (value) => {
16
+ const date = (0, exports.toValidDate)(value);
17
+ return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()));
18
+ };
19
+ exports.startOfUtcDate = startOfUtcDate;
20
+ /** `yyyy-mm-dd` of the value's UTC calendar day; throws for an invalid date. */
21
+ const toIsoDate = (value) => (0, exports.toValidDate)(value).toISOString().slice(0, 10);
22
+ exports.toIsoDate = toIsoDate;
23
+ /** ISO-8601 instant for an HTTP response; throws for an invalid date. */
24
+ const toWireDate = (value) => (0, exports.toValidDate)(value).toISOString();
25
+ exports.toWireDate = toWireDate;
26
+ /** Like `toWireDate`, `null` for `null` / `undefined`. */
27
+ const toOptionalWireDate = (value) => (value == null ? null : (0, exports.toWireDate)(value));
28
+ exports.toOptionalWireDate = toOptionalWireDate;
29
+ /** Whether the value is an IANA time zone this runtime knows ("Europe/Vienna"). */
30
+ const isValidTimeZone = (value) => {
31
+ if (typeof value !== "string" || !value.trim()) {
32
+ return false;
33
+ }
34
+ try {
35
+ new Intl.DateTimeFormat("en", { timeZone: value });
36
+ return true;
37
+ }
38
+ catch {
39
+ return false;
40
+ }
41
+ };
42
+ exports.isValidTimeZone = isValidTimeZone;
@@ -0,0 +1,2 @@
1
+ /** The message of anything that was thrown. */
2
+ export declare const describeError: (error: unknown) => string;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.describeError = void 0;
4
+ /** The message of anything that was thrown. */
5
+ const describeError = (error) => error instanceof Error
6
+ ? error.message
7
+ : typeof error?.message === "string"
8
+ ? error.message
9
+ : String(error);
10
+ exports.describeError = describeError;
@@ -0,0 +1,2 @@
1
+ /** Lower-case hex SHA-256 of a string (UTF-8) or of bytes. */
2
+ export declare const sha256Hex: (value: string | Uint8Array) => string;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sha256Hex = void 0;
4
+ const node_crypto_1 = require("node:crypto");
5
+ /** Lower-case hex SHA-256 of a string (UTF-8) or of bytes. */
6
+ const sha256Hex = (value) => (0, node_crypto_1.createHash)("sha256").update(value).digest("hex");
7
+ exports.sha256Hex = sha256Hex;
@@ -0,0 +1,10 @@
1
+ export * from "./coerce";
2
+ export * from "./collections";
3
+ export * from "./dates";
4
+ export * from "./errors";
5
+ export * from "./hash";
6
+ export * from "./logging";
7
+ export * from "./money";
8
+ export * from "./text";
9
+ export * from "./transaction";
10
+ export * from "./wire-response";
@@ -0,0 +1,28 @@
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
+ // Generic server/isomorphic helpers shared by all plugins, exported as
18
+ // `@hartl-services/medusa-base/lib`.
19
+ __exportStar(require("./coerce"), exports);
20
+ __exportStar(require("./collections"), exports);
21
+ __exportStar(require("./dates"), exports);
22
+ __exportStar(require("./errors"), exports);
23
+ __exportStar(require("./hash"), exports);
24
+ __exportStar(require("./logging"), exports);
25
+ __exportStar(require("./money"), exports);
26
+ __exportStar(require("./text"), exports);
27
+ __exportStar(require("./transaction"), exports);
28
+ __exportStar(require("./wire-response"), exports);
@@ -0,0 +1,26 @@
1
+ export type OptionalLogger = {
2
+ warn(message: string): void;
3
+ };
4
+ /**
5
+ * The registered logger, or `undefined`. Accepts a container (`resolve`) or a
6
+ * module cradle (`cradle.logger`), the first constructor argument of a module
7
+ * service. Reading an unregistered key from an awilix cradle throws, and a
8
+ * missing logger must never stop a module from loading, so every read is
9
+ * guarded.
10
+ */
11
+ export declare const resolveOptionalLogger: (source: unknown) => OptionalLogger | undefined;
12
+ export type WarnOnce = {
13
+ /**
14
+ * Runs `warn` unless the last warning for `key` had the same `signature`.
15
+ * Returns whether it ran.
16
+ */
17
+ (key: string, signature: string, warn: () => void): boolean;
18
+ /** Re-arms one key, e.g. once the problem is fixed, or all keys. */
19
+ reset(key?: string): void;
20
+ };
21
+ /**
22
+ * One warning per key and signature per process (not per request): a state
23
+ * that persists is logged once, a changed state is logged again, and `reset`
24
+ * re-arms a key once the state is healthy.
25
+ */
26
+ export declare const createWarnOnce: () => WarnOnce;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createWarnOnce = exports.resolveOptionalLogger = void 0;
4
+ const LOGGER_KEY = "logger";
5
+ const hasWarn = (value) => typeof value?.warn === "function";
6
+ const attempt = (read) => {
7
+ try {
8
+ return read();
9
+ }
10
+ catch {
11
+ return undefined;
12
+ }
13
+ };
14
+ /**
15
+ * The registered logger, or `undefined`. Accepts a container (`resolve`) or a
16
+ * module cradle (`cradle.logger`), the first constructor argument of a module
17
+ * service. Reading an unregistered key from an awilix cradle throws, and a
18
+ * missing logger must never stop a module from loading, so every read is
19
+ * guarded.
20
+ */
21
+ const resolveOptionalLogger = (source) => {
22
+ const fromProperty = attempt(() => source?.logger);
23
+ if (hasWarn(fromProperty)) {
24
+ return fromProperty;
25
+ }
26
+ const fromContainer = attempt(() => {
27
+ const container = source;
28
+ return typeof container?.resolve === "function"
29
+ ? container.resolve(LOGGER_KEY)
30
+ : undefined;
31
+ });
32
+ return hasWarn(fromContainer) ? fromContainer : undefined;
33
+ };
34
+ exports.resolveOptionalLogger = resolveOptionalLogger;
35
+ /**
36
+ * One warning per key and signature per process (not per request): a state
37
+ * that persists is logged once, a changed state is logged again, and `reset`
38
+ * re-arms a key once the state is healthy.
39
+ */
40
+ const createWarnOnce = () => {
41
+ const lastSignatures = new Map();
42
+ const warnOnce = ((key, signature, warn) => {
43
+ if (lastSignatures.get(key) === signature) {
44
+ return false;
45
+ }
46
+ lastSignatures.set(key, signature);
47
+ warn();
48
+ return true;
49
+ });
50
+ warnOnce.reset = (key) => {
51
+ if (key === undefined) {
52
+ lastSignatures.clear();
53
+ }
54
+ else {
55
+ lastSignatures.delete(key);
56
+ }
57
+ };
58
+ return warnOnce;
59
+ };
60
+ exports.createWarnOnce = createWarnOnce;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Minor-unit digit count for a currency, e.g. EUR/USD = 2, JPY = 0, KWD = 3.
3
+ * Sourced from Medusa's static currency table; unknown currencies use 2.
4
+ */
5
+ export declare const getCurrencyDecimalPlaces: (currencyCode: string) => number;
6
+ /**
7
+ * A finite number from whatever Medusa returns for an amount or quantity:
8
+ * a number, a numeric string, a Medusa `BigNumber` (detected by shape, never
9
+ * by `instanceof`: two copies of `@medusajs/utils` may be installed), a
10
+ * bignumber.js value or a raw `{ value }` record. Anything else, blank
11
+ * strings, `NaN` and `Infinity` included, is `null`.
12
+ */
13
+ export declare const toNumericAmount: (value: unknown) => number | null;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toNumericAmount = exports.getCurrencyDecimalPlaces = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const DEFAULT_CURRENCY_DECIMAL_PLACES = 2;
6
+ /**
7
+ * Minor-unit digit count for a currency, e.g. EUR/USD = 2, JPY = 0, KWD = 3.
8
+ * Sourced from Medusa's static currency table; unknown currencies use 2.
9
+ */
10
+ const getCurrencyDecimalPlaces = (currencyCode) => utils_1.defaultCurrencies[currencyCode.toUpperCase()]?.decimal_digits ??
11
+ DEFAULT_CURRENCY_DECIMAL_PLACES;
12
+ exports.getCurrencyDecimalPlaces = getCurrencyDecimalPlaces;
13
+ const finiteOrNull = (value) => Number.isFinite(value) ? value : null;
14
+ /**
15
+ * A finite number from whatever Medusa returns for an amount or quantity:
16
+ * a number, a numeric string, a Medusa `BigNumber` (detected by shape, never
17
+ * by `instanceof`: two copies of `@medusajs/utils` may be installed), a
18
+ * bignumber.js value or a raw `{ value }` record. Anything else, blank
19
+ * strings, `NaN` and `Infinity` included, is `null`.
20
+ */
21
+ const toNumericAmount = (value) => {
22
+ if (typeof value === "number") {
23
+ return finiteOrNull(value);
24
+ }
25
+ if (typeof value === "string") {
26
+ return value.trim() ? finiteOrNull(Number(value)) : null;
27
+ }
28
+ if (typeof value !== "object" || value === null) {
29
+ return null;
30
+ }
31
+ const candidate = value;
32
+ if (typeof candidate.numeric === "number") {
33
+ return finiteOrNull(candidate.numeric);
34
+ }
35
+ if (typeof candidate.toNumber === "function") {
36
+ return finiteOrNull(Number(candidate.toNumber.call(value)));
37
+ }
38
+ if (typeof candidate.raw_ === "object" && candidate.raw_ !== null) {
39
+ return toRawValue(candidate.raw_.value);
40
+ }
41
+ return toRawValue(candidate.value);
42
+ };
43
+ exports.toNumericAmount = toNumericAmount;
44
+ const toRawValue = (value) => typeof value === "number" || typeof value === "string"
45
+ ? (0, exports.toNumericAmount)(value)
46
+ : null;
@@ -0,0 +1,19 @@
1
+ /** Placeholder UID for development; never a real merchant UID. */
2
+ export declare const VAT_NUMBER_PLACEHOLDER = "ATU00000000";
3
+ /** A VAT number without whitespace, upper-case: " atu 1234 5678 " -> "ATU12345678". */
4
+ export declare const normalizeVatNumber: (value: string) => string;
5
+ /**
6
+ * Provider-agnostic e-mail normalization: only surrounding whitespace and
7
+ * casing change (plus tags and dots can name different mailboxes). `null` for
8
+ * a blank value or one without a local part, "@" or domain; callers decide
9
+ * whether that is an error.
10
+ */
11
+ export declare const normalizeEmail: (value: string | null | undefined) => string | null;
12
+ /** Escapes `\`, `%` and `_` so a value matches literally in `LIKE` / `ILIKE`. */
13
+ export declare const escapeLikePattern: (value: string) => string;
14
+ /** Escapes text for HTML content and double- or single-quoted attributes. */
15
+ export declare const escapeHtml: (value: string | number | null | undefined) => string;
16
+ /** Whether the value parses as an absolute `http:` or `https:` URL. */
17
+ export declare const isHttpUrl: (value: string | null | undefined) => value is string;
18
+ /** A string with at least one non-whitespace character. */
19
+ export declare const isNonEmptyString: (value: unknown) => value is string;