@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,14 @@
1
+ import { type Currency } from '../constants/index.js';
2
+ import type { WalletClient } from 'viem';
3
+ import type { Quote } from '../registry.js';
4
+ import { BaseSwapAdapter, type Chain, type EvmQuoteParams, type NormalizedQuote, type NormalizedTxResponse, type SwapStatus } from './BaseSwapAdapter.js';
5
+ export declare class MayanAdapter 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,119 @@
1
+ import { addresses, fetchQuote, getSwapFromEvmTxPayload, } from '@mayanfinance/swap-sdk';
2
+ import { ChainId } from '@openocean.finance/widget-sdk';
3
+ import { formatUnits, parseUnits } from 'viem';
4
+ import { CROSS_CHAIN_FEE_RECEIVER, ZERO_ADDRESS, } from '../constants/index.js';
5
+ import { BaseSwapAdapter, } from './BaseSwapAdapter.js';
6
+ const mappingChain = {
7
+ [ChainId.ETH]: 'ethereum',
8
+ [ChainId.BSC]: 'bsc',
9
+ [ChainId.POL]: 'polygon',
10
+ [ChainId.AVA]: 'avalanche',
11
+ [ChainId.ARB]: 'arbitrum',
12
+ [ChainId.OPT]: 'optimism',
13
+ [ChainId.BAS]: 'base',
14
+ [ChainId.UNI]: 'unichain',
15
+ // [ChainId.LIN]: 'linea',
16
+ // [ChainId.HYE]: 'hypercore',
17
+ [ChainId.SOL]: 'solana',
18
+ [ChainId.SUI]: 'sui',
19
+ };
20
+ export class MayanAdapter extends BaseSwapAdapter {
21
+ constructor() {
22
+ super();
23
+ }
24
+ getName() {
25
+ return 'Mayan';
26
+ }
27
+ getIcon() {
28
+ return 'https://swap.mayan.finance/favicon.ico';
29
+ }
30
+ getSupportedChains() {
31
+ return [...Object.keys(mappingChain).map(Number)];
32
+ }
33
+ getSupportedTokens(_sourceChain, _destChain) {
34
+ return [];
35
+ }
36
+ async getQuote(params) {
37
+ const quoteParams = {
38
+ amount: +formatUnits(BigInt(params.amount), params.fromToken.decimals),
39
+ fromToken: params.fromToken.isNative
40
+ ? ZERO_ADDRESS
41
+ : params.fromToken.address,
42
+ toToken: params.toToken.isNative ? ZERO_ADDRESS : params.toToken.address,
43
+ fromChain: mappingChain[params.fromChain],
44
+ toChain: mappingChain[params.toChain],
45
+ slippageBps: params.slippage,
46
+ referrer: CROSS_CHAIN_FEE_RECEIVER,
47
+ referrerBps: params.feeBps,
48
+ };
49
+ const quotes = await fetchQuote(quoteParams);
50
+ if (!quotes?.[0]) {
51
+ throw new Error('No quotes found');
52
+ }
53
+ const formattedInputAmount = formatUnits(BigInt(params.amount), params.fromToken.decimals);
54
+ const tokenInUsd = params.tokenInUsd;
55
+ const tokenOutUsd = params.tokenOutUsd;
56
+ const inputUsd = tokenInUsd * +formattedInputAmount;
57
+ const outputUsd = tokenOutUsd * quotes[0].expectedAmountOut;
58
+ return {
59
+ quoteParams: params,
60
+ outputAmount: parseUnits(quotes[0].expectedAmountOut.toString(), params.toToken.decimals),
61
+ formattedOutputAmount: quotes[0].expectedAmountOut.toString(),
62
+ inputUsd,
63
+ outputUsd,
64
+ priceImpact: !inputUsd || !outputUsd
65
+ ? Number.NaN
66
+ : ((inputUsd - outputUsd) * 100) / inputUsd,
67
+ rate: quotes[0].expectedAmountOut / +formattedInputAmount,
68
+ gasFeeUsd: 0,
69
+ timeEstimate: quotes[0].etaSeconds,
70
+ contractAddress: addresses.MAYAN_FORWARDER_CONTRACT,
71
+ rawQuote: quotes[0],
72
+ protocolFee: quotes[0].clientRelayerFeeSuccess,
73
+ platformFeePercent: (params.feeBps * 100) / 10000,
74
+ };
75
+ }
76
+ async executeSwap({ quote }, walletClient) {
77
+ const account = walletClient.account?.address;
78
+ if (!account)
79
+ throw new Error('WalletClient account is not defined');
80
+ const res = getSwapFromEvmTxPayload(quote.rawQuote, account, quote.quoteParams.recipient, { evm: CROSS_CHAIN_FEE_RECEIVER }, account, quote.quoteParams.fromChain, null, null);
81
+ if (res.to && res.value && res.data) {
82
+ const tx = await walletClient.sendTransaction({
83
+ chain: undefined,
84
+ account,
85
+ to: res.to,
86
+ value: BigInt(res.value),
87
+ data: res.data,
88
+ });
89
+ return {
90
+ sender: quote.quoteParams.sender,
91
+ id: tx, // specific id for each provider
92
+ sourceTxHash: tx,
93
+ adapter: this.getName(),
94
+ sourceChain: quote.quoteParams.fromChain,
95
+ targetChain: quote.quoteParams.toChain,
96
+ inputAmount: quote.quoteParams.amount,
97
+ outputAmount: quote.outputAmount.toString(),
98
+ sourceToken: quote.quoteParams.fromToken,
99
+ targetToken: quote.quoteParams.toToken,
100
+ timestamp: new Date().getTime(),
101
+ };
102
+ }
103
+ throw new Error('Can not get Mayan data to swap');
104
+ }
105
+ async getTransactionStatus(p) {
106
+ const res = await fetch(`https://explorer-api.mayan.finance/v3/swap/trx/${p.id}`).then((r) => r.json());
107
+ return {
108
+ txHash: res.fulfillTxHash || '',
109
+ status: res.status === 'ORDER_SETTLED'
110
+ ? 'Success'
111
+ : res.status === 'ORDER_REFUNDED'
112
+ ? 'Refunded'
113
+ : res.status === 'ORDER_CANCELED'
114
+ ? 'Failed'
115
+ : 'Processing',
116
+ };
117
+ }
118
+ }
119
+ //# sourceMappingURL=MayanAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MayanAdapter.js","sourceRoot":"","sources":["../../../../src/cross/adapters/MayanAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,SAAS,EACT,UAAU,EACV,uBAAuB,GACxB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AAE9C,OAAO,EACL,wBAAwB,EAExB,YAAY,GACb,MAAM,uBAAuB,CAAA;AAI9B,OAAO,EACL,eAAe,GAMhB,MAAM,sBAAsB,CAAA;AAE7B,MAAM,YAAY,GAA8B;IAC9C,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,UAAU;IACzB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK;IACpB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,SAAS;IACxB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,WAAW;IAC1B,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,UAAU;IACzB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,UAAU;IACzB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM;IACrB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,UAAU;IACzB,0BAA0B;IAC1B,8BAA8B;IAC9B,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,QAAQ;IACvB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK;CACrB,CAAA;AAED,MAAM,OAAO,YAAa,SAAQ,eAAe;IAC/C;QACE,KAAK,EAAE,CAAA;IACT,CAAC;IAED,OAAO;QACL,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,OAAO;QACL,OAAO,wCAAwC,CAAA;IACjD,CAAC;IACD,kBAAkB;QAChB,OAAO,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IACnD,CAAC;IAED,kBAAkB,CAAC,YAAmB,EAAE,UAAiB;QACvD,OAAO,EAAE,CAAA;IACX,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAsB;QACnC,MAAM,WAAW,GAAG;YAClB,MAAM,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;YACtE,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ;gBAClC,CAAC,CAAC,YAAY;gBACd,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO;YAC5B,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO;YACxE,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC;YACzC,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC;YACrC,WAAW,EAAE,MAAM,CAAC,QAAQ;YAC5B,QAAQ,EAAE,wBAAwB;YAClC,WAAW,EAAE,MAAM,CAAC,MAAM;SAC3B,CAAA;QACD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,CAAA;QAC5C,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;QACpC,CAAC;QAED,MAAM,oBAAoB,GAAG,WAAW,CACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EACrB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAC1B,CAAA;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;QACpC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAA;QACtC,MAAM,QAAQ,GAAG,UAAU,GAAG,CAAC,oBAAoB,CAAA;QACnD,MAAM,SAAS,GAAG,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAA;QAE3D,OAAO;YACL,WAAW,EAAE,MAAM;YAEnB,YAAY,EAAE,UAAU,CACtB,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,EAAE,EACtC,MAAM,CAAC,OAAO,CAAC,QAAQ,CACxB;YAED,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,EAAE;YAE7D,QAAQ;YACR,SAAS;YACT,WAAW,EACT,CAAC,QAAQ,IAAI,CAAC,SAAS;gBACrB,CAAC,CAAC,MAAM,CAAC,GAAG;gBACZ,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC,GAAG,QAAQ;YAC/C,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,GAAG,CAAC,oBAAoB;YACzD,SAAS,EAAE,CAAC;YAEZ,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU;YAClC,eAAe,EAAE,SAAS,CAAC,wBAAwB;YACnD,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;YAEnB,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,uBAAuB;YAC9C,kBAAkB,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,KAAM;SACnD,CAAA;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CACf,EAAE,KAAK,EAAS,EAChB,YAA0B;QAE1B,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAA;QAC7C,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;QAEpE,MAAM,GAAG,GAAG,uBAAuB,CACjC,KAAK,CAAC,QAAsB,EAC5B,OAAO,EACP,KAAK,CAAC,WAAW,CAAC,SAAS,EAC3B,EAAE,GAAG,EAAE,wBAAwB,EAAE,EACjC,OAAO,EACP,KAAK,CAAC,WAAW,CAAC,SAAS,EAC3B,IAAI,EACJ,IAAI,CACL,CAAA;QAED,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,eAAe,CAAC;gBAC5C,KAAK,EAAE,SAAS;gBAChB,OAAO;gBACP,EAAE,EAAE,GAAG,CAAC,EAAmB;gBAC3B,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;gBACxB,IAAI,EAAE,GAAG,CAAC,IAAqB;aAChC,CAAC,CAAA;YACF,OAAO;gBACL,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM;gBAChC,EAAE,EAAE,EAAE,EAAE,gCAAgC;gBACxC,YAAY,EAAE,EAAE;gBAChB,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;gBACvB,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,SAAS;gBACxC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,OAAO;gBACtC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM;gBACrC,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE;gBAC3C,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,SAAS;gBACxC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,OAAO;gBACtC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;aAChC,CAAA;QACH,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;IACnD,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,CAAuB;QAChD,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,kDAAkD,CAAC,CAAC,EAAE,EAAE,CACzD,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;QAEvB,OAAO;YACL,MAAM,EAAE,GAAG,CAAC,aAAa,IAAI,EAAE;YAC/B,MAAM,EACJ,GAAG,CAAC,MAAM,KAAK,eAAe;gBAC5B,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,gBAAgB;oBAC/B,CAAC,CAAC,UAAU;oBACZ,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,gBAAgB;wBAC/B,CAAC,CAAC,QAAQ;wBACV,CAAC,CAAC,YAAY;SACvB,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ import { Currency } from '../constants/index.js';
2
+ import { useWalletSelector } from '@near-wallet-selector/react-hook';
3
+ import { WalletAdapterProps } from '@solana/wallet-adapter-base';
4
+ import { Connection } from '@solana/web3.js';
5
+ import { WalletClient } from 'viem';
6
+ import { Quote } from '../registry.js';
7
+ import { BaseSwapAdapter, Chain, NearQuoteParams, NormalizedQuote, NormalizedTxResponse, SwapStatus } from './BaseSwapAdapter.js';
8
+ export declare const MappingChainIdToBlockChain: Record<string, string>;
9
+ export declare class NearIntentsAdapter extends BaseSwapAdapter {
10
+ constructor();
11
+ getName(): string;
12
+ getIcon(): string;
13
+ getSupportedChains(): Chain[];
14
+ getSupportedTokens(_sourceChain: Chain, _destChain: Chain): Currency[];
15
+ getQuote(params: NearQuoteParams): Promise<NormalizedQuote>;
16
+ executeSwap({ quote }: Quote, walletClient: WalletClient, nearWallet?: ReturnType<typeof useWalletSelector>, sendBtcFn?: (params: {
17
+ recipient: string;
18
+ amount: string | number;
19
+ }) => Promise<string>, sendSolanaFn?: WalletAdapterProps['sendTransaction'], solanaConnection?: Connection): Promise<NormalizedTxResponse>;
20
+ getTransactionStatus(p: NormalizedTxResponse): Promise<SwapStatus>;
21
+ }
@@ -0,0 +1,425 @@
1
+ import { OneClickService, OpenAPI, QuoteRequest } from '@defuse-protocol/one-click-sdk-typescript';
2
+ import { ChainId } from '@openocean.finance/widget-sdk';
3
+ import { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID, createAssociatedTokenAccountInstruction, createTransferInstruction, getAccount, getAssociatedTokenAddress, } from '@solana/spl-token';
4
+ import { PublicKey, SystemProgram, Transaction } from '@solana/web3.js';
5
+ import { formatUnits } from 'viem';
6
+ import { BTC_DEFAULT_RECEIVER, CROSS_CHAIN_FEE_RECEIVER, SOLANA_NATIVE, ZERO_ADDRESS } from '../constants/index.js';
7
+ import { BaseSwapAdapter, NonEvmChain, } from './BaseSwapAdapter.js';
8
+ export const MappingChainIdToBlockChain = {
9
+ [NonEvmChain.Bitcoin]: 'btc',
10
+ [NonEvmChain.Solana]: 'sol',
11
+ [ChainId.MAINNET]: 'eth',
12
+ [ChainId.ARBITRUM]: 'arb',
13
+ [ChainId.BSCMAINNET]: 'bsc',
14
+ [ChainId.BERA]: 'bera',
15
+ [ChainId.MATIC]: 'pol',
16
+ [ChainId.BASE]: 'base',
17
+ };
18
+ const erc20Abi = [
19
+ {
20
+ inputs: [
21
+ { type: 'address', name: 'recipient' },
22
+ { type: 'uint256', name: 'amount' },
23
+ ],
24
+ name: 'transfer',
25
+ outputs: [{ type: 'bool', name: '' }],
26
+ stateMutability: 'nonpayable',
27
+ type: 'function',
28
+ },
29
+ ];
30
+ export class NearIntentsAdapter extends BaseSwapAdapter {
31
+ constructor() {
32
+ super();
33
+ // Initialize the API client
34
+ OpenAPI.BASE = 'https://1click.chaindefuser.com';
35
+ OpenAPI.TOKEN =
36
+ 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjIwMjUtMDQtMjMtdjEifQ.eyJ2IjoxLCJrZXlfdHlwZSI6ImRpc3RyaWJ1dGlvbl9jaGFubmVsIiwicGFydG5lcl9pZCI6Imt5YmVyIiwiaWF0IjoxNzQ5MDQyNDk1LCJleHAiOjE3ODA1Nzg0OTV9.sC5g1Jn4BRIGXkIRmN4dnK2BzbIglLOVuOmnrTItGaAP-QU69lbyYs2QGPE-5c7dRC9Cc3s0ktO50W9VXiqQEefu-VCQTKtjsfIwfAm7wDC1XKUT7lbQL2uODqXxR6yg5d8ENu6p8F2t86_T8IEpid6b1yBidKladbs9tI2QebSp3Sn6bjtsnpD-9W2dsW0Gd6PUkpZizb--YqkmdPQ8Eu85fIxtDO64qbp0Xp6NY8caFEA1yakbwaMEUWXnNX6PB_elfH28sF0cMbqlyAGiHe98J8tZ47kga6e6yZP4UHoak3Y_eRNuX_CpwoXfULx1t8YLoSJEQuP9JsPIoyw5dA';
37
+ }
38
+ getName() {
39
+ return 'Near Intents';
40
+ }
41
+ getIcon() {
42
+ return 'https://storage.googleapis.com/ks-setting-1d682dca/000c677f-2ebc-44cc-8d76-e4c6d07627631744962669170.png';
43
+ }
44
+ getSupportedChains() {
45
+ return [
46
+ NonEvmChain.Solana,
47
+ NonEvmChain.Bitcoin,
48
+ NonEvmChain.Near,
49
+ ...Object.keys(MappingChainIdToBlockChain).map(Number),
50
+ ];
51
+ }
52
+ getSupportedTokens(_sourceChain, _destChain) {
53
+ return [];
54
+ }
55
+ async getQuote(params) {
56
+ const deadline = new Date();
57
+ // 1 hour for Bitcoin, 20 minutes for other chains
58
+ deadline.setSeconds(deadline.getSeconds() + (params.fromChain === NonEvmChain.Bitcoin ? 60 * 60 : 60 * 20));
59
+ const fromAssetId = 'assetId' in params.fromToken
60
+ ? params.fromToken.assetId === 'near'
61
+ ? 'nep141:wrap.near'
62
+ : params.fromToken.assetId
63
+ : params.nearTokens.find(token => {
64
+ const blockchain = MappingChainIdToBlockChain[params.fromChain];
65
+ if (params.fromChain === 'solana')
66
+ return params.fromToken.id === SOLANA_NATIVE
67
+ ? token.symbol === 'SOL' && token.blockchain === 'sol'
68
+ : token.blockchain === blockchain && token.contractAddress === params.fromToken.id;
69
+ return (token.blockchain === blockchain &&
70
+ (params.fromToken.isNative
71
+ ? token.symbol.toLowerCase() === params.fromToken.symbol?.toLowerCase() &&
72
+ token.assetId.includes('omft')
73
+ : token.contractAddress?.toLowerCase() === params.fromToken.wrapped?.address.toLowerCase()));
74
+ })?.assetId;
75
+ const toAssetId = 'assetId' in params.toToken
76
+ ? params.toToken.assetId === 'near'
77
+ ? 'nep141:wrap.near'
78
+ : params.toToken.assetId
79
+ : params.nearTokens.find(token => {
80
+ const blockchain = MappingChainIdToBlockChain[params.toChain];
81
+ if (params.toChain === 'solana')
82
+ return params.toToken.id === SOLANA_NATIVE
83
+ ? token.symbol === 'SOL' && token.blockchain === 'sol'
84
+ : token.blockchain === blockchain && token.contractAddress === params.toToken.id;
85
+ return (token.blockchain === blockchain &&
86
+ (params.toToken.isNative
87
+ ? token.symbol.toLowerCase() === params.toToken.symbol?.toLowerCase() && token.assetId.includes('omft')
88
+ : token.contractAddress?.toLowerCase() === params.toToken.wrapped?.address.toLowerCase()));
89
+ })?.assetId;
90
+ if (!fromAssetId || !toAssetId) {
91
+ throw new Error('not supported tokens');
92
+ }
93
+ // Create a quote request
94
+ const quoteRequest = {
95
+ dry: true,
96
+ deadline: deadline.toISOString(),
97
+ slippageTolerance: params.slippage,
98
+ swapType: QuoteRequest.swapType.EXACT_INPUT,
99
+ originAsset: fromAssetId,
100
+ depositType: QuoteRequest.depositType.ORIGIN_CHAIN,
101
+ destinationAsset: toAssetId,
102
+ amount: params.amount,
103
+ refundTo: params.sender,
104
+ refundType: QuoteRequest.refundType.ORIGIN_CHAIN,
105
+ referral: 'kyberswap',
106
+ recipient: params.recipient,
107
+ recipientType: QuoteRequest.recipientType.DESTINATION_CHAIN,
108
+ appFees: [
109
+ {
110
+ recipient: CROSS_CHAIN_FEE_RECEIVER.toLowerCase(),
111
+ fee: params.feeBps,
112
+ },
113
+ ],
114
+ };
115
+ const quote = await OneClickService.getQuote(quoteRequest);
116
+ const formattedInputAmount = formatUnits(BigInt(params.amount), params.fromToken.decimals);
117
+ const formattedOutputAmount = formatUnits(BigInt(quote.quote.amountOut), params.toToken.decimals);
118
+ const inputUsd = +quote.quote.amountInUsd;
119
+ const outputUsd = +quote.quote.amountOutUsd;
120
+ return {
121
+ quoteParams: params,
122
+ outputAmount: BigInt(quote.quote.amountOut),
123
+ formattedOutputAmount,
124
+ inputUsd: +quote.quote.amountInUsd,
125
+ outputUsd: +quote.quote.amountOutUsd,
126
+ priceImpact: !inputUsd || !outputUsd ? NaN : ((inputUsd - outputUsd) * 100) / inputUsd,
127
+ rate: +formattedOutputAmount / +formattedInputAmount,
128
+ gasFeeUsd: 0,
129
+ timeEstimate: quote.quote.timeEstimate || 0,
130
+ // Near intent dont need to approve, we send token to contract directly
131
+ contractAddress: ZERO_ADDRESS,
132
+ rawQuote: quote,
133
+ protocolFee: 0,
134
+ platformFeePercent: (params.feeBps * 100) / 10000,
135
+ };
136
+ }
137
+ async executeSwap({ quote }, walletClient, nearWallet, sendBtcFn, sendSolanaFn, solanaConnection) {
138
+ const quoteParams = {
139
+ ...quote.rawQuote.quoteRequest,
140
+ dry: false,
141
+ // adjust slippage to 0,01% to accept the rate change
142
+ slippageTolerance: Math.floor(quote.quoteParams.slippage * 0.9) > 1
143
+ ? Math.floor(quote.quoteParams.slippage * 0.9)
144
+ : quote.quoteParams.slippage,
145
+ };
146
+ delete quoteParams.correlationId;
147
+ const refreshedQuote = await OneClickService.getQuote(quoteParams);
148
+ const depositAddress = refreshedQuote?.quote?.depositAddress;
149
+ if (!depositAddress) {
150
+ throw new Error('Deposit address not found');
151
+ }
152
+ if (refreshedQuote.quoteRequest.recipient === ZERO_ADDRESS ||
153
+ refreshedQuote.quoteRequest.refundTo === ZERO_ADDRESS ||
154
+ refreshedQuote.quoteRequest.recipient.toLowerCase() === BTC_DEFAULT_RECEIVER ||
155
+ refreshedQuote.quoteRequest.refundTo.toLowerCase() === BTC_DEFAULT_RECEIVER) {
156
+ throw new Error('Near Intent recipient or refundTo is ZERO ADDRESS');
157
+ }
158
+ if (BigInt(refreshedQuote.quote.minAmountOut) < BigInt(quote.rawQuote.quote.minAmountOut)) {
159
+ throw new Error('Quote amount out is less than expected');
160
+ }
161
+ const params = {
162
+ sender: quote.quoteParams.sender,
163
+ id: depositAddress, // specific id for each provider
164
+ adapter: this.getName(),
165
+ sourceChain: quote.quoteParams.fromChain,
166
+ targetChain: quote.quoteParams.toChain,
167
+ inputAmount: quote.quoteParams.amount,
168
+ outputAmount: quote.outputAmount.toString(),
169
+ sourceToken: quote.quoteParams.fromToken,
170
+ targetToken: quote.quoteParams.toToken,
171
+ timestamp: new Date().getTime(),
172
+ };
173
+ if (quote.quoteParams.fromChain === NonEvmChain.Solana) {
174
+ return new Promise(async (resolve, reject) => {
175
+ if (!sendSolanaFn || !solanaConnection) {
176
+ reject('Not connected');
177
+ return;
178
+ }
179
+ const waitForConfirmation = async (txId) => {
180
+ try {
181
+ const latestBlockhash = await solanaConnection.getLatestBlockhash();
182
+ // Wait for confirmation with timeout
183
+ const confirmation = await Promise.race([
184
+ solanaConnection.confirmTransaction({
185
+ signature: txId,
186
+ blockhash: latestBlockhash.blockhash,
187
+ lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,
188
+ }, 'confirmed'),
189
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Transaction confirmation timeout')), 60000)),
190
+ ]);
191
+ const confirmationResult = confirmation;
192
+ if (confirmationResult.value.err) {
193
+ throw new Error(`Transaction failed: ${JSON.stringify(confirmationResult.value.err)}`);
194
+ }
195
+ console.log('Transaction confirmed successfully!');
196
+ }
197
+ catch (confirmError) {
198
+ console.error('Transaction confirmation failed:', confirmError);
199
+ // Check if transaction actually succeeded despite timeout
200
+ const txStatus = await solanaConnection.getSignatureStatus(txId);
201
+ if (txStatus?.value?.confirmationStatus !== 'confirmed') {
202
+ throw new Error(`Transaction was not confirmed: ${confirmError.message}`);
203
+ }
204
+ }
205
+ };
206
+ const fromPubkey = new PublicKey(quote.quoteParams.sender);
207
+ const recipientPubkey = new PublicKey(depositAddress);
208
+ const fromToken = quote.quoteParams.fromToken;
209
+ // const latestBlockhash = await solanaConnection.getLatestBlockhash('confirmed')
210
+ if (fromToken.id === SOLANA_NATIVE) {
211
+ const transaction = new Transaction().add(SystemProgram.transfer({
212
+ fromPubkey: fromPubkey,
213
+ toPubkey: recipientPubkey,
214
+ lamports: BigInt(quote.quoteParams.amount),
215
+ }));
216
+ try {
217
+ const signature = await sendSolanaFn(transaction, solanaConnection);
218
+ await waitForConfirmation(signature);
219
+ resolve({
220
+ ...params,
221
+ sourceTxHash: signature,
222
+ });
223
+ }
224
+ catch (error) {
225
+ reject(error);
226
+ }
227
+ }
228
+ else {
229
+ const mintPubkey = new PublicKey(fromToken.id);
230
+ // Get associated token addresses
231
+ const senderTokenAddress = await getAssociatedTokenAddress(mintPubkey, fromPubkey, false, TOKEN_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID);
232
+ const recipientTokenAddress = await getAssociatedTokenAddress(mintPubkey, recipientPubkey, false, TOKEN_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID);
233
+ const transaction = new Transaction();
234
+ try {
235
+ // Check if recipient's token account exists
236
+ await getAccount(solanaConnection, recipientTokenAddress);
237
+ }
238
+ catch (err) {
239
+ // Account doesn't exist, create it
240
+ console.log('Creating recipient token account...');
241
+ transaction.add(createAssociatedTokenAccountInstruction(fromPubkey, // payer
242
+ recipientTokenAddress, // associated token account
243
+ recipientPubkey, // owner
244
+ mintPubkey, // mint
245
+ TOKEN_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID));
246
+ }
247
+ // Add transfer instruction
248
+ transaction.add(createTransferInstruction(senderTokenAddress, // source
249
+ recipientTokenAddress, // destination
250
+ fromPubkey, // owner
251
+ BigInt(quote.quoteParams.amount), [], TOKEN_PROGRAM_ID));
252
+ try {
253
+ const signature = await sendSolanaFn(transaction, solanaConnection);
254
+ await waitForConfirmation(signature);
255
+ resolve({
256
+ ...params,
257
+ sourceTxHash: signature,
258
+ });
259
+ }
260
+ catch (error) {
261
+ reject(error);
262
+ }
263
+ }
264
+ return;
265
+ });
266
+ }
267
+ if (quote.quoteParams.fromChain === NonEvmChain.Bitcoin) {
268
+ return new Promise(async (resolve, reject) => {
269
+ if (!sendBtcFn) {
270
+ reject('Not connected');
271
+ return;
272
+ }
273
+ try {
274
+ const tx = await sendBtcFn({
275
+ recipient: depositAddress,
276
+ amount: quote.quoteParams.amount,
277
+ });
278
+ await OneClickService.submitDepositTx({
279
+ txHash: tx,
280
+ depositAddress,
281
+ }).catch(e => {
282
+ console.log('NearIntents submitDepositTx failed', e);
283
+ });
284
+ resolve({
285
+ ...params,
286
+ sourceTxHash: tx,
287
+ });
288
+ }
289
+ catch (e) {
290
+ console.log(e);
291
+ reject(e);
292
+ return;
293
+ }
294
+ });
295
+ }
296
+ if (quote.quoteParams.fromChain === NonEvmChain.Near) {
297
+ return new Promise(async (resolve, reject) => {
298
+ if (!nearWallet || !nearWallet.signedAccountId) {
299
+ reject('Not connected');
300
+ return;
301
+ }
302
+ const isNative = quote.quoteParams.fromToken.assetId === 'near';
303
+ const transactions = [];
304
+ if (!isNative)
305
+ transactions.push({
306
+ signerId: nearWallet.signedAccountId,
307
+ receiverId: quote.quoteParams.fromToken.contractAddress,
308
+ actions: [
309
+ {
310
+ type: 'FunctionCall',
311
+ params: {
312
+ methodName: 'storage_deposit',
313
+ args: { account_id: depositAddress, registration_only: true },
314
+ gas: '30000000000000',
315
+ deposit: '1250000000000000000000', // 0.00125 NEAR
316
+ },
317
+ },
318
+ ],
319
+ });
320
+ transactions.push({
321
+ signerId: nearWallet.signedAccountId,
322
+ receiverId: isNative ? depositAddress : quote.quoteParams.fromToken.contractAddress,
323
+ actions: [
324
+ isNative
325
+ ? {
326
+ type: 'Transfer',
327
+ params: {
328
+ deposit: quote.quoteParams.amount,
329
+ },
330
+ }
331
+ : {
332
+ type: 'FunctionCall',
333
+ params: {
334
+ methodName: 'ft_transfer',
335
+ args: {
336
+ receiver_id: depositAddress,
337
+ amount: quote.quoteParams.amount,
338
+ },
339
+ gas: '30000000000000',
340
+ deposit: '1',
341
+ },
342
+ },
343
+ ],
344
+ });
345
+ // My near wallet is redirect to wallet website -> need store to process later
346
+ if (nearWallet?.wallet?.id === 'my-near-wallet')
347
+ localStorage.setItem('cross-chain-swap-my-near-wallet-tx', JSON.stringify({
348
+ ...params,
349
+ sourceTxHash: depositAddress,
350
+ }));
351
+ await nearWallet
352
+ .signAndSendTransactions({
353
+ transactions,
354
+ })
355
+ .catch(e => {
356
+ console.log('NearIntents signAndSendTransactions failed', e);
357
+ if (nearWallet?.wallet?.id === 'my-near-wallet')
358
+ reject();
359
+ else
360
+ reject(e);
361
+ });
362
+ resolve({
363
+ ...params,
364
+ sourceTxHash: depositAddress,
365
+ });
366
+ });
367
+ }
368
+ return new Promise(async (resolve, reject) => {
369
+ try {
370
+ if (!walletClient || !walletClient.account)
371
+ reject('Not connected');
372
+ if (quote.quoteParams.sender === ZERO_ADDRESS || quote.quoteParams.recipient === ZERO_ADDRESS) {
373
+ reject('Near Intent refundTo or recipient is ZERO ADDRESS');
374
+ return;
375
+ }
376
+ const account = walletClient.account?.address;
377
+ const fromToken = quote.quoteParams.fromToken;
378
+ const hash = await (fromToken.isNative
379
+ ? walletClient.sendTransaction({
380
+ to: depositAddress,
381
+ value: BigInt(quote.quoteParams.amount),
382
+ chain: undefined,
383
+ account,
384
+ })
385
+ : walletClient.writeContract({
386
+ address: ('contractAddress' in fromToken
387
+ ? fromToken.contractAddress
388
+ : fromToken.wrapped.address),
389
+ abi: erc20Abi,
390
+ functionName: 'transfer',
391
+ args: [depositAddress, quote.quoteParams.amount],
392
+ chain: undefined,
393
+ account,
394
+ }));
395
+ await OneClickService.submitDepositTx({
396
+ txHash: hash,
397
+ depositAddress,
398
+ }).catch(e => {
399
+ console.log('NearIntents submitDepositTx failed', e);
400
+ });
401
+ resolve({
402
+ ...params,
403
+ sourceTxHash: hash,
404
+ });
405
+ }
406
+ catch (e) {
407
+ reject(e);
408
+ }
409
+ });
410
+ }
411
+ async getTransactionStatus(p) {
412
+ const res = await OneClickService.getExecutionStatus(p.id);
413
+ return {
414
+ txHash: res.swapDetails?.destinationChainTxHashes[0]?.hash || '',
415
+ status: res.status === 'SUCCESS'
416
+ ? 'Success'
417
+ : res.status === 'FAILED'
418
+ ? 'Failed'
419
+ : res.status === 'REFUNDED'
420
+ ? 'Refunded'
421
+ : 'Processing',
422
+ };
423
+ }
424
+ }
425
+ //# sourceMappingURL=NearIntentsAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NearIntentsAdapter.js","sourceRoot":"","sources":["../../../../src/cross/adapters/NearIntentsAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { Currency } from '../constants/index.js';
2
+ import { WalletClient } from 'viem';
3
+ import { Quote } from '../registry.js';
4
+ import { BaseSwapAdapter, Chain, NormalizedQuote, NormalizedTxResponse, QuoteParams, SwapStatus } from './BaseSwapAdapter.js';
5
+ export declare class OptimexAdapter extends BaseSwapAdapter {
6
+ private tokens;
7
+ constructor();
8
+ private getTokens;
9
+ getName(): string;
10
+ getIcon(): string;
11
+ getSupportedChains(): Chain[];
12
+ getSupportedTokens(_sourceChain: Chain, _destChain: Chain): Currency[];
13
+ getQuote(params: QuoteParams): Promise<NormalizedQuote>;
14
+ executeSwap({ quote }: Quote, walletClient: WalletClient, _nearWallet: any, sendBtcFn?: (params: {
15
+ recipient: string;
16
+ amount: string | number;
17
+ }) => Promise<string>): Promise<NormalizedTxResponse>;
18
+ getTransactionStatus(p: NormalizedTxResponse): Promise<SwapStatus>;
19
+ }