@openocean.finance/widget 1.0.28 → 1.0.30

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 (109) hide show
  1. package/dist/esm/components/AmountInput/AmountInputEndAdornment.js +46 -39
  2. package/dist/esm/components/AmountInput/AmountInputEndAdornment.js.map +1 -1
  3. package/dist/esm/components/Messages/WarningMessages.js +2 -2
  4. package/dist/esm/components/Messages/WarningMessages.js.map +1 -1
  5. package/dist/esm/components/Step/Step.js +37 -29
  6. package/dist/esm/components/Step/Step.js.map +1 -1
  7. package/dist/esm/components/TransactionDetails.js +3 -6
  8. package/dist/esm/components/TransactionDetails.js.map +1 -1
  9. package/dist/esm/config/version.d.ts +1 -1
  10. package/dist/esm/config/version.js +1 -1
  11. package/dist/esm/cross/adapters/AcrossAdapter.d.ts +15 -0
  12. package/dist/esm/cross/adapters/AcrossAdapter.js +166 -0
  13. package/dist/esm/cross/adapters/AcrossAdapter.js.map +1 -0
  14. package/dist/esm/cross/adapters/BaseSwapAdapter.d.ts +107 -0
  15. package/dist/esm/cross/adapters/BaseSwapAdapter.js +44 -0
  16. package/dist/esm/cross/adapters/BaseSwapAdapter.js.map +1 -0
  17. package/dist/esm/cross/adapters/DebridgeAdapter.d.ts +20 -0
  18. package/dist/esm/cross/adapters/DebridgeAdapter.js +264 -0
  19. package/dist/esm/cross/adapters/DebridgeAdapter.js.map +1 -0
  20. package/dist/esm/cross/adapters/LifiAdapter.d.ts +19 -0
  21. package/dist/esm/cross/adapters/LifiAdapter.js +169 -0
  22. package/dist/esm/cross/adapters/LifiAdapter.js.map +1 -0
  23. package/dist/esm/cross/adapters/MayanAdapter.d.ts +14 -0
  24. package/dist/esm/cross/adapters/MayanAdapter.js +119 -0
  25. package/dist/esm/cross/adapters/MayanAdapter.js.map +1 -0
  26. package/dist/esm/cross/adapters/NearIntentsAdapter.d.ts +21 -0
  27. package/dist/esm/cross/adapters/NearIntentsAdapter.js +425 -0
  28. package/dist/esm/cross/adapters/NearIntentsAdapter.js.map +1 -0
  29. package/dist/esm/cross/adapters/OptimexAdapter.d.ts +19 -0
  30. package/dist/esm/cross/adapters/OptimexAdapter.js +216 -0
  31. package/dist/esm/cross/adapters/OptimexAdapter.js.map +1 -0
  32. package/dist/esm/cross/adapters/OrbiterAdapter.d.ts +20 -0
  33. package/dist/esm/cross/adapters/OrbiterAdapter.js +213 -0
  34. package/dist/esm/cross/adapters/OrbiterAdapter.js.map +1 -0
  35. package/dist/esm/cross/adapters/RelayAdapter.d.ts +14 -0
  36. package/dist/esm/cross/adapters/RelayAdapter.js +171 -0
  37. package/dist/esm/cross/adapters/RelayAdapter.js.map +1 -0
  38. package/dist/esm/cross/adapters/SymbiosisAdapter.d.ts +14 -0
  39. package/dist/esm/cross/adapters/SymbiosisAdapter.js +120 -0
  40. package/dist/esm/cross/adapters/SymbiosisAdapter.js.map +1 -0
  41. package/dist/esm/cross/adapters/XYFinanceAdapter.d.ts +14 -0
  42. package/dist/esm/cross/adapters/XYFinanceAdapter.js +177 -0
  43. package/dist/esm/cross/adapters/XYFinanceAdapter.js.map +1 -0
  44. package/dist/esm/cross/adapters/index.d.ts +2 -0
  45. package/dist/esm/cross/adapters/index.js +10 -0
  46. package/dist/esm/cross/adapters/index.js.map +1 -0
  47. package/dist/esm/cross/constants/index.d.ts +202 -0
  48. package/dist/esm/cross/constants/index.js +183 -0
  49. package/dist/esm/cross/constants/index.js.map +1 -0
  50. package/dist/esm/cross/crossChainQuote.d.ts +25 -0
  51. package/dist/esm/cross/crossChainQuote.js +127 -0
  52. package/dist/esm/cross/crossChainQuote.js.map +1 -0
  53. package/dist/esm/cross/factory.d.ts +9 -0
  54. package/dist/esm/cross/factory.js +125 -0
  55. package/dist/esm/cross/factory.js.map +1 -0
  56. package/dist/esm/cross/registry.d.ts +12 -0
  57. package/dist/esm/cross/registry.js +52 -0
  58. package/dist/esm/cross/registry.js.map +1 -0
  59. package/dist/esm/hooks/useChain.d.ts +1 -1
  60. package/dist/esm/hooks/useGasRefuel.d.ts +1 -1
  61. package/dist/esm/hooks/useGasSufficiencyBridge.js +1 -2
  62. package/dist/esm/hooks/useGasSufficiencyBridge.js.map +1 -1
  63. package/dist/esm/hooks/useRouteExecution.js +2 -1
  64. package/dist/esm/hooks/useRouteExecution.js.map +1 -1
  65. package/dist/esm/hooks/useRoutes.js +49 -33
  66. package/dist/esm/hooks/useRoutes.js.map +1 -1
  67. package/dist/esm/hooks/useSettingMonitor.js.map +1 -1
  68. package/dist/esm/hooks/useTokenAddressBalance.d.ts +1 -1
  69. package/dist/esm/hooks/useTokenPrice.js +4 -2
  70. package/dist/esm/hooks/useTokenPrice.js.map +1 -1
  71. package/dist/esm/hooks/useTokens.d.ts +1 -1
  72. package/dist/esm/services/ExecuteRoute.js +142 -124
  73. package/dist/esm/services/ExecuteRoute.js.map +1 -1
  74. package/dist/esm/stores/form/useFieldController.d.ts +1 -1
  75. package/dist/esm/stores/routes/createRouteExecutionStore.js +6 -3
  76. package/dist/esm/stores/routes/createRouteExecutionStore.js.map +1 -1
  77. package/dist/esm/stores/routes/useSetExecutableRoute.d.ts +1 -1
  78. package/dist/esm/types/widget.d.ts +3 -0
  79. package/dist/tsconfig.tsbuildinfo +1 -0
  80. package/package.json +14 -4
  81. package/src/components/AmountInput/AmountInputEndAdornment.tsx +46 -46
  82. package/src/components/Messages/WarningMessages.tsx +7 -2
  83. package/src/components/Step/Step.tsx +37 -31
  84. package/src/components/TransactionDetails.tsx +11 -12
  85. package/src/config/version.ts +1 -1
  86. package/src/cross/adapters/AcrossAdapter.ts +193 -0
  87. package/src/cross/adapters/BaseSwapAdapter.ts +173 -0
  88. package/src/cross/adapters/DebridgeAdapter.ts +375 -0
  89. package/src/cross/adapters/LifiAdapter.ts +213 -0
  90. package/src/cross/adapters/MayanAdapter.ts +179 -0
  91. package/src/cross/adapters/NearIntentsAdapter.ts +539 -0
  92. package/src/cross/adapters/OptimexAdapter.ts +273 -0
  93. package/src/cross/adapters/OrbiterAdapter.ts +270 -0
  94. package/src/cross/adapters/RelayAdapter.ts +248 -0
  95. package/src/cross/adapters/SymbiosisAdapter.ts +144 -0
  96. package/src/cross/adapters/XYFinanceAdapter.ts +213 -0
  97. package/src/cross/adapters/index.ts +9 -0
  98. package/src/cross/constants/index.ts +223 -0
  99. package/src/cross/crossChainQuote.ts +181 -0
  100. package/src/cross/factory.ts +145 -0
  101. package/src/cross/registry.ts +65 -0
  102. package/src/hooks/useGasSufficiencyBridge.ts +1 -3
  103. package/src/hooks/useRouteExecution.ts +2 -1
  104. package/src/hooks/useRoutes.ts +63 -44
  105. package/src/hooks/useSettingMonitor.ts +0 -1
  106. package/src/hooks/useTokenPrice.ts +5 -3
  107. package/src/services/ExecuteRoute.ts +184 -171
  108. package/src/stores/routes/createRouteExecutionStore.ts +13 -4
  109. package/src/types/widget.ts +3 -0
@@ -0,0 +1,171 @@
1
+ import { MAINNET_RELAY_API, convertViemChainToRelayChain, createClient, getClient, } from '@reservoir0x/relay-sdk';
2
+ import { formatUnits } from 'viem';
3
+ import { arbitrum, avalanche, base, berachain, blast, bsc, fantom, linea, mainnet, mantle, optimism, polygon, ronin, scroll, sonic, unichain, zksync, } from 'viem/chains';
4
+ import { CROSS_CHAIN_FEE_RECEIVER, CROSS_CHAIN_FEE_RECEIVER_SOLANA, MAINNET_NETWORKS, ZERO_ADDRESS, } from '../constants/index.js';
5
+ import { BaseSwapAdapter, NOT_SUPPORTED_CHAINS_PRICE_SERVICE, NonEvmChain, } from './BaseSwapAdapter.js';
6
+ const SolanaChainId = 792703809;
7
+ const solanaChain = {
8
+ id: SolanaChainId,
9
+ name: 'Solana',
10
+ displayName: 'Solana',
11
+ vmType: 'svm',
12
+ };
13
+ export class RelayAdapter extends BaseSwapAdapter {
14
+ constructor() {
15
+ super();
16
+ createClient({
17
+ baseApiUrl: MAINNET_RELAY_API,
18
+ source: 'openocean',
19
+ chains: [
20
+ arbitrum,
21
+ avalanche,
22
+ base,
23
+ berachain,
24
+ blast,
25
+ bsc,
26
+ fantom,
27
+ linea,
28
+ mainnet,
29
+ mantle,
30
+ optimism,
31
+ polygon,
32
+ scroll,
33
+ sonic,
34
+ zksync,
35
+ ronin,
36
+ unichain,
37
+ ]
38
+ .map(convertViemChainToRelayChain)
39
+ .concat(solanaChain),
40
+ });
41
+ }
42
+ getName() {
43
+ return 'Relay';
44
+ }
45
+ getIcon() {
46
+ return 'https://storage.googleapis.com/ks-setting-1d682dca/84e906bb-eaeb-45d3-a64c-2aa9c84eb3ea1747759080942.png';
47
+ }
48
+ getSupportedChains() {
49
+ return [NonEvmChain.Solana, ...MAINNET_NETWORKS];
50
+ }
51
+ getSupportedTokens(_sourceChain, _destChain) {
52
+ return [];
53
+ }
54
+ async getQuote(params) {
55
+ const evmFromToken = params.fromToken;
56
+ const evmToToken = params.toToken;
57
+ const currency = params.fromChain === 'solana'
58
+ ? params.fromToken.id
59
+ : evmFromToken.isNative
60
+ ? ZERO_ADDRESS
61
+ : evmFromToken.address;
62
+ const toCurrency = params.toChain === 'solana'
63
+ ? params.toToken.id
64
+ : evmToToken.isNative
65
+ ? ZERO_ADDRESS
66
+ : evmToToken.address;
67
+ const resp = await getClient().actions.getQuote({
68
+ chainId: params.fromChain === 'solana' ? SolanaChainId : +params.fromChain,
69
+ toChainId: params.toChain === 'solana' ? SolanaChainId : +params.toChain,
70
+ currency,
71
+ toCurrency,
72
+ amount: params.amount,
73
+ tradeType: 'EXACT_INPUT',
74
+ wallet: params.walletClient,
75
+ recipient: params.recipient,
76
+ user: params.sender,
77
+ options: {
78
+ appFees: [
79
+ {
80
+ recipient: params.fromChain === 'solana' ? CROSS_CHAIN_FEE_RECEIVER_SOLANA : CROSS_CHAIN_FEE_RECEIVER,
81
+ fee: params.feeBps.toString(),
82
+ },
83
+ ],
84
+ // includedSwapSources: ['open-ocean'],
85
+ },
86
+ });
87
+ const formattedOutputAmount = formatUnits(BigInt(resp.details?.currencyOut?.amount || '0'), params.toToken.decimals);
88
+ const formattedInputAmount = formatUnits(BigInt(params.amount), params.fromToken.decimals);
89
+ const inputUsd = NOT_SUPPORTED_CHAINS_PRICE_SERVICE.includes(params.fromChain)
90
+ ? Number(resp.details?.currencyIn?.amountUsd || 0)
91
+ : params.tokenInUsd * +formattedInputAmount;
92
+ const outputUsd = NOT_SUPPORTED_CHAINS_PRICE_SERVICE.includes(params.toChain)
93
+ ? Number(resp.details?.currencyOut?.amountUsd || 0)
94
+ : params.tokenOutUsd * +formattedOutputAmount;
95
+ if (params.walletClient) {
96
+ params.walletClient = {
97
+ account: {
98
+ address: params.sender,
99
+ },
100
+ };
101
+ }
102
+ const protocolFee = resp.fees?.relayer?.amountUsd || 0;
103
+ return {
104
+ quoteParams: params,
105
+ outputAmount: BigInt(resp.details?.currencyOut?.amount || '0'),
106
+ formattedOutputAmount,
107
+ inputUsd,
108
+ outputUsd,
109
+ priceImpact: !inputUsd || !outputUsd
110
+ ? Number.NaN
111
+ : ((inputUsd - outputUsd) * 100) / inputUsd,
112
+ //rate: Number(resp.details?.rate || 0),
113
+ rate: +formattedOutputAmount / +formattedInputAmount,
114
+ gasFeeUsd: Number(resp.fees?.gas?.amountUsd || 0),
115
+ timeEstimate: resp.details?.timeEstimate || 0,
116
+ // Relay dont need to approve, we send token to contract directly
117
+ contractAddress: ZERO_ADDRESS,
118
+ rawQuote: resp,
119
+ protocolFee: protocolFee,
120
+ platformFeePercent: (params.feeBps * 100) / 10000,
121
+ };
122
+ }
123
+ async executeSwap({ quote }, walletClient) {
124
+ return new Promise((resolve, reject) => {
125
+ getClient()
126
+ .actions.execute({
127
+ quote: quote.rawQuote,
128
+ wallet: walletClient,
129
+ onProgress: ({ currentStep }) => {
130
+ if (currentStep?.id === 'deposit' &&
131
+ currentStep.requestId &&
132
+ currentStep.kind === 'transaction') {
133
+ const txHash = currentStep.items?.[0]?.txHashes?.[0].txHash;
134
+ if (txHash) {
135
+ resolve({
136
+ sender: quote.quoteParams.sender,
137
+ sourceTxHash: txHash,
138
+ adapter: this.getName(),
139
+ id: currentStep.requestId,
140
+ sourceChain: quote.quoteParams.fromChain,
141
+ targetChain: quote.quoteParams.toChain,
142
+ inputAmount: quote.quoteParams.amount,
143
+ outputAmount: quote.outputAmount.toString(),
144
+ sourceToken: quote.quoteParams.fromToken,
145
+ targetToken: quote.quoteParams.toToken,
146
+ timestamp: new Date().getTime(),
147
+ });
148
+ }
149
+ }
150
+ },
151
+ })
152
+ .catch((e) => {
153
+ reject(e); // Make sure errors from execute are also caught
154
+ });
155
+ });
156
+ }
157
+ async getTransactionStatus(p) {
158
+ const res = await fetch(`https://api.relay.link/intents/status/v2?requestId=${p.id}`).then((r) => r.json());
159
+ return {
160
+ txHash: res.txHashes?.[0] || '',
161
+ status: res.status === 'success'
162
+ ? 'Success'
163
+ : res.status === 'refund'
164
+ ? 'Refunded'
165
+ : res.status === 'failure'
166
+ ? 'Failed'
167
+ : 'Processing',
168
+ };
169
+ }
170
+ }
171
+ //# sourceMappingURL=RelayAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelayAdapter.js","sourceRoot":"","sources":["../../../../src/cross/adapters/RelayAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { Currency } from '../constants/index.js';
2
+ import { WalletClient } from 'viem';
3
+ import { Quote } from '../registry.js';
4
+ import { BaseSwapAdapter, Chain, EvmQuoteParams, NormalizedQuote, NormalizedTxResponse, SwapStatus } from './BaseSwapAdapter.js';
5
+ export declare class SymbiosisAdapter extends BaseSwapAdapter {
6
+ constructor();
7
+ getName(): string;
8
+ getIcon(): string;
9
+ getSupportedChains(): Chain[];
10
+ getSupportedTokens(_sourceChain: Chain, _destChain: Chain): Currency[];
11
+ getQuote(params: EvmQuoteParams): Promise<NormalizedQuote>;
12
+ executeSwap({ quote }: Quote, walletClient: WalletClient): Promise<NormalizedTxResponse>;
13
+ getTransactionStatus(p: NormalizedTxResponse): Promise<SwapStatus>;
14
+ }
@@ -0,0 +1,120 @@
1
+ import { ChainId } from '@openocean.finance/widget-sdk';
2
+ import { formatUnits } from 'viem';
3
+ import { ZERO_ADDRESS } from '../constants/index.js';
4
+ import { BaseSwapAdapter, } from './BaseSwapAdapter.js';
5
+ const SYMBIOSIS_API = 'https://api.symbiosis.finance/crosschain/v1';
6
+ export class SymbiosisAdapter extends BaseSwapAdapter {
7
+ constructor() {
8
+ super();
9
+ }
10
+ getName() {
11
+ return 'Symbiosis';
12
+ }
13
+ getIcon() {
14
+ return 'https://app.symbiosis.finance/images/favicon-32x32.png';
15
+ }
16
+ getSupportedChains() {
17
+ return [
18
+ ChainId.MAINNET,
19
+ ChainId.BSCMAINNET,
20
+ ChainId.MATIC,
21
+ ChainId.AVAXMAINNET,
22
+ ChainId.ZKSYNC,
23
+ ChainId.ARBITRUM,
24
+ ChainId.OPTIMISM,
25
+ ChainId.LINEA,
26
+ ChainId.MANTLE,
27
+ ChainId.BASE,
28
+ ChainId.SCROLL,
29
+ ChainId.BLAST,
30
+ ChainId.SONIC,
31
+ ChainId.BERA,
32
+ ];
33
+ }
34
+ getSupportedTokens(_sourceChain, _destChain) {
35
+ return [];
36
+ }
37
+ async getQuote(params) {
38
+ const body = {
39
+ tokenAmountIn: {
40
+ address: params.fromToken.isNative ? '' : params.fromToken.address,
41
+ amount: params.amount,
42
+ chainId: params.fromChain,
43
+ decimals: params.fromToken.decimals,
44
+ },
45
+ tokenOut: {
46
+ chainId: params.toChain,
47
+ address: params.toToken.isNative ? '' : params.toToken.address,
48
+ symbol: params.toToken.symbol,
49
+ decimals: params.toToken.decimals,
50
+ },
51
+ from: params.sender,
52
+ to: params.recipient,
53
+ slippage: params.slippage,
54
+ };
55
+ const res = await fetch(`${SYMBIOSIS_API}/swap`, {
56
+ method: 'POST',
57
+ headers: {
58
+ 'Content-Type': 'application/json',
59
+ },
60
+ body: JSON.stringify(body),
61
+ }).then(r => r.json());
62
+ if (!res.tx)
63
+ throw new Error('No route found');
64
+ const formattedOutputAmount = formatUnits(BigInt(res.tokenAmountOut.amount), params.toToken.decimals);
65
+ const formattedInputAmount = formatUnits(BigInt(params.amount), params.fromToken.decimals);
66
+ const tokenInUsd = params.tokenInUsd;
67
+ const tokenOutUsd = params.tokenOutUsd;
68
+ const inputUsd = tokenInUsd * +formattedInputAmount;
69
+ const outputUsd = tokenOutUsd * +formattedOutputAmount;
70
+ return {
71
+ quoteParams: params,
72
+ outputAmount: BigInt(res.tokenAmountOut.amount),
73
+ formattedOutputAmount,
74
+ inputUsd,
75
+ outputUsd,
76
+ priceImpact: !inputUsd || !outputUsd ? NaN : ((inputUsd - outputUsd) * 100) / inputUsd,
77
+ rate: +formattedOutputAmount / +formattedInputAmount,
78
+ gasFeeUsd: 0,
79
+ timeEstimate: res.estimatedTime,
80
+ contractAddress: res.approveTo || ZERO_ADDRESS,
81
+ rawQuote: res,
82
+ // TODO: add Fee
83
+ protocolFee: 0,
84
+ platformFeePercent: 0,
85
+ };
86
+ }
87
+ async executeSwap({ quote }, walletClient) {
88
+ const account = walletClient.account?.address;
89
+ if (!account)
90
+ throw new Error('WalletClient account is not defined');
91
+ const tx = await walletClient.sendTransaction({
92
+ chain: undefined,
93
+ account,
94
+ to: quote.rawQuote.tx.to,
95
+ value: BigInt(quote.rawQuote.tx.value),
96
+ data: quote.rawQuote.tx.data,
97
+ });
98
+ return {
99
+ sender: quote.quoteParams.sender,
100
+ id: tx, // specific id for each provider
101
+ sourceTxHash: tx,
102
+ adapter: this.getName(),
103
+ sourceChain: quote.quoteParams.fromChain,
104
+ targetChain: quote.quoteParams.toChain,
105
+ inputAmount: quote.quoteParams.amount,
106
+ outputAmount: quote.outputAmount.toString(),
107
+ sourceToken: quote.quoteParams.fromToken,
108
+ targetToken: quote.quoteParams.toToken,
109
+ timestamp: new Date().getTime(),
110
+ };
111
+ }
112
+ async getTransactionStatus(p) {
113
+ const res = await fetch(`${SYMBIOSIS_API}/tx/${p.sourceChain}/${p.sourceTxHash}`).then(r => r.json());
114
+ return {
115
+ txHash: res?.tx?.hash || '',
116
+ status: res.status.code === 0 ? 'Success' : res.status.code === 3 ? 'Failed' : 'Processing',
117
+ };
118
+ }
119
+ }
120
+ //# sourceMappingURL=SymbiosisAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SymbiosisAdapter.js","sourceRoot":"","sources":["../../../../src/cross/adapters/SymbiosisAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { Currency } from '../constants/index.js';
2
+ import { WalletClient } from 'viem';
3
+ import { Quote } from '../registry.js';
4
+ import { BaseSwapAdapter, Chain, EvmQuoteParams, NormalizedQuote, NormalizedTxResponse, SwapStatus } from './BaseSwapAdapter.js';
5
+ export declare class XYFinanceAdapter extends BaseSwapAdapter {
6
+ constructor();
7
+ getName(): string;
8
+ getIcon(): string;
9
+ getSupportedChains(): Chain[];
10
+ getSupportedTokens(_sourceChain: Chain, _destChain: Chain): Currency[];
11
+ getQuote(params: EvmQuoteParams): Promise<NormalizedQuote>;
12
+ executeSwap({ quote }: Quote, walletClient: WalletClient): Promise<NormalizedTxResponse>;
13
+ getTransactionStatus(p: NormalizedTxResponse): Promise<SwapStatus>;
14
+ }
@@ -0,0 +1,177 @@
1
+ import { ChainId } from '@openocean.finance/widget-sdk';
2
+ import { getPublicClient } from '@wagmi/core';
3
+ import { formatUnits } from 'viem';
4
+ import { useConfig } from 'wagmi';
5
+ import { CROSS_CHAIN_FEE_RECEIVER, ETHER_ADDRESS } from '../constants/index.js';
6
+ import { BaseSwapAdapter, NOT_SUPPORTED_CHAINS_PRICE_SERVICE, } from './BaseSwapAdapter.js';
7
+ const XY_FINANCE_API = 'https://aggregator-api.xy.finance/v1';
8
+ export class XYFinanceAdapter extends BaseSwapAdapter {
9
+ constructor() {
10
+ super();
11
+ }
12
+ getName() {
13
+ return 'XYFinance';
14
+ }
15
+ getIcon() {
16
+ return 'https://xy.finance/img/favicon.ico';
17
+ }
18
+ getSupportedChains() {
19
+ return [
20
+ ChainId.MAINNET,
21
+ ChainId.BSCMAINNET,
22
+ ChainId.MATIC,
23
+ ChainId.FANTOM,
24
+ ChainId.AVAXMAINNET,
25
+ ChainId.ARBITRUM,
26
+ ChainId.OPTIMISM,
27
+ ChainId.ZKSYNC,
28
+ ChainId.LINEA,
29
+ ChainId.BASE,
30
+ ChainId.MANTLE,
31
+ ChainId.SCROLL,
32
+ ChainId.BLAST,
33
+ ChainId.BERA,
34
+ ChainId.SONIC,
35
+ ChainId.UNICHAIN,
36
+ ];
37
+ }
38
+ getSupportedTokens(_sourceChain, _destChain) {
39
+ return [];
40
+ }
41
+ async getQuote(params) {
42
+ const p = {
43
+ srcChainId: params.fromChain,
44
+ srcQuoteTokenAddress: params.fromToken.isNative ? ETHER_ADDRESS : params.fromToken.address,
45
+ srcQuoteTokenAmount: params.amount,
46
+ dstChainId: params.toChain,
47
+ dstQuoteTokenAddress: params.toToken.isNative ? ETHER_ADDRESS : params.toToken.address,
48
+ slippage: (params.slippage * 100) / 10000,
49
+ srcSwapProviders: 'KyberSwap V1 DexAggregator',
50
+ // bridgeProviders: 'yBridge',
51
+ affiliate: CROSS_CHAIN_FEE_RECEIVER,
52
+ //represents the fee you wish to collect. It is an integer between 0 and 100,000. In this range, 100,000 corresponds to 10%, 10,000 represents 1%, and so on in a similar fashion.
53
+ commissionRate: (params.feeBps / 10000) * 1000000,
54
+ };
55
+ // Convert the parameters object to URL query string
56
+ const queryParams = new URLSearchParams();
57
+ for (const [key, value] of Object.entries(p)) {
58
+ queryParams.append(key, String(value));
59
+ }
60
+ const resp = await fetch(`${XY_FINANCE_API}/quote?${queryParams.toString()}`).then(res => res.json());
61
+ const r = resp?.routes?.sort((a, b) => {
62
+ return +(BigInt(b.dstQuoteTokenAmount) - BigInt(a.dstQuoteTokenAmount)).toString();
63
+ })?.[0];
64
+ if (!r) {
65
+ throw new Error('No route found');
66
+ }
67
+ const formattedOutputAmount = formatUnits(BigInt(r.dstQuoteTokenAmount), params.toToken.decimals);
68
+ const formattedInputAmount = formatUnits(BigInt(params.amount), params.fromToken.decimals);
69
+ const tokenInUsd = params.tokenInUsd;
70
+ const tokenOutUsd = params.tokenOutUsd;
71
+ const inputUsd = NOT_SUPPORTED_CHAINS_PRICE_SERVICE.includes(params.fromChain)
72
+ ? Number(r.srcQuoteTokenUsdValue)
73
+ : tokenInUsd * +formattedInputAmount;
74
+ const outputUsd = NOT_SUPPORTED_CHAINS_PRICE_SERVICE.includes(params.toChain)
75
+ ? Number(r.dstQuoteTokenUsdValue)
76
+ : tokenOutUsd * +formattedOutputAmount;
77
+ return {
78
+ quoteParams: params,
79
+ outputAmount: BigInt(r.dstQuoteTokenAmount),
80
+ formattedOutputAmount,
81
+ inputUsd,
82
+ outputUsd,
83
+ priceImpact: !inputUsd || !outputUsd ? NaN : ((inputUsd - outputUsd) * 100) / inputUsd,
84
+ rate: +formattedOutputAmount / +formattedInputAmount,
85
+ gasFeeUsd: 0,
86
+ timeEstimate: r.estimatedTransferTime,
87
+ contractAddress: r.contractAddress,
88
+ rawQuote: r,
89
+ protocolFee: 0,
90
+ platformFeePercent: (params.feeBps * 100) / 10000,
91
+ };
92
+ }
93
+ async executeSwap({ quote }, walletClient) {
94
+ const account = walletClient.account?.address;
95
+ if (!account)
96
+ throw new Error('WalletClient account is not defined');
97
+ const fromToken = quote.quoteParams.fromToken;
98
+ const toToken = quote.quoteParams.toToken;
99
+ const buildSlippage = Math.floor(quote.quoteParams.slippage * 0.9) > 1
100
+ ? Math.floor(quote.quoteParams.slippage * 0.9)
101
+ : quote.quoteParams.slippage;
102
+ const p = {
103
+ srcChainId: quote.quoteParams.fromChain,
104
+ srcQuoteTokenAddress: fromToken.isNative ? ETHER_ADDRESS : fromToken.address,
105
+ srcQuoteTokenAmount: quote.quoteParams.amount,
106
+ dstChainId: quote.quoteParams.toChain,
107
+ dstQuoteTokenAddress: toToken.isNative ? ETHER_ADDRESS : toToken.address,
108
+ // slippage: quote.quoteParams.slippage,
109
+ slippage: (buildSlippage * 100) / 10000,
110
+ receiver: quote.quoteParams.recipient,
111
+ bridgeProvider: quote.rawQuote.bridgeDescription.provider,
112
+ srcBridgeTokenAddress: quote.rawQuote.bridgeDescription.srcBridgeTokenAddress,
113
+ dstBridgeTokenAddress: quote.rawQuote.bridgeDescription.dstBridgeTokenAddress,
114
+ affiliate: CROSS_CHAIN_FEE_RECEIVER,
115
+ //represents the fee you wish to collect. It is an integer between 0 and 100,000. In this range, 100,000 corresponds to 10%, 10,000 represents 1%, and so on in a similar fashion.
116
+ commissionRate: (quote.quoteParams.feeBps / 10000) * 1000000,
117
+ ...(quote.rawQuote.srcSwapDescription ? { srcSwapProvider: quote.rawQuote.srcSwapDescription.provider } : {}),
118
+ ...(quote.rawQuote.dstSwapDescription
119
+ ? {
120
+ dstSwapProvider: quote.rawQuote.dstSwapDescription?.provider,
121
+ }
122
+ : {}),
123
+ };
124
+ // Convert the parameters object to URL query string
125
+ const queryParams = new URLSearchParams();
126
+ for (const [key, value] of Object.entries(p)) {
127
+ queryParams.append(key, String(value));
128
+ }
129
+ const resp = await fetch(`${XY_FINANCE_API}/buildTx?${queryParams.toString()}`).then(res => res.json());
130
+ if (BigInt(resp.route.minReceiveAmount) < BigInt(quote.rawQuote.minReceiveAmount)) {
131
+ throw new Error('Rate has changed');
132
+ }
133
+ if (resp.tx) {
134
+ const tx = await walletClient.sendTransaction({
135
+ chain: undefined,
136
+ account,
137
+ to: resp.tx.to,
138
+ value: resp.tx.value,
139
+ data: resp.tx.data,
140
+ });
141
+ return {
142
+ sender: quote.quoteParams.sender,
143
+ id: tx, // specific id for each provider
144
+ sourceTxHash: tx,
145
+ adapter: this.getName(),
146
+ sourceChain: quote.quoteParams.fromChain,
147
+ targetChain: quote.quoteParams.toChain,
148
+ inputAmount: quote.quoteParams.amount,
149
+ outputAmount: quote.outputAmount.toString(),
150
+ sourceToken: fromToken,
151
+ targetToken: toToken,
152
+ timestamp: new Date().getTime(),
153
+ };
154
+ }
155
+ throw new Error('No transaction found');
156
+ }
157
+ async getTransactionStatus(p) {
158
+ const publicClient = getPublicClient(useConfig(), {
159
+ chainId: p.sourceChain,
160
+ });
161
+ const receipt = await publicClient?.getTransactionReceipt({
162
+ hash: p.id,
163
+ });
164
+ if (receipt.status === 'reverted') {
165
+ return {
166
+ txHash: '',
167
+ status: 'Failed',
168
+ };
169
+ }
170
+ const res = await fetch(`${XY_FINANCE_API}/crossChainStatus?srcChainId=${p.sourceChain}&srcTxHash=${p.id}`).then(r => r.json());
171
+ return {
172
+ txHash: res.tx || '',
173
+ status: res.status === 'Done' ? 'Success' : res.status === 'Refunded' ? 'Refunded' : 'Processing',
174
+ };
175
+ }
176
+ }
177
+ //# sourceMappingURL=XYFinanceAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"XYFinanceAdapter.js","sourceRoot":"","sources":["../../../../src/cross/adapters/XYFinanceAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './RelayAdapter.js';
2
+ export * from './MayanAdapter.js';
@@ -0,0 +1,10 @@
1
+ // export * from './BaseSwapAdapter.js'
2
+ // export * from './AcrossAdapter.js'
3
+ export * from './RelayAdapter.js';
4
+ // export * from './XYFinanceAdapter.js'
5
+ export * from './MayanAdapter.js';
6
+ // export * from './SymbiosisAdapter.js'
7
+ // export * from './DebridgeAdapter.js'
8
+ // export * from './LifiAdapter.js'
9
+ // export * from './KyberSwapAdapter.js'
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cross/adapters/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,qCAAqC;AACrC,cAAc,mBAAmB,CAAA;AACjC,wCAAwC;AACxC,cAAc,mBAAmB,CAAA;AACjC,wCAAwC;AACxC,uCAAuC;AACvC,mCAAmC;AACnC,wCAAwC"}