@medusajs/medusa 1.2.2-dev.47 → 1.3.0

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 (440) 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/get-customer-group-customers.d.ts +20 -0
  9. package/dist/api/routes/admin/customer-groups/get-customer-group-customers.js +76 -0
  10. package/dist/api/routes/admin/customer-groups/get-customer-group-customers.js.map +1 -0
  11. package/dist/api/routes/admin/customer-groups/index.js +1 -0
  12. package/dist/api/routes/admin/customer-groups/index.js.map +1 -1
  13. package/dist/api/routes/admin/customer-groups/list-customer-groups.js +2 -2
  14. package/dist/api/routes/admin/customer-groups/list-customer-groups.js.map +1 -1
  15. package/dist/api/routes/admin/customers/index.js +1 -1
  16. package/dist/api/routes/admin/customers/index.js.map +1 -1
  17. package/dist/api/routes/admin/customers/list-customers.js +1 -0
  18. package/dist/api/routes/admin/customers/list-customers.js.map +1 -1
  19. package/dist/api/routes/admin/discounts/create-discount.d.ts +11 -2
  20. package/dist/api/routes/admin/discounts/create-discount.js +66 -12
  21. package/dist/api/routes/admin/discounts/create-discount.js.map +1 -1
  22. package/dist/api/routes/admin/discounts/create-dynamic-code.d.ts +1 -0
  23. package/dist/api/routes/admin/discounts/create-dynamic-code.js +4 -1
  24. package/dist/api/routes/admin/discounts/create-dynamic-code.js.map +1 -1
  25. package/dist/api/routes/admin/discounts/delete-dynamic-code.js +3 -1
  26. package/dist/api/routes/admin/discounts/delete-dynamic-code.js.map +1 -1
  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 +1 -3
  31. package/dist/api/routes/admin/discounts/index.js +1 -6
  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-discount.d.ts +12 -2
  37. package/dist/api/routes/admin/discounts/update-discount.js +70 -15
  38. package/dist/api/routes/admin/discounts/update-discount.js.map +1 -1
  39. package/dist/api/routes/admin/draft-orders/create-draft-order.d.ts +3 -3
  40. package/dist/api/routes/admin/draft-orders/create-draft-order.js.map +1 -1
  41. package/dist/api/routes/admin/draft-orders/create-line-item.d.ts +1 -1
  42. package/dist/api/routes/admin/draft-orders/create-line-item.js.map +1 -1
  43. package/dist/api/routes/admin/draft-orders/index.js +7 -1
  44. package/dist/api/routes/admin/draft-orders/index.js.map +1 -1
  45. package/dist/api/routes/admin/draft-orders/register-payment.js +0 -1
  46. package/dist/api/routes/admin/draft-orders/register-payment.js.map +1 -1
  47. package/dist/api/routes/admin/draft-orders/update-line-item.d.ts +1 -1
  48. package/dist/api/routes/admin/draft-orders/update-line-item.js.map +1 -1
  49. package/dist/api/routes/admin/index.js +21 -19
  50. package/dist/api/routes/admin/index.js.map +1 -1
  51. package/dist/api/routes/admin/notifications/index.js.map +1 -1
  52. package/dist/api/routes/admin/notifications/list-notifications.js.map +1 -1
  53. package/dist/api/routes/admin/notifications/resend-notification.js.map +1 -1
  54. package/dist/api/routes/admin/orders/add-shipping-method.d.ts +1 -1
  55. package/dist/api/routes/admin/orders/add-shipping-method.js.map +1 -1
  56. package/dist/api/routes/admin/orders/create-order.js.map +1 -1
  57. package/dist/api/routes/admin/orders/create-swap.js +7 -3
  58. package/dist/api/routes/admin/orders/create-swap.js.map +1 -1
  59. package/dist/api/routes/admin/orders/index.d.ts +1 -1
  60. package/dist/api/routes/admin/orders/index.js +1 -3
  61. package/dist/api/routes/admin/orders/index.js.map +1 -1
  62. package/dist/api/routes/admin/orders/list-orders.js.map +1 -1
  63. package/dist/api/routes/admin/orders/update-order.js.map +1 -1
  64. package/dist/api/routes/admin/price-lists/add-prices-batch.d.ts +70 -0
  65. package/dist/api/routes/admin/{orders/receive-swap.js → price-lists/add-prices-batch.js} +77 -78
  66. package/dist/api/routes/admin/price-lists/add-prices-batch.js.map +1 -0
  67. package/dist/api/routes/admin/price-lists/create-price-list.d.ts +87 -0
  68. package/dist/api/routes/admin/price-lists/create-price-list.js +193 -0
  69. package/dist/api/routes/admin/price-lists/create-price-list.js.map +1 -0
  70. package/dist/api/routes/admin/price-lists/delete-price-list.d.ts +28 -0
  71. package/dist/api/routes/admin/{discounts/remove-valid-product.js → price-lists/delete-price-list.js} +27 -25
  72. package/dist/api/routes/admin/price-lists/delete-price-list.js.map +1 -0
  73. package/dist/api/routes/admin/price-lists/delete-prices-batch.d.ts +43 -0
  74. package/dist/api/routes/{store/carts/update-payment-method.js → admin/price-lists/delete-prices-batch.js} +42 -46
  75. package/dist/api/routes/admin/price-lists/delete-prices-batch.js.map +1 -0
  76. package/dist/api/routes/admin/price-lists/get-price-list.d.ts +22 -0
  77. package/dist/api/routes/admin/{discounts/add-valid-product.js → price-lists/get-price-list.js} +20 -24
  78. package/dist/api/routes/admin/price-lists/get-price-list.js.map +1 -0
  79. package/dist/api/routes/admin/price-lists/index.d.ts +28 -0
  80. package/dist/api/routes/admin/price-lists/index.js +55 -0
  81. package/dist/api/routes/admin/price-lists/index.js.map +1 -0
  82. package/dist/api/routes/admin/price-lists/list-price-list-products.d.ts +74 -0
  83. package/dist/api/routes/admin/price-lists/list-price-list-products.js +246 -0
  84. package/dist/api/routes/admin/price-lists/list-price-list-products.js.map +1 -0
  85. package/dist/api/routes/admin/price-lists/list-price-lists.d.ts +38 -0
  86. package/dist/api/routes/admin/price-lists/list-price-lists.js +197 -0
  87. package/dist/api/routes/admin/price-lists/list-price-lists.js.map +1 -0
  88. package/dist/api/routes/admin/price-lists/update-price-list.d.ts +92 -0
  89. package/dist/api/routes/admin/price-lists/update-price-list.js +211 -0
  90. package/dist/api/routes/admin/price-lists/update-price-list.js.map +1 -0
  91. package/dist/api/routes/admin/products/create-product.d.ts +2 -7
  92. package/dist/api/routes/admin/products/create-product.js +2 -24
  93. package/dist/api/routes/admin/products/create-product.js.map +1 -1
  94. package/dist/api/routes/admin/products/create-variant.d.ts +7 -9
  95. package/dist/api/routes/admin/products/create-variant.js +7 -26
  96. package/dist/api/routes/admin/products/create-variant.js.map +1 -1
  97. package/dist/api/routes/admin/products/index.d.ts +1 -1
  98. package/dist/api/routes/admin/products/index.js +7 -1
  99. package/dist/api/routes/admin/products/index.js.map +1 -1
  100. package/dist/api/routes/admin/products/list-products.d.ts +2 -1
  101. package/dist/api/routes/admin/products/list-products.js +31 -65
  102. package/dist/api/routes/admin/products/list-products.js.map +1 -1
  103. package/dist/api/routes/admin/products/update-product.d.ts +2 -7
  104. package/dist/api/routes/admin/products/update-product.js +2 -24
  105. package/dist/api/routes/admin/products/update-product.js.map +1 -1
  106. package/dist/api/routes/admin/products/update-variant.d.ts +10 -9
  107. package/dist/api/routes/admin/products/update-variant.js +21 -33
  108. package/dist/api/routes/admin/products/update-variant.js.map +1 -1
  109. package/dist/api/routes/admin/regions/index.d.ts +1 -1
  110. package/dist/api/routes/admin/store/get-store.js.map +1 -1
  111. package/dist/api/routes/admin/swaps/index.js +3 -0
  112. package/dist/api/routes/admin/swaps/index.js.map +1 -1
  113. package/dist/api/routes/admin/tax-rates/list-tax-rates.js.map +1 -1
  114. package/dist/api/routes/admin/tax-rates/utils/get-query-config.d.ts +1 -1
  115. package/dist/api/routes/admin/tax-rates/utils/get-query-config.js +4 -2
  116. package/dist/api/routes/admin/tax-rates/utils/get-query-config.js.map +1 -1
  117. package/dist/api/routes/admin/uploads/index.d.ts +1 -1
  118. package/dist/api/routes/store/auth/create-session.js +4 -5
  119. package/dist/api/routes/store/auth/create-session.js.map +1 -1
  120. package/dist/api/routes/store/carts/create-cart.js +8 -5
  121. package/dist/api/routes/store/carts/create-cart.js.map +1 -1
  122. package/dist/api/routes/store/carts/create-line-item.d.ts +1 -1
  123. package/dist/api/routes/store/carts/create-line-item.js +9 -6
  124. package/dist/api/routes/store/carts/create-line-item.js.map +1 -1
  125. package/dist/api/routes/store/carts/index.d.ts +0 -1
  126. package/dist/api/routes/store/carts/index.js +1 -3
  127. package/dist/api/routes/store/carts/index.js.map +1 -1
  128. package/dist/api/routes/store/carts/update-cart.js +7 -7
  129. package/dist/api/routes/store/carts/update-cart.js.map +1 -1
  130. package/dist/api/routes/store/collections/list-collections.d.ts +3 -0
  131. package/dist/api/routes/store/collections/list-collections.js +33 -16
  132. package/dist/api/routes/store/collections/list-collections.js.map +1 -1
  133. package/dist/api/routes/store/customers/create-customer.js +3 -4
  134. package/dist/api/routes/store/customers/create-customer.js.map +1 -1
  135. package/dist/api/routes/store/orders/index.js +0 -2
  136. package/dist/api/routes/store/orders/index.js.map +1 -1
  137. package/dist/api/routes/store/products/get-product.js +17 -5
  138. package/dist/api/routes/store/products/get-product.js.map +1 -1
  139. package/dist/api/routes/store/products/index.d.ts +2 -2
  140. package/dist/api/routes/store/products/list-products.d.ts +5 -3
  141. package/dist/api/routes/store/products/list-products.js +60 -18
  142. package/dist/api/routes/store/products/list-products.js.map +1 -1
  143. package/dist/api/routes/store/products/search.d.ts +1 -1
  144. package/dist/api/routes/store/products/search.js.map +1 -1
  145. package/dist/api/routes/store/regions/list-regions.d.ts +3 -0
  146. package/dist/api/routes/store/regions/list-regions.js +22 -7
  147. package/dist/api/routes/store/regions/list-regions.js.map +1 -1
  148. package/dist/api/routes/store/shipping-options/list-options.js.map +1 -1
  149. package/dist/api/routes/store/swaps/create-swap.js +7 -3
  150. package/dist/api/routes/store/swaps/create-swap.js.map +1 -1
  151. package/dist/api/routes/store/variants/get-variant.js +17 -5
  152. package/dist/api/routes/store/variants/get-variant.js.map +1 -1
  153. package/dist/api/routes/store/variants/list-variants.d.ts +6 -1
  154. package/dist/api/routes/store/variants/list-variants.js +63 -10
  155. package/dist/api/routes/store/variants/list-variants.js.map +1 -1
  156. package/dist/commands/develop.js +1 -1
  157. package/dist/commands/develop.js.map +1 -1
  158. package/dist/controllers/customers/index.d.ts +1 -1
  159. package/dist/controllers/customers/list-customers.d.ts +1 -1
  160. package/dist/controllers/customers/list-customers.js +34 -37
  161. package/dist/controllers/customers/list-customers.js.map +1 -1
  162. package/dist/controllers/products/admin-list-products.d.ts +16 -0
  163. package/dist/controllers/products/admin-list-products.js +103 -0
  164. package/dist/controllers/products/admin-list-products.js.map +1 -0
  165. package/dist/helpers/test-request.js +15 -7
  166. package/dist/helpers/test-request.js.map +1 -1
  167. package/dist/index.d.ts +3 -58
  168. package/dist/index.js +3 -61
  169. package/dist/index.js.map +1 -1
  170. package/dist/interfaces/base-service.d.ts +66 -0
  171. package/dist/interfaces/base-service.js +378 -0
  172. package/dist/interfaces/base-service.js.map +1 -0
  173. package/dist/interfaces/index.d.ts +1 -0
  174. package/dist/interfaces/index.js +1 -0
  175. package/dist/interfaces/index.js.map +1 -1
  176. package/dist/interfaces/price-selection-strategy.d.ts +50 -0
  177. package/dist/interfaces/price-selection-strategy.js +34 -0
  178. package/dist/interfaces/price-selection-strategy.js.map +1 -0
  179. package/dist/interfaces/tax-service.d.ts +6 -0
  180. package/dist/interfaces/tax-service.js +31 -0
  181. package/dist/interfaces/tax-service.js.map +1 -1
  182. package/dist/loaders/api.d.ts +9 -5
  183. package/dist/loaders/api.js +2 -6
  184. package/dist/loaders/api.js.map +1 -1
  185. package/dist/loaders/config.d.ts +3 -0
  186. package/dist/loaders/config.js +47 -0
  187. package/dist/loaders/config.js.map +1 -0
  188. package/dist/loaders/database.d.ts +8 -4
  189. package/dist/loaders/database.js.map +1 -1
  190. package/dist/loaders/defaults.d.ts +4 -3
  191. package/dist/loaders/defaults.js +39 -31
  192. package/dist/loaders/defaults.js.map +1 -1
  193. package/dist/loaders/express.d.ts +7 -4
  194. package/dist/loaders/express.js +7 -5
  195. package/dist/loaders/express.js.map +1 -1
  196. package/dist/loaders/index.d.ts +13 -8
  197. package/dist/loaders/index.js +29 -54
  198. package/dist/loaders/index.js.map +1 -1
  199. package/dist/loaders/logger.d.ts +1 -0
  200. package/dist/loaders/logger.js.map +1 -1
  201. package/dist/loaders/models.d.ts +8 -3
  202. package/dist/loaders/models.js +19 -17
  203. package/dist/loaders/models.js.map +1 -1
  204. package/dist/loaders/passport.d.ts +7 -4
  205. package/dist/loaders/passport.js +23 -21
  206. package/dist/loaders/passport.js.map +1 -1
  207. package/dist/loaders/plugins.d.ts +18 -10
  208. package/dist/loaders/plugins.js +27 -24
  209. package/dist/loaders/plugins.js.map +1 -1
  210. package/dist/loaders/redis.d.ts +8 -5
  211. package/dist/loaders/redis.js +3 -3
  212. package/dist/loaders/redis.js.map +1 -1
  213. package/dist/loaders/repositories.d.ts +7 -3
  214. package/dist/loaders/repositories.js +1 -1
  215. package/dist/loaders/repositories.js.map +1 -1
  216. package/dist/loaders/search-index.d.ts +4 -3
  217. package/dist/loaders/search-index.js.map +1 -1
  218. package/dist/loaders/services.d.ts +10 -5
  219. package/dist/loaders/services.js.map +1 -1
  220. package/dist/loaders/strategies.d.ts +1 -1
  221. package/dist/loaders/subscribers.d.ts +7 -3
  222. package/dist/loaders/subscribers.js.map +1 -1
  223. package/dist/migrations/1646324713514-discount_conditions.d.ts +6 -0
  224. package/dist/migrations/1646324713514-discount_conditions.js +335 -0
  225. package/dist/migrations/1646324713514-discount_conditions.js.map +1 -0
  226. package/dist/migrations/1646915480108-update_money_amount_add_price_list.d.ts +6 -0
  227. package/dist/migrations/1646915480108-update_money_amount_add_price_list.js +143 -0
  228. package/dist/migrations/1646915480108-update_money_amount_add_price_list.js.map +1 -0
  229. package/dist/migrations/1648600574750-add_line_item_adjustments.d.ts +6 -0
  230. package/dist/migrations/1648600574750-add_line_item_adjustments.js +101 -0
  231. package/dist/migrations/1648600574750-add_line_item_adjustments.js.map +1 -0
  232. package/dist/migrations/1648641130007-tax_line_constraints.d.ts +6 -0
  233. package/dist/migrations/1648641130007-tax_line_constraints.js +77 -0
  234. package/dist/migrations/1648641130007-tax_line_constraints.js.map +1 -0
  235. package/dist/migrations/1649775522087-add_batch_job_model.d.ts +6 -0
  236. package/dist/migrations/1649775522087-add_batch_job_model.js +77 -0
  237. package/dist/migrations/1649775522087-add_batch_job_model.js.map +1 -0
  238. package/dist/models/batch-job.d.ts +58 -0
  239. package/dist/models/batch-job.js +119 -0
  240. package/dist/models/batch-job.js.map +1 -0
  241. package/dist/models/country.d.ts +1 -1
  242. package/dist/models/country.js +1 -1
  243. package/dist/models/country.js.map +1 -1
  244. package/dist/models/customer-group.d.ts +3 -1
  245. package/dist/models/customer-group.js +9 -13
  246. package/dist/models/customer-group.js.map +1 -1
  247. package/dist/models/discount-condition-customer-group.d.ts +39 -0
  248. package/dist/models/discount-condition-customer-group.js +84 -0
  249. package/dist/models/discount-condition-customer-group.js.map +1 -0
  250. package/dist/models/discount-condition-product-collection.d.ts +39 -0
  251. package/dist/models/discount-condition-product-collection.js +84 -0
  252. package/dist/models/discount-condition-product-collection.js.map +1 -0
  253. package/dist/models/discount-condition-product-tag.d.ts +39 -0
  254. package/dist/models/discount-condition-product-tag.js +84 -0
  255. package/dist/models/discount-condition-product-tag.js.map +1 -0
  256. package/dist/models/discount-condition-product-type.d.ts +39 -0
  257. package/dist/models/discount-condition-product-type.js +84 -0
  258. package/dist/models/discount-condition-product-type.js.map +1 -0
  259. package/dist/models/discount-condition-product.d.ts +39 -0
  260. package/dist/models/discount-condition-product.js +84 -0
  261. package/dist/models/discount-condition-product.js.map +1 -0
  262. package/dist/models/discount-condition.d.ts +68 -0
  263. package/dist/models/discount-condition.js +208 -0
  264. package/dist/models/discount-condition.js.map +1 -0
  265. package/dist/models/discount-rule.d.ts +5 -5
  266. package/dist/models/discount-rule.js +6 -17
  267. package/dist/models/discount-rule.js.map +1 -1
  268. package/dist/models/discount.js.map +1 -1
  269. package/dist/models/index.d.ts +66 -0
  270. package/dist/models/index.js +79 -0
  271. package/dist/models/index.js.map +1 -0
  272. package/dist/models/line-item-adjustment.d.ts +13 -0
  273. package/dist/models/line-item-adjustment.js +79 -0
  274. package/dist/models/line-item-adjustment.js.map +1 -0
  275. package/dist/models/line-item-tax-line.js +2 -1
  276. package/dist/models/line-item-tax-line.js.map +1 -1
  277. package/dist/models/line-item.d.ts +2 -0
  278. package/dist/models/line-item.js +5 -0
  279. package/dist/models/line-item.js.map +1 -1
  280. package/dist/models/money-amount.d.ts +10 -3
  281. package/dist/models/money-amount.js +25 -5
  282. package/dist/models/money-amount.js.map +1 -1
  283. package/dist/models/price-list.d.ts +57 -0
  284. package/dist/models/price-list.js +146 -0
  285. package/dist/models/price-list.js.map +1 -0
  286. package/dist/models/product-variant.js +9 -3
  287. package/dist/models/product-variant.js.map +1 -1
  288. package/dist/models/shipping-method-tax-line.js +2 -1
  289. package/dist/models/shipping-method-tax-line.js.map +1 -1
  290. package/dist/models/swap.d.ts +4 -4
  291. package/dist/models/swap.js +23 -23
  292. package/dist/models/swap.js.map +1 -1
  293. package/dist/repositories/cart.d.ts +2 -2
  294. package/dist/repositories/cart.js.map +1 -1
  295. package/dist/repositories/customer.d.ts +1 -0
  296. package/dist/repositories/customer.js +63 -0
  297. package/dist/repositories/customer.js.map +1 -1
  298. package/dist/repositories/discount-condition.d.ts +34 -0
  299. package/dist/repositories/discount-condition.js +384 -0
  300. package/dist/repositories/discount-condition.js.map +1 -0
  301. package/dist/repositories/line-item-adjustment.d.ts +4 -0
  302. package/dist/repositories/line-item-adjustment.js +38 -0
  303. package/dist/repositories/line-item-adjustment.js.map +1 -0
  304. package/dist/repositories/line-item-tax-line.d.ts +2 -0
  305. package/dist/repositories/line-item-tax-line.js +80 -0
  306. package/dist/repositories/line-item-tax-line.js.map +1 -1
  307. package/dist/repositories/line-item.js +1 -0
  308. package/dist/repositories/line-item.js.map +1 -1
  309. package/dist/repositories/money-amount.d.ts +7 -2
  310. package/dist/repositories/money-amount.js +149 -2
  311. package/dist/repositories/money-amount.js.map +1 -1
  312. package/dist/repositories/price-list.d.ts +4 -0
  313. package/dist/repositories/price-list.js +38 -0
  314. package/dist/repositories/price-list.js.map +1 -0
  315. package/dist/repositories/product.d.ts +3 -0
  316. package/dist/repositories/product.js +41 -19
  317. package/dist/repositories/product.js.map +1 -1
  318. package/dist/repositories/shipping-method-tax-line.d.ts +2 -0
  319. package/dist/repositories/shipping-method-tax-line.js +80 -0
  320. package/dist/repositories/shipping-method-tax-line.js.map +1 -1
  321. package/dist/scripts/discount-rule-migration.d.ts +4 -0
  322. package/dist/scripts/discount-rule-migration.js +177 -0
  323. package/dist/scripts/discount-rule-migration.js.map +1 -0
  324. package/dist/scripts/line-item-adjustment-migration.d.ts +4 -0
  325. package/dist/scripts/line-item-adjustment-migration.js +173 -0
  326. package/dist/scripts/line-item-adjustment-migration.js.map +1 -0
  327. package/dist/services/cart.d.ts +58 -47
  328. package/dist/services/cart.js +1306 -1391
  329. package/dist/services/cart.js.map +1 -1
  330. package/dist/services/customer.js +18 -18
  331. package/dist/services/customer.js.map +1 -1
  332. package/dist/services/discount.d.ts +50 -58
  333. package/dist/services/discount.js +365 -154
  334. package/dist/services/discount.js.map +1 -1
  335. package/dist/services/draft-order.js +1 -0
  336. package/dist/services/draft-order.js.map +1 -1
  337. package/dist/services/fulfillment-provider.js +23 -17
  338. package/dist/services/fulfillment-provider.js.map +1 -1
  339. package/dist/services/invite.d.ts +4 -2
  340. package/dist/services/invite.js +11 -9
  341. package/dist/services/invite.js.map +1 -1
  342. package/dist/services/line-item-adjustment.d.ts +87 -0
  343. package/dist/services/line-item-adjustment.js +436 -0
  344. package/dist/services/line-item-adjustment.js.map +1 -0
  345. package/dist/services/line-item.d.ts +48 -40
  346. package/dist/services/line-item.js +226 -193
  347. package/dist/services/line-item.js.map +1 -1
  348. package/dist/services/order.js +4 -4
  349. package/dist/services/order.js.map +1 -1
  350. package/dist/services/payment-provider.js +23 -17
  351. package/dist/services/payment-provider.js.map +1 -1
  352. package/dist/services/price-list.d.ts +86 -0
  353. package/dist/services/price-list.js +469 -0
  354. package/dist/services/price-list.js.map +1 -0
  355. package/dist/services/product-variant.d.ts +40 -16
  356. package/dist/services/product-variant.js +259 -109
  357. package/dist/services/product-variant.js.map +1 -1
  358. package/dist/services/product.d.ts +22 -4
  359. package/dist/services/product.js +239 -49
  360. package/dist/services/product.js.map +1 -1
  361. package/dist/services/region.js +8 -4
  362. package/dist/services/region.js.map +1 -1
  363. package/dist/services/return.js +0 -1
  364. package/dist/services/return.js.map +1 -1
  365. package/dist/services/shipping-option.d.ts +2 -2
  366. package/dist/services/shipping-option.js +7 -4
  367. package/dist/services/shipping-option.js.map +1 -1
  368. package/dist/services/swap.d.ts +4 -1
  369. package/dist/services/swap.js +29 -16
  370. package/dist/services/swap.js.map +1 -1
  371. package/dist/services/system-tax.d.ts +2 -3
  372. package/dist/services/system-tax.js +2 -2
  373. package/dist/services/system-tax.js.map +1 -1
  374. package/dist/services/tax-provider.d.ts +2 -0
  375. package/dist/services/tax-provider.js +96 -7
  376. package/dist/services/tax-provider.js.map +1 -1
  377. package/dist/services/tax-rate.d.ts +3 -3
  378. package/dist/services/tax-rate.js +1 -1
  379. package/dist/services/tax-rate.js.map +1 -1
  380. package/dist/services/totals.d.ts +9 -8
  381. package/dist/services/totals.js +41 -88
  382. package/dist/services/totals.js.map +1 -1
  383. package/dist/strategies/price-selection.d.ts +13 -0
  384. package/dist/strategies/price-selection.js +185 -0
  385. package/dist/strategies/price-selection.js.map +1 -0
  386. package/dist/subscribers/order.js +1 -7
  387. package/dist/subscribers/order.js.map +1 -1
  388. package/dist/types/batch-job.d.ts +6 -0
  389. package/dist/types/batch-job.js +11 -0
  390. package/dist/types/batch-job.js.map +1 -0
  391. package/dist/types/common.d.ts +1 -3
  392. package/dist/types/customers.d.ts +1 -0
  393. package/dist/types/customers.js +5 -0
  394. package/dist/types/customers.js.map +1 -1
  395. package/dist/types/discount.d.ts +69 -1
  396. package/dist/types/discount.js +129 -5
  397. package/dist/types/discount.js.map +1 -1
  398. package/dist/types/global.d.ts +34 -0
  399. package/dist/types/global.js +3 -0
  400. package/dist/types/global.js.map +1 -0
  401. package/dist/types/line-item-adjustment.d.ts +9 -0
  402. package/dist/types/line-item-adjustment.js +50 -0
  403. package/dist/types/line-item-adjustment.js.map +1 -0
  404. package/dist/types/price-list.d.ts +70 -0
  405. package/dist/types/price-list.js +152 -0
  406. package/dist/types/price-list.js.map +1 -0
  407. package/dist/types/price-selection.d.ts +5 -0
  408. package/dist/types/price-selection.js +35 -0
  409. package/dist/types/price-selection.js.map +1 -0
  410. package/dist/types/product-variant.d.ts +26 -3
  411. package/dist/types/product-variant.js +69 -5
  412. package/dist/types/product-variant.js.map +1 -1
  413. package/dist/types/product.d.ts +16 -0
  414. package/dist/types/product.js +86 -1
  415. package/dist/types/product.js.map +1 -1
  416. package/dist/types/validators/exactly-one.d.ts +6 -0
  417. package/dist/types/validators/exactly-one.js +37 -0
  418. package/dist/types/validators/exactly-one.js.map +1 -0
  419. package/dist/utils/date-helpers.d.ts +2 -0
  420. package/dist/utils/date-helpers.js +15 -0
  421. package/dist/utils/date-helpers.js.map +1 -0
  422. package/dist/utils/get-query-config.d.ts +11 -0
  423. package/dist/utils/get-query-config.js +88 -0
  424. package/dist/utils/get-query-config.js.map +1 -0
  425. package/package.json +7 -8
  426. package/dist/api/routes/admin/discounts/add-valid-product.d.ts +0 -23
  427. package/dist/api/routes/admin/discounts/add-valid-product.js.map +0 -1
  428. package/dist/api/routes/admin/discounts/remove-valid-product.d.ts +0 -23
  429. package/dist/api/routes/admin/discounts/remove-valid-product.js.map +0 -1
  430. package/dist/api/routes/admin/orders/receive-swap.d.ts +0 -46
  431. package/dist/api/routes/admin/orders/receive-swap.js.map +0 -1
  432. package/dist/api/routes/store/carts/update-payment-method.d.ts +0 -38
  433. package/dist/api/routes/store/carts/update-payment-method.js.map +0 -1
  434. package/dist/config/index.d.ts +0 -14
  435. package/dist/config/index.js +0 -40
  436. package/dist/config/index.js.map +0 -1
  437. package/dist/controllers/list-customers.d.ts +0 -0
  438. package/dist/controllers/list-customers.js +0 -1
  439. package/dist/controllers/list-customers.js.map +0 -1
  440. package/yarn-error.log +0 -6769
@@ -109,10 +109,14 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
109
109
  return to.concat(ar || Array.prototype.slice.call(from));
110
110
  };
111
111
  Object.defineProperty(exports, "__esModule", { value: true });
112
- var medusa_interfaces_1 = require("medusa-interfaces");
113
- var medusa_core_utils_1 = require("medusa-core-utils");
114
112
  var iso8601_duration_1 = require("iso8601-duration");
113
+ var lodash_1 = require("lodash");
114
+ var medusa_core_utils_1 = require("medusa-core-utils");
115
+ var medusa_interfaces_1 = require("medusa-interfaces");
115
116
  var typeorm_1 = require("typeorm");
117
+ var discount_condition_1 = require("../models/discount-condition");
118
+ var discount_rule_1 = require("../models/discount-rule");
119
+ var date_helpers_1 = require("../utils/date-helpers");
116
120
  var exception_formatter_1 = require("../utils/exception-formatter");
117
121
  /**
118
122
  * Provides layer to manipulate discounts.
@@ -121,7 +125,7 @@ var exception_formatter_1 = require("../utils/exception-formatter");
121
125
  var DiscountService = /** @class */ (function (_super) {
122
126
  __extends(DiscountService, _super);
123
127
  function DiscountService(_a) {
124
- var manager = _a.manager, discountRepository = _a.discountRepository, discountRuleRepository = _a.discountRuleRepository, giftCardRepository = _a.giftCardRepository, totalsService = _a.totalsService, productService = _a.productService, regionService = _a.regionService, eventBusService = _a.eventBusService;
128
+ var manager = _a.manager, discountRepository = _a.discountRepository, discountRuleRepository = _a.discountRuleRepository, giftCardRepository = _a.giftCardRepository, discountConditionRepository = _a.discountConditionRepository, totalsService = _a.totalsService, productService = _a.productService, regionService = _a.regionService, customerService = _a.customerService, eventBusService = _a.eventBusService;
125
129
  var _this = _super.call(this) || this;
126
130
  /** @private @const {EntityManager} */
127
131
  _this.manager_ = manager;
@@ -131,12 +135,16 @@ var DiscountService = /** @class */ (function (_super) {
131
135
  _this.discountRuleRepository_ = discountRuleRepository;
132
136
  /** @private @const {GiftCardRepository} */
133
137
  _this.giftCardRepository_ = giftCardRepository;
138
+ /** @private @const {DiscountConditionRepository} */
139
+ _this.discountConditionRepository_ = discountConditionRepository;
134
140
  /** @private @const {TotalsService} */
135
141
  _this.totalsService_ = totalsService;
136
142
  /** @private @const {ProductService} */
137
143
  _this.productService_ = productService;
138
144
  /** @private @const {RegionService} */
139
145
  _this.regionService_ = regionService;
146
+ /** @private @const {CustomerService} */
147
+ _this.customerService_ = customerService;
140
148
  /** @private @const {EventBus} */
141
149
  _this.eventBus_ = eventBusService;
142
150
  return _this;
@@ -150,12 +158,15 @@ var DiscountService = /** @class */ (function (_super) {
150
158
  discountRepository: this.discountRepository_,
151
159
  discountRuleRepository: this.discountRuleRepository_,
152
160
  giftCardRepository: this.giftCardRepository_,
161
+ discountConditionRepository: this.discountConditionRepository_,
153
162
  totalsService: this.totalsService_,
154
163
  productService: this.productService_,
155
164
  regionService: this.regionService_,
165
+ customerService: this.customerService_,
156
166
  eventBusService: this.eventBus_,
157
167
  });
158
168
  cloned.transactionManager_ = transactionManager;
169
+ cloned.manager_ = transactionManager;
159
170
  return cloned;
160
171
  };
161
172
  /**
@@ -170,7 +181,6 @@ var DiscountService = /** @class */ (function (_super) {
170
181
  type: medusa_core_utils_1.Validator.string().required(),
171
182
  value: medusa_core_utils_1.Validator.number().min(0).required(),
172
183
  allocation: medusa_core_utils_1.Validator.string().required(),
173
- valid_for: medusa_core_utils_1.Validator.array().optional(),
174
184
  created_at: medusa_core_utils_1.Validator.date().optional(),
175
185
  updated_at: medusa_core_utils_1.Validator.date().allow(null).optional(),
176
186
  deleted_at: medusa_core_utils_1.Validator.date().allow(null).optional(),
@@ -209,7 +219,11 @@ var DiscountService = /** @class */ (function (_super) {
209
219
  */
210
220
  DiscountService.prototype.listAndCount = function (selector, config) {
211
221
  if (selector === void 0) { selector = {}; }
212
- if (config === void 0) { config = { skip: 0, take: 50, order: { created_at: "DESC" } }; }
222
+ if (config === void 0) { config = {
223
+ take: 20,
224
+ skip: 0,
225
+ order: { created_at: "DESC" },
226
+ }; }
213
227
  return __awaiter(this, void 0, void 0, function () {
214
228
  var discountRepo, q, query, where_1, _a, discounts, count;
215
229
  return __generator(this, function (_b) {
@@ -250,51 +264,81 @@ var DiscountService = /** @class */ (function (_super) {
250
264
  var _this = this;
251
265
  return __generator(this, function (_a) {
252
266
  return [2 /*return*/, this.atomicPhase_(function (manager) { return __awaiter(_this, void 0, void 0, function () {
253
- var discountRepo, ruleRepo, validatedRule, _a, discountRule, createdDiscountRule, created, result, error_1;
267
+ var discountRepo, ruleRepo, conditions, ruleToCreate, validatedRule, _a, discountRule, createdDiscountRule, created, result, conditions_1, conditions_1_1, cond, e_1_1, error_1;
268
+ var e_1, _b;
254
269
  var _this = this;
255
- var _b, _c;
256
- return __generator(this, function (_d) {
257
- switch (_d.label) {
270
+ var _c, _d;
271
+ return __generator(this, function (_e) {
272
+ switch (_e.label) {
258
273
  case 0:
259
274
  discountRepo = manager.getCustomRepository(this.discountRepository_);
260
275
  ruleRepo = manager.getCustomRepository(this.discountRuleRepository_);
261
- if ((_b = discount.rule) === null || _b === void 0 ? void 0 : _b.valid_for) {
262
- discount.rule.valid_for = discount.rule.valid_for.map(function (id) { return ({ id: id }); });
263
- }
276
+ conditions = (_c = discount.rule) === null || _c === void 0 ? void 0 : _c.conditions;
277
+ ruleToCreate = (0, lodash_1.omit)(discount.rule, ["conditions"]);
278
+ discount.rule = ruleToCreate;
264
279
  validatedRule = this.validateDiscountRule_(discount.rule);
265
- if (((_c = discount.regions) === null || _c === void 0 ? void 0 : _c.length) > 1 && discount.rule.type === "fixed") {
280
+ if ((discount === null || discount === void 0 ? void 0 : discount.regions) &&
281
+ (discount === null || discount === void 0 ? void 0 : discount.regions.length) > 1 &&
282
+ ((_d = discount === null || discount === void 0 ? void 0 : discount.rule) === null || _d === void 0 ? void 0 : _d.type) === "fixed") {
266
283
  throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.INVALID_DATA, "Fixed discounts can have one region");
267
284
  }
268
- _d.label = 1;
285
+ _e.label = 1;
269
286
  case 1:
270
- _d.trys.push([1, 8, , 9]);
287
+ _e.trys.push([1, 16, , 17]);
271
288
  if (!discount.regions) return [3 /*break*/, 3];
272
289
  _a = discount;
273
290
  return [4 /*yield*/, Promise.all(discount.regions.map(function (regionId) {
274
291
  return _this.regionService_.withTransaction(manager).retrieve(regionId);
275
292
  }))];
276
293
  case 2:
277
- _a.regions = _d.sent();
278
- _d.label = 3;
294
+ _a.regions = _e.sent();
295
+ _e.label = 3;
279
296
  case 3: return [4 /*yield*/, ruleRepo.create(validatedRule)];
280
297
  case 4:
281
- discountRule = _d.sent();
298
+ discountRule = _e.sent();
282
299
  return [4 /*yield*/, ruleRepo.save(discountRule)];
283
300
  case 5:
284
- createdDiscountRule = _d.sent();
301
+ createdDiscountRule = _e.sent();
285
302
  discount.code = discount.code.toUpperCase();
286
303
  discount.rule = createdDiscountRule;
287
304
  return [4 /*yield*/, discountRepo.create(discount)];
288
305
  case 6:
289
- created = _d.sent();
306
+ created = _e.sent();
290
307
  return [4 /*yield*/, discountRepo.save(created)];
291
308
  case 7:
292
- result = _d.sent();
293
- return [2 /*return*/, result];
309
+ result = _e.sent();
310
+ if (!(conditions === null || conditions === void 0 ? void 0 : conditions.length)) return [3 /*break*/, 15];
311
+ _e.label = 8;
294
312
  case 8:
295
- error_1 = _d.sent();
313
+ _e.trys.push([8, 13, 14, 15]);
314
+ conditions_1 = __values(conditions), conditions_1_1 = conditions_1.next();
315
+ _e.label = 9;
316
+ case 9:
317
+ if (!!conditions_1_1.done) return [3 /*break*/, 12];
318
+ cond = conditions_1_1.value;
319
+ return [4 /*yield*/, this.upsertDiscountCondition_(result.id, cond)];
320
+ case 10:
321
+ _e.sent();
322
+ _e.label = 11;
323
+ case 11:
324
+ conditions_1_1 = conditions_1.next();
325
+ return [3 /*break*/, 9];
326
+ case 12: return [3 /*break*/, 15];
327
+ case 13:
328
+ e_1_1 = _e.sent();
329
+ e_1 = { error: e_1_1 };
330
+ return [3 /*break*/, 15];
331
+ case 14:
332
+ try {
333
+ if (conditions_1_1 && !conditions_1_1.done && (_b = conditions_1.return)) _b.call(conditions_1);
334
+ }
335
+ finally { if (e_1) throw e_1.error; }
336
+ return [7 /*endfinally*/];
337
+ case 15: return [2 /*return*/, result];
338
+ case 16:
339
+ error_1 = _e.sent();
296
340
  throw (0, exception_formatter_1.formatException)(error_1);
297
- case 9: return [2 /*return*/];
341
+ case 17: return [2 /*return*/];
298
342
  }
299
343
  });
300
344
  }); })];
@@ -375,66 +419,95 @@ var DiscountService = /** @class */ (function (_super) {
375
419
  var _this = this;
376
420
  return __generator(this, function (_a) {
377
421
  return [2 /*return*/, this.atomicPhase_(function (manager) { return __awaiter(_this, void 0, void 0, function () {
378
- var discountRepo, discount, rule, metadata, regions, rest, _a, _b, _c, _d, key, updated;
379
- var e_1, _e;
422
+ var discountRepo, discount, conditions, ruleToUpdate, rule, metadata, regions, rest, conditions_2, conditions_2_1, cond, e_2_1, _a, _b, _c, _d, key, updated;
423
+ var e_2, _e, e_3, _f;
380
424
  var _this = this;
381
- return __generator(this, function (_f) {
382
- switch (_f.label) {
425
+ var _g;
426
+ return __generator(this, function (_h) {
427
+ switch (_h.label) {
383
428
  case 0:
384
429
  discountRepo = manager.getCustomRepository(this.discountRepository_);
385
430
  return [4 /*yield*/, this.retrieve(discountId, {
386
431
  relations: ["rule"],
387
432
  })];
388
433
  case 1:
389
- discount = _f.sent();
434
+ discount = _h.sent();
435
+ conditions = (_g = update === null || update === void 0 ? void 0 : update.rule) === null || _g === void 0 ? void 0 : _g.conditions;
436
+ ruleToUpdate = (0, lodash_1.omit)(update.rule, "conditions");
437
+ if (!(0, lodash_1.isEmpty)(ruleToUpdate)) {
438
+ update.rule = ruleToUpdate;
439
+ }
390
440
  rule = update.rule, metadata = update.metadata, regions = update.regions, rest = __rest(update, ["rule", "metadata", "regions"]);
391
441
  if (rest.ends_at) {
392
- if (discount.starts_at >= new Date(update.ends_at)) {
442
+ if (discount.starts_at >= new Date(rest.ends_at)) {
393
443
  throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.INVALID_DATA, "\"ends_at\" must be greater than \"starts_at\"");
394
444
  }
395
445
  }
396
- if ((regions === null || regions === void 0 ? void 0 : regions.length) > 1 && discount.rule.type === "fixed") {
446
+ if (regions && (regions === null || regions === void 0 ? void 0 : regions.length) > 1 && discount.rule.type === "fixed") {
397
447
  throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.INVALID_DATA, "Fixed discounts can have one region");
398
448
  }
399
- if (!regions) return [3 /*break*/, 3];
400
- _a = discount;
401
- return [4 /*yield*/, Promise.all(regions.map(function (regionId) { return _this.regionService_.retrieve(regionId); }))];
449
+ if (!(conditions === null || conditions === void 0 ? void 0 : conditions.length)) return [3 /*break*/, 9];
450
+ _h.label = 2;
402
451
  case 2:
403
- _a.regions = _f.sent();
404
- _f.label = 3;
452
+ _h.trys.push([2, 7, 8, 9]);
453
+ conditions_2 = __values(conditions), conditions_2_1 = conditions_2.next();
454
+ _h.label = 3;
405
455
  case 3:
406
- if (!metadata) return [3 /*break*/, 5];
407
- _b = discount;
408
- return [4 /*yield*/, this.setMetadata_(discount.id, metadata)];
456
+ if (!!conditions_2_1.done) return [3 /*break*/, 6];
457
+ cond = conditions_2_1.value;
458
+ return [4 /*yield*/, this.upsertDiscountCondition_(discount.id, cond)];
409
459
  case 4:
410
- _b.metadata = _f.sent();
411
- _f.label = 5;
460
+ _h.sent();
461
+ _h.label = 5;
412
462
  case 5:
463
+ conditions_2_1 = conditions_2.next();
464
+ return [3 /*break*/, 3];
465
+ case 6: return [3 /*break*/, 9];
466
+ case 7:
467
+ e_2_1 = _h.sent();
468
+ e_2 = { error: e_2_1 };
469
+ return [3 /*break*/, 9];
470
+ case 8:
471
+ try {
472
+ if (conditions_2_1 && !conditions_2_1.done && (_e = conditions_2.return)) _e.call(conditions_2);
473
+ }
474
+ finally { if (e_2) throw e_2.error; }
475
+ return [7 /*endfinally*/];
476
+ case 9:
477
+ if (!regions) return [3 /*break*/, 11];
478
+ _a = discount;
479
+ return [4 /*yield*/, Promise.all(regions.map(function (regionId) { return _this.regionService_.retrieve(regionId); }))];
480
+ case 10:
481
+ _a.regions = _h.sent();
482
+ _h.label = 11;
483
+ case 11:
484
+ if (!metadata) return [3 /*break*/, 13];
485
+ _b = discount;
486
+ return [4 /*yield*/, this.setMetadata_(discount.id, metadata)];
487
+ case 12:
488
+ _b.metadata = _h.sent();
489
+ _h.label = 13;
490
+ case 13:
413
491
  if (rule) {
414
- discount.rule = this.validateDiscountRule_(rule);
415
- if (rule.valid_for) {
416
- discount.rule.valid_for = discount.rule.valid_for.map(function (id) { return ({
417
- id: id,
418
- }); });
419
- }
492
+ discount.rule = this.validateDiscountRule_(ruleToUpdate);
420
493
  }
421
494
  try {
422
- for (_c = __values(Object.keys(rest).filter(function (k) { return rest[k] !== undefined; })), _d = _c.next(); !_d.done; _d = _c.next()) {
495
+ for (_c = __values(Object.keys(rest).filter(function (k) { return typeof rest[k] !== "undefined"; })), _d = _c.next(); !_d.done; _d = _c.next()) {
423
496
  key = _d.value;
424
497
  discount[key] = rest[key];
425
498
  }
426
499
  }
427
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
500
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
428
501
  finally {
429
502
  try {
430
- if (_d && !_d.done && (_e = _c.return)) _e.call(_c);
503
+ if (_d && !_d.done && (_f = _c.return)) _f.call(_c);
431
504
  }
432
- finally { if (e_1) throw e_1.error; }
505
+ finally { if (e_3) throw e_3.error; }
433
506
  }
434
507
  discount.code = discount.code.toUpperCase();
435
508
  return [4 /*yield*/, discountRepo.save(discount)];
436
- case 6:
437
- updated = _f.sent();
509
+ case 14:
510
+ updated = _h.sent();
438
511
  return [2 /*return*/, updated];
439
512
  }
440
513
  });
@@ -520,85 +593,6 @@ var DiscountService = /** @class */ (function (_super) {
520
593
  });
521
594
  });
522
595
  };
523
- /**
524
- * Adds a valid product to the discount rule valid_for array.
525
- * @param {string} discountId - id of discount
526
- * @param {string} productId - id of product to add
527
- * @return {Promise} the result of the update operation
528
- */
529
- DiscountService.prototype.addValidProduct = function (discountId, productId) {
530
- return __awaiter(this, void 0, void 0, function () {
531
- var _this = this;
532
- return __generator(this, function (_a) {
533
- return [2 /*return*/, this.atomicPhase_(function (manager) { return __awaiter(_this, void 0, void 0, function () {
534
- var discountRuleRepo, discount, rule, exists, product, updated;
535
- return __generator(this, function (_a) {
536
- switch (_a.label) {
537
- case 0:
538
- discountRuleRepo = manager.getCustomRepository(this.discountRuleRepository_);
539
- return [4 /*yield*/, this.retrieve(discountId, {
540
- relations: ["rule", "rule.valid_for"],
541
- })];
542
- case 1:
543
- discount = _a.sent();
544
- rule = discount.rule;
545
- exists = rule.valid_for.find(function (p) { return p.id === productId; });
546
- // If product is already present, we return early
547
- if (exists) {
548
- return [2 /*return*/, rule];
549
- }
550
- return [4 /*yield*/, this.productService_.retrieve(productId)];
551
- case 2:
552
- product = _a.sent();
553
- rule.valid_for = __spreadArray(__spreadArray([], __read(rule.valid_for), false), [product], false);
554
- return [4 /*yield*/, discountRuleRepo.save(rule)];
555
- case 3:
556
- updated = _a.sent();
557
- return [2 /*return*/, updated];
558
- }
559
- });
560
- }); })];
561
- });
562
- });
563
- };
564
- /**
565
- * Removes a product from the discount rule valid_for array
566
- * @param {string} discountId - id of discount
567
- * @param {string} productId - id of product to add
568
- * @return {Promise} the result of the update operation
569
- */
570
- DiscountService.prototype.removeValidProduct = function (discountId, productId) {
571
- return __awaiter(this, void 0, void 0, function () {
572
- var _this = this;
573
- return __generator(this, function (_a) {
574
- return [2 /*return*/, this.atomicPhase_(function (manager) { return __awaiter(_this, void 0, void 0, function () {
575
- var discountRuleRepo, discount, rule, exists, updated;
576
- return __generator(this, function (_a) {
577
- switch (_a.label) {
578
- case 0:
579
- discountRuleRepo = manager.getCustomRepository(this.discountRuleRepository_);
580
- return [4 /*yield*/, this.retrieve(discountId, {
581
- relations: ["rule", "rule.valid_for"],
582
- })];
583
- case 1:
584
- discount = _a.sent();
585
- rule = discount.rule;
586
- exists = rule.valid_for.find(function (p) { return p.id === productId; });
587
- // If product is not present, we return early
588
- if (!exists) {
589
- return [2 /*return*/, rule];
590
- }
591
- rule.valid_for = rule.valid_for.filter(function (p) { return p.id !== productId; });
592
- return [4 /*yield*/, discountRuleRepo.save(rule)];
593
- case 2:
594
- updated = _a.sent();
595
- return [2 /*return*/, updated];
596
- }
597
- });
598
- }); })];
599
- });
600
- });
601
- };
602
596
  /**
603
597
  * Adds a region to the discount regions array.
604
598
  * @param {string} discountId - id of discount
@@ -711,37 +705,254 @@ var DiscountService = /** @class */ (function (_super) {
711
705
  });
712
706
  });
713
707
  };
714
- /**
715
- * Decorates a discount.
716
- * @param {string} discountId - id of discount to decorate
717
- * @param {string[]} fields - the fields to include.
718
- * @param {string[]} expandFields - fields to expand.
719
- * @return {Discount} return the decorated discount.
720
- */
721
- DiscountService.prototype.decorate = function (discountId, fields, expandFields) {
722
- if (fields === void 0) { fields = []; }
723
- if (expandFields === void 0) { expandFields = []; }
708
+ DiscountService.prototype.resolveConditionType_ = function (data) {
709
+ var _a, _b, _c, _d, _e;
710
+ switch (true) {
711
+ case !!((_a = data.products) === null || _a === void 0 ? void 0 : _a.length):
712
+ return {
713
+ type: discount_condition_1.DiscountConditionType.PRODUCTS,
714
+ resource_ids: data.products,
715
+ };
716
+ case !!((_b = data.product_collections) === null || _b === void 0 ? void 0 : _b.length):
717
+ return {
718
+ type: discount_condition_1.DiscountConditionType.PRODUCT_COLLECTIONS,
719
+ resource_ids: data.product_collections,
720
+ };
721
+ case !!((_c = data.product_types) === null || _c === void 0 ? void 0 : _c.length):
722
+ return {
723
+ type: discount_condition_1.DiscountConditionType.PRODUCT_TYPES,
724
+ resource_ids: data.product_types,
725
+ };
726
+ case !!((_d = data.product_tags) === null || _d === void 0 ? void 0 : _d.length):
727
+ return {
728
+ type: discount_condition_1.DiscountConditionType.PRODUCT_TAGS,
729
+ resource_ids: data.product_tags,
730
+ };
731
+ case !!((_e = data.customer_groups) === null || _e === void 0 ? void 0 : _e.length):
732
+ return {
733
+ type: discount_condition_1.DiscountConditionType.CUSTOMER_GROUPS,
734
+ resource_ids: data.customer_groups,
735
+ };
736
+ default:
737
+ return undefined;
738
+ }
739
+ };
740
+ DiscountService.prototype.upsertDiscountCondition_ = function (discountId, data) {
741
+ return __awaiter(this, void 0, void 0, function () {
742
+ var resolvedConditionType, res;
743
+ var _this = this;
744
+ return __generator(this, function (_a) {
745
+ resolvedConditionType = this.resolveConditionType_(data);
746
+ res = this.atomicPhase_(function (manager) { return __awaiter(_this, void 0, void 0, function () {
747
+ var discountConditionRepo, discount, created, discountCondition;
748
+ return __generator(this, function (_a) {
749
+ switch (_a.label) {
750
+ case 0:
751
+ discountConditionRepo = manager.getCustomRepository(this.discountConditionRepository_);
752
+ if (!resolvedConditionType) {
753
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.INVALID_DATA, "Missing one of products, collections, tags, types or customer groups in data");
754
+ }
755
+ if (!data.id) return [3 /*break*/, 2];
756
+ return [4 /*yield*/, discountConditionRepo.addConditionResources(data.id, resolvedConditionType.resource_ids, resolvedConditionType.type, true)];
757
+ case 1: return [2 /*return*/, _a.sent()];
758
+ case 2: return [4 /*yield*/, this.retrieve(discountId, {
759
+ relations: ["rule", "rule.conditions"],
760
+ })];
761
+ case 3:
762
+ discount = _a.sent();
763
+ created = discountConditionRepo.create({
764
+ discount_rule_id: discount.rule_id,
765
+ operator: data.operator,
766
+ type: resolvedConditionType.type,
767
+ });
768
+ return [4 /*yield*/, discountConditionRepo.save(created)];
769
+ case 4:
770
+ discountCondition = _a.sent();
771
+ return [4 /*yield*/, discountConditionRepo.addConditionResources(discountCondition.id, resolvedConditionType.resource_ids, resolvedConditionType.type)];
772
+ case 5: return [2 /*return*/, _a.sent()];
773
+ }
774
+ });
775
+ }); }, function (err) { return __awaiter(_this, void 0, void 0, function () {
776
+ return __generator(this, function (_a) {
777
+ if (err.code === exception_formatter_1.PostgresError.DUPLICATE_ERROR) {
778
+ // A unique key constraint failed meaning the combination of
779
+ // discount rule id, type, and operator already exists in the db.
780
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.DUPLICATE_ERROR, "Discount Condition with operator '".concat(data.operator, "' and type '").concat(resolvedConditionType === null || resolvedConditionType === void 0 ? void 0 : resolvedConditionType.type, "' already exist on a Discount Rule"));
781
+ }
782
+ return [2 /*return*/];
783
+ });
784
+ }); });
785
+ return [2 /*return*/, res];
786
+ });
787
+ });
788
+ };
789
+ DiscountService.prototype.validateDiscountForProduct = function (discountRuleId, productId) {
790
+ return __awaiter(this, void 0, void 0, function () {
791
+ var _this = this;
792
+ return __generator(this, function (_a) {
793
+ return [2 /*return*/, this.atomicPhase_(function (manager) { return __awaiter(_this, void 0, void 0, function () {
794
+ var discountConditionRepo, product;
795
+ return __generator(this, function (_a) {
796
+ switch (_a.label) {
797
+ case 0:
798
+ discountConditionRepo = manager.getCustomRepository(this.discountConditionRepository_);
799
+ // In case of custom line items, we don't have a product id.
800
+ // Instead of throwing, we simply invalidate the discount.
801
+ if (!productId) {
802
+ return [2 /*return*/, false];
803
+ }
804
+ return [4 /*yield*/, this.productService_.retrieve(productId, {
805
+ relations: ["tags"],
806
+ })];
807
+ case 1:
808
+ product = _a.sent();
809
+ return [4 /*yield*/, discountConditionRepo.isValidForProduct(discountRuleId, product.id)];
810
+ case 2: return [2 /*return*/, _a.sent()];
811
+ }
812
+ });
813
+ }); })];
814
+ });
815
+ });
816
+ };
817
+ DiscountService.prototype.calculateDiscountForLineItem = function (discountId, lineItem, cart) {
818
+ return __awaiter(this, void 0, void 0, function () {
819
+ var adjustment, discount, _a, type, value, allocation, fullItemPrice, subtotal, nominator, itemRelativeToSubtotal, totalItemPercentage;
820
+ return __generator(this, function (_b) {
821
+ switch (_b.label) {
822
+ case 0:
823
+ adjustment = 0;
824
+ if (!lineItem.allow_discounts) {
825
+ return [2 /*return*/, adjustment];
826
+ }
827
+ return [4 /*yield*/, this.retrieve(discountId, { relations: ["rule"] })];
828
+ case 1:
829
+ discount = _b.sent();
830
+ _a = discount.rule, type = _a.type, value = _a.value, allocation = _a.allocation;
831
+ fullItemPrice = lineItem.unit_price * lineItem.quantity;
832
+ if (type === discount_rule_1.DiscountRuleType.PERCENTAGE) {
833
+ adjustment = Math.round((fullItemPrice / 100) * value);
834
+ }
835
+ else if (type === discount_rule_1.DiscountRuleType.FIXED &&
836
+ allocation === discount_rule_1.AllocationType.TOTAL) {
837
+ subtotal = this.totalsService_.getSubtotal(cart, {
838
+ excludeNonDiscounts: true,
839
+ });
840
+ nominator = Math.min(value, subtotal);
841
+ itemRelativeToSubtotal = lineItem.unit_price / subtotal;
842
+ totalItemPercentage = itemRelativeToSubtotal * lineItem.quantity;
843
+ adjustment = Math.round(nominator * totalItemPercentage);
844
+ }
845
+ else {
846
+ adjustment = value * lineItem.quantity;
847
+ }
848
+ // if the amount of the discount exceeds the total price of the item,
849
+ // we return the total item price, else the fixed amount
850
+ return [2 /*return*/, adjustment >= fullItemPrice ? fullItemPrice : adjustment];
851
+ }
852
+ });
853
+ });
854
+ };
855
+ DiscountService.prototype.validateDiscountForCartOrThrow = function (cart, discount) {
724
856
  return __awaiter(this, void 0, void 0, function () {
725
- var requiredFields, discount;
857
+ var isValidForRegion, canApplyForCustomer;
726
858
  return __generator(this, function (_a) {
727
859
  switch (_a.label) {
728
860
  case 0:
729
- requiredFields = ["id", "code", "is_dynamic", "metadata"];
730
- fields = fields.concat(requiredFields);
731
- return [4 /*yield*/, this.retrieve(discountId, {
732
- select: fields,
733
- relations: expandFields,
734
- })
735
- // const final = await this.runDecorators_(decorated)
736
- ];
861
+ if (this.hasReachedLimit(discount)) {
862
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.NOT_ALLOWED, "Discount has been used maximum allowed times");
863
+ }
864
+ if (this.hasNotStarted(discount)) {
865
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.NOT_ALLOWED, "Discount is not valid yet");
866
+ }
867
+ if (this.hasExpired(discount)) {
868
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.NOT_ALLOWED, "Discount is expired");
869
+ }
870
+ if (this.isDisabled(discount)) {
871
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.NOT_ALLOWED, "The discount code is disabled");
872
+ }
873
+ return [4 /*yield*/, this.isValidForRegion(discount, cart.region_id)];
737
874
  case 1:
738
- discount = _a.sent();
739
- // const final = await this.runDecorators_(decorated)
740
- return [2 /*return*/, discount];
875
+ isValidForRegion = _a.sent();
876
+ if (!isValidForRegion) {
877
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.INVALID_DATA, "The discount is not available in current region");
878
+ }
879
+ if (!cart.customer_id) return [3 /*break*/, 3];
880
+ return [4 /*yield*/, this.canApplyForCustomer(discount.rule.id, cart.customer_id)];
881
+ case 2:
882
+ canApplyForCustomer = _a.sent();
883
+ if (!canApplyForCustomer) {
884
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.NOT_ALLOWED, "Discount is not valid for customer");
885
+ }
886
+ _a.label = 3;
887
+ case 3: return [2 /*return*/];
741
888
  }
742
889
  });
743
890
  });
744
891
  };
892
+ DiscountService.prototype.hasReachedLimit = function (discount) {
893
+ var count = discount.usage_count || 0;
894
+ var limit = discount.usage_limit;
895
+ return !!limit && count >= limit;
896
+ };
897
+ DiscountService.prototype.hasNotStarted = function (discount) {
898
+ return (0, date_helpers_1.isFuture)(discount.starts_at);
899
+ };
900
+ DiscountService.prototype.hasExpired = function (discount) {
901
+ return discount.ends_at && (0, date_helpers_1.isPast)(discount.ends_at);
902
+ };
903
+ DiscountService.prototype.isDisabled = function (discount) {
904
+ return discount.is_disabled;
905
+ };
906
+ DiscountService.prototype.isValidForRegion = function (discount, region_id) {
907
+ return __awaiter(this, void 0, void 0, function () {
908
+ var regions, parent;
909
+ return __generator(this, function (_a) {
910
+ switch (_a.label) {
911
+ case 0:
912
+ regions = discount.regions;
913
+ if (!discount.parent_discount_id) return [3 /*break*/, 2];
914
+ return [4 /*yield*/, this.retrieve(discount.parent_discount_id, {
915
+ relations: ["rule", "regions"],
916
+ })];
917
+ case 1:
918
+ parent = _a.sent();
919
+ regions = parent.regions;
920
+ _a.label = 2;
921
+ case 2: return [2 /*return*/, regions.find(function (_a) {
922
+ var id = _a.id;
923
+ return id === region_id;
924
+ }) !== undefined];
925
+ }
926
+ });
927
+ });
928
+ };
929
+ DiscountService.prototype.canApplyForCustomer = function (discountRuleId, customerId) {
930
+ return __awaiter(this, void 0, void 0, function () {
931
+ var _this = this;
932
+ return __generator(this, function (_a) {
933
+ return [2 /*return*/, this.atomicPhase_(function (manager) { return __awaiter(_this, void 0, void 0, function () {
934
+ var discountConditionRepo, customer;
935
+ return __generator(this, function (_a) {
936
+ switch (_a.label) {
937
+ case 0:
938
+ discountConditionRepo = manager.getCustomRepository(this.discountConditionRepository_);
939
+ // Instead of throwing on missing customer id, we simply invalidate the discount
940
+ if (!customerId) {
941
+ return [2 /*return*/, false];
942
+ }
943
+ return [4 /*yield*/, this.customerService_.retrieve(customerId, {
944
+ relations: ["groups"],
945
+ })];
946
+ case 1:
947
+ customer = _a.sent();
948
+ return [4 /*yield*/, discountConditionRepo.canApplyForCustomer(discountRuleId, customer.id)];
949
+ case 2: return [2 /*return*/, _a.sent()];
950
+ }
951
+ });
952
+ }); })];
953
+ });
954
+ });
955
+ };
745
956
  return DiscountService;
746
957
  }(medusa_interfaces_1.BaseService));
747
958
  exports.default = DiscountService;