@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,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toDocumentMerchant = exports.merchantOptionToFallback = exports.MERCHANT_VAT_PLACEHOLDER = exports.DOCUMENT_MERCHANT_REQUIRED_FIELDS = void 0;
4
+ /** Without these a financial document or packing list has no legal sender. */
5
+ exports.DOCUMENT_MERCHANT_REQUIRED_FIELDS = [
6
+ "legal_name",
7
+ "address_line1",
8
+ "postal_code",
9
+ "city",
10
+ "country_code",
11
+ ];
12
+ /** Development placeholder UID: never printed on a document. */
13
+ exports.MERCHANT_VAT_PLACEHOLDER = "ATU00000000";
14
+ const text = (value) => {
15
+ if (typeof value !== "string") {
16
+ return null;
17
+ }
18
+ const trimmed = value.trim();
19
+ return trimmed ? trimmed : null;
20
+ };
21
+ const vatNumber = (value) => {
22
+ const normalized = text(value);
23
+ return normalized &&
24
+ normalized.replace(/\s+/g, "").toUpperCase() === exports.MERCHANT_VAT_PLACEHOLDER
25
+ ? null
26
+ : normalized;
27
+ };
28
+ /**
29
+ * The plugin's `merchant` option as a per-field fallback for the shop master
30
+ * data. Empty values are left out so they never shadow a declared default.
31
+ */
32
+ const merchantOptionToFallback = (option) => {
33
+ if (!option) {
34
+ return {};
35
+ }
36
+ const address = option.registeredAddress;
37
+ const entries = [
38
+ ["legal_name", option.legalName],
39
+ ["address_line1", address?.address1],
40
+ ["address_line2", address?.address2],
41
+ ["postal_code", address?.postalCode],
42
+ ["city", address?.city],
43
+ [
44
+ "country_code",
45
+ text(address?.countryCode ?? option.countryCode)?.toLowerCase(),
46
+ ],
47
+ ["vat_number", option.vatNumber],
48
+ ];
49
+ const fallback = {};
50
+ for (const [key, value] of entries) {
51
+ const normalized = text(value);
52
+ if (normalized) {
53
+ fallback[key] = normalized;
54
+ }
55
+ }
56
+ return fallback;
57
+ };
58
+ exports.merchantOptionToFallback = merchantOptionToFallback;
59
+ /** Maps resolved shop master data to the render input's `merchant`. */
60
+ const toDocumentMerchant = (values) => {
61
+ const missing = exports.DOCUMENT_MERCHANT_REQUIRED_FIELDS.filter((key) => !text(values[key]));
62
+ if (missing.length > 0) {
63
+ return { merchant: null, missing };
64
+ }
65
+ return {
66
+ merchant: {
67
+ legal_name: text(values.legal_name),
68
+ address_line1: text(values.address_line1),
69
+ address_line2: text(values.address_line2),
70
+ postal_code: text(values.postal_code),
71
+ city: text(values.city),
72
+ country_code: text(values.country_code).toLowerCase(),
73
+ vat_number: vatNumber(values.vat_number),
74
+ email: text(values.email),
75
+ phone: text(values.phone),
76
+ website: text(values.website),
77
+ iban: text(values.iban),
78
+ bic: text(values.bic),
79
+ company_register_number: text(values.company_register_number),
80
+ company_register_court: text(values.company_register_court),
81
+ },
82
+ missing: [],
83
+ };
84
+ };
85
+ exports.toDocumentMerchant = toDocumentMerchant;
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyY2hhbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9kb2N1bWVudHMvZG9tYWluL21lcmNoYW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVVBLDhFQUE4RTtBQUNqRSxRQUFBLGlDQUFpQyxHQUFHO0lBQy9DLFlBQVk7SUFDWixlQUFlO0lBQ2YsYUFBYTtJQUNiLE1BQU07SUFDTixjQUFjO0NBQ21DLENBQUE7QUFFbkQsZ0VBQWdFO0FBQ25ELFFBQUEsd0JBQXdCLEdBQUcsYUFBYSxDQUFBO0FBRXJELE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBYyxFQUFpQixFQUFFO0lBQzdDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBQ0QsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQzVCLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtBQUNqQyxDQUFDLENBQUE7QUFFRCxNQUFNLFNBQVMsR0FBRyxDQUFDLEtBQWMsRUFBaUIsRUFBRTtJQUNsRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDOUIsT0FBTyxVQUFVO1FBQ2YsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssZ0NBQXdCO1FBQ3pFLENBQUMsQ0FBQyxJQUFJO1FBQ04sQ0FBQyxDQUFDLFVBQVUsQ0FBQTtBQUNoQixDQUFDLENBQUE7QUFFRDs7O0dBR0c7QUFDSSxNQUFNLHdCQUF3QixHQUFHLENBQ3RDLE1BQTBDLEVBQ2xCLEVBQUU7SUFDMUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osT0FBTyxFQUFFLENBQUE7SUFDWCxDQUFDO0lBQ0QsTUFBTSxPQUFPLEdB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
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveDocumentPluginOptions = exports.DEFAULT_NUMBERING_TIME_ZONE = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const html_factory_1 = require("../../../documents/templates/html-factory");
6
+ const merchant_1 = require("./merchant");
7
+ /** Used when the `documents.numbering.timeZone` option is not given. */
8
+ exports.DEFAULT_NUMBERING_TIME_ZONE = "Europe/Vienna";
9
+ const resolveDocumentPluginOptions = (options) => {
10
+ const configuredTimeZone = options?.numbering?.timeZone;
11
+ const timeZone = configuredTimeZone === undefined
12
+ ? exports.DEFAULT_NUMBERING_TIME_ZONE
13
+ : configuredTimeZone.trim();
14
+ if (!timeZone) {
15
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "The documents plugin requires a numbering time zone.");
16
+ }
17
+ try {
18
+ new Intl.DateTimeFormat("en", { timeZone }).format();
19
+ }
20
+ catch {
21
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `The documents numbering time zone '${timeZone}' is invalid.`);
22
+ }
23
+ if (options?.htmlFactory !== undefined &&
24
+ typeof options.htmlFactory !== "function") {
25
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "The documents 'htmlFactory' option must be a function.");
26
+ }
27
+ if (options?.merchant !== undefined &&
28
+ (typeof options.merchant !== "object" || options.merchant === null)) {
29
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "The documents 'merchant' option must be an object.");
30
+ }
31
+ const executablePath = options?.pdf?.executablePath?.trim() || "google-chrome";
32
+ return {
33
+ htmlFactory: options?.htmlFactory ?? (0, html_factory_1.createDefaultDocumentHtmlFactory)({ timeZone }),
34
+ merchantFallback: (0, merchant_1.merchantOptionToFallback)(options?.merchant),
35
+ numbering: { timeZone },
36
+ pdf: { executablePath },
37
+ };
38
+ };
39
+ exports.resolveDocumentPluginOptions = resolveDocumentPluginOptions;
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2RvY3VtZW50cy9kb21haW4vb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBdUQ7QUFFdkQsNEVBQTRGO0FBTTVGLHlDQUFrRjtBQUVsRix3RUFBd0U7QUFDM0QsUUFBQSwyQkFBMkIsR0FBRyxlQUFlLENBQUE7QUFnQ25ELE1BQU0sNEJBQTRCLEdBQUcsQ0FDMUMsT0FBMEMsRUFDWCxFQUFFO0lBQ2pDLE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUE7SUFDdkQsTUFBTSxRQUFRLEdBQ1osa0JBQWtCLEtBQUssU0FBUztRQUM5QixDQUFDLENBQUMsbUNBQTJCO1FBQzdCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUMvQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixzREFBc0QsQ0FDdkQsQ0FBQTtJQUNILENBQUM7SUFDRCxJQUFJLENBQUM7UUFDSCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtJQUN0RCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsc0NBQXNDLFFBQVEsZUFBZSxDQUM5RCxDQUFBO0lBQ0gsQ0FBQztJQUVELElBQ0UsT0FBTyxFQUFFLFdBQVcsS0FBSyxTQUFTO1FBQ2xDLE9BQU8sT0FBTyxDQUFDLFdBQVcsS0FBSyxVQUFVLEVBQ3pDLENBQUM7UUFDRCxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5Qix3REFBd0QsQ0FDekQsQ0FBQTtJQUNILENBQUM7SUFFRCxJQUNFLE9BQU8sRUFBRSxRQUFRLEtBQUssU0FBUztRQUMvQixDQUFDLE9BQU8sT0FBTyxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsRUFDbkUsQ0FBQztRQUNELE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLG9EQUFvRCxDQUNyRCxDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sY0FBYyxHQUFHLE9BQU8sRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxJQUFJLGVBQWUsQ0FBQTtJQUM5RSxPQUFPO1FBQ0wsV0FBVyxFQUNULE9BQU8sRUFBRSxXQUFXLElBQUksSUFBQSwrQ0FBZ0MsRUFBQyxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQ3hFLGdCQUFnQixFQUFFLElBQUEsbUNBQXdCLEVBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQztRQUM3RCxTQUFTLEVBQUUsRUFBRSxRQUFRLEVBQUU7UUFDdkIsR0FBRyxFQUFFLEVBQUUsY0FBYyxFQUFFO0tBQ3hCLENBQUE7QUFDSCxDQUFDLENBQUE7QUFuRFksUUFBQSw0QkFBNEIsZ0NBbUR4QyJ9
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isPackingListFulfillmentEligible = exports.formatPackingListNumber = exports.createPackingListLines = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const requireString = (value, field) => {
6
+ if (!value.trim()) {
7
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Packing-list field '${field}' is empty.`);
8
+ }
9
+ return value;
10
+ };
11
+ const requireQuantity = (value, field) => {
12
+ if (!Number.isInteger(value) || value <= 0) {
13
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Packing-list field '${field}' must be a positive integer.`);
14
+ }
15
+ return value;
16
+ };
17
+ const requireIsoDate = (value, field) => {
18
+ const date = new Date(requireString(value, field));
19
+ if (Number.isNaN(date.getTime())) {
20
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Packing-list field '${field}' must be a valid date.`);
21
+ }
22
+ return date.toISOString();
23
+ };
24
+ const groupKey = (lineItemId, inventoryItemId) => `${lineItemId}\u0000${inventoryItemId ?? ""}`;
25
+ /**
26
+ * Fulfillment items already contain concrete inventory quantities, including
27
+ * variant inventory multipliers. Grouping on the same identity used by Batch
28
+ * Management keeps kits and partial fulfillments independent.
29
+ */
30
+ const createPackingListLines = (input) => {
31
+ const linesByKey = new Map();
32
+ for (const item of input.fulfillment_items) {
33
+ const lineItemId = requireString(item.line_item_id, "line_item_id");
34
+ const inventoryItemId = item.inventory_item_id
35
+ ? requireString(item.inventory_item_id, "inventory_item_id")
36
+ : null;
37
+ const key = groupKey(lineItemId, inventoryItemId);
38
+ const existing = linesByKey.get(key);
39
+ if (existing) {
40
+ if (existing.title !== item.title || existing.sku !== item.sku) {
41
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Fulfillment item group ${lineItemId} has inconsistent item details.`);
42
+ }
43
+ existing.quantity += requireQuantity(item.quantity, "quantity");
44
+ continue;
45
+ }
46
+ linesByKey.set(key, {
47
+ line_item_id: lineItemId,
48
+ inventory_item_id: inventoryItemId,
49
+ title: requireString(item.title, "title"),
50
+ sku: item.sku?.trim() || null,
51
+ quantity: requireQuantity(item.quantity, "quantity"),
52
+ batch_allocations: [],
53
+ });
54
+ }
55
+ for (const allocation of input.batch_allocations) {
56
+ const key = groupKey(requireString(allocation.line_item_id, "batch.line_item_id"), requireString(allocation.inventory_item_id, "batch.inventory_item_id"));
57
+ const line = linesByKey.get(key);
58
+ if (!line) {
59
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "A batch allocation does not belong to a fulfillment item.");
60
+ }
61
+ line.batch_allocations.push({
62
+ batch_id: requireString(allocation.batch_id, "batch.batch_id"),
63
+ lot_number: requireString(allocation.lot_number, "batch.lot_number"),
64
+ expiry_date: requireIsoDate(allocation.expiry_date, "batch.expiry_date"),
65
+ quantity: requireQuantity(allocation.quantity, "batch.quantity"),
66
+ });
67
+ }
68
+ const lines = [...linesByKey.values()];
69
+ for (const line of lines) {
70
+ line.batch_allocations.sort((left, right) => left.lot_number.localeCompare(right.lot_number) ||
71
+ left.batch_id.localeCompare(right.batch_id));
72
+ if (!input.batch_management_enabled || !line.inventory_item_id) {
73
+ continue;
74
+ }
75
+ const allocated = line.batch_allocations.reduce((sum, allocation) => sum + allocation.quantity, 0);
76
+ if (allocated !== line.quantity) {
77
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Batch allocations for fulfillment item ${line.line_item_id}/${line.inventory_item_id} total ${allocated}, expected ${line.quantity}.`);
78
+ }
79
+ }
80
+ return lines.sort((left, right) => left.title.localeCompare(right.title) ||
81
+ left.line_item_id.localeCompare(right.line_item_id) ||
82
+ (left.inventory_item_id ?? "").localeCompare(right.inventory_item_id ?? ""));
83
+ };
84
+ exports.createPackingListLines = createPackingListLines;
85
+ const formatPackingListNumber = (input) => `PL-${input.order_display_id ?? input.order_id}-${input.fulfillment_id}`;
86
+ exports.formatPackingListNumber = formatPackingListNumber;
87
+ const isPackingListFulfillmentEligible = (input) => input.requires_shipping !== false &&
88
+ (input.canceled_at === null || input.canceled_at === undefined);
89
+ exports.isPackingListFulfillmentEligible = isPackingListFulfillmentEligible;
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2luZy1saXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvZG9jdW1lbnRzL2RvbWFpbi9wYWNraW5nLWxpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQXVEO0FBb0J2RCxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQWEsRUFBRSxLQUFhLEVBQVUsRUFBRTtJQUM3RCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDbEIsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUNsQyx1QkFBdUIsS0FBSyxhQUFhLENBQzFDLENBQUE7SUFDSCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDLENBQUE7QUFFRCxNQUFNLGVBQWUsR0FBRyxDQUFDLEtBQWEsRUFBRSxLQUFhLEVBQVUsRUFBRTtJQUMvRCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDM0MsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUNsQyx1QkFBdUIsS0FBSywrQkFBK0IsQ0FDNUQsQ0FBQTtJQUNILENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUMsQ0FBQTtBQUVELE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBYSxFQUFFLEtBQWEsRUFBVSxFQUFFO0lBQzlELE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQTtJQUNsRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNqQyxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFL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
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeDocumentSnapshot = void 0;
4
+ /** Adds fields introduced after older document snapshots were persisted. */
5
+ const normalizeDocumentSnapshot = (snapshot) => ({
6
+ ...snapshot,
7
+ order: {
8
+ ...snapshot.order,
9
+ tax_compliance: snapshot.order.tax_compliance ?? null,
10
+ },
11
+ totals: {
12
+ ...snapshot.totals,
13
+ tax_breakdown: snapshot.totals.tax_breakdown ?? [],
14
+ },
15
+ });
16
+ exports.normalizeDocumentSnapshot = normalizeDocumentSnapshot;
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcHNob3Qtbm9ybWFsaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2RvY3VtZW50cy9kb21haW4vc25hcHNob3Qtbm9ybWFsaXphdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSw0RUFBNEU7QUFDckUsTUFBTSx5QkFBeUIsR0FBRyxDQUN2QyxRQUEwQixFQUNSLEVBQUUsQ0FBQyxDQUFDO0lBQ3RCLEdBQUcsUUFBUTtJQUNYLEtBQUssRUFBRTtRQUNMLEdBQUcsUUFBUSxDQUFDLEtBQUs7UUFDakIsY0FBYyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsY0FBYyxJQUFJLElBQUk7S0FDdEQ7SUFDRCxNQUFNLEVBQUU7UUFDTixHQUFHLFFBQVEsQ0FBQyxNQUFNO1FBQ2xCLGFBQWEsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLGFBQWEsSUFBSSxFQUFFO0tBQ25EO0NBQ0YsQ0FBQyxDQUFBO0FBWlcsUUFBQSx5QkFBeUIsNkJBWXBDIn0=
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.roundTaxBreakdown = exports.groupTaxLines = exports.getCurrencyDecimalPlaces = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const DEFAULT_CURRENCY_DECIMAL_PLACES = 2;
6
+ const getCurrencyDecimalPlaces = (currencyCode) => utils_1.defaultCurrencies[currencyCode.toUpperCase()]?.decimal_digits ??
7
+ DEFAULT_CURRENCY_DECIMAL_PLACES;
8
+ exports.getCurrencyDecimalPlaces = getCurrencyDecimalPlaces;
9
+ /**
10
+ * Sums item and shipping tax lines per configured tax rate. Lines with the
11
+ * same name and percentage form one entry; first occurrence defines order.
12
+ */
13
+ const groupTaxLines = (lines, currencyCode) => {
14
+ const groups = new Map();
15
+ for (const line of lines) {
16
+ const key = JSON.stringify([line.name, line.code, line.rate]);
17
+ const group = groups.get(key);
18
+ groups.set(key, {
19
+ name: line.name,
20
+ code: line.code,
21
+ rate: line.rate,
22
+ tax_total: {
23
+ amount: utils_1.MathBN.add(group?.tax_total.amount ?? 0, line.amount).toFixed(),
24
+ currency_code: currencyCode,
25
+ },
26
+ });
27
+ }
28
+ return [...groups.values()];
29
+ };
30
+ exports.groupTaxLines = groupTaxLines;
31
+ /**
32
+ * Rounds every entry to the currency's minor unit and assigns the rounding
33
+ * residue to the largest entry, so the printed rows add up exactly to the
34
+ * printed tax total. A residue larger than the accumulated rounding error
35
+ * means the entries do not describe the total and is rejected.
36
+ */
37
+ const roundTaxBreakdown = (entries, taxTotal) => {
38
+ if (entries.length === 0) {
39
+ return [];
40
+ }
41
+ const currencyCode = taxTotal.currency_code;
42
+ const decimalPlaces = (0, exports.getCurrencyDecimalPlaces)(currencyCode);
43
+ const target = utils_1.MathBN.convert(taxTotal.amount).decimalPlaces(decimalPlaces);
44
+ const rounded = entries.map((entry) => {
45
+ if (entry.tax_total.currency_code !== currencyCode) {
46
+ throw new Error("The tax breakdown contains mixed currencies.");
47
+ }
48
+ return utils_1.MathBN.convert(entry.tax_total.amount).decimalPlaces(decimalPlaces);
49
+ });
50
+ const residue = utils_1.MathBN.sub(target, utils_1.MathBN.sum(...rounded));
51
+ const minorUnit = utils_1.MathBN.convert(10).pow(-decimalPlaces);
52
+ if (utils_1.MathBN.gt(residue.abs(), utils_1.MathBN.mult(minorUnit, entries.length))) {
53
+ throw new Error("The tax breakdown does not match the tax total.");
54
+ }
55
+ const largestIndex = rounded.reduce((largest, amount, index) => utils_1.MathBN.gt(amount.abs(), rounded[largest].abs()) ? index : largest, 0);
56
+ rounded[largestIndex] = utils_1.MathBN.add(rounded[largestIndex], residue);
57
+ return entries.map((entry, index) => ({
58
+ ...entry,
59
+ tax_total: {
60
+ amount: rounded[index].toFixed(decimalPlaces),
61
+ currency_code: currencyCode,
62
+ },
63
+ }));
64
+ };
65
+ exports.roundTaxBreakdown = roundTaxBreakdown;
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGF4LWJyZWFrZG93bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2RvY3VtZW50cy9kb21haW4vdGF4LWJyZWFrZG93bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBcUU7QUFPckUsTUFBTSwrQkFBK0IsR0FBRyxDQUFDLENBQUE7QUFFbEMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLFlBQW9CLEVBQVUsRUFBRSxDQUN2RSx5QkFBaUIsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxjQUFjO0lBQzdELCtCQUErQixDQUFBO0FBRnBCLFFBQUEsd0JBQXdCLDRCQUVKO0FBU2pDOzs7R0FHRztBQUNJLE1BQU0sYUFBYSxHQUFHLENBQzNCLEtBQXNCLEVBQ3RCLFlBQW9CLEVBQ1MsRUFBRTtJQUMvQixNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBcUMsQ0FBQTtJQUMzRCxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3pCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDN0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUM3QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFNBQVMsRUFBRTtnQkFDVCxNQUFNLEVBQUUsY0FBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FB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
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DOCUMENTS_MODULE = void 0;
7
+ const utils_1 = require("@medusajs/framework/utils");
8
+ const assert_private_file_storage_1 = __importDefault(require("./loaders/assert-private-file-storage"));
9
+ const service_1 = __importDefault(require("./service"));
10
+ exports.DOCUMENTS_MODULE = "documents";
11
+ exports.default = (0, utils_1.Module)(exports.DOCUMENTS_MODULE, {
12
+ service: service_1.default,
13
+ loaders: [assert_private_file_storage_1.default],
14
+ });
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9kb2N1bWVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEscURBQWtEO0FBRWxELHdHQUE0RTtBQUM1RSx3REFBOEM7QUFFakMsUUFBQSxnQkFBZ0IsR0FBRyxXQUFXLENBQUE7QUFFM0Msa0JBQWUsSUFBQSxjQUFNLEVBQUMsd0JBQWdCLEVBQUU7SUFDdEMsT0FBTyxFQUFFLGlCQUFzQjtJQUMvQixPQUFPLEVBQUUsQ0FBQyxxQ0FBd0IsQ0FBQztDQUNwQyxDQUFDLENBQUEifQ==
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = warnAboutPublicFileStorage;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const private_file_storage_1 = require("../../../documents/utils/private-file-storage");
6
+ /**
7
+ * Warns at startup when issued documents would be publicly downloadable. It
8
+ * does not refuse to boot: the documents module ships with the base plugin,
9
+ * so a shop on Medusa's default file storage must still start. Issuance itself
10
+ * refuses to write a document in that case (`assertPrivateFileStorage`).
11
+ */
12
+ async function warnAboutPublicFileStorage({ container, }) {
13
+ const problem = (0, private_file_storage_1.findPubliclyServedPrivateFileStorage)(container.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE), process.cwd());
14
+ if (problem) {
15
+ container
16
+ .resolve(utils_1.ContainerRegistrationKeys.LOGGER)
17
+ .warn(`Documents cannot be issued: ${problem}`);
18
+ }
19
+ }
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0LXByaXZhdGUtZmlsZS1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvZG9jdW1lbnRzL2xvYWRlcnMvYXNzZXJ0LXByaXZhdGUtZmlsZS1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBV0EsNkNBWUM7QUF0QkQscURBQXFFO0FBRXJFLHdGQUFvRztBQUVwRzs7Ozs7R0FLRztBQUNZLEtBQUssVUFBVSwwQkFBMEIsQ0FBQyxFQUN2RCxTQUFTLEdBQ0s7SUFDZCxNQUFNLE9BQU8sR0FBRyxJQUFBLDJEQUFvQyxFQUNsRCxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLGFBQWEsQ0FBQyxFQUMxRCxPQUFPLENBQUMsR0FBRyxFQUFFLENBQ2QsQ0FBQTtJQUNELElBQUksT0FBTyxFQUFFLENBQUM7UUFDWixTQUFTO2FBQ04sT0FBTyxDQUFDLGlDQUF5QixDQUFDLE1BQU0sQ0FBQzthQUN6QyxJQUFJLENBQUMsK0JBQStCLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFDbkQsQ0FBQztBQUNILENBQUMifQ==
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20260827061749 = void 0;
4
+ const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
5
+ class Migration20260827061749 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`alter table if exists "documents_shipment_invoice_coordinator" drop constraint if exists "documents_shipment_coordinator_order_unique";`);
8
+ this.addSql(`alter table if exists "documents_shipment_invoice_assignment" drop constraint if exists "documents_shipment_assignment_invoice_unique";`);
9
+ this.addSql(`alter table if exists "documents_shipment_invoice_assignment" drop constraint if exists "documents_shipment_assignment_order_carrier_unique";`);
10
+ this.addSql(`alter table if exists "documents_shipment_invoice_assignment" drop constraint if exists "documents_shipment_assignment_fulfillment_unique";`);
11
+ this.addSql(`alter table if exists "documents_refund_document_resolution" drop constraint if exists "documents_refund_resolution_refund_unique";`);
12
+ this.addSql(`alter table if exists "documents_packing_list_revision" drop constraint if exists "documents_packing_list_revision_source_unique";`);
13
+ this.addSql(`alter table if exists "documents_packing_list" drop constraint if exists "documents_packing_list_fulfillment_id_unique";`);
14
+ this.addSql(`alter table if exists "documents_order_cancellation_resolution" drop constraint if exists "documents_cancellation_resolution_order_unique";`);
15
+ this.addSql(`alter table if exists "documents_document_artifact" drop constraint if exists "documents_artifact_file_unique";`);
16
+ this.addSql(`alter table if exists "documents_document" drop constraint if exists "documents_document_refund_unique";`);
17
+ this.addSql(`create table if not exists "documents_document" ("id" text not null, "kind" text check ("kind" in ('invoice', 'cancellation', 'credit_note')) not null, "status" text check ("status" in ('processing', 'issued', 'failed')) not null default 'processing', "issuance_key" text not null, "order_id" text not null, "order_display_id" integer null, "customer_id" text null, "recipient_email" text not null, "document_number" text null, "source_document_id" text null, "refund_id" text null, "snapshot" jsonb null, "file_id" text null, "filename" text null, "current_artifact_id" text null, "attempt_token" text null, "lease_started_at" timestamptz null, "lease_expires_at" timestamptz null, "issued_at" timestamptz null, "failure_reason" text null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "documents_document_pkey" primary key ("id"), constraint CHK_documents_document_lease_order check (lease_started_at is null or lease_expires_at is null or lease_expires_at > lease_started_at), constraint CHK_documents_document_attempt_fields check (((status = 'processing' and attempt_token is not null and lease_started_at is not null and lease_expires_at is not null) or (status = 'failed' and attempt_token is null and lease_started_at is null and lease_expires_at is null) or (status = 'issued' and ((attempt_token is null and lease_started_at is null and lease_expires_at is null) or (attempt_token is not null and lease_started_at is not null and lease_expires_at is not null))))), constraint CHK_documents_document_issued_fields check (status <> 'issued' or (snapshot is not null and file_id is not null and filename is not null and current_artifact_id is not null and document_number is not null and issued_at is not null)));`);
18
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_documents_document_order_id" ON "documents_document" ("order_id") WHERE deleted_at IS NULL;`);
19
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_documents_document_customer_id" ON "documents_document" ("customer_id") WHERE deleted_at IS NULL;`);
20
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_documents_document_issued_at" ON "documents_document" ("issued_at") WHERE deleted_at IS NULL;`);
21
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_documents_document_deleted_at" ON "documents_document" ("deleted_at") WHERE deleted_at IS NULL;`);
22
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_documents_document_issuance_key" ON "documents_document" ("issuance_key");`);
23
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_documents_document_refund_unique" ON "documents_document" ("refund_id") WHERE refund_id IS NOT NULL AND deleted_at IS NULL;`);
24
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_documents_document_lease" ON "documents_document" ("status", "lease_expires_at") WHERE deleted_at IS NULL;`);
25
+ this.addSql(`create table if not exists "documents_document_artifact" ("id" text not null, "document_id" text not null, "file_id" text not null, "filename" text not null, "content_type" text check ("content_type" in ('application/pdf')) not null default 'application/pdf', "communication_locked" boolean not null default false, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "documents_document_artifact_pkey" primary key ("id"));`);
26
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_documents_artifact_document_id" ON "documents_document_artifact" ("document_id") WHERE deleted_at IS NULL;`);
27
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_documents_document_artifact_deleted_at" ON "documents_document_artifact" ("deleted_at") WHERE deleted_at IS NULL;`);
28
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_documents_artifact_file_unique" ON "documents_document_artifact" ("file_id");`);
29
+ this.addSql(`create table if not exists "documents_order_cancellation_resolution" ("id" text not null, "order_id" text not null, "state" text check ("state" in ('pending', 'processing', 'ready', 'failed')) not null default 'pending', "expected_refund_ids" jsonb not null default '[]', "attachments" jsonb not null default '[]', "attempt_token" text null, "lease_started_at" timestamptz null, "lease_expires_at" timestamptz null, "event_emitted_at" timestamptz null, "failure_code" text null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "documents_order_cancellation_resolution_pkey" primary key ("id"), constraint CHK_documents_cancellation_resolution_lease_order check (lease_started_at is null or lease_expires_at is null or lease_expires_at > lease_started_at), constraint CHK_documents_cancellation_resolution_attempt_fields check (((state = 'processing' and attempt_token is not null and lease_started_at is not null and lease_expires_at is not null) or (state <> 'processing' and attempt_token is null and lease_started_at is null and lease_expires_at is null))));`);
30
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_documents_order_cancellation_resolution_deleted_at" ON "documents_order_cancellation_resolution" ("deleted_at") WHERE deleted_at IS NULL;`);
31
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_documents_cancellation_resolution_order_unique" ON "documents_order_cancellation_resolution" ("order_id");`);
32
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_documents_cancellation_resolution_reconciliation" ON "documents_order_cancellation_resolution" ("state", "lease_expires_at") WHERE deleted_at IS NULL;`);
33
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_documents_cancellation_resolution_publication" ON "documents_order_cancellation_resolution" ("state", "event_emitted_at") WHERE deleted_at IS NULL;`);
34
+ this.addSql(`create table if not exists "documents_packing_list" ("id" text not null, "order_id" text not null, "order_display_id" integer null, "fulfillment_id" text not null, "fulfillment_created_at" timestamptz not null, "lifecycle_status" text not null default 'active', "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "documents_packing_list_pkey" primary key ("id"));`);
35
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_documents_packing_list_order_id" ON "documents_packing_list" ("order_id") WHERE deleted_at IS NULL;`);
36
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_documents_packing_list_fulfillment_created_at" ON "documents_packing_list" ("fulfillment_created_at") WHERE deleted_at IS NULL;`);
37
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_documents_packing_list_deleted_at" ON "documents_packing_list" ("deleted_at") WHERE deleted_at IS NULL;`);
38
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_documents_packing_list_fulfillment_id_unique" ON "documents_packing_list" ("fulfillment_id") WHERE deleted_at IS NULL;`);
39
+ this.addSql(`create table if not exists "documents_packing_list_revision" ("id" text not null, "packing_list_id" text not null, "source_revision" integer not null, "generation_status" text not null default 'processing', "snapshot" jsonb null, "file_id" text null, "filename" text null, "attempt_token" text null, "attempt_started_at" timestamptz null, "generated_at" timestamptz null, "failure_code" text null, "failure_reason" text null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "documents_packing_list_revision_pkey" primary key ("id"));`);
40
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_documents_packing_list_revision_packing_list_id" ON "documents_packing_list_revision" ("packing_list_id") WHERE deleted_at IS NULL;`);
41
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_documents_packing_list_revision_generated_at" ON "documents_packing_list_revision" ("generated_at") WHERE deleted_at IS NULL;`);
42
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_documents_packing_list_revision_deleted_at" ON "documents_packing_list_revision" ("deleted_at") WHERE deleted_at IS NULL;`);
43
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_documents_packing_list_revision_source_unique" ON "documents_packing_list_revision" ("packing_list_id", "source_revision") WHERE deleted_at IS NULL;`);
44
+ this.addSql(`create table if not exists "documents_refund_document_resolution" ("id" text not null, "refund_id" text not null, "order_id" text not null, "payment_id" text not null, "state" text check ("state" in ('pending_source', 'processing', 'ready', 'not_applicable', 'failed')) not null default 'pending_source', "attempt_token" text null, "lease_started_at" timestamptz null, "lease_expires_at" timestamptz null, "document_id" text null, "artifact_id" text null, "communication_owner" text check ("communication_owner" in ('standalone', 'cancellation')) null, "event_emitted_at" timestamptz null, "failure_code" text null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "documents_refund_document_resolution_pkey" primary key ("id"), constraint CHK_documents_refund_resolution_lease_order check (lease_started_at is null or lease_expires_at is null or lease_expires_at > lease_started_at), constraint CHK_documents_refund_resolution_attempt_fields check (((state = 'processing' and attempt_token is not null and lease_started_at is not null and lease_expires_at is not null) or (state <> 'processing' and attempt_token is null and lease_started_at is null and lease_expires_at is null))), constraint CHK_documents_refund_resolution_final_fields check (((state = 'ready' and document_id is not null and artifact_id is not null and communication_owner is not null) or (state = 'not_applicable' and document_id is null and artifact_id is null and communication_owner is not null) or (state in ('pending_source', 'processing', 'failed') and communication_owner is null))));`);
45
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_documents_refund_resolution_order_id" ON "documents_refund_document_resolution" ("order_id") WHERE deleted_at IS NULL;`);
46
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_documents_refund_resolution_payment_id" ON "documents_refund_document_resolution" ("payment_id") WHERE deleted_at IS NULL;`);
47
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_documents_refund_document_resolution_deleted_at" ON "documents_refund_document_resolution" ("deleted_at") WHERE deleted_at IS NULL;`);
48
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_documents_refund_resolution_refund_unique" ON "documents_refund_document_resolution" ("refund_id");`);
49
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_documents_refund_resolution_reconciliation" ON "documents_refund_document_resolution" ("state", "lease_expires_at") WHERE deleted_at IS NULL;`);
50
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_documents_refund_resolution_publication" ON "documents_refund_document_resolution" ("communication_owner", "event_emitted_at") WHERE deleted_at IS NULL;`);
51
+ this.addSql(`create table if not exists "documents_shipment_invoice_assignment" ("id" text not null, "order_id" text not null, "fulfillment_id" text not null, "decision" text check ("decision" in ('pending', 'carrier', 'non_carrier')) not null default 'pending', "invoice_document_id" text null, "invoice_artifact_id" text null, "event_emitted_at" timestamptz null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "documents_shipment_invoice_assignment_pkey" primary key ("id"), constraint CHK_documents_shipment_assignment_carrier_fields check (((decision = 'carrier' and invoice_document_id is not null and invoice_artifact_id is not null) or (decision <> 'carrier' and invoice_document_id is null and invoice_artifact_id is null))));`);
52
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_documents_shipment_assignment_order_id" ON "documents_shipment_invoice_assignment" ("order_id") WHERE deleted_at IS NULL;`);
53
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_documents_shipment_invoice_assignment_deleted_at" ON "documents_shipment_invoice_assignment" ("deleted_at") WHERE deleted_at IS NULL;`);
54
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_documents_shipment_assignment_fulfillment_unique" ON "documents_shipment_invoice_assignment" ("fulfillment_id");`);
55
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_documents_shipment_assignment_order_carrier_unique" ON "documents_shipment_invoice_assignment" ("order_id") WHERE decision = 'carrier';`);
56
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_documents_shipment_assignment_invoice_unique" ON "documents_shipment_invoice_assignment" ("invoice_document_id") WHERE invoice_document_id IS NOT NULL;`);
57
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_documents_shipment_assignment_publication" ON "documents_shipment_invoice_assignment" ("decision", "event_emitted_at") WHERE deleted_at IS NULL;`);
58
+ this.addSql(`create table if not exists "documents_shipment_invoice_coordinator" ("id" text not null, "order_id" text not null, "state" text check ("state" in ('idle', 'processing', 'completed')) not null default 'idle', "candidate_fulfillment_id" text null, "carrier_assignment_id" text null, "invoice_document_id" text null, "invoice_artifact_id" text null, "attempt_token" text null, "lease_started_at" timestamptz null, "lease_expires_at" timestamptz null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "documents_shipment_invoice_coordinator_pkey" primary key ("id"), constraint CHK_documents_shipment_coordinator_lease_order check (lease_started_at is null or lease_expires_at is null or lease_expires_at > lease_started_at), constraint CHK_documents_shipment_coordinator_state_fields check (((state = 'processing' and attempt_token is not null and lease_started_at is not null and lease_expires_at is not null) or (state <> 'processing' and attempt_token is null and lease_started_at is null and lease_expires_at is null))));`);
59
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_documents_shipment_invoice_coordinator_deleted_at" ON "documents_shipment_invoice_coordinator" ("deleted_at") WHERE deleted_at IS NULL;`);
60
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_documents_shipment_coordinator_order_unique" ON "documents_shipment_invoice_coordinator" ("order_id");`);
61
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_documents_shipment_coordinator_lease" ON "documents_shipment_invoice_coordinator" ("state", "lease_expires_at") WHERE deleted_at IS NULL;`);
62
+ }
63
+ async down() {
64
+ this.addSql(`drop table if exists "documents_document" cascade;`);
65
+ this.addSql(`drop table if exists "documents_document_artifact" cascade;`);
66
+ this.addSql(`drop table if exists "documents_order_cancellation_resolution" cascade;`);
67
+ this.addSql(`drop table if exists "documents_packing_list" cascade;`);
68
+ this.addSql(`drop table if exists "documents_packing_list_revision" cascade;`);
69
+ this.addSql(`drop table if exists "documents_refund_document_resolution" cascade;`);
70
+ this.addSql(`drop table if exists "documents_shipment_invoice_assignment" cascade;`);
71
+ this.addSql(`drop table if exists "documents_shipment_invoice_coordinator" cascade;`);
72
+ }
73
+ }
74
+ exports.Migration20260827061749 = Migration20260827061749;
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjA4MjcwNjE3NDkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9kb2N1bWVudHMvbWlncmF0aW9ucy9NaWdyYXRpb24yMDI2MDgyNzA2MTc0OS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5RUFBcUU7QUFFckUsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUztJQUUzQyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQUMseUlBQXlJLENBQUMsQ0FBQztRQUN2SixJQUFJLENBQUMsTUFBTSxDQUFDLHlJQUF5SSxDQUFDLENBQUM7UUFDdkosSUFBSSxDQUFDLE1BQU0sQ0FBQywrSUFBK0ksQ0FBQyxDQUFDO1FBQzdKLElBQUksQ0FBQyxNQUFNLENBQUMsNklBQTZJLENBQUMsQ0FBQztRQUMzSixJQUFJLENBQUMsTUFBTSxDQUFDLHFJQUFxSSxDQUFDLENBQUM7UUFDbkosSUFBSSxDQUFDLE1BQU0sQ0FBQyxvSUFBb0ksQ0FBQyxDQUFDO1FBQ2xKLElBQUksQ0FBQyxNQUFNLENBQUMsMEhBQTBILENBQUMsQ0FBQztRQUN4SSxJQUFJLENBQUMsTUFBTSxDQUFDLDZJQUE2SSxDQUFDLENBQUM7UUFDM0osSUFBSSxDQUFDLE1BQU0sQ0FBQyxpSEFBaUgsQ0FBQyxDQUFDO1FBQy9ILElBQUksQ0FBQyxNQUFNLENBQUMsMEdBQTBHLENBQUMsQ0FBQztRQUN4SCxJQUFJLENBQUMsTUFBTSxDQUFDLHd4REFBd3hELENBQUMsQ0FBQztRQUN0eUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyw2SEFBNkgsQ0FBQyxDQUFDO1FBQzNJLElBQUksQ0FBQyxNQUFNLENBQUMsbUlBQW1JLENBQUMsQ0FBQztRQUNqSixJQUFJLENBQUMsTUFBTSxDQUFDLCtIQUErSCxDQUFDLENBQUM7UUFDN0ksSUFBSSxDQUFDLE1BQU0sQ0FBQyxpSUFBaUksQ0FBQyxDQUFDO1FBQy9JLElB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
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20260830111207 = void 0;
4
+ const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
5
+ class Migration20260830111207 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`alter table if exists "documents_document" drop constraint if exists "documents_document_number_unique";`);
8
+ this.addSql(`alter table if exists "documents_document_number_sequence" drop constraint if exists "documents_number_sequence_scope_unique";`);
9
+ this.addSql(`create table if not exists "documents_document_number_sequence" ("id" text not null, "kind" text check ("kind" in ('invoice', 'cancellation', 'credit_note')) not null, "period_year" integer not null, "last_value" integer not null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "documents_document_number_sequence_pkey" primary key ("id"), constraint CHK_documents_number_sequence_values check (period_year > 0 and last_value > 0));`);
10
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_documents_document_number_sequence_deleted_at" ON "documents_document_number_sequence" ("deleted_at") WHERE deleted_at IS NULL;`);
11
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_documents_number_sequence_scope_unique" ON "documents_document_number_sequence" ("kind", "period_year");`);
12
+ this.addSql(`alter table if exists "documents_document" alter column "document_number" type text using ("document_number"::text);`);
13
+ this.addSql(`alter table if exists "documents_document" alter column "document_number" set not null;`);
14
+ this.addSql(`alter table if exists "documents_document" alter column "issued_at" type timestamptz using ("issued_at"::timestamptz);`);
15
+ this.addSql(`alter table if exists "documents_document" alter column "issued_at" set not null;`);
16
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_documents_document_number_unique" ON "documents_document" ("document_number");`);
17
+ }
18
+ async down() {
19
+ this.addSql(`drop table if exists "documents_document_number_sequence" cascade;`);
20
+ this.addSql(`drop index if exists "IDX_documents_document_number_unique";`);
21
+ this.addSql(`alter table if exists "documents_document" alter column "document_number" type text using ("document_number"::text);`);
22
+ this.addSql(`alter table if exists "documents_document" alter column "document_number" drop not null;`);
23
+ this.addSql(`alter table if exists "documents_document" alter column "issued_at" type timestamptz using ("issued_at"::timestamptz);`);
24
+ this.addSql(`alter table if exists "documents_document" alter column "issued_at" drop not null;`);
25
+ }
26
+ }
27
+ exports.Migration20260830111207 = Migration20260830111207;
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjA4MzAxMTEyMDcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9kb2N1bWVudHMvbWlncmF0aW9ucy9NaWdyYXRpb24yMDI2MDgzMDExMTIwNy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5RUFBcUU7QUFFckUsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUztJQUUzQyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsMEdBQTBHLENBQUMsQ0FBQztRQUN4SCxJQUFJLENBQUMsTUFBTSxDQUFDLGdJQUFnSSxDQUFDLENBQUM7UUFDOUksSUFBSSxDQUFDLE1BQU0sQ0FBQywrZ0JBQStnQixDQUFDLENBQUM7UUFDN2hCLElBQUksQ0FBQyxNQUFNLENBQUMsaUtBQWlLLENBQUMsQ0FBQztRQUMvSyxJQUFJLENBQUMsTUFBTSxDQUFDLGlKQUFpSixDQUFDLENBQUM7UUFFL0osSUFBSSxDQUFDLE1BQU0sQ0FBQyxzSEFBc0gsQ0FBQyxDQUFDO1FBQ3BJLElBQUksQ0FBQyxNQUFNLENBQUMseUZBQXlGLENBQUMsQ0FBQztRQUN2RyxJQUFJLENBQUMsTUFBTSxDQUFDLHdIQUF3SCxDQUFDLENBQUM7UUFDdEksSUFBSSxDQUFDLE1BQU0sQ0FBQyxtRkFBbUYsQ0FBQyxDQUFDO1FBQ2pHLElBQUksQ0FBQyxNQUFNLENBQUMsdUhBQXVILENBQUMsQ0FBQztJQUN2SSxDQUFDO0lBRVEsS0FBSyxDQUFDLElBQUk7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDO1FBRWxGLElBQUksQ0FBQyxNQUFNLENBQUMsOERBQThELENBQUMsQ0FBQztRQUU1RSxJQUFJLENBQUMsTUFBTSxDQUFDLHNIQUFzSCxDQUFDLENBQUM7UUFDcEksSUFBSSxDQUFDLE1BQU0sQ0FBQywwRkFBMEYsQ0FBQyxDQUFDO1FBQ3hHLElBQUksQ0FBQyxNQUFNLENBQUMsd0hBQXdILENBQUMsQ0FBQztRQUN0SSxJQUFJLENBQUMsTUFBTSxDQUFDLG9GQUFvRixDQUFDLENBQUM7SUFDcEcsQ0FBQztDQUVGO0FBM0JELDBEQTJCQyJ9
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("@medusajs/framework/utils");
4
+ const DocumentArtifact = utils_1.model
5
+ .define({
6
+ name: "document_artifact",
7
+ tableName: "documents_document_artifact",
8
+ }, {
9
+ id: utils_1.model.id({ prefix: "docart" }).primaryKey(),
10
+ document_id: utils_1.model.text().index("IDX_documents_artifact_document_id"),
11
+ file_id: utils_1.model.text(),
12
+ filename: utils_1.model.text(),
13
+ content_type: utils_1.model.enum(["application/pdf"]).default("application/pdf"),
14
+ communication_locked: utils_1.model.boolean().default(false),
15
+ })
16
+ .indexes([
17
+ {
18
+ name: "IDX_documents_artifact_file_unique",
19
+ on: ["file_id"],
20
+ unique: true,
21
+ where: null,
22
+ },
23
+ ]);
24
+ exports.default = DocumentArtifact;
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtYXJ0aWZhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9kb2N1bWVudHMvbW9kZWxzL2RvY3VtZW50LWFydGlmYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscURBQWlEO0FBRWpELE1BQU0sZ0JBQWdCLEdBQUcsYUFBSztLQUMzQixNQUFNLENBQ0w7SUFDRSxJQUFJLEVBQUUsbUJBQW1CO0lBQ3pCLFNBQVMsRUFBRSw2QkFBNkI7Q0FDekMsRUFDRDtJQUNFLEVBQUUsRUFBRSxhQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFO0lBQy9DLFdBQVcsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxDQUFDO0lBQ3JFLE9BQU8sRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQ3JCLFFBQVEsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQ3RCLFlBQVksRUFBRSxhQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztJQUN4RSxvQkFBb0IsRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztDQUNyRCxDQUNGO0tBQ0EsT0FBTyxDQUFDO0lBQ1A7UUFDRSxJQUFJLEVBQUUsb0NBQW9DO1FBQzFDLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUNmLE1BQU0sRUFBRSxJQUFJO1FBQ1osS0FBSyxFQUFFLElBQUk7S0FDWjtDQUNGLENBQUMsQ0FBQTtBQUVKLGtCQUFlLGdCQUFnQixDQUFBIn0=
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("@medusajs/framework/utils");
4
+ const DocumentNumberSequence = utils_1.model
5
+ .define({
6
+ name: "document_number_sequence",
7
+ tableName: "documents_document_number_sequence",
8
+ }, {
9
+ id: utils_1.model.id({ prefix: "docseq" }).primaryKey(),
10
+ kind: utils_1.model.enum(["invoice", "cancellation", "credit_note"]),
11
+ period_year: utils_1.model.number(),
12
+ last_value: utils_1.model.number(),
13
+ })
14
+ .indexes([
15
+ {
16
+ name: "IDX_documents_number_sequence_scope_unique",
17
+ on: ["kind", "period_year"],
18
+ unique: true,
19
+ where: null,
20
+ },
21
+ ])
22
+ .checks([
23
+ {
24
+ name: "CHK_documents_number_sequence_values",
25
+ expression: ({ period_year, last_value }) => `${period_year} > 0 and ${last_value} > 0`,
26
+ },
27
+ ]);
28
+ exports.default = DocumentNumberSequence;
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbnVtYmVyLXNlcXVlbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvZG9jdW1lbnRzL21vZGVscy9kb2N1bWVudC1udW1iZXItc2VxdWVuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxREFBaUQ7QUFFakQsTUFBTSxzQkFBc0IsR0FBRyxhQUFLO0tBQ2pDLE1BQU0sQ0FDTDtJQUNFLElBQUksRUFBRSwwQkFBMEI7SUFDaEMsU0FBUyxFQUFFLG9DQUFvQztDQUNoRCxFQUNEO0lBQ0UsRUFBRSxFQUFFLGFBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUU7SUFDL0MsSUFBSSxFQUFFLGFBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsY0FBYyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzVELFdBQVcsRUFBRSxhQUFLLENBQUMsTUFBTSxFQUFFO0lBQzNCLFVBQVUsRUFBRSxhQUFLLENBQUMsTUFBTSxFQUFFO0NBQzNCLENBQ0Y7S0FDQSxPQUFPLENBQUM7SUFDUDtRQUNFLElBQUksRUFBRSw0Q0FBNEM7UUFDbEQsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQztRQUMzQixNQUFNLEVBQUUsSUFBSTtRQUNaLEtBQUssRUFBRSxJQUFJO0tBQ1o7Q0FDRixDQUFDO0tBQ0QsTUFBTSxDQUFDO0lBQ047UUFDRSxJQUFJLEVBQUUsc0NBQXNDO1FBQzVDLFVBQVUsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FDMUMsR0FBRyxXQUFXLFlBQVksVUFBVSxNQUFNO0tBQzdDO0NBQ0YsQ0FBQyxDQUFBO0FBRUosa0JBQWUsc0JBQXNCLENBQUEifQ==