@0xsquid/react-hooks 6.4.0-beta.0 → 6.4.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 (93) hide show
  1. package/dist/core/abis/ics20.json +128 -0
  2. package/dist/core/externalLinks.d.ts +1 -1
  3. package/dist/core/externalLinks.js +1 -1
  4. package/dist/core/externalLinks.js.map +1 -1
  5. package/dist/core/queries/queries-keys.d.ts +1 -7
  6. package/dist/core/queries/queries-keys.js +0 -24
  7. package/dist/core/queries/queries-keys.js.map +1 -1
  8. package/dist/core/types/error.d.ts +0 -5
  9. package/dist/core/types/error.js.map +1 -1
  10. package/dist/core/types/index.d.ts +0 -1
  11. package/dist/core/wagmiConfig.js +27 -16
  12. package/dist/core/wagmiConfig.js.map +1 -1
  13. package/dist/hooks/index.d.ts +0 -1
  14. package/dist/hooks/index.js +0 -1
  15. package/dist/hooks/index.js.map +1 -1
  16. package/dist/hooks/swap/useSwap.d.ts +0 -1
  17. package/dist/hooks/swap/useSwap.js +0 -2
  18. package/dist/hooks/swap/useSwap.js.map +1 -1
  19. package/dist/hooks/transaction/useApproval.js +74 -20
  20. package/dist/hooks/transaction/useApproval.js.map +1 -1
  21. package/dist/hooks/transaction/{useAllowance.d.ts → useErc20Allowance.d.ts} +8 -7
  22. package/dist/hooks/transaction/{useAllowance.js → useErc20Allowance.js} +12 -16
  23. package/dist/hooks/transaction/useErc20Allowance.js.map +1 -0
  24. package/dist/hooks/transaction/useExecuteTransaction.js +5 -1
  25. package/dist/hooks/transaction/useExecuteTransaction.js.map +1 -1
  26. package/dist/hooks/transaction/useGetRoute.js +27 -10
  27. package/dist/hooks/transaction/useGetRoute.js.map +1 -1
  28. package/dist/hooks/transaction/useIcs20Allowance.d.ts +88 -0
  29. package/dist/hooks/transaction/useIcs20Allowance.js +40 -0
  30. package/dist/hooks/transaction/useIcs20Allowance.js.map +1 -0
  31. package/dist/hooks/user/useHistory.js +0 -1
  32. package/dist/hooks/user/useHistory.js.map +1 -1
  33. package/dist/hooks/user/useUserParams.d.ts +0 -1
  34. package/dist/hooks/user/useUserParams.js +1 -2
  35. package/dist/hooks/user/useUserParams.js.map +1 -1
  36. package/dist/hooks/wallet/useEns.d.ts +1 -0
  37. package/dist/hooks/wallet/useEns.js +13 -1
  38. package/dist/hooks/wallet/useEns.js.map +1 -1
  39. package/dist/hooks/wallet/useMultiChainWallet.d.ts +2 -13
  40. package/dist/hooks/wallet/useMultiChainWallet.js +2 -2
  41. package/dist/hooks/wallet/useMultiChainWallet.js.map +1 -1
  42. package/dist/index.d.ts +1 -1
  43. package/dist/index.js +1 -1
  44. package/dist/index.js.map +1 -1
  45. package/dist/services/index.d.ts +1 -1
  46. package/dist/services/index.js +1 -1
  47. package/dist/services/index.js.map +1 -1
  48. package/dist/services/internal/assetsService.d.ts +10 -3
  49. package/dist/services/internal/assetsService.js +96 -14
  50. package/dist/services/internal/assetsService.js.map +1 -1
  51. package/dist/services/internal/evmService.d.ts +2 -0
  52. package/dist/services/internal/evmService.js +6 -0
  53. package/dist/services/internal/evmService.js.map +1 -1
  54. package/dist/services/internal/walletService.d.ts +0 -2
  55. package/dist/services/internal/walletService.js +1 -25
  56. package/dist/services/internal/walletService.js.map +1 -1
  57. package/dist/tests/assetsService.test.js +26 -13
  58. package/dist/tests/assetsService.test.js.map +1 -1
  59. package/package.json +3 -5
  60. package/dist/core/types/onramps/index.d.ts +0 -1
  61. package/dist/core/types/onramps/index.js +0 -2
  62. package/dist/core/types/onramps/index.js.map +0 -1
  63. package/dist/core/types/onramps/onramp.d.ts +0 -111
  64. package/dist/core/types/onramps/onramp.js +0 -2
  65. package/dist/core/types/onramps/onramp.js.map +0 -1
  66. package/dist/core/types/onramps/revolut.d.ts +0 -92
  67. package/dist/core/types/onramps/revolut.js +0 -2
  68. package/dist/core/types/onramps/revolut.js.map +0 -1
  69. package/dist/hooks/onramp/useFiatToCrypto.d.ts +0 -48
  70. package/dist/hooks/onramp/useFiatToCrypto.js +0 -145
  71. package/dist/hooks/onramp/useFiatToCrypto.js.map +0 -1
  72. package/dist/hooks/store/useFiatTransactionStore.d.ts +0 -20
  73. package/dist/hooks/store/useFiatTransactionStore.js +0 -36
  74. package/dist/hooks/store/useFiatTransactionStore.js.map +0 -1
  75. package/dist/hooks/transaction/useAllowance.js.map +0 -1
  76. package/dist/hooks/utils/useUtils.d.ts +0 -7
  77. package/dist/hooks/utils/useUtils.js +0 -20
  78. package/dist/hooks/utils/useUtils.js.map +0 -1
  79. package/dist/services/external/index.d.ts +0 -2
  80. package/dist/services/external/index.js +0 -3
  81. package/dist/services/external/index.js.map +0 -1
  82. package/dist/services/external/onramperClientAdapter.d.ts +0 -14
  83. package/dist/services/external/onramperClientAdapter.js +0 -136
  84. package/dist/services/external/onramperClientAdapter.js.map +0 -1
  85. package/dist/services/external/revolutClientAdapter.d.ts +0 -31
  86. package/dist/services/external/revolutClientAdapter.js +0 -221
  87. package/dist/services/external/revolutClientAdapter.js.map +0 -1
  88. package/dist/services/internal/fiatToCryptoService.d.ts +0 -21
  89. package/dist/services/internal/fiatToCryptoService.js +0 -41
  90. package/dist/services/internal/fiatToCryptoService.js.map +0 -1
  91. package/dist/tests/revolutClientAdapter.test.d.ts +0 -1
  92. package/dist/tests/revolutClientAdapter.test.js +0 -181
  93. package/dist/tests/revolutClientAdapter.test.js.map +0 -1
@@ -1,136 +0,0 @@
1
- import axios from "axios";
2
- export class OnramperAdapter {
3
- key = "onramper";
4
- label = "Onramper";
5
- supportedPaymentMethods = ["credit_card", "bank_transfer"];
6
- baseUrl = "https://api.onramper.com";
7
- apiKey = "ONRAMPER_API_KEY";
8
- getHeaders() {
9
- return {
10
- Authorization: this.apiKey,
11
- "Content-Type": "application/json",
12
- };
13
- }
14
- async getQuote(fiatCurrency, cryptoCurrency, amount) {
15
- try {
16
- const { data } = await axios.get(`${this.baseUrl}/quotes/${fiatCurrency.toLowerCase()}/${cryptoCurrency.toLowerCase()}`, {
17
- params: {
18
- amount,
19
- paymentMethod: "creditcard",
20
- },
21
- headers: this.getHeaders(),
22
- });
23
- // Get the best quote from available options
24
- const bestQuote = data[0];
25
- if (!bestQuote) {
26
- throw new Error("No quotes available from Onramper");
27
- }
28
- const totalFees = bestQuote.networkFee + bestQuote.transactionFee;
29
- const percentageFee = (totalFees / amount) * 100;
30
- return {
31
- fiatCurrency: fiatCurrency.toUpperCase(),
32
- cryptoCurrencyID: cryptoCurrency.toUpperCase(),
33
- amount,
34
- fees: {
35
- fixed: totalFees,
36
- percentage: percentageFee,
37
- },
38
- cryptoAmount: bestQuote.payout,
39
- };
40
- }
41
- catch (error) {
42
- if (axios.isAxiosError(error)) {
43
- throw new Error(error.response?.data?.message || "Failed to get quote from Onramper");
44
- }
45
- throw error;
46
- }
47
- }
48
- async getTransactionStatus(transactionId) {
49
- try {
50
- const { data } = await axios.get(`${this.baseUrl}/transactions/${transactionId}`, {
51
- headers: this.getHeaders(),
52
- });
53
- const statusMap = {
54
- pending: "processing",
55
- completed: "completed",
56
- failed: "failed",
57
- };
58
- return {
59
- transactionId: data.transactionId,
60
- status: statusMap[data.status] || "processing",
61
- createdAt: data.statusDate,
62
- updatedAt: data.statusDate,
63
- errorMessage: null,
64
- transactionHash: data.transactionHash || undefined,
65
- };
66
- }
67
- catch (error) {
68
- if (axios.isAxiosError(error)) {
69
- throw new Error(error.response?.data?.message ||
70
- "Failed to get transaction status from Onramper");
71
- }
72
- throw error;
73
- }
74
- }
75
- async executeQuote(executeQuoteRequest) {
76
- try {
77
- const { data } = await axios.post(`${this.baseUrl}/checkout/intent`, {
78
- onramp: "onramper",
79
- source: executeQuoteRequest.fiatCurrency.toLowerCase(),
80
- destination: executeQuoteRequest.cryptoCurrencyID.toLowerCase(),
81
- amount: executeQuoteRequest.amount,
82
- type: "buy",
83
- paymentMethod: executeQuoteRequest.paymentMethod === "credit_card"
84
- ? "creditcard"
85
- : "bank",
86
- network: this.getCryptoNetwork(executeQuoteRequest.cryptoCurrencyID),
87
- partnerContext: executeQuoteRequest.orderId,
88
- metaData: {
89
- quoteId: executeQuoteRequest.orderId,
90
- },
91
- wallet: {
92
- address: executeQuoteRequest.walletAddress,
93
- },
94
- }, { headers: this.getHeaders() });
95
- return {
96
- orderId: data.message.transactionInformation.transactionId,
97
- redirectUrl: data.message.transactionInformation.redirectUrl,
98
- };
99
- }
100
- catch (error) {
101
- if (axios.isAxiosError(error)) {
102
- throw new Error(error.response?.data?.message || "Failed to execute quote");
103
- }
104
- throw error;
105
- }
106
- }
107
- getCryptoNetwork(cryptoCurrency) {
108
- const networkMap = {
109
- BTC: "bitcoin",
110
- ETH: "ethereum",
111
- SOL: "solana",
112
- };
113
- return networkMap[cryptoCurrency.toUpperCase()] || "ethereum";
114
- }
115
- async getConfiguration() {
116
- try {
117
- const { data } = await axios.get(`${this.baseUrl}/config`, {
118
- headers: this.getHeaders(),
119
- });
120
- return {
121
- supportedCountries: data.supportedCountries || [],
122
- supportedCurrencies: data.supportedCurrencies || [],
123
- supportedPaymentMethods: [...this.supportedPaymentMethods],
124
- supportedTokens: data.supportedTokens || [],
125
- };
126
- }
127
- catch (error) {
128
- if (axios.isAxiosError(error)) {
129
- throw new Error(error.response?.data?.message ||
130
- "Failed to fetch Onramper configuration");
131
- }
132
- throw error;
133
- }
134
- }
135
- }
136
- //# sourceMappingURL=onramperClientAdapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"onramperClientAdapter.js","sourceRoot":"","sources":["../../../src/services/external/onramperClientAdapter.ts"],"names":[],"mappings":"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"}
@@ -1,31 +0,0 @@
1
- import { ChainData, Token } from "@0xsquid/squid-types";
2
- import { ExecuteFiatQuoteResult, ExecuteQuoteClient, FiatToCryptoConfig, FiatToCryptoProvider, OnRampQuoteResponse, OnRampTransactionStatus } from "../../core/types/onramps/onramp";
3
- import { RevolutConfig, RevolutQuoteResponse } from "../../core/types/onramps/revolut";
4
- export declare class RevolutClientAdapter implements FiatToCryptoProvider {
5
- readonly key = "revolut";
6
- readonly label = "Revolut";
7
- readonly supportedPaymentMethods: readonly ["card", "revolut", "apple-pay", "google-pay"];
8
- private readonly baseUrl;
9
- private getCountryData;
10
- private getCurrencyData;
11
- private findMatchingChain;
12
- private findMatchingToken;
13
- private filterAndMapTokens;
14
- mapConfigResponse(data: RevolutConfig, squidConfig: {
15
- chains: ChainData[];
16
- tokens: Token[];
17
- }): FiatToCryptoConfig;
18
- mapQuoteResponse(data: RevolutQuoteResponse, fiatCurrency: string, cryptoCurrencyID: string, originalAmount: number): OnRampQuoteResponse;
19
- mapPaymentMethod(method: string): string;
20
- calculateTotalFees(data: RevolutQuoteResponse, amount: number): {
21
- totalFees: number;
22
- percentageFee: number;
23
- };
24
- getQuote(fiatCurrency: string, cryptoCurrencyID: string, amount: number, paymentMethod?: string, region?: string): Promise<OnRampQuoteResponse>;
25
- getTransactionStatus(transactionId: string, walletAddress: string): Promise<OnRampTransactionStatus>;
26
- executeQuote(executeQuoteRequest: ExecuteQuoteClient): Promise<ExecuteFiatQuoteResult>;
27
- getConfiguration(squidConfig: {
28
- chains: ChainData[];
29
- tokens: Token[];
30
- }): Promise<FiatToCryptoConfig>;
31
- }
@@ -1,221 +0,0 @@
1
- import axios from "axios";
2
- import { countries } from "countries-list";
3
- import getSymbolFromCurrency from "currency-symbol-map";
4
- import { v4 as uuidv4 } from "uuid";
5
- import { nativeEvmTokenAddress } from "../../core/constants";
6
- export class RevolutClientAdapter {
7
- key = "revolut";
8
- label = "Revolut";
9
- supportedPaymentMethods = [
10
- "card",
11
- "revolut",
12
- "apple-pay",
13
- "google-pay",
14
- ];
15
- baseUrl = "/api/fiat-to-crypto/revolut";
16
- // ================================
17
- // DATA MAPPING FUNCTIONS
18
- // ================================
19
- getCountryData(countryCode) {
20
- try {
21
- if (!countries)
22
- return null;
23
- const countryCodeUpper = countryCode.toUpperCase();
24
- const countryData = countries[countryCodeUpper];
25
- return countryData ? { ...countryData, code: countryCodeUpper } : null;
26
- }
27
- catch {
28
- return null;
29
- }
30
- }
31
- getCurrencyData(currencyCode) {
32
- try {
33
- const symbol = getSymbolFromCurrency(currencyCode);
34
- return {
35
- denomination: currencyCode,
36
- symbol: symbol ?? currencyCode,
37
- };
38
- }
39
- catch {
40
- return null;
41
- }
42
- }
43
- findMatchingChain(revolutBlockchain, chains) {
44
- return chains.find((c) => c.networkIdentifier.toUpperCase() === revolutBlockchain);
45
- }
46
- findMatchingToken(params) {
47
- const { revolutToken, chain, tokens } = params;
48
- // Filter tokens by chain first
49
- const chainTokens = tokens.filter((t) => t.chainId === chain.chainId);
50
- if (revolutToken.smartContractAddress) {
51
- // For tokens with contract address (EVM tokens)
52
- return chainTokens.find((t) => t.address?.toLowerCase() ===
53
- revolutToken.smartContractAddress?.toLowerCase());
54
- }
55
- // For native tokens (BTC, ETH, etc.)
56
- return chainTokens.find((t) => t.address?.toLowerCase() === nativeEvmTokenAddress &&
57
- t.symbol.toUpperCase() === revolutToken.currency.toUpperCase());
58
- }
59
- filterAndMapTokens(revolutTokens, squidConfig) {
60
- return revolutTokens
61
- .map((revolutToken) => {
62
- try {
63
- const chain = this.findMatchingChain(revolutToken.blockchain, squidConfig.chains);
64
- if (!chain)
65
- return null;
66
- const token = this.findMatchingToken({
67
- revolutToken,
68
- chain,
69
- tokens: squidConfig.tokens,
70
- });
71
- if (!token)
72
- return null;
73
- return { ...token, cryptoCurrencyID: revolutToken.id };
74
- }
75
- catch {
76
- return null;
77
- }
78
- })
79
- .filter((token) => token !== null);
80
- }
81
- mapConfigResponse(data, squidConfig) {
82
- try {
83
- // Transform country codes into enhanced country info
84
- const supportedCountries = data.countries
85
- .map((code) => this.getCountryData(code))
86
- .filter((country) => country !== null);
87
- // Transform currencies with additional data
88
- const currencies = (data.fiat || [])
89
- .map((fc) => {
90
- const currencyData = this.getCurrencyData(fc.currency);
91
- if (!currencyData)
92
- return null;
93
- return {
94
- ...currencyData,
95
- minLimit: fc.min_limit,
96
- maxLimit: fc.max_limit,
97
- };
98
- })
99
- .filter((currency) => currency !== null);
100
- // Filter and map tokens that exist in both systems
101
- const allowedTokens = this.filterAndMapTokens(data.crypto, squidConfig);
102
- return {
103
- supportedCountries,
104
- supportedCurrencies: currencies,
105
- supportedPaymentMethods: data.payment_methods,
106
- supportedTokens: allowedTokens,
107
- };
108
- }
109
- catch (error) {
110
- console.error("[Revolut Adapter] Error mapping config response:", error);
111
- // Return empty but valid config instead of throwing
112
- return {
113
- supportedCountries: [],
114
- supportedCurrencies: [],
115
- supportedPaymentMethods: [],
116
- supportedTokens: [],
117
- };
118
- }
119
- }
120
- mapQuoteResponse(data, fiatCurrency, cryptoCurrencyID, originalAmount) {
121
- const { totalFees, percentageFee } = this.calculateTotalFees(data, originalAmount);
122
- return {
123
- fiatCurrency,
124
- cryptoCurrencyID,
125
- amount: originalAmount,
126
- fees: {
127
- fixed: totalFees,
128
- percentage: percentageFee,
129
- },
130
- cryptoAmount: data.crypto.amount,
131
- };
132
- }
133
- mapPaymentMethod(method) {
134
- const methodMap = {
135
- credit_card: "card",
136
- bank_transfer: "revolut",
137
- apple_pay: "apple-pay",
138
- google_pay: "google-pay",
139
- };
140
- return methodMap[method] || "card";
141
- }
142
- calculateTotalFees(data, amount) {
143
- const totalFees = Number((data.service_fee.amount +
144
- data.network_fee.amount +
145
- data.partner_fee.amount).toFixed(2));
146
- const percentageFee = Number(((totalFees / amount) * 100).toFixed(2));
147
- return { totalFees, percentageFee };
148
- }
149
- async getQuote(fiatCurrency, cryptoCurrencyID, amount, paymentMethod = "card", region = "GB") {
150
- try {
151
- const { data } = await axios.get(`${this.baseUrl}/quote`, {
152
- params: {
153
- fiatCurrency,
154
- cryptoCurrencyID,
155
- amount,
156
- paymentMethod: this.mapPaymentMethod(paymentMethod),
157
- region,
158
- },
159
- });
160
- const { totalFees, percentageFee } = this.calculateTotalFees(data, amount);
161
- return {
162
- fiatCurrency,
163
- cryptoCurrencyID,
164
- amount,
165
- fees: {
166
- fixed: totalFees,
167
- percentage: percentageFee,
168
- },
169
- cryptoAmount: data.crypto.amount,
170
- };
171
- }
172
- catch (error) {
173
- throw new Error("Failed to get quote from Revolut");
174
- }
175
- }
176
- async getTransactionStatus(transactionId, walletAddress) {
177
- try {
178
- const { data } = await axios.get(`${this.baseUrl}/status/${transactionId}`, {
179
- params: {
180
- wallet: walletAddress,
181
- },
182
- });
183
- return {
184
- transactionId: data.transactionId,
185
- status: data.status,
186
- createdAt: data.createdAt,
187
- updatedAt: data.updatedAt,
188
- transactionHash: data.transactionHash,
189
- };
190
- }
191
- catch (error) {
192
- throw new Error("Failed to get transaction status");
193
- }
194
- }
195
- async executeQuote(executeQuoteRequest) {
196
- try {
197
- const orderId = uuidv4();
198
- const { data } = await axios.post(`${this.baseUrl}/execute`, {
199
- ...executeQuoteRequest,
200
- orderId,
201
- });
202
- return {
203
- redirectUrl: data.redirectUrl,
204
- orderId,
205
- };
206
- }
207
- catch (error) {
208
- throw new Error("Failed to execute quote");
209
- }
210
- }
211
- async getConfiguration(squidConfig) {
212
- try {
213
- const { data } = await axios.get(`${this.baseUrl}/config`);
214
- return this.mapConfigResponse(data, squidConfig);
215
- }
216
- catch (error) {
217
- throw new Error("Failed to fetch Revolut configuration");
218
- }
219
- }
220
- }
221
- //# sourceMappingURL=revolutClientAdapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"revolutClientAdapter.js","sourceRoot":"","sources":["../../../src/services/external/revolutClientAdapter.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- import { ExecuteFiatQuoteResult, ExecuteQuoteClient, FiatCurrencyEnhanced, FiatToCryptoConfig, FiatToCryptoProvider, OnRampQuoteResponse, OnRampTransactionStatus } from "../../core/types/onramps/onramp";
2
- import { ChainData, Token } from "@0xsquid/squid-types";
3
- import { ICountry } from "countries-list";
4
- export declare class FiatToCryptoService {
5
- private provider;
6
- constructor(provider: FiatToCryptoProvider | undefined);
7
- static getProviderInfo(provider: FiatToCryptoProvider): {
8
- key: string | undefined;
9
- label: string | undefined;
10
- supportedPaymentMethods: readonly string[] | undefined;
11
- };
12
- getQuote(fiatCurrency: string, cryptoCurrencyID: string, amount: number, paymentMethod?: string, region?: string): Promise<OnRampQuoteResponse>;
13
- getTransactionStatus(transactionId: string, walletAddress: string): Promise<OnRampTransactionStatus>;
14
- executeQuote(executeQuoteRequest: ExecuteQuoteClient): Promise<ExecuteFiatQuoteResult>;
15
- getConfiguration(squidConfig: {
16
- chains: ChainData[];
17
- tokens: Token[];
18
- }): Promise<FiatToCryptoConfig>;
19
- getCountryData(countryCode: string): ICountry;
20
- getCurrencyData(currencyCode: string): FiatCurrencyEnhanced;
21
- }
@@ -1,41 +0,0 @@
1
- import getSymbolFromCurrency from "currency-symbol-map";
2
- import { countries } from "countries-list";
3
- export class FiatToCryptoService {
4
- provider;
5
- constructor(provider) {
6
- if (!provider) {
7
- throw new Error("Provider is required");
8
- }
9
- this.provider = provider;
10
- }
11
- static getProviderInfo(provider) {
12
- return {
13
- key: provider.key,
14
- label: provider.label,
15
- supportedPaymentMethods: provider.supportedPaymentMethods,
16
- };
17
- }
18
- async getQuote(fiatCurrency, cryptoCurrencyID, amount, paymentMethod = "card", region = "GB") {
19
- return this.provider.getQuote(fiatCurrency, cryptoCurrencyID, amount, paymentMethod, region);
20
- }
21
- async getTransactionStatus(transactionId, walletAddress) {
22
- return this.provider.getTransactionStatus(transactionId, walletAddress);
23
- }
24
- async executeQuote(executeQuoteRequest) {
25
- return this.provider.executeQuote(executeQuoteRequest);
26
- }
27
- async getConfiguration(squidConfig) {
28
- return this.provider.getConfiguration(squidConfig);
29
- }
30
- getCountryData(countryCode) {
31
- const countryCodeUpper = countryCode.toUpperCase();
32
- return countries[countryCodeUpper];
33
- }
34
- getCurrencyData(currencyCode) {
35
- return {
36
- denomination: currencyCode,
37
- symbol: getSymbolFromCurrency(currencyCode) ?? "",
38
- };
39
- }
40
- }
41
- //# sourceMappingURL=fiatToCryptoService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fiatToCryptoService.js","sourceRoot":"","sources":["../../../src/services/internal/fiatToCryptoService.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,MAAM,qBAAqB,CAAC;AAYxD,OAAO,EAAE,SAAS,EAAY,MAAM,gBAAgB,CAAC;AAErD,MAAM,OAAO,mBAAmB;IACtB,QAAQ,CAAuB;IAEvC,YAAY,QAA0C;QACpD,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;SACzC;QACD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,QAA8B;QACnD,OAAO;YACL,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,uBAAuB,EAAE,QAAQ,CAAC,uBAAuB;SAC1D,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,YAAoB,EACpB,gBAAwB,EACxB,MAAc,EACd,gBAAwB,MAAM,EAC9B,SAAiB,IAAI;QAErB,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAC3B,YAAY,EACZ,gBAAgB,EAChB,MAAM,EACN,aAAa,EACb,MAAM,CACP,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,aAAqB,EACrB,aAAqB;QAErB,OAAO,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,mBAAuC;QAEvC,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,WAGtB;QACC,OAAO,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACrD,CAAC;IAED,cAAc,CAAC,WAAmB;QAChC,MAAM,gBAAgB,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QACnD,OAAO,SAAS,CAAC,gBAA0C,CAAC,CAAC;IAC/D,CAAC;IAED,eAAe,CAAC,YAAoB;QAClC,OAAO;YACL,YAAY,EAAE,YAAY;YAC1B,MAAM,EAAE,qBAAqB,CAAC,YAAY,CAAC,IAAI,EAAE;SAClD,CAAC;IACJ,CAAC;CACF"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,181 +0,0 @@
1
- import { RevolutClientAdapter } from "../services/external/revolutClientAdapter";
2
- import { fetchNativeSquidData } from "./fetchSquidData";
3
- describe("RevolutClientAdapter", () => {
4
- let adapter;
5
- let realSquid = undefined;
6
- let REAL_CHAINS = [];
7
- let REAL_TOKENS = [];
8
- beforeAll(async () => {
9
- realSquid = await fetchNativeSquidData();
10
- REAL_CHAINS = realSquid?.chains ?? [];
11
- REAL_TOKENS = realSquid?.tokens ?? [];
12
- });
13
- beforeEach(() => {
14
- adapter = new RevolutClientAdapter();
15
- });
16
- describe("calculateTotalFees", () => {
17
- test("should correctly calculate total fees and percentage for EUR quote", () => {
18
- const mockQuoteResponse = {
19
- service_fee: {
20
- amount: 25.33,
21
- currency: "EUR",
22
- },
23
- network_fee: {
24
- amount: 0.29,
25
- currency: "EUR",
26
- },
27
- crypto: {
28
- amount: 1009.278933,
29
- currencyId: "USDC-ETH",
30
- },
31
- partner_fee: {
32
- amount: 9.74,
33
- currency: "EUR",
34
- },
35
- };
36
- const amount = 1000; // Original amount in EUR
37
- const { totalFees, percentageFee } = adapter.calculateTotalFees(mockQuoteResponse, amount);
38
- // Total fees should be 25.33 + 0.29 + 9.74 = 35.36
39
- expect(totalFees).toBe(35.36);
40
- // Percentage should be (35.36 / 1000) * 100 = 3.54%
41
- expect(percentageFee).toBe(3.54);
42
- });
43
- test("should handle zero fees", () => {
44
- const mockQuoteResponse = {
45
- service_fee: {
46
- amount: 0,
47
- currency: "EUR",
48
- },
49
- network_fee: {
50
- amount: 0,
51
- currency: "EUR",
52
- },
53
- crypto: {
54
- amount: 1000,
55
- currencyId: "USDC-ETH",
56
- },
57
- partner_fee: {
58
- amount: 0,
59
- currency: "EUR",
60
- },
61
- };
62
- const amount = 1000;
63
- const { totalFees, percentageFee } = adapter.calculateTotalFees(mockQuoteResponse, amount);
64
- expect(totalFees).toBe(0);
65
- expect(percentageFee).toBe(0);
66
- });
67
- test("should handle very small fees", () => {
68
- const mockQuoteResponse = {
69
- service_fee: {
70
- amount: 0.001,
71
- currency: "EUR",
72
- },
73
- network_fee: {
74
- amount: 0.002,
75
- currency: "EUR",
76
- },
77
- crypto: {
78
- amount: 100,
79
- currencyId: "USDC-ETH",
80
- },
81
- partner_fee: {
82
- amount: 0.003,
83
- currency: "EUR",
84
- },
85
- };
86
- const amount = 100;
87
- const { totalFees, percentageFee } = adapter.calculateTotalFees(mockQuoteResponse, amount);
88
- expect(totalFees).toBe(0.01); // 0.001 + 0.002 + 0.003 = 0.006, rounded to 0.01
89
- expect(percentageFee).toBe(0.01); // (0.01 / 100) * 100 = 0.01%
90
- });
91
- test("should handle different currencies with same calculation", () => {
92
- const mockQuoteResponse = {
93
- service_fee: {
94
- amount: 25.33,
95
- currency: "USD", // Changed to USD
96
- },
97
- network_fee: {
98
- amount: 0.29,
99
- currency: "USD",
100
- },
101
- crypto: {
102
- amount: 1009.278933,
103
- currencyId: "USDC-ETH",
104
- },
105
- partner_fee: {
106
- amount: 9.74,
107
- currency: "USD",
108
- },
109
- };
110
- const amount = 1000;
111
- const { totalFees, percentageFee } = adapter.calculateTotalFees(mockQuoteResponse, amount);
112
- expect(totalFees).toBe(35.36);
113
- expect(percentageFee).toBe(3.54);
114
- });
115
- });
116
- describe("mapConfigResponse", () => {
117
- test("should correctly map Revolut config to internal format", () => {
118
- const mockRevolutConfig = {
119
- version: "2.0",
120
- countries: ["GB", "FR", "DE"],
121
- fiat: [
122
- { currency: "EUR", min_limit: 10, max_limit: 1000 },
123
- { currency: "USD", min_limit: 10, max_limit: 1000 },
124
- ],
125
- crypto: [
126
- {
127
- id: "ETH",
128
- currency: "ETH",
129
- blockchain: "ETHEREUM",
130
- },
131
- {
132
- id: "USDC-ETH",
133
- currency: "USDC",
134
- blockchain: "ETHEREUM",
135
- smartContractAddress: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
136
- },
137
- ],
138
- payment_methods: ["card", "revolut"],
139
- };
140
- const result = adapter.mapConfigResponse(mockRevolutConfig, {
141
- chains: REAL_CHAINS,
142
- tokens: REAL_TOKENS,
143
- });
144
- expect(result.supportedCountries).toHaveLength(3);
145
- expect(result.supportedCurrencies).toHaveLength(2);
146
- expect(result.supportedTokens).toHaveLength(2);
147
- expect(result.supportedPaymentMethods).toEqual(["card", "revolut"]);
148
- });
149
- });
150
- describe("findMatchingToken", () => {
151
- test("should match both EVM native tokens and tokens with contract addresses", () => {
152
- const mockRevolutConfig = {
153
- version: "2.0",
154
- countries: ["GB"],
155
- fiat: [{ currency: "USD", min_limit: 10, max_limit: 1000 }],
156
- crypto: [
157
- {
158
- id: "ETH",
159
- currency: "ETH",
160
- blockchain: "ETHEREUM",
161
- },
162
- {
163
- id: "USDC-ETH",
164
- currency: "USDC",
165
- blockchain: "ETHEREUM",
166
- smartContractAddress: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
167
- },
168
- ],
169
- payment_methods: ["card"],
170
- };
171
- const result = adapter.mapConfigResponse(mockRevolutConfig, {
172
- chains: REAL_CHAINS,
173
- tokens: REAL_TOKENS,
174
- });
175
- expect(result.supportedTokens).toHaveLength(2);
176
- expect(result.supportedTokens.find((t) => t.symbol === "ETH")).toBeDefined();
177
- expect(result.supportedTokens.find((t) => t.symbol === "USDC")).toBeDefined();
178
- });
179
- });
180
- });
181
- //# sourceMappingURL=revolutClientAdapter.test.js.map