@medusajs/medusa 1.2.2-dev.53 → 1.3.1-next.14

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 (450) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/dist/api/index.d.ts +1 -0
  3. package/dist/api/index.js +1 -0
  4. package/dist/api/index.js.map +1 -1
  5. package/dist/api/middlewares/error-handler.js +1 -1
  6. package/dist/api/routes/admin/auth/create-session.js +5 -5
  7. package/dist/api/routes/admin/auth/create-session.js.map +1 -1
  8. package/dist/api/routes/admin/customer-groups/list-customer-groups.js +2 -2
  9. package/dist/api/routes/admin/customer-groups/list-customer-groups.js.map +1 -1
  10. package/dist/api/routes/admin/discounts/create-condition.d.ts +58 -0
  11. package/dist/api/routes/admin/discounts/create-condition.js +186 -0
  12. package/dist/api/routes/admin/discounts/create-condition.js.map +1 -0
  13. package/dist/api/routes/admin/discounts/create-discount.d.ts +11 -2
  14. package/dist/api/routes/admin/discounts/create-discount.js +65 -12
  15. package/dist/api/routes/admin/discounts/create-discount.js.map +1 -1
  16. package/dist/api/routes/admin/discounts/create-dynamic-code.d.ts +1 -0
  17. package/dist/api/routes/admin/discounts/create-dynamic-code.js +4 -1
  18. package/dist/api/routes/admin/discounts/create-dynamic-code.js.map +1 -1
  19. package/dist/api/routes/admin/discounts/delete-condition.d.ts +36 -0
  20. package/dist/api/routes/admin/discounts/delete-condition.js +151 -0
  21. package/dist/api/routes/admin/discounts/delete-condition.js.map +1 -0
  22. package/dist/api/routes/admin/discounts/delete-dynamic-code.js +3 -1
  23. package/dist/api/routes/admin/discounts/delete-dynamic-code.js.map +1 -1
  24. package/dist/api/routes/admin/discounts/get-discount.d.ts +7 -0
  25. package/dist/api/routes/admin/discounts/get-discount.js +43 -9
  26. package/dist/api/routes/admin/discounts/get-discount.js.map +1 -1
  27. package/dist/api/routes/admin/discounts/index.d.ts +4 -3
  28. package/dist/api/routes/admin/discounts/index.js +8 -6
  29. package/dist/api/routes/admin/discounts/index.js.map +1 -1
  30. package/dist/api/routes/admin/discounts/list-discounts.d.ts +2 -6
  31. package/dist/api/routes/admin/discounts/list-discounts.js +15 -28
  32. package/dist/api/routes/admin/discounts/list-discounts.js.map +1 -1
  33. package/dist/api/routes/admin/discounts/update-condition.d.ts +55 -0
  34. package/dist/api/routes/admin/discounts/update-condition.js +184 -0
  35. package/dist/api/routes/admin/discounts/update-condition.js.map +1 -0
  36. package/dist/api/routes/admin/discounts/update-discount.d.ts +12 -2
  37. package/dist/api/routes/admin/discounts/update-discount.js +70 -15
  38. package/dist/api/routes/admin/discounts/update-discount.js.map +1 -1
  39. package/dist/api/routes/admin/draft-orders/create-draft-order.d.ts +3 -3
  40. package/dist/api/routes/admin/draft-orders/create-draft-order.js.map +1 -1
  41. package/dist/api/routes/admin/draft-orders/create-line-item.d.ts +1 -1
  42. package/dist/api/routes/admin/draft-orders/create-line-item.js.map +1 -1
  43. package/dist/api/routes/admin/draft-orders/index.js +7 -1
  44. package/dist/api/routes/admin/draft-orders/index.js.map +1 -1
  45. package/dist/api/routes/admin/draft-orders/register-payment.js +0 -1
  46. package/dist/api/routes/admin/draft-orders/register-payment.js.map +1 -1
  47. package/dist/api/routes/admin/draft-orders/update-line-item.d.ts +1 -1
  48. package/dist/api/routes/admin/draft-orders/update-line-item.js.map +1 -1
  49. package/dist/api/routes/admin/index.js +21 -19
  50. package/dist/api/routes/admin/index.js.map +1 -1
  51. package/dist/api/routes/admin/notifications/index.js.map +1 -1
  52. package/dist/api/routes/admin/notifications/list-notifications.js.map +1 -1
  53. package/dist/api/routes/admin/notifications/resend-notification.js.map +1 -1
  54. package/dist/api/routes/admin/orders/add-shipping-method.d.ts +1 -1
  55. package/dist/api/routes/admin/orders/add-shipping-method.js.map +1 -1
  56. package/dist/api/routes/admin/orders/create-order.js.map +1 -1
  57. package/dist/api/routes/admin/orders/create-swap.js +7 -3
  58. package/dist/api/routes/admin/orders/create-swap.js.map +1 -1
  59. package/dist/api/routes/admin/orders/index.d.ts +1 -1
  60. package/dist/api/routes/admin/orders/index.js +1 -3
  61. package/dist/api/routes/admin/orders/index.js.map +1 -1
  62. package/dist/api/routes/admin/orders/list-orders.js.map +1 -1
  63. package/dist/api/routes/admin/orders/update-order.js.map +1 -1
  64. package/dist/api/routes/admin/price-lists/add-prices-batch.d.ts +70 -0
  65. package/dist/api/routes/admin/price-lists/add-prices-batch.js +158 -0
  66. package/dist/api/routes/admin/price-lists/add-prices-batch.js.map +1 -0
  67. package/dist/api/routes/admin/price-lists/create-price-list.d.ts +87 -0
  68. package/dist/api/routes/admin/price-lists/create-price-list.js +193 -0
  69. package/dist/api/routes/admin/price-lists/create-price-list.js.map +1 -0
  70. package/dist/api/routes/admin/price-lists/delete-price-list.d.ts +28 -0
  71. package/dist/api/routes/admin/{discounts/remove-valid-product.js → price-lists/delete-price-list.js} +27 -25
  72. package/dist/api/routes/admin/price-lists/delete-price-list.js.map +1 -0
  73. package/dist/api/routes/admin/price-lists/delete-prices-batch.d.ts +43 -0
  74. package/dist/api/routes/{store/carts/update-payment-method.js → admin/price-lists/delete-prices-batch.js} +42 -46
  75. package/dist/api/routes/admin/price-lists/delete-prices-batch.js.map +1 -0
  76. package/dist/api/routes/admin/price-lists/get-price-list.d.ts +22 -0
  77. package/dist/api/routes/admin/{discounts/add-valid-product.js → price-lists/get-price-list.js} +20 -24
  78. package/dist/api/routes/admin/price-lists/get-price-list.js.map +1 -0
  79. package/dist/api/routes/admin/price-lists/index.d.ts +28 -0
  80. package/dist/api/routes/admin/price-lists/index.js +55 -0
  81. package/dist/api/routes/admin/price-lists/index.js.map +1 -0
  82. package/dist/api/routes/admin/price-lists/list-price-list-products.d.ts +74 -0
  83. package/dist/api/routes/admin/price-lists/list-price-list-products.js +287 -0
  84. package/dist/api/routes/admin/price-lists/list-price-list-products.js.map +1 -0
  85. package/dist/api/routes/admin/price-lists/list-price-lists.d.ts +38 -0
  86. package/dist/api/routes/admin/price-lists/list-price-lists.js +197 -0
  87. package/dist/api/routes/admin/price-lists/list-price-lists.js.map +1 -0
  88. package/dist/api/routes/admin/price-lists/update-price-list.d.ts +92 -0
  89. package/dist/api/routes/admin/price-lists/update-price-list.js +211 -0
  90. package/dist/api/routes/admin/price-lists/update-price-list.js.map +1 -0
  91. package/dist/api/routes/admin/products/create-product.d.ts +2 -7
  92. package/dist/api/routes/admin/products/create-product.js +2 -24
  93. package/dist/api/routes/admin/products/create-product.js.map +1 -1
  94. package/dist/api/routes/admin/products/create-variant.d.ts +7 -9
  95. package/dist/api/routes/admin/products/create-variant.js +7 -26
  96. package/dist/api/routes/admin/products/create-variant.js.map +1 -1
  97. package/dist/api/routes/admin/products/index.d.ts +1 -1
  98. package/dist/api/routes/admin/products/index.js +1 -1
  99. package/dist/api/routes/admin/products/index.js.map +1 -1
  100. package/dist/api/routes/admin/products/list-products.d.ts +2 -1
  101. package/dist/api/routes/admin/products/list-products.js +31 -65
  102. package/dist/api/routes/admin/products/list-products.js.map +1 -1
  103. package/dist/api/routes/admin/products/update-product.d.ts +2 -7
  104. package/dist/api/routes/admin/products/update-product.js +2 -24
  105. package/dist/api/routes/admin/products/update-product.js.map +1 -1
  106. package/dist/api/routes/admin/products/update-variant.d.ts +10 -9
  107. package/dist/api/routes/admin/products/update-variant.js +21 -33
  108. package/dist/api/routes/admin/products/update-variant.js.map +1 -1
  109. package/dist/api/routes/admin/regions/index.d.ts +1 -1
  110. package/dist/api/routes/admin/store/get-store.js.map +1 -1
  111. package/dist/api/routes/admin/swaps/index.js +3 -0
  112. package/dist/api/routes/admin/swaps/index.js.map +1 -1
  113. package/dist/api/routes/admin/tax-rates/list-tax-rates.js.map +1 -1
  114. package/dist/api/routes/admin/tax-rates/utils/get-query-config.d.ts +1 -1
  115. package/dist/api/routes/admin/tax-rates/utils/get-query-config.js +4 -2
  116. package/dist/api/routes/admin/tax-rates/utils/get-query-config.js.map +1 -1
  117. package/dist/api/routes/admin/uploads/index.d.ts +1 -1
  118. package/dist/api/routes/store/auth/create-session.js +4 -5
  119. package/dist/api/routes/store/auth/create-session.js.map +1 -1
  120. package/dist/api/routes/store/carts/create-cart.js +8 -5
  121. package/dist/api/routes/store/carts/create-cart.js.map +1 -1
  122. package/dist/api/routes/store/carts/create-line-item.d.ts +1 -1
  123. package/dist/api/routes/store/carts/create-line-item.js +9 -6
  124. package/dist/api/routes/store/carts/create-line-item.js.map +1 -1
  125. package/dist/api/routes/store/carts/index.d.ts +0 -1
  126. package/dist/api/routes/store/carts/index.js +1 -3
  127. package/dist/api/routes/store/carts/index.js.map +1 -1
  128. package/dist/api/routes/store/carts/update-cart.js +7 -7
  129. package/dist/api/routes/store/carts/update-cart.js.map +1 -1
  130. package/dist/api/routes/store/collections/list-collections.d.ts +3 -0
  131. package/dist/api/routes/store/collections/list-collections.js +33 -16
  132. package/dist/api/routes/store/collections/list-collections.js.map +1 -1
  133. package/dist/api/routes/store/customers/create-customer.js +3 -4
  134. package/dist/api/routes/store/customers/create-customer.js.map +1 -1
  135. package/dist/api/routes/store/orders/index.js +0 -2
  136. package/dist/api/routes/store/orders/index.js.map +1 -1
  137. package/dist/api/routes/store/products/get-product.js +17 -5
  138. package/dist/api/routes/store/products/get-product.js.map +1 -1
  139. package/dist/api/routes/store/products/index.d.ts +2 -2
  140. package/dist/api/routes/store/products/list-products.d.ts +2 -2
  141. package/dist/api/routes/store/products/list-products.js +21 -14
  142. package/dist/api/routes/store/products/list-products.js.map +1 -1
  143. package/dist/api/routes/store/products/search.d.ts +1 -1
  144. package/dist/api/routes/store/products/search.js.map +1 -1
  145. package/dist/api/routes/store/regions/list-regions.d.ts +3 -0
  146. package/dist/api/routes/store/regions/list-regions.js +22 -7
  147. package/dist/api/routes/store/regions/list-regions.js.map +1 -1
  148. package/dist/api/routes/store/shipping-options/list-options.js.map +1 -1
  149. package/dist/api/routes/store/swaps/create-swap.js +7 -3
  150. package/dist/api/routes/store/swaps/create-swap.js.map +1 -1
  151. package/dist/api/routes/store/variants/get-variant.js +17 -5
  152. package/dist/api/routes/store/variants/get-variant.js.map +1 -1
  153. package/dist/api/routes/store/variants/list-variants.d.ts +2 -1
  154. package/dist/api/routes/store/variants/list-variants.js +38 -9
  155. package/dist/api/routes/store/variants/list-variants.js.map +1 -1
  156. package/dist/commands/develop.js +2 -2
  157. package/dist/commands/develop.js.map +1 -1
  158. package/dist/controllers/customers/index.d.ts +1 -1
  159. package/dist/controllers/customers/list-customers.d.ts +1 -1
  160. package/dist/controllers/customers/list-customers.js +34 -37
  161. package/dist/controllers/customers/list-customers.js.map +1 -1
  162. package/dist/controllers/products/admin-list-products.d.ts +16 -0
  163. package/dist/controllers/products/admin-list-products.js +103 -0
  164. package/dist/controllers/products/admin-list-products.js.map +1 -0
  165. package/dist/helpers/test-request.js +15 -7
  166. package/dist/helpers/test-request.js.map +1 -1
  167. package/dist/index.d.ts +3 -58
  168. package/dist/index.js +3 -61
  169. package/dist/index.js.map +1 -1
  170. package/dist/interfaces/index.d.ts +1 -0
  171. package/dist/interfaces/index.js +1 -0
  172. package/dist/interfaces/index.js.map +1 -1
  173. package/dist/interfaces/price-selection-strategy.d.ts +50 -0
  174. package/dist/interfaces/price-selection-strategy.js +34 -0
  175. package/dist/interfaces/price-selection-strategy.js.map +1 -0
  176. package/dist/interfaces/tax-service.d.ts +6 -0
  177. package/dist/interfaces/tax-service.js +31 -0
  178. package/dist/interfaces/tax-service.js.map +1 -1
  179. package/dist/interfaces/transaction-base-service.d.ts +23 -0
  180. package/dist/interfaces/transaction-base-service.js +200 -0
  181. package/dist/interfaces/transaction-base-service.js.map +1 -0
  182. package/dist/loaders/api.d.ts +9 -5
  183. package/dist/loaders/api.js +2 -6
  184. package/dist/loaders/api.js.map +1 -1
  185. package/dist/loaders/config.d.ts +3 -0
  186. package/dist/loaders/config.js +47 -0
  187. package/dist/loaders/config.js.map +1 -0
  188. package/dist/loaders/database.d.ts +8 -4
  189. package/dist/loaders/database.js.map +1 -1
  190. package/dist/loaders/defaults.d.ts +4 -3
  191. package/dist/loaders/defaults.js +39 -31
  192. package/dist/loaders/defaults.js.map +1 -1
  193. package/dist/loaders/express.d.ts +7 -4
  194. package/dist/loaders/express.js +7 -5
  195. package/dist/loaders/express.js.map +1 -1
  196. package/dist/loaders/index.d.ts +13 -8
  197. package/dist/loaders/index.js +29 -54
  198. package/dist/loaders/index.js.map +1 -1
  199. package/dist/loaders/logger.d.ts +1 -0
  200. package/dist/loaders/logger.js.map +1 -1
  201. package/dist/loaders/models.d.ts +8 -3
  202. package/dist/loaders/models.js +19 -17
  203. package/dist/loaders/models.js.map +1 -1
  204. package/dist/loaders/passport.d.ts +7 -4
  205. package/dist/loaders/passport.js +23 -21
  206. package/dist/loaders/passport.js.map +1 -1
  207. package/dist/loaders/plugins.d.ts +38 -10
  208. package/dist/loaders/plugins.js +30 -26
  209. package/dist/loaders/plugins.js.map +1 -1
  210. package/dist/loaders/redis.d.ts +8 -5
  211. package/dist/loaders/redis.js +3 -3
  212. package/dist/loaders/redis.js.map +1 -1
  213. package/dist/loaders/repositories.d.ts +7 -3
  214. package/dist/loaders/repositories.js +1 -1
  215. package/dist/loaders/repositories.js.map +1 -1
  216. package/dist/loaders/search-index.d.ts +4 -3
  217. package/dist/loaders/search-index.js.map +1 -1
  218. package/dist/loaders/services.d.ts +10 -5
  219. package/dist/loaders/services.js.map +1 -1
  220. package/dist/loaders/strategies.d.ts +1 -1
  221. package/dist/loaders/subscribers.d.ts +7 -3
  222. package/dist/loaders/subscribers.js.map +1 -1
  223. package/dist/migrations/1646324713514-discount_conditions.d.ts +6 -0
  224. package/dist/migrations/1646324713514-discount_conditions.js +335 -0
  225. package/dist/migrations/1646324713514-discount_conditions.js.map +1 -0
  226. package/dist/migrations/1646915480108-update_money_amount_add_price_list.d.ts +6 -0
  227. package/dist/migrations/1646915480108-update_money_amount_add_price_list.js +143 -0
  228. package/dist/migrations/1646915480108-update_money_amount_add_price_list.js.map +1 -0
  229. package/dist/migrations/1648600574750-add_line_item_adjustments.d.ts +6 -0
  230. package/dist/migrations/1648600574750-add_line_item_adjustments.js +101 -0
  231. package/dist/migrations/1648600574750-add_line_item_adjustments.js.map +1 -0
  232. package/dist/migrations/1648641130007-tax_line_constraints.d.ts +6 -0
  233. package/dist/migrations/1648641130007-tax_line_constraints.js +77 -0
  234. package/dist/migrations/1648641130007-tax_line_constraints.js.map +1 -0
  235. package/dist/migrations/1649775522087-add_batch_job_model.d.ts +6 -0
  236. package/dist/migrations/1649775522087-add_batch_job_model.js +77 -0
  237. package/dist/migrations/1649775522087-add_batch_job_model.js.map +1 -0
  238. package/dist/models/batch-job.d.ts +58 -0
  239. package/dist/models/batch-job.js +119 -0
  240. package/dist/models/batch-job.js.map +1 -0
  241. package/dist/models/country.d.ts +1 -1
  242. package/dist/models/country.js +1 -1
  243. package/dist/models/country.js.map +1 -1
  244. package/dist/models/customer-group.d.ts +3 -1
  245. package/dist/models/customer-group.js +9 -13
  246. package/dist/models/customer-group.js.map +1 -1
  247. package/dist/models/discount-condition-customer-group.d.ts +39 -0
  248. package/dist/models/discount-condition-customer-group.js +84 -0
  249. package/dist/models/discount-condition-customer-group.js.map +1 -0
  250. package/dist/models/discount-condition-product-collection.d.ts +39 -0
  251. package/dist/models/discount-condition-product-collection.js +84 -0
  252. package/dist/models/discount-condition-product-collection.js.map +1 -0
  253. package/dist/models/discount-condition-product-tag.d.ts +39 -0
  254. package/dist/models/discount-condition-product-tag.js +84 -0
  255. package/dist/models/discount-condition-product-tag.js.map +1 -0
  256. package/dist/models/discount-condition-product-type.d.ts +39 -0
  257. package/dist/models/discount-condition-product-type.js +84 -0
  258. package/dist/models/discount-condition-product-type.js.map +1 -0
  259. package/dist/models/discount-condition-product.d.ts +39 -0
  260. package/dist/models/discount-condition-product.js +84 -0
  261. package/dist/models/discount-condition-product.js.map +1 -0
  262. package/dist/models/discount-condition.d.ts +68 -0
  263. package/dist/models/discount-condition.js +211 -0
  264. package/dist/models/discount-condition.js.map +1 -0
  265. package/dist/models/discount-rule.d.ts +5 -5
  266. package/dist/models/discount-rule.js +6 -17
  267. package/dist/models/discount-rule.js.map +1 -1
  268. package/dist/models/discount.js.map +1 -1
  269. package/dist/models/index.d.ts +66 -0
  270. package/dist/models/index.js +79 -0
  271. package/dist/models/index.js.map +1 -0
  272. package/dist/models/line-item-adjustment.d.ts +13 -0
  273. package/dist/models/line-item-adjustment.js +79 -0
  274. package/dist/models/line-item-adjustment.js.map +1 -0
  275. package/dist/models/line-item-tax-line.js +2 -1
  276. package/dist/models/line-item-tax-line.js.map +1 -1
  277. package/dist/models/line-item.d.ts +2 -0
  278. package/dist/models/line-item.js +5 -0
  279. package/dist/models/line-item.js.map +1 -1
  280. package/dist/models/money-amount.d.ts +10 -3
  281. package/dist/models/money-amount.js +25 -5
  282. package/dist/models/money-amount.js.map +1 -1
  283. package/dist/models/price-list.d.ts +57 -0
  284. package/dist/models/price-list.js +146 -0
  285. package/dist/models/price-list.js.map +1 -0
  286. package/dist/models/product-variant.js +9 -3
  287. package/dist/models/product-variant.js.map +1 -1
  288. package/dist/models/shipping-method-tax-line.js +2 -1
  289. package/dist/models/shipping-method-tax-line.js.map +1 -1
  290. package/dist/models/swap.d.ts +4 -4
  291. package/dist/models/swap.js +23 -23
  292. package/dist/models/swap.js.map +1 -1
  293. package/dist/repositories/cart.d.ts +2 -2
  294. package/dist/repositories/cart.js.map +1 -1
  295. package/dist/repositories/customer.d.ts +1 -1
  296. package/dist/repositories/customer.js +7 -9
  297. package/dist/repositories/customer.js.map +1 -1
  298. package/dist/repositories/discount-condition.d.ts +38 -0
  299. package/dist/repositories/discount-condition.js +397 -0
  300. package/dist/repositories/discount-condition.js.map +1 -0
  301. package/dist/repositories/line-item-adjustment.d.ts +4 -0
  302. package/dist/repositories/line-item-adjustment.js +38 -0
  303. package/dist/repositories/line-item-adjustment.js.map +1 -0
  304. package/dist/repositories/line-item-tax-line.d.ts +2 -0
  305. package/dist/repositories/line-item-tax-line.js +80 -0
  306. package/dist/repositories/line-item-tax-line.js.map +1 -1
  307. package/dist/repositories/line-item.js +1 -0
  308. package/dist/repositories/line-item.js.map +1 -1
  309. package/dist/repositories/money-amount.d.ts +8 -2
  310. package/dist/repositories/money-amount.js +171 -2
  311. package/dist/repositories/money-amount.js.map +1 -1
  312. package/dist/repositories/order.d.ts +1 -1
  313. package/dist/repositories/price-list.d.ts +11 -0
  314. package/dist/repositories/price-list.js +247 -0
  315. package/dist/repositories/price-list.js.map +1 -0
  316. package/dist/repositories/product.d.ts +2 -0
  317. package/dist/repositories/product.js +35 -17
  318. package/dist/repositories/product.js.map +1 -1
  319. package/dist/repositories/shipping-method-tax-line.d.ts +2 -0
  320. package/dist/repositories/shipping-method-tax-line.js +80 -0
  321. package/dist/repositories/shipping-method-tax-line.js.map +1 -1
  322. package/dist/scripts/discount-rule-migration.d.ts +4 -0
  323. package/dist/scripts/discount-rule-migration.js +177 -0
  324. package/dist/scripts/discount-rule-migration.js.map +1 -0
  325. package/dist/scripts/line-item-adjustment-migration.d.ts +4 -0
  326. package/dist/scripts/line-item-adjustment-migration.js +173 -0
  327. package/dist/scripts/line-item-adjustment-migration.js.map +1 -0
  328. package/dist/services/cart.d.ts +64 -53
  329. package/dist/services/cart.js +1297 -1410
  330. package/dist/services/cart.js.map +1 -1
  331. package/dist/services/customer.js +4 -2
  332. package/dist/services/customer.js.map +1 -1
  333. package/dist/services/discount-condition.d.ts +31 -0
  334. package/dist/services/discount-condition.js +223 -0
  335. package/dist/services/discount-condition.js.map +1 -0
  336. package/dist/services/discount.d.ts +46 -58
  337. package/dist/services/discount.js +249 -140
  338. package/dist/services/discount.js.map +1 -1
  339. package/dist/services/draft-order.js +1 -0
  340. package/dist/services/draft-order.js.map +1 -1
  341. package/dist/services/fulfillment-provider.js +23 -17
  342. package/dist/services/fulfillment-provider.js.map +1 -1
  343. package/dist/services/invite.d.ts +4 -2
  344. package/dist/services/invite.js +11 -9
  345. package/dist/services/invite.js.map +1 -1
  346. package/dist/services/line-item-adjustment.d.ts +87 -0
  347. package/dist/services/line-item-adjustment.js +436 -0
  348. package/dist/services/line-item-adjustment.js.map +1 -0
  349. package/dist/services/line-item.d.ts +48 -40
  350. package/dist/services/line-item.js +226 -193
  351. package/dist/services/line-item.js.map +1 -1
  352. package/dist/services/order.js +4 -4
  353. package/dist/services/order.js.map +1 -1
  354. package/dist/services/payment-provider.js +23 -17
  355. package/dist/services/payment-provider.js.map +1 -1
  356. package/dist/services/price-list.d.ts +100 -0
  357. package/dist/services/price-list.js +626 -0
  358. package/dist/services/price-list.js.map +1 -0
  359. package/dist/services/product-variant.d.ts +40 -16
  360. package/dist/services/product-variant.js +259 -109
  361. package/dist/services/product-variant.js.map +1 -1
  362. package/dist/services/product.d.ts +22 -4
  363. package/dist/services/product.js +238 -50
  364. package/dist/services/product.js.map +1 -1
  365. package/dist/services/region.js +8 -4
  366. package/dist/services/region.js.map +1 -1
  367. package/dist/services/return.js +0 -1
  368. package/dist/services/return.js.map +1 -1
  369. package/dist/services/shipping-option.d.ts +2 -2
  370. package/dist/services/shipping-option.js +7 -4
  371. package/dist/services/shipping-option.js.map +1 -1
  372. package/dist/services/swap.d.ts +4 -1
  373. package/dist/services/swap.js +29 -16
  374. package/dist/services/swap.js.map +1 -1
  375. package/dist/services/system-tax.d.ts +2 -3
  376. package/dist/services/system-tax.js +2 -2
  377. package/dist/services/system-tax.js.map +1 -1
  378. package/dist/services/tax-provider.d.ts +2 -0
  379. package/dist/services/tax-provider.js +96 -7
  380. package/dist/services/tax-provider.js.map +1 -1
  381. package/dist/services/tax-rate.d.ts +3 -3
  382. package/dist/services/tax-rate.js +1 -1
  383. package/dist/services/tax-rate.js.map +1 -1
  384. package/dist/services/totals.d.ts +9 -8
  385. package/dist/services/totals.js +41 -88
  386. package/dist/services/totals.js.map +1 -1
  387. package/dist/strategies/price-selection.d.ts +13 -0
  388. package/dist/strategies/price-selection.js +185 -0
  389. package/dist/strategies/price-selection.js.map +1 -0
  390. package/dist/subscribers/order.js +1 -7
  391. package/dist/subscribers/order.js.map +1 -1
  392. package/dist/types/batch-job.d.ts +6 -0
  393. package/dist/types/batch-job.js +11 -0
  394. package/dist/types/batch-job.js.map +1 -0
  395. package/dist/types/cart.d.ts +1 -1
  396. package/dist/types/common.d.ts +20 -2
  397. package/dist/types/common.js.map +1 -1
  398. package/dist/types/discount.d.ts +70 -1
  399. package/dist/types/discount.js +129 -5
  400. package/dist/types/discount.js.map +1 -1
  401. package/dist/types/global.d.ts +34 -0
  402. package/dist/types/global.js +3 -0
  403. package/dist/types/global.js.map +1 -0
  404. package/dist/types/line-item-adjustment.d.ts +9 -0
  405. package/dist/types/line-item-adjustment.js +50 -0
  406. package/dist/types/line-item-adjustment.js.map +1 -0
  407. package/dist/types/price-list.d.ts +71 -0
  408. package/dist/types/price-list.js +157 -0
  409. package/dist/types/price-list.js.map +1 -0
  410. package/dist/types/price-selection.d.ts +5 -0
  411. package/dist/types/price-selection.js +35 -0
  412. package/dist/types/price-selection.js.map +1 -0
  413. package/dist/types/product-variant.d.ts +24 -1
  414. package/dist/types/product-variant.js +65 -1
  415. package/dist/types/product-variant.js.map +1 -1
  416. package/dist/types/product.d.ts +16 -0
  417. package/dist/types/product.js +86 -1
  418. package/dist/types/product.js.map +1 -1
  419. package/dist/types/validators/exactly-one.d.ts +6 -0
  420. package/dist/types/validators/exactly-one.js +37 -0
  421. package/dist/types/validators/exactly-one.js.map +1 -0
  422. package/dist/utils/build-query.d.ts +8 -0
  423. package/dist/utils/build-query.js +114 -0
  424. package/dist/utils/build-query.js.map +1 -0
  425. package/dist/utils/date-helpers.d.ts +2 -0
  426. package/dist/utils/date-helpers.js +15 -0
  427. package/dist/utils/date-helpers.js.map +1 -0
  428. package/dist/utils/get-query-config.d.ts +11 -0
  429. package/dist/utils/get-query-config.js +88 -0
  430. package/dist/utils/get-query-config.js.map +1 -0
  431. package/dist/utils/index.d.ts +3 -0
  432. package/dist/utils/index.js +16 -0
  433. package/dist/utils/index.js.map +1 -0
  434. package/dist/utils/set-metadata.d.ts +9 -0
  435. package/dist/utils/set-metadata.js +72 -0
  436. package/dist/utils/set-metadata.js.map +1 -0
  437. package/dist/utils/validate-id.d.ts +4 -0
  438. package/dist/utils/validate-id.js +47 -0
  439. package/dist/utils/validate-id.js.map +1 -0
  440. package/package.json +7 -8
  441. package/dist/api/routes/admin/discounts/add-valid-product.d.ts +0 -23
  442. package/dist/api/routes/admin/discounts/add-valid-product.js.map +0 -1
  443. package/dist/api/routes/admin/discounts/remove-valid-product.d.ts +0 -23
  444. package/dist/api/routes/admin/discounts/remove-valid-product.js.map +0 -1
  445. package/dist/api/routes/store/carts/update-payment-method.d.ts +0 -38
  446. package/dist/api/routes/store/carts/update-payment-method.js.map +0 -1
  447. package/dist/config/index.d.ts +0 -14
  448. package/dist/config/index.js +0 -40
  449. package/dist/config/index.js.map +0 -1
  450. package/yarn-error.log +0 -6769
@@ -103,18 +103,23 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
103
103
  Object.defineProperty(exports, "__esModule", { value: true });
104
104
  var lodash_1 = __importDefault(require("lodash"));
105
105
  var medusa_core_utils_1 = require("medusa-core-utils");
106
- var medusa_interfaces_1 = require("medusa-interfaces");
106
+ var typeorm_1 = require("typeorm");
107
+ var interfaces_1 = require("../interfaces");
108
+ var utils_1 = require("../utils");
107
109
  /* Provides layer to manipulate carts.
108
110
  * @implements BaseService
109
111
  */
110
112
  var CartService = /** @class */ (function (_super) {
111
113
  __extends(CartService, _super);
112
114
  function CartService(_a) {
113
- var manager = _a.manager, cartRepository = _a.cartRepository, shippingMethodRepository = _a.shippingMethodRepository, eventBusService = _a.eventBusService, paymentProviderService = _a.paymentProviderService, productService = _a.productService, productVariantService = _a.productVariantService, taxProviderService = _a.taxProviderService, regionService = _a.regionService, lineItemService = _a.lineItemService, shippingOptionService = _a.shippingOptionService, customerService = _a.customerService, discountService = _a.discountService, giftCardService = _a.giftCardService, totalsService = _a.totalsService, addressRepository = _a.addressRepository, paymentSessionRepository = _a.paymentSessionRepository, inventoryService = _a.inventoryService, customShippingOptionService = _a.customShippingOptionService;
114
- var _this = _super.call(this) || this;
115
+ var manager = _a.manager, cartRepository = _a.cartRepository, shippingMethodRepository = _a.shippingMethodRepository, lineItemRepository = _a.lineItemRepository, eventBusService = _a.eventBusService, paymentProviderService = _a.paymentProviderService, productService = _a.productService, productVariantService = _a.productVariantService, taxProviderService = _a.taxProviderService, regionService = _a.regionService, lineItemService = _a.lineItemService, shippingOptionService = _a.shippingOptionService, customerService = _a.customerService, discountService = _a.discountService, giftCardService = _a.giftCardService, totalsService = _a.totalsService, addressRepository = _a.addressRepository, paymentSessionRepository = _a.paymentSessionRepository, inventoryService = _a.inventoryService, customShippingOptionService = _a.customShippingOptionService, lineItemAdjustmentService = _a.lineItemAdjustmentService, priceSelectionStrategy = _a.priceSelectionStrategy;
116
+ var _this =
117
+ // eslint-disable-next-line prefer-rest-params
118
+ _super.call(this, arguments[0]) || this;
115
119
  _this.manager_ = manager;
116
120
  _this.shippingMethodRepository_ = shippingMethodRepository;
117
121
  _this.cartRepository_ = cartRepository;
122
+ _this.lineItemRepository_ = lineItemRepository;
118
123
  _this.eventBus_ = eventBusService;
119
124
  _this.productVariantService_ = productVariantService;
120
125
  _this.productService_ = productService;
@@ -131,36 +136,10 @@ var CartService = /** @class */ (function (_super) {
131
136
  _this.inventoryService_ = inventoryService;
132
137
  _this.customShippingOptionService_ = customShippingOptionService;
133
138
  _this.taxProviderService_ = taxProviderService;
139
+ _this.lineItemAdjustmentService_ = lineItemAdjustmentService;
140
+ _this.priceSelectionStrategy_ = priceSelectionStrategy;
134
141
  return _this;
135
142
  }
136
- CartService.prototype.withTransaction = function (transactionManager) {
137
- if (!transactionManager) {
138
- return this;
139
- }
140
- var cloned = new CartService({
141
- manager: transactionManager,
142
- taxProviderService: this.taxProviderService_,
143
- cartRepository: this.cartRepository_,
144
- eventBusService: this.eventBus_,
145
- paymentProviderService: this.paymentProviderService_,
146
- paymentSessionRepository: this.paymentSessionRepository_,
147
- shippingMethodRepository: this.shippingMethodRepository_,
148
- productService: this.productService_,
149
- productVariantService: this.productVariantService_,
150
- regionService: this.regionService_,
151
- lineItemService: this.lineItemService_,
152
- shippingOptionService: this.shippingOptionService_,
153
- customerService: this.customerService_,
154
- discountService: this.discountService_,
155
- totalsService: this.totalsService_,
156
- addressRepository: this.addressRepository_,
157
- giftCardService: this.giftCardService_,
158
- inventoryService: this.inventoryService_,
159
- customShippingOptionService: this.customShippingOptionService_,
160
- });
161
- cloned.transactionManager_ = transactionManager;
162
- return cloned;
163
- };
164
143
  CartService.prototype.transformQueryForTotals_ = function (config) {
165
144
  var select = config.select, relations = config.relations;
166
145
  if (!select) {
@@ -188,7 +167,6 @@ var CartService = /** @class */ (function (_super) {
188
167
  relationSet.add("gift_cards");
189
168
  relationSet.add("discounts");
190
169
  relationSet.add("discounts.rule");
191
- relationSet.add("discounts.rule.valid_for");
192
170
  // relationSet.add("discounts.parent_discount")
193
171
  // relationSet.add("discounts.parent_discount.rule")
194
172
  // relationSet.add("discounts.parent_discount.regions")
@@ -288,13 +266,21 @@ var CartService = /** @class */ (function (_super) {
288
266
  CartService.prototype.list = function (selector, config) {
289
267
  if (config === void 0) { config = {}; }
290
268
  return __awaiter(this, void 0, void 0, function () {
291
- var cartRepo, query;
269
+ var _this = this;
292
270
  return __generator(this, function (_a) {
293
271
  switch (_a.label) {
294
- case 0:
295
- cartRepo = this.manager_.getCustomRepository(this.cartRepository_);
296
- query = this.buildQuery_(selector, config);
297
- return [4 /*yield*/, cartRepo.find(query)];
272
+ case 0: return [4 /*yield*/, this.atomicPhase_(function (transactionManager) { return __awaiter(_this, void 0, void 0, function () {
273
+ var cartRepo, query;
274
+ return __generator(this, function (_a) {
275
+ switch (_a.label) {
276
+ case 0:
277
+ cartRepo = transactionManager.getCustomRepository(this.cartRepository_);
278
+ query = (0, utils_1.buildQuery)(selector, config);
279
+ return [4 /*yield*/, cartRepo.find(query)];
280
+ case 1: return [2 /*return*/, _a.sent()];
281
+ }
282
+ });
283
+ }); })];
298
284
  case 1: return [2 /*return*/, _a.sent()];
299
285
  }
300
286
  });
@@ -311,33 +297,41 @@ var CartService = /** @class */ (function (_super) {
311
297
  if (options === void 0) { options = {}; }
312
298
  if (totalsConfig === void 0) { totalsConfig = {}; }
313
299
  return __awaiter(this, void 0, void 0, function () {
314
- var cartRepo, validatedId, _a, select, relations, totalsToSelect, query, rels, raw;
315
- return __generator(this, function (_b) {
316
- switch (_b.label) {
317
- case 0:
318
- cartRepo = this.manager_.getCustomRepository(this.cartRepository_);
319
- validatedId = this.validateId_(cartId);
320
- _a = this.transformQueryForTotals_(options), select = _a.select, relations = _a.relations, totalsToSelect = _a.totalsToSelect;
321
- query = this.buildQuery_({ id: validatedId }, __assign(__assign({}, options), { select: select, relations: relations }));
322
- if (relations && relations.length > 0) {
323
- query.relations = relations;
324
- }
325
- if (select && select.length > 0) {
326
- query.select = select;
327
- }
328
- else {
329
- delete query.select;
330
- }
331
- rels = query.relations;
332
- delete query.relations;
333
- return [4 /*yield*/, cartRepo.findOneWithRelations(rels, query)];
334
- case 1:
335
- raw = _b.sent();
336
- if (!raw) {
337
- throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.NOT_FOUND, "Cart with ".concat(cartId, " was not found"));
338
- }
339
- return [4 /*yield*/, this.decorateTotals_(raw, totalsToSelect, totalsConfig)];
340
- case 2: return [2 /*return*/, _b.sent()];
300
+ var _this = this;
301
+ return __generator(this, function (_a) {
302
+ switch (_a.label) {
303
+ case 0: return [4 /*yield*/, this.atomicPhase_(function (transactionManager) { return __awaiter(_this, void 0, void 0, function () {
304
+ var cartRepo, validatedId, _a, select, relations, totalsToSelect, query, queryRelations, raw;
305
+ return __generator(this, function (_b) {
306
+ switch (_b.label) {
307
+ case 0:
308
+ cartRepo = transactionManager.getCustomRepository(this.cartRepository_);
309
+ validatedId = (0, utils_1.validateId)(cartId);
310
+ _a = this.transformQueryForTotals_(options), select = _a.select, relations = _a.relations, totalsToSelect = _a.totalsToSelect;
311
+ query = (0, utils_1.buildQuery)({ id: validatedId }, __assign(__assign({}, options), { select: select, relations: relations }));
312
+ if (relations && relations.length > 0) {
313
+ query.relations = relations;
314
+ }
315
+ if (select && select.length > 0) {
316
+ query.select = select;
317
+ }
318
+ else {
319
+ query.select = undefined;
320
+ }
321
+ queryRelations = query.relations;
322
+ query.relations = undefined;
323
+ return [4 /*yield*/, cartRepo.findOneWithRelations(queryRelations, query)];
324
+ case 1:
325
+ raw = _b.sent();
326
+ if (!raw) {
327
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.NOT_FOUND, "Cart with ".concat(cartId, " was not found"));
328
+ }
329
+ return [4 /*yield*/, this.decorateTotals_(raw, totalsToSelect, totalsConfig)];
330
+ case 2: return [2 /*return*/, _b.sent()];
331
+ }
332
+ });
333
+ }); })];
334
+ case 1: return [2 /*return*/, _a.sent()];
341
335
  }
342
336
  });
343
337
  });
@@ -351,101 +345,105 @@ var CartService = /** @class */ (function (_super) {
351
345
  return __awaiter(this, void 0, void 0, function () {
352
346
  var _this = this;
353
347
  return __generator(this, function (_a) {
354
- return [2 /*return*/, this.atomicPhase_(function (manager) { return __awaiter(_this, void 0, void 0, function () {
355
- var cartRepo, addressRepo, region_id, region, regCountries, toCreate, customer, addr, remainingFields, remainingFields_1, remainingFields_1_1, k, inProgress, result;
356
- var e_2, _a;
357
- return __generator(this, function (_b) {
358
- switch (_b.label) {
359
- case 0:
360
- cartRepo = manager.getCustomRepository(this.cartRepository_);
361
- addressRepo = manager.getCustomRepository(this.addressRepository_);
362
- region_id = data.region_id;
363
- if (!region_id) {
364
- throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.INVALID_DATA, "A region_id must be provided when creating a cart");
365
- }
366
- return [4 /*yield*/, this.regionService_.retrieve(region_id, {
348
+ switch (_a.label) {
349
+ case 0: return [4 /*yield*/, this.atomicPhase_(function (transactionManager) { return __awaiter(_this, void 0, void 0, function () {
350
+ var cartRepo, addressRepo, region_id, rawCart, customer, region, regCountries, addr, remainingFields, remainingFields_1, remainingFields_1_1, remainingField, createdCart, cart;
351
+ var e_2, _a;
352
+ return __generator(this, function (_b) {
353
+ switch (_b.label) {
354
+ case 0:
355
+ cartRepo = transactionManager.getCustomRepository(this.cartRepository_);
356
+ addressRepo = transactionManager.getCustomRepository(this.addressRepository_);
357
+ region_id = data.region_id;
358
+ if (!region_id) {
359
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.INVALID_DATA, "A region_id must be provided when creating a cart");
360
+ }
361
+ rawCart = {};
362
+ if (!data.email) return [3 /*break*/, 2];
363
+ return [4 /*yield*/, this.createOrFetchUserFromEmail_(data.email)];
364
+ case 1:
365
+ customer = _b.sent();
366
+ rawCart.customer = customer;
367
+ rawCart.customer_id = customer.id;
368
+ rawCart.email = customer.email;
369
+ _b.label = 2;
370
+ case 2: return [4 /*yield*/, this.regionService_
371
+ .withTransaction(transactionManager)
372
+ .retrieve(region_id, {
367
373
  relations: ["countries"],
368
374
  })];
369
- case 1:
370
- region = _b.sent();
371
- regCountries = region.countries.map(function (_a) {
372
- var iso_2 = _a.iso_2;
373
- return iso_2;
374
- });
375
- toCreate = {};
376
- toCreate.region_id = region.id;
377
- if (!(typeof data.email !== "undefined")) return [3 /*break*/, 3];
378
- return [4 /*yield*/, this.createOrFetchUserFromEmail_(data.email)];
379
- case 2:
380
- customer = _b.sent();
381
- toCreate.customer = customer;
382
- toCreate.customer_id = customer.id;
383
- toCreate.email = customer.email;
384
- _b.label = 3;
385
- case 3:
386
- if (!(typeof data.shipping_address_id !== "undefined")) return [3 /*break*/, 5];
387
- return [4 /*yield*/, addressRepo.findOne(data.shipping_address_id)];
388
- case 4:
389
- addr = _b.sent();
390
- if (addr && !regCountries.includes(addr.country_code)) {
391
- throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.NOT_ALLOWED, "Shipping country not in region");
392
- }
393
- toCreate.shipping_address = addr;
394
- _b.label = 5;
395
- case 5:
396
- if (!data.shipping_address) {
375
+ case 3:
376
+ region = _b.sent();
377
+ regCountries = region.countries.map(function (_a) {
378
+ var iso_2 = _a.iso_2;
379
+ return iso_2;
380
+ });
381
+ rawCart.region_id = region.id;
382
+ if (!(!data.shipping_address && !data.shipping_address_id)) return [3 /*break*/, 4];
397
383
  if (region.countries.length === 1) {
398
- // Preselect the country if the region only has 1
399
- // and create address entity
400
- toCreate.shipping_address = addressRepo.create({
384
+ rawCart.shipping_address = addressRepo.create({
401
385
  country_code: regCountries[0],
402
386
  });
403
387
  }
404
- }
405
- else {
406
- if (!regCountries.includes(data.shipping_address.country_code)) {
388
+ return [3 /*break*/, 6];
389
+ case 4:
390
+ if (data.shipping_address) {
391
+ if (!regCountries.includes(data.shipping_address.country_code)) {
392
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.NOT_ALLOWED, "Shipping country not in region");
393
+ }
394
+ rawCart.shipping_address = data.shipping_address;
395
+ }
396
+ if (!data.shipping_address_id) return [3 /*break*/, 6];
397
+ return [4 /*yield*/, addressRepo.findOne(data.shipping_address_id)];
398
+ case 5:
399
+ addr = _b.sent();
400
+ if (addr && !regCountries.includes(addr.country_code)) {
407
401
  throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.NOT_ALLOWED, "Shipping country not in region");
408
402
  }
409
- toCreate.shipping_address = data.shipping_address;
410
- }
411
- remainingFields = [
412
- "billing_address_id",
413
- "context",
414
- "type",
415
- "metadata",
416
- "discounts",
417
- "gift_cards",
418
- ];
419
- try {
420
- for (remainingFields_1 = __values(remainingFields), remainingFields_1_1 = remainingFields_1.next(); !remainingFields_1_1.done; remainingFields_1_1 = remainingFields_1.next()) {
421
- k = remainingFields_1_1.value;
422
- if (typeof data[k] !== "undefined" && k !== "object") {
423
- toCreate[k] = data[k];
403
+ rawCart.shipping_address_id = data.shipping_address_id;
404
+ _b.label = 6;
405
+ case 6:
406
+ remainingFields = [
407
+ "billing_address_id",
408
+ "context",
409
+ "type",
410
+ "metadata",
411
+ "discounts",
412
+ "gift_cards",
413
+ ];
414
+ try {
415
+ for (remainingFields_1 = __values(remainingFields), remainingFields_1_1 = remainingFields_1.next(); !remainingFields_1_1.done; remainingFields_1_1 = remainingFields_1.next()) {
416
+ remainingField = remainingFields_1_1.value;
417
+ if (typeof data[remainingField] !== "undefined" &&
418
+ remainingField !== "object") {
419
+ rawCart[remainingField] = data[remainingField];
420
+ }
424
421
  }
425
422
  }
426
- }
427
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
428
- finally {
429
- try {
430
- if (remainingFields_1_1 && !remainingFields_1_1.done && (_a = remainingFields_1.return)) _a.call(remainingFields_1);
423
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
424
+ finally {
425
+ try {
426
+ if (remainingFields_1_1 && !remainingFields_1_1.done && (_a = remainingFields_1.return)) _a.call(remainingFields_1);
427
+ }
428
+ finally { if (e_2) throw e_2.error; }
431
429
  }
432
- finally { if (e_2) throw e_2.error; }
433
- }
434
- inProgress = cartRepo.create(toCreate);
435
- return [4 /*yield*/, cartRepo.save(inProgress)];
436
- case 6:
437
- result = _b.sent();
438
- return [4 /*yield*/, this.eventBus_
439
- .withTransaction(manager)
440
- .emit(CartService.Events.CREATED, {
441
- id: result.id,
442
- })];
443
- case 7:
444
- _b.sent();
445
- return [2 /*return*/, result];
446
- }
447
- });
448
- }); })];
430
+ createdCart = cartRepo.create(rawCart);
431
+ return [4 /*yield*/, cartRepo.save(createdCart)];
432
+ case 7:
433
+ cart = _b.sent();
434
+ return [4 /*yield*/, this.eventBus_
435
+ .withTransaction(transactionManager)
436
+ .emit(CartService.Events.CREATED, {
437
+ id: cart.id,
438
+ })];
439
+ case 8:
440
+ _b.sent();
441
+ return [2 /*return*/, cart];
442
+ }
443
+ });
444
+ }); })];
445
+ case 1: return [2 /*return*/, _a.sent()];
446
+ }
449
447
  });
450
448
  });
451
449
  };
@@ -459,102 +457,72 @@ var CartService = /** @class */ (function (_super) {
459
457
  return __awaiter(this, void 0, void 0, function () {
460
458
  var _this = this;
461
459
  return __generator(this, function (_a) {
462
- return [2 /*return*/, this.atomicPhase_(function (manager) { return __awaiter(_this, void 0, void 0, function () {
463
- var cart, lineItem, _a, _b, method, e_3_1, _c, _d, itm, e_4_1, result;
464
- var e_3, _e, e_4, _f;
465
- return __generator(this, function (_g) {
466
- switch (_g.label) {
467
- case 0: return [4 /*yield*/, this.retrieve(cartId, {
468
- relations: [
469
- "items",
470
- "items.variant",
471
- "items.variant.product",
472
- "payment_sessions",
473
- ],
474
- })];
475
- case 1:
476
- cart = _g.sent();
477
- lineItem = cart.items.find(function (li) { return li.id === lineItemId; });
478
- if (!lineItem) {
479
- return [2 /*return*/, cart];
480
- }
481
- if (!(cart.shipping_methods && cart.shipping_methods.length)) return [3 /*break*/, 9];
482
- _g.label = 2;
483
- case 2:
484
- _g.trys.push([2, 7, 8, 9]);
485
- _a = __values(cart.shipping_methods), _b = _a.next();
486
- _g.label = 3;
487
- case 3:
488
- if (!!_b.done) return [3 /*break*/, 6];
489
- method = _b.value;
490
- return [4 /*yield*/, this.shippingOptionService_
491
- .withTransaction(manager)
492
- .deleteShippingMethod(method)];
493
- case 4:
494
- _g.sent();
495
- _g.label = 5;
496
- case 5:
497
- _b = _a.next();
498
- return [3 /*break*/, 3];
499
- case 6: return [3 /*break*/, 9];
500
- case 7:
501
- e_3_1 = _g.sent();
502
- e_3 = { error: e_3_1 };
503
- return [3 /*break*/, 9];
504
- case 8:
505
- try {
506
- if (_b && !_b.done && (_e = _a.return)) _e.call(_a);
507
- }
508
- finally { if (e_3) throw e_3.error; }
509
- return [7 /*endfinally*/];
510
- case 9:
511
- _g.trys.push([9, 14, 15, 16]);
512
- _c = __values(cart.items), _d = _c.next();
513
- _g.label = 10;
514
- case 10:
515
- if (!!_d.done) return [3 /*break*/, 13];
516
- itm = _d.value;
517
- return [4 /*yield*/, this.lineItemService_.withTransaction(manager).update(itm.id, {
518
- has_shipping: false,
460
+ switch (_a.label) {
461
+ case 0: return [4 /*yield*/, this.atomicPhase_(function (transactionManager) { return __awaiter(_this, void 0, void 0, function () {
462
+ var cart, lineItem, lineItemRepository, result;
463
+ var _a;
464
+ return __generator(this, function (_b) {
465
+ switch (_b.label) {
466
+ case 0: return [4 /*yield*/, this.retrieve(cartId, {
467
+ relations: [
468
+ "items",
469
+ "items.variant",
470
+ "items.variant.product",
471
+ "payment_sessions",
472
+ ],
519
473
  })];
520
- case 11:
521
- _g.sent();
522
- _g.label = 12;
523
- case 12:
524
- _d = _c.next();
525
- return [3 /*break*/, 10];
526
- case 13: return [3 /*break*/, 16];
527
- case 14:
528
- e_4_1 = _g.sent();
529
- e_4 = { error: e_4_1 };
530
- return [3 /*break*/, 16];
531
- case 15:
532
- try {
533
- if (_d && !_d.done && (_f = _c.return)) _f.call(_c);
534
- }
535
- finally { if (e_4) throw e_4.error; }
536
- return [7 /*endfinally*/];
537
- case 16: return [4 /*yield*/, this.lineItemService_.withTransaction(manager).delete(lineItem.id)];
538
- case 17:
539
- _g.sent();
540
- return [4 /*yield*/, this.retrieve(cartId)
474
+ case 1:
475
+ cart = _b.sent();
476
+ lineItem = cart.items.find(function (item) { return item.id === lineItemId; });
477
+ if (!lineItem) {
478
+ return [2 /*return*/, cart];
479
+ }
480
+ if (!((_a = cart.shipping_methods) === null || _a === void 0 ? void 0 : _a.length)) return [3 /*break*/, 3];
481
+ return [4 /*yield*/, this.shippingOptionService_
482
+ .withTransaction(transactionManager)
483
+ .deleteShippingMethods(cart.shipping_methods)];
484
+ case 2:
485
+ _b.sent();
486
+ _b.label = 3;
487
+ case 3:
488
+ lineItemRepository = transactionManager.getCustomRepository(this.lineItemRepository_);
489
+ return [4 /*yield*/, lineItemRepository.update({
490
+ id: (0, typeorm_1.In)(cart.items.map(function (item) { return item.id; })),
491
+ }, {
492
+ has_shipping: false,
493
+ })];
494
+ case 4:
495
+ _b.sent();
496
+ return [4 /*yield*/, this.lineItemService_
497
+ .withTransaction(transactionManager)
498
+ .delete(lineItem.id)];
499
+ case 5:
500
+ _b.sent();
501
+ return [4 /*yield*/, this.retrieve(cartId, {
502
+ relations: ["items", "discounts", "discounts.rule"],
503
+ })];
504
+ case 6:
505
+ result = _b.sent();
506
+ return [4 /*yield*/, this.refreshAdjustments_(result)
507
+ // Notify subscribers
508
+ ];
509
+ case 7:
510
+ _b.sent();
541
511
  // Notify subscribers
542
- ];
543
- case 18:
544
- result = _g.sent();
545
- // Notify subscribers
546
- return [4 /*yield*/, this.eventBus_
547
- .withTransaction(manager)
548
- .emit(CartService.Events.UPDATED, {
549
- id: result.id,
550
- })];
551
- case 19:
552
- // Notify subscribers
553
- _g.sent();
554
- return [2 /*return*/, result];
555
- }
556
- });
557
- }); })];
512
+ return [4 /*yield*/, this.eventBus_
513
+ .withTransaction(transactionManager)
514
+ .emit(CartService.Events.UPDATED, {
515
+ id: cart.id,
516
+ })];
517
+ case 8:
518
+ // Notify subscribers
519
+ _b.sent();
520
+ return [2 /*return*/, this.retrieve(cartId)];
521
+ }
522
+ });
523
+ }); })];
524
+ case 1: return [2 /*return*/, _a.sent()];
525
+ }
558
526
  });
559
527
  });
560
528
  };
@@ -593,128 +561,86 @@ var CartService = /** @class */ (function (_super) {
593
561
  return __awaiter(this, void 0, void 0, function () {
594
562
  var _this = this;
595
563
  return __generator(this, function (_a) {
596
- return [2 /*return*/, this.atomicPhase_(function (manager) { return __awaiter(_this, void 0, void 0, function () {
597
- var cart, currentItem, newQuantity, _a, _b, itm, e_5_1, _c, _d, method, e_6_1, result;
598
- var e_5, _e, e_6, _f;
599
- return __generator(this, function (_g) {
600
- switch (_g.label) {
601
- case 0: return [4 /*yield*/, this.retrieve(cartId, {
602
- relations: [
603
- "shipping_methods",
604
- "items",
605
- "payment_sessions",
606
- "items.variant",
607
- "items.variant.product",
608
- ],
609
- })];
610
- case 1:
611
- cart = _g.sent();
612
- if (lineItem.should_merge) {
613
- currentItem = cart.items.find(function (line) {
614
- if (line.should_merge && line.variant_id === lineItem.variant_id) {
615
- return lodash_1.default.isEqual(line.metadata, lineItem.metadata);
616
- }
617
- return false;
618
- });
619
- }
620
- if (!currentItem) return [3 /*break*/, 4];
621
- newQuantity = currentItem.quantity + lineItem.quantity;
622
- // Confirm inventory or throw error
623
- return [4 /*yield*/, this.inventoryService_
624
- .withTransaction(manager)
625
- .confirmInventory(lineItem.variant_id, newQuantity)];
626
- case 2:
627
- // Confirm inventory or throw error
628
- _g.sent();
629
- return [4 /*yield*/, this.lineItemService_
630
- .withTransaction(manager)
631
- .update(currentItem.id, {
632
- quantity: newQuantity,
633
- })];
634
- case 3:
635
- _g.sent();
636
- return [3 /*break*/, 7];
637
- case 4:
638
- // Confirm inventory or throw error
639
- return [4 /*yield*/, this.inventoryService_
640
- .withTransaction(manager)
641
- .confirmInventory(lineItem.variant_id, lineItem.quantity)];
642
- case 5:
643
- // Confirm inventory or throw error
644
- _g.sent();
645
- return [4 /*yield*/, this.lineItemService_.withTransaction(manager).create(__assign(__assign({}, lineItem), { has_shipping: false, cart_id: cartId }))];
646
- case 6:
647
- _g.sent();
648
- _g.label = 7;
649
- case 7:
650
- _g.trys.push([7, 12, 13, 14]);
651
- _a = __values(cart.items), _b = _a.next();
652
- _g.label = 8;
653
- case 8:
654
- if (!!_b.done) return [3 /*break*/, 11];
655
- itm = _b.value;
656
- return [4 /*yield*/, this.lineItemService_.withTransaction(manager).update(itm.id, {
657
- has_shipping: false,
564
+ switch (_a.label) {
565
+ case 0: return [4 /*yield*/, this.atomicPhase_(function (transactionManager) { return __awaiter(_this, void 0, void 0, function () {
566
+ var cart, currentItem, quantity, lineItemRepository, result;
567
+ return __generator(this, function (_a) {
568
+ switch (_a.label) {
569
+ case 0: return [4 /*yield*/, this.retrieve(cartId, {
570
+ relations: [
571
+ "shipping_methods",
572
+ "items",
573
+ "items.adjustments",
574
+ "payment_sessions",
575
+ "items.variant",
576
+ "items.variant.product",
577
+ "discounts",
578
+ "discounts.rule",
579
+ ],
658
580
  })];
659
- case 9:
660
- _g.sent();
661
- _g.label = 10;
662
- case 10:
663
- _b = _a.next();
664
- return [3 /*break*/, 8];
665
- case 11: return [3 /*break*/, 14];
666
- case 12:
667
- e_5_1 = _g.sent();
668
- e_5 = { error: e_5_1 };
669
- return [3 /*break*/, 14];
670
- case 13:
671
- try {
672
- if (_b && !_b.done && (_e = _a.return)) _e.call(_a);
673
- }
674
- finally { if (e_5) throw e_5.error; }
675
- return [7 /*endfinally*/];
676
- case 14:
677
- if (!(cart.shipping_methods && cart.shipping_methods.length)) return [3 /*break*/, 22];
678
- _g.label = 15;
679
- case 15:
680
- _g.trys.push([15, 20, 21, 22]);
681
- _c = __values(cart.shipping_methods), _d = _c.next();
682
- _g.label = 16;
683
- case 16:
684
- if (!!_d.done) return [3 /*break*/, 19];
685
- method = _d.value;
686
- return [4 /*yield*/, this.shippingOptionService_
687
- .withTransaction(manager)
688
- .deleteShippingMethod(method)];
689
- case 17:
690
- _g.sent();
691
- _g.label = 18;
692
- case 18:
693
- _d = _c.next();
694
- return [3 /*break*/, 16];
695
- case 19: return [3 /*break*/, 22];
696
- case 20:
697
- e_6_1 = _g.sent();
698
- e_6 = { error: e_6_1 };
699
- return [3 /*break*/, 22];
700
- case 21:
701
- try {
702
- if (_d && !_d.done && (_f = _c.return)) _f.call(_c);
703
- }
704
- finally { if (e_6) throw e_6.error; }
705
- return [7 /*endfinally*/];
706
- case 22: return [4 /*yield*/, this.retrieve(cartId)];
707
- case 23:
708
- result = _g.sent();
709
- return [4 /*yield*/, this.eventBus_
710
- .withTransaction(manager)
711
- .emit(CartService.Events.UPDATED, result)];
712
- case 24:
713
- _g.sent();
714
- return [2 /*return*/, result];
715
- }
716
- });
717
- }); })];
581
+ case 1:
582
+ cart = _a.sent();
583
+ if (lineItem.should_merge) {
584
+ currentItem = cart.items.find(function (item) {
585
+ if (item.should_merge && item.variant_id === lineItem.variant_id) {
586
+ return lodash_1.default.isEqual(item.metadata, lineItem.metadata);
587
+ }
588
+ return false;
589
+ });
590
+ }
591
+ quantity = currentItem
592
+ ? (currentItem.quantity += lineItem.quantity)
593
+ : lineItem.quantity;
594
+ // Confirm inventory or throw error
595
+ return [4 /*yield*/, this.inventoryService_
596
+ .withTransaction(transactionManager)
597
+ .confirmInventory(lineItem.variant_id, quantity)];
598
+ case 2:
599
+ // Confirm inventory or throw error
600
+ _a.sent();
601
+ if (!currentItem) return [3 /*break*/, 4];
602
+ return [4 /*yield*/, this.lineItemService_
603
+ .withTransaction(transactionManager)
604
+ .update(currentItem.id, {
605
+ quantity: currentItem.quantity,
606
+ })];
607
+ case 3:
608
+ _a.sent();
609
+ return [3 /*break*/, 6];
610
+ case 4: return [4 /*yield*/, this.lineItemService_
611
+ .withTransaction(transactionManager)
612
+ .create(__assign(__assign({}, lineItem), { has_shipping: false, cart_id: cartId }))];
613
+ case 5:
614
+ _a.sent();
615
+ _a.label = 6;
616
+ case 6:
617
+ lineItemRepository = transactionManager.getCustomRepository(this.lineItemRepository_);
618
+ return [4 /*yield*/, lineItemRepository.update({
619
+ id: (0, typeorm_1.In)(cart.items.map(function (item) { return item.id; })),
620
+ }, {
621
+ has_shipping: false,
622
+ })];
623
+ case 7:
624
+ _a.sent();
625
+ return [4 /*yield*/, this.retrieve(cartId, {
626
+ relations: ["items", "discounts", "discounts.rule"],
627
+ })];
628
+ case 8:
629
+ result = _a.sent();
630
+ return [4 /*yield*/, this.refreshAdjustments_(result)];
631
+ case 9:
632
+ _a.sent();
633
+ return [4 /*yield*/, this.eventBus_
634
+ .withTransaction(transactionManager)
635
+ .emit(CartService.Events.UPDATED, result)];
636
+ case 10:
637
+ _a.sent();
638
+ return [2 /*return*/, result];
639
+ }
640
+ });
641
+ }); })];
642
+ case 1: return [2 /*return*/, _a.sent()];
643
+ }
718
644
  });
719
645
  });
720
646
  };
@@ -729,50 +655,60 @@ var CartService = /** @class */ (function (_super) {
729
655
  return __awaiter(this, void 0, void 0, function () {
730
656
  var _this = this;
731
657
  return __generator(this, function (_a) {
732
- return [2 /*return*/, this.atomicPhase_(function (manager) { return __awaiter(_this, void 0, void 0, function () {
733
- var cart, lineItemExists, hasInventory, result;
734
- return __generator(this, function (_a) {
735
- switch (_a.label) {
736
- case 0: return [4 /*yield*/, this.retrieve(cartId, {
737
- relations: ["items", "payment_sessions"],
738
- })
739
- // Ensure that the line item exists in the cart
740
- ];
741
- case 1:
742
- cart = _a.sent();
743
- lineItemExists = cart.items.find(function (i) { return i.id === lineItemId; });
744
- if (!lineItemExists) {
745
- throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.INVALID_DATA, "A line item with the provided id doesn't exist in the cart");
746
- }
747
- if (!lineItemUpdate.quantity) return [3 /*break*/, 3];
748
- return [4 /*yield*/, this.inventoryService_
749
- .withTransaction(manager)
750
- .confirmInventory(lineItemExists.variant_id, lineItemUpdate.quantity)];
751
- case 2:
752
- hasInventory = _a.sent();
753
- if (!hasInventory) {
754
- throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.NOT_ALLOWED, "Inventory doesn't cover the desired quantity");
755
- }
756
- _a.label = 3;
757
- case 3: return [4 /*yield*/, this.lineItemService_
758
- .withTransaction(manager)
759
- .update(lineItemId, lineItemUpdate)
760
- // Update the line item
761
- ];
762
- case 4:
763
- _a.sent();
764
- return [4 /*yield*/, this.retrieve(cartId)];
765
- case 5:
766
- result = _a.sent();
767
- return [4 /*yield*/, this.eventBus_
768
- .withTransaction(manager)
769
- .emit(CartService.Events.UPDATED, result)];
770
- case 6:
771
- _a.sent();
772
- return [2 /*return*/, result];
773
- }
774
- });
775
- }); })];
658
+ switch (_a.label) {
659
+ case 0: return [4 /*yield*/, this.atomicPhase_(function (transactionManager) { return __awaiter(_this, void 0, void 0, function () {
660
+ var cart, lineItemExists, hasInventory, updatedCart;
661
+ return __generator(this, function (_a) {
662
+ switch (_a.label) {
663
+ case 0: return [4 /*yield*/, this.retrieve(cartId, {
664
+ relations: ["items", "items.adjustments", "payment_sessions"],
665
+ })
666
+ // Ensure that the line item exists in the cart
667
+ ];
668
+ case 1:
669
+ cart = _a.sent();
670
+ lineItemExists = cart.items.find(function (i) { return i.id === lineItemId; });
671
+ if (!lineItemExists) {
672
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.INVALID_DATA, "A line item with the provided id doesn't exist in the cart");
673
+ }
674
+ if (!lineItemUpdate.quantity) return [3 /*break*/, 3];
675
+ return [4 /*yield*/, this.inventoryService_
676
+ .withTransaction(transactionManager)
677
+ .confirmInventory(lineItemExists.variant_id, lineItemUpdate.quantity)];
678
+ case 2:
679
+ hasInventory = _a.sent();
680
+ if (!hasInventory) {
681
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.NOT_ALLOWED, "Inventory doesn't cover the desired quantity");
682
+ }
683
+ _a.label = 3;
684
+ case 3: return [4 /*yield*/, this.lineItemService_
685
+ .withTransaction(transactionManager)
686
+ .update(lineItemId, lineItemUpdate)];
687
+ case 4:
688
+ _a.sent();
689
+ return [4 /*yield*/, this.retrieve(cartId, {
690
+ relations: ["items", "discounts", "discounts.rule"],
691
+ })];
692
+ case 5:
693
+ updatedCart = _a.sent();
694
+ return [4 /*yield*/, this.refreshAdjustments_(updatedCart)
695
+ // Update the line item
696
+ ];
697
+ case 6:
698
+ _a.sent();
699
+ // Update the line item
700
+ return [4 /*yield*/, this.eventBus_
701
+ .withTransaction(transactionManager)
702
+ .emit(CartService.Events.UPDATED, updatedCart)];
703
+ case 7:
704
+ // Update the line item
705
+ _a.sent();
706
+ return [2 /*return*/, updatedCart];
707
+ }
708
+ });
709
+ }); })];
710
+ case 1: return [2 /*return*/, _a.sent()];
711
+ }
776
712
  });
777
713
  });
778
714
  };
@@ -786,260 +722,196 @@ var CartService = /** @class */ (function (_super) {
786
722
  * @return void
787
723
  */
788
724
  CartService.prototype.adjustFreeShipping_ = function (cart, shouldAdd) {
789
- var _a;
725
+ var _a, _b;
790
726
  return __awaiter(this, void 0, void 0, function () {
727
+ var transactionManager, shippingMethodRepository_1;
791
728
  var _this = this;
792
- return __generator(this, function (_b) {
793
- switch (_b.label) {
729
+ return __generator(this, function (_c) {
730
+ switch (_c.label) {
794
731
  case 0:
795
- if (!((_a = cart.shipping_methods) === null || _a === void 0 ? void 0 : _a.length)) return [3 /*break*/, 4];
732
+ transactionManager = (_a = this.transactionManager_) !== null && _a !== void 0 ? _a : this.manager_;
733
+ if (!((_b = cart.shipping_methods) === null || _b === void 0 ? void 0 : _b.length)) return [3 /*break*/, 4];
734
+ shippingMethodRepository_1 = transactionManager.getCustomRepository(this.shippingMethodRepository_);
796
735
  if (!shouldAdd) return [3 /*break*/, 2];
797
- return [4 /*yield*/, Promise.all(cart.shipping_methods.map(function (sm) { return __awaiter(_this, void 0, void 0, function () {
798
- var smRepo, method;
799
- return __generator(this, function (_a) {
800
- switch (_a.label) {
801
- case 0:
802
- smRepo = this.manager_.getCustomRepository(this.shippingMethodRepository_);
803
- return [4 /*yield*/, smRepo.findOne({ where: { id: sm.id } })];
804
- case 1:
805
- method = _a.sent();
806
- if (!method) return [3 /*break*/, 3];
807
- method.price = 0;
808
- return [4 /*yield*/, smRepo.save(method)];
809
- case 2:
810
- _a.sent();
811
- _a.label = 3;
812
- case 3: return [2 /*return*/];
813
- }
814
- });
815
- }); }))];
736
+ return [4 /*yield*/, shippingMethodRepository_1.update({
737
+ id: (0, typeorm_1.In)(cart.shipping_methods.map(function (shippingMethod) { return shippingMethod.id; })),
738
+ }, {
739
+ price: 0,
740
+ })];
816
741
  case 1:
817
- _b.sent();
742
+ _c.sent();
818
743
  return [3 /*break*/, 4];
819
- case 2: return [4 /*yield*/, Promise.all(cart.shipping_methods.map(function (sm) { return __awaiter(_this, void 0, void 0, function () {
820
- var smRepo;
744
+ case 2: return [4 /*yield*/, Promise.all(cart.shipping_methods.map(function (shippingMethod) { return __awaiter(_this, void 0, void 0, function () {
821
745
  return __generator(this, function (_a) {
822
- switch (_a.label) {
823
- case 0:
824
- smRepo = this.manager_.getCustomRepository(this.shippingMethodRepository_);
825
- // if free shipping discount is removed, we adjust the shipping
826
- // back to its original amount
827
- sm.price = sm.shipping_option.amount;
828
- return [4 /*yield*/, smRepo.save(sm)];
829
- case 1:
830
- _a.sent();
831
- return [2 /*return*/];
832
- }
746
+ // if free shipping discount is removed, we adjust the shipping
747
+ // back to its original amount
748
+ shippingMethod.price = shippingMethod.shipping_option.amount;
749
+ return [2 /*return*/, shippingMethodRepository_1.save(shippingMethod)];
833
750
  });
834
751
  }); }))];
835
752
  case 3:
836
- _b.sent();
837
- _b.label = 4;
753
+ _c.sent();
754
+ _c.label = 4;
838
755
  case 4: return [2 /*return*/];
839
756
  }
840
757
  });
841
758
  });
842
759
  };
843
- CartService.prototype.update = function (cartId, update) {
760
+ CartService.prototype.update = function (cartId, data) {
844
761
  return __awaiter(this, void 0, void 0, function () {
845
762
  var _this = this;
846
763
  return __generator(this, function (_a) {
847
- return [2 /*return*/, this.atomicPhase_(function (manager) { return __awaiter(_this, void 0, void 0, function () {
848
- var cartRepo, cart, countryCode, customer, addrRepo, address, address, previousDiscounts, _a, _b, code, e_7_1, hasFreeShipping, _c, _d, code, e_8_1, prevContext, result;
849
- var e_7, _e, e_8, _f;
850
- var _g, _h;
851
- return __generator(this, function (_j) {
852
- switch (_j.label) {
853
- case 0:
854
- cartRepo = manager.getCustomRepository(this.cartRepository_);
855
- return [4 /*yield*/, this.retrieve(cartId, {
856
- select: [
857
- "subtotal",
858
- "tax_total",
859
- "shipping_total",
860
- "discount_total",
861
- "total",
862
- ],
863
- relations: [
864
- "items",
865
- "shipping_methods",
866
- "shipping_address",
867
- "billing_address",
868
- "gift_cards",
869
- "customer",
870
- "region",
871
- "payment_sessions",
872
- "region.countries",
873
- "discounts",
874
- "discounts.rule",
875
- "discounts.rule.valid_for",
876
- "discounts.regions",
877
- ],
878
- })];
879
- case 1:
880
- cart = _j.sent();
881
- if (!(typeof update.region_id !== "undefined")) return [3 /*break*/, 3];
882
- countryCode = (_h = (update.country_code || ((_g = update.shipping_address) === null || _g === void 0 ? void 0 : _g.country_code))) !== null && _h !== void 0 ? _h : null;
883
- return [4 /*yield*/, this.setRegion_(cart, update.region_id, countryCode)];
884
- case 2:
885
- _j.sent();
886
- _j.label = 3;
887
- case 3:
888
- if (!(typeof update.customer_id !== "undefined")) return [3 /*break*/, 5];
889
- return [4 /*yield*/, this.updateCustomerId_(cart, update.customer_id)];
890
- case 4:
891
- _j.sent();
892
- return [3 /*break*/, 7];
893
- case 5:
894
- if (!(typeof update.email !== "undefined")) return [3 /*break*/, 7];
895
- return [4 /*yield*/, this.createOrFetchUserFromEmail_(update.email)];
896
- case 6:
897
- customer = _j.sent();
898
- cart.customer = customer;
899
- cart.customer_id = customer.id;
900
- cart.email = customer.email;
901
- _j.label = 7;
902
- case 7:
903
- addrRepo = manager.getCustomRepository(this.addressRepository_);
904
- if (!("shipping_address_id" in update || "shipping_address" in update)) return [3 /*break*/, 9];
905
- address = void 0;
906
- if (typeof update.shipping_address_id !== "undefined") {
907
- address = update.shipping_address_id;
908
- }
909
- else if (typeof update.shipping_address !== "undefined") {
910
- address = update.shipping_address;
911
- }
912
- if (!(typeof address !== "undefined")) return [3 /*break*/, 9];
913
- return [4 /*yield*/, this.updateShippingAddress_(cart, address, addrRepo)];
914
- case 8:
915
- _j.sent();
916
- _j.label = 9;
917
- case 9:
918
- if (!("billing_address_id" in update || "billing_address" in update)) return [3 /*break*/, 11];
919
- address = void 0;
920
- if (typeof update.billing_address_id !== "undefined") {
921
- address = update.billing_address_id;
922
- }
923
- else if (typeof update.billing_address !== "undefined") {
924
- address = update.billing_address;
925
- }
926
- if (!(typeof address !== "undefined")) return [3 /*break*/, 11];
927
- return [4 /*yield*/, this.updateBillingAddress_(cart, address, addrRepo)];
928
- case 10:
929
- _j.sent();
930
- _j.label = 11;
931
- case 11:
932
- if (!(typeof update.discounts !== "undefined")) return [3 /*break*/, 23];
933
- previousDiscounts = cart.discounts;
934
- cart.discounts = [];
935
- _j.label = 12;
936
- case 12:
937
- _j.trys.push([12, 17, 18, 19]);
938
- _a = __values(update.discounts), _b = _a.next();
939
- _j.label = 13;
940
- case 13:
941
- if (!!_b.done) return [3 /*break*/, 16];
942
- code = _b.value.code;
943
- return [4 /*yield*/, this.applyDiscount(cart, code)];
944
- case 14:
945
- _j.sent();
946
- _j.label = 15;
947
- case 15:
948
- _b = _a.next();
949
- return [3 /*break*/, 13];
950
- case 16: return [3 /*break*/, 19];
951
- case 17:
952
- e_7_1 = _j.sent();
953
- e_7 = { error: e_7_1 };
954
- return [3 /*break*/, 19];
955
- case 18:
956
- try {
957
- if (_b && !_b.done && (_e = _a.return)) _e.call(_a);
958
- }
959
- finally { if (e_7) throw e_7.error; }
960
- return [7 /*endfinally*/];
961
- case 19:
962
- hasFreeShipping = cart.discounts.some(function (_a) {
963
- var rule = _a.rule;
964
- return rule.type === "free_shipping";
965
- });
966
- if (!(previousDiscounts.some(function (_a) {
967
- var rule = _a.rule;
968
- return rule.type === "free_shipping";
969
- }) &&
970
- !hasFreeShipping)) return [3 /*break*/, 21];
971
- return [4 /*yield*/, this.adjustFreeShipping_(cart, false)];
972
- case 20:
973
- _j.sent();
974
- _j.label = 21;
975
- case 21:
976
- if (!hasFreeShipping) return [3 /*break*/, 23];
977
- return [4 /*yield*/, this.adjustFreeShipping_(cart, true)];
978
- case 22:
979
- _j.sent();
980
- _j.label = 23;
981
- case 23:
982
- if (!("gift_cards" in update)) return [3 /*break*/, 31];
983
- cart.gift_cards = [];
984
- _j.label = 24;
985
- case 24:
986
- _j.trys.push([24, 29, 30, 31]);
987
- _c = __values(update.gift_cards), _d = _c.next();
988
- _j.label = 25;
989
- case 25:
990
- if (!!_d.done) return [3 /*break*/, 28];
991
- code = _d.value.code;
992
- return [4 /*yield*/, this.applyGiftCard_(cart, code)];
993
- case 26:
994
- _j.sent();
995
- _j.label = 27;
996
- case 27:
997
- _d = _c.next();
998
- return [3 /*break*/, 25];
999
- case 28: return [3 /*break*/, 31];
1000
- case 29:
1001
- e_8_1 = _j.sent();
1002
- e_8 = { error: e_8_1 };
1003
- return [3 /*break*/, 31];
1004
- case 30:
1005
- try {
1006
- if (_d && !_d.done && (_f = _c.return)) _f.call(_c);
1007
- }
1008
- finally { if (e_8) throw e_8.error; }
1009
- return [7 /*endfinally*/];
1010
- case 31:
1011
- if ("metadata" in update) {
1012
- cart.metadata = this.setMetadata_(cart, update.metadata);
1013
- }
1014
- if ("context" in update) {
1015
- prevContext = cart.context || {};
1016
- cart.context = __assign(__assign({}, prevContext), update.context);
1017
- }
1018
- if ("completed_at" in update) {
1019
- cart.completed_at = update.completed_at;
1020
- }
1021
- if ("payment_authorized_at" in update) {
1022
- cart.payment_authorized_at = update.payment_authorized_at;
1023
- }
1024
- return [4 /*yield*/, cartRepo.save(cart)];
1025
- case 32:
1026
- result = _j.sent();
1027
- if (!("email" in update || "customer_id" in update)) return [3 /*break*/, 34];
1028
- return [4 /*yield*/, this.eventBus_
1029
- .withTransaction(manager)
1030
- .emit(CartService.Events.CUSTOMER_UPDATED, result.id)];
1031
- case 33:
1032
- _j.sent();
1033
- _j.label = 34;
1034
- case 34: return [4 /*yield*/, this.eventBus_
1035
- .withTransaction(manager)
1036
- .emit(CartService.Events.UPDATED, result)];
1037
- case 35:
1038
- _j.sent();
1039
- return [2 /*return*/, result];
1040
- }
1041
- });
1042
- }); })];
764
+ switch (_a.label) {
765
+ case 0: return [4 /*yield*/, this.atomicPhase_(function (transactionManager) { return __awaiter(_this, void 0, void 0, function () {
766
+ var cartRepo, cart, customer, countryCode, addrRepo, billingAddress, shippingAddress, previousDiscounts, hasFreeShipping, prevContext, updatedCart;
767
+ var _this = this;
768
+ var _a, _b, _c, _d, _e, _f;
769
+ return __generator(this, function (_g) {
770
+ switch (_g.label) {
771
+ case 0:
772
+ cartRepo = transactionManager.getCustomRepository(this.cartRepository_);
773
+ return [4 /*yield*/, this.retrieve(cartId, {
774
+ select: [
775
+ "subtotal",
776
+ "tax_total",
777
+ "shipping_total",
778
+ "discount_total",
779
+ "total",
780
+ ],
781
+ relations: [
782
+ "items",
783
+ "shipping_methods",
784
+ "shipping_address",
785
+ "billing_address",
786
+ "gift_cards",
787
+ "customer",
788
+ "region",
789
+ "payment_sessions",
790
+ "region.countries",
791
+ "discounts",
792
+ "discounts.rule",
793
+ "discounts.regions",
794
+ ],
795
+ })];
796
+ case 1:
797
+ cart = _g.sent();
798
+ if (!data.customer_id) return [3 /*break*/, 3];
799
+ return [4 /*yield*/, this.updateCustomerId_(cart, data.customer_id)];
800
+ case 2:
801
+ _g.sent();
802
+ return [3 /*break*/, 5];
803
+ case 3:
804
+ if (!(typeof data.email !== "undefined")) return [3 /*break*/, 5];
805
+ return [4 /*yield*/, this.createOrFetchUserFromEmail_(data.email)];
806
+ case 4:
807
+ customer = _g.sent();
808
+ cart.customer = customer;
809
+ cart.customer_id = customer.id;
810
+ cart.email = customer.email;
811
+ _g.label = 5;
812
+ case 5:
813
+ if (!(typeof data.region_id !== "undefined")) return [3 /*break*/, 7];
814
+ countryCode = (_b = (data.country_code || ((_a = data.shipping_address) === null || _a === void 0 ? void 0 : _a.country_code))) !== null && _b !== void 0 ? _b : null;
815
+ return [4 /*yield*/, this.setRegion_(cart, data.region_id, countryCode)];
816
+ case 6:
817
+ _g.sent();
818
+ _g.label = 7;
819
+ case 7:
820
+ if (!(typeof data.customer_id !== "undefined" ||
821
+ typeof data.region_id !== "undefined")) return [3 /*break*/, 9];
822
+ return [4 /*yield*/, this.updateUnitPrices_(cart, data.region_id, data.customer_id)];
823
+ case 8:
824
+ _g.sent();
825
+ _g.label = 9;
826
+ case 9:
827
+ addrRepo = transactionManager.getCustomRepository(this.addressRepository_);
828
+ billingAddress = (_c = data.billing_address_id) !== null && _c !== void 0 ? _c : data.billing_address;
829
+ if (!(billingAddress !== undefined)) return [3 /*break*/, 11];
830
+ return [4 /*yield*/, this.updateBillingAddress_(cart, billingAddress, addrRepo)];
831
+ case 10:
832
+ _g.sent();
833
+ _g.label = 11;
834
+ case 11:
835
+ shippingAddress = (_d = data.shipping_address_id) !== null && _d !== void 0 ? _d : data.shipping_address;
836
+ if (!(shippingAddress !== undefined)) return [3 /*break*/, 13];
837
+ return [4 /*yield*/, this.updateShippingAddress_(cart, shippingAddress, addrRepo)];
838
+ case 12:
839
+ _g.sent();
840
+ _g.label = 13;
841
+ case 13:
842
+ if (!((_e = data.discounts) === null || _e === void 0 ? void 0 : _e.length)) return [3 /*break*/, 18];
843
+ previousDiscounts = __spreadArray([], __read(cart.discounts), false);
844
+ cart.discounts.length = 0;
845
+ return [4 /*yield*/, Promise.all(data.discounts.map(function (_a) {
846
+ var code = _a.code;
847
+ return _this.applyDiscount(cart, code);
848
+ }))];
849
+ case 14:
850
+ _g.sent();
851
+ hasFreeShipping = cart.discounts.some(function (_a) {
852
+ var rule = _a.rule;
853
+ return (rule === null || rule === void 0 ? void 0 : rule.type) === "free_shipping";
854
+ });
855
+ if (!(previousDiscounts.some(function (_a) {
856
+ var rule = _a.rule;
857
+ return (rule === null || rule === void 0 ? void 0 : rule.type) === "free_shipping";
858
+ }) &&
859
+ !hasFreeShipping)) return [3 /*break*/, 16];
860
+ return [4 /*yield*/, this.adjustFreeShipping_(cart, false)];
861
+ case 15:
862
+ _g.sent();
863
+ _g.label = 16;
864
+ case 16:
865
+ if (!hasFreeShipping) return [3 /*break*/, 18];
866
+ return [4 /*yield*/, this.adjustFreeShipping_(cart, true)];
867
+ case 17:
868
+ _g.sent();
869
+ _g.label = 18;
870
+ case 18:
871
+ if (!("gift_cards" in data)) return [3 /*break*/, 20];
872
+ cart.gift_cards = [];
873
+ return [4 /*yield*/, Promise.all(((_f = data.gift_cards) !== null && _f !== void 0 ? _f : []).map(function (_a) {
874
+ var code = _a.code;
875
+ return _this.applyGiftCard_(cart, code);
876
+ }))];
877
+ case 19:
878
+ _g.sent();
879
+ _g.label = 20;
880
+ case 20:
881
+ if (data === null || data === void 0 ? void 0 : data.metadata) {
882
+ cart.metadata = (0, utils_1.setMetadata)(cart, data.metadata);
883
+ }
884
+ if ("context" in data) {
885
+ prevContext = cart.context || {};
886
+ cart.context = __assign(__assign({}, prevContext), data.context);
887
+ }
888
+ if ("completed_at" in data) {
889
+ cart.completed_at = data.completed_at;
890
+ }
891
+ if ("payment_authorized_at" in data) {
892
+ cart.payment_authorized_at = data.payment_authorized_at;
893
+ }
894
+ return [4 /*yield*/, cartRepo.save(cart)];
895
+ case 21:
896
+ updatedCart = _g.sent();
897
+ if (!("email" in data || "customer_id" in data)) return [3 /*break*/, 23];
898
+ return [4 /*yield*/, this.eventBus_
899
+ .withTransaction(transactionManager)
900
+ .emit(CartService.Events.CUSTOMER_UPDATED, updatedCart.id)];
901
+ case 22:
902
+ _g.sent();
903
+ _g.label = 23;
904
+ case 23: return [4 /*yield*/, this.eventBus_
905
+ .withTransaction(transactionManager)
906
+ .emit(CartService.Events.UPDATED, updatedCart)];
907
+ case 24:
908
+ _g.sent();
909
+ return [2 /*return*/, updatedCart];
910
+ }
911
+ });
912
+ }); })];
913
+ case 1: return [2 /*return*/, _a.sent()];
914
+ }
1043
915
  });
1044
916
  });
1045
917
  };
@@ -1111,27 +983,27 @@ var CartService = /** @class */ (function (_super) {
1111
983
  CartService.prototype.updateBillingAddress_ = function (cart, addressOrId, addrRepo) {
1112
984
  var _a, _b;
1113
985
  return __awaiter(this, void 0, void 0, function () {
1114
- var address, updated, addr, created;
1115
- return __generator(this, function (_c) {
1116
- switch (_c.label) {
986
+ var address, _c, addr;
987
+ return __generator(this, function (_d) {
988
+ switch (_d.label) {
1117
989
  case 0:
1118
990
  if (!(typeof addressOrId === "string")) return [3 /*break*/, 2];
1119
991
  return [4 /*yield*/, addrRepo.findOne({
1120
992
  where: { id: addressOrId },
1121
993
  })];
1122
994
  case 1:
1123
- address = (_c.sent());
995
+ address = (_d.sent());
1124
996
  return [3 /*break*/, 3];
1125
997
  case 2:
1126
998
  address = addressOrId;
1127
- _c.label = 3;
999
+ _d.label = 3;
1128
1000
  case 3:
1129
1001
  address.country_code = (_b = (_a = address.country_code) === null || _a === void 0 ? void 0 : _a.toLowerCase()) !== null && _b !== void 0 ? _b : null;
1130
1002
  if (!address.id) return [3 /*break*/, 5];
1003
+ _c = cart;
1131
1004
  return [4 /*yield*/, addrRepo.save(address)];
1132
1005
  case 4:
1133
- updated = _c.sent();
1134
- cart.billing_address = updated;
1006
+ _c.billing_address = _d.sent();
1135
1007
  return [3 /*break*/, 9];
1136
1008
  case 5:
1137
1009
  if (!cart.billing_address_id) return [3 /*break*/, 8];
@@ -1139,15 +1011,14 @@ var CartService = /** @class */ (function (_super) {
1139
1011
  where: { id: cart.billing_address_id },
1140
1012
  })];
1141
1013
  case 6:
1142
- addr = _c.sent();
1014
+ addr = _d.sent();
1143
1015
  return [4 /*yield*/, addrRepo.save(__assign(__assign({}, addr), address))];
1144
1016
  case 7:
1145
- _c.sent();
1017
+ _d.sent();
1146
1018
  return [3 /*break*/, 9];
1147
1019
  case 8:
1148
- created = addrRepo.create(__assign({}, address));
1149
- cart.billing_address = created;
1150
- _c.label = 9;
1020
+ cart.billing_address = addrRepo.create(__assign({}, address));
1021
+ _d.label = 9;
1151
1022
  case 9: return [2 /*return*/];
1152
1023
  }
1153
1024
  });
@@ -1163,9 +1034,9 @@ var CartService = /** @class */ (function (_super) {
1163
1034
  CartService.prototype.updateShippingAddress_ = function (cart, addressOrId, addrRepo) {
1164
1035
  var _a, _b;
1165
1036
  return __awaiter(this, void 0, void 0, function () {
1166
- var address, updated, addr, created;
1167
- return __generator(this, function (_c) {
1168
- switch (_c.label) {
1037
+ var address, _c, addr;
1038
+ return __generator(this, function (_d) {
1039
+ switch (_d.label) {
1169
1040
  case 0:
1170
1041
  if (addressOrId === null) {
1171
1042
  cart.shipping_address = null;
@@ -1176,11 +1047,11 @@ var CartService = /** @class */ (function (_super) {
1176
1047
  where: { id: addressOrId },
1177
1048
  })];
1178
1049
  case 1:
1179
- address = (_c.sent());
1050
+ address = (_d.sent());
1180
1051
  return [3 /*break*/, 3];
1181
1052
  case 2:
1182
1053
  address = addressOrId;
1183
- _c.label = 3;
1054
+ _d.label = 3;
1184
1055
  case 3:
1185
1056
  address.country_code = (_b = (_a = address.country_code) === null || _a === void 0 ? void 0 : _a.toLowerCase()) !== null && _b !== void 0 ? _b : null;
1186
1057
  if (address.country_code &&
@@ -1191,10 +1062,10 @@ var CartService = /** @class */ (function (_super) {
1191
1062
  throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.INVALID_DATA, "Shipping country must be in the cart region");
1192
1063
  }
1193
1064
  if (!address.id) return [3 /*break*/, 5];
1065
+ _c = cart;
1194
1066
  return [4 /*yield*/, addrRepo.save(address)];
1195
1067
  case 4:
1196
- updated = _c.sent();
1197
- cart.shipping_address = updated;
1068
+ _c.shipping_address = _d.sent();
1198
1069
  return [3 /*break*/, 9];
1199
1070
  case 5:
1200
1071
  if (!cart.shipping_address_id) return [3 /*break*/, 8];
@@ -1202,15 +1073,14 @@ var CartService = /** @class */ (function (_super) {
1202
1073
  where: { id: cart.shipping_address_id },
1203
1074
  })];
1204
1075
  case 6:
1205
- addr = _c.sent();
1076
+ addr = _d.sent();
1206
1077
  return [4 /*yield*/, addrRepo.save(__assign(__assign({}, addr), address))];
1207
1078
  case 7:
1208
- _c.sent();
1079
+ _d.sent();
1209
1080
  return [3 /*break*/, 9];
1210
1081
  case 8:
1211
- created = addrRepo.create(__assign({}, address));
1212
- cart.shipping_address = created;
1213
- _c.label = 9;
1082
+ cart.shipping_address = addrRepo.create(__assign({}, address));
1083
+ _d.label = 9;
1214
1084
  case 9: return [2 /*return*/];
1215
1085
  }
1216
1086
  });
@@ -1221,7 +1091,9 @@ var CartService = /** @class */ (function (_super) {
1221
1091
  var giftCard;
1222
1092
  return __generator(this, function (_a) {
1223
1093
  switch (_a.label) {
1224
- case 0: return [4 /*yield*/, this.giftCardService_.retrieveByCode(code)];
1094
+ case 0: return [4 /*yield*/, this.giftCardService_
1095
+ .withTransaction(this.transactionManager_)
1096
+ .retrieveByCode(code)];
1225
1097
  case 1:
1226
1098
  giftCard = _a.sent();
1227
1099
  if (giftCard.is_disabled) {
@@ -1235,7 +1107,7 @@ var CartService = /** @class */ (function (_super) {
1235
1107
  var id = _a.id;
1236
1108
  return id === giftCard.id;
1237
1109
  })) {
1238
- return [2 /*return*/, Promise.resolve()];
1110
+ return [2 /*return*/];
1239
1111
  }
1240
1112
  cart.gift_cards = __spreadArray(__spreadArray([], __read(cart.gift_cards), false), [giftCard], false);
1241
1113
  return [2 /*return*/];
@@ -1254,80 +1126,65 @@ var CartService = /** @class */ (function (_super) {
1254
1126
  */
1255
1127
  CartService.prototype.applyDiscount = function (cart, discountCode) {
1256
1128
  return __awaiter(this, void 0, void 0, function () {
1257
- var discount, rule, today, regions, parent, toParse, sawNotShipping, newDiscounts;
1129
+ var _this = this;
1258
1130
  return __generator(this, function (_a) {
1259
1131
  switch (_a.label) {
1260
- case 0: return [4 /*yield*/, this.discountService_.retrieveByCode(discountCode, [
1261
- "rule",
1262
- "rule.valid_for",
1263
- "regions",
1264
- ])];
1265
- case 1:
1266
- discount = _a.sent();
1267
- rule = discount.rule;
1268
- // if limit is set and reached, we make an early exit
1269
- if (discount.usage_limit) {
1270
- discount.usage_count = discount.usage_count || 0;
1271
- if (discount.usage_count >= discount.usage_limit) {
1272
- throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.NOT_ALLOWED, "Discount has been used maximum allowed times");
1273
- }
1274
- }
1275
- today = new Date();
1276
- if (discount.starts_at > today) {
1277
- throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.NOT_ALLOWED, "Discount is not valid yet");
1278
- }
1279
- if (discount.ends_at && discount.ends_at < today) {
1280
- throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.NOT_ALLOWED, "Discount is expired");
1281
- }
1282
- regions = discount.regions;
1283
- if (!discount.parent_discount_id) return [3 /*break*/, 3];
1284
- return [4 /*yield*/, this.discountService_.retrieve(discount.parent_discount_id, {
1285
- relations: ["rule", "regions"],
1286
- })];
1287
- case 2:
1288
- parent = _a.sent();
1289
- regions = parent.regions;
1290
- _a.label = 3;
1291
- case 3:
1292
- if (discount.is_disabled) {
1293
- throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.NOT_ALLOWED, "The discount code is disabled");
1294
- }
1295
- if (!regions.find(function (_a) {
1296
- var id = _a.id;
1297
- return id === cart.region_id;
1298
- })) {
1299
- throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.INVALID_DATA, "The discount is not available in current region");
1300
- }
1301
- // if discount is already there, we simply resolve
1302
- if (cart.discounts.find(function (_a) {
1303
- var id = _a.id;
1304
- return id === discount.id;
1305
- })) {
1306
- return [2 /*return*/, Promise.resolve()];
1307
- }
1308
- toParse = __spreadArray(__spreadArray([], __read(cart.discounts), false), [discount], false);
1309
- sawNotShipping = false;
1310
- newDiscounts = toParse.map(function (d) {
1311
- var drule = d.rule;
1312
- switch (drule.type) {
1313
- case "free_shipping":
1314
- if (d.rule.type === rule.type) {
1315
- return discount;
1316
- }
1317
- return d;
1318
- default:
1319
- if (!sawNotShipping) {
1320
- sawNotShipping = true;
1321
- if (rule.type !== "free_shipping") {
1322
- return discount;
1132
+ case 0: return [4 /*yield*/, this.atomicPhase_(function (transactionManager) { return __awaiter(_this, void 0, void 0, function () {
1133
+ var discount, rule, toParse, sawNotShipping, newDiscounts;
1134
+ return __generator(this, function (_a) {
1135
+ switch (_a.label) {
1136
+ case 0: return [4 /*yield*/, this.discountService_
1137
+ .withTransaction(transactionManager)
1138
+ .retrieveByCode(discountCode, ["rule", "regions"])];
1139
+ case 1:
1140
+ discount = _a.sent();
1141
+ return [4 /*yield*/, this.discountService_
1142
+ .withTransaction(transactionManager)
1143
+ .validateDiscountForCartOrThrow(cart, discount)];
1144
+ case 2:
1145
+ _a.sent();
1146
+ rule = discount.rule;
1147
+ // if discount is already there, we simply resolve
1148
+ if (cart.discounts.find(function (_a) {
1149
+ var id = _a.id;
1150
+ return id === discount.id;
1151
+ })) {
1152
+ return [2 /*return*/];
1323
1153
  }
1324
- return d;
1325
- }
1326
- return null;
1327
- }
1328
- });
1329
- cart.discounts = newDiscounts.filter(Boolean);
1330
- return [2 /*return*/];
1154
+ toParse = __spreadArray(__spreadArray([], __read(cart.discounts), false), [discount], false);
1155
+ sawNotShipping = false;
1156
+ newDiscounts = toParse.map(function (discountToParse) {
1157
+ var _a;
1158
+ switch ((_a = discountToParse.rule) === null || _a === void 0 ? void 0 : _a.type) {
1159
+ case "free_shipping":
1160
+ if (discountToParse.rule.type === rule.type) {
1161
+ return discount;
1162
+ }
1163
+ return discountToParse;
1164
+ default:
1165
+ if (!sawNotShipping) {
1166
+ sawNotShipping = true;
1167
+ if ((rule === null || rule === void 0 ? void 0 : rule.type) !== "free_shipping") {
1168
+ return discount;
1169
+ }
1170
+ return discountToParse;
1171
+ }
1172
+ return null;
1173
+ }
1174
+ });
1175
+ cart.discounts = newDiscounts.filter(function (newDiscount) {
1176
+ return !!newDiscount;
1177
+ });
1178
+ if (!((rule === null || rule === void 0 ? void 0 : rule.type) !== "free_shipping" && (cart === null || cart === void 0 ? void 0 : cart.items))) return [3 /*break*/, 4];
1179
+ return [4 /*yield*/, this.refreshAdjustments_(cart)];
1180
+ case 3:
1181
+ _a.sent();
1182
+ _a.label = 4;
1183
+ case 4: return [2 /*return*/];
1184
+ }
1185
+ });
1186
+ }); })];
1187
+ case 1: return [2 /*return*/, _a.sent()];
1331
1188
  }
1332
1189
  });
1333
1190
  });
@@ -1342,89 +1199,96 @@ var CartService = /** @class */ (function (_super) {
1342
1199
  return __awaiter(this, void 0, void 0, function () {
1343
1200
  var _this = this;
1344
1201
  return __generator(this, function (_a) {
1345
- return [2 /*return*/, this.atomicPhase_(function (manager) { return __awaiter(_this, void 0, void 0, function () {
1346
- var cart, cartRepo, result;
1347
- var _a;
1348
- return __generator(this, function (_b) {
1349
- switch (_b.label) {
1350
- case 0: return [4 /*yield*/, this.retrieve(cartId, {
1351
- relations: [
1352
- "discounts",
1353
- "discounts.rule",
1354
- "discounts.rule.valid_for",
1355
- "payment_sessions",
1356
- "shipping_methods",
1357
- ],
1358
- })];
1359
- case 1:
1360
- cart = _b.sent();
1361
- if (!cart.discounts.some(function (_a) {
1362
- var rule = _a.rule;
1363
- return rule.type === "free_shipping";
1364
- })) return [3 /*break*/, 3];
1365
- return [4 /*yield*/, this.adjustFreeShipping_(cart, false)];
1366
- case 2:
1367
- _b.sent();
1368
- _b.label = 3;
1369
- case 3:
1370
- cart.discounts = cart.discounts.filter(function (d) { return d.code !== discountCode; });
1371
- cartRepo = manager.getCustomRepository(this.cartRepository_);
1372
- return [4 /*yield*/, cartRepo.save(cart)];
1373
- case 4:
1374
- result = _b.sent();
1375
- if (!((_a = cart.payment_sessions) === null || _a === void 0 ? void 0 : _a.length)) return [3 /*break*/, 6];
1376
- return [4 /*yield*/, this.setPaymentSessions(cartId)];
1377
- case 5:
1378
- _b.sent();
1379
- _b.label = 6;
1380
- case 6: return [4 /*yield*/, this.eventBus_
1381
- .withTransaction(manager)
1382
- .emit(CartService.Events.UPDATED, result)];
1383
- case 7:
1384
- _b.sent();
1385
- return [2 /*return*/, result];
1386
- }
1387
- });
1388
- }); })];
1389
- });
1390
- });
1391
- };
1392
- /**
1393
- * Updates the currently selected payment session.
1394
- * @param cartId - the id of the cart to update the payment session for
1395
- * @param update - the data to update the payment session with
1396
- * @return the resulting cart
1397
- */
1398
- CartService.prototype.updatePaymentSession = function (cartId, update) {
1399
- return __awaiter(this, void 0, void 0, function () {
1400
- var _this = this;
1202
+ switch (_a.label) {
1203
+ case 0: return [4 /*yield*/, this.atomicPhase_(function (transactionManager) { return __awaiter(_this, void 0, void 0, function () {
1204
+ var cart, cartRepo, updatedCart;
1205
+ var _a;
1206
+ return __generator(this, function (_b) {
1207
+ switch (_b.label) {
1208
+ case 0: return [4 /*yield*/, this.retrieve(cartId, {
1209
+ relations: [
1210
+ "discounts",
1211
+ "discounts.rule",
1212
+ "payment_sessions",
1213
+ "shipping_methods",
1214
+ ],
1215
+ })];
1216
+ case 1:
1217
+ cart = _b.sent();
1218
+ if (!cart.discounts.some(function (_a) {
1219
+ var rule = _a.rule;
1220
+ return rule.type === "free_shipping";
1221
+ })) return [3 /*break*/, 3];
1222
+ return [4 /*yield*/, this.adjustFreeShipping_(cart, false)];
1223
+ case 2:
1224
+ _b.sent();
1225
+ _b.label = 3;
1226
+ case 3:
1227
+ cart.discounts = cart.discounts.filter(function (discount) { return discount.code !== discountCode; });
1228
+ cartRepo = transactionManager.getCustomRepository(this.cartRepository_);
1229
+ return [4 /*yield*/, cartRepo.save(cart)];
1230
+ case 4:
1231
+ updatedCart = _b.sent();
1232
+ if (!((_a = updatedCart.payment_sessions) === null || _a === void 0 ? void 0 : _a.length)) return [3 /*break*/, 6];
1233
+ return [4 /*yield*/, this.setPaymentSessions(cartId)];
1234
+ case 5:
1235
+ _b.sent();
1236
+ _b.label = 6;
1237
+ case 6: return [4 /*yield*/, this.eventBus_
1238
+ .withTransaction(transactionManager)
1239
+ .emit(CartService.Events.UPDATED, updatedCart)];
1240
+ case 7:
1241
+ _b.sent();
1242
+ return [2 /*return*/, updatedCart];
1243
+ }
1244
+ });
1245
+ }); })];
1246
+ case 1: return [2 /*return*/, _a.sent()];
1247
+ }
1248
+ });
1249
+ });
1250
+ };
1251
+ /**
1252
+ * Updates the currently selected payment session.
1253
+ * @param cartId - the id of the cart to update the payment session for
1254
+ * @param update - the data to update the payment session with
1255
+ * @return the resulting cart
1256
+ */
1257
+ CartService.prototype.updatePaymentSession = function (cartId, update) {
1258
+ return __awaiter(this, void 0, void 0, function () {
1259
+ var _this = this;
1401
1260
  return __generator(this, function (_a) {
1402
- return [2 /*return*/, this.atomicPhase_(function (manager) { return __awaiter(_this, void 0, void 0, function () {
1403
- var cart, result;
1404
- return __generator(this, function (_a) {
1405
- switch (_a.label) {
1406
- case 0: return [4 /*yield*/, this.retrieve(cartId, {
1407
- relations: ["payment_sessions"],
1408
- })];
1409
- case 1:
1410
- cart = _a.sent();
1411
- if (!cart.payment_session) return [3 /*break*/, 3];
1412
- return [4 /*yield*/, this.paymentProviderService_.updateSessionData(cart.payment_session, update)];
1413
- case 2:
1414
- _a.sent();
1415
- _a.label = 3;
1416
- case 3: return [4 /*yield*/, this.retrieve(cart.id)];
1417
- case 4:
1418
- result = _a.sent();
1419
- return [4 /*yield*/, this.eventBus_
1420
- .withTransaction(manager)
1421
- .emit(CartService.Events.UPDATED, result)];
1422
- case 5:
1423
- _a.sent();
1424
- return [2 /*return*/, result];
1425
- }
1426
- });
1427
- }); })];
1261
+ switch (_a.label) {
1262
+ case 0: return [4 /*yield*/, this.atomicPhase_(function (transactionManager) { return __awaiter(_this, void 0, void 0, function () {
1263
+ var cart, updatedCart;
1264
+ return __generator(this, function (_a) {
1265
+ switch (_a.label) {
1266
+ case 0: return [4 /*yield*/, this.retrieve(cartId, {
1267
+ relations: ["payment_sessions"],
1268
+ })];
1269
+ case 1:
1270
+ cart = _a.sent();
1271
+ if (!cart.payment_session) return [3 /*break*/, 3];
1272
+ return [4 /*yield*/, this.paymentProviderService_
1273
+ .withTransaction(transactionManager)
1274
+ .updateSessionData(cart.payment_session, update)];
1275
+ case 2:
1276
+ _a.sent();
1277
+ _a.label = 3;
1278
+ case 3: return [4 /*yield*/, this.retrieve(cart.id)];
1279
+ case 4:
1280
+ updatedCart = _a.sent();
1281
+ return [4 /*yield*/, this.eventBus_
1282
+ .withTransaction(transactionManager)
1283
+ .emit(CartService.Events.UPDATED, updatedCart)];
1284
+ case 5:
1285
+ _a.sent();
1286
+ return [2 /*return*/, updatedCart];
1287
+ }
1288
+ });
1289
+ }); })];
1290
+ case 1: return [2 /*return*/, _a.sent()];
1291
+ }
1428
1292
  });
1429
1293
  });
1430
1294
  };
@@ -1445,58 +1309,64 @@ var CartService = /** @class */ (function (_super) {
1445
1309
  return __awaiter(this, void 0, void 0, function () {
1446
1310
  var _this = this;
1447
1311
  return __generator(this, function (_a) {
1448
- return [2 /*return*/, this.atomicPhase_(function (manager) { return __awaiter(_this, void 0, void 0, function () {
1449
- var cartRepository, cart, session, freshCart, payment, updated;
1450
- return __generator(this, function (_a) {
1451
- switch (_a.label) {
1452
- case 0:
1453
- cartRepository = manager.getCustomRepository(this.cartRepository_);
1454
- return [4 /*yield*/, this.retrieve(cartId, {
1455
- select: ["total"],
1456
- relations: ["region", "payment_sessions"],
1457
- })];
1458
- case 1:
1459
- cart = _a.sent();
1460
- if (typeof cart.total === "undefined") {
1461
- throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.UNEXPECTED_STATE, "cart.total should be defined");
1462
- }
1463
- // If cart total is 0, we don't perform anything payment related
1464
- if (cart.total <= 0) {
1465
- cart.payment_authorized_at = new Date();
1466
- return [2 /*return*/, cartRepository.save(cart)];
1467
- }
1468
- return [4 /*yield*/, this.paymentProviderService_
1469
- .withTransaction(manager)
1470
- .authorizePayment(cart.payment_session, context)];
1471
- case 2:
1472
- session = _a.sent();
1473
- return [4 /*yield*/, this.retrieve(cart.id, {
1474
- select: ["total"],
1475
- relations: ["payment_sessions"],
1476
- })];
1477
- case 3:
1478
- freshCart = _a.sent();
1479
- if (!(session.status === "authorized")) return [3 /*break*/, 5];
1480
- return [4 /*yield*/, this.paymentProviderService_
1481
- .withTransaction(manager)
1482
- .createPayment(freshCart)];
1483
- case 4:
1484
- payment = _a.sent();
1485
- freshCart.payment = payment;
1486
- freshCart.payment_authorized_at = new Date();
1487
- _a.label = 5;
1488
- case 5: return [4 /*yield*/, cartRepository.save(freshCart)];
1489
- case 6:
1490
- updated = _a.sent();
1491
- return [4 /*yield*/, this.eventBus_
1492
- .withTransaction(manager)
1493
- .emit(CartService.Events.UPDATED, updated)];
1494
- case 7:
1495
- _a.sent();
1496
- return [2 /*return*/, updated];
1497
- }
1498
- });
1499
- }); })];
1312
+ switch (_a.label) {
1313
+ case 0: return [4 /*yield*/, this.atomicPhase_(function (transactionManager) { return __awaiter(_this, void 0, void 0, function () {
1314
+ var cartRepository, cart, session, freshCart, _a, updatedCart;
1315
+ return __generator(this, function (_b) {
1316
+ switch (_b.label) {
1317
+ case 0:
1318
+ cartRepository = transactionManager.getCustomRepository(this.cartRepository_);
1319
+ return [4 /*yield*/, this.retrieve(cartId, {
1320
+ select: ["total"],
1321
+ relations: ["region", "payment_sessions"],
1322
+ })];
1323
+ case 1:
1324
+ cart = _b.sent();
1325
+ if (typeof cart.total === "undefined") {
1326
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.UNEXPECTED_STATE, "cart.total should be defined");
1327
+ }
1328
+ // If cart total is 0, we don't perform anything payment related
1329
+ if (cart.total <= 0) {
1330
+ cart.payment_authorized_at = new Date();
1331
+ return [2 /*return*/, cartRepository.save(cart)];
1332
+ }
1333
+ if (!cart.payment_session) {
1334
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.NOT_ALLOWED, "You cannot complete a cart without a payment session.");
1335
+ }
1336
+ return [4 /*yield*/, this.paymentProviderService_
1337
+ .withTransaction(transactionManager)
1338
+ .authorizePayment(cart.payment_session, context)];
1339
+ case 2:
1340
+ session = _b.sent();
1341
+ return [4 /*yield*/, this.retrieve(cart.id, {
1342
+ select: ["total"],
1343
+ relations: ["payment_sessions"],
1344
+ })];
1345
+ case 3:
1346
+ freshCart = _b.sent();
1347
+ if (!(session.status === "authorized")) return [3 /*break*/, 5];
1348
+ _a = freshCart;
1349
+ return [4 /*yield*/, this.paymentProviderService_
1350
+ .withTransaction(transactionManager)
1351
+ .createPayment(freshCart)];
1352
+ case 4:
1353
+ _a.payment = _b.sent();
1354
+ freshCart.payment_authorized_at = new Date();
1355
+ _b.label = 5;
1356
+ case 5: return [4 /*yield*/, cartRepository.save(freshCart)];
1357
+ case 6:
1358
+ updatedCart = _b.sent();
1359
+ return [4 /*yield*/, this.eventBus_
1360
+ .withTransaction(transactionManager)
1361
+ .emit(CartService.Events.UPDATED, updatedCart)];
1362
+ case 7:
1363
+ _b.sent();
1364
+ return [2 /*return*/, updatedCart];
1365
+ }
1366
+ });
1367
+ }); })];
1368
+ case 1: return [2 /*return*/, _a.sent()];
1369
+ }
1500
1370
  });
1501
1371
  });
1502
1372
  };
@@ -1510,66 +1380,66 @@ var CartService = /** @class */ (function (_super) {
1510
1380
  return __awaiter(this, void 0, void 0, function () {
1511
1381
  var _this = this;
1512
1382
  return __generator(this, function (_a) {
1513
- return [2 /*return*/, this.atomicPhase_(function (manager) { return __awaiter(_this, void 0, void 0, function () {
1514
- var psRepo, cart, sess, result;
1515
- var _this = this;
1516
- return __generator(this, function (_a) {
1517
- switch (_a.label) {
1518
- case 0:
1519
- psRepo = manager.getCustomRepository(this.paymentSessionRepository_);
1520
- return [4 /*yield*/, this.retrieve(cartId, {
1521
- select: [
1522
- "total",
1523
- "subtotal",
1524
- "tax_total",
1525
- "discount_total",
1526
- "gift_card_total",
1527
- ],
1528
- relations: ["region", "region.payment_providers", "payment_sessions"],
1529
- })
1383
+ switch (_a.label) {
1384
+ case 0: return [4 /*yield*/, this.atomicPhase_(function (transactionManager) { return __awaiter(_this, void 0, void 0, function () {
1385
+ var psRepo, cart, paymentSession, updatedCart;
1386
+ var _this = this;
1387
+ return __generator(this, function (_a) {
1388
+ switch (_a.label) {
1389
+ case 0:
1390
+ psRepo = transactionManager.getCustomRepository(this.paymentSessionRepository_);
1391
+ return [4 /*yield*/, this.retrieve(cartId, {
1392
+ select: [
1393
+ "total",
1394
+ "subtotal",
1395
+ "tax_total",
1396
+ "discount_total",
1397
+ "gift_card_total",
1398
+ ],
1399
+ relations: ["region", "region.payment_providers", "payment_sessions"],
1400
+ })
1401
+ // The region must have the provider id in its providers array
1402
+ ];
1403
+ case 1:
1404
+ cart = _a.sent();
1530
1405
  // The region must have the provider id in its providers array
1531
- ];
1532
- case 1:
1533
- cart = _a.sent();
1534
- // The region must have the provider id in its providers array
1535
- if (providerId !== "system" &&
1536
- !(cart.region.payment_providers.length &&
1537
- cart.region.payment_providers.find(function (_a) {
1538
- var id = _a.id;
1539
- return providerId === id;
1540
- }))) {
1541
- throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.NOT_ALLOWED, "The payment method is not available in this region");
1542
- }
1543
- return [4 /*yield*/, Promise.all(cart.payment_sessions.map(function (ps) { return __awaiter(_this, void 0, void 0, function () {
1544
- return __generator(this, function (_a) {
1545
- switch (_a.label) {
1546
- case 0: return [4 /*yield*/, psRepo.save(__assign(__assign({}, ps), { is_selected: null }))];
1547
- case 1: return [2 /*return*/, _a.sent()];
1548
- }
1549
- });
1550
- }); }))];
1551
- case 2:
1552
- _a.sent();
1553
- sess = cart.payment_sessions.find(function (ps) { return ps.provider_id === providerId; });
1554
- if (!sess) {
1555
- throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.UNEXPECTED_STATE, "Could not find payment session");
1556
- }
1557
- sess.is_selected = true;
1558
- return [4 /*yield*/, psRepo.save(sess)];
1559
- case 3:
1560
- _a.sent();
1561
- return [4 /*yield*/, this.retrieve(cartId)];
1562
- case 4:
1563
- result = _a.sent();
1564
- return [4 /*yield*/, this.eventBus_
1565
- .withTransaction(manager)
1566
- .emit(CartService.Events.UPDATED, result)];
1567
- case 5:
1568
- _a.sent();
1569
- return [2 /*return*/, result];
1570
- }
1571
- });
1572
- }); }, "SERIALIZABLE")];
1406
+ if (providerId !== "system" &&
1407
+ !(cart.region.payment_providers.length &&
1408
+ cart.region.payment_providers.find(function (_a) {
1409
+ var id = _a.id;
1410
+ return providerId === id;
1411
+ }))) {
1412
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.NOT_ALLOWED, "The payment method is not available in this region");
1413
+ }
1414
+ return [4 /*yield*/, Promise.all(cart.payment_sessions.map(function (paymentSession) { return __awaiter(_this, void 0, void 0, function () {
1415
+ return __generator(this, function (_a) {
1416
+ return [2 /*return*/, psRepo.save(__assign(__assign({}, paymentSession), { is_selected: null }))];
1417
+ });
1418
+ }); }))];
1419
+ case 2:
1420
+ _a.sent();
1421
+ paymentSession = cart.payment_sessions.find(function (ps) { return ps.provider_id === providerId; });
1422
+ if (!paymentSession) {
1423
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.UNEXPECTED_STATE, "Could not find payment session");
1424
+ }
1425
+ paymentSession.is_selected = true;
1426
+ return [4 /*yield*/, psRepo.save(paymentSession)];
1427
+ case 3:
1428
+ _a.sent();
1429
+ return [4 /*yield*/, this.retrieve(cartId)];
1430
+ case 4:
1431
+ updatedCart = _a.sent();
1432
+ return [4 /*yield*/, this.eventBus_
1433
+ .withTransaction(transactionManager)
1434
+ .emit(CartService.Events.UPDATED, updatedCart)];
1435
+ case 5:
1436
+ _a.sent();
1437
+ return [2 /*return*/, updatedCart];
1438
+ }
1439
+ });
1440
+ }); }, "SERIALIZABLE")];
1441
+ case 1: return [2 /*return*/, _a.sent()];
1442
+ }
1573
1443
  });
1574
1444
  });
1575
1445
  };
@@ -1586,147 +1456,104 @@ var CartService = /** @class */ (function (_super) {
1586
1456
  return __awaiter(this, void 0, void 0, function () {
1587
1457
  var _this = this;
1588
1458
  return __generator(this, function (_a) {
1589
- return [2 /*return*/, this.atomicPhase_(function (manager) { return __awaiter(_this, void 0, void 0, function () {
1590
- var psRepo, cartId, cart, total, region, seen, _loop_1, this_1, _a, _b, session, e_9_1, p, sess, _c, _d, provider, e_10_1;
1591
- var e_9, _e, e_10, _f;
1592
- return __generator(this, function (_g) {
1593
- switch (_g.label) {
1594
- case 0:
1595
- psRepo = manager.getCustomRepository(this.paymentSessionRepository_);
1596
- cartId = typeof cartOrCartId === "string" ? cartOrCartId : cartOrCartId.id;
1597
- return [4 /*yield*/, this.retrieve(cartId, {
1598
- select: [
1599
- "total",
1600
- "subtotal",
1601
- "tax_total",
1602
- "discount_total",
1603
- "shipping_total",
1604
- "gift_card_total",
1605
- ],
1606
- relations: [
1607
- "items",
1608
- "discounts",
1609
- "discounts.rule",
1610
- "discounts.rule.valid_for",
1611
- "gift_cards",
1612
- "shipping_methods",
1613
- "billing_address",
1614
- "shipping_address",
1615
- "region",
1616
- "region.tax_rates",
1617
- "region.payment_providers",
1618
- "payment_sessions",
1619
- "customer",
1620
- ],
1621
- }, { force_taxes: true })];
1622
- case 1:
1623
- cart = _g.sent();
1624
- total = cart.total, region = cart.region;
1625
- if (typeof total === "undefined") {
1626
- throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.UNEXPECTED_STATE, "cart.total must be defined");
1627
- }
1628
- seen = [];
1629
- if (!(cart.payment_sessions && cart.payment_sessions.length)) return [3 /*break*/, 9];
1630
- _loop_1 = function (session) {
1631
- return __generator(this, function (_h) {
1632
- switch (_h.label) {
1633
- case 0:
1634
- if (!(total <= 0 ||
1459
+ switch (_a.label) {
1460
+ case 0: return [4 /*yield*/, this.atomicPhase_(function (transactionManager) { return __awaiter(_this, void 0, void 0, function () {
1461
+ var psRepo, cartId, cart, total, region, seen, paymentProvider, paymentSession;
1462
+ var _this = this;
1463
+ var _a;
1464
+ return __generator(this, function (_b) {
1465
+ switch (_b.label) {
1466
+ case 0:
1467
+ psRepo = transactionManager.getCustomRepository(this.paymentSessionRepository_);
1468
+ cartId = typeof cartOrCartId === "string" ? cartOrCartId : cartOrCartId.id;
1469
+ return [4 /*yield*/, this.retrieve(cartId, {
1470
+ select: [
1471
+ "total",
1472
+ "subtotal",
1473
+ "tax_total",
1474
+ "discount_total",
1475
+ "shipping_total",
1476
+ "gift_card_total",
1477
+ ],
1478
+ relations: [
1479
+ "items",
1480
+ "discounts",
1481
+ "discounts.rule",
1482
+ "gift_cards",
1483
+ "shipping_methods",
1484
+ "billing_address",
1485
+ "shipping_address",
1486
+ "region",
1487
+ "region.tax_rates",
1488
+ "region.payment_providers",
1489
+ "payment_sessions",
1490
+ "customer",
1491
+ ],
1492
+ }, { force_taxes: true })];
1493
+ case 1:
1494
+ cart = _b.sent();
1495
+ total = cart.total, region = cart.region;
1496
+ if (typeof total === "undefined") {
1497
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.UNEXPECTED_STATE, "cart.total must be defined");
1498
+ }
1499
+ seen = [];
1500
+ if (!((_a = cart.payment_sessions) === null || _a === void 0 ? void 0 : _a.length)) return [3 /*break*/, 3];
1501
+ return [4 /*yield*/, Promise.all(cart.payment_sessions.map(function (paymentSession) { return __awaiter(_this, void 0, void 0, function () {
1502
+ return __generator(this, function (_a) {
1503
+ if (total <= 0 ||
1635
1504
  !region.payment_providers.find(function (_a) {
1636
1505
  var id = _a.id;
1637
- return id === session.provider_id;
1638
- }))) return [3 /*break*/, 2];
1639
- return [4 /*yield*/, this_1.paymentProviderService_
1640
- .withTransaction(manager)
1641
- .deleteSession(session)];
1642
- case 1:
1643
- _h.sent();
1644
- return [3 /*break*/, 4];
1645
- case 2:
1646
- seen.push(session.provider_id);
1647
- return [4 /*yield*/, this_1.paymentProviderService_
1648
- .withTransaction(manager)
1649
- .updateSession(session, cart)];
1650
- case 3:
1651
- _h.sent();
1652
- _h.label = 4;
1653
- case 4: return [2 /*return*/];
1654
- }
1655
- });
1656
- };
1657
- this_1 = this;
1658
- _g.label = 2;
1659
- case 2:
1660
- _g.trys.push([2, 7, 8, 9]);
1661
- _a = __values(cart.payment_sessions), _b = _a.next();
1662
- _g.label = 3;
1663
- case 3:
1664
- if (!!_b.done) return [3 /*break*/, 6];
1665
- session = _b.value;
1666
- return [5 /*yield**/, _loop_1(session)];
1667
- case 4:
1668
- _g.sent();
1669
- _g.label = 5;
1670
- case 5:
1671
- _b = _a.next();
1672
- return [3 /*break*/, 3];
1673
- case 6: return [3 /*break*/, 9];
1674
- case 7:
1675
- e_9_1 = _g.sent();
1676
- e_9 = { error: e_9_1 };
1677
- return [3 /*break*/, 9];
1678
- case 8:
1679
- try {
1680
- if (_b && !_b.done && (_e = _a.return)) _e.call(_a);
1681
- }
1682
- finally { if (e_9) throw e_9.error; }
1683
- return [7 /*endfinally*/];
1684
- case 9:
1685
- if (!(total > 0)) return [3 /*break*/, 19];
1686
- if (!(region.payment_providers.length === 1 && !cart.payment_session)) return [3 /*break*/, 12];
1687
- p = region.payment_providers[0];
1688
- return [4 /*yield*/, this.paymentProviderService_
1689
- .withTransaction(manager)
1690
- .createSession(p.id, cart)];
1691
- case 10:
1692
- sess = _g.sent();
1693
- sess.is_selected = true;
1694
- return [4 /*yield*/, psRepo.save(sess)];
1695
- case 11:
1696
- _g.sent();
1697
- return [3 /*break*/, 19];
1698
- case 12:
1699
- _g.trys.push([12, 17, 18, 19]);
1700
- _c = __values(region.payment_providers), _d = _c.next();
1701
- _g.label = 13;
1702
- case 13:
1703
- if (!!_d.done) return [3 /*break*/, 16];
1704
- provider = _d.value;
1705
- if (!!seen.includes(provider.id)) return [3 /*break*/, 15];
1706
- return [4 /*yield*/, this.paymentProviderService_
1707
- .withTransaction(manager)
1708
- .createSession(provider.id, cart)];
1709
- case 14:
1710
- _g.sent();
1711
- _g.label = 15;
1712
- case 15:
1713
- _d = _c.next();
1714
- return [3 /*break*/, 13];
1715
- case 16: return [3 /*break*/, 19];
1716
- case 17:
1717
- e_10_1 = _g.sent();
1718
- e_10 = { error: e_10_1 };
1719
- return [3 /*break*/, 19];
1720
- case 18:
1721
- try {
1722
- if (_d && !_d.done && (_f = _c.return)) _f.call(_c);
1723
- }
1724
- finally { if (e_10) throw e_10.error; }
1725
- return [7 /*endfinally*/];
1726
- case 19: return [2 /*return*/];
1727
- }
1728
- });
1729
- }); })];
1506
+ return id === paymentSession.provider_id;
1507
+ })) {
1508
+ return [2 /*return*/, this.paymentProviderService_
1509
+ .withTransaction(transactionManager)
1510
+ .deleteSession(paymentSession)];
1511
+ }
1512
+ else {
1513
+ seen.push(paymentSession.provider_id);
1514
+ return [2 /*return*/, this.paymentProviderService_
1515
+ .withTransaction(transactionManager)
1516
+ .updateSession(paymentSession, cart)];
1517
+ }
1518
+ return [2 /*return*/];
1519
+ });
1520
+ }); }))];
1521
+ case 2:
1522
+ _b.sent();
1523
+ _b.label = 3;
1524
+ case 3:
1525
+ if (!(total > 0)) return [3 /*break*/, 8];
1526
+ if (!(region.payment_providers.length === 1 && !cart.payment_session)) return [3 /*break*/, 6];
1527
+ paymentProvider = region.payment_providers[0];
1528
+ return [4 /*yield*/, this.paymentProviderService_
1529
+ .withTransaction(transactionManager)
1530
+ .createSession(paymentProvider.id, cart)];
1531
+ case 4:
1532
+ paymentSession = _b.sent();
1533
+ paymentSession.is_selected = true;
1534
+ return [4 /*yield*/, psRepo.save(paymentSession)];
1535
+ case 5:
1536
+ _b.sent();
1537
+ return [3 /*break*/, 8];
1538
+ case 6: return [4 /*yield*/, Promise.all(region.payment_providers.map(function (paymentProvider) { return __awaiter(_this, void 0, void 0, function () {
1539
+ return __generator(this, function (_a) {
1540
+ if (!seen.includes(paymentProvider.id)) {
1541
+ return [2 /*return*/, this.paymentProviderService_
1542
+ .withTransaction(transactionManager)
1543
+ .createSession(paymentProvider.id, cart)];
1544
+ }
1545
+ return [2 /*return*/];
1546
+ });
1547
+ }); }))];
1548
+ case 7:
1549
+ _b.sent();
1550
+ _b.label = 8;
1551
+ case 8: return [2 /*return*/];
1552
+ }
1553
+ });
1554
+ }); })];
1555
+ case 1: return [2 /*return*/, _a.sent()];
1556
+ }
1730
1557
  });
1731
1558
  });
1732
1559
  };
@@ -1741,46 +1568,49 @@ var CartService = /** @class */ (function (_super) {
1741
1568
  return __awaiter(this, void 0, void 0, function () {
1742
1569
  var _this = this;
1743
1570
  return __generator(this, function (_a) {
1744
- return [2 /*return*/, this.atomicPhase_(function (manager) { return __awaiter(_this, void 0, void 0, function () {
1745
- var cart, cartRepo, session;
1746
- return __generator(this, function (_a) {
1747
- switch (_a.label) {
1748
- case 0: return [4 /*yield*/, this.retrieve(cartId, {
1749
- relations: ["payment_sessions"],
1750
- })];
1751
- case 1:
1752
- cart = _a.sent();
1753
- cartRepo = manager.getCustomRepository(this.cartRepository_);
1754
- if (!cart.payment_sessions) return [3 /*break*/, 3];
1755
- session = cart.payment_sessions.find(function (_a) {
1756
- var provider_id = _a.provider_id;
1757
- return provider_id === providerId;
1758
- });
1759
- cart.payment_sessions = cart.payment_sessions.filter(function (_a) {
1760
- var provider_id = _a.provider_id;
1761
- return provider_id !== providerId;
1762
- });
1763
- if (!session) return [3 /*break*/, 3];
1764
- // Delete the session with the provider
1765
- return [4 /*yield*/, this.paymentProviderService_
1766
- .withTransaction(manager)
1767
- .deleteSession(session)];
1768
- case 2:
1769
- // Delete the session with the provider
1770
- _a.sent();
1771
- _a.label = 3;
1772
- case 3: return [4 /*yield*/, cartRepo.save(cart)];
1773
- case 4:
1774
- _a.sent();
1775
- return [4 /*yield*/, this.eventBus_
1776
- .withTransaction(manager)
1777
- .emit(CartService.Events.UPDATED, cart)];
1778
- case 5:
1779
- _a.sent();
1780
- return [2 /*return*/, cart];
1781
- }
1782
- });
1783
- }); })];
1571
+ switch (_a.label) {
1572
+ case 0: return [4 /*yield*/, this.atomicPhase_(function (transactionManager) { return __awaiter(_this, void 0, void 0, function () {
1573
+ var cart, cartRepo, paymentSession;
1574
+ return __generator(this, function (_a) {
1575
+ switch (_a.label) {
1576
+ case 0: return [4 /*yield*/, this.retrieve(cartId, {
1577
+ relations: ["payment_sessions"],
1578
+ })];
1579
+ case 1:
1580
+ cart = _a.sent();
1581
+ cartRepo = transactionManager.getCustomRepository(this.cartRepository_);
1582
+ if (!cart.payment_sessions) return [3 /*break*/, 3];
1583
+ paymentSession = cart.payment_sessions.find(function (_a) {
1584
+ var provider_id = _a.provider_id;
1585
+ return provider_id === providerId;
1586
+ });
1587
+ cart.payment_sessions = cart.payment_sessions.filter(function (_a) {
1588
+ var provider_id = _a.provider_id;
1589
+ return provider_id !== providerId;
1590
+ });
1591
+ if (!paymentSession) return [3 /*break*/, 3];
1592
+ // Delete the session with the provider
1593
+ return [4 /*yield*/, this.paymentProviderService_
1594
+ .withTransaction(transactionManager)
1595
+ .deleteSession(paymentSession)];
1596
+ case 2:
1597
+ // Delete the session with the provider
1598
+ _a.sent();
1599
+ _a.label = 3;
1600
+ case 3: return [4 /*yield*/, cartRepo.save(cart)];
1601
+ case 4:
1602
+ _a.sent();
1603
+ return [4 /*yield*/, this.eventBus_
1604
+ .withTransaction(transactionManager)
1605
+ .emit(CartService.Events.UPDATED, cart)];
1606
+ case 5:
1607
+ _a.sent();
1608
+ return [2 /*return*/, cart];
1609
+ }
1610
+ });
1611
+ }); })];
1612
+ case 1: return [2 /*return*/, _a.sent()];
1613
+ }
1784
1614
  });
1785
1615
  });
1786
1616
  };
@@ -1795,41 +1625,44 @@ var CartService = /** @class */ (function (_super) {
1795
1625
  return __awaiter(this, void 0, void 0, function () {
1796
1626
  var _this = this;
1797
1627
  return __generator(this, function (_a) {
1798
- return [2 /*return*/, this.atomicPhase_(function (manager) { return __awaiter(_this, void 0, void 0, function () {
1799
- var cart, session, result;
1800
- return __generator(this, function (_a) {
1801
- switch (_a.label) {
1802
- case 0: return [4 /*yield*/, this.retrieve(cartId, {
1803
- relations: ["payment_sessions"],
1804
- })];
1805
- case 1:
1806
- cart = _a.sent();
1807
- if (!cart.payment_sessions) return [3 /*break*/, 3];
1808
- session = cart.payment_sessions.find(function (_a) {
1809
- var provider_id = _a.provider_id;
1810
- return provider_id === providerId;
1811
- });
1812
- if (!session) return [3 /*break*/, 3];
1813
- // Delete the session with the provider
1814
- return [4 /*yield*/, this.paymentProviderService_
1815
- .withTransaction(manager)
1816
- .refreshSession(session, cart)];
1817
- case 2:
1818
- // Delete the session with the provider
1819
- _a.sent();
1820
- _a.label = 3;
1821
- case 3: return [4 /*yield*/, this.retrieve(cartId)];
1822
- case 4:
1823
- result = _a.sent();
1824
- return [4 /*yield*/, this.eventBus_
1825
- .withTransaction(manager)
1826
- .emit(CartService.Events.UPDATED, result)];
1827
- case 5:
1828
- _a.sent();
1829
- return [2 /*return*/, result];
1830
- }
1831
- });
1832
- }); })];
1628
+ switch (_a.label) {
1629
+ case 0: return [4 /*yield*/, this.atomicPhase_(function (transactionManager) { return __awaiter(_this, void 0, void 0, function () {
1630
+ var cart, paymentSession, updatedCart;
1631
+ return __generator(this, function (_a) {
1632
+ switch (_a.label) {
1633
+ case 0: return [4 /*yield*/, this.retrieve(cartId, {
1634
+ relations: ["payment_sessions"],
1635
+ })];
1636
+ case 1:
1637
+ cart = _a.sent();
1638
+ if (!cart.payment_sessions) return [3 /*break*/, 3];
1639
+ paymentSession = cart.payment_sessions.find(function (_a) {
1640
+ var provider_id = _a.provider_id;
1641
+ return provider_id === providerId;
1642
+ });
1643
+ if (!paymentSession) return [3 /*break*/, 3];
1644
+ // Delete the session with the provider
1645
+ return [4 /*yield*/, this.paymentProviderService_
1646
+ .withTransaction(transactionManager)
1647
+ .refreshSession(paymentSession, cart)];
1648
+ case 2:
1649
+ // Delete the session with the provider
1650
+ _a.sent();
1651
+ _a.label = 3;
1652
+ case 3: return [4 /*yield*/, this.retrieve(cartId)];
1653
+ case 4:
1654
+ updatedCart = _a.sent();
1655
+ return [4 /*yield*/, this.eventBus_
1656
+ .withTransaction(transactionManager)
1657
+ .emit(CartService.Events.UPDATED, updatedCart)];
1658
+ case 5:
1659
+ _a.sent();
1660
+ return [2 /*return*/, updatedCart];
1661
+ }
1662
+ });
1663
+ }); })];
1664
+ case 1: return [2 /*return*/, _a.sent()];
1665
+ }
1833
1666
  });
1834
1667
  });
1835
1668
  };
@@ -1849,133 +1682,119 @@ var CartService = /** @class */ (function (_super) {
1849
1682
  return __awaiter(this, void 0, void 0, function () {
1850
1683
  var _this = this;
1851
1684
  return __generator(this, function (_a) {
1852
- return [2 /*return*/, this.atomicPhase_(function (manager) { return __awaiter(_this, void 0, void 0, function () {
1853
- var cart, cartCustomShippingOptions, customShippingOption, shipping_methods, shippingMethodConfig, newMethod, methods, shipping_methods_1, shipping_methods_1_1, sm, e_11_1, _a, _b, item, e_12_1, result;
1854
- var e_11, _c, e_12, _d;
1855
- return __generator(this, function (_e) {
1856
- switch (_e.label) {
1857
- case 0: return [4 /*yield*/, this.retrieve(cartId, {
1858
- select: ["subtotal"],
1859
- relations: [
1860
- "shipping_methods",
1861
- "discounts",
1862
- "discounts.rule",
1863
- "discounts.rule.valid_for",
1864
- "shipping_methods.shipping_option",
1865
- "items",
1866
- "items.variant",
1867
- "payment_sessions",
1868
- "items.variant.product",
1869
- ],
1870
- })];
1871
- case 1:
1872
- cart = _e.sent();
1873
- return [4 /*yield*/, this.customShippingOptionService_.list({ cart_id: cart.id })];
1874
- case 2:
1875
- cartCustomShippingOptions = _e.sent();
1876
- customShippingOption = this.findCustomShippingOption(cartCustomShippingOptions, optionId);
1877
- shipping_methods = cart.shipping_methods;
1878
- shippingMethodConfig = customShippingOption
1879
- ? { cart_id: cart.id, price: customShippingOption.price }
1880
- : {
1881
- cart: cart,
1882
- };
1883
- return [4 /*yield*/, this.shippingOptionService_
1884
- .withTransaction(manager)
1885
- .createShippingMethod(optionId, data, shippingMethodConfig)];
1886
- case 3:
1887
- newMethod = _e.sent();
1888
- methods = [newMethod];
1889
- if (!shipping_methods.length) return [3 /*break*/, 12];
1890
- _e.label = 4;
1891
- case 4:
1892
- _e.trys.push([4, 10, 11, 12]);
1893
- shipping_methods_1 = __values(shipping_methods), shipping_methods_1_1 = shipping_methods_1.next();
1894
- _e.label = 5;
1895
- case 5:
1896
- if (!!shipping_methods_1_1.done) return [3 /*break*/, 9];
1897
- sm = shipping_methods_1_1.value;
1898
- if (!(sm.shipping_option.profile_id ===
1899
- newMethod.shipping_option.profile_id)) return [3 /*break*/, 7];
1900
- return [4 /*yield*/, this.shippingOptionService_
1901
- .withTransaction(manager)
1902
- .deleteShippingMethod(sm)];
1903
- case 6:
1904
- _e.sent();
1905
- return [3 /*break*/, 8];
1906
- case 7:
1907
- methods.push(sm);
1908
- _e.label = 8;
1909
- case 8:
1910
- shipping_methods_1_1 = shipping_methods_1.next();
1911
- return [3 /*break*/, 5];
1912
- case 9: return [3 /*break*/, 12];
1913
- case 10:
1914
- e_11_1 = _e.sent();
1915
- e_11 = { error: e_11_1 };
1916
- return [3 /*break*/, 12];
1917
- case 11:
1918
- try {
1919
- if (shipping_methods_1_1 && !shipping_methods_1_1.done && (_c = shipping_methods_1.return)) _c.call(shipping_methods_1);
1920
- }
1921
- finally { if (e_11) throw e_11.error; }
1922
- return [7 /*endfinally*/];
1923
- case 12:
1924
- _e.trys.push([12, 17, 18, 19]);
1925
- _a = __values(cart.items), _b = _a.next();
1926
- _e.label = 13;
1927
- case 13:
1928
- if (!!_b.done) return [3 /*break*/, 16];
1929
- item = _b.value;
1930
- return [4 /*yield*/, this.lineItemService_.withTransaction(manager).update(item.id, {
1931
- has_shipping: this.validateLineItemShipping_(methods, item),
1685
+ switch (_a.label) {
1686
+ case 0: return [4 /*yield*/, this.atomicPhase_(function (transactionManager) { return __awaiter(_this, void 0, void 0, function () {
1687
+ var cart, cartCustomShippingOptions, customShippingOption, shipping_methods, shippingMethodConfig, newShippingMethod, methods, shipping_methods_1, shipping_methods_1_1, shippingMethod, e_3_1, updatedCart;
1688
+ var e_3, _a;
1689
+ var _this = this;
1690
+ var _b;
1691
+ return __generator(this, function (_c) {
1692
+ switch (_c.label) {
1693
+ case 0: return [4 /*yield*/, this.retrieve(cartId, {
1694
+ select: ["subtotal"],
1695
+ relations: [
1696
+ "shipping_methods",
1697
+ "discounts",
1698
+ "discounts.rule",
1699
+ "shipping_methods.shipping_option",
1700
+ "items",
1701
+ "items.variant",
1702
+ "payment_sessions",
1703
+ "items.variant.product",
1704
+ ],
1932
1705
  })];
1933
- case 14:
1934
- _e.sent();
1935
- _e.label = 15;
1936
- case 15:
1937
- _b = _a.next();
1938
- return [3 /*break*/, 13];
1939
- case 16: return [3 /*break*/, 19];
1940
- case 17:
1941
- e_12_1 = _e.sent();
1942
- e_12 = { error: e_12_1 };
1943
- return [3 /*break*/, 19];
1944
- case 18:
1945
- try {
1946
- if (_b && !_b.done && (_d = _a.return)) _d.call(_a);
1947
- }
1948
- finally { if (e_12) throw e_12.error; }
1949
- return [7 /*endfinally*/];
1950
- case 19: return [4 /*yield*/, this.retrieve(cartId, {
1951
- relations: [
1952
- "discounts",
1953
- "discounts.rule",
1954
- "discounts.rule.valid_for",
1955
- "shipping_methods",
1956
- ],
1957
- })
1958
- // if cart has freeshipping, adjust price
1959
- ];
1960
- case 20:
1961
- result = _e.sent();
1962
- if (!result.discounts.some(function (_a) {
1963
- var rule = _a.rule;
1964
- return rule.type === "free_shipping";
1965
- })) return [3 /*break*/, 22];
1966
- return [4 /*yield*/, this.adjustFreeShipping_(result, true)];
1967
- case 21:
1968
- _e.sent();
1969
- _e.label = 22;
1970
- case 22: return [4 /*yield*/, this.eventBus_
1971
- .withTransaction(manager)
1972
- .emit(CartService.Events.UPDATED, result)];
1973
- case 23:
1974
- _e.sent();
1975
- return [2 /*return*/, result];
1976
- }
1977
- });
1978
- }); }, "SERIALIZABLE")];
1706
+ case 1:
1707
+ cart = _c.sent();
1708
+ return [4 /*yield*/, this.customShippingOptionService_
1709
+ .withTransaction(transactionManager)
1710
+ .list({ cart_id: cart.id })];
1711
+ case 2:
1712
+ cartCustomShippingOptions = _c.sent();
1713
+ customShippingOption = this.findCustomShippingOption(cartCustomShippingOptions, optionId);
1714
+ shipping_methods = cart.shipping_methods;
1715
+ shippingMethodConfig = customShippingOption
1716
+ ? { cart_id: cart.id, price: customShippingOption.price }
1717
+ : { cart: cart };
1718
+ return [4 /*yield*/, this.shippingOptionService_
1719
+ .withTransaction(transactionManager)
1720
+ .createShippingMethod(optionId, data, shippingMethodConfig)];
1721
+ case 3:
1722
+ newShippingMethod = _c.sent();
1723
+ methods = [newShippingMethod];
1724
+ if (!(shipping_methods === null || shipping_methods === void 0 ? void 0 : shipping_methods.length)) return [3 /*break*/, 12];
1725
+ _c.label = 4;
1726
+ case 4:
1727
+ _c.trys.push([4, 10, 11, 12]);
1728
+ shipping_methods_1 = __values(shipping_methods), shipping_methods_1_1 = shipping_methods_1.next();
1729
+ _c.label = 5;
1730
+ case 5:
1731
+ if (!!shipping_methods_1_1.done) return [3 /*break*/, 9];
1732
+ shippingMethod = shipping_methods_1_1.value;
1733
+ if (!(shippingMethod.shipping_option.profile_id ===
1734
+ newShippingMethod.shipping_option.profile_id)) return [3 /*break*/, 7];
1735
+ return [4 /*yield*/, this.shippingOptionService_
1736
+ .withTransaction(transactionManager)
1737
+ .deleteShippingMethods(shippingMethod)];
1738
+ case 6:
1739
+ _c.sent();
1740
+ return [3 /*break*/, 8];
1741
+ case 7:
1742
+ methods.push(shippingMethod);
1743
+ _c.label = 8;
1744
+ case 8:
1745
+ shipping_methods_1_1 = shipping_methods_1.next();
1746
+ return [3 /*break*/, 5];
1747
+ case 9: return [3 /*break*/, 12];
1748
+ case 10:
1749
+ e_3_1 = _c.sent();
1750
+ e_3 = { error: e_3_1 };
1751
+ return [3 /*break*/, 12];
1752
+ case 11:
1753
+ try {
1754
+ if (shipping_methods_1_1 && !shipping_methods_1_1.done && (_a = shipping_methods_1.return)) _a.call(shipping_methods_1);
1755
+ }
1756
+ finally { if (e_3) throw e_3.error; }
1757
+ return [7 /*endfinally*/];
1758
+ case 12:
1759
+ if (!((_b = cart.items) === null || _b === void 0 ? void 0 : _b.length)) return [3 /*break*/, 14];
1760
+ return [4 /*yield*/, Promise.all(cart.items.map(function (item) { return __awaiter(_this, void 0, void 0, function () {
1761
+ return __generator(this, function (_a) {
1762
+ return [2 /*return*/, this.lineItemService_
1763
+ .withTransaction(transactionManager)
1764
+ .update(item.id, {
1765
+ has_shipping: this.validateLineItemShipping_(methods, item),
1766
+ })];
1767
+ });
1768
+ }); }))];
1769
+ case 13:
1770
+ _c.sent();
1771
+ _c.label = 14;
1772
+ case 14: return [4 /*yield*/, this.retrieve(cartId, {
1773
+ relations: ["discounts", "discounts.rule", "shipping_methods"],
1774
+ })
1775
+ // if cart has freeshipping, adjust price
1776
+ ];
1777
+ case 15:
1778
+ updatedCart = _c.sent();
1779
+ if (!updatedCart.discounts.some(function (_a) {
1780
+ var rule = _a.rule;
1781
+ return rule.type === "free_shipping";
1782
+ })) return [3 /*break*/, 17];
1783
+ return [4 /*yield*/, this.adjustFreeShipping_(updatedCart, true)];
1784
+ case 16:
1785
+ _c.sent();
1786
+ _c.label = 17;
1787
+ case 17: return [4 /*yield*/, this.eventBus_
1788
+ .withTransaction(transactionManager)
1789
+ .emit(CartService.Events.UPDATED, updatedCart)];
1790
+ case 18:
1791
+ _c.sent();
1792
+ return [2 /*return*/, updatedCart];
1793
+ }
1794
+ });
1795
+ }); }, "SERIALIZABLE")];
1796
+ case 1: return [2 /*return*/, _a.sent()];
1797
+ }
1979
1798
  });
1980
1799
  });
1981
1800
  };
@@ -1994,74 +1813,103 @@ var CartService = /** @class */ (function (_super) {
1994
1813
  }
1995
1814
  return customOption;
1996
1815
  };
1997
- /**
1998
- * Set's the region of a cart.
1999
- * @param cart - the cart to set region on
2000
- * @param regionId - the id of the region to set the region to
2001
- * @param countryCode - the country code to set the country to
2002
- * @return the result of the update operation
2003
- */
2004
- CartService.prototype.setRegion_ = function (cart, regionId, countryCode) {
1816
+ CartService.prototype.updateUnitPrices_ = function (cart, regionId, customer_id) {
1817
+ var _a, _b;
2005
1818
  return __awaiter(this, void 0, void 0, function () {
2006
- var region, addrRepo, _a, shippingAddress, updated, updated, smRepo, newDiscounts;
1819
+ var transactionManager, region_1, _c;
2007
1820
  var _this = this;
2008
- return __generator(this, function (_b) {
2009
- switch (_b.label) {
1821
+ return __generator(this, function (_d) {
1822
+ switch (_d.label) {
2010
1823
  case 0:
2011
- if (cart.completed_at || cart.payment_authorized_at) {
2012
- throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.NOT_ALLOWED, "Cannot change the region of a completed cart");
2013
- }
2014
- return [4 /*yield*/, this.regionService_.retrieve(regionId, {
1824
+ transactionManager = (_a = this.transactionManager_) !== null && _a !== void 0 ? _a : this.manager_;
1825
+ if (!((_b = cart.items) === null || _b === void 0 ? void 0 : _b.length)) return [3 /*break*/, 3];
1826
+ return [4 /*yield*/, this.regionService_
1827
+ .withTransaction(this.transactionManager_)
1828
+ .retrieve(regionId || cart.region_id, {
2015
1829
  relations: ["countries"],
2016
1830
  })];
2017
1831
  case 1:
2018
- region = _b.sent();
2019
- addrRepo = this.manager_.getCustomRepository(this.addressRepository_);
2020
- cart.region = region;
2021
- cart.region_id = region.id;
2022
- if (!cart.items.length) return [3 /*break*/, 3];
2023
- _a = cart;
2024
- return [4 /*yield*/, Promise.all(cart.items
2025
- .map(function (item) { return __awaiter(_this, void 0, void 0, function () {
1832
+ region_1 = _d.sent();
1833
+ _c = cart;
1834
+ return [4 /*yield*/, Promise.all(cart.items.map(function (item) { return __awaiter(_this, void 0, void 0, function () {
2026
1835
  var availablePrice;
2027
1836
  return __generator(this, function (_a) {
2028
1837
  switch (_a.label) {
2029
- case 0: return [4 /*yield*/, this.productVariantService_
2030
- .getRegionPrice(item.variant_id, regionId)
1838
+ case 0: return [4 /*yield*/, this.priceSelectionStrategy_
1839
+ .withTransaction(transactionManager)
1840
+ .calculateVariantPrice(item.variant_id, {
1841
+ region_id: region_1.id,
1842
+ currency_code: region_1.currency_code,
1843
+ quantity: item.quantity,
1844
+ customer_id: customer_id || cart.customer_id,
1845
+ include_discount_prices: true,
1846
+ })
2031
1847
  .catch(function () { return undefined; })];
2032
1848
  case 1:
2033
1849
  availablePrice = _a.sent();
2034
- if (!(availablePrice !== undefined)) return [3 /*break*/, 2];
1850
+ if (!(availablePrice !== undefined &&
1851
+ availablePrice.calculatedPrice !== null)) return [3 /*break*/, 2];
2035
1852
  return [2 /*return*/, this.lineItemService_
2036
- .withTransaction(this.transactionManager_)
1853
+ .withTransaction(transactionManager)
2037
1854
  .update(item.id, {
2038
1855
  has_shipping: false,
2039
- unit_price: availablePrice,
1856
+ unit_price: availablePrice.calculatedPrice,
2040
1857
  })];
2041
1858
  case 2: return [4 /*yield*/, this.lineItemService_
2042
- .withTransaction(this.transactionManager_)
1859
+ .withTransaction(transactionManager)
2043
1860
  .delete(item.id)];
2044
1861
  case 3:
2045
1862
  _a.sent();
2046
- return [2 /*return*/, null];
1863
+ return [2 /*return*/];
2047
1864
  }
2048
1865
  });
2049
- }); })
2050
- .filter(Boolean))];
1866
+ }); }))];
2051
1867
  case 2:
2052
- _a.items = _b.sent();
2053
- _b.label = 3;
2054
- case 3:
1868
+ _c.items = (_d.sent()).filter(function (item) { return !!item; });
1869
+ _d.label = 3;
1870
+ case 3: return [2 /*return*/];
1871
+ }
1872
+ });
1873
+ });
1874
+ };
1875
+ /**
1876
+ * Set's the region of a cart.
1877
+ * @param cart - the cart to set region on
1878
+ * @param regionId - the id of the region to set the region to
1879
+ * @param countryCode - the country code to set the country to
1880
+ * @return the result of the update operation
1881
+ */
1882
+ CartService.prototype.setRegion_ = function (cart, regionId, countryCode) {
1883
+ var _a;
1884
+ return __awaiter(this, void 0, void 0, function () {
1885
+ var transactionManager, region, addrRepo, shippingAddress, updated, updated, paymentSessionRepo;
1886
+ return __generator(this, function (_b) {
1887
+ switch (_b.label) {
1888
+ case 0:
1889
+ transactionManager = (_a = this.transactionManager_) !== null && _a !== void 0 ? _a : this.manager_;
1890
+ if (cart.completed_at || cart.payment_authorized_at) {
1891
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.NOT_ALLOWED, "Cannot change the region of a completed cart");
1892
+ }
1893
+ return [4 /*yield*/, this.regionService_
1894
+ .withTransaction(this.transactionManager_)
1895
+ .retrieve(regionId, {
1896
+ relations: ["countries"],
1897
+ })];
1898
+ case 1:
1899
+ region = _b.sent();
1900
+ addrRepo = transactionManager.getCustomRepository(this.addressRepository_);
1901
+ cart.region = region;
1902
+ cart.region_id = region.id;
2055
1903
  shippingAddress = {};
2056
- if (!cart.shipping_address_id) return [3 /*break*/, 5];
1904
+ if (!cart.shipping_address_id) return [3 /*break*/, 3];
2057
1905
  return [4 /*yield*/, addrRepo.findOne({
2058
1906
  where: { id: cart.shipping_address_id },
2059
1907
  })];
2060
- case 4:
1908
+ case 2:
2061
1909
  shippingAddress = (_b.sent());
2062
- _b.label = 5;
2063
- case 5:
2064
- if (!(countryCode !== null)) return [3 /*break*/, 7];
1910
+ _b.label = 3;
1911
+ case 3:
1912
+ if (!(countryCode !== null)) return [3 /*break*/, 5];
2065
1913
  if (!region.countries.find(function (_a) {
2066
1914
  var iso_2 = _a.iso_2;
2067
1915
  return iso_2 === countryCode.toLowerCase();
@@ -2070,10 +1918,10 @@ var CartService = /** @class */ (function (_super) {
2070
1918
  }
2071
1919
  updated = __assign(__assign({}, shippingAddress), { country_code: countryCode.toLowerCase() });
2072
1920
  return [4 /*yield*/, addrRepo.save(updated)];
2073
- case 6:
1921
+ case 4:
2074
1922
  _b.sent();
2075
- return [3 /*break*/, 9];
2076
- case 7:
1923
+ return [3 /*break*/, 7];
1924
+ case 5:
2077
1925
  updated = __assign({}, shippingAddress);
2078
1926
  // If the country code of a shipping address is set we need to clear it
2079
1927
  if (!lodash_1.default.isEmpty(shippingAddress) && shippingAddress.country_code) {
@@ -2084,42 +1932,38 @@ var CartService = /** @class */ (function (_super) {
2084
1932
  updated = __assign(__assign({}, updated), { country_code: region.countries[0].iso_2 });
2085
1933
  }
2086
1934
  return [4 /*yield*/, this.updateShippingAddress_(cart, updated, addrRepo)];
1935
+ case 6:
1936
+ _b.sent();
1937
+ _b.label = 7;
1938
+ case 7:
1939
+ if (!(cart.shipping_methods && cart.shipping_methods.length)) return [3 /*break*/, 9];
1940
+ return [4 /*yield*/, this.shippingOptionService_
1941
+ .withTransaction(transactionManager)
1942
+ .deleteShippingMethods(cart.shipping_methods)];
2087
1943
  case 8:
2088
1944
  _b.sent();
2089
1945
  _b.label = 9;
2090
1946
  case 9:
2091
- if (!(cart.shipping_methods && cart.shipping_methods.length)) return [3 /*break*/, 11];
2092
- smRepo = this.manager_.getCustomRepository(this.shippingMethodRepository_);
2093
- return [4 /*yield*/, smRepo.remove(cart.shipping_methods)];
2094
- case 10:
2095
- _b.sent();
2096
- _b.label = 11;
2097
- case 11:
2098
1947
  if (cart.discounts && cart.discounts.length) {
2099
- newDiscounts = cart.discounts.map(function (d) {
2100
- if (d.regions.find(function (_a) {
1948
+ cart.discounts = cart.discounts.filter(function (discount) {
1949
+ return discount.regions.find(function (_a) {
2101
1950
  var id = _a.id;
2102
1951
  return id === regionId;
2103
- })) {
2104
- return d;
2105
- }
2106
- return null;
1952
+ });
2107
1953
  });
2108
- cart.discounts = newDiscounts.filter(Boolean);
2109
1954
  }
2110
1955
  cart.gift_cards = [];
2111
- if (!(cart.payment_sessions && cart.payment_sessions.length)) return [3 /*break*/, 13];
2112
- return [4 /*yield*/, Promise.all(cart.payment_sessions.map(function (ps) {
2113
- return _this.paymentProviderService_
2114
- .withTransaction(_this.manager_)
2115
- .deleteSession(ps);
2116
- }))];
2117
- case 12:
1956
+ if (!(cart.payment_sessions && cart.payment_sessions.length)) return [3 /*break*/, 11];
1957
+ paymentSessionRepo = transactionManager.getCustomRepository(this.paymentSessionRepository_);
1958
+ return [4 /*yield*/, paymentSessionRepo.delete({
1959
+ id: (0, typeorm_1.In)(cart.payment_sessions.map(function (paymentSession) { return paymentSession.id; })),
1960
+ })];
1961
+ case 10:
2118
1962
  _b.sent();
2119
- cart.payment_sessions = [];
1963
+ cart.payment_sessions.length = 0;
2120
1964
  cart.payment_session = null;
2121
- _b.label = 13;
2122
- case 13: return [2 /*return*/];
1965
+ _b.label = 11;
1966
+ case 11: return [2 /*return*/];
2123
1967
  }
2124
1968
  });
2125
1969
  });
@@ -2134,7 +1978,7 @@ var CartService = /** @class */ (function (_super) {
2134
1978
  var _this = this;
2135
1979
  return __generator(this, function (_a) {
2136
1980
  switch (_a.label) {
2137
- case 0: return [4 /*yield*/, this.atomicPhase_(function (manager) { return __awaiter(_this, void 0, void 0, function () {
1981
+ case 0: return [4 /*yield*/, this.atomicPhase_(function (transactionManager) { return __awaiter(_this, void 0, void 0, function () {
2138
1982
  var cart, cartRepo;
2139
1983
  return __generator(this, function (_a) {
2140
1984
  switch (_a.label) {
@@ -2143,7 +1987,6 @@ var CartService = /** @class */ (function (_super) {
2143
1987
  "items",
2144
1988
  "discounts",
2145
1989
  "discounts.rule",
2146
- "discounts.rule.valid_for",
2147
1990
  "payment_sessions",
2148
1991
  ],
2149
1992
  })];
@@ -2155,7 +1998,7 @@ var CartService = /** @class */ (function (_super) {
2155
1998
  if (cart.payment_authorized_at) {
2156
1999
  throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.NOT_ALLOWED, "Can't delete a cart with an authorized payment");
2157
2000
  }
2158
- cartRepo = manager.getCustomRepository(this.cartRepository_);
2001
+ cartRepo = transactionManager.getCustomRepository(this.cartRepository_);
2159
2002
  return [2 /*return*/, cartRepo.remove(cart)];
2160
2003
  }
2161
2004
  });
@@ -2179,29 +2022,32 @@ var CartService = /** @class */ (function (_super) {
2179
2022
  var _this = this;
2180
2023
  return __generator(this, function (_a) {
2181
2024
  switch (_a.label) {
2182
- case 0: return [4 /*yield*/, this.atomicPhase_(function (manager) { return __awaiter(_this, void 0, void 0, function () {
2183
- var cartRepo, validatedId, cart, existing, result;
2025
+ case 0: return [4 /*yield*/, this.atomicPhase_(function (transactionManager) { return __awaiter(_this, void 0, void 0, function () {
2026
+ var cartRepo, validatedId, cart, existing, updatedCart;
2184
2027
  var _a;
2185
2028
  return __generator(this, function (_b) {
2186
2029
  switch (_b.label) {
2187
2030
  case 0:
2188
- cartRepo = manager.getCustomRepository(this.cartRepository_);
2189
- validatedId = this.validateId_(cartId);
2031
+ cartRepo = transactionManager.getCustomRepository(this.cartRepository_);
2032
+ validatedId = (0, utils_1.validateId)(cartId);
2190
2033
  if (typeof key !== "string") {
2191
2034
  throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.INVALID_ARGUMENT, "Key type is invalid. Metadata keys must be strings");
2192
2035
  }
2193
2036
  return [4 /*yield*/, cartRepo.findOne(validatedId)];
2194
2037
  case 1:
2195
- cart = (_b.sent());
2038
+ cart = _b.sent();
2039
+ if (!cart) {
2040
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.NOT_FOUND, "Unable to find the cart with the given id");
2041
+ }
2196
2042
  existing = cart.metadata || {};
2197
2043
  cart.metadata = __assign(__assign({}, existing), (_a = {}, _a[key] = value, _a));
2198
2044
  return [4 /*yield*/, cartRepo.save(cart)];
2199
2045
  case 2:
2200
- result = _b.sent();
2046
+ updatedCart = _b.sent();
2201
2047
  this.eventBus_
2202
- .withTransaction(manager)
2203
- .emit(CartService.Events.UPDATED, result);
2204
- return [2 /*return*/, result];
2048
+ .withTransaction(transactionManager)
2049
+ .emit(CartService.Events.UPDATED, updatedCart);
2050
+ return [2 /*return*/, updatedCart];
2205
2051
  }
2206
2052
  });
2207
2053
  }); })];
@@ -2214,34 +2060,72 @@ var CartService = /** @class */ (function (_super) {
2214
2060
  return __awaiter(this, void 0, void 0, function () {
2215
2061
  var _this = this;
2216
2062
  return __generator(this, function (_a) {
2217
- return [2 /*return*/, this.atomicPhase_(function (manager) { return __awaiter(_this, void 0, void 0, function () {
2218
- var cart, calculationContext;
2219
- return __generator(this, function (_a) {
2220
- switch (_a.label) {
2221
- case 0: return [4 /*yield*/, this.retrieve(id, {
2222
- relations: [
2223
- "items",
2224
- "gift_cards",
2225
- "discounts",
2226
- "discounts.rule",
2227
- "discounts.rule.valid_for",
2228
- "shipping_methods",
2229
- "region",
2230
- "region.tax_rates",
2231
- ],
2232
- })];
2233
- case 1:
2234
- cart = _a.sent();
2235
- calculationContext = this.totalsService_.getCalculationContext(cart);
2236
- return [4 /*yield*/, this.taxProviderService_
2237
- .withTransaction(manager)
2238
- .createTaxLines(cart, calculationContext)];
2239
- case 2:
2240
- _a.sent();
2241
- return [2 /*return*/, cart];
2242
- }
2243
- });
2244
- }); })];
2063
+ switch (_a.label) {
2064
+ case 0: return [4 /*yield*/, this.atomicPhase_(function (transactionManager) { return __awaiter(_this, void 0, void 0, function () {
2065
+ var cart, calculationContext;
2066
+ return __generator(this, function (_a) {
2067
+ switch (_a.label) {
2068
+ case 0: return [4 /*yield*/, this.retrieve(id, {
2069
+ relations: [
2070
+ "items",
2071
+ "gift_cards",
2072
+ "discounts",
2073
+ "discounts.rule",
2074
+ "shipping_methods",
2075
+ "region",
2076
+ "region.tax_rates",
2077
+ ],
2078
+ })];
2079
+ case 1:
2080
+ cart = _a.sent();
2081
+ calculationContext = this.totalsService_
2082
+ .withTransaction(transactionManager)
2083
+ .getCalculationContext(cart);
2084
+ return [4 /*yield*/, this.taxProviderService_
2085
+ .withTransaction(transactionManager)
2086
+ .createTaxLines(cart, calculationContext)];
2087
+ case 2:
2088
+ _a.sent();
2089
+ return [2 /*return*/, cart];
2090
+ }
2091
+ });
2092
+ }); })];
2093
+ case 1: return [2 /*return*/, _a.sent()];
2094
+ }
2095
+ });
2096
+ });
2097
+ };
2098
+ CartService.prototype.refreshAdjustments_ = function (cart) {
2099
+ var _a;
2100
+ return __awaiter(this, void 0, void 0, function () {
2101
+ var transactionManager, nonReturnLineIDs;
2102
+ return __generator(this, function (_b) {
2103
+ switch (_b.label) {
2104
+ case 0:
2105
+ transactionManager = (_a = this.transactionManager_) !== null && _a !== void 0 ? _a : this.manager_;
2106
+ nonReturnLineIDs = cart.items
2107
+ .filter(function (item) { return !item.is_return; })
2108
+ .map(function (i) { return i.id; });
2109
+ // delete all old non return line item adjustments
2110
+ return [4 /*yield*/, this.lineItemAdjustmentService_
2111
+ .withTransaction(transactionManager)
2112
+ .delete({
2113
+ item_id: nonReturnLineIDs,
2114
+ })
2115
+ // potentially create/update line item adjustments
2116
+ ];
2117
+ case 1:
2118
+ // delete all old non return line item adjustments
2119
+ _b.sent();
2120
+ // potentially create/update line item adjustments
2121
+ return [4 /*yield*/, this.lineItemAdjustmentService_
2122
+ .withTransaction(transactionManager)
2123
+ .createAdjustments(cart)];
2124
+ case 2:
2125
+ // potentially create/update line item adjustments
2126
+ _b.sent();
2127
+ return [2 /*return*/];
2128
+ }
2245
2129
  });
2246
2130
  });
2247
2131
  };
@@ -2255,35 +2139,38 @@ var CartService = /** @class */ (function (_super) {
2255
2139
  return __awaiter(this, void 0, void 0, function () {
2256
2140
  var _this = this;
2257
2141
  return __generator(this, function (_a) {
2258
- return [2 /*return*/, this.atomicPhase_(function (manager) { return __awaiter(_this, void 0, void 0, function () {
2259
- var cartRepo, validatedId, cart, updated, result;
2260
- return __generator(this, function (_a) {
2261
- switch (_a.label) {
2262
- case 0:
2263
- cartRepo = manager.getCustomRepository(this.cartRepository_);
2264
- validatedId = this.validateId_(cartId);
2265
- if (typeof key !== "string") {
2266
- throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.INVALID_ARGUMENT, "Key type is invalid. Metadata keys must be strings");
2267
- }
2268
- return [4 /*yield*/, cartRepo.findOne(validatedId)];
2269
- case 1:
2270
- cart = _a.sent();
2271
- if (!cart) {
2272
- throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.NOT_FOUND, "Cart with id: ".concat(validatedId, " was not found"));
2273
- }
2274
- updated = cart.metadata || {};
2275
- delete updated[key];
2276
- cart.metadata = updated;
2277
- return [4 /*yield*/, cartRepo.save(cart)];
2278
- case 2:
2279
- result = _a.sent();
2280
- this.eventBus_
2281
- .withTransaction(manager)
2282
- .emit(CartService.Events.UPDATED, result);
2283
- return [2 /*return*/, result];
2284
- }
2285
- });
2286
- }); })];
2142
+ switch (_a.label) {
2143
+ case 0: return [4 /*yield*/, this.atomicPhase_(function (transactionManager) { return __awaiter(_this, void 0, void 0, function () {
2144
+ var cartRepo, validatedId, cart, updated, updatedCart;
2145
+ return __generator(this, function (_a) {
2146
+ switch (_a.label) {
2147
+ case 0:
2148
+ cartRepo = transactionManager.getCustomRepository(this.cartRepository_);
2149
+ validatedId = (0, utils_1.validateId)(cartId);
2150
+ if (typeof key !== "string") {
2151
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.INVALID_ARGUMENT, "Key type is invalid. Metadata keys must be strings");
2152
+ }
2153
+ return [4 /*yield*/, cartRepo.findOne(validatedId)];
2154
+ case 1:
2155
+ cart = _a.sent();
2156
+ if (!cart) {
2157
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.NOT_FOUND, "Cart with id: ".concat(validatedId, " was not found"));
2158
+ }
2159
+ updated = cart.metadata || {};
2160
+ delete updated[key];
2161
+ cart.metadata = updated;
2162
+ return [4 /*yield*/, cartRepo.save(cart)];
2163
+ case 2:
2164
+ updatedCart = _a.sent();
2165
+ this.eventBus_
2166
+ .withTransaction(transactionManager)
2167
+ .emit(CartService.Events.UPDATED, updatedCart);
2168
+ return [2 /*return*/, updatedCart];
2169
+ }
2170
+ });
2171
+ }); })];
2172
+ case 1: return [2 /*return*/, _a.sent()];
2173
+ }
2287
2174
  });
2288
2175
  });
2289
2176
  };
@@ -2293,6 +2180,6 @@ var CartService = /** @class */ (function (_super) {
2293
2180
  UPDATED: "cart.updated",
2294
2181
  };
2295
2182
  return CartService;
2296
- }(medusa_interfaces_1.BaseService));
2183
+ }(interfaces_1.TransactionBaseService));
2297
2184
  exports.default = CartService;
2298
2185
  //# sourceMappingURL=cart.js.map