@medusajs/medusa 1.2.2-dev.53 → 1.3.1-alpha.63

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