@openocean.finance/widget 1.0.28 → 1.0.29

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 (110) 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 +2 -5
  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 +50 -32
  66. package/dist/esm/hooks/useRoutes.js.map +1 -1
  67. package/dist/esm/hooks/useSettingMonitor.js +1 -0
  68. package/dist/esm/hooks/useSettingMonitor.js.map +1 -1
  69. package/dist/esm/hooks/useTokenAddressBalance.d.ts +1 -1
  70. package/dist/esm/hooks/useTokenPrice.js +4 -2
  71. package/dist/esm/hooks/useTokenPrice.js.map +1 -1
  72. package/dist/esm/hooks/useTokens.d.ts +1 -1
  73. package/dist/esm/services/ExecuteRoute.js +142 -124
  74. package/dist/esm/services/ExecuteRoute.js.map +1 -1
  75. package/dist/esm/stores/form/useFieldController.d.ts +1 -1
  76. package/dist/esm/stores/routes/createRouteExecutionStore.js +6 -3
  77. package/dist/esm/stores/routes/createRouteExecutionStore.js.map +1 -1
  78. package/dist/esm/stores/routes/useSetExecutableRoute.d.ts +1 -1
  79. package/dist/esm/types/widget.d.ts +3 -0
  80. package/dist/tsconfig.tsbuildinfo +1 -0
  81. package/package.json +14 -4
  82. package/src/components/AmountInput/AmountInputEndAdornment.tsx +46 -46
  83. package/src/components/Messages/WarningMessages.tsx +7 -2
  84. package/src/components/Step/Step.tsx +37 -31
  85. package/src/components/TransactionDetails.tsx +10 -11
  86. package/src/config/version.ts +1 -1
  87. package/src/cross/adapters/AcrossAdapter.ts +193 -0
  88. package/src/cross/adapters/BaseSwapAdapter.ts +173 -0
  89. package/src/cross/adapters/DebridgeAdapter.ts +375 -0
  90. package/src/cross/adapters/LifiAdapter.ts +213 -0
  91. package/src/cross/adapters/MayanAdapter.ts +179 -0
  92. package/src/cross/adapters/NearIntentsAdapter.ts +539 -0
  93. package/src/cross/adapters/OptimexAdapter.ts +273 -0
  94. package/src/cross/adapters/OrbiterAdapter.ts +270 -0
  95. package/src/cross/adapters/RelayAdapter.ts +248 -0
  96. package/src/cross/adapters/SymbiosisAdapter.ts +144 -0
  97. package/src/cross/adapters/XYFinanceAdapter.ts +213 -0
  98. package/src/cross/adapters/index.ts +9 -0
  99. package/src/cross/constants/index.ts +223 -0
  100. package/src/cross/crossChainQuote.ts +181 -0
  101. package/src/cross/factory.ts +145 -0
  102. package/src/cross/registry.ts +65 -0
  103. package/src/hooks/useGasSufficiencyBridge.ts +1 -3
  104. package/src/hooks/useRouteExecution.ts +2 -1
  105. package/src/hooks/useRoutes.ts +64 -43
  106. package/src/hooks/useSettingMonitor.ts +1 -1
  107. package/src/hooks/useTokenPrice.ts +5 -3
  108. package/src/services/ExecuteRoute.ts +184 -171
  109. package/src/stores/routes/createRouteExecutionStore.ts +13 -4
  110. package/src/types/widget.ts +3 -0
@@ -0,0 +1,179 @@
1
+ import {
2
+ type ChainName,
3
+ type Quote as MayanQuote,
4
+ addresses,
5
+ fetchQuote,
6
+ getSwapFromEvmTxPayload,
7
+ } from '@mayanfinance/swap-sdk'
8
+ import { ChainId } from '@openocean.finance/widget-sdk'
9
+ import { formatUnits, parseUnits } from 'viem'
10
+
11
+ import {
12
+ CROSS_CHAIN_FEE_RECEIVER,
13
+ type Currency,
14
+ ZERO_ADDRESS,
15
+ } from '../constants/index.js'
16
+
17
+ import type { WalletClient } from 'viem'
18
+ import type { Quote } from '../registry.js'
19
+ import {
20
+ BaseSwapAdapter,
21
+ type Chain,
22
+ type EvmQuoteParams,
23
+ type NormalizedQuote,
24
+ type NormalizedTxResponse,
25
+ type SwapStatus,
26
+ } from './BaseSwapAdapter.js'
27
+
28
+ const mappingChain: Record<string, ChainName> = {
29
+ [ChainId.ETH]: 'ethereum',
30
+ [ChainId.BSC]: 'bsc',
31
+ [ChainId.POL]: 'polygon',
32
+ [ChainId.AVA]: 'avalanche',
33
+ [ChainId.ARB]: 'arbitrum',
34
+ [ChainId.OPT]: 'optimism',
35
+ [ChainId.BAS]: 'base',
36
+ [ChainId.UNI]: 'unichain',
37
+ // [ChainId.LIN]: 'linea',
38
+ // [ChainId.HYE]: 'hypercore',
39
+ [ChainId.SOL]: 'solana',
40
+ [ChainId.SUI]: 'sui',
41
+ }
42
+
43
+ export class MayanAdapter extends BaseSwapAdapter {
44
+ constructor() {
45
+ super()
46
+ }
47
+
48
+ getName(): string {
49
+ return 'Mayan'
50
+ }
51
+ getIcon(): string {
52
+ return 'https://swap.mayan.finance/favicon.ico'
53
+ }
54
+ getSupportedChains(): Chain[] {
55
+ return [...Object.keys(mappingChain).map(Number)]
56
+ }
57
+
58
+ getSupportedTokens(_sourceChain: Chain, _destChain: Chain): Currency[] {
59
+ return []
60
+ }
61
+
62
+ async getQuote(params: EvmQuoteParams): Promise<NormalizedQuote> {
63
+ const quoteParams = {
64
+ amount: +formatUnits(BigInt(params.amount), params.fromToken.decimals),
65
+ fromToken: params.fromToken.isNative
66
+ ? ZERO_ADDRESS
67
+ : params.fromToken.address,
68
+ toToken: params.toToken.isNative ? ZERO_ADDRESS : params.toToken.address,
69
+ fromChain: mappingChain[params.fromChain],
70
+ toChain: mappingChain[params.toChain],
71
+ slippageBps: params.slippage,
72
+ referrer: CROSS_CHAIN_FEE_RECEIVER,
73
+ referrerBps: params.feeBps,
74
+ }
75
+ const quotes = await fetchQuote(quoteParams)
76
+ if (!quotes?.[0]) {
77
+ throw new Error('No quotes found')
78
+ }
79
+
80
+ const formattedInputAmount = formatUnits(
81
+ BigInt(params.amount),
82
+ params.fromToken.decimals
83
+ )
84
+
85
+ const tokenInUsd = params.tokenInUsd
86
+ const tokenOutUsd = params.tokenOutUsd
87
+ const inputUsd = tokenInUsd * +formattedInputAmount
88
+ const outputUsd = tokenOutUsd * quotes[0].expectedAmountOut
89
+
90
+ return {
91
+ quoteParams: params,
92
+
93
+ outputAmount: parseUnits(
94
+ quotes[0].expectedAmountOut.toString(),
95
+ params.toToken.decimals
96
+ ),
97
+
98
+ formattedOutputAmount: quotes[0].expectedAmountOut.toString(),
99
+
100
+ inputUsd,
101
+ outputUsd,
102
+ priceImpact:
103
+ !inputUsd || !outputUsd
104
+ ? Number.NaN
105
+ : ((inputUsd - outputUsd) * 100) / inputUsd,
106
+ rate: quotes[0].expectedAmountOut / +formattedInputAmount,
107
+ gasFeeUsd: 0,
108
+
109
+ timeEstimate: quotes[0].etaSeconds,
110
+ contractAddress: addresses.MAYAN_FORWARDER_CONTRACT,
111
+ rawQuote: quotes[0],
112
+
113
+ protocolFee: quotes[0].clientRelayerFeeSuccess,
114
+ platformFeePercent: (params.feeBps * 100) / 10_000,
115
+ }
116
+ }
117
+
118
+ async executeSwap(
119
+ { quote }: Quote,
120
+ walletClient: WalletClient
121
+ ): Promise<NormalizedTxResponse> {
122
+ const account = walletClient.account?.address
123
+ if (!account) throw new Error('WalletClient account is not defined')
124
+
125
+ const res = getSwapFromEvmTxPayload(
126
+ quote.rawQuote as MayanQuote,
127
+ account,
128
+ quote.quoteParams.recipient,
129
+ { evm: CROSS_CHAIN_FEE_RECEIVER },
130
+ account,
131
+ quote.quoteParams.fromChain,
132
+ null,
133
+ null
134
+ )
135
+
136
+ if (res.to && res.value && res.data) {
137
+ const tx = await walletClient.sendTransaction({
138
+ chain: undefined,
139
+ account,
140
+ to: res.to as `0x${string}`,
141
+ value: BigInt(res.value),
142
+ data: res.data as `0x${string}`,
143
+ })
144
+ return {
145
+ sender: quote.quoteParams.sender,
146
+ id: tx, // specific id for each provider
147
+ sourceTxHash: tx,
148
+ adapter: this.getName(),
149
+ sourceChain: quote.quoteParams.fromChain,
150
+ targetChain: quote.quoteParams.toChain,
151
+ inputAmount: quote.quoteParams.amount,
152
+ outputAmount: quote.outputAmount.toString(),
153
+ sourceToken: quote.quoteParams.fromToken,
154
+ targetToken: quote.quoteParams.toToken,
155
+ timestamp: new Date().getTime(),
156
+ }
157
+ }
158
+
159
+ throw new Error('Can not get Mayan data to swap')
160
+ }
161
+
162
+ async getTransactionStatus(p: NormalizedTxResponse): Promise<SwapStatus> {
163
+ const res = await fetch(
164
+ `https://explorer-api.mayan.finance/v3/swap/trx/${p.id}`
165
+ ).then((r) => r.json())
166
+
167
+ return {
168
+ txHash: res.fulfillTxHash || '',
169
+ status:
170
+ res.status === 'ORDER_SETTLED'
171
+ ? 'Success'
172
+ : res.status === 'ORDER_REFUNDED'
173
+ ? 'Refunded'
174
+ : res.status === 'ORDER_CANCELED'
175
+ ? 'Failed'
176
+ : 'Processing',
177
+ }
178
+ }
179
+ }