@unchainedshop/plugins 1.2.5 → 1.2.6

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 (286) hide show
  1. package/lib/delivery/pick-mup.d.ts +1 -0
  2. package/lib/delivery/pick-mup.js +98 -0
  3. package/lib/delivery/pick-mup.js.map +1 -0
  4. package/lib/delivery/post.d.ts +1 -0
  5. package/lib/delivery/post.js +23 -0
  6. package/lib/delivery/post.js.map +1 -0
  7. package/lib/delivery/send-message.d.ts +1 -0
  8. package/lib/delivery/send-message.js +41 -0
  9. package/lib/delivery/send-message.js.map +1 -0
  10. package/lib/delivery/stores.d.ts +1 -0
  11. package/lib/delivery/stores.js +39 -0
  12. package/lib/delivery/stores.js.map +1 -0
  13. package/lib/enrollments/licensed.d.ts +1 -0
  14. package/lib/enrollments/licensed.js +40 -0
  15. package/lib/enrollments/licensed.js.map +1 -0
  16. package/lib/events/node-event-emitter.d.ts +1 -0
  17. package/lib/events/node-event-emitter.js +16 -0
  18. package/lib/events/node-event-emitter.js.map +1 -0
  19. package/lib/events/redis.d.ts +1 -0
  20. package/lib/events/redis.js +24 -0
  21. package/lib/events/redis.js.map +1 -0
  22. package/lib/files/gridfs/gridfs-adapter.d.ts +2 -0
  23. package/lib/files/gridfs/gridfs-adapter.js +106 -0
  24. package/lib/files/gridfs/gridfs-adapter.js.map +1 -0
  25. package/lib/files/gridfs/gridfs-webhook.d.ts +2 -0
  26. package/lib/files/gridfs/gridfs-webhook.js +55 -0
  27. package/lib/files/gridfs/gridfs-webhook.js.map +1 -0
  28. package/lib/files/gridfs/index.d.ts +8 -0
  29. package/lib/files/gridfs/index.js +21 -0
  30. package/lib/files/gridfs/index.js.map +1 -0
  31. package/lib/files/gridfs/promisePipe.d.ts +2 -0
  32. package/lib/files/gridfs/promisePipe.js +21 -0
  33. package/lib/files/gridfs/promisePipe.js.map +1 -0
  34. package/lib/files/gridfs/sign.d.ts +2 -0
  35. package/lib/files/gridfs/sign.js +12 -0
  36. package/lib/files/gridfs/sign.js.map +1 -0
  37. package/lib/files/minio/minio-adapter.d.ts +4 -0
  38. package/lib/files/minio/minio-adapter.js +165 -0
  39. package/lib/files/minio/minio-adapter.js.map +1 -0
  40. package/lib/files/minio/minio-webhook.d.ts +2 -0
  41. package/lib/files/minio/minio-webhook.js +47 -0
  42. package/lib/files/minio/minio-webhook.js.map +1 -0
  43. package/lib/filters/local-search.d.ts +3 -0
  44. package/lib/filters/local-search.js +84 -0
  45. package/lib/filters/local-search.js.map +1 -0
  46. package/lib/filters/strict-equal.d.ts +1 -0
  47. package/lib/filters/strict-equal.js +25 -0
  48. package/lib/filters/strict-equal.js.map +1 -0
  49. package/lib/payment/apple-iap/adapter.d.ts +2 -0
  50. package/lib/payment/apple-iap/adapter.js +286 -0
  51. package/lib/payment/apple-iap/adapter.js.map +1 -0
  52. package/lib/payment/apple-iap/db/AppleTransactionsCollection.d.ts +7 -0
  53. package/lib/payment/apple-iap/db/AppleTransactionsCollection.js +5 -0
  54. package/lib/payment/apple-iap/db/AppleTransactionsCollection.js.map +1 -0
  55. package/lib/payment/apple-iap/index.d.ts +3 -0
  56. package/lib/payment/apple-iap/index.js +4 -0
  57. package/lib/payment/apple-iap/index.js.map +1 -0
  58. package/lib/payment/apple-iap/module/configureAppleTransactionsModule.d.ts +9 -0
  59. package/lib/payment/apple-iap/module/configureAppleTransactionsModule.js +18 -0
  60. package/lib/payment/apple-iap/module/configureAppleTransactionsModule.js.map +1 -0
  61. package/lib/payment/bity/adapter.d.ts +2 -0
  62. package/lib/payment/bity/adapter.js +318 -0
  63. package/lib/payment/bity/adapter.js.map +1 -0
  64. package/lib/payment/bity/db/BityCredentialsCollection.d.ts +11 -0
  65. package/lib/payment/bity/db/BityCredentialsCollection.js +5 -0
  66. package/lib/payment/bity/db/BityCredentialsCollection.js.map +1 -0
  67. package/lib/payment/bity/index.d.ts +3 -0
  68. package/lib/payment/bity/index.js +4 -0
  69. package/lib/payment/bity/index.js.map +1 -0
  70. package/lib/payment/bity/module/configureBityModule.d.ts +11 -0
  71. package/lib/payment/bity/module/configureBityModule.js +33 -0
  72. package/lib/payment/bity/module/configureBityModule.js.map +1 -0
  73. package/lib/payment/braintree.d.ts +1 -0
  74. package/lib/payment/braintree.js +129 -0
  75. package/lib/payment/braintree.js.map +1 -0
  76. package/lib/payment/cryptopay.d.ts +2 -0
  77. package/lib/payment/cryptopay.js +161 -0
  78. package/lib/payment/cryptopay.js.map +1 -0
  79. package/lib/payment/datatrans-v2/api/authorize.d.ts +2 -0
  80. package/lib/payment/datatrans-v2/api/authorize.js +12 -0
  81. package/lib/payment/datatrans-v2/api/authorize.js.map +1 -0
  82. package/lib/payment/datatrans-v2/api/authorizeAuthenticated.d.ts +2 -0
  83. package/lib/payment/datatrans-v2/api/authorizeAuthenticated.js +11 -0
  84. package/lib/payment/datatrans-v2/api/authorizeAuthenticated.js.map +1 -0
  85. package/lib/payment/datatrans-v2/api/cancel.d.ts +2 -0
  86. package/lib/payment/datatrans-v2/api/cancel.js +10 -0
  87. package/lib/payment/datatrans-v2/api/cancel.js.map +1 -0
  88. package/lib/payment/datatrans-v2/api/index.d.ts +19 -0
  89. package/lib/payment/datatrans-v2/api/index.js +24 -0
  90. package/lib/payment/datatrans-v2/api/index.js.map +1 -0
  91. package/lib/payment/datatrans-v2/api/init.d.ts +2 -0
  92. package/lib/payment/datatrans-v2/api/init.js +31 -0
  93. package/lib/payment/datatrans-v2/api/init.js.map +1 -0
  94. package/lib/payment/datatrans-v2/api/makeFetcher.d.ts +2 -0
  95. package/lib/payment/datatrans-v2/api/makeFetcher.js +41 -0
  96. package/lib/payment/datatrans-v2/api/makeFetcher.js.map +1 -0
  97. package/lib/payment/datatrans-v2/api/secureFields.d.ts +2 -0
  98. package/lib/payment/datatrans-v2/api/secureFields.js +14 -0
  99. package/lib/payment/datatrans-v2/api/secureFields.js.map +1 -0
  100. package/lib/payment/datatrans-v2/api/settle.d.ts +2 -0
  101. package/lib/payment/datatrans-v2/api/settle.js +10 -0
  102. package/lib/payment/datatrans-v2/api/settle.js.map +1 -0
  103. package/lib/payment/datatrans-v2/api/status.d.ts +2 -0
  104. package/lib/payment/datatrans-v2/api/status.js +7 -0
  105. package/lib/payment/datatrans-v2/api/status.js.map +1 -0
  106. package/lib/payment/datatrans-v2/api/validate.d.ts +2 -0
  107. package/lib/payment/datatrans-v2/api/validate.js +10 -0
  108. package/lib/payment/datatrans-v2/api/validate.js.map +1 -0
  109. package/lib/payment/datatrans-v2/generateSignature.d.ts +10 -0
  110. package/lib/payment/datatrans-v2/generateSignature.js +19 -0
  111. package/lib/payment/datatrans-v2/generateSignature.js.map +1 -0
  112. package/lib/payment/datatrans-v2/getPaths.d.ts +9 -0
  113. package/lib/payment/datatrans-v2/getPaths.js +9 -0
  114. package/lib/payment/datatrans-v2/getPaths.js.map +1 -0
  115. package/lib/payment/datatrans-v2/index.d.ts +2 -0
  116. package/lib/payment/datatrans-v2/index.js +385 -0
  117. package/lib/payment/datatrans-v2/index.js.map +1 -0
  118. package/lib/payment/datatrans-v2/middleware.d.ts +2 -0
  119. package/lib/payment/datatrans-v2/middleware.js +113 -0
  120. package/lib/payment/datatrans-v2/middleware.js.map +1 -0
  121. package/lib/payment/datatrans-v2/parseRegistrationData.d.ts +11 -0
  122. package/lib/payment/datatrans-v2/parseRegistrationData.js +26 -0
  123. package/lib/payment/datatrans-v2/parseRegistrationData.js.map +1 -0
  124. package/lib/payment/datatrans-v2/roundedAmountFromOrder.d.ts +7 -0
  125. package/lib/payment/datatrans-v2/roundedAmountFromOrder.js +10 -0
  126. package/lib/payment/datatrans-v2/roundedAmountFromOrder.js.map +1 -0
  127. package/lib/payment/datatrans-v2/splitProperties.d.ts +8 -0
  128. package/lib/payment/datatrans-v2/splitProperties.js +58 -0
  129. package/lib/payment/datatrans-v2/splitProperties.js.map +1 -0
  130. package/lib/payment/invoice-prepaid.d.ts +1 -0
  131. package/lib/payment/invoice-prepaid.js +30 -0
  132. package/lib/payment/invoice-prepaid.js.map +1 -0
  133. package/lib/payment/invoice.d.ts +1 -0
  134. package/lib/payment/invoice.js +27 -0
  135. package/lib/payment/invoice.js.map +1 -0
  136. package/lib/payment/paypal-checkout.d.ts +1 -0
  137. package/lib/payment/paypal-checkout.js +82 -0
  138. package/lib/payment/paypal-checkout.js.map +1 -0
  139. package/lib/payment/postfinance-checkout/api.d.ts +11 -0
  140. package/lib/payment/postfinance-checkout/api.js +109 -0
  141. package/lib/payment/postfinance-checkout/api.js.map +1 -0
  142. package/lib/payment/postfinance-checkout/index.d.ts +2 -0
  143. package/lib/payment/postfinance-checkout/index.js +187 -0
  144. package/lib/payment/postfinance-checkout/index.js.map +1 -0
  145. package/lib/payment/postfinance-checkout/middleware.d.ts +2 -0
  146. package/lib/payment/postfinance-checkout/middleware.js +44 -0
  147. package/lib/payment/postfinance-checkout/middleware.js.map +1 -0
  148. package/lib/payment/postfinance-checkout/types.d.ts +23 -0
  149. package/lib/payment/postfinance-checkout/types.js +12 -0
  150. package/lib/payment/postfinance-checkout/types.js.map +1 -0
  151. package/lib/payment/postfinance-checkout/utils.d.ts +4 -0
  152. package/lib/payment/postfinance-checkout/utils.js +20 -0
  153. package/lib/payment/postfinance-checkout/utils.js.map +1 -0
  154. package/lib/payment/stripe.d.ts +2 -0
  155. package/lib/payment/stripe.js +217 -0
  156. package/lib/payment/stripe.js.map +1 -0
  157. package/lib/payment/worldline-saferpay/index.d.ts +1 -0
  158. package/lib/payment/worldline-saferpay/index.js +112 -0
  159. package/lib/payment/worldline-saferpay/index.js.map +1 -0
  160. package/lib/payment/worldline-saferpay/worldline-saferpay-client/api/SaferpayClient.d.ts +14 -0
  161. package/lib/payment/worldline-saferpay/worldline-saferpay-client/api/SaferpayClient.js +29 -0
  162. package/lib/payment/worldline-saferpay/worldline-saferpay-client/api/SaferpayClient.js.map +1 -0
  163. package/lib/payment/worldline-saferpay/worldline-saferpay-client/api/SaferpayConnection.d.ts +9 -0
  164. package/lib/payment/worldline-saferpay/worldline-saferpay-client/api/SaferpayConnection.js +28 -0
  165. package/lib/payment/worldline-saferpay/worldline-saferpay-client/api/SaferpayConnection.js.map +1 -0
  166. package/lib/payment/worldline-saferpay/worldline-saferpay-client/index.d.ts +4 -0
  167. package/lib/payment/worldline-saferpay/worldline-saferpay-client/index.js +2 -0
  168. package/lib/payment/worldline-saferpay/worldline-saferpay-client/index.js.map +1 -0
  169. package/lib/payment/worldline-saferpay/worldline-saferpay-client/models/PaymentMethods.d.ts +1 -0
  170. package/lib/payment/worldline-saferpay/worldline-saferpay-client/models/PaymentMethods.js +2 -0
  171. package/lib/payment/worldline-saferpay/worldline-saferpay-client/models/PaymentMethods.js.map +1 -0
  172. package/lib/payment/worldline-saferpay/worldline-saferpay-client/models/PaymentPageAssert.d.ts +73 -0
  173. package/lib/payment/worldline-saferpay/worldline-saferpay-client/models/PaymentPageAssert.js +2 -0
  174. package/lib/payment/worldline-saferpay/worldline-saferpay-client/models/PaymentPageAssert.js.map +1 -0
  175. package/lib/payment/worldline-saferpay/worldline-saferpay-client/models/PaymentPageInitialize.d.ts +53 -0
  176. package/lib/payment/worldline-saferpay/worldline-saferpay-client/models/PaymentPageInitialize.js +2 -0
  177. package/lib/payment/worldline-saferpay/worldline-saferpay-client/models/PaymentPageInitialize.js.map +1 -0
  178. package/lib/payment/worldline-saferpay/worldline-saferpay-client/models/Request.d.ts +13 -0
  179. package/lib/payment/worldline-saferpay/worldline-saferpay-client/models/Request.js +2 -0
  180. package/lib/payment/worldline-saferpay/worldline-saferpay-client/models/Request.js.map +1 -0
  181. package/lib/payment/worldline-saferpay/worldline-saferpay-client/models/Response.d.ts +9 -0
  182. package/lib/payment/worldline-saferpay/worldline-saferpay-client/models/Response.js +2 -0
  183. package/lib/payment/worldline-saferpay/worldline-saferpay-client/models/Response.js.map +1 -0
  184. package/lib/payment/worldline-saferpay/worldline-saferpay-client/models/Transaction.d.ts +5 -0
  185. package/lib/payment/worldline-saferpay/worldline-saferpay-client/models/Transaction.js +2 -0
  186. package/lib/payment/worldline-saferpay/worldline-saferpay-client/models/Transaction.js.map +1 -0
  187. package/lib/payment/worldline-saferpay/worldline-saferpay-client/models/TransactionCancel.d.ts +13 -0
  188. package/lib/payment/worldline-saferpay/worldline-saferpay-client/models/TransactionCancel.js +2 -0
  189. package/lib/payment/worldline-saferpay/worldline-saferpay-client/models/TransactionCancel.js.map +1 -0
  190. package/lib/pricing/delivery-swiss-tax.d.ts +15 -0
  191. package/lib/pricing/delivery-swiss-tax.js +98 -0
  192. package/lib/pricing/delivery-swiss-tax.js.map +1 -0
  193. package/lib/pricing/discount-100-off.d.ts +1 -0
  194. package/lib/pricing/discount-100-off.js +34 -0
  195. package/lib/pricing/discount-100-off.js.map +1 -0
  196. package/lib/pricing/discount-half-price-manual.d.ts +1 -0
  197. package/lib/pricing/discount-half-price-manual.js +34 -0
  198. package/lib/pricing/discount-half-price-manual.js.map +1 -0
  199. package/lib/pricing/discount-half-price.d.ts +1 -0
  200. package/lib/pricing/discount-half-price.js +37 -0
  201. package/lib/pricing/discount-half-price.js.map +1 -0
  202. package/lib/pricing/free-delivery.d.ts +2 -0
  203. package/lib/pricing/free-delivery.js +26 -0
  204. package/lib/pricing/free-delivery.js.map +1 -0
  205. package/lib/pricing/free-payment.d.ts +2 -0
  206. package/lib/pricing/free-payment.js +26 -0
  207. package/lib/pricing/free-payment.js.map +1 -0
  208. package/lib/pricing/order-delivery.d.ts +1 -0
  209. package/lib/pricing/order-delivery.js +33 -0
  210. package/lib/pricing/order-delivery.js.map +1 -0
  211. package/lib/pricing/order-discount.d.ts +1 -0
  212. package/lib/pricing/order-discount.js +110 -0
  213. package/lib/pricing/order-discount.js.map +1 -0
  214. package/lib/pricing/order-items-discount.d.ts +1 -0
  215. package/lib/pricing/order-items-discount.js +88 -0
  216. package/lib/pricing/order-items-discount.js.map +1 -0
  217. package/lib/pricing/order-items.d.ts +1 -0
  218. package/lib/pricing/order-items.js +44 -0
  219. package/lib/pricing/order-items.js.map +1 -0
  220. package/lib/pricing/order-payment.d.ts +1 -0
  221. package/lib/pricing/order-payment.js +33 -0
  222. package/lib/pricing/order-payment.js.map +1 -0
  223. package/lib/pricing/product-catalog-price.d.ts +1 -0
  224. package/lib/pricing/product-catalog-price.js +37 -0
  225. package/lib/pricing/product-catalog-price.js.map +1 -0
  226. package/lib/pricing/product-discount.d.ts +1 -0
  227. package/lib/pricing/product-discount.js +55 -0
  228. package/lib/pricing/product-discount.js.map +1 -0
  229. package/lib/pricing/product-price-ECB-interbank-exchange.d.ts +1 -0
  230. package/lib/pricing/product-price-ECB-interbank-exchange.js +90 -0
  231. package/lib/pricing/product-price-ECB-interbank-exchange.js.map +1 -0
  232. package/lib/pricing/product-price-coinbase-exchange.d.ts +1 -0
  233. package/lib/pricing/product-price-coinbase-exchange.js +60 -0
  234. package/lib/pricing/product-price-coinbase-exchange.js.map +1 -0
  235. package/lib/pricing/product-price-cryptopay.d.ts +2 -0
  236. package/lib/pricing/product-price-cryptopay.js +23 -0
  237. package/lib/pricing/product-price-cryptopay.js.map +1 -0
  238. package/lib/pricing/product-price-rateconversion.d.ts +1 -0
  239. package/lib/pricing/product-price-rateconversion.js +51 -0
  240. package/lib/pricing/product-price-rateconversion.js.map +1 -0
  241. package/lib/pricing/product-price-round.d.ts +11 -0
  242. package/lib/pricing/product-price-round.js +54 -0
  243. package/lib/pricing/product-price-round.js.map +1 -0
  244. package/lib/pricing/product-swiss-tax.d.ts +13 -0
  245. package/lib/pricing/product-swiss-tax.js +102 -0
  246. package/lib/pricing/product-swiss-tax.js.map +1 -0
  247. package/lib/pricing/utils/cache.d.ts +9 -0
  248. package/lib/pricing/utils/cache.js +28 -0
  249. package/lib/pricing/utils/cache.js.map +1 -0
  250. package/lib/quotations/manual.d.ts +1 -0
  251. package/lib/quotations/manual.js +21 -0
  252. package/lib/quotations/manual.js.map +1 -0
  253. package/lib/warehousing/google-sheets.d.ts +1 -0
  254. package/lib/warehousing/google-sheets.js +153 -0
  255. package/lib/warehousing/google-sheets.js.map +1 -0
  256. package/lib/warehousing/store.d.ts +1 -0
  257. package/lib/warehousing/store.js +33 -0
  258. package/lib/warehousing/store.js.map +1 -0
  259. package/lib/worker/BulkImportWorker.d.ts +2 -0
  260. package/lib/worker/BulkImportWorker.js +91 -0
  261. package/lib/worker/BulkImportWorker.js.map +1 -0
  262. package/lib/worker/GenerateOrderWorker.d.ts +1 -0
  263. package/lib/worker/GenerateOrderWorker.js +110 -0
  264. package/lib/worker/GenerateOrderWorker.js.map +1 -0
  265. package/lib/worker/MessageWorker.d.ts +10 -0
  266. package/lib/worker/MessageWorker.js +45 -0
  267. package/lib/worker/MessageWorker.js.map +1 -0
  268. package/lib/worker/ZombieKillerWorker.d.ts +7 -0
  269. package/lib/worker/ZombieKillerWorker.js +88 -0
  270. package/lib/worker/ZombieKillerWorker.js.map +1 -0
  271. package/lib/worker/email.d.ts +1 -0
  272. package/lib/worker/email.js +97 -0
  273. package/lib/worker/email.js.map +1 -0
  274. package/lib/worker/external.d.ts +2 -0
  275. package/lib/worker/external.js +13 -0
  276. package/lib/worker/external.js.map +1 -0
  277. package/lib/worker/heartbeat.d.ts +1 -0
  278. package/lib/worker/heartbeat.js +32 -0
  279. package/lib/worker/heartbeat.js.map +1 -0
  280. package/lib/worker/http-request.d.ts +8 -0
  281. package/lib/worker/http-request.js +61 -0
  282. package/lib/worker/http-request.js.map +1 -0
  283. package/lib/worker/sms.d.ts +1 -0
  284. package/lib/worker/sms.js +69 -0
  285. package/lib/worker/sms.js.map +1 -0
  286. package/package.json +3 -1
@@ -0,0 +1,88 @@
1
+ import { OrderPricingRowCategory } from '@unchainedshop/types/orders.pricing';
2
+ import { OrderPricingDirector, OrderPricingAdapter } from '@unchainedshop/core-orders';
3
+ const resolveRatioAndTaxDivisorForPricingSheet = (pricing, total) => {
4
+ if (total === 0 || !pricing) {
5
+ return {
6
+ ratio: 1,
7
+ taxDivisor: 1,
8
+ };
9
+ }
10
+ const tax = pricing.taxSum();
11
+ const gross = pricing.gross();
12
+ return {
13
+ ratio: gross / total,
14
+ taxDivisor: gross / (gross - tax),
15
+ };
16
+ };
17
+ const resolveAmountAndTax = ({ ratio, taxDivisor }, amount) => {
18
+ const shareAmount = Number.isFinite(ratio) ? amount * ratio : 0;
19
+ const shareTaxAmount = Number.isFinite(taxDivisor) ? shareAmount - shareAmount / taxDivisor : 0;
20
+ return [shareAmount, shareTaxAmount];
21
+ };
22
+ const applyDiscountToMultipleShares = (shares, amount) => {
23
+ return shares.reduce(([currentDiscountAmount, currentTaxAmount], share) => {
24
+ const [shareAmount, shareTaxAmount] = resolveAmountAndTax(share, amount);
25
+ return [currentDiscountAmount + shareAmount, currentTaxAmount + shareTaxAmount];
26
+ }, [0, 0]);
27
+ };
28
+ const calculateAmountToSplit = (configuration, amount) => {
29
+ const deductionAmount = configuration.rate
30
+ ? amount * configuration.rate
31
+ : Math.min(configuration.fixedRate, amount);
32
+ return Math.max(0, deductionAmount - (configuration.alreadyDeducted || 0));
33
+ };
34
+ const OrderItemsDiscount = {
35
+ ...OrderPricingAdapter,
36
+ key: 'shop.unchained.pricing.order-items-discount',
37
+ version: '1.0',
38
+ label: 'Apply Discounts on Total Value Of Goods',
39
+ orderIndex: 89,
40
+ isActivatedFor: () => {
41
+ return true;
42
+ },
43
+ actions: (params) => {
44
+ const pricingAdapter = OrderPricingAdapter.actions(params);
45
+ const { order, orderPositions, modules } = params.context;
46
+ return {
47
+ ...pricingAdapter,
48
+ calculate: async () => {
49
+ // discounts need to provide a *fixedRate*
50
+ // if you want to add percentual discounts,
51
+ // add it to the order item calculation
52
+ const totalAmountOfItems = params.calculationSheet.sum({
53
+ category: OrderPricingRowCategory.Items,
54
+ });
55
+ const itemShares = orderPositions.map((orderPosition) => resolveRatioAndTaxDivisorForPricingSheet(modules.orders.positions.pricingSheet(orderPosition, order.currency, params.context), totalAmountOfItems));
56
+ let alreadyDeducted = 0;
57
+ params.discounts.forEach(({ configuration, discountId }) => {
58
+ // First, we deduce the discount from the items
59
+ const [itemsDiscountAmount, itemsTaxAmount] = applyDiscountToMultipleShares(itemShares, calculateAmountToSplit({ ...configuration, alreadyDeducted }, totalAmountOfItems));
60
+ alreadyDeducted = +itemsDiscountAmount;
61
+ const discountAmount = itemsDiscountAmount;
62
+ const taxAmount = itemsTaxAmount;
63
+ if (discountAmount) {
64
+ pricingAdapter.resultSheet().addDiscount({
65
+ amount: discountAmount * -1,
66
+ discountId,
67
+ meta: {
68
+ adapter: OrderItemsDiscount.key,
69
+ },
70
+ });
71
+ if (taxAmount !== 0) {
72
+ pricingAdapter.resultSheet().addTax({
73
+ amount: taxAmount * -1,
74
+ meta: {
75
+ discountId,
76
+ adapter: OrderItemsDiscount.key,
77
+ },
78
+ });
79
+ }
80
+ }
81
+ });
82
+ return pricingAdapter.calculate();
83
+ },
84
+ };
85
+ },
86
+ };
87
+ OrderPricingDirector.registerAdapter(OrderItemsDiscount);
88
+ //# sourceMappingURL=order-items-discount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order-items-discount.js","sourceRoot":"","sources":["../../src/pricing/order-items-discount.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,44 @@
1
+ import { OrderPricingDirector, OrderPricingAdapter } from '@unchainedshop/core-orders';
2
+ const OrderItems = {
3
+ ...OrderPricingAdapter,
4
+ key: 'shop.unchained.pricing.order-items',
5
+ version: '1.0',
6
+ label: 'Add Total Value Of Goods to Order',
7
+ orderIndex: 0,
8
+ isActivatedFor: () => {
9
+ return true;
10
+ },
11
+ actions: (params) => {
12
+ const pricingAdapter = OrderPricingAdapter.actions(params);
13
+ const { order, orderPositions, modules } = params.context;
14
+ return {
15
+ ...pricingAdapter,
16
+ calculate: async () => {
17
+ // just sum up all products items prices, taxes & fees
18
+ const totalAndTaxesOfAllItems = orderPositions.reduce((current, orderPosition) => {
19
+ const pricing = modules.orders.positions.pricingSheet(orderPosition, order.currency, params.context);
20
+ const tax = pricing.taxSum();
21
+ const items = pricing.gross();
22
+ return {
23
+ taxes: current.taxes + tax,
24
+ items: current.items + items,
25
+ };
26
+ }, {
27
+ taxes: 0,
28
+ items: 0,
29
+ });
30
+ pricingAdapter.resultSheet().addItems({
31
+ amount: totalAndTaxesOfAllItems.items,
32
+ });
33
+ if (totalAndTaxesOfAllItems.taxes !== 0) {
34
+ pricingAdapter.resultSheet().addTax({
35
+ amount: totalAndTaxesOfAllItems.taxes,
36
+ });
37
+ }
38
+ return pricingAdapter.calculate();
39
+ },
40
+ };
41
+ },
42
+ };
43
+ OrderPricingDirector.registerAdapter(OrderItems);
44
+ //# sourceMappingURL=order-items.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order-items.js","sourceRoot":"","sources":["../../src/pricing/order-items.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEvF,MAAM,UAAU,GAAyB;IACvC,GAAG,mBAAmB;IAEtB,GAAG,EAAE,oCAAoC;IACzC,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,mCAAmC;IAC1C,UAAU,EAAE,CAAC;IAEb,cAAc,EAAE,GAAG,EAAE;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;QAClB,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;QAE1D,OAAO;YACL,GAAG,cAAc;YAEjB,SAAS,EAAE,KAAK,IAAI,EAAE;gBACpB,sDAAsD;gBACtD,MAAM,uBAAuB,GAAG,cAAc,CAAC,MAAM,CACnD,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE;oBACzB,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CACnD,aAAa,EACb,KAAK,CAAC,QAAQ,EACd,MAAM,CAAC,OAAO,CACf,CAAC;oBACF,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;oBAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;oBAC9B,OAAO;wBACL,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,GAAG;wBAC1B,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,KAAK;qBAC7B,CAAC;gBACJ,CAAC,EACD;oBACE,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;iBACT,CACF,CAAC;gBAEF,cAAc,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;oBACpC,MAAM,EAAE,uBAAuB,CAAC,KAAK;iBACtC,CAAC,CAAC;gBAEH,IAAI,uBAAuB,CAAC,KAAK,KAAK,CAAC,EAAE;oBACvC,cAAc,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC;wBAClC,MAAM,EAAE,uBAAuB,CAAC,KAAK;qBACtC,CAAC,CAAC;iBACJ;gBAED,OAAO,cAAc,CAAC,SAAS,EAAE,CAAC;YACpC,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,oBAAoB,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,33 @@
1
+ import { OrderPricingDirector, OrderPricingAdapter } from '@unchainedshop/core-orders';
2
+ const OrderPayment = {
3
+ ...OrderPricingAdapter,
4
+ key: 'shop.unchained.pricing.order-payment',
5
+ version: '1.0',
6
+ label: 'Add Payment Fees to Order',
7
+ orderIndex: 20,
8
+ isActivatedFor: () => {
9
+ return true;
10
+ },
11
+ actions: (params) => {
12
+ const pricingAdapter = OrderPricingAdapter.actions(params);
13
+ const { order, orderPayment, modules } = params.context;
14
+ return {
15
+ ...pricingAdapter,
16
+ calculate: async () => {
17
+ // just add tax + net price to order pricing
18
+ if (!orderPayment)
19
+ return null;
20
+ const pricing = modules.orders.payments.pricingSheet(orderPayment, order.currency, params.context);
21
+ const tax = pricing.taxSum();
22
+ const paymentFees = pricing.gross();
23
+ pricingAdapter.resultSheet().addPayment({ amount: paymentFees });
24
+ if (tax !== 0) {
25
+ pricingAdapter.resultSheet().addTax({ amount: tax });
26
+ }
27
+ return pricingAdapter.calculate();
28
+ },
29
+ };
30
+ },
31
+ };
32
+ OrderPricingDirector.registerAdapter(OrderPayment);
33
+ //# sourceMappingURL=order-payment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order-payment.js","sourceRoot":"","sources":["../../src/pricing/order-payment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEvF,MAAM,YAAY,GAAyB;IACzC,GAAG,mBAAmB;IAEtB,GAAG,EAAE,sCAAsC;IAC3C,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,2BAA2B;IAClC,UAAU,EAAE,EAAE;IAEd,cAAc,EAAE,GAAG,EAAE;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;QAClB,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;QAExD,OAAO;YACL,GAAG,cAAc;YAEjB,SAAS,EAAE,KAAK,IAAI,EAAE;gBACpB,4CAA4C;gBAC5C,IAAI,CAAC,YAAY;oBAAE,OAAO,IAAI,CAAC;gBAE/B,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAClD,YAAY,EACZ,KAAK,CAAC,QAAQ,EACd,MAAM,CAAC,OAAO,CACf,CAAC;gBACF,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC7B,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;gBAEpC,cAAc,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;gBACjE,IAAI,GAAG,KAAK,CAAC,EAAE;oBACb,cAAc,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;iBACtD;gBAED,OAAO,cAAc,CAAC,SAAS,EAAE,CAAC;YACpC,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,oBAAoB,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,37 @@
1
+ import { ProductPricingDirector, ProductPricingAdapter } from '@unchainedshop/core-products';
2
+ const ProductPrice = {
3
+ ...ProductPricingAdapter,
4
+ key: 'shop.unchained.pricing.product-price',
5
+ version: '1.0',
6
+ label: 'Add Gross Price to Product',
7
+ orderIndex: 0,
8
+ isActivatedFor: () => {
9
+ return true;
10
+ },
11
+ actions: (params) => {
12
+ const pricingAdapter = ProductPricingAdapter.actions(params);
13
+ return {
14
+ ...pricingAdapter,
15
+ calculate: async () => {
16
+ const { product, country, currency: forcedCurrency, quantity, modules, services, } = params.context;
17
+ const currency = forcedCurrency ||
18
+ (await services.countries.resolveDefaultCurrencyCode({
19
+ isoCode: country,
20
+ }, params.context));
21
+ const price = await modules.products.prices.price(product, { country, currency, quantity });
22
+ if (price) {
23
+ const itemTotal = price.amount * quantity;
24
+ pricingAdapter.resultSheet().addItem({
25
+ amount: itemTotal,
26
+ isTaxable: price.isTaxable,
27
+ isNetPrice: price.isNetPrice,
28
+ meta: { adapter: ProductPrice.key },
29
+ });
30
+ }
31
+ return pricingAdapter.calculate();
32
+ },
33
+ };
34
+ },
35
+ };
36
+ ProductPricingDirector.registerAdapter(ProductPrice);
37
+ //# sourceMappingURL=product-catalog-price.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product-catalog-price.js","sourceRoot":"","sources":["../../src/pricing/product-catalog-price.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAE7F,MAAM,YAAY,GAA2B;IAC3C,GAAG,qBAAqB;IAExB,GAAG,EAAE,sCAAsC;IAC3C,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,4BAA4B;IACnC,UAAU,EAAE,CAAC;IAEb,cAAc,EAAE,GAAG,EAAE;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;QAClB,MAAM,cAAc,GAAG,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE7D,OAAO;YACL,GAAG,cAAc;YAEjB,SAAS,EAAE,KAAK,IAAI,EAAE;gBACpB,MAAM,EACJ,OAAO,EACP,OAAO,EACP,QAAQ,EAAE,cAAc,EACxB,QAAQ,EACR,OAAO,EACP,QAAQ,GACT,GAAG,MAAM,CAAC,OAAO,CAAC;gBACnB,MAAM,QAAQ,GACZ,cAAc;oBACd,CAAC,MAAM,QAAQ,CAAC,SAAS,CAAC,0BAA0B,CAClD;wBACE,OAAO,EAAE,OAAO;qBACjB,EACD,MAAM,CAAC,OAAO,CACf,CAAC,CAAC;gBACL,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC5F,IAAI,KAAK,EAAE;oBACT,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC;oBAC1C,cAAc,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC;wBACnC,MAAM,EAAE,SAAS;wBACjB,SAAS,EAAE,KAAK,CAAC,SAAS;wBAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;wBAC5B,IAAI,EAAE,EAAE,OAAO,EAAE,YAAY,CAAC,GAAG,EAAE;qBACpC,CAAC,CAAC;iBACJ;gBAED,OAAO,cAAc,CAAC,SAAS,EAAE,CAAC;YACpC,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,sBAAsB,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,55 @@
1
+ import { ProductPricingRowCategory, } from '@unchainedshop/types/products.pricing';
2
+ import { ProductPricingDirector, ProductPricingAdapter } from '@unchainedshop/core-products';
3
+ const applyRate = (configuration, amount) => {
4
+ const { rate, fixedRate } = configuration;
5
+ return rate ? amount * rate : Math.min(fixedRate, amount);
6
+ };
7
+ const ProductDiscount = {
8
+ ...ProductPricingAdapter,
9
+ key: 'shop.unchained.pricing.product-discount',
10
+ version: '1.0',
11
+ label: 'Apply Discounts on Product Price',
12
+ orderIndex: 10,
13
+ isActivatedFor: () => {
14
+ return true;
15
+ },
16
+ actions: (params) => {
17
+ const pricingAdapter = ProductPricingAdapter.actions(params);
18
+ const addDiscount = (discount, total, isTaxable) => {
19
+ const { configuration, discountId } = discount;
20
+ const { isNetPrice = false, ...meta } = configuration;
21
+ const amount = applyRate(configuration, total);
22
+ pricingAdapter.resultSheet().addDiscount({
23
+ amount: amount * -1,
24
+ discountId,
25
+ isNetPrice,
26
+ isTaxable,
27
+ meta: { adapter: ProductDiscount.key, ...meta },
28
+ });
29
+ };
30
+ return {
31
+ ...pricingAdapter,
32
+ calculate: async () => {
33
+ const taxableTotal = params.calculationSheet.sum({
34
+ category: ProductPricingRowCategory.Item,
35
+ isTaxable: true,
36
+ });
37
+ const nonTaxableTotal = params.calculationSheet.sum({
38
+ category: ProductPricingRowCategory.Item,
39
+ isTaxable: false,
40
+ });
41
+ params.discounts.forEach((discount) => {
42
+ if (taxableTotal !== 0) {
43
+ addDiscount(discount, taxableTotal, true);
44
+ }
45
+ if (nonTaxableTotal !== 0) {
46
+ addDiscount(discount, nonTaxableTotal, false);
47
+ }
48
+ });
49
+ return pricingAdapter.calculate();
50
+ },
51
+ };
52
+ },
53
+ };
54
+ ProductPricingDirector.registerAdapter(ProductDiscount);
55
+ //# sourceMappingURL=product-discount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product-discount.js","sourceRoot":"","sources":["../../src/pricing/product-discount.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,yBAAyB,GAC1B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAE7F,MAAM,SAAS,GAAG,CAAC,aAAoC,EAAE,MAAM,EAAE,EAAE;IACjE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC;IAC1C,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AAC5D,CAAC,CAAC;AACF,MAAM,eAAe,GAA2B;IAC9C,GAAG,qBAAqB;IAExB,GAAG,EAAE,yCAAyC;IAC9C,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,kCAAkC;IACzC,UAAU,EAAE,EAAE;IAEd,cAAc,EAAE,GAAG,EAAE;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;QAClB,MAAM,cAAc,GAAG,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE7D,MAAM,WAAW,GAAG,CAAC,QAAkB,EAAE,KAAa,EAAE,SAAkB,EAAE,EAAE;YAC5E,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC;YAC/C,MAAM,EAAE,UAAU,GAAG,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,aAAa,CAAC;YACtD,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;YAE/C,cAAc,CAAC,WAAW,EAAE,CAAC,WAAW,CAAC;gBACvC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC;gBACnB,UAAU;gBACV,UAAU;gBACV,SAAS;gBACT,IAAI,EAAE,EAAE,OAAO,EAAE,eAAe,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE;aAChD,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,OAAO;YACL,GAAG,cAAc;YAEjB,SAAS,EAAE,KAAK,IAAI,EAAE;gBACpB,MAAM,YAAY,GAAG,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC;oBAC/C,QAAQ,EAAE,yBAAyB,CAAC,IAAI;oBACxC,SAAS,EAAE,IAAI;iBAChB,CAAC,CAAC;gBACH,MAAM,eAAe,GAAG,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC;oBAClD,QAAQ,EAAE,yBAAyB,CAAC,IAAI;oBACxC,SAAS,EAAE,KAAK;iBACjB,CAAC,CAAC;gBAEH,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;oBACpC,IAAI,YAAY,KAAK,CAAC,EAAE;wBACtB,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;qBAC3C;oBACD,IAAI,eAAe,KAAK,CAAC,EAAE;wBACzB,WAAW,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;qBAC/C;gBACH,CAAC,CAAC,CAAC;gBAEH,OAAO,cAAc,CAAC,SAAS,EAAE,CAAC;YACpC,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,sBAAsB,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC"}
@@ -0,0 +1,90 @@
1
+ import fetch from 'isomorphic-unfetch';
2
+ import { ProductPricingDirector, ProductPricingAdapter } from '@unchainedshop/core-products';
3
+ import xmlJs from 'xml-js';
4
+ import Cache from './utils/cache';
5
+ const CACHE_PERIOD = 60 * 60 * 24; // 1 day
6
+ const SUPPORTED_CURRENCIES = [
7
+ 'USD',
8
+ 'JPY',
9
+ 'BGN',
10
+ 'CZK',
11
+ 'DKK',
12
+ 'GBP',
13
+ 'HUF',
14
+ 'PLN',
15
+ 'RON',
16
+ 'SEK',
17
+ 'CHF',
18
+ 'ISK',
19
+ 'NOK',
20
+ 'HRK',
21
+ 'RUB',
22
+ 'TRY',
23
+ 'AUD',
24
+ 'BRL',
25
+ 'CAD',
26
+ 'CNY',
27
+ 'HKD',
28
+ 'IDR',
29
+ 'ILS',
30
+ 'INR',
31
+ 'KRW',
32
+ 'MXN',
33
+ 'MYR',
34
+ 'NZD',
35
+ 'PHP',
36
+ 'SGD',
37
+ 'THB',
38
+ 'ZAR',
39
+ ];
40
+ const cache = new Cache(CACHE_PERIOD);
41
+ const getEURexchangeRateForCurrency = async (currency) => {
42
+ const response = cache.get(currency, () => fetch(`https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml`, {
43
+ method: 'GET',
44
+ })
45
+ .then((res) => res.text())
46
+ .then((text) => JSON.parse(xmlJs.xml2json(text)))
47
+ .then((json) => json.elements?.[0]?.elements
48
+ .filter((e) => e.name.toLowerCase() === 'cube')[0]
49
+ ?.elements[0]?.elements.filter((a) => a.attributes.currency === currency)?.[0]?.attributes));
50
+ return response;
51
+ };
52
+ const ProductPriceECBIntraBankExchange = {
53
+ ...ProductPricingAdapter,
54
+ key: 'shop.unchained.pricing.price-ECB-intrabank-exchange',
55
+ version: '1.0',
56
+ label: 'Convert EUR to X with current exchange rate',
57
+ orderIndex: 1,
58
+ isActivatedFor: (context) => {
59
+ return SUPPORTED_CURRENCIES.indexOf(context.currency) !== -1;
60
+ },
61
+ actions: (params) => {
62
+ const pricingAdapter = ProductPricingAdapter.actions(params);
63
+ return {
64
+ ...pricingAdapter,
65
+ calculate: async () => {
66
+ const { product, country, quantity, currency, modules } = params.context;
67
+ const { calculation = [] } = params.calculationSheet;
68
+ const EURprice = await modules.products.prices.price(product, {
69
+ country,
70
+ currency: 'EUR',
71
+ quantity,
72
+ });
73
+ if (!EURprice || !EURprice?.amount || calculation?.length)
74
+ return pricingAdapter.calculate();
75
+ const exchange = await getEURexchangeRateForCurrency(currency);
76
+ const convertedAmount = EURprice.amount * exchange.rate;
77
+ pricingAdapter.resultSheet().resetCalculation(params.calculationSheet);
78
+ pricingAdapter.resultSheet().addItem({
79
+ amount: convertedAmount * quantity,
80
+ isTaxable: EURprice.isTaxable,
81
+ isNetPrice: EURprice.isNetPrice,
82
+ meta: { adapter: ProductPriceECBIntraBankExchange.key },
83
+ });
84
+ return pricingAdapter.calculate();
85
+ },
86
+ };
87
+ },
88
+ };
89
+ ProductPricingDirector.registerAdapter(ProductPriceECBIntraBankExchange);
90
+ //# sourceMappingURL=product-price-ECB-interbank-exchange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product-price-ECB-interbank-exchange.js","sourceRoot":"","sources":["../../src/pricing/product-price-ECB-interbank-exchange.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,60 @@
1
+ import fetch from 'isomorphic-unfetch';
2
+ import { ProductPricingDirector, ProductPricingAdapter } from '@unchainedshop/core-products';
3
+ import Cache from './utils/cache';
4
+ const CACHE_PERIOD = 60 * 60 * 0.1; // 10 minutes
5
+ const SUPPORTED_CURRENCIES = ['BTC', 'ETH', 'XRP', 'USDT', 'BCH', 'BSV', 'LTC', 'EOS', 'BNB', 'XTZ'];
6
+ const cache = new Cache(CACHE_PERIOD);
7
+ const getFiatexchangeRateForCrypto = async (base, target) => {
8
+ const { data } = await cache.get(`${base}-${target}`, () => fetch(`https://api.coinbase.com/v2/exchange-rates?currency=${base}`, {
9
+ method: 'GET',
10
+ }).then((res) => res.json()));
11
+ return data?.rates?.[target];
12
+ };
13
+ const ProductPriceCoinbaseExchange = {
14
+ ...ProductPricingAdapter,
15
+ key: 'shop.unchained.pricing.price-coinbase-exchange',
16
+ version: '1.0',
17
+ label: 'Convert fiat/crypto to crypto with current exchange rate',
18
+ orderIndex: 1,
19
+ isActivatedFor: (context) => {
20
+ return SUPPORTED_CURRENCIES.indexOf(context.currency.toUpperCase()) !== -1;
21
+ },
22
+ actions: (params) => {
23
+ const pricingAdapter = ProductPricingAdapter.actions(params);
24
+ const { services, modules } = params.context;
25
+ return {
26
+ ...pricingAdapter,
27
+ calculate: async () => {
28
+ const { product, country, quantity, currency } = params.context;
29
+ const defaultCurrency = await services.countries.resolveDefaultCurrencyCode({
30
+ isoCode: country,
31
+ }, params.context);
32
+ const productPrice = await modules.products.prices.price(product, {
33
+ country,
34
+ currency: defaultCurrency,
35
+ quantity,
36
+ });
37
+ const { calculation = [] } = params.calculationSheet;
38
+ if (!productPrice ||
39
+ !productPrice?.amount ||
40
+ calculation?.length ||
41
+ defaultCurrency === currency)
42
+ return pricingAdapter.calculate();
43
+ const rate = await getFiatexchangeRateForCrypto(defaultCurrency, currency);
44
+ if (rate > 0) {
45
+ const convertedAmount = productPrice.amount * rate;
46
+ pricingAdapter.resultSheet().resetCalculation(params.calculationSheet);
47
+ pricingAdapter.resultSheet().addItem({
48
+ amount: convertedAmount * quantity,
49
+ isTaxable: productPrice?.isTaxable,
50
+ isNetPrice: productPrice?.isNetPrice,
51
+ meta: { adapter: ProductPriceCoinbaseExchange.key },
52
+ });
53
+ }
54
+ return pricingAdapter.calculate();
55
+ },
56
+ };
57
+ },
58
+ };
59
+ ProductPricingDirector.registerAdapter(ProductPriceCoinbaseExchange);
60
+ //# sourceMappingURL=product-price-coinbase-exchange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product-price-coinbase-exchange.js","sourceRoot":"","sources":["../../src/pricing/product-price-coinbase-exchange.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ declare const _default: (app: any) => void;
2
+ export default _default;
@@ -0,0 +1,23 @@
1
+ import bodyParser from 'body-parser';
2
+ import { useMiddlewareWithCurrentContext } from '@unchainedshop/api';
3
+ const { CRYPTOPAY_SECRET, CRYPTOPAY_PRICING_WEBHOOK_PATH = '/payment/cryptopay-pricing' } = process.env;
4
+ export default (app) => {
5
+ useMiddlewareWithCurrentContext(app, CRYPTOPAY_PRICING_WEBHOOK_PATH, bodyParser.json());
6
+ useMiddlewareWithCurrentContext(app, CRYPTOPAY_PRICING_WEBHOOK_PATH, async (request, response) => {
7
+ const resolvedContext = request.unchainedContext;
8
+ const { baseCurrency, token, rate, timestamp, secret } = request.body;
9
+ if (secret !== CRYPTOPAY_SECRET) {
10
+ response.end(JSON.stringify({ success: false }));
11
+ return;
12
+ }
13
+ const rateData = {
14
+ baseCurrency,
15
+ quoteCurrency: token,
16
+ rate,
17
+ timestamp,
18
+ };
19
+ const success = await resolvedContext.modules.products.prices.rates.updateRate(rateData);
20
+ response.end(JSON.stringify({ success }));
21
+ });
22
+ };
23
+ //# sourceMappingURL=product-price-cryptopay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product-price-cryptopay.js","sourceRoot":"","sources":["../../src/pricing/product-price-cryptopay.ts"],"names":[],"mappings":"AAEA,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AAErE,MAAM,EAAE,gBAAgB,EAAE,8BAA8B,GAAG,4BAA4B,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;AAExG,eAAe,CAAC,GAAG,EAAE,EAAE;IACrB,+BAA+B,CAAC,GAAG,EAAE,8BAA8B,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAExF,+BAA+B,CAAC,GAAG,EAAE,8BAA8B,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;QAC/F,MAAM,eAAe,GAAG,OAAO,CAAC,gBAA2B,CAAC;QAC5D,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;QACtE,IAAI,MAAM,KAAK,gBAAgB,EAAE;YAC/B,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACjD,OAAO;SACR;QACD,MAAM,QAAQ,GAAqB;YACjC,YAAY;YACZ,aAAa,EAAE,KAAK;YACpB,IAAI;YACJ,SAAS;SACV,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACzF,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,51 @@
1
+ import { ProductPricingDirector, ProductPricingAdapter } from '@unchainedshop/core-products';
2
+ const { RATECONVERSION_MAX_AGE = '360' } = process.env;
3
+ const MAX_RATE_AGE = parseInt(RATECONVERSION_MAX_AGE, 10);
4
+ const ProductPriceRateConversion = {
5
+ ...ProductPricingAdapter,
6
+ key: 'shop.unchained.pricing.rate-conversion',
7
+ version: '1.0',
8
+ label: 'Generic rate conversion plugin that converts between rates if entry in DB exists.',
9
+ orderIndex: 1,
10
+ isActivatedFor: () => {
11
+ return true;
12
+ },
13
+ actions: (params) => {
14
+ const pricingAdapter = ProductPricingAdapter.actions(params);
15
+ const { services, modules } = params.context;
16
+ return {
17
+ ...pricingAdapter,
18
+ calculate: async () => {
19
+ const { product, country, quantity, currency } = params.context;
20
+ const defaultCurrency = await services.countries.resolveDefaultCurrencyCode({
21
+ isoCode: country,
22
+ }, params.context);
23
+ const productPrice = await modules.products.prices.price(product, {
24
+ country,
25
+ currency: defaultCurrency,
26
+ quantity,
27
+ });
28
+ const { calculation = [] } = params.calculationSheet;
29
+ if (!productPrice ||
30
+ !productPrice?.amount ||
31
+ calculation?.length ||
32
+ defaultCurrency === currency)
33
+ return pricingAdapter.calculate();
34
+ const rate = await modules.products.prices.rates.getRate(defaultCurrency, currency, MAX_RATE_AGE);
35
+ if (rate > 0) {
36
+ const convertedAmount = productPrice.amount * rate;
37
+ pricingAdapter.resultSheet().resetCalculation(params.calculationSheet);
38
+ pricingAdapter.resultSheet().addItem({
39
+ amount: convertedAmount * quantity,
40
+ isTaxable: productPrice?.isTaxable,
41
+ isNetPrice: productPrice?.isNetPrice,
42
+ meta: { adapter: ProductPriceRateConversion.key },
43
+ });
44
+ }
45
+ return pricingAdapter.calculate();
46
+ },
47
+ };
48
+ },
49
+ };
50
+ ProductPricingDirector.registerAdapter(ProductPriceRateConversion);
51
+ //# sourceMappingURL=product-price-rateconversion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product-price-rateconversion.js","sourceRoot":"","sources":["../../src/pricing/product-price-rateconversion.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAE7F,MAAM,EAAE,sBAAsB,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;AAEvD,MAAM,YAAY,GAAG,QAAQ,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;AAE1D,MAAM,0BAA0B,GAA2B;IACzD,GAAG,qBAAqB;IAExB,GAAG,EAAE,wCAAwC;IAC7C,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,mFAAmF;IAC1F,UAAU,EAAE,CAAC;IAEb,cAAc,EAAE,GAAG,EAAE;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;QAClB,MAAM,cAAc,GAAG,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7D,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;QAC7C,OAAO;YACL,GAAG,cAAc;YAEjB,SAAS,EAAE,KAAK,IAAI,EAAE;gBACpB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;gBAChE,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,0BAA0B,CACzE;oBACE,OAAO,EAAE,OAAO;iBACjB,EACD,MAAM,CAAC,OAAO,CACf,CAAC;gBAEF,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;oBAChE,OAAO;oBACP,QAAQ,EAAE,eAAe;oBACzB,QAAQ;iBACT,CAAC,CAAC;gBAEH,MAAM,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC;gBACrD,IACE,CAAC,YAAY;oBACb,CAAC,YAAY,EAAE,MAAM;oBACrB,WAAW,EAAE,MAAM;oBACnB,eAAe,KAAK,QAAQ;oBAE5B,OAAO,cAAc,CAAC,SAAS,EAAE,CAAC;gBAEpC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CACtD,eAAe,EACf,QAAQ,EACR,YAAY,CACb,CAAC;gBAEF,IAAI,IAAI,GAAG,CAAC,EAAE;oBACZ,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC;oBACnD,cAAc,CAAC,WAAW,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;oBACvE,cAAc,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC;wBACnC,MAAM,EAAE,eAAe,GAAG,QAAQ;wBAClC,SAAS,EAAE,YAAY,EAAE,SAAS;wBAClC,UAAU,EAAE,YAAY,EAAE,UAAU;wBACpC,IAAI,EAAE,EAAE,OAAO,EAAE,0BAA0B,CAAC,GAAG,EAAE;qBAClD,CAAC,CAAC;iBACJ;gBAED,OAAO,cAAc,CAAC,SAAS,EAAE,CAAC;YACpC,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,sBAAsB,CAAC,eAAe,CAAC,0BAA0B,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { IProductPricingAdapter } from '@unchainedshop/types/products.pricing';
2
+ interface PriceRoundSettings {
3
+ configurations: Record<string, number>;
4
+ defaultPrecision: number;
5
+ skip: Array<string>;
6
+ }
7
+ export declare const configureProductPriceRounding: ({ configurations, defaultPrecision, skip, }: PriceRoundSettings) => void;
8
+ export declare const ProductPriceRound: IProductPricingAdapter & {
9
+ configure: (params: PriceRoundSettings) => void;
10
+ };
11
+ export {};
@@ -0,0 +1,54 @@
1
+ import { ProductPricingAdapter } from '@unchainedshop/core-products';
2
+ const roundToNext = (value, precision) => value % precision === precision / 2
3
+ ? value + precision / 2
4
+ : value + (precision - (value % precision));
5
+ const ProductPriceRoundSettings = {
6
+ configurations: {},
7
+ defaultPrecision: 50,
8
+ skip: [],
9
+ };
10
+ export const configureProductPriceRounding = ({ configurations, defaultPrecision, skip, }) => {
11
+ if (defaultPrecision)
12
+ ProductPriceRoundSettings.defaultPrecision = defaultPrecision;
13
+ if (configurations)
14
+ ProductPriceRoundSettings.configurations = configurations;
15
+ if (skip?.length)
16
+ ProductPriceRoundSettings.skip = skip;
17
+ };
18
+ export const ProductPriceRound = {
19
+ ...ProductPricingAdapter,
20
+ key: 'shop.unchained.pricing.price-round',
21
+ version: '1.0',
22
+ label: 'Round product price to the next precision number',
23
+ orderIndex: 2,
24
+ isActivatedFor: () => {
25
+ return true;
26
+ },
27
+ configure: configureProductPriceRounding,
28
+ actions: (params) => {
29
+ const pricingAdapter = ProductPricingAdapter.actions(params);
30
+ return {
31
+ ...pricingAdapter,
32
+ calculate: async () => {
33
+ const { currency, quantity } = params.context;
34
+ const { configurations, skip, defaultPrecision } = ProductPriceRoundSettings;
35
+ const { calculation = [] } = params.calculationSheet;
36
+ if (skip?.indexOf(currency) !== -1)
37
+ return pricingAdapter.calculate();
38
+ const roundPrecision = configurations?.[currency] || defaultPrecision;
39
+ if (calculation?.length && roundPrecision) {
40
+ const [productPrice] = calculation;
41
+ pricingAdapter.resultSheet().resetCalculation(params.calculationSheet);
42
+ pricingAdapter.resultSheet().addItem({
43
+ amount: roundToNext(productPrice.amount, roundPrecision) * quantity,
44
+ isTaxable: productPrice.isTaxable,
45
+ isNetPrice: productPrice.isNetPrice,
46
+ meta: { adapter: ProductPriceRound.key },
47
+ });
48
+ }
49
+ return pricingAdapter.calculate();
50
+ },
51
+ };
52
+ },
53
+ };
54
+ //# sourceMappingURL=product-price-round.js.map