@hartl-services/medusa-base 0.4.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/.medusa/server/src/admin/index.js +1657 -111
  2. package/.medusa/server/src/admin/index.mjs +1647 -101
  3. package/.medusa/server/src/api/admin/email/messages/[id]/resends/route.js +24 -0
  4. package/.medusa/server/src/api/admin/email/messages/[id]/route.js +12 -0
  5. package/.medusa/server/src/api/admin/email/messages/route.js +12 -0
  6. package/.medusa/server/src/api/admin/email/terms-versions/[id]/download/route.js +16 -0
  7. package/.medusa/server/src/api/admin/email/terms-versions/route.js +47 -0
  8. package/.medusa/server/src/api/admin/orders/[id]/documents/[document_id]/download/route.js +21 -0
  9. package/.medusa/server/src/api/admin/orders/[id]/documents/[document_id]/regenerate/route.js +38 -0
  10. package/.medusa/server/src/api/admin/orders/[id]/documents/regenerate/route.js +32 -0
  11. package/.medusa/server/src/api/admin/orders/[id]/documents/route.js +36 -0
  12. package/.medusa/server/src/api/admin/orders/[id]/packing-lists/[fulfillment_id]/download/route.js +24 -0
  13. package/.medusa/server/src/api/admin/orders/[id]/packing-lists/[fulfillment_id]/retry/route.js +44 -0
  14. package/.medusa/server/src/api/admin/orders/[id]/packing-lists/route.js +82 -0
  15. package/.medusa/server/src/api/document-download-response.js +16 -0
  16. package/.medusa/server/src/api/document-response.js +23 -0
  17. package/.medusa/server/src/api/files/[asset]/route.js +24 -0
  18. package/.medusa/server/src/api/files/file-response.js +43 -0
  19. package/.medusa/server/src/api/files/gateway-options.js +31 -0
  20. package/.medusa/server/src/api/files/private/[token]/route.js +29 -0
  21. package/.medusa/server/src/api/files/upload/[token]/route.js +66 -0
  22. package/.medusa/server/src/api/middlewares.js +168 -1
  23. package/.medusa/server/src/api/packing-list-response.js +22 -0
  24. package/.medusa/server/src/api/route.js +27 -0
  25. package/.medusa/server/src/api/store/documents/[id]/download/route.js +21 -0
  26. package/.medusa/server/src/api/store/documents/[id]/route.js +15 -0
  27. package/.medusa/server/src/api/store/documents/route.js +11 -0
  28. package/.medusa/server/src/api/terms-download-response.js +12 -0
  29. package/.medusa/server/src/documents/config/index.js +18 -0
  30. package/.medusa/server/src/documents/paths/documents.js +6 -0
  31. package/.medusa/server/src/documents/paths/index.js +18 -0
  32. package/.medusa/server/src/documents/plugin-features.js +38 -0
  33. package/.medusa/server/src/documents/schemas/documents.js +18 -0
  34. package/.medusa/server/src/documents/schemas/index.js +18 -0
  35. package/.medusa/server/src/documents/scripts/verify-documents-file-storage.js +55 -0
  36. package/.medusa/server/src/documents/templates/financial-document.js +160 -0
  37. package/.medusa/server/src/documents/templates/format.js +73 -0
  38. package/.medusa/server/src/documents/templates/html-factory.js +42 -0
  39. package/.medusa/server/src/documents/templates/html-utils.js +23 -0
  40. package/.medusa/server/src/documents/templates/layout.js +142 -0
  41. package/.medusa/server/src/documents/templates/packing-list.js +52 -0
  42. package/.medusa/server/src/documents/types/admin-api.js +3 -0
  43. package/.medusa/server/src/documents/types/document-summary.js +3 -0
  44. package/.medusa/server/src/documents/types/documents.js +3 -0
  45. package/.medusa/server/src/documents/types/html-factory.js +6 -0
  46. package/.medusa/server/src/documents/types/index.js +22 -0
  47. package/.medusa/server/src/documents/types/store-api.js +3 -0
  48. package/.medusa/server/src/documents/utils/document-merchant.js +22 -0
  49. package/.medusa/server/src/documents/utils/document-render-settings.js +59 -0
  50. package/.medusa/server/src/documents/utils/html-to-pdf.js +61 -0
  51. package/.medusa/server/src/documents/utils/private-file-storage.js +64 -0
  52. package/.medusa/server/src/documents/utils/resolve-services.js +7 -0
  53. package/.medusa/server/src/email/application/handle-invite-event.js +318 -0
  54. package/.medusa/server/src/email/application/handle-password-reset-event.js +366 -0
  55. package/.medusa/server/src/email/config/index.js +84 -0
  56. package/.medusa/server/src/email/config/notification-module.js +20 -0
  57. package/.medusa/server/src/email/domain/business-keys.js +50 -0
  58. package/.medusa/server/src/email/domain/documents-fact-fingerprint.js +7 -0
  59. package/.medusa/server/src/email/domain/event-schemas.js +36 -0
  60. package/.medusa/server/src/email/domain/failure-classification.js +53 -0
  61. package/.medusa/server/src/email/domain/order-summary.js +103 -0
  62. package/.medusa/server/src/email/domain/refund-summary.js +43 -0
  63. package/.medusa/server/src/email/domain/return-summary.js +118 -0
  64. package/.medusa/server/src/email/domain/shipment-summary.js +74 -0
  65. package/.medusa/server/src/email/plugin-features.js +39 -0
  66. package/.medusa/server/src/email/rendering/default-templates.js +719 -0
  67. package/.medusa/server/src/email/rendering/load-email-shop-details.js +36 -0
  68. package/.medusa/server/src/email/rendering/render-email.js +50 -0
  69. package/.medusa/server/src/email/rendering/resolve-shop-configuration.js +67 -0
  70. package/.medusa/server/src/email/types/email-kinds.js +18 -0
  71. package/.medusa/server/src/email/types/index.js +21 -0
  72. package/.medusa/server/src/email/types/shop-configuration.js +3 -0
  73. package/.medusa/server/src/email/types/smtp-configuration.js +3 -0
  74. package/.medusa/server/src/email/types/template-data.js +232 -0
  75. package/.medusa/server/src/files/config/index.js +256 -0
  76. package/.medusa/server/src/files/gateway/index.js +115 -0
  77. package/.medusa/server/src/files/types/index.js +6 -0
  78. package/.medusa/server/src/files/types/public.js +6 -0
  79. package/.medusa/server/src/jobs/document-fact-publication-reconciliation.js +18 -0
  80. package/.medusa/server/src/jobs/document-resolution-reconciliation.js +20 -0
  81. package/.medusa/server/src/jobs/packing-list-reconciliation.js +49 -0
  82. package/.medusa/server/src/jobs/reconcile-email-attempts.js +63 -0
  83. package/.medusa/server/src/jobs/reconcile-pending-email-messages.js +41 -0
  84. package/.medusa/server/src/jobs/retry-email-messages.js +27 -0
  85. package/.medusa/server/src/migration-scripts/dismiss-orphaned-cart-promotion-links.js +26 -0
  86. package/.medusa/server/src/modules/documents/domain/cancellation-snapshot.js +97 -0
  87. package/.medusa/server/src/modules/documents/domain/document-number.js +36 -0
  88. package/.medusa/server/src/modules/documents/domain/document-resolution.js +24 -0
  89. package/.medusa/server/src/modules/documents/domain/issuance-rules.js +37 -0
  90. package/.medusa/server/src/modules/documents/domain/merchant.js +86 -0
  91. package/.medusa/server/src/modules/documents/domain/options.js +40 -0
  92. package/.medusa/server/src/modules/documents/domain/packing-list.js +90 -0
  93. package/.medusa/server/src/modules/documents/domain/snapshot-normalization.js +17 -0
  94. package/.medusa/server/src/modules/documents/domain/tax-breakdown.js +66 -0
  95. package/.medusa/server/src/modules/documents/index.js +15 -0
  96. package/.medusa/server/src/modules/documents/loaders/assert-private-file-storage.js +20 -0
  97. package/.medusa/server/src/modules/documents/migrations/Migration20260827061749.js +75 -0
  98. package/.medusa/server/src/modules/documents/migrations/Migration20260830111207.js +28 -0
  99. package/.medusa/server/src/modules/documents/models/document-artifact.js +25 -0
  100. package/.medusa/server/src/modules/documents/models/document-number-sequence.js +29 -0
  101. package/.medusa/server/src/modules/documents/models/document.js +82 -0
  102. package/.medusa/server/src/modules/documents/models/order-cancellation-resolution.js +51 -0
  103. package/.medusa/server/src/modules/documents/models/packing-list-revision.js +36 -0
  104. package/.medusa/server/src/modules/documents/models/packing-list.js +27 -0
  105. package/.medusa/server/src/modules/documents/models/refund-document-resolution.js +66 -0
  106. package/.medusa/server/src/modules/documents/models/shipment-invoice-assignment.js +51 -0
  107. package/.medusa/server/src/modules/documents/models/shipment-invoice-coordinator.js +44 -0
  108. package/.medusa/server/src/modules/documents/service.js +1701 -0
  109. package/.medusa/server/src/modules/email/domain/attachment.js +25 -0
  110. package/.medusa/server/src/modules/email/domain/message-state.js +69 -0
  111. package/.medusa/server/src/modules/email/index.js +13 -0
  112. package/.medusa/server/src/modules/email/migrations/Migration20260826173422.js +32 -0
  113. package/.medusa/server/src/modules/email/migrations/Migration20260827172945.js +16 -0
  114. package/.medusa/server/src/modules/email/migrations/Migration20260827194804.js +22 -0
  115. package/.medusa/server/src/modules/email/migrations/Migration20260906195205.js +16 -0
  116. package/.medusa/server/src/modules/email/models/email-attempt.js +56 -0
  117. package/.medusa/server/src/modules/email/models/email-message.js +71 -0
  118. package/.medusa/server/src/modules/email/models/email-terms-version.js +37 -0
  119. package/.medusa/server/src/modules/email/service.js +1285 -0
  120. package/.medusa/server/src/modules/plugin-features/domain/plugin-settings.js +4 -3
  121. package/.medusa/server/src/providers/s3-cache/cache/atomic-write.js +25 -0
  122. package/.medusa/server/src/providers/s3-cache/cache/cache-manager.js +115 -0
  123. package/.medusa/server/src/providers/s3-cache/cache/keyed-lock.js +28 -0
  124. package/.medusa/server/src/providers/s3-cache/index.js +8 -0
  125. package/.medusa/server/src/providers/s3-cache/object-key.js +53 -0
  126. package/.medusa/server/src/providers/s3-cache/s3-cache-file.js +229 -0
  127. package/.medusa/server/src/providers/s3-cache/s3-object-store.js +86 -0
  128. package/.medusa/server/src/providers/smtp/index.js +8 -0
  129. package/.medusa/server/src/providers/smtp/service.js +236 -0
  130. package/.medusa/server/src/providers/smtp/types.js +11 -0
  131. package/.medusa/server/src/public/config.js +186 -0
  132. package/.medusa/server/src/public/descriptor.js +3 -1
  133. package/.medusa/server/src/public/gateway.js +19 -0
  134. package/.medusa/server/src/public/instrumentation.js +56 -0
  135. package/.medusa/server/src/public/shop-config.js +12 -0
  136. package/.medusa/server/src/public/shop-master-data.js +2 -2
  137. package/.medusa/server/src/public/shop-types.js +24 -0
  138. package/.medusa/server/src/shop-config/build-food-shop-config.js +252 -0
  139. package/.medusa/server/src/shop-config/options.js +75 -0
  140. package/.medusa/server/src/subscribers/affiliate-consignment-reminder-due.js +26 -0
  141. package/.medusa/server/src/subscribers/documents-order-canceled.js +24 -0
  142. package/.medusa/server/src/subscribers/documents-order-cancellation-ready.js +26 -0
  143. package/.medusa/server/src/subscribers/documents-refund-ready.js +24 -0
  144. package/.medusa/server/src/subscribers/documents-shipment-created.js +36 -0
  145. package/.medusa/server/src/subscribers/documents-shipment-invoice-assignment-decided.js +26 -0
  146. package/.medusa/server/src/subscribers/email-order-canceled.js +28 -0
  147. package/.medusa/server/src/subscribers/email-shipment-created.js +32 -0
  148. package/.medusa/server/src/subscribers/order-placed.js +27 -0
  149. package/.medusa/server/src/subscribers/packing-list-allocation-revised.js +32 -0
  150. package/.medusa/server/src/subscribers/packing-list-fulfillment-canceled.js +54 -0
  151. package/.medusa/server/src/subscribers/packing-list-fulfillment-created.js +31 -0
  152. package/.medusa/server/src/subscribers/password-reset.js +23 -0
  153. package/.medusa/server/src/subscribers/payment-refunded.js +38 -0
  154. package/.medusa/server/src/subscribers/return-received.js +27 -0
  155. package/.medusa/server/src/subscribers/return-requested.js +27 -0
  156. package/.medusa/server/src/subscribers/user-invite.js +23 -0
  157. package/.medusa/server/src/utils/cart-promotion-links.js +101 -0
  158. package/.medusa/server/src/workflows/documents/issue-cancellation-after-refund.js +246 -0
  159. package/.medusa/server/src/workflows/documents/issue-document.js +165 -0
  160. package/.medusa/server/src/workflows/documents/issue-invoice-after-shipment.js +521 -0
  161. package/.medusa/server/src/workflows/documents/issue-packing-list.js +390 -0
  162. package/.medusa/server/src/workflows/documents/publish-document-facts.js +53 -0
  163. package/.medusa/server/src/workflows/documents/reconcile-document-resolutions.js +48 -0
  164. package/.medusa/server/src/workflows/documents/reconcile-order-cancellation.js +92 -0
  165. package/.medusa/server/src/workflows/documents/regenerate-issued-document.js +61 -0
  166. package/.medusa/server/src/workflows/email/dispatch-email-message.js +301 -0
  167. package/.medusa/server/src/workflows/email/documents-required-facts.js +30 -0
  168. package/.medusa/server/src/workflows/email/prepare-affiliate-reminder-email.js +58 -0
  169. package/.medusa/server/src/workflows/email/prepare-order-canceled-email.js +102 -0
  170. package/.medusa/server/src/workflows/email/prepare-order-received-email.js +82 -0
  171. package/.medusa/server/src/workflows/email/prepare-refund-email.js +71 -0
  172. package/.medusa/server/src/workflows/email/prepare-return-email.js +136 -0
  173. package/.medusa/server/src/workflows/email/prepare-shipment-email.js +115 -0
  174. package/.medusa/server/src/workflows/email/retry-email-messages.js +31 -0
  175. package/.medusa/server/src/workflows/hooks/dismiss-deleted-promotion-cart-links.js +23 -0
  176. package/README.md +1777 -8
  177. package/dist/admin-components/features/plugin-features/components/ImageSettingInput.d.ts +15 -0
  178. package/dist/admin-components/features/plugin-features/components/ImageSettingInput.js +42 -0
  179. package/dist/admin-components/features/plugin-features/components/PluginSettingsForm.js +4 -2
  180. package/dist/admin-components/features/plugin-features/hooks/usePluginFeatureEnabled.d.ts +1 -1
  181. package/dist/admin-components/features/plugin-features/hooks/usePluginFeatures.d.ts +4 -4
  182. package/dist/admin-components/features/plugin-features/hooks/usePluginSettingsForm.d.ts +1 -1
  183. package/dist/admin-components/features/plugin-features/lib/image-upload.d.ts +6 -0
  184. package/dist/admin-components/features/plugin-features/lib/image-upload.js +17 -0
  185. package/dist/admin-components/features/plugin-features/lib/plugin-features-admin-client.d.ts +4 -4
  186. package/dist/admin-components/i18n/texts.d.ts +6 -0
  187. package/dist/admin-components/i18n/texts.js +6 -0
  188. package/dist/documents/config/index.d.ts +11 -0
  189. package/dist/documents/config/index.js +17 -0
  190. package/dist/documents/templates/financial-document.d.ts +3 -0
  191. package/dist/documents/templates/financial-document.js +159 -0
  192. package/dist/documents/templates/format.d.ts +30 -0
  193. package/dist/documents/templates/format.js +72 -0
  194. package/dist/documents/templates/html-factory.d.ts +15 -0
  195. package/dist/documents/templates/html-factory.js +41 -0
  196. package/dist/documents/templates/html-utils.d.ts +8 -0
  197. package/dist/documents/templates/html-utils.js +22 -0
  198. package/dist/documents/templates/layout.d.ts +35 -0
  199. package/dist/documents/templates/layout.js +141 -0
  200. package/dist/documents/templates/packing-list.d.ts +3 -0
  201. package/dist/documents/templates/packing-list.js +51 -0
  202. package/dist/documents/types/admin-api.d.ts +1 -0
  203. package/dist/documents/types/admin-api.js +2 -0
  204. package/dist/documents/types/document-summary.d.ts +1 -0
  205. package/dist/documents/types/document-summary.js +2 -0
  206. package/dist/documents/types/documents.d.ts +191 -0
  207. package/dist/documents/types/documents.js +2 -0
  208. package/dist/documents/types/html-factory.d.ts +8 -0
  209. package/dist/documents/types/html-factory.js +5 -0
  210. package/dist/documents/types/index.d.ts +5 -0
  211. package/dist/documents/types/index.js +21 -0
  212. package/dist/documents/types/store-api.d.ts +1 -0
  213. package/dist/documents/types/store-api.js +2 -0
  214. package/dist/email/config/index.d.ts +17 -0
  215. package/dist/email/config/index.js +83 -0
  216. package/dist/email/config/notification-module.d.ts +22 -0
  217. package/dist/email/config/notification-module.js +19 -0
  218. package/dist/email/types/email-kinds.d.ts +15 -0
  219. package/dist/email/types/email-kinds.js +17 -0
  220. package/dist/email/types/index.d.ts +4 -0
  221. package/dist/email/types/index.js +20 -0
  222. package/dist/email/types/shop-configuration.d.ts +68 -0
  223. package/dist/email/types/shop-configuration.js +2 -0
  224. package/dist/email/types/smtp-configuration.d.ts +9 -0
  225. package/dist/email/types/smtp-configuration.js +2 -0
  226. package/dist/email/types/template-data.d.ts +609 -0
  227. package/dist/email/types/template-data.js +231 -0
  228. package/dist/files/config/index.d.ts +32 -0
  229. package/dist/files/config/index.js +255 -0
  230. package/dist/files/gateway/index.d.ts +30 -0
  231. package/dist/files/gateway/index.js +114 -0
  232. package/dist/files/types/index.d.ts +2 -0
  233. package/dist/files/types/index.js +5 -0
  234. package/dist/files/types/public.d.ts +90 -0
  235. package/dist/files/types/public.js +5 -0
  236. package/dist/modules/documents/domain/merchant.d.ts +22 -0
  237. package/dist/modules/documents/domain/merchant.js +85 -0
  238. package/dist/modules/documents/domain/options.d.ts +34 -0
  239. package/dist/modules/documents/domain/options.js +39 -0
  240. package/dist/public/config.d.ts +59 -0
  241. package/dist/public/config.js +185 -0
  242. package/dist/public/descriptor.js +2 -0
  243. package/dist/public/gateway.d.ts +2 -0
  244. package/dist/public/gateway.js +18 -0
  245. package/dist/public/instrumentation.d.ts +12 -0
  246. package/dist/public/instrumentation.js +55 -0
  247. package/dist/public/shop-config.d.ts +8 -0
  248. package/dist/public/shop-config.js +11 -0
  249. package/dist/public/shop-master-data.d.ts +1 -1
  250. package/dist/public/shop-master-data.js +1 -1
  251. package/dist/public/shop-types.d.ts +7 -0
  252. package/dist/public/shop-types.js +23 -0
  253. package/dist/public/types.d.ts +19 -2
  254. package/dist/shop-config/build-food-shop-config.d.ts +44 -0
  255. package/dist/shop-config/build-food-shop-config.js +251 -0
  256. package/dist/shop-config/options.d.ts +48 -0
  257. package/dist/shop-config/options.js +74 -0
  258. package/package.json +48 -5
@@ -0,0 +1,390 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.issuePackingListWorkflow = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
+ const core_flows_1 = require("@medusajs/medusa/core-flows");
7
+ const packing_list_1 = require("../../modules/documents/domain/packing-list");
8
+ const document_render_settings_1 = require("../../documents/utils/document-render-settings");
9
+ const document_merchant_1 = require("../../documents/utils/document-merchant");
10
+ const private_file_storage_1 = require("../../documents/utils/private-file-storage");
11
+ const html_to_pdf_1 = require("../../documents/utils/html-to-pdf");
12
+ const resolve_services_1 = require("../../documents/utils/resolve-services");
13
+ const asRecord = (value, field) => {
14
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
15
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Expected '${field}' to be an object.`);
16
+ }
17
+ return value;
18
+ };
19
+ const asString = (value, field) => {
20
+ if (typeof value !== "string" || !value.trim()) {
21
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Expected '${field}' to be a non-empty string.`);
22
+ }
23
+ return value;
24
+ };
25
+ const asOptionalString = (value) => typeof value === "string" && value.trim() ? value : null;
26
+ const asOptionalNumber = (value) => typeof value === "number" && Number.isFinite(value) ? value : null;
27
+ const asQuantity = (value, field) => {
28
+ if (typeof value === "number" && Number.isFinite(value)) {
29
+ return value;
30
+ }
31
+ if (typeof value === "string" &&
32
+ value.trim() &&
33
+ Number.isFinite(Number(value))) {
34
+ return Number(value);
35
+ }
36
+ const record = value && typeof value === "object" ? asRecord(value, field) : null;
37
+ if (record && Number.isFinite(Number(record.value))) {
38
+ return Number(record.value);
39
+ }
40
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Expected '${field}' to be a numeric quantity.`);
41
+ };
42
+ const asIsoDate = (value, field) => {
43
+ const date = value instanceof Date ? value : new Date(asString(value, field));
44
+ if (Number.isNaN(date.getTime())) {
45
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Expected '${field}' to be a valid date.`);
46
+ }
47
+ return date.toISOString();
48
+ };
49
+ const tryResolveBatchCapability = (container) => {
50
+ const registry = container;
51
+ if (registry.hasRegistration?.("batch_management") === false) {
52
+ return null;
53
+ }
54
+ let resolved;
55
+ try {
56
+ resolved = container.resolve("batch_management");
57
+ }
58
+ catch (error) {
59
+ if (error instanceof Error &&
60
+ error.message.includes("Missing registration")) {
61
+ return null;
62
+ }
63
+ throw error;
64
+ }
65
+ if (!resolved ||
66
+ typeof resolved !== "object" ||
67
+ !("getFulfillmentPackingListBatchSnapshot" in resolved) ||
68
+ typeof resolved.getFulfillmentPackingListBatchSnapshot !== "function") {
69
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "The installed batch-management plugin does not provide the fulfillment packing-list capability.");
70
+ }
71
+ return resolved;
72
+ };
73
+ const findOrderIdForFulfillment = async (container, fulfillmentId) => {
74
+ const link = container.resolve(utils_1.ContainerRegistrationKeys.LINK);
75
+ const orderFulfillment = link.getLinkModule(utils_1.Modules.ORDER, "order_id", utils_1.Modules.FULFILLMENT, "fulfillment_id");
76
+ const records = await orderFulfillment.list({ fulfillment_id: fulfillmentId }, { select: ["order_id"] });
77
+ const orderId = records[0]?.order_id;
78
+ if (records.length !== 1 || !orderId) {
79
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Expected one order link for fulfillment ${fulfillmentId}.`);
80
+ }
81
+ return orderId;
82
+ };
83
+ const resolvePackingListCandidateStep = (0, workflows_sdk_1.createStep)("documents-resolve-packing-list-candidate", async (input, { container }) => {
84
+ const fulfillmentId = asString(input.fulfillment_id, "fulfillment_id");
85
+ const linkedOrderId = await findOrderIdForFulfillment(container, fulfillmentId);
86
+ if (input.order_id && input.order_id !== linkedOrderId) {
87
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Fulfillment ${fulfillmentId} does not belong to order ${input.order_id}.`);
88
+ }
89
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
90
+ const { data } = await query.graph({
91
+ entity: "fulfillment",
92
+ fields: [
93
+ "id",
94
+ "location_id",
95
+ "requires_shipping",
96
+ "canceled_at",
97
+ "shipped_at",
98
+ "created_at",
99
+ "items.id",
100
+ "items.line_item_id",
101
+ "items.inventory_item_id",
102
+ "items.title",
103
+ "items.sku",
104
+ "items.quantity",
105
+ ],
106
+ filters: { id: fulfillmentId },
107
+ });
108
+ if (data.length !== 1) {
109
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Fulfillment ${fulfillmentId} was not found.`);
110
+ }
111
+ const fulfillment = asRecord(data[0], "fulfillment");
112
+ if (!(0, packing_list_1.isPackingListFulfillmentEligible)({
113
+ requires_shipping: fulfillment.requires_shipping,
114
+ canceled_at: fulfillment.canceled_at,
115
+ shipped_at: fulfillment.shipped_at,
116
+ })) {
117
+ return new workflows_sdk_1.StepResponse({
118
+ action: "not_eligible",
119
+ source_revision: null,
120
+ source: null,
121
+ fulfillment_created_at: null,
122
+ });
123
+ }
124
+ const locationId = asString(fulfillment.location_id, "fulfillment.location_id");
125
+ const fulfillmentCreatedAt = asIsoDate(fulfillment.created_at, "fulfillment.created_at");
126
+ const rawItems = fulfillment.items;
127
+ if (!Array.isArray(rawItems) || !rawItems.length) {
128
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Fulfillment ${fulfillmentId} has no packing-list items.`);
129
+ }
130
+ const capability = tryResolveBatchCapability(container);
131
+ const batchSnapshot = capability
132
+ ? await capability.getFulfillmentPackingListBatchSnapshot(fulfillmentId)
133
+ : null;
134
+ if (batchSnapshot?.status === "pending") {
135
+ return new workflows_sdk_1.StepResponse({
136
+ action: "pending",
137
+ source_revision: null,
138
+ source: null,
139
+ fulfillment_created_at: fulfillmentCreatedAt,
140
+ });
141
+ }
142
+ if (batchSnapshot &&
143
+ (batchSnapshot.order_id !== linkedOrderId ||
144
+ batchSnapshot.fulfillment_id !== fulfillmentId ||
145
+ batchSnapshot.location_id !== locationId)) {
146
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Batch packing-list data for fulfillment ${fulfillmentId} has an invalid scope.`);
147
+ }
148
+ const sourceRevision = batchSnapshot?.revision ?? 1;
149
+ const existing = await (0, resolve_services_1.resolveDocumentsService)(container).getPackingListForOrderAndFulfillment(linkedOrderId, fulfillmentId);
150
+ if (existing?.packing_list.lifecycle_status === "canceled" ||
151
+ existing?.revisions.some((revision) => revision.source_revision === sourceRevision &&
152
+ revision.generation_status === "ready")) {
153
+ return new workflows_sdk_1.StepResponse({
154
+ action: "not_eligible",
155
+ source_revision: null,
156
+ source: null,
157
+ fulfillment_created_at: null,
158
+ });
159
+ }
160
+ const { result: rawOrder } = await (0, core_flows_1.getOrderDetailWorkflow)(container).run({
161
+ input: {
162
+ order_id: linkedOrderId,
163
+ fields: ["id", "display_id"],
164
+ },
165
+ });
166
+ const order = asRecord(rawOrder, "order");
167
+ const locationService = container.resolve(utils_1.Modules.STOCK_LOCATION);
168
+ const location = await locationService.retrieveStockLocation(locationId);
169
+ const fulfillmentItems = rawItems.map((rawItem, index) => {
170
+ const item = asRecord(rawItem, `fulfillment.items[${index}]`);
171
+ return {
172
+ line_item_id: asString(item.line_item_id, "fulfillment.items[].line_item_id"),
173
+ inventory_item_id: asOptionalString(item.inventory_item_id),
174
+ title: asString(item.title, "fulfillment.items[].title"),
175
+ sku: asOptionalString(item.sku),
176
+ quantity: asQuantity(item.quantity, "fulfillment.items[].quantity"),
177
+ };
178
+ });
179
+ const lines = (0, packing_list_1.createPackingListLines)({
180
+ fulfillment_items: fulfillmentItems,
181
+ batch_allocations: batchSnapshot?.allocations ?? [],
182
+ batch_management_enabled: !!capability,
183
+ });
184
+ return new workflows_sdk_1.StepResponse({
185
+ action: "ready",
186
+ source_revision: sourceRevision,
187
+ fulfillment_created_at: fulfillmentCreatedAt,
188
+ source: {
189
+ order: {
190
+ id: asString(order.id, "order.id"),
191
+ display_id: asOptionalNumber(order.display_id),
192
+ },
193
+ fulfillment: {
194
+ id: fulfillmentId,
195
+ created_at: fulfillmentCreatedAt,
196
+ location_id: locationId,
197
+ location_name: asString(location.name, "stock_location.name"),
198
+ },
199
+ lines,
200
+ },
201
+ });
202
+ });
203
+ const claimPackingListStep = (0, workflows_sdk_1.createStep)("documents-claim-packing-list-revision", async (candidate, { container }) => {
204
+ if (candidate.action !== "ready" ||
205
+ !candidate.source ||
206
+ !candidate.source_revision ||
207
+ !candidate.fulfillment_created_at) {
208
+ return new workflows_sdk_1.StepResponse({
209
+ should_render: false,
210
+ action: candidate.action,
211
+ packing_list_id: null,
212
+ revision_id: null,
213
+ attempt_token: null,
214
+ snapshot: null,
215
+ }, null);
216
+ }
217
+ const source = candidate.source;
218
+ const claimed = await (0, resolve_services_1.resolveDocumentsService)(container).claimPackingListRevision({
219
+ order_id: source.order.id,
220
+ order_display_id: source.order.display_id,
221
+ fulfillment_id: source.fulfillment.id,
222
+ fulfillment_created_at: new Date(candidate.fulfillment_created_at),
223
+ source_revision: candidate.source_revision,
224
+ });
225
+ if (claimed.action !== "render" ||
226
+ !claimed.revision ||
227
+ !claimed.attempt_token) {
228
+ return new workflows_sdk_1.StepResponse({
229
+ should_render: false,
230
+ action: claimed.action,
231
+ packing_list_id: claimed.packing_list.id,
232
+ revision_id: claimed.revision?.id ?? null,
233
+ attempt_token: null,
234
+ snapshot: claimed.revision?.snapshot ?? null,
235
+ }, null);
236
+ }
237
+ return new workflows_sdk_1.StepResponse({
238
+ should_render: true,
239
+ action: "render",
240
+ packing_list_id: claimed.packing_list.id,
241
+ revision_id: claimed.revision.id,
242
+ attempt_token: claimed.attempt_token,
243
+ snapshot: null,
244
+ }, {
245
+ revision_id: claimed.revision.id,
246
+ attempt_token: claimed.attempt_token,
247
+ });
248
+ }, async (claim, { container }) => {
249
+ if (!claim) {
250
+ return;
251
+ }
252
+ await (0, resolve_services_1.resolveDocumentsService)(container).markPackingListRevisionFailed({
253
+ revision_id: claim.revision_id,
254
+ attempt_token: claim.attempt_token,
255
+ code: "workflow_failed",
256
+ reason: "The packing-list generation workflow did not finish.",
257
+ });
258
+ });
259
+ const savePackingListRevisionSnapshotStep = (0, workflows_sdk_1.createStep)("documents-save-packing-list-revision-snapshot", async ({ candidate, claim }, { container }) => {
260
+ if (!claim.should_render ||
261
+ !claim.packing_list_id ||
262
+ !claim.revision_id ||
263
+ !claim.attempt_token) {
264
+ return new workflows_sdk_1.StepResponse(claim);
265
+ }
266
+ if (candidate.action !== "ready" ||
267
+ !candidate.source ||
268
+ !candidate.source_revision) {
269
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "A claimed packing-list revision has no renderable source.");
270
+ }
271
+ const source = candidate.source;
272
+ const snapshot = {
273
+ ...source,
274
+ document: {
275
+ kind: "packing_list",
276
+ id: claim.packing_list_id,
277
+ number: (0, packing_list_1.formatPackingListNumber)({
278
+ order_id: source.order.id,
279
+ order_display_id: source.order.display_id,
280
+ fulfillment_id: source.fulfillment.id,
281
+ }),
282
+ source_revision: candidate.source_revision,
283
+ generated_at: new Date().toISOString(),
284
+ },
285
+ };
286
+ await (0, resolve_services_1.resolveDocumentsService)(container).savePackingListRevisionSnapshot({
287
+ revision_id: claim.revision_id,
288
+ attempt_token: claim.attempt_token,
289
+ snapshot,
290
+ });
291
+ return new workflows_sdk_1.StepResponse({ ...claim, snapshot });
292
+ });
293
+ const renderPackingListHtmlStep = (0, workflows_sdk_1.createStep)("documents-render-packing-list-html", async (claim, { container }) => {
294
+ if (!claim.should_render || !claim.snapshot) {
295
+ return new workflows_sdk_1.StepResponse(null);
296
+ }
297
+ const documents = (0, resolve_services_1.resolveDocumentsService)(container);
298
+ const options = await documents.getPluginOptions();
299
+ let merchant;
300
+ try {
301
+ merchant = await (0, document_merchant_1.resolveDocumentMerchant)(container, options.merchantFallback);
302
+ }
303
+ catch (error) {
304
+ // Record the reason on the revision so the Admin widget shows it; the
305
+ // claim's generic compensation then leaves the failed revision alone.
306
+ if (claim.revision_id && claim.attempt_token) {
307
+ await documents.markPackingListRevisionFailed({
308
+ revision_id: claim.revision_id,
309
+ attempt_token: claim.attempt_token,
310
+ code: "merchant_unavailable",
311
+ reason: error instanceof Error ? error.message : String(error),
312
+ });
313
+ }
314
+ throw error;
315
+ }
316
+ const settings = await (0, document_render_settings_1.resolveDocumentRenderSettings)(container);
317
+ const html = await options.htmlFactory({
318
+ ...claim.snapshot,
319
+ merchant,
320
+ settings,
321
+ });
322
+ if (typeof html !== "string" || !html.trim()) {
323
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "The documents htmlFactory must return non-empty packing-list HTML.");
324
+ }
325
+ return new workflows_sdk_1.StepResponse({ claim, html });
326
+ });
327
+ const createPackingListFileStep = (0, workflows_sdk_1.createStep)("documents-create-packing-list-file", async (renderedHtml, { container }) => {
328
+ if (!renderedHtml) {
329
+ return new workflows_sdk_1.StepResponse(null, null);
330
+ }
331
+ const { claim, html } = renderedHtml;
332
+ if (!claim.snapshot ||
333
+ !claim.packing_list_id ||
334
+ !claim.revision_id ||
335
+ !claim.attempt_token) {
336
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "A rendered packing list has no active generation claim.");
337
+ }
338
+ const options = await (0, resolve_services_1.resolveDocumentsService)(container).getPluginOptions();
339
+ const pdf = await (0, html_to_pdf_1.renderHtmlToPdf)({
340
+ html,
341
+ executablePath: options.pdf.executablePath,
342
+ });
343
+ const filename = `${claim.snapshot.document.number}-R${claim.snapshot.document.source_revision}.pdf`;
344
+ (0, private_file_storage_1.assertPrivateFileStorage)(container);
345
+ const files = container.resolve(utils_1.Modules.FILE);
346
+ const file = await files.createFiles({
347
+ filename,
348
+ mimeType: "application/pdf",
349
+ content: pdf.toString("base64"),
350
+ access: "private",
351
+ });
352
+ return new workflows_sdk_1.StepResponse({
353
+ packing_list_id: claim.packing_list_id,
354
+ revision_id: claim.revision_id,
355
+ attempt_token: claim.attempt_token,
356
+ file_id: file.id,
357
+ filename,
358
+ }, file.id);
359
+ }, async (fileId, { container }) => {
360
+ if (!fileId) {
361
+ return;
362
+ }
363
+ const files = container.resolve(utils_1.Modules.FILE);
364
+ await files.deleteFiles([fileId]);
365
+ });
366
+ const publishPackingListStep = (0, workflows_sdk_1.createStep)("documents-publish-packing-list", async (rendered, { container }) => {
367
+ if (!rendered) {
368
+ return new workflows_sdk_1.StepResponse(null);
369
+ }
370
+ await (0, resolve_services_1.resolveDocumentsService)(container).publishPackingListRevision({
371
+ revision_id: rendered.revision_id,
372
+ attempt_token: rendered.attempt_token,
373
+ file_id: rendered.file_id,
374
+ filename: rendered.filename,
375
+ });
376
+ return new workflows_sdk_1.StepResponse(rendered.packing_list_id);
377
+ });
378
+ exports.issuePackingListWorkflow = (0, workflows_sdk_1.createWorkflow)("documents-issue-packing-list", (input) => {
379
+ const candidate = resolvePackingListCandidateStep(input);
380
+ const claim = claimPackingListStep(candidate);
381
+ const savedClaim = savePackingListRevisionSnapshotStep({
382
+ candidate,
383
+ claim,
384
+ });
385
+ const renderedHtml = renderPackingListHtmlStep(savedClaim);
386
+ const file = createPackingListFileStep(renderedHtml);
387
+ const packingListId = publishPackingListStep(file);
388
+ return new workflows_sdk_1.WorkflowResponse(packingListId);
389
+ });
390
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNzdWUtcGFja2luZy1saXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9kb2N1bWVudHMvaXNzdWUtcGFja2luZy1saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHFEQUlrQztBQUNsQyxxRUFLMEM7QUFDMUMsNERBQW9FO0FBRXBFLDhFQU1vRDtBQUVwRCw2RkFBOEY7QUFDOUYsK0VBQWlGO0FBQ2pGLHFGQUFxRjtBQUNyRixtRUFBbUU7QUFDbkUsNkVBQWdGO0FBd0ZoRixNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQWMsRUFBRSxLQUFhLEVBQTJCLEVBQUU7SUFDMUUsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2hFLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFDbEMsYUFBYSxLQUFLLG9CQUFvQixDQUN2QyxDQUFBO0lBQ0gsQ0FBQztJQUNELE9BQU8sS0FBZ0MsQ0FBQTtBQUN6QyxDQUFDLENBQUE7QUFFRCxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQWMsRUFBRSxLQUFhLEVBQVUsRUFBRTtJQUN6RCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQy9DLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFDbEMsYUFBYSxLQUFLLDZCQUE2QixDQUNoRCxDQUFBO0lBQ0gsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQyxDQUFBO0FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEtBQWMsRUFBaUIsRUFBRSxDQUN6RCxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLElB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
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.publishDocumentFactsWorkflow = exports.publishDocumentFactsStep = exports.publishUnpublishedDocumentFacts = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
+ const resolve_services_1 = require("../../documents/utils/resolve-services");
7
+ const publishUnpublishedDocumentFacts = async (documents, eventBus, limit, files, logger) => {
8
+ const facts = await documents.listUnpublishedDocumentFacts({ limit });
9
+ let emitted = 0;
10
+ for (const fact of facts) {
11
+ try {
12
+ if (files) {
13
+ let artifacts = [];
14
+ if (fact.kind === "shipment_assignment") {
15
+ artifacts =
16
+ fact.payload.decision === "carrier"
17
+ ? [fact.payload.invoice_artifact]
18
+ : [];
19
+ }
20
+ else if (fact.kind === "refund") {
21
+ artifacts = fact.payload.artifact ? [fact.payload.artifact] : [];
22
+ }
23
+ else {
24
+ artifacts = fact.payload.attachments.map((attachment) => attachment.artifact);
25
+ }
26
+ for (const artifact of artifacts) {
27
+ await files.getAsBuffer(artifact.file_id);
28
+ }
29
+ }
30
+ await eventBus.emit({ name: fact.event_name, data: fact.payload });
31
+ await documents.markDocumentFactEmitted({
32
+ kind: fact.kind,
33
+ id: fact.id,
34
+ emitted_at: new Date(),
35
+ });
36
+ emitted += 1;
37
+ }
38
+ catch {
39
+ logger?.warn(`documents: fact publication deferred for ${fact.kind} ${fact.id}`);
40
+ }
41
+ }
42
+ return emitted;
43
+ };
44
+ exports.publishUnpublishedDocumentFacts = publishUnpublishedDocumentFacts;
45
+ exports.publishDocumentFactsStep = (0, workflows_sdk_1.createStep)("documents-publish-committed-facts", async (input, { container }) => {
46
+ if (input.enabled === false) {
47
+ return new workflows_sdk_1.StepResponse(0);
48
+ }
49
+ const emitted = await (0, exports.publishUnpublishedDocumentFacts)((0, resolve_services_1.resolveDocumentsService)(container), container.resolve(utils_1.Modules.EVENT_BUS), input.limit, container.resolve(utils_1.Modules.FILE), container.resolve(utils_1.ContainerRegistrationKeys.LOGGER));
50
+ return new workflows_sdk_1.StepResponse(emitted);
51
+ });
52
+ exports.publishDocumentFactsWorkflow = (0, workflows_sdk_1.createWorkflow)("documents-publish-committed-facts", (input) => new workflows_sdk_1.WorkflowResponse((0, exports.publishDocumentFactsStep)(input)));
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGlzaC1kb2N1bWVudC1mYWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvZG9jdW1lbnRzL3B1Ymxpc2gtZG9jdW1lbnQtZmFjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0EscURBQThFO0FBQzlFLHFFQUswQztBQUsxQyw2RUFBZ0Y7QUFJekUsTUFBTSwrQkFBK0IsR0FBRyxLQUFLLEVBQ2xELFNBR0MsRUFDRCxRQUFnQyxFQUNoQyxLQUFhLEVBQ2IsS0FBK0MsRUFDL0MsTUFBNkIsRUFDWixFQUFFO0lBQ25CLE1BQU0sS0FBSyxHQUFHLE1BQU0sU0FBUyxDQUFDLDRCQUE0QixDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQTtJQUNyRSxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUE7SUFDZixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQztZQUNILElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1YsSUFBSSxTQUFTLEdBQTZCLEVBQUUsQ0FBQTtnQkFDNUMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLHFCQUFxQixFQUFFLENBQUM7b0JBQ3hDLFNBQVM7d0JBQ1AsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEtBQUssU0FBUzs0QkFDakMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQzs0QkFDakMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtnQkFDVixDQUFDO3FCQUFNLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDbEMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtnQkFDbEUsQ0FBQztxQkFBTSxDQUFDO29CQUNOLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQ3RDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUNwQyxDQUFBO2dCQUNILENBQUM7Z0JBQ0QsS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQztvQkFDakMsTUFBTSxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDM0MsQ0FBQztZQUNILENBQUM7WUFDRCxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7WUFDbEUsTUFBTSxTQUFTLENBQUMsdUJBQXVCLENBQUM7Z0JBQ3RDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ1gsVUFBVSxFQUFFLElBQUksSUFBSSxFQUFFO2FBQ3ZCLENBQUMsQ0FBQTtZQUNGLE9BQU8sSUFBSSxDQUFDLENBQUE7UUFDZCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsTUFBTSxFQUFFLElBQUksQ0FDViw0Q0FBNEMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQ25FLENBQUE7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFBO0FBQ2hCLENBQUMsQ0FBQTtBQTlDWSxRQUFBLCtCQUErQixtQ0E4QzNDO0FBRVksUUFBQSx3QkFBd0IsR0FBRyxJQUFBLDBCQUFVLEVBQ2hELG1DQUFtQyxFQUNuQyxLQUFLLEVBQ0gsS0FBNEQsRUFDNUQsRUFBRSxTQUFTLEVBQUUsRUFDYixFQUFFO0lBQ0YsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQzVCLE9BQU8sSUFBSSw0QkFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzVCLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEsdUNBQStCLEVBQ25ELElBQUEsMENBQXVCLEVBQUMsU0FBUyxDQUFDLEVBQ2xDLFNBQVMsQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLFNBQVMsQ0FBMkIsRUFDOUQsS0FBSyxDQUFDLEtBQUssRUFDWCxTQUFTLENBQUMsT0FBTyxDQUFDLGVBQU8sQ0FBQyxJQUFJLENBQXVCLEVBQ3JELFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsTUFBTSxDQUFXLENBQzlELENBQUE7SUFDRCxPQUFPLElBQUksNEJBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQTtBQUNsQyxDQUFDLENBQ0YsQ0FBQTtBQUVZLFFBQUEsNEJBQTRCLEdBQUcsSUFBQSw4QkFBYyxFQUN4RCxtQ0FBbUMsRUFDbkMsQ0FBQyxLQUF3QixFQUFFLEVBQUUsQ0FDM0IsSUFBSSxnQ0FBZ0IsQ0FBQyxJQUFBLGdDQUF3QixFQUFDLEtBQUssQ0FBQyxDQUFDLENBQ3hELENBQUEifQ==
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.reconcileDocumentResolutionsWorkflow = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
+ const resolve_services_1 = require("../../documents/utils/resolve-services");
7
+ const issue_cancellation_after_refund_1 = require("./issue-cancellation-after-refund");
8
+ const issue_invoice_after_shipment_1 = require("./issue-invoice-after-shipment");
9
+ const reconcile_order_cancellation_1 = require("./reconcile-order-cancellation");
10
+ const reconcileDocumentResolutionsStep = (0, workflows_sdk_1.createStep)("documents-reconcile-domain-resolutions", async (input, { container }) => {
11
+ const candidates = await (0, resolve_services_1.resolveDocumentsService)(container).listDocumentResolutionReconciliationCandidates({ limit: input.limit });
12
+ const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
13
+ let completed = 0;
14
+ for (const fulfillmentId of candidates.fulfillment_ids) {
15
+ try {
16
+ await (0, issue_invoice_after_shipment_1.issueInvoiceAfterShipmentWorkflow)(container).run({
17
+ input: { fulfillment_id: fulfillmentId },
18
+ });
19
+ completed += 1;
20
+ }
21
+ catch {
22
+ logger.warn(`documents: shipment assignment reconciliation deferred for ${fulfillmentId}`);
23
+ }
24
+ }
25
+ for (const refund of candidates.refunds) {
26
+ try {
27
+ await (0, issue_cancellation_after_refund_1.issueCancellationAfterRefundWorkflow)(container).run({ input: refund });
28
+ completed += 1;
29
+ }
30
+ catch {
31
+ logger.warn(`documents: refund resolution reconciliation deferred for ${refund.refund_id}`);
32
+ }
33
+ }
34
+ for (const orderId of candidates.order_ids) {
35
+ try {
36
+ await (0, reconcile_order_cancellation_1.reconcileOrderCancellationWorkflow)(container).run({
37
+ input: { order_id: orderId },
38
+ });
39
+ completed += 1;
40
+ }
41
+ catch {
42
+ logger.warn(`documents: order cancellation reconciliation deferred for ${orderId}`);
43
+ }
44
+ }
45
+ return new workflows_sdk_1.StepResponse(completed);
46
+ });
47
+ exports.reconcileDocumentResolutionsWorkflow = (0, workflows_sdk_1.createWorkflow)("documents-reconcile-domain-resolutions", (input) => new workflows_sdk_1.WorkflowResponse(reconcileDocumentResolutionsStep(input)));
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb25jaWxlLWRvY3VtZW50LXJlc29sdXRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9kb2N1bWVudHMvcmVjb25jaWxlLWRvY3VtZW50LXJlc29sdXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUFxRTtBQUNyRSxxRUFLMEM7QUFFMUMsNkVBQWdGO0FBQ2hGLHVGQUF3RjtBQUN4RixpRkFBa0Y7QUFDbEYsaUZBQW1GO0FBRW5GLE1BQU0sZ0NBQWdDLEdBQUcsSUFBQSwwQkFBVSxFQUNqRCx3Q0FBd0MsRUFDeEMsS0FBSyxFQUFFLEtBQXdCLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQ2hELE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBQSwwQ0FBdUIsRUFDOUMsU0FBUyxDQUNWLENBQUMsOENBQThDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDeEUsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBUyxpQ0FBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUMxRSxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUE7SUFDakIsS0FBSyxNQUFNLGFBQWEsSUFBSSxVQUFVLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFBLGdFQUFpQyxFQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFDckQsS0FBSyxFQUFFLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRTthQUN6QyxDQUFDLENBQUE7WUFDRixTQUFTLElBQUksQ0FBQyxDQUFBO1FBQ2hCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxNQUFNLENBQUMsSUFBSSxDQUNULDhEQUE4RCxhQUFhLEVBQUUsQ0FDOUUsQ0FBQTtRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0QsS0FBSyxNQUFNLE1BQU0sSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFBLHNFQUFvQyxFQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO1lBQzVFLFNBQVMsSUFBSSxDQUFDLENBQUE7UUFDaEIsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE1BQU0sQ0FBQyxJQUFJLENBQ1QsNERBQTRELE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FDL0UsQ0FBQTtRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0QsS0FBSyxNQUFNLE9BQU8sSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFBLGlFQUFrQyxFQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFDdEQsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTthQUM3QixDQUFDLENBQUE7WUFDRixTQUFTLElBQUksQ0FBQyxDQUFBO1FBQ2hCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxNQUFNLENBQUMsSUFBSSxDQUNULDZEQUE2RCxPQUFPLEVBQUUsQ0FDdkUsQ0FBQTtRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxJQUFJLDRCQUFZLENBQUMsU0FBUyxDQUFDLENBQUE7QUFDcEMsQ0FBQyxDQUNGLENBQUE7QUFFWSxRQUFBLG9DQUFvQyxHQUFHLElBQUEsOEJBQWMsRUFDaEUsd0NBQXdDLEVBQ3hDLENBQUMsS0FBd0IsRUFBRSxFQUFFLENBQzNCLElBQUksZ0NBQWdCLENBQUMsZ0NBQWdDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDaEUsQ0FBQSJ9
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.reconcileOrderCancellationWorkflow = exports.extractOrderRefundReferences = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
+ const resolve_services_1 = require("../../documents/utils/resolve-services");
7
+ const issue_cancellation_after_refund_1 = require("./issue-cancellation-after-refund");
8
+ const publish_document_facts_1 = require("./publish-document-facts");
9
+ const asRecord = (value) => value && typeof value === "object" && !Array.isArray(value)
10
+ ? value
11
+ : null;
12
+ const extractOrderRefundReferences = (rawOrder) => {
13
+ const references = [];
14
+ const collections = Array.isArray(rawOrder.payment_collections)
15
+ ? rawOrder.payment_collections
16
+ : [];
17
+ for (const rawCollection of collections) {
18
+ const collection = asRecord(rawCollection);
19
+ const payments = Array.isArray(collection?.payments) ? collection.payments : [];
20
+ for (const rawPayment of payments) {
21
+ const payment = asRecord(rawPayment);
22
+ if (typeof payment?.id !== "string") {
23
+ continue;
24
+ }
25
+ const refunds = Array.isArray(payment.refunds) ? payment.refunds : [];
26
+ for (const rawRefund of refunds) {
27
+ const refund = asRecord(rawRefund);
28
+ if (typeof refund?.id === "string") {
29
+ references.push({ payment_id: payment.id, refund_id: refund.id });
30
+ }
31
+ }
32
+ }
33
+ }
34
+ return [...new Map(references.map((reference) => [reference.refund_id, reference])).values()].sort((left, right) => left.refund_id.localeCompare(right.refund_id));
35
+ };
36
+ exports.extractOrderRefundReferences = extractOrderRefundReferences;
37
+ const reconcileOrderCancellationStep = (0, workflows_sdk_1.createStep)("documents-reconcile-order-cancellation", async (input, { container }) => {
38
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
39
+ const { data } = await query.graph({
40
+ entity: "order",
41
+ fields: [
42
+ "id",
43
+ "status",
44
+ "canceled_at",
45
+ "payment_collections.payments.id",
46
+ "payment_collections.payments.refunds.id",
47
+ ],
48
+ filters: { id: input.order_id },
49
+ });
50
+ const order = asRecord(data[0]);
51
+ if (!order ||
52
+ order.id !== input.order_id ||
53
+ (!order.canceled_at && order.status !== "canceled")) {
54
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.CONFLICT, `Order ${input.order_id} is not durably canceled.`);
55
+ }
56
+ const refunds = (0, exports.extractOrderRefundReferences)(order);
57
+ const documents = (0, resolve_services_1.resolveDocumentsService)(container);
58
+ const resolution = await documents.upsertOrderCancellationResolution({
59
+ order_id: input.order_id,
60
+ expected_refund_ids: refunds.map((refund) => refund.refund_id),
61
+ });
62
+ const claim = await documents.claimOrderCancellationResolution(resolution.id);
63
+ if (claim.action !== "process" || !claim.attempt_token) {
64
+ return new workflows_sdk_1.StepResponse(resolution.id);
65
+ }
66
+ try {
67
+ for (const refund of refunds) {
68
+ await (0, issue_cancellation_after_refund_1.issueCancellationAfterRefundWorkflow)(container).run({
69
+ input: refund,
70
+ });
71
+ }
72
+ await documents.finalizeOrderCancellationResolution({
73
+ resolution_id: resolution.id,
74
+ attempt_token: claim.attempt_token,
75
+ });
76
+ return new workflows_sdk_1.StepResponse(resolution.id);
77
+ }
78
+ catch (error) {
79
+ await documents.markOrderCancellationResolutionFailed({
80
+ resolution_id: resolution.id,
81
+ attempt_token: claim.attempt_token,
82
+ failure_code: "refund_reconciliation_failed",
83
+ });
84
+ throw error;
85
+ }
86
+ });
87
+ exports.reconcileOrderCancellationWorkflow = (0, workflows_sdk_1.createWorkflow)("documents-reconcile-order-cancellation", (input) => {
88
+ const resolutionId = reconcileOrderCancellationStep(input);
89
+ (0, publish_document_facts_1.publishDocumentFactsStep)({ limit: 20, after: resolutionId });
90
+ return new workflows_sdk_1.WorkflowResponse(resolutionId);
91
+ });
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb25jaWxlLW9yZGVyLWNhbmNlbGxhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvZG9jdW1lbnRzL3JlY29uY2lsZS1vcmRlci1jYW5jZWxsYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQWtGO0FBQ2xGLHFFQUswQztBQUUxQyw2RUFBZ0Y7QUFDaEYsdUZBQXdGO0FBQ3hGLHFFQUFtRTtBQVluRSxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQWMsRUFBa0MsRUFBRSxDQUNsRSxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDekQsQ0FBQyxDQUFFLEtBQWlDO0lBQ3BDLENBQUMsQ0FBQyxJQUFJLENBQUE7QUFFSCxNQUFNLDRCQUE0QixHQUFHLENBQzFDLFFBQWlDLEVBQ2QsRUFBRTtJQUNyQixNQUFNLFVBQVUsR0FBc0IsRUFBRSxDQUFBO0lBQ3hDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDO1FBQzdELENBQUMsQ0FBQyxRQUFRLENBQUMsbUJBQW1CO1FBQzlCLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDTixLQUFLLE1BQU0sYUFBYSxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUMxQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBQy9FLEtBQUssTUFBTSxVQUFVLElBQUksUUFBUSxFQUFFLENBQUM7WUFDbEMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lB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