@unchainedshop/plugins 1.2.36 → 2.0.0-beta1

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 (94) hide show
  1. package/lib/files/gridfs/gridfs-webhook.js +1 -1
  2. package/lib/files/gridfs/gridfs-webhook.js.map +1 -1
  3. package/lib/files/minio/minio-webhook.js +1 -1
  4. package/lib/files/minio/minio-webhook.js.map +1 -1
  5. package/lib/payment/apple-iap/adapter.js +1 -1
  6. package/lib/payment/apple-iap/adapter.js.map +1 -1
  7. package/lib/payment/bity/adapter.js +2 -2
  8. package/lib/payment/bity/adapter.js.map +1 -1
  9. package/lib/payment/cryptopay/db/CryptopayTransactions.d.ts +13 -0
  10. package/lib/payment/cryptopay/db/CryptopayTransactions.js +4 -0
  11. package/lib/payment/cryptopay/db/CryptopayTransactions.js.map +1 -0
  12. package/lib/payment/cryptopay/index.d.ts +5 -0
  13. package/lib/payment/cryptopay/index.js +6 -0
  14. package/lib/payment/cryptopay/index.js.map +1 -0
  15. package/lib/payment/{cryptopay.d.ts → cryptopay/middleware.d.ts} +0 -0
  16. package/lib/payment/cryptopay/middleware.js +79 -0
  17. package/lib/payment/cryptopay/middleware.js.map +1 -0
  18. package/lib/payment/cryptopay/module/configureCryptopayModule.d.ts +25 -0
  19. package/lib/payment/cryptopay/module/configureCryptopayModule.js +75 -0
  20. package/lib/payment/cryptopay/module/configureCryptopayModule.js.map +1 -0
  21. package/lib/payment/cryptopay/plugin.d.ts +3 -0
  22. package/lib/payment/cryptopay/plugin.js +201 -0
  23. package/lib/payment/cryptopay/plugin.js.map +1 -0
  24. package/lib/payment/datatrans-v2/middleware.js +1 -1
  25. package/lib/payment/datatrans-v2/middleware.js.map +1 -1
  26. package/lib/payment/postfinance-checkout/middleware.js +1 -1
  27. package/lib/payment/postfinance-checkout/middleware.js.map +1 -1
  28. package/lib/pricing/product-catalog-price.js.map +1 -1
  29. package/lib/pricing/product-price-rateconversion.js +23 -17
  30. package/lib/pricing/product-price-rateconversion.js.map +1 -1
  31. package/lib/pricing/product-price-round.js +2 -1
  32. package/lib/pricing/product-price-round.js.map +1 -1
  33. package/lib/warehousing/google-sheets.js +3 -2
  34. package/lib/warehousing/google-sheets.js.map +1 -1
  35. package/lib/{pricing/product-price-ECB-interbank-exchange.d.ts → warehousing/infinite-minter.d.ts} +0 -0
  36. package/lib/warehousing/infinite-minter.js +50 -0
  37. package/lib/warehousing/infinite-minter.js.map +1 -0
  38. package/lib/warehousing/store.js +2 -1
  39. package/lib/warehousing/store.js.map +1 -1
  40. package/lib/worker/BulkImportWorker.js +2 -3
  41. package/lib/worker/BulkImportWorker.js.map +1 -1
  42. package/lib/worker/ZombieKillerWorker.js +2 -3
  43. package/lib/worker/ZombieKillerWorker.js.map +1 -1
  44. package/lib/worker/email.js.map +1 -1
  45. package/lib/worker/export-token.d.ts +4 -0
  46. package/lib/worker/export-token.js +25 -0
  47. package/lib/worker/export-token.js.map +1 -0
  48. package/lib/worker/external.js +1 -0
  49. package/lib/worker/external.js.map +1 -1
  50. package/lib/{pricing/product-price-coinbase-exchange.d.ts → worker/update-coinbase-rates.d.ts} +0 -0
  51. package/lib/worker/update-coinbase-rates.js +69 -0
  52. package/lib/worker/update-coinbase-rates.js.map +1 -0
  53. package/lib/worker/update-ecb-rates.d.ts +1 -0
  54. package/lib/worker/update-ecb-rates.js +79 -0
  55. package/lib/worker/update-ecb-rates.js.map +1 -0
  56. package/package.json +23 -20
  57. package/src/files/gridfs/gridfs-webhook.ts +1 -1
  58. package/src/files/minio/minio-webhook.js +1 -1
  59. package/src/payment/apple-iap/adapter.ts +1 -1
  60. package/src/payment/bity/adapter.ts +2 -2
  61. package/src/payment/cryptopay/db/CryptopayTransactions.ts +17 -0
  62. package/src/payment/cryptopay/index.ts +8 -0
  63. package/src/payment/cryptopay/middleware.ts +95 -0
  64. package/src/payment/cryptopay/module/configureCryptopayModule.ts +133 -0
  65. package/src/payment/cryptopay/plugin.ts +289 -0
  66. package/src/payment/cryptopay/readme.md +1 -0
  67. package/src/payment/datatrans-v2/middleware.ts +1 -1
  68. package/src/payment/postfinance-checkout/middleware.ts +1 -1
  69. package/src/pricing/product-catalog-price.ts +1 -0
  70. package/src/pricing/product-price-rateconversion.ts +25 -28
  71. package/src/pricing/product-price-round.ts +3 -1
  72. package/src/warehousing/google-sheets.ts +4 -2
  73. package/src/warehousing/infinite-minter.ts +66 -0
  74. package/src/warehousing/store.ts +3 -1
  75. package/src/worker/BulkImportWorker.ts +2 -3
  76. package/src/worker/ZombieKillerWorker.ts +2 -3
  77. package/src/worker/email.ts +0 -1
  78. package/src/worker/export-token.ts +31 -0
  79. package/src/worker/external.ts +1 -0
  80. package/src/worker/update-coinbase-rates.ts +91 -0
  81. package/src/worker/update-ecb-rates.ts +97 -0
  82. package/lib/payment/cryptopay.js +0 -161
  83. package/lib/payment/cryptopay.js.map +0 -1
  84. package/lib/pricing/product-price-ECB-interbank-exchange.js +0 -90
  85. package/lib/pricing/product-price-ECB-interbank-exchange.js.map +0 -1
  86. package/lib/pricing/product-price-coinbase-exchange.js +0 -60
  87. package/lib/pricing/product-price-coinbase-exchange.js.map +0 -1
  88. package/lib/pricing/product-price-cryptopay.d.ts +0 -2
  89. package/lib/pricing/product-price-cryptopay.js +0 -23
  90. package/lib/pricing/product-price-cryptopay.js.map +0 -1
  91. package/src/payment/cryptopay.ts +0 -197
  92. package/src/pricing/product-price-ECB-interbank-exchange.ts +0 -108
  93. package/src/pricing/product-price-coinbase-exchange.ts +0 -82
  94. package/src/pricing/product-price-cryptopay.ts +0 -27
@@ -0,0 +1,91 @@
1
+ import { IWorkerAdapter } from '@unchainedshop/types/worker';
2
+ import { WorkerAdapter, WorkerDirector } from '@unchainedshop/core-worker';
3
+ import later from '@breejs/later';
4
+ import fetch from 'node-fetch';
5
+ import { ProductPriceRate } from '@unchainedshop/types/products.pricing';
6
+ import { systemLocale } from '@unchainedshop/utils';
7
+
8
+ const getExchangeRates = async (base) => {
9
+ return fetch(`https://api.coinbase.com/v2/exchange-rates?currency=${base}`, {
10
+ method: 'GET',
11
+ })
12
+ .then((res) => res.json())
13
+ .then((r) => r?.data);
14
+ };
15
+
16
+ const everyMinute = later.parse.cron('* * * * *');
17
+
18
+ const UpdateCoinbaseRates: IWorkerAdapter<any, any> = {
19
+ ...WorkerAdapter,
20
+
21
+ key: 'shop.unchained.worker.update-coinbase-rates',
22
+ label: 'Update Coinbase Rates',
23
+ version: '1.0',
24
+ type: 'UPDATE_COINBASE_RATES',
25
+
26
+ doWork: async (input, requestContext) => {
27
+ const { modules, services } = requestContext;
28
+
29
+ try {
30
+ const currencyCode = await services.countries.resolveDefaultCurrencyCode(
31
+ {
32
+ isoCode: systemLocale.country,
33
+ },
34
+ requestContext,
35
+ );
36
+
37
+ const currencies = await modules.currencies.findCurrencies({ includeInactive: true });
38
+ const currencyCodes = currencies.map((currency) => currency.isoCode);
39
+
40
+ const {
41
+ currency: baseCurrency,
42
+ rates: pairs,
43
+ }: { currency: string; rates: Record<string, string> } = await getExchangeRates(currencyCode);
44
+ const timestamp = new Date();
45
+
46
+ // five minutes
47
+ const expiresAt = new Date(new Date().getTime() + 5 * 60 * 1000);
48
+
49
+ const rates: Array<ProductPriceRate> = Object.entries(pairs)
50
+ .map(([quoteCurrency, rate]) => {
51
+ return {
52
+ baseCurrency,
53
+ quoteCurrency,
54
+ rate: parseFloat(rate),
55
+ timestamp,
56
+ expiresAt,
57
+ };
58
+ })
59
+ .filter(
60
+ (rate) =>
61
+ currencyCodes.includes(rate.quoteCurrency) && rate.quoteCurrency !== rate.baseCurrency,
62
+ );
63
+
64
+ const success = await modules.products.prices.rates.updateRates(rates);
65
+ return {
66
+ success,
67
+ result: {
68
+ ratesUpdated: rates.length,
69
+ },
70
+ };
71
+ } catch (e) {
72
+ return {
73
+ success: false,
74
+ error: {
75
+ name: 'UPDATE_COINBASE_RATES_FAILED',
76
+ message: 'Updating Coinbase Rates failed',
77
+ },
78
+ };
79
+ }
80
+ },
81
+ };
82
+
83
+ WorkerDirector.registerAdapter(UpdateCoinbaseRates);
84
+
85
+ WorkerDirector.configureAutoscheduling(UpdateCoinbaseRates, {
86
+ schedule: everyMinute,
87
+ retries: 0,
88
+ input: () => {
89
+ /* */
90
+ },
91
+ });
@@ -0,0 +1,97 @@
1
+ import { IWorkerAdapter } from '@unchainedshop/types/worker';
2
+ import { WorkerAdapter, WorkerDirector } from '@unchainedshop/core-worker';
3
+ import later from '@breejs/later';
4
+ import xmlJs from 'xml-js';
5
+ import fetch from 'node-fetch';
6
+ import { ProductPriceRate } from '@unchainedshop/types/products.pricing';
7
+
8
+ const getExchangeRates = async () => {
9
+ return fetch(`https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml`, {
10
+ method: 'GET',
11
+ })
12
+ .then((res) => res.text())
13
+ .then((text) => JSON.parse(xmlJs.xml2json(text)))
14
+ .then((json) =>
15
+ json.elements?.[0]?.elements
16
+ .filter((e) => e.name.toLowerCase() === 'cube')[0]
17
+ ?.elements[0]?.elements.map((element) => element.attributes),
18
+ );
19
+ };
20
+
21
+ // https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/index.en.html
22
+ // CET = UTC + 1
23
+ const everyDayAtFour = later.parse.cron('0 15 * * *');
24
+
25
+ const baseCurrency = 'EUR';
26
+
27
+ const UpdateECBRates: IWorkerAdapter<any, any> = {
28
+ ...WorkerAdapter,
29
+
30
+ key: 'shop.unchained.worker.update-ecb-rates',
31
+ label: 'Update ECB Rates',
32
+ version: '1.0',
33
+ type: 'UPDATE_ECB_RATES',
34
+
35
+ doWork: async (input, requestContext) => {
36
+ const { modules } = requestContext;
37
+
38
+ try {
39
+ const data: Array<{ currency: string; rate: string }> = await getExchangeRates();
40
+ const timestamp = new Date();
41
+ const expiresAt = new Date(new Date().getTime() + 24 * 60 * 60 * 1000);
42
+
43
+ const currencies = await modules.currencies.findCurrencies({ includeInactive: true });
44
+ const currencyCodes = currencies.map((currency) => currency.isoCode);
45
+
46
+ if (!currencyCodes.includes(baseCurrency))
47
+ return {
48
+ success: true,
49
+ result: {
50
+ ratesUpdated: 0,
51
+ info: 'EUR not enabled',
52
+ },
53
+ };
54
+
55
+ const rates: Array<ProductPriceRate> = data
56
+ .map((d) => {
57
+ return {
58
+ baseCurrency,
59
+ quoteCurrency: d.currency,
60
+ rate: parseFloat(d.rate),
61
+ timestamp,
62
+ expiresAt,
63
+ };
64
+ })
65
+ .filter(
66
+ (rate) =>
67
+ currencyCodes.includes(rate.quoteCurrency) && rate.quoteCurrency !== rate.baseCurrency,
68
+ );
69
+
70
+ const success = await modules.products.prices.rates.updateRates(rates);
71
+ return {
72
+ success,
73
+ result: {
74
+ ratesUpdated: rates.length,
75
+ },
76
+ };
77
+ } catch (e) {
78
+ return {
79
+ success: false,
80
+ error: {
81
+ name: 'UPDATE_ECB_RATES_FAILED',
82
+ message: 'Updating ECB Rates failed',
83
+ },
84
+ };
85
+ }
86
+ },
87
+ };
88
+
89
+ WorkerDirector.registerAdapter(UpdateECBRates);
90
+
91
+ WorkerDirector.configureAutoscheduling(UpdateECBRates, {
92
+ schedule: everyDayAtFour,
93
+ retries: 5,
94
+ input: () => {
95
+ /* */
96
+ },
97
+ });
@@ -1,161 +0,0 @@
1
- import bodyParser from 'body-parser';
2
- import { useMiddlewareWithCurrentContext } from '@unchainedshop/api';
3
- import { PaymentAdapter, PaymentDirector, PaymentError } from '@unchainedshop/core-payment';
4
- import { OrderPricingSheet } from '@unchainedshop/core-orders';
5
- import { ethers } from 'ethers';
6
- import BIP32Factory from 'bip32';
7
- import * as ecc from 'tiny-secp256k1';
8
- import * as bitcoin from 'bitcoinjs-lib';
9
- import { createLogger } from '@unchainedshop/logger';
10
- const logger = createLogger('unchained:core-payment:cryptopay');
11
- const { CRYPTOPAY_SECRET, CRYPTOPAY_WEBHOOK_PATH = '/payment/cryptopay', CRYPTOPAY_BTC_XPUB, CRYPTOPAY_ETH_XPUB, CRYPTOPAY_BTC_TESTNET = false, CRYPTOPAY_MAX_RATE_AGE = '360', // seconds
12
- CRYPTOPAY_MAX_CONV_DIFF = '0.01', } = process.env;
13
- var CryptopayCurrencies;
14
- (function (CryptopayCurrencies) {
15
- CryptopayCurrencies["BTC"] = "BTC";
16
- CryptopayCurrencies["ETH"] = "ETH";
17
- })(CryptopayCurrencies || (CryptopayCurrencies = {}));
18
- const MAX_RATE_AGE = parseInt(CRYPTOPAY_MAX_RATE_AGE, 10);
19
- const MAX_ALLOWED_DIFF = parseFloat(CRYPTOPAY_MAX_CONV_DIFF); // Accept payments when the converted amount differs by adapterActions much (in percent)
20
- export default (app) => {
21
- useMiddlewareWithCurrentContext(app, CRYPTOPAY_WEBHOOK_PATH, bodyParser.json());
22
- useMiddlewareWithCurrentContext(app, CRYPTOPAY_WEBHOOK_PATH, async (request, response) => {
23
- // Return a 200 response to acknowledge receipt of the event
24
- const resolvedContext = request.unchainedContext;
25
- const { currency, contract, decimals, address, amount, secret } = request.body;
26
- if (secret !== CRYPTOPAY_SECRET) {
27
- logger.warn(`Cryptopay Plugin: Invalid Cryptopay Secret provided`);
28
- response.end(JSON.stringify({ success: false }));
29
- return;
30
- }
31
- const orderPayment = await resolvedContext.modules.orders.payments.findOrderPaymentByContextData({
32
- context: { cryptoAddresses: { currency, address } },
33
- });
34
- if (orderPayment) {
35
- if (currency === CryptopayCurrencies.ETH && contract && contract !== '') {
36
- const ERC20CurrencyCount = await resolvedContext.modules.currencies.count({
37
- includeInactive: false,
38
- contractAddress: contract,
39
- });
40
- if (!ERC20CurrencyCount) {
41
- logger.warn(`Cryptopay Plugin: ERC20 token address ${contract} not whitelisted.`);
42
- response.end(JSON.stringify({ success: false }));
43
- return;
44
- }
45
- }
46
- const order = await resolvedContext.modules.orders.findOrder({
47
- orderId: orderPayment.orderId,
48
- });
49
- const pricing = OrderPricingSheet({
50
- calculation: order.calculation,
51
- currency: order.currency,
52
- });
53
- const totalAmount = pricing?.total({ useNetPrice: false }).amount;
54
- let convertedAmount;
55
- if (order.currency === currency) {
56
- convertedAmount = amount / 10 ** (decimals - 8); // All crypto native prices denoted with 8 decimals
57
- }
58
- else {
59
- // Need to convert
60
- const rate = await resolvedContext.modules.products.prices.rates.getRate(order.currency, contract && contract !== '' ? contract : currency, // Convert to the smart contract if given
61
- MAX_RATE_AGE);
62
- if (rate) {
63
- // We assume that we are converting to a fiat currency here (with 2 decimals).
64
- // Paying an order with prices in crypto in another crypto is not supported.
65
- convertedAmount = Math.round((amount / 10 ** decimals) * rate * 100);
66
- }
67
- }
68
- if (convertedAmount && convertedAmount >= totalAmount * (1 - MAX_ALLOWED_DIFF)) {
69
- await resolvedContext.modules.orders.checkout(order._id, {
70
- transactionContext: { address },
71
- paymentContext: { address },
72
- }, resolvedContext);
73
- response.end(JSON.stringify({ success: true }));
74
- }
75
- else {
76
- logger.warn(`Cryptopay Plugin: OrderPayment ${orderPayment._id} not marked as paid. Converted amount is ${convertedAmount}`);
77
- response.end(JSON.stringify({ success: false }));
78
- }
79
- }
80
- else {
81
- logger.info(`Cryptopay Plugin: No orderPayment with address ${address} and currency ${currency} found`);
82
- response.end(JSON.stringify({ success: false }));
83
- }
84
- });
85
- };
86
- const Cryptopay = {
87
- ...PaymentAdapter,
88
- key: 'shop.unchained.payment.cryptopay',
89
- label: 'Cryptopay',
90
- version: '1.0',
91
- typeSupported(type) {
92
- return type === 'GENERIC';
93
- },
94
- actions: (params) => {
95
- const { modules } = params.context;
96
- const adapterActions = {
97
- ...PaymentAdapter.actions(params),
98
- // eslint-disable-next-line
99
- configurationError() {
100
- // eslint-disable-line
101
- if (!CRYPTOPAY_SECRET) {
102
- return PaymentError.INCOMPLETE_CONFIGURATION;
103
- }
104
- return null;
105
- },
106
- isActive() {
107
- if (adapterActions.configurationError() === null)
108
- return true;
109
- return false;
110
- },
111
- isPayLaterAllowed() {
112
- return false;
113
- },
114
- sign: async () => {
115
- const { orderPayment } = params.paymentContext;
116
- if (orderPayment?.context.length) {
117
- // Do not derive address a second time for order payment, return existing address
118
- const existingAddresses = orderPayment.context.filter((c) => c.currency);
119
- if (existingAddresses) {
120
- return JSON.stringify(existingAddresses);
121
- }
122
- }
123
- const cryptoAddresses = [];
124
- if (CRYPTOPAY_BTC_XPUB) {
125
- const network = CRYPTOPAY_BTC_TESTNET ? bitcoin.networks.testnet : bitcoin.networks.bitcoin;
126
- const bip32 = BIP32Factory(ecc);
127
- const hardenedMaster = bip32.fromBase58(CRYPTOPAY_BTC_XPUB, network);
128
- const btcDerivationNumber = await modules.orders.payments.countOrderPaymentsByContextData({
129
- context: { cryptoAddresses: { currency: CryptopayCurrencies.BTC } },
130
- });
131
- const child = hardenedMaster.derivePath(`0/${btcDerivationNumber}`);
132
- cryptoAddresses.push({
133
- currency: CryptopayCurrencies.BTC,
134
- address: bitcoin.payments.p2pkh({
135
- pubkey: child.publicKey,
136
- network,
137
- }).address,
138
- });
139
- }
140
- if (CRYPTOPAY_ETH_XPUB) {
141
- const hardenedMaster = ethers.utils.HDNode.fromExtendedKey(CRYPTOPAY_ETH_XPUB);
142
- const ethDerivationNumber = await modules.orders.payments.countOrderPaymentsByContextData({
143
- context: { cryptoAddresses: { currency: CryptopayCurrencies.ETH } },
144
- });
145
- cryptoAddresses.push({
146
- currency: CryptopayCurrencies.ETH,
147
- address: hardenedMaster.derivePath(`0/${ethDerivationNumber}`).address,
148
- });
149
- }
150
- await modules.orders.payments.updateContext(orderPayment._id, { cryptoAddresses }, params.context);
151
- return JSON.stringify(cryptoAddresses);
152
- },
153
- charge: async () => {
154
- return false;
155
- },
156
- };
157
- return adapterActions;
158
- },
159
- };
160
- PaymentDirector.registerAdapter(Cryptopay);
161
- //# sourceMappingURL=cryptopay.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cryptopay.js","sourceRoot":"","sources":["../../src/payment/cryptopay.ts"],"names":[],"mappings":"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"}
@@ -1,90 +0,0 @@
1
- import fetch from 'node-fetch';
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
@@ -1 +0,0 @@
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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"}
@@ -1,60 +0,0 @@
1
- import fetch from 'node-fetch';
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"product-price-coinbase-exchange.js","sourceRoot":"","sources":["../../src/pricing/product-price-coinbase-exchange.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- declare const _default: (app: any) => void;
2
- export default _default;
@@ -1,23 +0,0 @@
1
- import bodyParser from 'body-parser';
2
- import { useMiddlewareWithCurrentContext } from '@unchainedshop/api';
3
- const { CRYPTOPAY_SECRET, CRYPTOPAY_PRICING_WEBHOOK_PATH = '/pricing/cryptopay' } = 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
@@ -1 +0,0 @@
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,oBAAoB,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;AAEhG,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"}