@medusajs/medusa 1.2.2-dev.56 → 1.3.1-next.24

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