@medusajs/medusa 1.2.2-dev.56 → 1.3.1-alpha.72

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