@hartl-services/medusa-base 0.3.0 → 1.0.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 (323) hide show
  1. package/.medusa/server/src/admin/index.js +2164 -29
  2. package/.medusa/server/src/admin/index.mjs +2166 -31
  3. package/.medusa/server/src/api/admin/email/messages/[id]/resends/route.js +24 -0
  4. package/.medusa/server/src/api/admin/email/messages/[id]/route.js +12 -0
  5. package/.medusa/server/src/api/admin/email/messages/route.js +12 -0
  6. package/.medusa/server/src/api/admin/email/terms-versions/[id]/download/route.js +16 -0
  7. package/.medusa/server/src/api/admin/email/terms-versions/route.js +47 -0
  8. package/.medusa/server/src/api/admin/orders/[id]/documents/[document_id]/download/route.js +21 -0
  9. package/.medusa/server/src/api/admin/orders/[id]/documents/[document_id]/regenerate/route.js +38 -0
  10. package/.medusa/server/src/api/admin/orders/[id]/documents/regenerate/route.js +32 -0
  11. package/.medusa/server/src/api/admin/orders/[id]/documents/route.js +36 -0
  12. package/.medusa/server/src/api/admin/orders/[id]/packing-lists/[fulfillment_id]/download/route.js +24 -0
  13. package/.medusa/server/src/api/admin/orders/[id]/packing-lists/[fulfillment_id]/retry/route.js +44 -0
  14. package/.medusa/server/src/api/admin/orders/[id]/packing-lists/route.js +82 -0
  15. package/.medusa/server/src/api/admin/plugin-features/[plugin_key]/actions/[action_key]/route.js +31 -0
  16. package/.medusa/server/src/api/admin/plugin-features/[plugin_key]/actions/[action_key]/runs/route.js +16 -0
  17. package/.medusa/server/src/api/admin/plugin-features/[plugin_key]/route.js +14 -0
  18. package/.medusa/server/src/api/admin/plugin-features/[plugin_key]/settings/route.js +22 -0
  19. package/.medusa/server/src/api/admin/plugin-features/route.js +6 -4
  20. package/.medusa/server/src/api/document-download-response.js +16 -0
  21. package/.medusa/server/src/api/document-response.js +23 -0
  22. package/.medusa/server/src/api/files/[asset]/route.js +24 -0
  23. package/.medusa/server/src/api/files/file-response.js +43 -0
  24. package/.medusa/server/src/api/files/gateway-options.js +31 -0
  25. package/.medusa/server/src/api/files/private/[token]/route.js +29 -0
  26. package/.medusa/server/src/api/files/upload/[token]/route.js +66 -0
  27. package/.medusa/server/src/api/middlewares.js +186 -5
  28. package/.medusa/server/src/api/packing-list-response.js +22 -0
  29. package/.medusa/server/src/api/plugin-actions.js +221 -0
  30. package/.medusa/server/src/api/plugin-features-http.js +67 -8
  31. package/.medusa/server/src/api/route.js +27 -0
  32. package/.medusa/server/src/api/store/documents/[id]/download/route.js +21 -0
  33. package/.medusa/server/src/api/store/documents/[id]/route.js +15 -0
  34. package/.medusa/server/src/api/store/documents/route.js +11 -0
  35. package/.medusa/server/src/api/terms-download-response.js +12 -0
  36. package/.medusa/server/src/documents/config/index.js +18 -0
  37. package/.medusa/server/src/documents/paths/documents.js +6 -0
  38. package/.medusa/server/src/documents/paths/index.js +18 -0
  39. package/.medusa/server/src/documents/plugin-features.js +24 -0
  40. package/.medusa/server/src/documents/schemas/documents.js +18 -0
  41. package/.medusa/server/src/documents/schemas/index.js +18 -0
  42. package/.medusa/server/src/documents/scripts/verify-documents-file-storage.js +55 -0
  43. package/.medusa/server/src/documents/templates/financial-document.js +142 -0
  44. package/.medusa/server/src/documents/templates/format.js +31 -0
  45. package/.medusa/server/src/documents/templates/html-factory.js +40 -0
  46. package/.medusa/server/src/documents/templates/html-utils.js +13 -0
  47. package/.medusa/server/src/documents/templates/layout.js +97 -0
  48. package/.medusa/server/src/documents/templates/packing-list.js +50 -0
  49. package/.medusa/server/src/documents/types/admin-api.js +3 -0
  50. package/.medusa/server/src/documents/types/document-summary.js +3 -0
  51. package/.medusa/server/src/documents/types/documents.js +3 -0
  52. package/.medusa/server/src/documents/types/html-factory.js +6 -0
  53. package/.medusa/server/src/documents/types/index.js +22 -0
  54. package/.medusa/server/src/documents/types/store-api.js +3 -0
  55. package/.medusa/server/src/documents/utils/document-merchant.js +22 -0
  56. package/.medusa/server/src/documents/utils/html-to-pdf.js +61 -0
  57. package/.medusa/server/src/documents/utils/private-file-storage.js +64 -0
  58. package/.medusa/server/src/documents/utils/resolve-services.js +7 -0
  59. package/.medusa/server/src/email/application/handle-invite-event.js +312 -0
  60. package/.medusa/server/src/email/application/handle-password-reset-event.js +354 -0
  61. package/.medusa/server/src/email/config/index.js +84 -0
  62. package/.medusa/server/src/email/config/notification-module.js +20 -0
  63. package/.medusa/server/src/email/domain/business-keys.js +50 -0
  64. package/.medusa/server/src/email/domain/documents-fact-fingerprint.js +7 -0
  65. package/.medusa/server/src/email/domain/event-schemas.js +36 -0
  66. package/.medusa/server/src/email/domain/failure-classification.js +53 -0
  67. package/.medusa/server/src/email/plugin-features.js +31 -0
  68. package/.medusa/server/src/email/rendering/default-templates.js +91 -0
  69. package/.medusa/server/src/email/rendering/render-email.js +37 -0
  70. package/.medusa/server/src/email/rendering/resolve-shop-configuration.js +48 -0
  71. package/.medusa/server/src/email/types/email-kinds.js +18 -0
  72. package/.medusa/server/src/email/types/index.js +21 -0
  73. package/.medusa/server/src/email/types/shop-configuration.js +3 -0
  74. package/.medusa/server/src/email/types/smtp-configuration.js +3 -0
  75. package/.medusa/server/src/email/types/template-data.js +79 -0
  76. package/.medusa/server/src/files/config/index.js +256 -0
  77. package/.medusa/server/src/files/gateway/index.js +115 -0
  78. package/.medusa/server/src/files/types/index.js +6 -0
  79. package/.medusa/server/src/files/types/public.js +6 -0
  80. package/.medusa/server/src/jobs/document-fact-publication-reconciliation.js +18 -0
  81. package/.medusa/server/src/jobs/document-resolution-reconciliation.js +20 -0
  82. package/.medusa/server/src/jobs/packing-list-reconciliation.js +49 -0
  83. package/.medusa/server/src/jobs/reconcile-email-attempts.js +63 -0
  84. package/.medusa/server/src/jobs/reconcile-pending-email-messages.js +41 -0
  85. package/.medusa/server/src/jobs/retry-email-messages.js +27 -0
  86. package/.medusa/server/src/migration-scripts/dismiss-orphaned-cart-promotion-links.js +26 -0
  87. package/.medusa/server/src/modules/documents/domain/cancellation-snapshot.js +97 -0
  88. package/.medusa/server/src/modules/documents/domain/document-number.js +36 -0
  89. package/.medusa/server/src/modules/documents/domain/document-resolution.js +24 -0
  90. package/.medusa/server/src/modules/documents/domain/issuance-rules.js +37 -0
  91. package/.medusa/server/src/modules/documents/domain/merchant.js +86 -0
  92. package/.medusa/server/src/modules/documents/domain/options.js +40 -0
  93. package/.medusa/server/src/modules/documents/domain/packing-list.js +90 -0
  94. package/.medusa/server/src/modules/documents/domain/snapshot-normalization.js +17 -0
  95. package/.medusa/server/src/modules/documents/domain/tax-breakdown.js +66 -0
  96. package/.medusa/server/src/modules/documents/index.js +15 -0
  97. package/.medusa/server/src/modules/documents/loaders/assert-private-file-storage.js +20 -0
  98. package/.medusa/server/src/modules/documents/migrations/Migration20260827061749.js +75 -0
  99. package/.medusa/server/src/modules/documents/migrations/Migration20260830111207.js +28 -0
  100. package/.medusa/server/src/modules/documents/models/document-artifact.js +25 -0
  101. package/.medusa/server/src/modules/documents/models/document-number-sequence.js +29 -0
  102. package/.medusa/server/src/modules/documents/models/document.js +82 -0
  103. package/.medusa/server/src/modules/documents/models/order-cancellation-resolution.js +51 -0
  104. package/.medusa/server/src/modules/documents/models/packing-list-revision.js +36 -0
  105. package/.medusa/server/src/modules/documents/models/packing-list.js +27 -0
  106. package/.medusa/server/src/modules/documents/models/refund-document-resolution.js +66 -0
  107. package/.medusa/server/src/modules/documents/models/shipment-invoice-assignment.js +51 -0
  108. package/.medusa/server/src/modules/documents/models/shipment-invoice-coordinator.js +44 -0
  109. package/.medusa/server/src/modules/documents/service.js +1701 -0
  110. package/.medusa/server/src/modules/email/domain/attachment.js +25 -0
  111. package/.medusa/server/src/modules/email/domain/message-state.js +69 -0
  112. package/.medusa/server/src/modules/email/index.js +13 -0
  113. package/.medusa/server/src/modules/email/migrations/Migration20260826173422.js +32 -0
  114. package/.medusa/server/src/modules/email/migrations/Migration20260827172945.js +16 -0
  115. package/.medusa/server/src/modules/email/migrations/Migration20260827194804.js +22 -0
  116. package/.medusa/server/src/modules/email/migrations/Migration20260906195205.js +16 -0
  117. package/.medusa/server/src/modules/email/models/email-attempt.js +56 -0
  118. package/.medusa/server/src/modules/email/models/email-message.js +71 -0
  119. package/.medusa/server/src/modules/email/models/email-terms-version.js +37 -0
  120. package/.medusa/server/src/modules/email/service.js +1285 -0
  121. package/.medusa/server/src/modules/plugin-features/domain/plugin-action-runs.js +92 -0
  122. package/.medusa/server/src/modules/plugin-features/domain/plugin-settings.js +213 -0
  123. package/.medusa/server/src/modules/plugin-features/domain/secret-box.js +56 -0
  124. package/.medusa/server/src/modules/plugin-features/migrations/Migration20260928205031.js +16 -0
  125. package/.medusa/server/src/modules/plugin-features/migrations/Migration20260928215428.js +17 -0
  126. package/.medusa/server/src/modules/plugin-features/models/plugin-action-run.js +43 -0
  127. package/.medusa/server/src/modules/plugin-features/models/plugin-setting-state.js +32 -0
  128. package/.medusa/server/src/modules/plugin-features/service.js +419 -17
  129. package/.medusa/server/src/providers/s3-cache/cache/atomic-write.js +25 -0
  130. package/.medusa/server/src/providers/s3-cache/cache/cache-manager.js +115 -0
  131. package/.medusa/server/src/providers/s3-cache/cache/keyed-lock.js +28 -0
  132. package/.medusa/server/src/providers/s3-cache/index.js +8 -0
  133. package/.medusa/server/src/providers/s3-cache/object-key.js +53 -0
  134. package/.medusa/server/src/providers/s3-cache/s3-cache-file.js +229 -0
  135. package/.medusa/server/src/providers/s3-cache/s3-object-store.js +86 -0
  136. package/.medusa/server/src/providers/smtp/index.js +8 -0
  137. package/.medusa/server/src/providers/smtp/service.js +236 -0
  138. package/.medusa/server/src/providers/smtp/types.js +11 -0
  139. package/.medusa/server/src/public/action-progress.js +67 -0
  140. package/.medusa/server/src/public/config.js +186 -0
  141. package/.medusa/server/src/public/descriptor.js +199 -2
  142. package/.medusa/server/src/public/effective-features.js +9 -5
  143. package/.medusa/server/src/public/enforcement.js +18 -8
  144. package/.medusa/server/src/public/gateway.js +19 -0
  145. package/.medusa/server/src/public/index.js +10 -2
  146. package/.medusa/server/src/public/instrumentation.js +56 -0
  147. package/.medusa/server/src/public/module-access.js +14 -0
  148. package/.medusa/server/src/public/settings.js +17 -0
  149. package/.medusa/server/src/public/shop-config.js +12 -0
  150. package/.medusa/server/src/public/shop-master-data.js +95 -0
  151. package/.medusa/server/src/public/shop-types.js +24 -0
  152. package/.medusa/server/src/shop-config/build-food-shop-config.js +248 -0
  153. package/.medusa/server/src/shop-config/options.js +71 -0
  154. package/.medusa/server/src/subscribers/affiliate-consignment-reminder-due.js +26 -0
  155. package/.medusa/server/src/subscribers/documents-order-canceled.js +24 -0
  156. package/.medusa/server/src/subscribers/documents-order-cancellation-ready.js +26 -0
  157. package/.medusa/server/src/subscribers/documents-refund-ready.js +24 -0
  158. package/.medusa/server/src/subscribers/documents-shipment-created.js +36 -0
  159. package/.medusa/server/src/subscribers/documents-shipment-invoice-assignment-decided.js +26 -0
  160. package/.medusa/server/src/subscribers/email-order-canceled.js +28 -0
  161. package/.medusa/server/src/subscribers/email-shipment-created.js +32 -0
  162. package/.medusa/server/src/subscribers/order-placed.js +27 -0
  163. package/.medusa/server/src/subscribers/packing-list-allocation-revised.js +32 -0
  164. package/.medusa/server/src/subscribers/packing-list-fulfillment-canceled.js +54 -0
  165. package/.medusa/server/src/subscribers/packing-list-fulfillment-created.js +31 -0
  166. package/.medusa/server/src/subscribers/password-reset.js +23 -0
  167. package/.medusa/server/src/subscribers/payment-refunded.js +38 -0
  168. package/.medusa/server/src/subscribers/return-received.js +27 -0
  169. package/.medusa/server/src/subscribers/return-requested.js +27 -0
  170. package/.medusa/server/src/subscribers/user-invite.js +23 -0
  171. package/.medusa/server/src/utils/cart-promotion-links.js +101 -0
  172. package/.medusa/server/src/utils/discover-complete-cart-participants.js +9 -2
  173. package/.medusa/server/src/utils/discover-plugin-features.js +47 -9
  174. package/.medusa/server/src/workflows/documents/issue-cancellation-after-refund.js +246 -0
  175. package/.medusa/server/src/workflows/documents/issue-document.js +163 -0
  176. package/.medusa/server/src/workflows/documents/issue-invoice-after-shipment.js +521 -0
  177. package/.medusa/server/src/workflows/documents/issue-packing-list.js +384 -0
  178. package/.medusa/server/src/workflows/documents/publish-document-facts.js +53 -0
  179. package/.medusa/server/src/workflows/documents/reconcile-document-resolutions.js +48 -0
  180. package/.medusa/server/src/workflows/documents/reconcile-order-cancellation.js +92 -0
  181. package/.medusa/server/src/workflows/documents/regenerate-issued-document.js +61 -0
  182. package/.medusa/server/src/workflows/email/dispatch-email-message.js +299 -0
  183. package/.medusa/server/src/workflows/email/documents-required-facts.js +30 -0
  184. package/.medusa/server/src/workflows/email/prepare-affiliate-reminder-email.js +58 -0
  185. package/.medusa/server/src/workflows/email/prepare-order-canceled-email.js +64 -0
  186. package/.medusa/server/src/workflows/email/prepare-order-received-email.js +56 -0
  187. package/.medusa/server/src/workflows/email/prepare-refund-email.js +47 -0
  188. package/.medusa/server/src/workflows/email/prepare-return-email.js +75 -0
  189. package/.medusa/server/src/workflows/email/prepare-shipment-email.js +82 -0
  190. package/.medusa/server/src/workflows/email/retry-email-messages.js +31 -0
  191. package/.medusa/server/src/workflows/hooks/complete-cart-participants.js +28 -16
  192. package/.medusa/server/src/workflows/hooks/dismiss-deleted-promotion-cart-links.js +23 -0
  193. package/README.md +2004 -11
  194. package/dist/admin-components/features/plugin-features/components/PluginActionsSection.d.ts +6 -0
  195. package/dist/admin-components/features/plugin-features/components/PluginActionsSection.js +66 -0
  196. package/dist/admin-components/features/plugin-features/components/PluginDetailPage.d.ts +2 -0
  197. package/dist/admin-components/features/plugin-features/components/PluginDetailPage.js +9 -0
  198. package/dist/admin-components/features/plugin-features/components/PluginFeatureGate.d.ts +22 -0
  199. package/dist/admin-components/features/plugin-features/components/PluginFeatureGate.js +18 -0
  200. package/dist/admin-components/features/plugin-features/components/PluginFeatureSections.d.ts +11 -0
  201. package/dist/admin-components/features/plugin-features/components/PluginFeatureSections.js +19 -0
  202. package/dist/admin-components/features/plugin-features/components/PluginFeaturesCard.d.ts +12 -0
  203. package/dist/admin-components/features/plugin-features/components/PluginFeaturesCard.js +34 -0
  204. package/dist/admin-components/features/plugin-features/components/PluginFeaturesSettingsPage.d.ts +5 -0
  205. package/dist/admin-components/features/plugin-features/components/PluginFeaturesSettingsPage.js +16 -0
  206. package/dist/admin-components/features/plugin-features/components/PluginHubCard.d.ts +7 -0
  207. package/dist/admin-components/features/plugin-features/components/PluginHubCard.js +21 -0
  208. package/dist/admin-components/features/plugin-features/components/PluginPageShell.d.ts +13 -0
  209. package/dist/admin-components/features/plugin-features/components/PluginPageShell.js +20 -0
  210. package/dist/admin-components/features/plugin-features/components/PluginSettingsForm.d.ts +7 -0
  211. package/dist/admin-components/features/plugin-features/components/PluginSettingsForm.js +39 -0
  212. package/dist/admin-components/features/plugin-features/components/PluginStatusChips.d.ts +5 -0
  213. package/dist/admin-components/features/plugin-features/components/PluginStatusChips.js +8 -0
  214. package/dist/admin-components/features/plugin-features/hooks/usePluginFeatureEnabled.d.ts +114 -0
  215. package/dist/admin-components/features/plugin-features/hooks/usePluginFeatureEnabled.js +40 -0
  216. package/dist/admin-components/features/plugin-features/hooks/usePluginFeatures.d.ts +392 -0
  217. package/dist/admin-components/features/plugin-features/hooks/usePluginFeatures.js +128 -0
  218. package/dist/admin-components/features/plugin-features/hooks/usePluginSettingsForm.d.ts +93 -0
  219. package/dist/admin-components/features/plugin-features/hooks/usePluginSettingsForm.js +44 -0
  220. package/dist/admin-components/features/plugin-features/lib/action-runs.d.ts +19 -0
  221. package/dist/admin-components/features/plugin-features/lib/action-runs.js +74 -0
  222. package/dist/admin-components/features/plugin-features/lib/plugin-features-admin-client.d.ts +363 -0
  223. package/dist/admin-components/features/plugin-features/lib/plugin-features-admin-client.js +9 -0
  224. package/dist/admin-components/features/plugin-features/lib/plugin-paths.d.ts +4 -0
  225. package/dist/admin-components/features/plugin-features/lib/plugin-paths.js +4 -0
  226. package/dist/admin-components/features/plugin-features/lib/settings-draft.d.ts +28 -0
  227. package/dist/admin-components/features/plugin-features/lib/settings-draft.js +86 -0
  228. package/dist/admin-components/features/plugin-features/queries/pluginFeatureKeys.d.ts +7 -0
  229. package/dist/admin-components/features/plugin-features/queries/pluginFeatureKeys.js +7 -0
  230. package/dist/admin-components/i18n/texts.d.ts +90 -0
  231. package/dist/admin-components/i18n/texts.js +90 -0
  232. package/dist/admin-components/index.d.ts +14 -0
  233. package/dist/admin-components/index.js +14 -0
  234. package/dist/admin-components/lib/errors.d.ts +6 -0
  235. package/dist/admin-components/lib/errors.js +27 -0
  236. package/dist/admin-components/lib/sdk.d.ts +2 -0
  237. package/dist/admin-components/lib/sdk.js +13 -0
  238. package/dist/documents/config/index.d.ts +11 -0
  239. package/dist/documents/config/index.js +17 -0
  240. package/dist/documents/templates/financial-document.d.ts +3 -0
  241. package/dist/documents/templates/financial-document.js +141 -0
  242. package/dist/documents/templates/format.d.ts +16 -0
  243. package/dist/documents/templates/format.js +30 -0
  244. package/dist/documents/templates/html-factory.d.ts +11 -0
  245. package/dist/documents/templates/html-factory.js +39 -0
  246. package/dist/documents/templates/html-utils.d.ts +2 -0
  247. package/dist/documents/templates/html-utils.js +12 -0
  248. package/dist/documents/templates/layout.d.ts +17 -0
  249. package/dist/documents/templates/layout.js +96 -0
  250. package/dist/documents/templates/packing-list.d.ts +3 -0
  251. package/dist/documents/templates/packing-list.js +49 -0
  252. package/dist/documents/types/admin-api.d.ts +1 -0
  253. package/dist/documents/types/admin-api.js +2 -0
  254. package/dist/documents/types/document-summary.d.ts +1 -0
  255. package/dist/documents/types/document-summary.js +2 -0
  256. package/dist/documents/types/documents.d.ts +174 -0
  257. package/dist/documents/types/documents.js +2 -0
  258. package/dist/documents/types/html-factory.d.ts +7 -0
  259. package/dist/documents/types/html-factory.js +5 -0
  260. package/dist/documents/types/index.d.ts +5 -0
  261. package/dist/documents/types/index.js +21 -0
  262. package/dist/documents/types/store-api.d.ts +1 -0
  263. package/dist/documents/types/store-api.js +2 -0
  264. package/dist/email/config/index.d.ts +17 -0
  265. package/dist/email/config/index.js +83 -0
  266. package/dist/email/config/notification-module.d.ts +22 -0
  267. package/dist/email/config/notification-module.js +19 -0
  268. package/dist/email/types/email-kinds.d.ts +15 -0
  269. package/dist/email/types/email-kinds.js +17 -0
  270. package/dist/email/types/index.d.ts +4 -0
  271. package/dist/email/types/index.js +20 -0
  272. package/dist/email/types/shop-configuration.d.ts +43 -0
  273. package/dist/email/types/shop-configuration.js +2 -0
  274. package/dist/email/types/smtp-configuration.d.ts +9 -0
  275. package/dist/email/types/smtp-configuration.js +2 -0
  276. package/dist/email/types/template-data.d.ts +100 -0
  277. package/dist/email/types/template-data.js +78 -0
  278. package/dist/files/config/index.d.ts +32 -0
  279. package/dist/files/config/index.js +255 -0
  280. package/dist/files/gateway/index.d.ts +30 -0
  281. package/dist/files/gateway/index.js +114 -0
  282. package/dist/files/types/index.d.ts +2 -0
  283. package/dist/files/types/index.js +5 -0
  284. package/dist/files/types/public.d.ts +90 -0
  285. package/dist/files/types/public.js +5 -0
  286. package/dist/modules/documents/domain/merchant.d.ts +22 -0
  287. package/dist/modules/documents/domain/merchant.js +85 -0
  288. package/dist/modules/documents/domain/options.d.ts +34 -0
  289. package/dist/modules/documents/domain/options.js +39 -0
  290. package/dist/public/action-progress.d.ts +25 -0
  291. package/dist/public/action-progress.js +66 -0
  292. package/dist/public/config.d.ts +59 -0
  293. package/dist/public/config.js +185 -0
  294. package/dist/public/descriptor.d.ts +3 -2
  295. package/dist/public/descriptor.js +198 -1
  296. package/dist/public/effective-features.d.ts +2 -1
  297. package/dist/public/effective-features.js +8 -4
  298. package/dist/public/enforcement.d.ts +7 -0
  299. package/dist/public/enforcement.js +17 -7
  300. package/dist/public/gateway.d.ts +2 -0
  301. package/dist/public/gateway.js +18 -0
  302. package/dist/public/index.d.ts +5 -2
  303. package/dist/public/index.js +9 -1
  304. package/dist/public/instrumentation.d.ts +12 -0
  305. package/dist/public/instrumentation.js +55 -0
  306. package/dist/public/module-access.d.ts +3 -0
  307. package/dist/public/module-access.js +13 -0
  308. package/dist/public/settings.d.ts +11 -0
  309. package/dist/public/settings.js +16 -0
  310. package/dist/public/shop-config.d.ts +8 -0
  311. package/dist/public/shop-config.js +11 -0
  312. package/dist/public/shop-master-data.d.ts +25 -0
  313. package/dist/public/shop-master-data.js +94 -0
  314. package/dist/public/shop-types.d.ts +7 -0
  315. package/dist/public/shop-types.js +23 -0
  316. package/dist/public/types.d.ts +113 -1
  317. package/dist/shop-config/build-food-shop-config.d.ts +44 -0
  318. package/dist/shop-config/build-food-shop-config.js +247 -0
  319. package/dist/shop-config/options.d.ts +41 -0
  320. package/dist/shop-config/options.js +70 -0
  321. package/dist/utils/discover-plugin-features.d.ts +28 -0
  322. package/dist/utils/discover-plugin-features.js +96 -0
  323. package/package.json +53 -6
@@ -0,0 +1,221 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runPluginAction = exports.requirePluginAction = exports.PLUGIN_ACTION_ALREADY_RUNNING_MESSAGE = void 0;
4
+ const plugin_features_1 = require("@hartl-services/medusa-food-supplements-contracts/events/plugin-features");
5
+ const framework_1 = require("@medusajs/framework");
6
+ const utils_1 = require("@medusajs/framework/utils");
7
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
8
+ const plugin_action_runs_1 = require("../modules/plugin-features/domain/plugin-action-runs");
9
+ const plugin_features_http_1 = require("./plugin-features-http");
10
+ const MESSAGE_MAX_LENGTH = 1000;
11
+ exports.PLUGIN_ACTION_ALREADY_RUNNING_MESSAGE = "Diese Aktion läuft bereits.";
12
+ /** The declared action; `NOT_FOUND` ("Aktion unbekannt") otherwise. */
13
+ const requirePluginAction = (descriptor, actionKey) => {
14
+ const action = descriptor.actions?.find((entry) => entry.key === actionKey);
15
+ if (!action) {
16
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Aktion unbekannt: "${actionKey}" (Plugin "${descriptor.plugin_key}").`);
17
+ }
18
+ return action;
19
+ };
20
+ exports.requirePluginAction = requirePluginAction;
21
+ const emitFinished = (container, input, outcome) => (0, plugin_features_http_1.emitAfterCommit)(container, plugin_features_1.PLUGIN_ACTION_FINISHED_EVENT, () => plugin_features_1.PluginActionFinishedEventSchema.parse({
22
+ plugin_key: input.plugin_key,
23
+ action_key: input.action_key,
24
+ run_id: input.run_id,
25
+ status: outcome.status,
26
+ ...(outcome.status === "failed"
27
+ ? {
28
+ message: (0, plugin_features_http_1.describeError)(outcome.error).slice(0, MESSAGE_MAX_LENGTH),
29
+ }
30
+ : {}),
31
+ }), input.plugin_key);
32
+ /**
33
+ * Records the outcome on the run row; a failed write is logged and never
34
+ * hides the action's own outcome.
35
+ */
36
+ const finishRun = async (container, input, outcome) => {
37
+ try {
38
+ return await (0, plugin_features_http_1.resolvePluginFeaturesService)(container).finishPluginActionRun(input.run_id, outcome);
39
+ }
40
+ catch (error) {
41
+ try {
42
+ container
43
+ .resolve(utils_1.ContainerRegistrationKeys.LOGGER)
44
+ .error(`Aktionslauf "${input.run_id}" (Plugin "${input.plugin_key}", Aktion "${input.action_key}") konnte nicht abgeschlossen werden: ${(0, plugin_features_http_1.describeError)(error)}`);
45
+ }
46
+ catch {
47
+ // Logging must not replace the original outcome.
48
+ }
49
+ return null;
50
+ }
51
+ };
52
+ const failureMessage = (error) => (0, plugin_features_http_1.describeError)(error).slice(0, MESSAGE_MAX_LENGTH);
53
+ const FAILED_STATES = [
54
+ utils_1.TransactionState.FAILED,
55
+ utils_1.TransactionState.REVERTED,
56
+ ];
57
+ /**
58
+ * Starts the workflow under the run id as transaction id. A workflow with
59
+ * async steps returns from `run()` with `acknowledgement.hasFinished: false`;
60
+ * its outcome then arrives through the engine's `onFinish` notification.
61
+ * The subscription is registered before `run()`, so an early finish is not
62
+ * missed, and removed again when `run()` already finished or threw.
63
+ */
64
+ const startWorkflow = async (engine, workflowId, input) => {
65
+ const transactionId = input.run_id;
66
+ let settle = () => undefined;
67
+ const outcome = new Promise((resolve) => {
68
+ settle = resolve;
69
+ });
70
+ const subscriber = (event) => {
71
+ if (event.eventType !== "onFinish") {
72
+ return;
73
+ }
74
+ if (event.state && FAILED_STATES.includes(event.state)) {
75
+ settle({
76
+ status: "failed",
77
+ error: event.errors?.find((entry) => entry?.error !== undefined)?.error ??
78
+ new Error(`Workflow "${workflowId}" endete im Zustand "${event.state}".`),
79
+ });
80
+ return;
81
+ }
82
+ settle({ status: "completed", result: event.result });
83
+ };
84
+ const unsubscribe = async () => {
85
+ try {
86
+ await engine.unsubscribe({
87
+ workflowId,
88
+ transactionId,
89
+ subscriberOrId: subscriber,
90
+ });
91
+ }
92
+ catch {
93
+ // A leftover subscription is dropped by the engine on finish.
94
+ }
95
+ };
96
+ await engine.subscribe({ workflowId, transactionId, subscriber });
97
+ let ret;
98
+ try {
99
+ // The engine JSON-clones its options, so the container is never passed
100
+ // to run(); the engine uses the shared app container.
101
+ ret = await engine.run(workflowId, {
102
+ input,
103
+ transactionId,
104
+ throwOnError: true,
105
+ });
106
+ }
107
+ catch (error) {
108
+ await unsubscribe();
109
+ throw error;
110
+ }
111
+ if (ret.acknowledgement?.hasFinished === false) {
112
+ return { finished: false, outcome };
113
+ }
114
+ await unsubscribe();
115
+ return { finished: true, result: ret.result };
116
+ };
117
+ /**
118
+ * Records the outcome of a run that ended outside the request: through the
119
+ * global framework container, because the request scope may be gone.
120
+ */
121
+ const recordOutcomeLater = async (descriptor, action, input, outcome) => {
122
+ if (outcome.status === "completed") {
123
+ await finishRun(framework_1.container, input, {
124
+ status: "completed",
125
+ result: outcome.result,
126
+ });
127
+ await emitFinished(framework_1.container, input, { status: "completed" });
128
+ return;
129
+ }
130
+ try {
131
+ framework_1.container
132
+ .resolve(utils_1.ContainerRegistrationKeys.LOGGER)
133
+ .error(`Hintergrund-Aktion "${action.key}" von Plugin "${descriptor.plugin_key}" (Workflow "${action.workflow_id}", ausgelöst von ${input.triggered_by}) ist fehlgeschlagen: ${(0, plugin_features_http_1.describeError)(outcome.error)}`);
134
+ }
135
+ catch {
136
+ // Logging must not hide the finished event.
137
+ }
138
+ await finishRun(framework_1.container, input, {
139
+ status: "failed",
140
+ message: failureMessage(outcome.error),
141
+ });
142
+ await emitFinished(framework_1.container, input, {
143
+ status: "failed",
144
+ error: outcome.error,
145
+ });
146
+ };
147
+ /**
148
+ * Runs an action's workflow through the workflow engine and records the run
149
+ * in `plugin_action_run`. A second start while the same action is running
150
+ * returns `already_running` (nothing is started). `sync` awaits the workflow
151
+ * (a failure propagates to the MedusaError pipeline); `background` starts it
152
+ * without awaiting and records the outcome through the global container.
153
+ * A workflow that is still running when `run()` returns (async steps) keeps
154
+ * its run row `running`, which keeps the 409 slot taken, until the engine
155
+ * reports its finish; a `sync` action then answers `started`. Every path
156
+ * emits `plugin-action.finished.v1` when the run ends.
157
+ */
158
+ const runPluginAction = async (container, descriptor, action, triggeredBy) => {
159
+ if (!workflows_sdk_1.MedusaWorkflow.getWorkflow(action.workflow_id)) {
160
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Workflow "${action.workflow_id}" der Aktion "${action.key}" (Plugin "${descriptor.plugin_key}") ist nicht registriert.`);
161
+ }
162
+ const started = await (0, plugin_features_http_1.resolvePluginFeaturesService)(container).startPluginActionRun({
163
+ plugin_key: descriptor.plugin_key,
164
+ action_key: action.key,
165
+ triggered_by: triggeredBy,
166
+ });
167
+ if (!started.started) {
168
+ return { key: action.key, status: "already_running", run: started.run };
169
+ }
170
+ const input = {
171
+ plugin_key: descriptor.plugin_key,
172
+ action_key: action.key,
173
+ triggered_by: triggeredBy,
174
+ run_id: started.run.id,
175
+ };
176
+ const engine = container.resolve(utils_1.Modules.WORKFLOW_ENGINE);
177
+ const finishLater = (outcome) => {
178
+ void outcome
179
+ .then((settled) => recordOutcomeLater(descriptor, action, input, settled))
180
+ .catch(() => {
181
+ // finishRun and emitAfterCommit already log their own failures.
182
+ });
183
+ };
184
+ if (action.mode === "sync") {
185
+ let start;
186
+ try {
187
+ start = await startWorkflow(engine, action.workflow_id, input);
188
+ }
189
+ catch (error) {
190
+ await finishRun(container, input, {
191
+ status: "failed",
192
+ message: failureMessage(error),
193
+ });
194
+ await emitFinished(container, input, { status: "failed", error });
195
+ throw error;
196
+ }
197
+ if (!start.finished) {
198
+ finishLater(start.outcome);
199
+ return { key: action.key, status: "started", run: started.run };
200
+ }
201
+ const { result } = start;
202
+ const finished = await finishRun(container, input, {
203
+ status: "completed",
204
+ result,
205
+ });
206
+ await emitFinished(container, input, { status: "completed" });
207
+ const compact = (0, plugin_action_runs_1.compactActionResult)(result);
208
+ const record = finished ?? started.run;
209
+ return compact === undefined
210
+ ? { key: action.key, status: "completed", run: record }
211
+ : { key: action.key, status: "completed", result: compact, run: record };
212
+ }
213
+ // Background: the request scope may be gone when the run ends, so the
214
+ // outcome is recorded and reported through the global framework container.
215
+ finishLater(startWorkflow(engine, action.workflow_id, input).then((start) => start.finished
216
+ ? { status: "completed", result: start.result }
217
+ : start.outcome, (error) => ({ status: "failed", error })));
218
+ return { key: action.key, status: "started", run: started.run };
219
+ };
220
+ exports.runPluginAction = runPluginAction;
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWFjdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL3BsdWdpbi1hY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDhHQUdpRjtBQUNqRixtREFBcUU7QUFNckUscURBS2tDO0FBQ2xDLHFFQUFrRTtBQU9sRSw2RkFJNkQ7QUFDN0QsaUVBSStCO0FBRS9CLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFBO0FBa0JsQixRQUFBLHFDQUFxQyxHQUFHLDZCQUE2QixDQUFBO0FBRWxGLHVFQUF1RTtBQUNoRSxNQUFNLG1CQUFtQixHQUFHLENBQ2pDLFVBQW1DLEVBQ25DLFNBQWlCLEVBQ08sRUFBRTtJQUMxQixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQTtJQUMzRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDWixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUMzQixzQkFBc0IsU0FBUyxjQUFjLFVBQVUsQ0FBQyxVQUFVLEtBQUssQ0FDeEUsQ0FBQTtJQUNILENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQTtBQUNmLENBQUMsQ0FBQTtBQVpZLFFBQUEsbUJBQW1CLHVCQVkvQjtBQUVELE1BQU0sWUFBWSxHQUFHLENBQ25CLFNBQTBCLEVBQzFCLEtBQWdDLEVBQ2hDLE9BQXVFLEVBQ3hELEVBQUUsQ0FDakIsSUFBQSxzQ0FBZSxFQUNiLFNBQVMsRUFDVCw4Q0FBNEIsRUFDNUIsR0FBRyxFQUFFLENBQ0gsaURBQStCLENBQUMsS0FBSyxDQUFDO0lBQ3BDLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtJQUM1QixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7SUFDNUIsTUFBTSxFQUFFLEtBQUss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
@@ -1,20 +1,79 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.requirePluginFeatureDescriptor = exports.listPluginFeatureDescriptors = exports.resolvePluginFeaturesService = void 0;
3
+ exports.emitPluginSettingsUpdated = exports.emitPluginFeaturesUpdated = exports.emitAfterCommit = exports.describeError = exports.requirePluginFeatureDescriptor = exports.requireDiscoveredPlugin = exports.listDiscoveredPlugins = exports.listPluginFeatureDescriptors = exports.resolvePluginFeaturesService = void 0;
4
+ const plugin_features_1 = require("@hartl-services/medusa-food-supplements-contracts/events/plugin-features");
4
5
  const utils_1 = require("@medusajs/framework/utils");
5
6
  const constants_1 = require("../public/constants");
6
7
  const discover_plugin_features_1 = require("../utils/discover-plugin-features");
7
8
  const resolvePluginFeaturesService = (container) => container.resolve(constants_1.PLUGIN_FEATURES_MODULE);
8
9
  exports.resolvePluginFeaturesService = resolvePluginFeaturesService;
9
- const listPluginFeatureDescriptors = (container) => (0, discover_plugin_features_1.discoverPluginFeatureDescriptors)(container);
10
+ const listPluginFeatureDescriptors = (container) => (0, discover_plugin_features_1.discoverPluginFeatureProviders)(container).map((provider) => provider.descriptor);
10
11
  exports.listPluginFeatureDescriptors = listPluginFeatureDescriptors;
11
- /** Descriptor of an installed plugin; `NOT_FOUND` for an unknown key. */
12
- const requirePluginFeatureDescriptor = (container, pluginKey) => {
13
- const descriptor = (0, discover_plugin_features_1.findPluginFeatureDescriptor)(container, pluginKey);
14
- if (!descriptor) {
12
+ const listDiscoveredPlugins = (container) => (0, discover_plugin_features_1.discoverPluginFeatureProviders)(container).map((provider) => ({
13
+ descriptor: provider.descriptor,
14
+ fallback: (0, discover_plugin_features_1.readPluginSettingsFallback)(provider),
15
+ }));
16
+ exports.listDiscoveredPlugins = listDiscoveredPlugins;
17
+ /** Descriptor and fallback of an installed plugin; `NOT_FOUND` otherwise. */
18
+ const requireDiscoveredPlugin = (container, pluginKey) => {
19
+ const provider = (0, discover_plugin_features_1.findPluginFeatureProvider)(container, pluginKey);
20
+ if (!provider) {
15
21
  throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Plugin "${pluginKey}" hat keine Funktionsschalter.`);
16
22
  }
17
- return descriptor;
23
+ return {
24
+ descriptor: provider.descriptor,
25
+ fallback: (0, discover_plugin_features_1.readPluginSettingsFallback)(provider),
26
+ };
18
27
  };
28
+ exports.requireDiscoveredPlugin = requireDiscoveredPlugin;
29
+ /** Descriptor of an installed plugin; `NOT_FOUND` for an unknown key. */
30
+ const requirePluginFeatureDescriptor = (container, pluginKey) => (0, exports.requireDiscoveredPlugin)(container, pluginKey).descriptor;
19
31
  exports.requirePluginFeatureDescriptor = requirePluginFeatureDescriptor;
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWZlYXR1cmVzLWh0dHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL3BsdWdpbi1mZWF0dXJlcy1odHRwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUF1RDtBQUV2RCxtREFBNEQ7QUFHNUQsZ0ZBRzBDO0FBRW5DLE1BQU0sNEJBQTRCLEdBQUcsQ0FDMUMsU0FBMEIsRUFDRyxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxrQ0FBc0IsQ0FBQyxDQUFBO0FBRjlELFFBQUEsNEJBQTRCLGdDQUVrQztBQUVwRSxNQUFNLDRCQUE0QixHQUFHLENBQzFDLFNBQTBCLEVBQ0MsRUFBRSxDQUFDLElBQUEsMkRBQWdDLEVBQUMsU0FBUyxDQUFDLENBQUE7QUFGOUQsUUFBQSw0QkFBNEIsZ0NBRWtDO0FBRTNFLHlFQUF5RTtBQUNsRSxNQUFNLDhCQUE4QixHQUFHLENBQzVDLFNBQTBCLEVBQzFCLFNBQWlCLEVBQ1EsRUFBRTtJQUMzQixNQUFNLFVBQVUsR0FBRyxJQUFBLHNEQUEyQixFQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUNwRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFDM0IsV0FBVyxTQUFTLGdDQUFnQyxDQUNyRCxDQUFBO0lBQ0gsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFBO0FBQ25CLENBQUMsQ0FBQTtBQVpZLFFBQUEsOEJBQThCLGtDQVkxQyJ9
32
+ const describeError = (error) => error instanceof Error
33
+ ? error.message
34
+ : typeof error?.message === "string"
35
+ ? error.message
36
+ : String(error);
37
+ exports.describeError = describeError;
38
+ /**
39
+ * Emits one event after the write committed; a failed emit is logged and
40
+ * never undoes the write (the Admin already sees the new state).
41
+ */
42
+ const emitAfterCommit = async (container, name, buildData, pluginKey) => {
43
+ try {
44
+ const data = buildData();
45
+ await container
46
+ .resolve(utils_1.Modules.EVENT_BUS)
47
+ .emit({ name, data });
48
+ }
49
+ catch (error) {
50
+ try {
51
+ container
52
+ .resolve(utils_1.ContainerRegistrationKeys.LOGGER)
53
+ .error(`Event "${name}" für Plugin "${pluginKey}" konnte nicht gesendet werden: ${(0, exports.describeError)(error)}`);
54
+ }
55
+ catch {
56
+ // Logging must not replace the original outcome.
57
+ }
58
+ }
59
+ };
60
+ exports.emitAfterCommit = emitAfterCommit;
61
+ /** Announces a saved toggle update with the plugin's effective values. */
62
+ const emitPluginFeaturesUpdated = (container, plugin) => (0, exports.emitAfterCommit)(container, plugin_features_1.PLUGIN_FEATURES_UPDATED_EVENT, () => plugin_features_1.PluginFeaturesUpdatedEventSchema.parse({
63
+ plugin_key: plugin.plugin_key,
64
+ enabled: plugin.enabled,
65
+ features: Object.fromEntries(plugin.features.map((feature) => [
66
+ feature.key,
67
+ feature.effective_enabled,
68
+ ])),
69
+ version: plugin.version,
70
+ }), plugin.plugin_key);
71
+ exports.emitPluginFeaturesUpdated = emitPluginFeaturesUpdated;
72
+ /** Announces a saved settings update; carries keys only, never values. */
73
+ const emitPluginSettingsUpdated = (container, plugin, changedKeys) => (0, exports.emitAfterCommit)(container, plugin_features_1.PLUGIN_SETTINGS_UPDATED_EVENT, () => plugin_features_1.PluginSettingsUpdatedEventSchema.parse({
74
+ plugin_key: plugin.plugin_key,
75
+ version: plugin.settings_version,
76
+ changed_keys: [...changedKeys],
77
+ }), plugin.plugin_key);
78
+ exports.emitPluginSettingsUpdated = emitPluginSettingsUpdated;
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWZlYXR1cmVzLWh0dHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL3BsdWdpbi1mZWF0dXJlcy1odHRwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDhHQUtpRjtBQU1qRixxREFJa0M7QUFFbEMsbURBQTREO0FBTTVELGdGQUkwQztBQVFuQyxNQUFNLDRCQUE0QixHQUFHLENBQzFDLFNBQTBCLEVBQ0csRUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsa0NBQXNCLENBQUMsQ0FBQTtBQUY5RCxRQUFBLDRCQUE0QixnQ0FFa0M7QUFFcEUsTUFBTSw0QkFBNEIsR0FBRyxDQUMxQyxTQUEwQixFQUNDLEVBQUUsQ0FDN0IsSUFBQSx5REFBOEIsRUFBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQzNDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUNsQyxDQUFBO0FBTFUsUUFBQSw0QkFBNEIsZ0NBS3RDO0FBRUksTUFBTSxxQkFBcUIsR0FBRyxDQUNuQyxTQUEwQixFQUNOLEVBQUUsQ0FDdEIsSUFBQSx5REFBOEIsRUFBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDM0QsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVO0lBQy9CLFFBQVEsRUFBRSxJQUFBLHFEQUEwQixFQUFDLFFBQVEsQ0FBQztDQUMvQyxDQUFDLENBQUMsQ0FBQTtBQU5RLFFBQUEscUJBQXFCLHlCQU03QjtBQUVMLDZFQUE2RTtBQUN0RSxNQUFNLHVCQUF1QixHQUFHLENBQ3JDLFNBQTBCLEVBQzFCLFNBQWlCLEVBQ0MsRUFBRTtJQUNwQixNQUFNLFFBQVEsR0FBRyxJQUFBLG9EQUF5QixFQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUNoRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxNQUFNLElBQUksbUJB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
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = GET;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ /**
6
+ * Medusa serves nothing at the root path - the backend's landing page is the
7
+ * admin dashboard under admin.path (default /app). Without this route the
8
+ * deployed domain answers "/" with a 404, so the admin has to be opened by
9
+ * typing its path every time.
10
+ *
11
+ * Deliberately handled in the plugin rather than with a reverse-proxy
12
+ * redirect label: a proxy rule needs a bare hostname to avoid hijacking the
13
+ * root path of every other app behind the same shared proxy, and no existing
14
+ * environment variable carries one (MEDUSA_BACKEND_URL includes the scheme).
15
+ * Doing it here keeps the shop deployable per shop without extra
16
+ * configuration and makes the redirect work in local development too. The
17
+ * target follows the shop's configured admin.path.
18
+ *
19
+ * 302, not 301: browsers cache a permanent redirect on the bare domain
20
+ * essentially forever, which is painful to undo should "/" ever get real
21
+ * content.
22
+ */
23
+ async function GET(req, res) {
24
+ const config = req.scope.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
25
+ res.redirect(302, config.admin?.path || "/app");
26
+ }
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBcUJBLGtCQUdDO0FBdkJELHFEQUFxRTtBQUVyRTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSSxLQUFLLFVBQVUsR0FBRyxDQUFDLEdBQWtCLEVBQUUsR0FBbUI7SUFDL0QsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDekUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksTUFBTSxDQUFDLENBQUE7QUFDakQsQ0FBQyJ9
@@ -0,0 +1,21 @@
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 document_download_response_1 = require("../../../../document-download-response");
6
+ const resolve_services_1 = require("../../../../../documents/utils/resolve-services");
7
+ const GET = async (req, res) => {
8
+ const document = await (0, resolve_services_1.resolveDocumentsService)(req.scope).getDocumentForCustomer(req.params.id, req.auth_context.actor_id);
9
+ if (!document?.file_id || !document.filename) {
10
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, "Document not found.");
11
+ }
12
+ const files = req.scope.resolve(utils_1.Modules.FILE);
13
+ const stream = await files.getDownloadStream(document.file_id);
14
+ (0, document_download_response_1.setDocumentDownloadHeaders)(res, {
15
+ filename: document.filename,
16
+ disposition: "attachment",
17
+ });
18
+ stream.pipe(res);
19
+ };
20
+ exports.GET = GET;
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2RvY3VtZW50cy9baWRdL2Rvd25sb2FkL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUtBLHFEQUFnRTtBQUVoRSx1RkFBbUY7QUFDbkYsc0ZBQXlGO0FBRWxGLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFDdEIsR0FBK0IsRUFDL0IsR0FBbUIsRUFDbkIsRUFBRTtJQUNGLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSwwQ0FBdUIsRUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsc0JBQXNCLENBQzlFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUNiLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUMxQixDQUFBO0lBQ0QsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDN0MsTUFBTSxJQUFJLG1CQUFXLENBQUMsbUJBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLHFCQUFxQixDQUFDLENBQUE7SUFDM0UsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQU8sQ0FBQyxJQUFJLENBQXVCLENBQUE7SUFDbkUsTUFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzlELElBQUEsdURBQTBCLEVBQUMsR0FBRyxFQUFFO1FBQzlCLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtRQUMzQixXQUFXLEVBQUUsWUFBWTtLQUMxQixDQUFDLENBQUE7SUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQ2xCLENBQUMsQ0FBQTtBQW5CWSxRQUFBLEdBQUcsT0FtQmYifQ==
@@ -0,0 +1,15 @@
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 resolve_services_1 = require("../../../../documents/utils/resolve-services");
6
+ const document_response_1 = require("../../../document-response");
7
+ const GET = async (req, res) => {
8
+ const document = await (0, resolve_services_1.resolveDocumentsService)(req.scope).getDocumentForCustomer(req.params.id, req.auth_context.actor_id);
9
+ if (!document) {
10
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, "Document not found.");
11
+ }
12
+ res.json({ document: (0, document_response_1.toDocumentSummary)(document) });
13
+ };
14
+ exports.GET = GET;
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2RvY3VtZW50cy9baWRdL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHFEQUF1RDtBQUd2RCxtRkFBc0Y7QUFDdEYsa0VBQThEO0FBRXZELE1BQU0sR0FBRyxHQUFHLEtBQUssRUFDdEIsR0FBK0IsRUFDL0IsR0FBNkMsRUFDN0MsRUFBRTtJQUNGLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSwwQ0FBdUIsRUFDNUMsR0FBRyxDQUFDLEtBQUssQ0FDVixDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDbEUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsTUFBTSxJQUFJLG1CQUFXLENBQUMsbUJBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLHFCQUFxQixDQUFDLENBQUE7SUFDM0UsQ0FBQztJQUVELEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBQSxxQ0FBaUIsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUE7QUFDckQsQ0FBQyxDQUFBO0FBWlksUUFBQSxHQUFHLE9BWWYifQ==
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = void 0;
4
+ const resolve_services_1 = require("../../../documents/utils/resolve-services");
5
+ const document_response_1 = require("../../document-response");
6
+ const GET = async (req, res) => {
7
+ const documents = await (0, resolve_services_1.resolveDocumentsService)(req.scope).listIssuedDocumentsForCustomer(req.auth_context.actor_id);
8
+ res.json({ documents: documents.map(document_response_1.toDocumentSummary) });
9
+ };
10
+ exports.GET = GET;
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2RvY3VtZW50cy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFNQSxnRkFBbUY7QUFDbkYsK0RBQTJEO0FBRXBELE1BQU0sR0FBRyxHQUFHLEtBQUssRUFDdEIsR0FBK0IsRUFDL0IsR0FBK0MsRUFDL0MsRUFBRTtJQUNGLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBQSwwQ0FBdUIsRUFDN0MsR0FBRyxDQUFDLEtBQUssQ0FDVixDQUFDLDhCQUE4QixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUE7SUFFM0QsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLHFDQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBQzNELENBQUMsQ0FBQTtBQVRZLFFBQUEsR0FBRyxPQVNmIn0=
@@ -0,0 +1,12 @@
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==
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DOCUMENTS_BUILD_PLACEHOLDERS = exports.createDefaultDocumentHtmlFactory = void 0;
4
+ /**
5
+ * Documents part of the `@hartl-services/medusa-base/config` entry point: values a shop
6
+ * needs in `medusa-config.ts` or in a test, without loading the plugin itself.
7
+ */
8
+ var html_factory_1 = require("../templates/html-factory");
9
+ Object.defineProperty(exports, "createDefaultDocumentHtmlFactory", { enumerable: true, get: function () { return html_factory_1.createDefaultDocumentHtmlFactory; } });
10
+ /**
11
+ * Placeholder environment values for `medusa build`. `medusa-config.ts` is
12
+ * evaluated at build time, where the runtime-only Documents PDF executable
13
+ * is not set; spread these under the real environment during the build.
14
+ */
15
+ exports.DOCUMENTS_BUILD_PLACEHOLDERS = {
16
+ DOCUMENT_PDF_EXECUTABLE: "google-chrome",
17
+ };
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZG9jdW1lbnRzL2NvbmZpZy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7O0dBR0c7QUFDSCwwREFBNEU7QUFBbkUsZ0lBQUEsZ0NBQWdDLE9BQUE7QUFFekM7Ozs7R0FJRztBQUNVLFFBQUEsNEJBQTRCLEdBQXFDO0lBQzVFLHVCQUF1QixFQUFFLGVBQWU7Q0FDekMsQ0FBQSJ9
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.documentsPaths = void 0;
4
+ var documents_1 = require("@hartl-services/medusa-food-supplements-contracts/paths/documents");
5
+ Object.defineProperty(exports, "documentsPaths", { enumerable: true, get: function () { return documents_1.documentsPaths; } });
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RvY3VtZW50cy9wYXRocy9kb2N1bWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0ZBQWtHO0FBQXpGLDJHQUFBLGNBQWMsT0FBQSJ9
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./documents"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZG9jdW1lbnRzL3BhdGhzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4Q0FBMkIifQ==
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.documentsPluginFeatures = void 0;
4
+ const public_1 = require("../public");
5
+ exports.documentsPluginFeatures = (0, public_1.definePluginFeatures)({
6
+ plugin_key: "documents",
7
+ label: "Dokumente",
8
+ description: "Rechnungen, Stornos und Packlisten zu Bestellungen. Ausgeschaltet sind alle Dokument-Routen in Admin und Storefront nicht erreichbar und es werden keine neuen Dokumente erstellt; bereits ausgestellte Dokumente bleiben gespeichert. Checkout, Fulfillment und Versand laufen unverändert weiter.",
9
+ features: [
10
+ {
11
+ key: "invoices",
12
+ label: "Rechnungen & Stornos",
13
+ description: "Rechnungen nach Versand, Stornorechnungen bei Stornierung und Erstattung sowie deren Abruf im Admin und im Kundenkonto. Ausgeschaltet wird für neue Versendungen, Stornierungen und Erstattungen keine Rechnung, kein Storno und kein Erstattungsdokument ausgestellt, und auch später nicht nachträglich (die Ereignisse werden nicht erneut abgespielt). Versand- und Storno-Mails werden dann ohne Beleg verschickt; Erstattungs-Mails entfallen.",
14
+ default_enabled: true,
15
+ },
16
+ {
17
+ key: "packing_lists",
18
+ label: "Packlisten",
19
+ description: "Packlisten je Fulfillment inklusive Chargenrevisionen und Abruf im Admin.",
20
+ default_enabled: true,
21
+ },
22
+ ],
23
+ });
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWZlYXR1cmVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RvY3VtZW50cy9wbHVnaW4tZmVhdHVyZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsc0NBQWdEO0FBRW5DLFFBQUEsdUJBQXVCLEdBQUcsSUFBQSw2QkFBb0IsRUFBQztJQUMxRCxVQUFVLEVBQUUsV0FBVztJQUN2QixLQUFLLEVBQUUsV0FBVztJQUNsQixXQUFXLEVBQ1QscVNBQXFTO0lBQ3ZTLFFBQVEsRUFBRTtRQUNSO1lBQ0UsR0FBRyxFQUFFLFVBQVU7WUFDZixLQUFLLEVBQUUsc0JBQXNCO1lBQzdCLFdBQVcsRUFDVCxzYkFBc2I7WUFDeGIsZUFBZSxFQUFFLElBQUk7U0FDdEI7UUFDRDtZQUNFLEdBQUcsRUFBRSxlQUFlO1lBQ3BCLEtBQUssRUFBRSxZQUFZO1lBQ25CLFdBQVcsRUFDVCwyRUFBMkU7WUFDN0UsZUFBZSxFQUFFLElBQUk7U0FDdEI7S0FDRjtDQUNGLENBQUMsQ0FBQSJ9
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("@hartl-services/medusa-food-supplements-contracts/schemas/documents"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RvY3VtZW50cy9zY2hlbWFzL2RvY3VtZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsc0dBQW1GIn0=
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./documents"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZG9jdW1lbnRzL3NjaGVtYXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUEyQiJ9
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = verifyDocumentsFileStorage;
4
+ const node_crypto_1 = require("node:crypto");
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const PAGE_SIZE = 100;
7
+ const DOCUMENTS_MODULE = "documents";
8
+ const hashIdentifier = (value) => (0, node_crypto_1.createHash)("sha256").update(value).digest("hex").slice(0, 12);
9
+ const countStreamBytes = async (stream) => {
10
+ let bytes = 0;
11
+ for await (const chunk of stream) {
12
+ bytes += Buffer.isBuffer(chunk)
13
+ ? chunk.length
14
+ : Buffer.byteLength(String(chunk));
15
+ }
16
+ return bytes;
17
+ };
18
+ /**
19
+ * Read-only restore drill for private Documents files through the active
20
+ * Medusa File provider. It intentionally does not change document or product
21
+ * data, and works against local storage or the S3 cache provider.
22
+ *
23
+ * Run after an object-store restore:
24
+ * pnpm exec medusa exec ./node_modules/@hartl-services/medusa-base/.medusa/server/src/documents/scripts/verify-documents-file-storage.js
25
+ *
26
+ * Deliberately not under `migration-scripts`: Medusa runs every plugin
27
+ * `migration-scripts` file on `db:migrate`, this drill must only run on demand.
28
+ */
29
+ async function verifyDocumentsFileStorage({ container, }) {
30
+ const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
31
+ if (!container.hasRegistration(DOCUMENTS_MODULE)) {
32
+ logger.info("Skipping Documents file storage verification: the Documents module is not enabled for this shop.");
33
+ return;
34
+ }
35
+ const documents = container.resolve(DOCUMENTS_MODULE);
36
+ const files = container.resolve(utils_1.Modules.FILE);
37
+ let documentCount = 0;
38
+ let totalBytes = 0;
39
+ for (let skip = 0;; skip += PAGE_SIZE) {
40
+ const page = await documents.listDocuments({ status: "issued" }, { skip, take: PAGE_SIZE });
41
+ for (const document of page) {
42
+ if (!document.file_id) {
43
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Issued document ${hashIdentifier(document.id)} has no File Module key.`);
44
+ }
45
+ const stream = await files.getDownloadStream(document.file_id);
46
+ totalBytes += await countStreamBytes(stream);
47
+ documentCount += 1;
48
+ }
49
+ if (page.length < PAGE_SIZE) {
50
+ break;
51
+ }
52
+ }
53
+ logger.info(`Verified ${documentCount} issued document files through the active File provider (${totalBytes} bytes).`);
54
+ }
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5LWRvY3VtZW50cy1maWxlLXN0b3JhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZG9jdW1lbnRzL3NjcmlwdHMvdmVyaWZ5LWRvY3VtZW50cy1maWxlLXN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFtREEsNkNBK0NDO0FBbEdELDZDQUF3QztBQUl4QyxxREFJa0M7QUFjbEMsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFBO0FBQ3JCLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFBO0FBRXBDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBYSxFQUFVLEVBQUUsQ0FDL0MsSUFBQSx3QkFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtBQUUvRCxNQUFNLGdCQUFnQixHQUFHLEtBQUssRUFDNUIsTUFBOEIsRUFDYixFQUFFO0lBQ25CLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQTtJQUNiLElBQUksS0FBSyxFQUFFLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ2pDLEtBQUssSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUM3QixDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU07WUFDZCxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtJQUN0QyxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDLENBQUE7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ1ksS0FBSyxVQUFVLDBCQUEwQixDQUFDLEVBQ3ZELFNBQVMsR0FHVjtJQUNDLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsTUFBTSxDQUFDLENBQUE7SUFFbEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1FBQ2pELE1BQU0sQ0FBQyxJQUFJLENBQ1Qsa0dBQWtHLENBQ25HLENBQUE7UUFDRCxPQUFNO0lBQ1IsQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQW9CLENBQUE7SUFDeEUsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsSUFBSSxDQUF1QixDQUFBO0lBRW5FLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQTtJQUNyQixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUE7SUFFbEIsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLEdBQUksSUFBSSxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLE1BQU0sU0FBUyxDQUFDLGFBQWEsQ0FDeEMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQ3BCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FDMUIsQ0FBQTtRQUVELEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUNsQyxtQkFBbUIsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsMEJBQTBCLENBQ3pFLENBQUE7WUFDSCxDQUFDO1lBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQzlELFVBQVUsSUFBSSxNQUFNLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQzVDLGFBQWEsSUFBSSxDQUFDLENBQUE7UUFDcEIsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLEVBQUUsQ0FBQztZQUM1QixNQUFLO1FBQ1AsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsSUFBSSxDQUNULFlBQVksYUFBYSw0REFBNEQsVUFBVSxVQUFVLENBQzFHLENBQUE7QUFDSCxDQUFDIn0=