@mercurjs/core 2.2.0-canary.2 → 2.2.0-canary.5

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 (634) hide show
  1. package/.medusa/server/src/api/admin/middlewares.js +9 -13
  2. package/.medusa/server/src/api/admin/offers/query-config.js +8 -8
  3. package/.medusa/server/src/api/admin/product-attributes/[id]/route.js +3 -3
  4. package/.medusa/server/src/api/admin/product-attributes/[id]/values/[value_id]/route.js +3 -3
  5. package/.medusa/server/src/api/admin/product-attributes/[id]/values/route.js +2 -2
  6. package/.medusa/server/src/api/admin/product-attributes/middlewares.js +15 -1
  7. package/.medusa/server/src/api/admin/product-attributes/query-config.js +1 -2
  8. package/.medusa/server/src/api/admin/product-attributes/route.js +6 -3
  9. package/.medusa/server/src/api/admin/product-attributes/validators.d.ts +1 -5
  10. package/.medusa/server/src/api/admin/product-attributes/validators.js +2 -15
  11. package/.medusa/server/src/api/admin/product-categories/[id]/products/route.js +3 -3
  12. package/.medusa/server/src/api/admin/product-categories/[id]/route.js +8 -7
  13. package/.medusa/server/src/api/admin/product-categories/query-config.js +1 -2
  14. package/.medusa/server/src/api/admin/product-categories/route.js +4 -4
  15. package/.medusa/server/src/api/admin/product-categories/validators.d.ts +8 -8
  16. package/.medusa/server/src/api/admin/product-changes/[id]/cancel/route.js +5 -6
  17. package/.medusa/server/src/api/admin/product-changes/[id]/confirm/route.js +5 -5
  18. package/.medusa/server/src/api/admin/products/[id]/attributes/[attribute_id]/route.d.ts +1 -4
  19. package/.medusa/server/src/api/admin/products/[id]/attributes/[attribute_id]/route.js +42 -30
  20. package/.medusa/server/src/api/admin/products/[id]/attributes/batch/route.d.ts +3 -2
  21. package/.medusa/server/src/api/admin/products/[id]/attributes/batch/route.js +11 -22
  22. package/.medusa/server/src/api/admin/products/[id]/attributes/route.d.ts +2 -3
  23. package/.medusa/server/src/api/admin/products/[id]/attributes/route.js +40 -25
  24. package/.medusa/server/src/api/admin/products/[id]/confirm/route.d.ts +12 -0
  25. package/.medusa/server/src/api/admin/products/[id]/confirm/route.js +16 -6
  26. package/.medusa/server/src/api/admin/products/[id]/preview/route.d.ts +8 -1
  27. package/.medusa/server/src/api/admin/products/[id]/preview/route.js +20 -7
  28. package/.medusa/server/src/api/admin/products/[id]/reject/route.d.ts +8 -0
  29. package/.medusa/server/src/api/admin/products/[id]/reject/route.js +13 -8
  30. package/.medusa/server/src/api/admin/products/[id]/request-changes/route.d.ts +9 -0
  31. package/.medusa/server/src/api/admin/products/[id]/request-changes/route.js +16 -10
  32. package/.medusa/server/src/api/admin/products/[id]/route.js +6 -6
  33. package/.medusa/server/src/api/admin/products/[id]/variants/[variant_id]/route.js +5 -5
  34. package/.medusa/server/src/api/admin/products/[id]/variants/route.js +22 -4
  35. package/.medusa/server/src/api/admin/products/middlewares.js +8 -4
  36. package/.medusa/server/src/api/admin/products/query-config.js +12 -18
  37. package/.medusa/server/src/api/admin/products/route.js +4 -9
  38. package/.medusa/server/src/api/admin/products/validators.d.ts +1040 -214
  39. package/.medusa/server/src/api/admin/products/validators.js +108 -16
  40. package/.medusa/server/src/api/store/carts/[id]/line-items/route.js +11 -5
  41. package/.medusa/server/src/api/store/carts/[id]/line-items/validators.d.ts +3 -3
  42. package/.medusa/server/src/api/store/carts/[id]/line-items/validators.js +2 -2
  43. package/.medusa/server/src/api/store/middlewares.js +7 -9
  44. package/.medusa/server/src/api/store/products/[id]/route.js +3 -18
  45. package/.medusa/server/src/api/store/products/middlewares.js +1 -7
  46. package/.medusa/server/src/api/store/products/query-config.d.ts +1 -3
  47. package/.medusa/server/src/api/store/products/query-config.js +14 -17
  48. package/.medusa/server/src/api/store/products/route.js +3 -19
  49. package/.medusa/server/src/api/store/products/validators.d.ts +0 -6
  50. package/.medusa/server/src/api/store/products/validators.js +1 -2
  51. package/.medusa/server/src/api/utils/filter-attributes-by-category-link.d.ts +17 -0
  52. package/.medusa/server/src/api/utils/filter-attributes-by-category-link.js +58 -0
  53. package/.medusa/server/src/api/utils/format-product-attributes.d.ts +51 -5
  54. package/.medusa/server/src/api/utils/format-product-attributes.js +174 -31
  55. package/.medusa/server/src/api/utils/index.d.ts +1 -0
  56. package/.medusa/server/src/api/utils/index.js +2 -1
  57. package/.medusa/server/src/api/vendor/middlewares.js +7 -11
  58. package/.medusa/server/src/api/vendor/offers/query-config.js +8 -8
  59. package/.medusa/server/src/api/vendor/orders/[id]/fulfillments/[fulfillment_id]/cancel/route.js +3 -3
  60. package/.medusa/server/src/api/vendor/orders/[id]/fulfillments/route.js +3 -3
  61. package/.medusa/server/src/api/vendor/product-attributes/middlewares.js +15 -1
  62. package/.medusa/server/src/api/vendor/product-attributes/route.js +4 -1
  63. package/.medusa/server/src/api/vendor/product-attributes/validators.d.ts +1 -5
  64. package/.medusa/server/src/api/vendor/product-attributes/validators.js +2 -15
  65. package/.medusa/server/src/api/vendor/product-categories/query-config.js +1 -2
  66. package/.medusa/server/src/api/vendor/product-categories/validators.d.ts +4 -4
  67. package/.medusa/server/src/api/vendor/products/[id]/attributes/[attribute_id]/route.d.ts +6 -5
  68. package/.medusa/server/src/api/vendor/products/[id]/attributes/[attribute_id]/route.js +41 -16
  69. package/.medusa/server/src/api/vendor/products/[id]/attributes/route.d.ts +10 -6
  70. package/.medusa/server/src/api/vendor/products/[id]/attributes/route.js +60 -25
  71. package/.medusa/server/src/api/vendor/products/[id]/cancel/route.d.ts +5 -7
  72. package/.medusa/server/src/api/vendor/products/[id]/cancel/route.js +14 -15
  73. package/.medusa/server/src/api/vendor/products/[id]/route.d.ts +18 -9
  74. package/.medusa/server/src/api/vendor/products/[id]/route.js +35 -16
  75. package/.medusa/server/src/api/vendor/products/[id]/variants/[variant_id]/route.d.ts +11 -9
  76. package/.medusa/server/src/api/vendor/products/[id]/variants/[variant_id]/route.js +43 -21
  77. package/.medusa/server/src/api/vendor/products/[id]/variants/route.d.ts +9 -5
  78. package/.medusa/server/src/api/vendor/products/[id]/variants/route.js +30 -10
  79. package/.medusa/server/src/api/vendor/products/helpers.d.ts +8 -0
  80. package/.medusa/server/src/api/vendor/products/helpers.js +26 -0
  81. package/.medusa/server/src/api/vendor/products/middlewares.js +17 -5
  82. package/.medusa/server/src/api/vendor/products/query-config.js +12 -17
  83. package/.medusa/server/src/api/vendor/products/route.d.ts +11 -1
  84. package/.medusa/server/src/api/vendor/products/route.js +25 -12
  85. package/.medusa/server/src/api/vendor/products/validators.d.ts +287 -57
  86. package/.medusa/server/src/api/vendor/products/validators.js +65 -13
  87. package/.medusa/server/src/api/vendor/returns/[id]/receive/confirm/route.js +3 -3
  88. package/.medusa/server/src/links/category-seller-link.js +2 -2
  89. package/.medusa/server/src/links/offer-price-link.js +13 -0
  90. package/.medusa/server/src/links/offer-variant-link.js +2 -2
  91. package/.medusa/server/src/links/product-attribute-category-link.d.ts +16 -0
  92. package/.medusa/server/src/links/product-attribute-category-link.js +40 -0
  93. package/.medusa/server/src/links/product-attribute-product-link.d.ts +10 -0
  94. package/.medusa/server/src/links/product-attribute-product-link.js +29 -0
  95. package/.medusa/server/src/links/product-attribute-value-link.d.ts +22 -0
  96. package/.medusa/server/src/links/product-attribute-value-link.js +46 -0
  97. package/.medusa/server/src/links/product-change-link.d.ts +8 -0
  98. package/.medusa/server/src/links/product-change-link.js +27 -0
  99. package/.medusa/server/src/links/product-seller-link.js +2 -2
  100. package/.medusa/server/src/links/product-variant-attribute-link.js +21 -0
  101. package/.medusa/server/src/links/product-variant-attribute-value-link.d.ts +2 -0
  102. package/.medusa/server/src/links/product-variant-attribute-value-link.js +21 -0
  103. package/.medusa/server/src/modules/{product/migrations/Migration20260414141012.d.ts → offer/migrations/Migration20260526000000.d.ts} +1 -1
  104. package/.medusa/server/src/modules/offer/migrations/Migration20260526000000.js +16 -0
  105. package/.medusa/server/src/modules/offer/models/offer.d.ts +0 -1
  106. package/.medusa/server/src/modules/offer/models/offer.js +1 -7
  107. package/.medusa/server/src/modules/offer/service.d.ts +0 -1
  108. package/.medusa/server/src/modules/product-attribute/index.d.ts +36 -0
  109. package/.medusa/server/src/modules/product-attribute/index.js +14 -0
  110. package/.medusa/server/src/modules/product-attribute/joiner-config.d.ts +1 -0
  111. package/.medusa/server/src/modules/product-attribute/joiner-config.js +17 -0
  112. package/.medusa/server/src/modules/{product/migrations/Migration20260415151424.d.ts → product-attribute/migrations/Migration20260601000000.d.ts} +1 -1
  113. package/.medusa/server/src/modules/product-attribute/migrations/Migration20260601000000.js +62 -0
  114. package/.medusa/server/src/modules/product-attribute/migrations/Migration20260601000001.d.ts +11 -0
  115. package/.medusa/server/src/modules/product-attribute/migrations/Migration20260601000001.js +29 -0
  116. package/.medusa/server/src/modules/product-attribute/models/index.d.ts +2 -0
  117. package/.medusa/server/src/modules/product-attribute/models/index.js +11 -0
  118. package/.medusa/server/src/modules/product-attribute/models/product-attribute-value.d.ts +25 -0
  119. package/.medusa/server/src/modules/product-attribute/models/product-attribute-value.js +29 -0
  120. package/.medusa/server/src/modules/product-attribute/models/product-attribute.d.ts +26 -0
  121. package/.medusa/server/src/modules/product-attribute/models/product-attribute.js +53 -0
  122. package/.medusa/server/src/modules/product-attribute/service.d.ts +55 -0
  123. package/.medusa/server/src/modules/product-attribute/service.js +15 -0
  124. package/.medusa/server/src/modules/product-edit/index.d.ts +36 -0
  125. package/.medusa/server/src/modules/{subscription → product-edit}/index.js +4 -2
  126. package/.medusa/server/src/modules/product-edit/joiner-config.d.ts +1 -0
  127. package/.medusa/server/src/modules/product-edit/joiner-config.js +17 -0
  128. package/.medusa/server/src/modules/{product/migrations/Migration20260416104248.d.ts → product-edit/migrations/Migration20260601130000.d.ts} +1 -1
  129. package/.medusa/server/src/modules/product-edit/migrations/Migration20260601130000.js +78 -0
  130. package/.medusa/server/src/modules/product-edit/models/index.d.ts +2 -0
  131. package/.medusa/server/src/modules/product-edit/models/index.js +11 -0
  132. package/.medusa/server/src/modules/product-edit/models/product-change-action.d.ts +49 -0
  133. package/.medusa/server/src/modules/{product → product-edit}/models/product-change-action.js +1 -1
  134. package/.medusa/server/src/modules/product-edit/models/product-change.d.ts +31 -0
  135. package/.medusa/server/src/modules/product-edit/models/product-change.js +52 -0
  136. package/.medusa/server/src/modules/product-edit/service.d.ts +84 -0
  137. package/.medusa/server/src/modules/product-edit/service.js +15 -0
  138. package/.medusa/server/src/types/cart-line-item.d.ts +0 -9
  139. package/.medusa/server/src/with-mercur.js +1 -6
  140. package/.medusa/server/src/workflows/cart/hooks/before-refreshing-payment-collection.js +36 -0
  141. package/.medusa/server/src/workflows/cart/hooks/index.d.ts +3 -2
  142. package/.medusa/server/src/workflows/cart/hooks/index.js +4 -3
  143. package/.medusa/server/src/workflows/cart/hooks/set-pricing-context.js +94 -0
  144. package/.medusa/server/src/workflows/cart/hooks/validate.d.ts +1 -0
  145. package/.medusa/server/src/workflows/cart/hooks/validate.js +107 -0
  146. package/.medusa/server/src/workflows/cart/steps/index.d.ts +0 -3
  147. package/.medusa/server/src/workflows/cart/steps/index.js +1 -4
  148. package/.medusa/server/src/workflows/cart/utils/fields.js +1 -2
  149. package/.medusa/server/src/workflows/cart/workflows/index.d.ts +0 -2
  150. package/.medusa/server/src/workflows/cart/workflows/index.js +1 -3
  151. package/.medusa/server/src/workflows/index.d.ts +1 -1
  152. package/.medusa/server/src/workflows/index.js +2 -2
  153. package/.medusa/server/src/workflows/offer/steps/add-offer-prices.d.ts +22 -0
  154. package/.medusa/server/src/workflows/offer/steps/add-offer-prices.js +64 -0
  155. package/.medusa/server/src/workflows/offer/steps/create-offers.d.ts +0 -1
  156. package/.medusa/server/src/workflows/offer/steps/delete-offers.d.ts +6 -1
  157. package/.medusa/server/src/workflows/offer/steps/delete-offers.js +10 -6
  158. package/.medusa/server/src/workflows/offer/steps/ensure-variant-price-sets.d.ts +15 -0
  159. package/.medusa/server/src/workflows/offer/steps/ensure-variant-price-sets.js +61 -0
  160. package/.medusa/server/src/workflows/offer/steps/index.d.ts +4 -1
  161. package/.medusa/server/src/workflows/offer/steps/index.js +5 -2
  162. package/.medusa/server/src/workflows/offer/steps/remove-offer-prices.d.ts +3 -0
  163. package/.medusa/server/src/workflows/offer/steps/remove-offer-prices.js +15 -0
  164. package/.medusa/server/src/workflows/offer/steps/update-offers.d.ts +0 -1
  165. package/.medusa/server/src/workflows/offer/utils/assert-offer-price-ownership.d.ts +17 -0
  166. package/.medusa/server/src/workflows/offer/utils/assert-offer-price-ownership.js +27 -0
  167. package/.medusa/server/src/workflows/offer/utils/index.d.ts +1 -0
  168. package/.medusa/server/src/workflows/offer/utils/index.js +2 -1
  169. package/.medusa/server/src/workflows/offer/workflows/batch-offer-inventory-items.d.ts +17 -31
  170. package/.medusa/server/src/workflows/offer/workflows/batch-offer-inventory-items.js +1 -1
  171. package/.medusa/server/src/workflows/offer/workflows/create-offers.d.ts +12 -111
  172. package/.medusa/server/src/workflows/offer/workflows/create-offers.js +98 -45
  173. package/.medusa/server/src/workflows/offer/workflows/delete-offers.js +2 -2
  174. package/.medusa/server/src/workflows/offer/workflows/update-offers.d.ts +21 -116
  175. package/.medusa/server/src/workflows/offer/workflows/update-offers.js +136 -20
  176. package/.medusa/server/src/workflows/order/workflows/cancel-order-fulfillment.d.ts +1 -1
  177. package/.medusa/server/src/workflows/order/workflows/cancel-order-fulfillment.js +3 -4
  178. package/.medusa/server/src/workflows/order/workflows/confirm-return-receive.d.ts +1 -1
  179. package/.medusa/server/src/workflows/order/workflows/confirm-return-receive.js +3 -4
  180. package/.medusa/server/src/workflows/order/workflows/create-order-fulfillment.d.ts +10 -33
  181. package/.medusa/server/src/workflows/order/workflows/create-order-fulfillment.js +3 -4
  182. package/.medusa/server/src/workflows/product/events.d.ts +5 -47
  183. package/.medusa/server/src/workflows/product/events.js +7 -49
  184. package/.medusa/server/src/workflows/product/index.d.ts +1 -1
  185. package/.medusa/server/src/workflows/product/index.js +2 -2
  186. package/.medusa/server/src/workflows/product/steps/index.d.ts +3 -28
  187. package/.medusa/server/src/workflows/product/steps/index.js +4 -29
  188. package/.medusa/server/src/workflows/product/steps/replace-product-attribute-value-links.d.ts +28 -0
  189. package/.medusa/server/src/workflows/product/steps/replace-product-attribute-value-links.js +72 -0
  190. package/.medusa/server/src/workflows/product/steps/resolve-attribute-refs.d.ts +90 -0
  191. package/.medusa/server/src/workflows/product/steps/resolve-attribute-refs.js +185 -0
  192. package/.medusa/server/src/workflows/product/steps/validate-products-status.d.ts +19 -0
  193. package/.medusa/server/src/workflows/product/steps/validate-products-status.js +28 -0
  194. package/.medusa/server/src/workflows/product/steps/validate-seller-product-permissions.d.ts +0 -1
  195. package/.medusa/server/src/workflows/product/steps/validate-seller-product-permissions.js +2 -21
  196. package/.medusa/server/src/workflows/product/workflows/confirm-products.d.ts +13 -1
  197. package/.medusa/server/src/workflows/product/workflows/confirm-products.js +41 -30
  198. package/.medusa/server/src/workflows/product/workflows/create-products.d.ts +59 -3
  199. package/.medusa/server/src/workflows/product/workflows/create-products.js +186 -16
  200. package/.medusa/server/src/workflows/product/workflows/index.d.ts +3 -26
  201. package/.medusa/server/src/workflows/product/workflows/index.js +4 -27
  202. package/.medusa/server/src/workflows/product/workflows/link-sellers-to-product-category.d.ts +1 -1
  203. package/.medusa/server/src/workflows/product/workflows/link-sellers-to-product-category.js +3 -4
  204. package/.medusa/server/src/workflows/product/workflows/link-sellers-to-product.d.ts +1 -1
  205. package/.medusa/server/src/workflows/product/workflows/link-sellers-to-product.js +3 -4
  206. package/.medusa/server/src/workflows/product/workflows/reject-product.d.ts +8 -1
  207. package/.medusa/server/src/workflows/product/workflows/reject-product.js +42 -38
  208. package/.medusa/server/src/workflows/product/workflows/request-product-change.d.ts +25 -0
  209. package/.medusa/server/src/workflows/product/workflows/request-product-change.js +69 -0
  210. package/.medusa/server/src/workflows/product/workflows/update-products.d.ts +39 -3
  211. package/.medusa/server/src/workflows/product/workflows/update-products.js +148 -10
  212. package/.medusa/server/src/workflows/product-attribute/events.d.ts +19 -0
  213. package/.medusa/server/src/workflows/product-attribute/events.js +23 -0
  214. package/.medusa/server/src/workflows/{subscription → product-attribute}/index.d.ts +1 -0
  215. package/.medusa/server/src/workflows/{subscription → product-attribute}/index.js +2 -1
  216. package/.medusa/server/src/workflows/product-attribute/steps/create-product-attribute-values.d.ts +37 -0
  217. package/.medusa/server/src/workflows/product-attribute/steps/create-product-attribute-values.js +18 -0
  218. package/.medusa/server/src/workflows/product-attribute/steps/create-product-attributes.d.ts +44 -0
  219. package/.medusa/server/src/workflows/product-attribute/steps/create-product-attributes.js +18 -0
  220. package/.medusa/server/src/workflows/{product → product-attribute}/steps/delete-product-attribute-values.d.ts +1 -0
  221. package/.medusa/server/src/workflows/product-attribute/steps/delete-product-attribute-values.js +18 -0
  222. package/.medusa/server/src/workflows/{product → product-attribute}/steps/delete-product-attributes.d.ts +1 -0
  223. package/.medusa/server/src/workflows/product-attribute/steps/delete-product-attributes.js +18 -0
  224. package/.medusa/server/src/workflows/product-attribute/steps/index.d.ts +10 -0
  225. package/.medusa/server/src/workflows/product-attribute/steps/index.js +27 -0
  226. package/.medusa/server/src/workflows/product-attribute/steps/update-product-attribute-values.d.ts +38 -0
  227. package/.medusa/server/src/workflows/product-attribute/steps/update-product-attribute-values.js +23 -0
  228. package/.medusa/server/src/workflows/product-attribute/steps/update-product-attributes.d.ts +38 -0
  229. package/.medusa/server/src/workflows/{product → product-attribute}/steps/update-product-attributes.js +7 -6
  230. package/.medusa/server/src/workflows/product-attribute/steps/upsert-product-attribute-values.d.ts +43 -0
  231. package/.medusa/server/src/workflows/product-attribute/steps/upsert-product-attribute-values.js +51 -0
  232. package/.medusa/server/src/workflows/product-attribute/steps/upsert-product-options-for-axis.d.ts +7 -0
  233. package/.medusa/server/src/workflows/product-attribute/steps/upsert-product-options-for-axis.js +59 -0
  234. package/.medusa/server/src/workflows/product-attribute/steps/validate-attribute-accepts-values.d.ts +6 -0
  235. package/.medusa/server/src/workflows/product-attribute/steps/validate-attribute-accepts-values.js +20 -0
  236. package/.medusa/server/src/workflows/product-attribute/steps/validate-product-attribute-input.d.ts +7 -0
  237. package/.medusa/server/src/workflows/product-attribute/steps/validate-product-attribute-input.js +20 -0
  238. package/.medusa/server/src/workflows/product-attribute/workflows/add-product-attribute.d.ts +52 -0
  239. package/.medusa/server/src/workflows/product-attribute/workflows/add-product-attribute.js +120 -0
  240. package/.medusa/server/src/workflows/product-attribute/workflows/batch-product-attribute-values.d.ts +23 -0
  241. package/.medusa/server/src/workflows/product-attribute/workflows/batch-product-attribute-values.js +252 -0
  242. package/.medusa/server/src/workflows/product-attribute/workflows/create-product-attribute-values.d.ts +18 -0
  243. package/.medusa/server/src/workflows/product-attribute/workflows/create-product-attribute-values.js +26 -0
  244. package/.medusa/server/src/workflows/product-attribute/workflows/create-product-attributes.d.ts +19 -0
  245. package/.medusa/server/src/workflows/product-attribute/workflows/create-product-attributes.js +64 -0
  246. package/.medusa/server/src/workflows/product-attribute/workflows/delete-product-attribute-values.d.ts +16 -0
  247. package/.medusa/server/src/workflows/product-attribute/workflows/delete-product-attribute-values.js +40 -0
  248. package/.medusa/server/src/workflows/product-attribute/workflows/delete-product-attributes.d.ts +23 -0
  249. package/.medusa/server/src/workflows/product-attribute/workflows/delete-product-attributes.js +31 -0
  250. package/.medusa/server/src/workflows/product-attribute/workflows/detach-product-attribute.d.ts +17 -0
  251. package/.medusa/server/src/workflows/product-attribute/workflows/detach-product-attribute.js +62 -0
  252. package/.medusa/server/src/workflows/product-attribute/workflows/index.d.ts +12 -0
  253. package/.medusa/server/src/workflows/product-attribute/workflows/index.js +29 -0
  254. package/.medusa/server/src/workflows/product-attribute/workflows/materialize-product-attributes.d.ts +135 -0
  255. package/.medusa/server/src/workflows/product-attribute/workflows/materialize-product-attributes.js +43 -0
  256. package/.medusa/server/src/workflows/product-attribute/workflows/sync-product-attribute-options.d.ts +24 -0
  257. package/.medusa/server/src/workflows/product-attribute/workflows/sync-product-attribute-options.js +27 -0
  258. package/.medusa/server/src/workflows/product-attribute/workflows/update-product-attribute-values.d.ts +18 -0
  259. package/.medusa/server/src/workflows/product-attribute/workflows/update-product-attribute-values.js +27 -0
  260. package/.medusa/server/src/workflows/product-attribute/workflows/update-product-attributes.d.ts +18 -0
  261. package/.medusa/server/src/workflows/product-attribute/workflows/update-product-attributes.js +27 -0
  262. package/.medusa/server/src/workflows/product-attribute/workflows/upsert-product-attribute-values.d.ts +18 -0
  263. package/.medusa/server/src/workflows/product-attribute/workflows/upsert-product-attribute-values.js +26 -0
  264. package/.medusa/server/src/workflows/product-edit/events.d.ts +13 -0
  265. package/.medusa/server/src/workflows/product-edit/events.js +17 -0
  266. package/.medusa/server/src/workflows/product-edit/index.d.ts +1 -0
  267. package/.medusa/server/src/workflows/product-edit/index.js +2 -1
  268. package/.medusa/server/src/workflows/product-edit/steps/add-product-change-action.d.ts +38 -0
  269. package/.medusa/server/src/workflows/product-edit/steps/add-product-change-action.js +18 -0
  270. package/.medusa/server/src/workflows/product-edit/steps/cancel-product-change.d.ts +38 -2
  271. package/.medusa/server/src/workflows/product-edit/steps/cancel-product-change.js +28 -10
  272. package/.medusa/server/src/workflows/product-edit/steps/confirm-product-change-validation.d.ts +15 -0
  273. package/.medusa/server/src/workflows/product-edit/steps/confirm-product-change-validation.js +25 -0
  274. package/.medusa/server/src/workflows/product-edit/steps/confirm-product-changes.d.ts +46 -3
  275. package/.medusa/server/src/workflows/product-edit/steps/confirm-product-changes.js +44 -7
  276. package/.medusa/server/src/workflows/product-edit/steps/create-product-change-actions.d.ts +41 -14
  277. package/.medusa/server/src/workflows/product-edit/steps/create-product-change-actions.js +20 -11
  278. package/.medusa/server/src/workflows/product-edit/steps/create-product-changes.d.ts +46 -16
  279. package/.medusa/server/src/workflows/product-edit/steps/create-product-changes.js +11 -18
  280. package/.medusa/server/src/workflows/product-edit/steps/decline-product-change.d.ts +44 -3
  281. package/.medusa/server/src/workflows/product-edit/steps/decline-product-change.js +37 -10
  282. package/.medusa/server/src/workflows/product-edit/steps/index.d.ts +5 -3
  283. package/.medusa/server/src/workflows/product-edit/steps/index.js +6 -4
  284. package/.medusa/server/src/workflows/product-edit/steps/update-product-change-actions.d.ts +49 -0
  285. package/.medusa/server/src/workflows/product-edit/steps/update-product-change-actions.js +34 -0
  286. package/.medusa/server/src/workflows/product-edit/steps/validate-no-pending-product-change.d.ts +7 -7
  287. package/.medusa/server/src/workflows/product-edit/steps/validate-no-pending-product-change.js +29 -13
  288. package/.medusa/server/src/workflows/product-edit/steps/validate-product-change-is-pending.d.ts +10 -0
  289. package/.medusa/server/src/workflows/product-edit/steps/validate-product-change-is-pending.js +14 -0
  290. package/.medusa/server/src/workflows/product-edit/workflows/apply-product-attribute-change-actions.d.ts +23 -0
  291. package/.medusa/server/src/workflows/product-edit/workflows/apply-product-attribute-change-actions.js +139 -0
  292. package/.medusa/server/src/workflows/product-edit/workflows/apply-product-change-actions.d.ts +38 -0
  293. package/.medusa/server/src/workflows/product-edit/workflows/apply-product-change-actions.js +191 -0
  294. package/.medusa/server/src/workflows/product-edit/workflows/auto-confirm-product-change.d.ts +14 -13
  295. package/.medusa/server/src/workflows/product-edit/workflows/auto-confirm-product-change.js +14 -22
  296. package/.medusa/server/src/workflows/product-edit/workflows/cancel-product-change.d.ts +17 -0
  297. package/.medusa/server/src/workflows/product-edit/workflows/cancel-product-change.js +35 -0
  298. package/.medusa/server/src/workflows/product-edit/workflows/confirm-product-change.d.ts +30 -0
  299. package/.medusa/server/src/workflows/product-edit/workflows/confirm-product-change.js +55 -0
  300. package/.medusa/server/src/workflows/product-edit/workflows/create-product-change.d.ts +17 -0
  301. package/.medusa/server/src/workflows/product-edit/workflows/create-product-change.js +26 -0
  302. package/.medusa/server/src/workflows/product-edit/workflows/index.d.ts +10 -8
  303. package/.medusa/server/src/workflows/product-edit/workflows/index.js +11 -9
  304. package/.medusa/server/src/workflows/product-edit/workflows/product-edit-delete-product.d.ts +14 -17
  305. package/.medusa/server/src/workflows/product-edit/workflows/product-edit-delete-product.js +21 -46
  306. package/.medusa/server/src/workflows/product-edit/workflows/product-edit-update-attributes.d.ts +55 -0
  307. package/.medusa/server/src/workflows/product-edit/workflows/product-edit-update-attributes.js +198 -0
  308. package/.medusa/server/src/workflows/product-edit/workflows/product-edit-update-fields.d.ts +22 -15
  309. package/.medusa/server/src/workflows/product-edit/workflows/product-edit-update-fields.js +126 -50
  310. package/.medusa/server/src/workflows/product-edit/workflows/product-edit-update-variants.d.ts +35 -0
  311. package/.medusa/server/src/workflows/product-edit/workflows/product-edit-update-variants.js +108 -0
  312. package/.medusa/server/src/workflows/product-edit/workflows/record-product-audit-change.d.ts +36 -0
  313. package/.medusa/server/src/workflows/product-edit/workflows/record-product-audit-change.js +53 -0
  314. package/.medusa/server/src/workflows/product-edit/workflows/reject-product-change.d.ts +18 -0
  315. package/.medusa/server/src/workflows/product-edit/workflows/reject-product-change.js +36 -0
  316. package/.medusa/server/src/workflows/product-edit/workflows/stage-product-change.d.ts +35 -0
  317. package/.medusa/server/src/workflows/product-edit/workflows/stage-product-change.js +57 -0
  318. package/.medusa/server/src/workflows/seller/workflows/create-sellers.d.ts +20 -2
  319. package/.medusa/server/src/workflows/seller/workflows/create-sellers.js +1 -1
  320. package/.medusa/server/src/workflows/seller/workflows/update-seller-address.d.ts +14 -2
  321. package/.medusa/server/src/workflows/seller/workflows/update-seller-address.js +1 -1
  322. package/.medusa/server/src/workflows/seller/workflows/update-seller-payment-details.d.ts +14 -2
  323. package/.medusa/server/src/workflows/seller/workflows/update-seller-payment-details.js +1 -1
  324. package/.medusa/server/src/workflows/seller/workflows/update-seller-professional-details.d.ts +14 -2
  325. package/.medusa/server/src/workflows/seller/workflows/update-seller-professional-details.js +1 -1
  326. package/.medusa/server/src/workflows/seller/workflows/update-seller.d.ts +14 -2
  327. package/.medusa/server/src/workflows/seller/workflows/update-seller.js +1 -1
  328. package/package.json +3 -3
  329. package/.medusa/server/src/api/admin/product-brands/[id]/route.d.ts +0 -7
  330. package/.medusa/server/src/api/admin/product-brands/[id]/route.js +0 -51
  331. package/.medusa/server/src/api/admin/product-brands/[id]/sellers/route.d.ts +0 -3
  332. package/.medusa/server/src/api/admin/product-brands/[id]/sellers/route.js +0 -20
  333. package/.medusa/server/src/api/admin/product-brands/middlewares.d.ts +0 -2
  334. package/.medusa/server/src/api/admin/product-brands/middlewares.js +0 -49
  335. package/.medusa/server/src/api/admin/product-brands/query-config.d.ts +0 -12
  336. package/.medusa/server/src/api/admin/product-brands/query-config.js +0 -24
  337. package/.medusa/server/src/api/admin/product-brands/route.d.ts +0 -6
  338. package/.medusa/server/src/api/admin/product-brands/route.js +0 -38
  339. package/.medusa/server/src/api/admin/product-brands/validators.d.ts +0 -284
  340. package/.medusa/server/src/api/admin/product-brands/validators.js +0 -41
  341. package/.medusa/server/src/api/admin/products/batch/route.d.ts +0 -4
  342. package/.medusa/server/src/api/admin/products/batch/route.js +0 -36
  343. package/.medusa/server/src/api/admin/subscription-plans/[id]/overrides/[override_id]/route.d.ts +0 -6
  344. package/.medusa/server/src/api/admin/subscription-plans/[id]/overrides/[override_id]/route.js +0 -43
  345. package/.medusa/server/src/api/admin/subscription-plans/[id]/overrides/route.d.ts +0 -4
  346. package/.medusa/server/src/api/admin/subscription-plans/[id]/overrides/route.js +0 -24
  347. package/.medusa/server/src/api/admin/subscription-plans/[id]/route.d.ts +0 -6
  348. package/.medusa/server/src/api/admin/subscription-plans/[id]/route.js +0 -43
  349. package/.medusa/server/src/api/admin/subscription-plans/middlewares.d.ts +0 -2
  350. package/.medusa/server/src/api/admin/subscription-plans/middlewares.js +0 -81
  351. package/.medusa/server/src/api/admin/subscription-plans/query-config.d.ts +0 -17
  352. package/.medusa/server/src/api/admin/subscription-plans/query-config.js +0 -43
  353. package/.medusa/server/src/api/admin/subscription-plans/route.d.ts +0 -5
  354. package/.medusa/server/src/api/admin/subscription-plans/route.js +0 -35
  355. package/.medusa/server/src/api/admin/subscription-plans/validators.d.ts +0 -117
  356. package/.medusa/server/src/api/admin/subscription-plans/validators.js +0 -42
  357. package/.medusa/server/src/api/store/product-brands/[id]/route.d.ts +0 -2
  358. package/.medusa/server/src/api/store/product-brands/[id]/route.js +0 -18
  359. package/.medusa/server/src/api/store/product-brands/middlewares.d.ts +0 -2
  360. package/.medusa/server/src/api/store/product-brands/middlewares.js +0 -23
  361. package/.medusa/server/src/api/store/product-brands/query-config.d.ts +0 -12
  362. package/.medusa/server/src/api/store/product-brands/query-config.js +0 -23
  363. package/.medusa/server/src/api/store/product-brands/route.d.ts +0 -2
  364. package/.medusa/server/src/api/store/product-brands/route.js +0 -21
  365. package/.medusa/server/src/api/store/product-brands/validators.d.ts +0 -215
  366. package/.medusa/server/src/api/store/product-brands/validators.js +0 -21
  367. package/.medusa/server/src/api/utils/wrap-variants-with-offers-inventory.d.ts +0 -12
  368. package/.medusa/server/src/api/utils/wrap-variants-with-offers-inventory.js +0 -165
  369. package/.medusa/server/src/api/utils/wrap-variants-with-offers-prices.d.ts +0 -12
  370. package/.medusa/server/src/api/utils/wrap-variants-with-offers-prices.js +0 -64
  371. package/.medusa/server/src/api/vendor/product-brands/[id]/route.d.ts +0 -3
  372. package/.medusa/server/src/api/vendor/product-brands/[id]/route.js +0 -18
  373. package/.medusa/server/src/api/vendor/product-brands/middlewares.d.ts +0 -2
  374. package/.medusa/server/src/api/vendor/product-brands/middlewares.js +0 -23
  375. package/.medusa/server/src/api/vendor/product-brands/query-config.d.ts +0 -12
  376. package/.medusa/server/src/api/vendor/product-brands/query-config.js +0 -24
  377. package/.medusa/server/src/api/vendor/product-brands/route.d.ts +0 -3
  378. package/.medusa/server/src/api/vendor/product-brands/route.js +0 -21
  379. package/.medusa/server/src/api/vendor/product-brands/validators.d.ts +0 -221
  380. package/.medusa/server/src/api/vendor/product-brands/validators.js +0 -22
  381. package/.medusa/server/src/api/vendor/subscription/middlewares.d.ts +0 -2
  382. package/.medusa/server/src/api/vendor/subscription/middlewares.js +0 -28
  383. package/.medusa/server/src/api/vendor/subscription/route.d.ts +0 -3
  384. package/.medusa/server/src/api/vendor/subscription/route.js +0 -31
  385. package/.medusa/server/src/links/brand-seller-link.js +0 -16
  386. package/.medusa/server/src/links/offer-price-set-link.js +0 -15
  387. package/.medusa/server/src/modules/product/index.d.ts +0 -7
  388. package/.medusa/server/src/modules/product/index.js +0 -14
  389. package/.medusa/server/src/modules/product/migrations/Migration20260414141012.js +0 -169
  390. package/.medusa/server/src/modules/product/migrations/Migration20260415151424.js +0 -14
  391. package/.medusa/server/src/modules/product/migrations/Migration20260416104248.js +0 -14
  392. package/.medusa/server/src/modules/product/migrations/Migration20260416105443.d.ts +0 -5
  393. package/.medusa/server/src/modules/product/migrations/Migration20260416105443.js +0 -16
  394. package/.medusa/server/src/modules/product/migrations/Migration20260421093258.d.ts +0 -5
  395. package/.medusa/server/src/modules/product/migrations/Migration20260421093258.js +0 -22
  396. package/.medusa/server/src/modules/product/migrations/Migration20260422105949.d.ts +0 -5
  397. package/.medusa/server/src/modules/product/migrations/Migration20260422105949.js +0 -32
  398. package/.medusa/server/src/modules/product/migrations/Migration20260422112250.d.ts +0 -5
  399. package/.medusa/server/src/modules/product/migrations/Migration20260422112250.js +0 -16
  400. package/.medusa/server/src/modules/product/migrations/Migration20260424120000.d.ts +0 -5
  401. package/.medusa/server/src/modules/product/migrations/Migration20260424120000.js +0 -16
  402. package/.medusa/server/src/modules/product/migrations/Migration20260427140959.d.ts +0 -5
  403. package/.medusa/server/src/modules/product/migrations/Migration20260427140959.js +0 -20
  404. package/.medusa/server/src/modules/product/migrations/Migration20260427141021.d.ts +0 -5
  405. package/.medusa/server/src/modules/product/migrations/Migration20260427141021.js +0 -16
  406. package/.medusa/server/src/modules/product/migrations/Migration20260428115720.d.ts +0 -5
  407. package/.medusa/server/src/modules/product/migrations/Migration20260428115720.js +0 -16
  408. package/.medusa/server/src/modules/product/migrations/Migration20260430143600.d.ts +0 -5
  409. package/.medusa/server/src/modules/product/migrations/Migration20260430143600.js +0 -15
  410. package/.medusa/server/src/modules/product/migrations/Migration20260430144500.d.ts +0 -5
  411. package/.medusa/server/src/modules/product/migrations/Migration20260430144500.js +0 -23
  412. package/.medusa/server/src/modules/product/migrations/Migration20260430150000.d.ts +0 -5
  413. package/.medusa/server/src/modules/product/migrations/Migration20260430150000.js +0 -14
  414. package/.medusa/server/src/modules/product/migrations/Migration20260520120000.d.ts +0 -5
  415. package/.medusa/server/src/modules/product/migrations/Migration20260520120000.js +0 -16
  416. package/.medusa/server/src/modules/product/models/index.d.ts +0 -13
  417. package/.medusa/server/src/modules/product/models/index.js +0 -33
  418. package/.medusa/server/src/modules/product/models/product-attribute-value.d.ts +0 -1698
  419. package/.medusa/server/src/modules/product/models/product-attribute-value.js +0 -38
  420. package/.medusa/server/src/modules/product/models/product-attribute.d.ts +0 -1627
  421. package/.medusa/server/src/modules/product/models/product-attribute.js +0 -57
  422. package/.medusa/server/src/modules/product/models/product-brand.d.ts +0 -551
  423. package/.medusa/server/src/modules/product/models/product-brand.js +0 -34
  424. package/.medusa/server/src/modules/product/models/product-category.d.ts +0 -1692
  425. package/.medusa/server/src/modules/product/models/product-category.js +0 -55
  426. package/.medusa/server/src/modules/product/models/product-change-action.d.ts +0 -1105
  427. package/.medusa/server/src/modules/product/models/product-change.d.ts +0 -559
  428. package/.medusa/server/src/modules/product/models/product-change.js +0 -50
  429. package/.medusa/server/src/modules/product/models/product-collection.d.ts +0 -552
  430. package/.medusa/server/src/modules/product/models/product-collection.js +0 -27
  431. package/.medusa/server/src/modules/product/models/product-image.d.ts +0 -1745
  432. package/.medusa/server/src/modules/product/models/product-image.js +0 -51
  433. package/.medusa/server/src/modules/product/models/product-tag.d.ts +0 -561
  434. package/.medusa/server/src/modules/product/models/product-tag.js +0 -26
  435. package/.medusa/server/src/modules/product/models/product-type.d.ts +0 -553
  436. package/.medusa/server/src/modules/product/models/product-type.js +0 -26
  437. package/.medusa/server/src/modules/product/models/product-variant-product-image.d.ts +0 -3366
  438. package/.medusa/server/src/modules/product/models/product-variant-product-image.js +0 -19
  439. package/.medusa/server/src/modules/product/models/product-variant.d.ts +0 -1619
  440. package/.medusa/server/src/modules/product/models/product-variant.js +0 -87
  441. package/.medusa/server/src/modules/product/models/product.d.ts +0 -559
  442. package/.medusa/server/src/modules/product/models/product.js +0 -137
  443. package/.medusa/server/src/modules/product/repositories/product-category.d.ts +0 -53
  444. package/.medusa/server/src/modules/product/repositories/product-category.js +0 -381
  445. package/.medusa/server/src/modules/product/service.d.ts +0 -11209
  446. package/.medusa/server/src/modules/product/service.js +0 -1471
  447. package/.medusa/server/src/modules/product/services/product-category.d.ts +0 -37
  448. package/.medusa/server/src/modules/product/services/product-category.js +0 -166
  449. package/.medusa/server/src/modules/subscription/index.d.ts +0 -35
  450. package/.medusa/server/src/modules/subscription/migrations/Migration20260324135903.d.ts +0 -5
  451. package/.medusa/server/src/modules/subscription/migrations/Migration20260324135903.js +0 -24
  452. package/.medusa/server/src/modules/subscription/models/index.d.ts +0 -2
  453. package/.medusa/server/src/modules/subscription/models/index.js +0 -11
  454. package/.medusa/server/src/modules/subscription/models/subscription-override.d.ts +0 -20
  455. package/.medusa/server/src/modules/subscription/models/subscription-override.js +0 -36
  456. package/.medusa/server/src/modules/subscription/models/subscription-plan.d.ts +0 -20
  457. package/.medusa/server/src/modules/subscription/models/subscription-plan.js +0 -32
  458. package/.medusa/server/src/modules/subscription/service.d.ts +0 -49
  459. package/.medusa/server/src/modules/subscription/service.js +0 -17
  460. package/.medusa/server/src/workflows/cart/hooks/validate-add-to-cart-stock.js +0 -52
  461. package/.medusa/server/src/workflows/cart/hooks/validate-update-line-item-stock.js +0 -60
  462. package/.medusa/server/src/workflows/cart/steps/calculate-offer-prices.d.ts +0 -19
  463. package/.medusa/server/src/workflows/cart/steps/calculate-offer-prices.js +0 -39
  464. package/.medusa/server/src/workflows/cart/steps/decorate-line-item-with-offer.d.ts +0 -8
  465. package/.medusa/server/src/workflows/cart/steps/decorate-line-item-with-offer.js +0 -45
  466. package/.medusa/server/src/workflows/cart/steps/get-line-item-actions.d.ts +0 -21
  467. package/.medusa/server/src/workflows/cart/steps/get-line-item-actions.js +0 -85
  468. package/.medusa/server/src/workflows/cart/workflows/add-to-cart.d.ts +0 -12
  469. package/.medusa/server/src/workflows/cart/workflows/add-to-cart.js +0 -235
  470. package/.medusa/server/src/workflows/cart/workflows/update-line-item-in-cart.d.ts +0 -16
  471. package/.medusa/server/src/workflows/cart/workflows/update-line-item-in-cart.js +0 -87
  472. package/.medusa/server/src/workflows/product/steps/associate-sellers-with-product-brand.d.ts +0 -8
  473. package/.medusa/server/src/workflows/product/steps/associate-sellers-with-product-brand.js +0 -26
  474. package/.medusa/server/src/workflows/product/steps/batch-link-products-in-category.d.ts +0 -7
  475. package/.medusa/server/src/workflows/product/steps/batch-link-products-in-category.js +0 -61
  476. package/.medusa/server/src/workflows/product/steps/batch-product-attributes.d.ts +0 -11
  477. package/.medusa/server/src/workflows/product/steps/batch-product-attributes.js +0 -16
  478. package/.medusa/server/src/workflows/product/steps/create-product-attribute-values.d.ts +0 -6
  479. package/.medusa/server/src/workflows/product/steps/create-product-attribute-values.js +0 -17
  480. package/.medusa/server/src/workflows/product/steps/create-product-attributes.d.ts +0 -2
  481. package/.medusa/server/src/workflows/product/steps/create-product-attributes.js +0 -17
  482. package/.medusa/server/src/workflows/product/steps/create-product-brands.d.ts +0 -2
  483. package/.medusa/server/src/workflows/product/steps/create-product-brands.js +0 -17
  484. package/.medusa/server/src/workflows/product/steps/create-product-categories.d.ts +0 -1576
  485. package/.medusa/server/src/workflows/product/steps/create-product-categories.js +0 -18
  486. package/.medusa/server/src/workflows/product/steps/create-product-variants.d.ts +0 -2
  487. package/.medusa/server/src/workflows/product/steps/create-product-variants.js +0 -18
  488. package/.medusa/server/src/workflows/product/steps/create-products.d.ts +0 -2
  489. package/.medusa/server/src/workflows/product/steps/create-products.js +0 -17
  490. package/.medusa/server/src/workflows/product/steps/delete-product-attribute-values.js +0 -17
  491. package/.medusa/server/src/workflows/product/steps/delete-product-attributes.js +0 -17
  492. package/.medusa/server/src/workflows/product/steps/delete-product-brands.d.ts +0 -1
  493. package/.medusa/server/src/workflows/product/steps/delete-product-brands.js +0 -17
  494. package/.medusa/server/src/workflows/product/steps/delete-product-categories.d.ts +0 -1
  495. package/.medusa/server/src/workflows/product/steps/delete-product-categories.js +0 -17
  496. package/.medusa/server/src/workflows/product/steps/delete-product-variants.d.ts +0 -1
  497. package/.medusa/server/src/workflows/product/steps/delete-product-variants.js +0 -17
  498. package/.medusa/server/src/workflows/product/steps/delete-products.d.ts +0 -1
  499. package/.medusa/server/src/workflows/product/steps/delete-products.js +0 -17
  500. package/.medusa/server/src/workflows/product/steps/detach-sellers-from-product-brand.d.ts +0 -8
  501. package/.medusa/server/src/workflows/product/steps/detach-sellers-from-product-brand.js +0 -26
  502. package/.medusa/server/src/workflows/product/steps/remove-attribute-from-product.d.ts +0 -6
  503. package/.medusa/server/src/workflows/product/steps/remove-attribute-from-product.js +0 -11
  504. package/.medusa/server/src/workflows/product/steps/update-product-attribute-values.d.ts +0 -7
  505. package/.medusa/server/src/workflows/product/steps/update-product-attribute-values.js +0 -22
  506. package/.medusa/server/src/workflows/product/steps/update-product-attributes.d.ts +0 -7
  507. package/.medusa/server/src/workflows/product/steps/update-product-brands.d.ts +0 -7
  508. package/.medusa/server/src/workflows/product/steps/update-product-brands.js +0 -28
  509. package/.medusa/server/src/workflows/product/steps/update-product-categories.d.ts +0 -1580
  510. package/.medusa/server/src/workflows/product/steps/update-product-categories.js +0 -20
  511. package/.medusa/server/src/workflows/product/steps/update-product-variants.d.ts +0 -10
  512. package/.medusa/server/src/workflows/product/steps/update-product-variants.js +0 -32
  513. package/.medusa/server/src/workflows/product/steps/update-products.d.ts +0 -10
  514. package/.medusa/server/src/workflows/product/steps/update-products.js +0 -33
  515. package/.medusa/server/src/workflows/product/steps/upsert-product-attribute-values.d.ts +0 -5
  516. package/.medusa/server/src/workflows/product/steps/upsert-product-attribute-values.js +0 -30
  517. package/.medusa/server/src/workflows/product/steps/validate-attribute-accepts-values.d.ts +0 -5
  518. package/.medusa/server/src/workflows/product/steps/validate-attribute-accepts-values.js +0 -19
  519. package/.medusa/server/src/workflows/product/steps/validate-confirm-products.d.ts +0 -3
  520. package/.medusa/server/src/workflows/product/steps/validate-confirm-products.js +0 -14
  521. package/.medusa/server/src/workflows/product/steps/validate-delete-product-attribute-values.d.ts +0 -5
  522. package/.medusa/server/src/workflows/product/steps/validate-delete-product-attribute-values.js +0 -19
  523. package/.medusa/server/src/workflows/product/steps/validate-delete-product-attributes.d.ts +0 -5
  524. package/.medusa/server/src/workflows/product/steps/validate-delete-product-attributes.js +0 -30
  525. package/.medusa/server/src/workflows/product/steps/validate-reject-product.d.ts +0 -3
  526. package/.medusa/server/src/workflows/product/steps/validate-reject-product.js +0 -12
  527. package/.medusa/server/src/workflows/product/steps/validate-request-changes.d.ts +0 -3
  528. package/.medusa/server/src/workflows/product/steps/validate-request-changes.js +0 -12
  529. package/.medusa/server/src/workflows/product/steps/validate-resubmit-product.d.ts +0 -3
  530. package/.medusa/server/src/workflows/product/steps/validate-resubmit-product.js +0 -12
  531. package/.medusa/server/src/workflows/product/workflows/batch-link-products-in-category.d.ts +0 -8
  532. package/.medusa/server/src/workflows/product/workflows/batch-link-products-in-category.js +0 -10
  533. package/.medusa/server/src/workflows/product/workflows/batch-product-attributes.d.ts +0 -12
  534. package/.medusa/server/src/workflows/product/workflows/batch-product-attributes.js +0 -23
  535. package/.medusa/server/src/workflows/product/workflows/batch-products.d.ts +0 -3
  536. package/.medusa/server/src/workflows/product/workflows/batch-products.js +0 -86
  537. package/.medusa/server/src/workflows/product/workflows/create-product-attribute-values.d.ts +0 -8
  538. package/.medusa/server/src/workflows/product/workflows/create-product-attribute-values.js +0 -21
  539. package/.medusa/server/src/workflows/product/workflows/create-product-attributes.d.ts +0 -7
  540. package/.medusa/server/src/workflows/product/workflows/create-product-attributes.js +0 -18
  541. package/.medusa/server/src/workflows/product/workflows/create-product-brands.d.ts +0 -7
  542. package/.medusa/server/src/workflows/product/workflows/create-product-brands.js +0 -19
  543. package/.medusa/server/src/workflows/product/workflows/create-product-categories.d.ts +0 -1581
  544. package/.medusa/server/src/workflows/product/workflows/create-product-categories.js +0 -18
  545. package/.medusa/server/src/workflows/product/workflows/create-product-variants.d.ts +0 -3
  546. package/.medusa/server/src/workflows/product/workflows/create-product-variants.js +0 -25
  547. package/.medusa/server/src/workflows/product/workflows/delete-product-attribute-values.d.ts +0 -6
  548. package/.medusa/server/src/workflows/product/workflows/delete-product-attribute-values.js +0 -20
  549. package/.medusa/server/src/workflows/product/workflows/delete-product-attributes.d.ts +0 -6
  550. package/.medusa/server/src/workflows/product/workflows/delete-product-attributes.js +0 -20
  551. package/.medusa/server/src/workflows/product/workflows/delete-product-brands.d.ts +0 -6
  552. package/.medusa/server/src/workflows/product/workflows/delete-product-brands.js +0 -19
  553. package/.medusa/server/src/workflows/product/workflows/delete-product-categories.d.ts +0 -6
  554. package/.medusa/server/src/workflows/product/workflows/delete-product-categories.js +0 -18
  555. package/.medusa/server/src/workflows/product/workflows/delete-product-variants.d.ts +0 -8
  556. package/.medusa/server/src/workflows/product/workflows/delete-product-variants.js +0 -24
  557. package/.medusa/server/src/workflows/product/workflows/delete-products.d.ts +0 -6
  558. package/.medusa/server/src/workflows/product/workflows/delete-products.js +0 -19
  559. package/.medusa/server/src/workflows/product/workflows/link-sellers-to-product-brand.d.ts +0 -14
  560. package/.medusa/server/src/workflows/product/workflows/link-sellers-to-product-brand.js +0 -21
  561. package/.medusa/server/src/workflows/product/workflows/remove-attribute-from-product.d.ts +0 -7
  562. package/.medusa/server/src/workflows/product/workflows/remove-attribute-from-product.js +0 -20
  563. package/.medusa/server/src/workflows/product/workflows/request-product-changes.d.ts +0 -11
  564. package/.medusa/server/src/workflows/product/workflows/request-product-changes.js +0 -61
  565. package/.medusa/server/src/workflows/product/workflows/resubmit-product.d.ts +0 -8
  566. package/.medusa/server/src/workflows/product/workflows/resubmit-product.js +0 -48
  567. package/.medusa/server/src/workflows/product/workflows/submit-seller-products.d.ts +0 -3
  568. package/.medusa/server/src/workflows/product/workflows/submit-seller-products.js +0 -76
  569. package/.medusa/server/src/workflows/product/workflows/update-product-attribute-values.d.ts +0 -8
  570. package/.medusa/server/src/workflows/product/workflows/update-product-attribute-values.js +0 -18
  571. package/.medusa/server/src/workflows/product/workflows/update-product-attributes.d.ts +0 -8
  572. package/.medusa/server/src/workflows/product/workflows/update-product-attributes.js +0 -18
  573. package/.medusa/server/src/workflows/product/workflows/update-product-brands.d.ts +0 -8
  574. package/.medusa/server/src/workflows/product/workflows/update-product-brands.js +0 -19
  575. package/.medusa/server/src/workflows/product/workflows/update-product-categories.d.ts +0 -1583
  576. package/.medusa/server/src/workflows/product/workflows/update-product-categories.js +0 -18
  577. package/.medusa/server/src/workflows/product/workflows/update-product-variants.d.ts +0 -3
  578. package/.medusa/server/src/workflows/product/workflows/update-product-variants.js +0 -36
  579. package/.medusa/server/src/workflows/product/workflows/upsert-product-attribute-values.d.ts +0 -8
  580. package/.medusa/server/src/workflows/product/workflows/upsert-product-attribute-values.js +0 -21
  581. package/.medusa/server/src/workflows/product-edit/steps/retrieve-product-with-change.d.ts +0 -5
  582. package/.medusa/server/src/workflows/product-edit/steps/retrieve-product-with-change.js +0 -11
  583. package/.medusa/server/src/workflows/product-edit/steps/validate-product-change-pending.d.ts +0 -11
  584. package/.medusa/server/src/workflows/product-edit/steps/validate-product-change-pending.js +0 -21
  585. package/.medusa/server/src/workflows/product-edit/workflows/cancel-product-edit.d.ts +0 -19
  586. package/.medusa/server/src/workflows/product-edit/workflows/cancel-product-edit.js +0 -40
  587. package/.medusa/server/src/workflows/product-edit/workflows/confirm-product-edit.d.ts +0 -21
  588. package/.medusa/server/src/workflows/product-edit/workflows/confirm-product-edit.js +0 -44
  589. package/.medusa/server/src/workflows/product-edit/workflows/decline-product-edit.d.ts +0 -16
  590. package/.medusa/server/src/workflows/product-edit/workflows/decline-product-edit.js +0 -42
  591. package/.medusa/server/src/workflows/product-edit/workflows/product-edit-add-attribute.d.ts +0 -19
  592. package/.medusa/server/src/workflows/product-edit/workflows/product-edit-add-attribute.js +0 -66
  593. package/.medusa/server/src/workflows/product-edit/workflows/product-edit-add-variant.d.ts +0 -17
  594. package/.medusa/server/src/workflows/product-edit/workflows/product-edit-add-variant.js +0 -58
  595. package/.medusa/server/src/workflows/product-edit/workflows/product-edit-remove-attribute.d.ts +0 -17
  596. package/.medusa/server/src/workflows/product-edit/workflows/product-edit-remove-attribute.js +0 -62
  597. package/.medusa/server/src/workflows/product-edit/workflows/product-edit-remove-variant.d.ts +0 -16
  598. package/.medusa/server/src/workflows/product-edit/workflows/product-edit-remove-variant.js +0 -68
  599. package/.medusa/server/src/workflows/product-edit/workflows/product-edit-update-variant.d.ts +0 -21
  600. package/.medusa/server/src/workflows/product-edit/workflows/product-edit-update-variant.js +0 -89
  601. package/.medusa/server/src/workflows/subscription/steps/create-subscription-overrides.d.ts +0 -31
  602. package/.medusa/server/src/workflows/subscription/steps/create-subscription-overrides.js +0 -17
  603. package/.medusa/server/src/workflows/subscription/steps/create-subscription-plans.d.ts +0 -31
  604. package/.medusa/server/src/workflows/subscription/steps/create-subscription-plans.js +0 -17
  605. package/.medusa/server/src/workflows/subscription/steps/delete-subscription-overrides.d.ts +0 -2
  606. package/.medusa/server/src/workflows/subscription/steps/delete-subscription-overrides.js +0 -17
  607. package/.medusa/server/src/workflows/subscription/steps/delete-subscription-plans.d.ts +0 -2
  608. package/.medusa/server/src/workflows/subscription/steps/delete-subscription-plans.js +0 -17
  609. package/.medusa/server/src/workflows/subscription/steps/index.d.ts +0 -6
  610. package/.medusa/server/src/workflows/subscription/steps/index.js +0 -23
  611. package/.medusa/server/src/workflows/subscription/steps/update-subscription-overrides.d.ts +0 -31
  612. package/.medusa/server/src/workflows/subscription/steps/update-subscription-overrides.js +0 -17
  613. package/.medusa/server/src/workflows/subscription/steps/update-subscription-plans.d.ts +0 -31
  614. package/.medusa/server/src/workflows/subscription/steps/update-subscription-plans.js +0 -17
  615. package/.medusa/server/src/workflows/subscription/workflows/create-subscription-overrides.d.ts +0 -31
  616. package/.medusa/server/src/workflows/subscription/workflows/create-subscription-overrides.js +0 -11
  617. package/.medusa/server/src/workflows/subscription/workflows/create-subscription-plans.d.ts +0 -31
  618. package/.medusa/server/src/workflows/subscription/workflows/create-subscription-plans.js +0 -11
  619. package/.medusa/server/src/workflows/subscription/workflows/delete-subscription-overrides.d.ts +0 -5
  620. package/.medusa/server/src/workflows/subscription/workflows/delete-subscription-overrides.js +0 -11
  621. package/.medusa/server/src/workflows/subscription/workflows/delete-subscription-plans.d.ts +0 -5
  622. package/.medusa/server/src/workflows/subscription/workflows/delete-subscription-plans.js +0 -11
  623. package/.medusa/server/src/workflows/subscription/workflows/index.d.ts +0 -6
  624. package/.medusa/server/src/workflows/subscription/workflows/index.js +0 -23
  625. package/.medusa/server/src/workflows/subscription/workflows/update-subscription-overrides.d.ts +0 -31
  626. package/.medusa/server/src/workflows/subscription/workflows/update-subscription-overrides.js +0 -11
  627. package/.medusa/server/src/workflows/subscription/workflows/update-subscription-plans.d.ts +0 -31
  628. package/.medusa/server/src/workflows/subscription/workflows/update-subscription-plans.js +0 -11
  629. package/.medusa/server/src/workflows/utils/override-workflow.d.ts +0 -12
  630. package/.medusa/server/src/workflows/utils/override-workflow.js +0 -21
  631. /package/.medusa/server/src/links/{brand-seller-link.d.ts → offer-price-link.d.ts} +0 -0
  632. /package/.medusa/server/src/links/{offer-price-set-link.d.ts → product-variant-attribute-link.d.ts} +0 -0
  633. /package/.medusa/server/src/workflows/cart/hooks/{validate-add-to-cart-stock.d.ts → before-refreshing-payment-collection.d.ts} +0 -0
  634. /package/.medusa/server/src/workflows/cart/hooks/{validate-update-line-item-stock.d.ts → set-pricing-context.d.ts} +0 -0
@@ -1,1471 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var _a, _b;
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- const utils_1 = require("@medusajs/framework/utils");
14
- const types_1 = require("@mercurjs/types");
15
- const models_1 = require("./models");
16
- const ProductModuleServiceBase = (0, utils_1.MedusaService)({
17
- Product: models_1.Product,
18
- ProductAttribute: models_1.ProductAttribute,
19
- ProductAttributeValue: models_1.ProductAttributeValue,
20
- ProductBrand: models_1.ProductBrand,
21
- ProductCategory: models_1.ProductCategory,
22
- ProductChange: models_1.ProductChange,
23
- ProductChangeAction: models_1.ProductChangeAction,
24
- ProductCollection: models_1.ProductCollection,
25
- ProductImage: models_1.ProductImage,
26
- ProductTag: models_1.ProductTag,
27
- ProductType: models_1.ProductType,
28
- ProductVariant: models_1.ProductVariant,
29
- ProductVariantProductImage: models_1.ProductVariantProductImage,
30
- });
31
- class ProductModuleService extends ProductModuleServiceBase {
32
- constructor(container) {
33
- super(...arguments);
34
- this.productCategoryService_ = container.productCategoryService;
35
- }
36
- __joinerConfig() {
37
- return (0, utils_1.defineJoinerConfig)(utils_1.Modules.PRODUCT, {
38
- models: [
39
- models_1.Product,
40
- models_1.ProductAttribute,
41
- models_1.ProductAttributeValue,
42
- models_1.ProductBrand,
43
- models_1.ProductCategory,
44
- models_1.ProductChange,
45
- models_1.ProductChangeAction,
46
- models_1.ProductCollection,
47
- models_1.ProductImage,
48
- models_1.ProductTag,
49
- models_1.ProductType,
50
- models_1.ProductVariant,
51
- models_1.ProductVariantProductImage,
52
- ],
53
- alias: [
54
- {
55
- name: [
56
- "product_variant",
57
- "product_variants",
58
- "variant",
59
- "variants",
60
- ],
61
- entity: "ProductVariant",
62
- args: {
63
- methodSuffix: "ProductVariants",
64
- },
65
- },
66
- ],
67
- });
68
- }
69
- async retrieveProduct(id, config, sharedContext) {
70
- const product = await super.retrieveProduct(id, config, sharedContext);
71
- const productChange = await this.getActiveProductChange_(product.id, true, sharedContext);
72
- product.product_change = productChange;
73
- this.formatProductAttributes_(product);
74
- return product;
75
- }
76
- async listProducts(filters, config, sharedContext) {
77
- const products = await super.listProducts(filters, config, sharedContext);
78
- for (const product of products) {
79
- this.formatProductAttributes_(product);
80
- }
81
- return products;
82
- }
83
- async listAndCountProducts(filters, config, sharedContext) {
84
- const [products, count] = await super.listAndCountProducts(filters, config, sharedContext);
85
- for (const product of products) {
86
- this.formatProductAttributes_(product);
87
- }
88
- return [products, count];
89
- }
90
- /**
91
- * Computes a unified `attributes` array on the product by merging
92
- * variant_attributes, custom_attributes, and attribute_values into
93
- * a single grouped structure with values nested under each attribute.
94
- */
95
- formatProductAttributes_(product) {
96
- const hasAttrData = product.variant_attributes ||
97
- product.custom_attributes ||
98
- product.attribute_values;
99
- if (!hasAttrData)
100
- return;
101
- const attrsById = new Map();
102
- // Add variant_attributes (global or product-scoped, used as variant axes)
103
- for (const attr of product.variant_attributes ?? []) {
104
- attrsById.set(attr.id, { ...attr, values: [...(attr.values ?? [])] });
105
- }
106
- // Add custom_attributes (product-scoped, non-variant)
107
- for (const attr of product.custom_attributes ?? []) {
108
- if (!attrsById.has(attr.id)) {
109
- attrsById.set(attr.id, {
110
- ...attr,
111
- values: [...(attr.values ?? [])],
112
- });
113
- }
114
- }
115
- // Add attributes discovered only via attribute_values
116
- // (global non-variant attributes linked through values)
117
- for (const val of product.attribute_values ?? []) {
118
- if (!val.attribute)
119
- continue;
120
- const attrId = val.attribute.id ?? val.attribute_id;
121
- if (!attrId || attrsById.has(attrId))
122
- continue;
123
- attrsById.set(attrId, { ...val.attribute, values: [] });
124
- }
125
- // Filter each attribute's values to only those linked to this product
126
- const productValueIds = new Set((product.attribute_values ?? []).map((v) => v.id));
127
- for (const attr of attrsById.values()) {
128
- attr.values = (attr.values ?? []).filter((v) => productValueIds.has(v.id));
129
- attr.values.sort((a, b) => (a.rank ?? 0) - (b.rank ?? 0));
130
- }
131
- // Sort attributes by rank
132
- product.attributes = [...attrsById.values()].sort((a, b) => (a.rank ?? 0) - (b.rank ?? 0));
133
- }
134
- async getActiveProductChange_(productId, includeActions, sharedContext) {
135
- const options = {
136
- select: [
137
- "id",
138
- "product_id",
139
- "status",
140
- "internal_note",
141
- "external_note",
142
- "created_by",
143
- "confirmed_by",
144
- "confirmed_at",
145
- "declined_by",
146
- "declined_at",
147
- "declined_reason",
148
- "canceled_by",
149
- "canceled_at",
150
- ],
151
- relations: [],
152
- order: {},
153
- };
154
- if (includeActions) {
155
- options.select.push("actions");
156
- options.relations.push("actions");
157
- options.order = {
158
- actions: {
159
- ordering: "ASC",
160
- },
161
- };
162
- }
163
- const [productChange] = await this.listProductChanges({
164
- product_id: productId,
165
- status: [types_1.ProductChangeStatus.PENDING],
166
- }, options, sharedContext);
167
- return productChange;
168
- }
169
- validateProductHandle_(handle) {
170
- if (handle && !(0, utils_1.isValidHandle)(handle)) {
171
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Invalid product handle '${handle}'. It must contain URL safe characters`);
172
- }
173
- }
174
- validateProductAttributeType_(attr) {
175
- const VARIANT_AXIS_ALLOWED = new Set([
176
- types_1.AttributeType.MULTI_SELECT,
177
- ]);
178
- const FILTERABLE_ALLOWED = new Set([
179
- types_1.AttributeType.SINGLE_SELECT,
180
- types_1.AttributeType.MULTI_SELECT,
181
- types_1.AttributeType.TOGGLE,
182
- types_1.AttributeType.UNIT,
183
- ]);
184
- if (attr.is_variant_axis &&
185
- attr.type &&
186
- !VARIANT_AXIS_ALLOWED.has(attr.type)) {
187
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Attribute '${attr.name ?? attr.id ?? "(unnamed)"}' (type=${attr.type}) cannot be a variant axis. Only multi_select attributes may drive variants.`);
188
- }
189
- if (attr.is_filterable &&
190
- attr.type &&
191
- !FILTERABLE_ALLOWED.has(attr.type)) {
192
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Attribute '${attr.name ?? attr.id ?? "(unnamed)"}' (type=${attr.type}) cannot be filterable. Only single_select, multi_select, toggle, and unit attributes are filterable.`);
193
- }
194
- }
195
- async normalizeProductInput_(products, sharedContext) {
196
- for (const product of products) {
197
- // Handle
198
- this.validateProductHandle_(product.handle);
199
- if (!product.handle && product.title) {
200
- product.handle = (0, utils_1.toHandle)(product.title);
201
- }
202
- // Dimension fields: API accepts numbers, model stores as text
203
- if ("weight" in product) {
204
- product.weight = product.weight?.toString();
205
- }
206
- if ("length" in product) {
207
- product.length = product.length?.toString();
208
- }
209
- if ("height" in product) {
210
- product.height = product.height?.toString();
211
- }
212
- if ("width" in product) {
213
- product.width = product.width?.toString();
214
- }
215
- // M:M refs → plain IDs (Medusa pattern: MikroORM needs IDs, not { id } objects)
216
- if (product.categories?.length) {
217
- product.categories = product.categories.map((c) => (typeof c === "string" ? c : c.id));
218
- }
219
- if (product.tags?.length) {
220
- product.tags = product.tags.map((t) => (typeof t === "string" ? t : t.id));
221
- }
222
- }
223
- // Attribute normalization (variant attrs, product-level attr values, variant attr values)
224
- const hasAttributeInput = products.some((p) => p.variant_attributes !== undefined ||
225
- p.product_attributes !== undefined ||
226
- (Array.isArray(p.variants) &&
227
- p.variants.some((v) => v?.attribute_values !== undefined)));
228
- if (hasAttributeInput) {
229
- await this.normalizeAttributes_(products, sharedContext);
230
- }
231
- return products;
232
- }
233
- /**
234
- * Normalizes product attribute inputs:
235
- *
236
- * **`variant_attributes`** — each entry is either:
237
- * 1. Global attribute ref: `{ attribute_id, value_ids }` → links via M2M
238
- * 2. Inline custom attr: `{ name, type, values }` → creates ProductAttribute + values
239
- *
240
- * **`product_attributes`** — non-variant attributes, same format as variant_attributes.
241
- * Creates product-scoped attributes and links their values to the product.
242
- *
243
- * **`variant.attribute_values`** — `Record<string, string | string[]>`
244
- * keyed by attribute name/handle, resolved to ProductAttributeValue IDs per variant.
245
- */
246
- async normalizeAttributes_(products, sharedContext) {
247
- // Collect all global attribute IDs referenced (from variant_attributes and product attribute_values)
248
- const attrIds = new Set();
249
- for (const product of products) {
250
- for (const input of product.variant_attributes ?? []) {
251
- if (input.attribute_id)
252
- attrIds.add(input.attribute_id);
253
- }
254
- for (const input of product.product_attributes ?? []) {
255
- if (input.attribute_id)
256
- attrIds.add(input.attribute_id);
257
- }
258
- }
259
- // Batch-load referenced global attributes with their values
260
- const attrsById = new Map();
261
- if (attrIds.size) {
262
- const attrs = await super.listProductAttributes({ id: Array.from(attrIds) }, { relations: ["values"] }, sharedContext);
263
- for (const a of attrs) {
264
- attrsById.set(a.id, a);
265
- }
266
- }
267
- // Process each product
268
- for (const product of products) {
269
- // Lookup: attr name/handle/id → value name → ProductAttributeValue id
270
- // Shared across variant_attributes + product attribute_values + variant attribute_values
271
- const valueLookup = new Map();
272
- const variantAttrValueIds = [];
273
- const variantCustomAttributeIds = [];
274
- const productAttrValueIds = [];
275
- const customAttributeIds = [];
276
- // Collect IDs of all inline-created attributes so we can batch-fetch
277
- // their values in a single query after both loops.
278
- const createdInlineAttrIds = [];
279
- // --- Process variant_attributes ---
280
- const attrsInput = product.variant_attributes;
281
- if (attrsInput?.length) {
282
- const variantAttributeIds = [];
283
- for (const input of attrsInput) {
284
- if (input.attribute_id) {
285
- // Global attribute reference
286
- const attr = attrsById.get(input.attribute_id);
287
- if (!attr) {
288
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Product attribute with id '${input.attribute_id}' was not found`);
289
- }
290
- variantAttributeIds.push(attr.id);
291
- // Validate value_ids if provided
292
- const attrValuesById = new Map();
293
- for (const v of attr.values ?? []) {
294
- attrValuesById.set(v.id, v);
295
- }
296
- if (input.value_ids?.length) {
297
- for (const vid of input.value_ids) {
298
- if (!attrValuesById.has(vid)) {
299
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Attribute value with id '${vid}' was not found on attribute '${attr.name}'`);
300
- }
301
- variantAttrValueIds.push(vid);
302
- }
303
- }
304
- // Build lookup
305
- this.addAttrToLookup_(attr, valueLookup);
306
- }
307
- else {
308
- // Inline custom attribute — create ProductAttribute + values
309
- const customAttr = await this.createProductAttributes({
310
- name: input.name,
311
- type: input.type,
312
- handle: input.name ? (0, utils_1.toHandle)(input.name) : undefined,
313
- is_variant_axis: input.is_variant_axis ?? false,
314
- is_filterable: input.is_filterable ?? false,
315
- is_required: input.is_required ?? false,
316
- description: input.description ?? null,
317
- product_id: product.id ?? null,
318
- metadata: input.metadata ?? null,
319
- values: (input.values ?? []).map((v, i) => ({
320
- name: v,
321
- handle: (0, utils_1.toHandle)(v),
322
- rank: i,
323
- })),
324
- }, sharedContext);
325
- variantAttributeIds.push(customAttr.id);
326
- variantCustomAttributeIds.push(customAttr.id);
327
- createdInlineAttrIds.push(customAttr.id);
328
- }
329
- }
330
- // Set M2M variant_attributes as IDs
331
- product.variant_attributes = variantAttributeIds;
332
- }
333
- // --- Process product_attributes (non-variant) ---
334
- const productAttrsInput = product.product_attributes;
335
- if (productAttrsInput?.length) {
336
- for (const input of productAttrsInput) {
337
- if (input.attribute_id) {
338
- // Global attribute reference
339
- const attr = attrsById.get(input.attribute_id);
340
- if (!attr) {
341
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Product attribute with id '${input.attribute_id}' was not found`);
342
- }
343
- this.addAttrToLookup_(attr, valueLookup);
344
- // Collect specified value IDs
345
- if (input.value_ids?.length) {
346
- const attrValuesById = new Map();
347
- for (const v of attr.values ?? []) {
348
- attrValuesById.set(v.id, v);
349
- }
350
- for (const vid of input.value_ids) {
351
- if (!attrValuesById.has(vid)) {
352
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Attribute value with id '${vid}' was not found on attribute '${attr.name}'`);
353
- }
354
- productAttrValueIds.push(vid);
355
- }
356
- }
357
- // Upsert values by name (for text/unit/toggle attributes)
358
- if (input.values?.length) {
359
- const existingByName = new Map();
360
- for (const v of attr.values ?? []) {
361
- existingByName.set(v.name, v.id);
362
- }
363
- const toCreate = [];
364
- for (const name of input.values) {
365
- const existingId = existingByName.get(name);
366
- if (existingId) {
367
- productAttrValueIds.push(existingId);
368
- }
369
- else {
370
- toCreate.push(name);
371
- }
372
- }
373
- if (toCreate.length) {
374
- const created = await this.createProductAttributeValues(toCreate.map((name, i) => ({
375
- name,
376
- handle: (0, utils_1.toHandle)(name),
377
- rank: (attr.values?.length ?? 0) + i,
378
- attribute_id: attr.id,
379
- })), sharedContext);
380
- const createdArr = Array.isArray(created)
381
- ? created
382
- : [created];
383
- for (const v of createdArr) {
384
- productAttrValueIds.push(v.id);
385
- }
386
- }
387
- }
388
- }
389
- else {
390
- // Inline custom attribute — create and collect value IDs
391
- const customAttr = await this.createProductAttributes({
392
- name: input.name,
393
- type: input.type,
394
- handle: input.name ? (0, utils_1.toHandle)(input.name) : undefined,
395
- is_variant_axis: false,
396
- is_filterable: input.is_filterable ?? false,
397
- is_required: input.is_required ?? false,
398
- description: input.description ?? null,
399
- product_id: product.id ?? null,
400
- metadata: input.metadata ?? null,
401
- values: (input.values ?? []).map((v, i) => ({
402
- name: v,
403
- handle: (0, utils_1.toHandle)(v),
404
- rank: i,
405
- })),
406
- }, sharedContext);
407
- customAttributeIds.push(customAttr.id);
408
- createdInlineAttrIds.push(customAttr.id);
409
- }
410
- }
411
- delete product.product_attributes;
412
- }
413
- // Batch-fetch all inline-created attributes with their values in a single query
414
- // instead of calling retrieveProductAttribute inside each loop iteration.
415
- if (createdInlineAttrIds.length) {
416
- const createdAttrs = await super.listProductAttributes({ id: createdInlineAttrIds }, { relations: ["values"] }, sharedContext);
417
- const createdAttrsById = new Map();
418
- for (const a of createdAttrs) {
419
- createdAttrsById.set(a.id, a);
420
- }
421
- // Collect value IDs and build lookups from inline-created attributes
422
- for (const attrId of variantCustomAttributeIds) {
423
- const attr = createdAttrsById.get(attrId);
424
- if (!attr)
425
- continue;
426
- this.addAttrToLookup_(attr, valueLookup);
427
- for (const v of attr.values ?? []) {
428
- variantAttrValueIds.push(v.id);
429
- }
430
- }
431
- for (const attrId of customAttributeIds) {
432
- const attr = createdAttrsById.get(attrId);
433
- if (!attr)
434
- continue;
435
- this.addAttrToLookup_(attr, valueLookup);
436
- for (const v of attr.values ?? []) {
437
- productAttrValueIds.push(v.id);
438
- }
439
- }
440
- }
441
- // Stash custom attribute IDs — product_id will be set after product creation
442
- const allPendingCustomAttrIds = [
443
- ...variantCustomAttributeIds,
444
- ...customAttributeIds,
445
- ];
446
- if (allPendingCustomAttrIds.length) {
447
- product.__pending_custom_attribute_ids = allPendingCustomAttrIds;
448
- }
449
- // Merge variant + product attribute value IDs into attribute_values
450
- const allAttrValueIds = [
451
- ...variantAttrValueIds,
452
- ...productAttrValueIds,
453
- ];
454
- if (allAttrValueIds.length) {
455
- const existing = Array.isArray(product.attribute_values)
456
- ? product.attribute_values
457
- : [];
458
- product.attribute_values = [...existing, ...allAttrValueIds];
459
- }
460
- // --- Resolve variant.attribute_values ---
461
- if (Array.isArray(product.variants)) {
462
- const hasMapValues = product.variants.some((v) => v?.attribute_values !== undefined &&
463
- !Array.isArray(v.attribute_values));
464
- // If variants use map-style attribute_values but no variant_attributes
465
- // were provided in this call, load existing product variant attributes
466
- // to build the lookup for resolution.
467
- if (hasMapValues && valueLookup.size === 0 && product.id) {
468
- const existingProduct = await this.retrieveProduct(product.id, {
469
- select: ["id"],
470
- relations: ["variant_attributes", "variant_attributes.values"],
471
- }, sharedContext);
472
- for (const attr of existingProduct.variant_attributes ??
473
- []) {
474
- this.addAttrToLookup_(attr, valueLookup);
475
- }
476
- }
477
- for (const variant of product.variants) {
478
- if (variant?.attribute_values === undefined)
479
- continue;
480
- if (Array.isArray(variant.attribute_values))
481
- continue;
482
- variant.attribute_values = this.resolveValueMap_(variant.attribute_values, valueLookup);
483
- }
484
- }
485
- }
486
- }
487
- /**
488
- * Resolves map-style `attribute_values` on variants to arrays of
489
- * `ProductAttributeValue` IDs. Variants with `attribute_values` already
490
- * an array of IDs (or undefined) are left untouched.
491
- *
492
- * Looks up each variant's parent product's `variant_attributes` (and their
493
- * values) to translate `{ attrKey: "valueName" }` to value IDs.
494
- */
495
- async normalizeVariantAttributeValues_(variants, sharedContext) {
496
- const mapVariants = variants.filter((v) => v.attribute_values !== undefined &&
497
- !Array.isArray(v.attribute_values) &&
498
- typeof v.attribute_values === "object");
499
- if (!mapVariants.length)
500
- return;
501
- // Resolve missing product_ids by looking up variants by id
502
- const variantIdsNeedingProductId = mapVariants
503
- .filter((v) => !v.product_id && v.id)
504
- .map((v) => v.id);
505
- if (variantIdsNeedingProductId.length) {
506
- const existing = await super.listProductVariants({ id: variantIdsNeedingProductId }, { select: ["id", "product_id"] }, sharedContext);
507
- const variantToProductId = new Map();
508
- for (const v of existing) {
509
- if (v.product_id)
510
- variantToProductId.set(v.id, v.product_id);
511
- }
512
- for (const v of mapVariants) {
513
- if (!v.product_id && v.id) {
514
- v.product_id = variantToProductId.get(v.id);
515
- }
516
- }
517
- }
518
- const productIds = Array.from(new Set(mapVariants.map((v) => v.product_id).filter(Boolean)));
519
- if (!productIds.length)
520
- return;
521
- // Build per-product lookup from variant_attributes + values
522
- const products = await this.listProducts({ id: productIds }, {
523
- select: ["id"],
524
- relations: ["variant_attributes", "variant_attributes.values"],
525
- }, sharedContext);
526
- const productLookups = new Map();
527
- for (const product of products) {
528
- const lookup = new Map();
529
- for (const attr of product.variant_attributes ?? []) {
530
- this.addAttrToLookup_(attr, lookup);
531
- }
532
- productLookups.set(product.id, lookup);
533
- }
534
- for (const variant of mapVariants) {
535
- if (!variant.product_id)
536
- continue;
537
- const lookup = productLookups.get(variant.product_id);
538
- if (!lookup)
539
- continue;
540
- variant.attribute_values = this.resolveValueMap_(variant.attribute_values, lookup);
541
- }
542
- }
543
- /**
544
- * Adds an attribute's values to the lookup map (name/handle/id → value name → value id).
545
- */
546
- addAttrToLookup_(attr, lookup) {
547
- const valueMap = new Map();
548
- for (const v of attr.values ?? []) {
549
- valueMap.set(v.name, v.id);
550
- if (v.handle)
551
- valueMap.set(v.handle, v.id);
552
- }
553
- if (attr.handle)
554
- lookup.set(attr.handle, valueMap);
555
- if (attr.name)
556
- lookup.set(attr.name, valueMap);
557
- lookup.set(attr.id, valueMap);
558
- }
559
- /**
560
- * Resolves `{ attrKey: "valueName" | ["v1", "v2"] }` → array of ProductAttributeValue IDs.
561
- */
562
- resolveValueMap_(input, lookup) {
563
- const resolvedIds = [];
564
- for (const [key, raw] of Object.entries(input)) {
565
- const valueMap = lookup.get(key);
566
- if (!valueMap)
567
- continue;
568
- const vals = Array.isArray(raw) ? raw : [raw];
569
- for (const v of vals) {
570
- const valueId = valueMap.get(v);
571
- if (valueId)
572
- resolvedIds.push(valueId);
573
- }
574
- }
575
- return resolvedIds;
576
- }
577
- async retrieveProductAttribute(id, config, sharedContext) {
578
- const attribute = await super.retrieveProductAttribute(id, config, sharedContext);
579
- await this.resolveSelectAttributeValues_([attribute], config, sharedContext);
580
- return attribute;
581
- }
582
- async listProductAttributes(filters, config, sharedContext) {
583
- const attributes = await super.listProductAttributes(filters, config, sharedContext);
584
- await this.resolveSelectAttributeValues_(attributes, config, sharedContext);
585
- return attributes;
586
- }
587
- async listAndCountProductAttributes(filters, config, sharedContext) {
588
- const [attributes, count] = await super.listAndCountProductAttributes(filters, config, sharedContext);
589
- await this.resolveSelectAttributeValues_(attributes, config, sharedContext);
590
- return [attributes, count];
591
- }
592
- /**
593
- * For attributes with type single_select or multi_select, resolves their
594
- * values via listProductAttributeValues. Non-select attributes keep values empty.
595
- * Only runs when the caller requested the "values" relation.
596
- */
597
- async resolveSelectAttributeValues_(attributes, config, sharedContext) {
598
- const requestedRelations = (config?.relations ?? []);
599
- if (!requestedRelations.includes("values"))
600
- return;
601
- if (!attributes.length)
602
- return;
603
- const SELECT_TYPES = new Set([
604
- types_1.AttributeType.SINGLE_SELECT,
605
- types_1.AttributeType.MULTI_SELECT,
606
- ]);
607
- const selectAttrIds = [];
608
- for (const attr of attributes) {
609
- if (SELECT_TYPES.has(attr.type)) {
610
- selectAttrIds.push(attr.id);
611
- }
612
- else {
613
- // Non-select types: clear values
614
- attr.values = [];
615
- }
616
- }
617
- if (!selectAttrIds.length)
618
- return;
619
- // Batch-fetch values for all select-type attributes
620
- const values = await super.listProductAttributeValues({ attribute_id: selectAttrIds }, { order: { rank: "ASC" } }, sharedContext);
621
- // Group values by attribute_id
622
- const valuesByAttrId = new Map();
623
- for (const val of values) {
624
- const attrId = val.attribute_id ?? val.attribute?.id;
625
- if (!attrId)
626
- continue;
627
- if (!valuesByAttrId.has(attrId)) {
628
- valuesByAttrId.set(attrId, []);
629
- }
630
- valuesByAttrId.get(attrId).push(val);
631
- }
632
- // Map values onto attributes
633
- for (const attr of attributes) {
634
- if (SELECT_TYPES.has(attr.type)) {
635
- attr.values = valuesByAttrId.get(attr.id) ?? [];
636
- }
637
- }
638
- }
639
- // @ts-ignore
640
- async createProductAttributes(data, sharedContext) {
641
- const input = (Array.isArray(data) ? data : [data]).map((attr) => {
642
- this.validateProductAttributeType_(attr);
643
- if (!attr.handle && attr.name) {
644
- attr.handle = (0, utils_1.toHandle)(attr.name);
645
- }
646
- return attr;
647
- });
648
- const result = await super.createProductAttributes(input, sharedContext);
649
- // When product_id is set, link created attributes and their values to the product
650
- const created = Array.isArray(result) ? result : [result];
651
- const attrsWithProductId = created.filter((attr) => !!attr.product_id);
652
- if (attrsWithProductId.length) {
653
- // Batch-fetch all created attributes with values in a single query
654
- const attrIdsToFetch = attrsWithProductId.map((a) => a.id);
655
- const fetchedAttrs = await super.listProductAttributes({ id: attrIdsToFetch }, { relations: ["values"] }, sharedContext);
656
- const fetchedAttrsById = new Map();
657
- for (const a of fetchedAttrs) {
658
- fetchedAttrsById.set(a.id, a);
659
- }
660
- // Batch-fetch all referenced products in a single query
661
- const productIds = [
662
- ...new Set(attrsWithProductId.map((a) => a.product_id)),
663
- ];
664
- const products = await this.listProducts({ id: productIds }, {
665
- select: ["id"],
666
- relations: ["attribute_values", "variant_attributes"],
667
- }, sharedContext);
668
- const productsById = new Map();
669
- for (const p of products) {
670
- productsById.set(p.id, p);
671
- }
672
- // Build update payloads per product
673
- const updatesByProductId = new Map();
674
- for (const attr of attrsWithProductId) {
675
- const productId = attr.product_id;
676
- const fetchedAttr = fetchedAttrsById.get(attr.id);
677
- const product = productsById.get(productId);
678
- if (!product)
679
- continue;
680
- if (!updatesByProductId.has(productId)) {
681
- updatesByProductId.set(productId, {
682
- id: productId,
683
- attribute_values: [
684
- ...new Set((product.attribute_values ?? []).map((v) => v.id)),
685
- ],
686
- variant_attributes: [
687
- ...new Set((product.variant_attributes ?? []).map((a) => a.id)),
688
- ],
689
- });
690
- }
691
- const payload = updatesByProductId.get(productId);
692
- // Merge attribute value IDs
693
- const valueIds = (fetchedAttr?.values ?? []).map((v) => v.id);
694
- for (const vid of valueIds) {
695
- if (!payload.attribute_values.includes(vid)) {
696
- payload.attribute_values.push(vid);
697
- }
698
- }
699
- // Merge variant attribute ID
700
- if (attr.is_variant_axis) {
701
- if (!payload.variant_attributes.includes(attr.id)) {
702
- payload.variant_attributes.push(attr.id);
703
- }
704
- }
705
- }
706
- // Apply all product updates
707
- await (0, utils_1.promiseAll)(Array.from(updatesByProductId.values()).map((payload) => super.updateProducts(payload, sharedContext)));
708
- }
709
- return (Array.isArray(data) ? result : result[0]);
710
- }
711
- /**
712
- * Adds existing global attributes to a product by linking them via the
713
- * variant_attributes M2M and their values via the attribute_values M2M.
714
- */
715
- async addAttributesToProduct(productId, items, sharedContext) {
716
- if (!items.length)
717
- return;
718
- const product = await this.retrieveProduct(productId, {
719
- select: ["id"],
720
- relations: ["variant_attributes", "attribute_values"],
721
- }, sharedContext);
722
- const existingVariantAttrIds = new Set((product.variant_attributes ?? []).map((a) => a.id));
723
- const existingValueIds = new Set((product.attribute_values ?? []).map((v) => v.id));
724
- // Batch-fetch all referenced attributes with their values in a single query
725
- const attrIdsToFetch = items.map((item) => item.attribute_id);
726
- const fetchedAttrs = await super.listProductAttributes({ id: attrIdsToFetch }, { relations: ["values"] }, sharedContext);
727
- const fetchedAttrsById = new Map();
728
- for (const a of fetchedAttrs) {
729
- fetchedAttrsById.set(a.id, a);
730
- }
731
- const newAttrIds = new Set();
732
- const newValueIds = new Set();
733
- for (const item of items) {
734
- const attr = fetchedAttrsById.get(item.attribute_id);
735
- if (!attr) {
736
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Product attribute with id '${item.attribute_id}' was not found`);
737
- }
738
- if (attr.product_id) {
739
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Attribute '${item.attribute_id}' is product-scoped and cannot be linked to another product`);
740
- }
741
- newAttrIds.add(attr.id);
742
- // Determine which value IDs to link
743
- const attrValues = (attr.values ?? []);
744
- if (item.attribute_value_ids?.length) {
745
- // Select types — reference existing value IDs
746
- const validIds = new Set(attrValues.map((v) => v.id));
747
- for (const vid of item.attribute_value_ids) {
748
- if (!validIds.has(vid)) {
749
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Attribute value '${vid}' not found on attribute '${attr.name}'`);
750
- }
751
- newValueIds.add(vid);
752
- }
753
- }
754
- else if (item.values?.length) {
755
- // Text/unit/toggle types — find-or-create values by name
756
- const existingByName = new Map();
757
- for (const v of attrValues) {
758
- existingByName.set(v.name, v.id);
759
- }
760
- const toCreate = [];
761
- for (const name of item.values) {
762
- const existingId = existingByName.get(name);
763
- if (existingId) {
764
- newValueIds.add(existingId);
765
- }
766
- else {
767
- toCreate.push(name);
768
- }
769
- }
770
- if (toCreate.length) {
771
- const created = await this.createProductAttributeValues(toCreate.map((name, i) => ({
772
- name,
773
- handle: (0, utils_1.toHandle)(name),
774
- rank: attrValues.length + i,
775
- attribute_id: attr.id,
776
- })), sharedContext);
777
- const createdArr = Array.isArray(created) ? created : [created];
778
- for (const v of createdArr) {
779
- newValueIds.add(v.id);
780
- }
781
- }
782
- }
783
- else {
784
- // No specific values — link all existing values
785
- for (const v of attrValues) {
786
- newValueIds.add(v.id);
787
- }
788
- }
789
- }
790
- const mergedAttrIds = [
791
- ...new Set([...existingVariantAttrIds, ...newAttrIds]),
792
- ];
793
- const mergedValueIds = [
794
- ...new Set([...existingValueIds, ...newValueIds]),
795
- ];
796
- await super.updateProducts({
797
- id: productId,
798
- variant_attributes: mergedAttrIds,
799
- attribute_values: mergedValueIds,
800
- }, sharedContext);
801
- }
802
- /**
803
- * Removes attributes from a product.
804
- *
805
- * - If an attribute is a variant axis and any product variant references its
806
- * values, the removal is rejected (variants must be deleted first).
807
- * - If an attribute is global (no product_id), it is unlinked from the
808
- * product's M2M relations.
809
- * - If an attribute is product-scoped (product_id matches), it is soft-deleted.
810
- */
811
- async removeAttributeFromProduct(productId, attributeIds, sharedContext) {
812
- const ids = Array.isArray(attributeIds) ? attributeIds : [attributeIds];
813
- if (!ids.length)
814
- return;
815
- const product = await this.retrieveProduct(productId, {
816
- select: ["id"],
817
- relations: [
818
- "variant_attributes",
819
- "attribute_values",
820
- "variants",
821
- "variants.attribute_values",
822
- ],
823
- }, sharedContext);
824
- // Batch-fetch all attributes with their values
825
- const attributes = await super.listProductAttributes({ id: ids }, { relations: ["values"] }, sharedContext);
826
- const attributesById = new Map();
827
- for (const a of attributes) {
828
- attributesById.set(a.id, a);
829
- }
830
- // Collect all value IDs to remove and validate variant axis constraints
831
- const allAttrValueIds = new Set();
832
- const attrIdsToRemove = new Set();
833
- const productScopedToDelete = [];
834
- const variants = (product.variants ?? []);
835
- for (const attrId of ids) {
836
- const attribute = attributesById.get(attrId);
837
- if (!attribute)
838
- continue;
839
- const valueIds = (attribute.values ?? []).map((v) => v.id);
840
- // If attribute is a variant axis, check for variants using its values
841
- if (attribute.is_variant_axis) {
842
- const valueIdSet = new Set(valueIds);
843
- const hasVariantsWithAttr = variants.some((variant) => (variant.attribute_values ?? []).some((v) => valueIdSet.has(v.id)));
844
- if (hasVariantsWithAttr) {
845
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, `Cannot remove variant axis attribute '${attribute.name}' because product variants are using it. Delete those variants first.`);
846
- }
847
- }
848
- attrIdsToRemove.add(attrId);
849
- for (const vid of valueIds) {
850
- allAttrValueIds.add(vid);
851
- }
852
- if (attribute.product_id === productId) {
853
- productScopedToDelete.push(attrId);
854
- }
855
- }
856
- // Build a single update payload to unlink everything at once
857
- const updatePayload = { id: productId };
858
- let needsUpdate = false;
859
- // Remove attributes from variant_attributes M2M
860
- const existingVariantAttrIds = (product.variant_attributes ?? []).map((a) => a.id);
861
- const filteredVariantAttrIds = existingVariantAttrIds.filter((id) => !attrIdsToRemove.has(id));
862
- if (filteredVariantAttrIds.length !== existingVariantAttrIds.length) {
863
- updatePayload.variant_attributes = filteredVariantAttrIds;
864
- needsUpdate = true;
865
- }
866
- // Remove attribute values from product's attribute_values M2M
867
- if (allAttrValueIds.size) {
868
- const existingValueIds = (product.attribute_values ?? []).map((v) => v.id);
869
- const filteredValueIds = existingValueIds.filter((id) => !allAttrValueIds.has(id));
870
- if (filteredValueIds.length !== existingValueIds.length) {
871
- updatePayload.attribute_values = filteredValueIds;
872
- needsUpdate = true;
873
- }
874
- }
875
- if (needsUpdate) {
876
- await super.updateProducts(updatePayload, sharedContext);
877
- }
878
- // Soft-delete product-scoped attributes
879
- if (productScopedToDelete.length) {
880
- await this.softDeleteProductAttributes(productScopedToDelete, {}, sharedContext);
881
- }
882
- }
883
- async updateProductAttributes(idOrSelectorOrData, dataOrContext, sharedContext) {
884
- const isSelectorForm = typeof idOrSelectorOrData === "string" ||
885
- (!Array.isArray(idOrSelectorOrData) &&
886
- dataOrContext &&
887
- typeof dataOrContext === "object");
888
- if (isSelectorForm) {
889
- const update = dataOrContext;
890
- this.validateProductAttributeType_(update);
891
- // @ts-ignore
892
- return await super.updateProductAttributes(idOrSelectorOrData, update, sharedContext);
893
- }
894
- const data = idOrSelectorOrData;
895
- for (const attr of data) {
896
- this.validateProductAttributeType_(attr);
897
- }
898
- // @ts-ignore
899
- return await super.updateProductAttributes(data, dataOrContext);
900
- }
901
- // @ts-ignore
902
- async createProductAttributeValues(data, sharedContext) {
903
- const input = (Array.isArray(data) ? data : [data]).map((val) => {
904
- if (!val.handle && val.name) {
905
- val.handle = (0, utils_1.toHandle)(val.name);
906
- }
907
- return val;
908
- });
909
- const result = await super.createProductAttributeValues(input, sharedContext);
910
- return (Array.isArray(data) ? result : result[0]);
911
- }
912
- async upsertProductAttributeValues(data, sharedContext) {
913
- const forCreate = data.filter((v) => !("id" in v) || !v.id);
914
- const forUpdate = data.filter((v) => "id" in v && !!v.id);
915
- let created = [];
916
- let updated = [];
917
- if (forCreate.length) {
918
- created = await this.createProductAttributeValues(forCreate, sharedContext);
919
- }
920
- if (forUpdate.length) {
921
- updated = await super.updateProductAttributeValues(forUpdate, sharedContext);
922
- }
923
- return [...created, ...updated];
924
- }
925
- async createProductBrands(data, sharedContext) {
926
- const input = (Array.isArray(data) ? data : [data]).map((brand) => {
927
- if (!brand.handle && brand.name) {
928
- brand.handle = (0, utils_1.toHandle)(brand.name);
929
- }
930
- return brand;
931
- });
932
- const result = await super.createProductBrands(input, sharedContext);
933
- return (Array.isArray(data) ? result : result[0]);
934
- }
935
- async updateProductBrands(idOrSelectorOrData, dataOrContext, sharedContext) {
936
- const isSelectorForm = typeof idOrSelectorOrData === "string" ||
937
- (!Array.isArray(idOrSelectorOrData) &&
938
- dataOrContext &&
939
- typeof dataOrContext === "object");
940
- if (isSelectorForm) {
941
- const update = dataOrContext;
942
- if (!update.handle && update.name) {
943
- update.handle = (0, utils_1.toHandle)(update.name);
944
- }
945
- // @ts-ignore
946
- return await super.updateProductBrands(idOrSelectorOrData, update, sharedContext);
947
- }
948
- const data = idOrSelectorOrData;
949
- const input = data.map((brand) => {
950
- if (!brand.handle && brand.name) {
951
- brand.handle = (0, utils_1.toHandle)(brand.name);
952
- }
953
- return brand;
954
- });
955
- // @ts-ignore
956
- return await super.updateProductBrands(input, dataOrContext);
957
- }
958
- async createProducts(data, sharedContext) {
959
- const input = Array.isArray(data) ? data : [data];
960
- await this.normalizeProductInput_(input, sharedContext);
961
- // Extract pending custom attribute IDs before passing to super
962
- const pendingCustomAttrs = new Map();
963
- for (let i = 0; i < input.length; i++) {
964
- if (input[i].__pending_custom_attribute_ids) {
965
- pendingCustomAttrs.set(i, input[i].__pending_custom_attribute_ids);
966
- delete input[i].__pending_custom_attribute_ids;
967
- }
968
- }
969
- const result = await super.createProducts(input, sharedContext);
970
- const products = (Array.isArray(result) ? result : [result]);
971
- // Assign product_id to custom attributes now that products have IDs
972
- for (const [index, attrIds] of pendingCustomAttrs) {
973
- const productId = products[index].id;
974
- await this.updateProductAttributes(attrIds.map((id) => ({ id, product_id: productId })), sharedContext);
975
- }
976
- return (Array.isArray(data) ? products : products[0]);
977
- }
978
- async updateProducts(idOrSelectorOrData, dataOrContext, sharedContext) {
979
- const isSelectorForm = typeof idOrSelectorOrData === "string" ||
980
- (!Array.isArray(idOrSelectorOrData) &&
981
- dataOrContext &&
982
- typeof dataOrContext === "object");
983
- if (isSelectorForm) {
984
- const update = dataOrContext;
985
- // For selector/id form with attributes, expand to array form
986
- const hasAttributeInput = update.variant_attributes !== undefined ||
987
- update.product_attributes !== undefined ||
988
- (Array.isArray(update.variants) &&
989
- update.variants.some((v) => v?.attribute_values !== undefined));
990
- if (hasAttributeInput) {
991
- const wasIdForm = typeof idOrSelectorOrData === "string";
992
- let productIds;
993
- if (wasIdForm) {
994
- productIds = [idOrSelectorOrData];
995
- }
996
- else {
997
- const products = await this.listProducts(idOrSelectorOrData, { select: ["id"] }, sharedContext);
998
- productIds = products.map((p) => p.id);
999
- }
1000
- if (!productIds.length) {
1001
- return wasIdForm ? undefined : [];
1002
- }
1003
- const batch = productIds.map((id) => ({
1004
- id,
1005
- ...update,
1006
- }));
1007
- await this.normalizeProductInput_(batch, sharedContext);
1008
- // @ts-ignore
1009
- const results = await super.updateProducts(batch, sharedContext);
1010
- const arr = Array.isArray(results) ? results : [results];
1011
- return (wasIdForm ? arr[0] : arr);
1012
- }
1013
- // Simple path: normalize in place
1014
- await this.normalizeProductInput_([update], sharedContext);
1015
- // @ts-ignore
1016
- return await super.updateProducts(idOrSelectorOrData, update, sharedContext);
1017
- }
1018
- const input = idOrSelectorOrData;
1019
- await this.normalizeProductInput_(input, sharedContext);
1020
- // @ts-ignore
1021
- return await super.updateProducts(input, dataOrContext);
1022
- }
1023
- async createProductVariants(data, sharedContext) {
1024
- const input = Array.isArray(data) ? data : [data];
1025
- await this.normalizeVariantAttributeValues_(input, sharedContext);
1026
- // @ts-ignore
1027
- const result = await super.createProductVariants(input, sharedContext);
1028
- const variants = (Array.isArray(result) ? result : [result]);
1029
- return Array.isArray(data) ? variants : variants[0];
1030
- }
1031
- async upsertProductVariants(data, sharedContext) {
1032
- const input = Array.isArray(data) ? data : [data];
1033
- const forUpdate = input.filter((v) => !!v.id);
1034
- const forCreate = input.filter((v) => !v.id);
1035
- let created = [];
1036
- let updated = [];
1037
- if (forCreate.length) {
1038
- const result = await this.createProductVariants(forCreate, sharedContext);
1039
- created = (Array.isArray(result) ? result : [result]);
1040
- }
1041
- if (forUpdate.length) {
1042
- const result = await this.updateProductVariants(forUpdate, sharedContext);
1043
- updated = (Array.isArray(result) ? result : [result]);
1044
- }
1045
- const all = [...created, ...updated];
1046
- return Array.isArray(data) ? all : all[0];
1047
- }
1048
- async updateProductVariants(idOrSelectorOrData, dataOrContext, sharedContext) {
1049
- const isSelectorForm = typeof idOrSelectorOrData === "string" ||
1050
- (!Array.isArray(idOrSelectorOrData) &&
1051
- dataOrContext &&
1052
- typeof dataOrContext === "object");
1053
- if (isSelectorForm) {
1054
- const update = dataOrContext;
1055
- // Map-style attribute_values must resolve per variant (each may have a
1056
- // different parent product), so expand selector/id form to array form.
1057
- const hasMapAttrValues = update?.attribute_values !== undefined &&
1058
- !Array.isArray(update.attribute_values) &&
1059
- typeof update.attribute_values === "object";
1060
- if (hasMapAttrValues) {
1061
- const wasIdForm = typeof idOrSelectorOrData === "string";
1062
- let variantIds;
1063
- if (wasIdForm) {
1064
- variantIds = [idOrSelectorOrData];
1065
- }
1066
- else {
1067
- const variants = await super.listProductVariants(idOrSelectorOrData, { select: ["id"] }, sharedContext);
1068
- variantIds = variants.map((v) => v.id);
1069
- }
1070
- if (!variantIds.length) {
1071
- return wasIdForm ? undefined : [];
1072
- }
1073
- const batch = variantIds.map((id) => ({
1074
- id,
1075
- ...update,
1076
- }));
1077
- await this.normalizeVariantAttributeValues_(batch, sharedContext);
1078
- // @ts-ignore
1079
- const results = await super.updateProductVariants(batch, sharedContext);
1080
- const arr = Array.isArray(results) ? results : [results];
1081
- return (wasIdForm ? arr[0] : arr);
1082
- }
1083
- // @ts-ignore
1084
- return await super.updateProductVariants(idOrSelectorOrData, update, sharedContext);
1085
- }
1086
- const data = idOrSelectorOrData;
1087
- await this.normalizeVariantAttributeValues_(data, sharedContext);
1088
- // @ts-ignore
1089
- return await super.updateProductVariants(data, dataOrContext);
1090
- }
1091
- async createProductCategories(data, sharedContext) {
1092
- const input = (Array.isArray(data) ? data : [data]).map((category) => {
1093
- category.handle ??= (0, utils_1.kebabCase)(category.name);
1094
- return category;
1095
- });
1096
- const categories = await this.productCategoryService_.create(input, sharedContext);
1097
- return Array.isArray(data) ? categories : categories[0];
1098
- }
1099
- async updateProductCategories(data, sharedContext) {
1100
- let normalizedInput;
1101
- if (typeof data === "object" && !Array.isArray(data) && data.id) {
1102
- normalizedInput = [data];
1103
- }
1104
- else if (Array.isArray(data)) {
1105
- normalizedInput = data;
1106
- }
1107
- else {
1108
- normalizedInput = [data];
1109
- }
1110
- const categories = await this.productCategoryService_.update(normalizedInput, sharedContext);
1111
- return Array.isArray(data) ? categories : categories[0];
1112
- }
1113
- async retrieveProductCategory(id, config, sharedContext) {
1114
- return await this.productCategoryService_.retrieve(id, config, sharedContext);
1115
- }
1116
- async listProductCategories(filters, config, sharedContext) {
1117
- return await this.productCategoryService_.list(filters, config, sharedContext);
1118
- }
1119
- async listAndCountProductCategories(filters, config, sharedContext) {
1120
- return await this.productCategoryService_.listAndCount(filters, config, sharedContext);
1121
- }
1122
- async deleteProductCategories(ids, sharedContext) {
1123
- const idsArray = Array.isArray(ids) ? ids : [ids];
1124
- return await this.productCategoryService_.delete(idsArray, sharedContext);
1125
- }
1126
- async softDeleteProductCategories(ids, sharedContext) {
1127
- const idsArray = Array.isArray(ids) ? ids : [ids];
1128
- return await this.productCategoryService_.softDelete(idsArray, sharedContext);
1129
- }
1130
- async restoreProductCategories(ids, sharedContext) {
1131
- const idsArray = Array.isArray(ids) ? ids : [ids];
1132
- return await this.productCategoryService_.restore(idsArray, sharedContext);
1133
- }
1134
- // --- ProductChange lifecycle methods ---
1135
- /**
1136
- * Confirms one or more pending product changes and applies their actions
1137
- * to the underlying products. Mirrors Medusa's `confirmOrderChange`:
1138
- * validation + status update + action application happen atomically.
1139
- *
1140
- * `internal_note` is operator-only context. `external_note` is the
1141
- * vendor-visible message (e.g. rejection / changes-required reason)
1142
- * that is also forwarded to notification subscribers.
1143
- */
1144
- async confirmProductChange(data, sharedContext) {
1145
- const items = Array.isArray(data) ? data : [data];
1146
- const ids = items.map((i) => i.id);
1147
- const changes = await this.listProductChanges({ id: ids }, {
1148
- select: ["id", "status", "actions"],
1149
- relations: ["actions"],
1150
- order: { actions: { ordering: "ASC" } },
1151
- }, sharedContext);
1152
- if (changes.length !== ids.length) {
1153
- const found = new Set(changes.map((c) => c.id));
1154
- const missing = ids.filter((id) => !found.has(id));
1155
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Product change(s) not found: ${missing.join(", ")}`);
1156
- }
1157
- for (const change of changes) {
1158
- if (change.status !== types_1.ProductChangeStatus.PENDING) {
1159
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, `Cannot confirm product change '${change.id}' with status '${change.status}'. Only pending changes can be confirmed.`);
1160
- }
1161
- }
1162
- await this.updateProductChanges(items.map((item) => {
1163
- const update = {
1164
- id: item.id,
1165
- status: types_1.ProductChangeStatus.CONFIRMED,
1166
- confirmed_by: item.confirmed_by,
1167
- confirmed_at: new Date(),
1168
- };
1169
- if (item.internal_note !== undefined) {
1170
- update.internal_note = item.internal_note;
1171
- }
1172
- if (item.external_note !== undefined) {
1173
- update.external_note = item.external_note;
1174
- }
1175
- return update;
1176
- }), sharedContext);
1177
- const allActions = changes.flatMap((c) => c.actions ?? []);
1178
- await this.applyProductChangeActions_(allActions, sharedContext);
1179
- }
1180
- /**
1181
- * Applies pending change actions to their products. Public entrypoint
1182
- * for callers that want to apply without confirming (e.g. previewing
1183
- * effects). Internally delegates to the same routine `confirmProductChange`
1184
- * uses.
1185
- */
1186
- async applyProductChangeActions(actions, sharedContext) {
1187
- await this.applyProductChangeActions_(actions, sharedContext);
1188
- }
1189
- async applyProductChangeActions_(actions, sharedContext) {
1190
- const pending = (actions ?? []).filter((a) => !a.applied);
1191
- if (!pending.length)
1192
- return;
1193
- // Bucket actions per type so each kind dispatches in one DB round.
1194
- const productUpdatesByProductId = new Map();
1195
- const variantsToCreate = [];
1196
- const variantUpdates = [];
1197
- const variantsToDelete = [];
1198
- const attributeAddsByProductId = new Map();
1199
- const attributeRemovesByProductId = new Map();
1200
- const productsToDelete = new Set();
1201
- for (const action of pending) {
1202
- const details = (action.details ?? {});
1203
- switch (action.action) {
1204
- case types_1.ProductChangeActionType.STATUS_CHANGE: {
1205
- const status = details.status;
1206
- if (status === undefined)
1207
- break;
1208
- const update = productUpdatesByProductId.get(action.product_id) ??
1209
- { id: action.product_id };
1210
- update.status = status;
1211
- productUpdatesByProductId.set(action.product_id, update);
1212
- break;
1213
- }
1214
- case types_1.ProductChangeActionType.UPDATE: {
1215
- const { field, value } = details;
1216
- if (!field)
1217
- break;
1218
- const update = productUpdatesByProductId.get(action.product_id) ??
1219
- { id: action.product_id };
1220
- update[field] = value;
1221
- productUpdatesByProductId.set(action.product_id, update);
1222
- break;
1223
- }
1224
- case types_1.ProductChangeActionType.VARIANT_ADD: {
1225
- const variant = details
1226
- .variant;
1227
- if (!variant)
1228
- break;
1229
- variantsToCreate.push({
1230
- ...variant,
1231
- product_id: action.product_id,
1232
- });
1233
- break;
1234
- }
1235
- case types_1.ProductChangeActionType.VARIANT_UPDATE: {
1236
- const { variant_id, fields } = details;
1237
- if (!variant_id || !fields || !Object.keys(fields).length)
1238
- break;
1239
- variantUpdates.push({
1240
- id: variant_id,
1241
- ...fields,
1242
- });
1243
- break;
1244
- }
1245
- case types_1.ProductChangeActionType.VARIANT_REMOVE: {
1246
- const { variant_id } = details;
1247
- if (variant_id)
1248
- variantsToDelete.push(variant_id);
1249
- break;
1250
- }
1251
- case types_1.ProductChangeActionType.ATTRIBUTE_ADD: {
1252
- const { attribute_id, attribute_value_ids, values } = details;
1253
- if (!attribute_id)
1254
- break;
1255
- const list = attributeAddsByProductId.get(action.product_id) ?? [];
1256
- list.push({ attribute_id, attribute_value_ids, values });
1257
- attributeAddsByProductId.set(action.product_id, list);
1258
- break;
1259
- }
1260
- case types_1.ProductChangeActionType.ATTRIBUTE_REMOVE: {
1261
- const { attribute_id } = details;
1262
- if (!attribute_id)
1263
- break;
1264
- const list = attributeRemovesByProductId.get(action.product_id) ?? [];
1265
- list.push(attribute_id);
1266
- attributeRemovesByProductId.set(action.product_id, list);
1267
- break;
1268
- }
1269
- case types_1.ProductChangeActionType.PRODUCT_DELETE: {
1270
- productsToDelete.add(action.product_id);
1271
- break;
1272
- }
1273
- }
1274
- }
1275
- // Top-level Product field + status updates — one call per product.
1276
- const productUpdates = Array.from(productUpdatesByProductId.values()).filter((u) => Object.keys(u).length > 1);
1277
- if (productUpdates.length) {
1278
- await this.updateProducts(productUpdates, sharedContext);
1279
- }
1280
- // Variant deletes first — frees up SKU/title uniqueness for adds in the
1281
- // same change. Updates last so they see a stable variant set.
1282
- if (variantsToDelete.length) {
1283
- await this.deleteProductVariants(variantsToDelete, sharedContext);
1284
- }
1285
- if (variantsToCreate.length) {
1286
- await this.createProductVariants(variantsToCreate, sharedContext);
1287
- }
1288
- if (variantUpdates.length) {
1289
- await this.updateProductVariants(variantUpdates, sharedContext);
1290
- }
1291
- // Attribute removes before adds so the same attribute can be re-linked
1292
- // with a different value set in a single change.
1293
- for (const [productId, attrIds] of attributeRemovesByProductId) {
1294
- await this.removeAttributeFromProduct(productId, attrIds, sharedContext);
1295
- }
1296
- for (const [productId, items] of attributeAddsByProductId) {
1297
- await this.addAttributesToProduct(productId, items, sharedContext);
1298
- }
1299
- // Product deletes happen last — any audit-trail updates above still
1300
- // write through before the product is gone. Soft-delete preserves the
1301
- // ProductChange record (it stays linked to the now-deleted product so
1302
- // the change history remains queryable).
1303
- if (productsToDelete.size) {
1304
- await this.softDeleteProducts(Array.from(productsToDelete), {}, sharedContext);
1305
- }
1306
- await this.updateProductChangeActions(pending.map((a) => ({ id: a.id, applied: true })), sharedContext);
1307
- }
1308
- async declineProductChange(id, data, sharedContext) {
1309
- const change = await this.retrieveProductChange(id, {}, sharedContext);
1310
- if (change.status !== types_1.ProductChangeStatus.PENDING) {
1311
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, `Cannot decline product change with status '${change.status}'. Only pending changes can be declined.`);
1312
- }
1313
- await this.updateProductChanges({
1314
- id,
1315
- status: types_1.ProductChangeStatus.DECLINED,
1316
- declined_by: data.declined_by,
1317
- declined_at: new Date(),
1318
- declined_reason: data.declined_reason,
1319
- }, sharedContext);
1320
- }
1321
- async cancelProductChange(id, data, sharedContext) {
1322
- const change = await this.retrieveProductChange(id, {}, sharedContext);
1323
- if (change.status !== types_1.ProductChangeStatus.PENDING) {
1324
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, `Cannot cancel product change with status '${change.status}'. Only pending changes can be canceled.`);
1325
- }
1326
- const update = {
1327
- id,
1328
- status: types_1.ProductChangeStatus.CANCELED,
1329
- canceled_by: data.canceled_by,
1330
- canceled_at: new Date(),
1331
- };
1332
- if (data.internal_note !== undefined) {
1333
- update.internal_note = data.internal_note;
1334
- }
1335
- await this.updateProductChanges(update, sharedContext);
1336
- }
1337
- async addProductAction(data, sharedContext) {
1338
- const items = Array.isArray(data) ? data : [data];
1339
- for (const item of items) {
1340
- if (item.applied)
1341
- continue;
1342
- const change = await this.retrieveProductChange(item.product_change_id, {}, sharedContext);
1343
- if (change.status !== types_1.ProductChangeStatus.PENDING) {
1344
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, `Cannot add action to product change with status '${change.status}'. Only pending changes accept actions.`);
1345
- }
1346
- }
1347
- const result = await this.createProductChangeActions(items.map((item) => ({
1348
- product_change_id: item.product_change_id,
1349
- product_id: item.product_id,
1350
- action: item.action,
1351
- details: item.details ?? {},
1352
- internal_note: item.internal_note,
1353
- applied: item.applied,
1354
- })), sharedContext);
1355
- return (Array.isArray(data) ? result : result[0]);
1356
- }
1357
- }
1358
- __decorate([
1359
- (0, utils_1.InjectTransactionManager)()
1360
- // @ts-ignore
1361
- ,
1362
- __metadata("design:type", Function),
1363
- __metadata("design:paramtypes", [typeof (_a = typeof TInput !== "undefined" && TInput) === "function" ? _a : Object, Object]),
1364
- __metadata("design:returntype", Promise)
1365
- ], ProductModuleService.prototype, "createProductAttributes", null);
1366
- __decorate([
1367
- (0, utils_1.InjectTransactionManager)(),
1368
- __metadata("design:type", Function),
1369
- __metadata("design:paramtypes", [String, Array, Object]),
1370
- __metadata("design:returntype", Promise)
1371
- ], ProductModuleService.prototype, "addAttributesToProduct", null);
1372
- __decorate([
1373
- (0, utils_1.InjectTransactionManager)(),
1374
- __metadata("design:type", Function),
1375
- __metadata("design:paramtypes", [String, Object, Object]),
1376
- __metadata("design:returntype", Promise)
1377
- ], ProductModuleService.prototype, "removeAttributeFromProduct", null);
1378
- __decorate([
1379
- (0, utils_1.InjectTransactionManager)(),
1380
- __metadata("design:type", Function),
1381
- __metadata("design:paramtypes", [Object, Object, Object]),
1382
- __metadata("design:returntype", Promise)
1383
- ], ProductModuleService.prototype, "updateProductAttributes", null);
1384
- __decorate([
1385
- (0, utils_1.InjectTransactionManager)()
1386
- // @ts-ignore
1387
- ,
1388
- __metadata("design:type", Function),
1389
- __metadata("design:paramtypes", [typeof (_b = typeof TInput !== "undefined" && TInput) === "function" ? _b : Object, Object]),
1390
- __metadata("design:returntype", Promise)
1391
- ], ProductModuleService.prototype, "createProductAttributeValues", null);
1392
- __decorate([
1393
- (0, utils_1.InjectTransactionManager)(),
1394
- __metadata("design:type", Function),
1395
- __metadata("design:paramtypes", [Array, Object]),
1396
- __metadata("design:returntype", Promise)
1397
- ], ProductModuleService.prototype, "upsertProductAttributeValues", null);
1398
- __decorate([
1399
- (0, utils_1.InjectTransactionManager)(),
1400
- __metadata("design:type", Function),
1401
- __metadata("design:paramtypes", [Object, Object]),
1402
- __metadata("design:returntype", Promise)
1403
- ], ProductModuleService.prototype, "createProductBrands", null);
1404
- __decorate([
1405
- (0, utils_1.InjectTransactionManager)(),
1406
- __metadata("design:type", Function),
1407
- __metadata("design:paramtypes", [Object, Object, Object]),
1408
- __metadata("design:returntype", Promise)
1409
- ], ProductModuleService.prototype, "updateProductBrands", null);
1410
- __decorate([
1411
- (0, utils_1.InjectTransactionManager)(),
1412
- __metadata("design:type", Function),
1413
- __metadata("design:paramtypes", [Object, Object]),
1414
- __metadata("design:returntype", Promise)
1415
- ], ProductModuleService.prototype, "createProducts", null);
1416
- __decorate([
1417
- (0, utils_1.InjectTransactionManager)(),
1418
- __metadata("design:type", Function),
1419
- __metadata("design:paramtypes", [Object, Object, Object]),
1420
- __metadata("design:returntype", Promise)
1421
- ], ProductModuleService.prototype, "updateProducts", null);
1422
- __decorate([
1423
- (0, utils_1.InjectTransactionManager)(),
1424
- __metadata("design:type", Function),
1425
- __metadata("design:paramtypes", [Object, Object]),
1426
- __metadata("design:returntype", Promise)
1427
- ], ProductModuleService.prototype, "createProductVariants", null);
1428
- __decorate([
1429
- (0, utils_1.InjectTransactionManager)(),
1430
- __metadata("design:type", Function),
1431
- __metadata("design:paramtypes", [Object, Object]),
1432
- __metadata("design:returntype", Promise)
1433
- ], ProductModuleService.prototype, "upsertProductVariants", null);
1434
- __decorate([
1435
- (0, utils_1.InjectTransactionManager)(),
1436
- __metadata("design:type", Function),
1437
- __metadata("design:paramtypes", [Object, Object, Object]),
1438
- __metadata("design:returntype", Promise)
1439
- ], ProductModuleService.prototype, "updateProductVariants", null);
1440
- __decorate([
1441
- (0, utils_1.InjectTransactionManager)(),
1442
- __metadata("design:type", Function),
1443
- __metadata("design:paramtypes", [Object, Object]),
1444
- __metadata("design:returntype", Promise)
1445
- ], ProductModuleService.prototype, "confirmProductChange", null);
1446
- __decorate([
1447
- (0, utils_1.InjectTransactionManager)(),
1448
- __metadata("design:type", Function),
1449
- __metadata("design:paramtypes", [Array, Object]),
1450
- __metadata("design:returntype", Promise)
1451
- ], ProductModuleService.prototype, "applyProductChangeActions", null);
1452
- __decorate([
1453
- (0, utils_1.InjectTransactionManager)(),
1454
- __metadata("design:type", Function),
1455
- __metadata("design:paramtypes", [String, Object, Object]),
1456
- __metadata("design:returntype", Promise)
1457
- ], ProductModuleService.prototype, "declineProductChange", null);
1458
- __decorate([
1459
- (0, utils_1.InjectTransactionManager)(),
1460
- __metadata("design:type", Function),
1461
- __metadata("design:paramtypes", [String, Object, Object]),
1462
- __metadata("design:returntype", Promise)
1463
- ], ProductModuleService.prototype, "cancelProductChange", null);
1464
- __decorate([
1465
- (0, utils_1.InjectTransactionManager)(),
1466
- __metadata("design:type", Function),
1467
- __metadata("design:paramtypes", [Object, Object]),
1468
- __metadata("design:returntype", Promise)
1469
- ], ProductModuleService.prototype, "addProductAction", null);
1470
- exports.default = ProductModuleService;
1471
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3Byb2R1Y3Qvc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFLQSxxREFVbUM7QUFDbkMsMkNBQThlO0FBRTllLHFDQWNrQjtBQXFDbEIsTUFBTSx3QkFBd0IsR0FBRyxJQUFBLHFCQUFhLEVBQUM7SUFDN0MsT0FBTyxFQUFQLGdCQUFPO0lBQ1AsZ0JBQWdCLEVBQWhCLHlCQUFnQjtJQUNoQixxQkFBcUIsRUFBckIsOEJBQXFCO0lBQ3JCLFlBQVksRUFBWixxQkFBWTtJQUNaLGVBQWUsRUFBZix3QkFBZTtJQUNmLGFBQWEsRUFBYixzQkFBYTtJQUNiLG1CQUFtQixFQUFuQiw0QkFBbUI7SUFDbkIsaUJBQWlCLEVBQWpCLDBCQUFpQjtJQUNqQixZQUFZLEVBQVoscUJBQVk7SUFDWixVQUFVLEVBQVYsbUJBQVU7SUFDVixXQUFXLEVBQVgsb0JBQVc7SUFDWCxjQUFjLEVBQWQsdUJBQWM7SUFDZCwwQkFBMEIsRUFBMUIsbUNBQTBCO0NBQzNCLENBQTJDLENBQUM7QUFFN0MsTUFBTSxvQkFBcUIsU0FBUSx3QkFBd0I7SUFHekQsWUFBWSxTQUErQjtRQUN6QyxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsdUJBQXVCLEdBQUcsU0FBUyxDQUFDLHNCQUFzQixDQUFDO0lBQ2xFLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFBLDBCQUFrQixFQUFDLGVBQU8sQ0FBQyxPQUFPLEVBQUU7WUFDekMsTUFBTSxFQUFFO2dCQUNOLGdCQUFPO2dCQUNQLHlCQUFnQjtnQkFDaEIsOEJBQXFCO2dCQUNyQixxQkFBWTtnQkFDWix3QkFBZTtnQkFDZixzQkFBYTtnQkFDYiw0QkFBbUI7Z0JBQ25CLDBCQUFpQjtnQkFDakIscUJBQVk7Z0JBQ1osbUJBQVU7Z0JBQ1Ysb0JBQVc7Z0JBQ1gs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