@sodax/dapp-kit 0.0.1-rc.1 → 0.0.1-rc.10

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 (77) hide show
  1. package/README.md +14 -13
  2. package/dist/contexts/index.d.ts +2 -1
  3. package/dist/contexts/index.d.ts.map +1 -1
  4. package/dist/core/index.d.ts +2 -3
  5. package/dist/core/index.d.ts.map +1 -1
  6. package/dist/hooks/mm/index.d.ts +3 -1
  7. package/dist/hooks/mm/index.d.ts.map +1 -1
  8. package/dist/hooks/mm/useBorrow.d.ts +13 -4
  9. package/dist/hooks/mm/useBorrow.d.ts.map +1 -1
  10. package/dist/hooks/mm/useMMAllowance.d.ts +26 -0
  11. package/dist/hooks/mm/useMMAllowance.d.ts.map +1 -0
  12. package/dist/hooks/mm/useMMApprove.d.ts +27 -0
  13. package/dist/hooks/mm/useMMApprove.d.ts.map +1 -0
  14. package/dist/hooks/mm/useRepay.d.ts +13 -4
  15. package/dist/hooks/mm/useRepay.d.ts.map +1 -1
  16. package/dist/hooks/mm/useReservesData.d.ts +19 -0
  17. package/dist/hooks/mm/useReservesData.d.ts.map +1 -0
  18. package/dist/hooks/mm/useSupply.d.ts +4 -2
  19. package/dist/hooks/mm/useSupply.d.ts.map +1 -1
  20. package/dist/hooks/mm/useUserReservesData.d.ts +1 -7
  21. package/dist/hooks/mm/useUserReservesData.d.ts.map +1 -1
  22. package/dist/hooks/mm/useWithdraw.d.ts +11 -4
  23. package/dist/hooks/mm/useWithdraw.d.ts.map +1 -1
  24. package/dist/hooks/provider/useHubProvider.d.ts +1 -1
  25. package/dist/hooks/provider/useHubProvider.d.ts.map +1 -1
  26. package/dist/hooks/provider/useSpokeProvider.d.ts +16 -2
  27. package/dist/hooks/provider/useSpokeProvider.d.ts.map +1 -1
  28. package/dist/hooks/shared/index.d.ts +0 -2
  29. package/dist/hooks/shared/index.d.ts.map +1 -1
  30. package/dist/hooks/swap/index.d.ts +2 -0
  31. package/dist/hooks/swap/index.d.ts.map +1 -1
  32. package/dist/hooks/swap/useCreateIntentOrder.d.ts +6 -6
  33. package/dist/hooks/swap/useCreateIntentOrder.d.ts.map +1 -1
  34. package/dist/hooks/swap/useQuote.d.ts +4 -4
  35. package/dist/hooks/swap/useQuote.d.ts.map +1 -1
  36. package/dist/hooks/swap/useStatus.d.ts +3 -3
  37. package/dist/hooks/swap/useStatus.d.ts.map +1 -1
  38. package/dist/hooks/swap/useSwapAllowance.d.ts +23 -0
  39. package/dist/hooks/swap/useSwapAllowance.d.ts.map +1 -0
  40. package/dist/hooks/swap/useSwapApprove.d.ts +26 -0
  41. package/dist/hooks/swap/useSwapApprove.d.ts.map +1 -0
  42. package/dist/index.js +230 -189
  43. package/dist/index.js.map +1 -1
  44. package/dist/index.mjs +228 -188
  45. package/dist/index.mjs.map +1 -1
  46. package/dist/providers/SodaxProvider.d.ts.map +1 -1
  47. package/package.json +4 -4
  48. package/src/contexts/index.ts +2 -1
  49. package/src/core/index.ts +5 -35
  50. package/src/hooks/mm/index.ts +3 -1
  51. package/src/hooks/mm/useBorrow.ts +20 -10
  52. package/src/hooks/mm/useMMAllowance.ts +55 -0
  53. package/src/hooks/mm/useMMApprove.ts +67 -0
  54. package/src/hooks/mm/useRepay.ts +20 -10
  55. package/src/hooks/mm/useReservesData.ts +37 -0
  56. package/src/hooks/mm/useSupply.ts +9 -6
  57. package/src/hooks/mm/useUserReservesData.ts +17 -34
  58. package/src/hooks/mm/useWithdraw.ts +17 -11
  59. package/src/hooks/provider/useHubProvider.ts +2 -21
  60. package/src/hooks/provider/useSpokeProvider.ts +87 -10
  61. package/src/hooks/shared/index.ts +0 -2
  62. package/src/hooks/swap/index.ts +2 -0
  63. package/src/hooks/swap/useCreateIntentOrder.ts +9 -11
  64. package/src/hooks/swap/useQuote.ts +5 -5
  65. package/src/hooks/swap/useStatus.ts +3 -3
  66. package/src/hooks/swap/useSwapAllowance.ts +44 -0
  67. package/src/hooks/swap/useSwapApprove.ts +68 -0
  68. package/src/providers/SodaxProvider.tsx +18 -3
  69. package/dist/hooks/mm/useHubWalletAddress.d.ts +0 -24
  70. package/dist/hooks/mm/useHubWalletAddress.d.ts.map +0 -1
  71. package/dist/hooks/shared/useAllowance.d.ts +0 -3
  72. package/dist/hooks/shared/useAllowance.d.ts.map +0 -1
  73. package/dist/hooks/shared/useApprove.d.ts +0 -10
  74. package/dist/hooks/shared/useApprove.d.ts.map +0 -1
  75. package/src/hooks/mm/useHubWalletAddress.ts +0 -49
  76. package/src/hooks/shared/useAllowance.ts +0 -31
  77. package/src/hooks/shared/useApprove.ts +0 -53
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSwapApprove.d.ts","sourceRoot":"","sources":["../../../src/hooks/swap/useSwapApprove.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,UAAU,gBAAgB;IACxB,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9D,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAED;;;;;;;;;;;;GAYG;AAEH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,EAAE,aAAa,EAAE,aAAa,GAAG,SAAS,GAAG,gBAAgB,CAwCnH"}
package/dist/index.js CHANGED
@@ -1,11 +1,10 @@
1
1
  'use strict';
2
2
 
3
3
  var React = require('react');
4
- var reactQuery = require('@tanstack/react-query');
5
4
  var sdk = require('@sodax/sdk');
6
5
  var walletSdk = require('@sodax/wallet-sdk');
6
+ var reactQuery = require('@tanstack/react-query');
7
7
  var viem = require('viem');
8
- var types = require('@sodax/types');
9
8
 
10
9
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
11
10
 
@@ -20,111 +19,72 @@ var useSodaxContext = () => {
20
19
  }
21
20
  return context;
22
21
  };
23
- function useSpokeProvider(spokeChainId) {
22
+
23
+ // src/hooks/provider/useHubProvider.ts
24
+ function useHubProvider() {
25
+ const { hubProvider } = useSodaxContext();
26
+ return hubProvider;
27
+ }
28
+ function useSpokeProvider(spokeChainId, walletProvider) {
24
29
  const xChainType = walletSdk.getXChainType(spokeChainId);
25
- const walletProvider = walletSdk.useWalletProvider(spokeChainId);
30
+ const walletProvider_ = walletSdk.useWalletProvider(spokeChainId);
31
+ const _walletProvider = walletProvider ?? walletProvider_;
26
32
  const spokeProvider = React.useMemo(() => {
27
- if (!walletProvider) return void 0;
33
+ if (!_walletProvider) return void 0;
34
+ if (!spokeChainId) return void 0;
28
35
  if (xChainType === "EVM") {
29
- return new sdk.EvmSpokeProvider(walletProvider, sdk.spokeChainConfig[spokeChainId]);
36
+ return new sdk.EvmSpokeProvider(
37
+ _walletProvider,
38
+ sdk.spokeChainConfig[spokeChainId]
39
+ );
30
40
  }
31
41
  if (xChainType === "SUI") {
32
- return new sdk.SuiSpokeProvider(sdk.spokeChainConfig[spokeChainId], walletProvider);
42
+ return new sdk.SuiSpokeProvider(
43
+ sdk.spokeChainConfig[spokeChainId],
44
+ _walletProvider
45
+ );
33
46
  }
34
- return void 0;
35
- }, [walletProvider, xChainType, spokeChainId]);
36
- return spokeProvider;
37
- }
38
- function useAllowance(token, amount) {
39
- const { sodax } = useSodaxContext();
40
- const spokeProvider = useSpokeProvider(token.xChainId);
41
- return reactQuery.useQuery({
42
- queryKey: ["allowance", token.address, amount],
43
- queryFn: async () => {
44
- if (!spokeProvider) {
45
- return false;
46
- }
47
- const allowance = await sodax.moneyMarket.isAllowanceValid(
48
- {
49
- token: token.address,
50
- amount: viem.parseUnits(amount, token.decimals)
51
- },
52
- spokeProvider
47
+ if (xChainType === "ICON") {
48
+ return new sdk.IconSpokeProvider(
49
+ _walletProvider,
50
+ sdk.spokeChainConfig[spokeChainId]
53
51
  );
54
- if (allowance.ok) {
55
- return allowance.value;
56
- }
57
- return false;
58
- },
59
- enabled: !!spokeProvider
60
- });
61
- }
62
- function useApprove(token) {
63
- const { sodax } = useSodaxContext();
64
- const spokeProvider = useSpokeProvider(token.xChainId);
65
- const queryClient = reactQuery.useQueryClient();
66
- const {
67
- mutateAsync: approve,
68
- isPending,
69
- error,
70
- reset: resetError
71
- } = reactQuery.useMutation({
72
- mutationFn: async (amount) => {
73
- if (!spokeProvider) {
74
- throw new Error("Spoke provider not found");
75
- }
76
- const allowance = await sodax.moneyMarket.approve(
77
- token.address,
78
- viem.parseUnits(amount, token.decimals),
79
- spokeProvider.chainConfig.addresses.assetManager,
80
- spokeProvider
52
+ }
53
+ if (xChainType === "INJECTIVE") {
54
+ return new sdk.InjectiveSpokeProvider(
55
+ sdk.spokeChainConfig[spokeChainId],
56
+ _walletProvider
81
57
  );
82
- if (!allowance.ok) {
83
- throw new Error("Failed to approve tokens");
84
- }
85
- return allowance.ok;
86
- },
87
- onSuccess: () => {
88
- queryClient.invalidateQueries({ queryKey: ["allowance", token.address] });
89
58
  }
90
- });
91
- return {
92
- approve,
93
- isLoading: isPending,
94
- error,
95
- resetError
96
- };
97
- }
98
- function useHubProvider() {
99
- const { sodax } = useSodaxContext();
100
- const hubChainId = sodax.config?.hubProviderConfig?.chainConfig.chain.id;
101
- const hubRpcUrl = sodax.config?.hubProviderConfig?.hubRpcUrl;
102
- const xChainType = walletSdk.getXChainType(hubChainId);
103
- const hubProvider = React.useMemo(() => {
104
- if (xChainType === "EVM" && hubChainId && hubRpcUrl) {
105
- const hubChainCfg = sdk.getHubChainConfig(hubChainId);
106
- if (!hubChainCfg) return void 0;
107
- return new sdk.EvmHubProvider({
108
- hubRpcUrl,
109
- chainConfig: hubChainCfg
59
+ if (xChainType === "STELLAR") {
60
+ const stellarConfig = sdk.spokeChainConfig[spokeChainId];
61
+ return new sdk.StellarSpokeProvider(_walletProvider, stellarConfig, {
62
+ horizonRpcUrl: stellarConfig.horizonRpcUrl,
63
+ sorobanRpcUrl: stellarConfig.sorobanRpcUrl
110
64
  });
111
65
  }
66
+ if (xChainType === "SOLANA") {
67
+ return new sdk.SolanaSpokeProvider(
68
+ _walletProvider,
69
+ sdk.spokeChainConfig[spokeChainId]
70
+ );
71
+ }
112
72
  return void 0;
113
- }, [xChainType, hubChainId, hubRpcUrl]);
114
- return hubProvider;
73
+ }, [spokeChainId, xChainType, _walletProvider]);
74
+ return spokeProvider;
115
75
  }
116
- function useBorrow(hubToken, spokeChainId) {
76
+ function useBorrow(spokeToken, spokeProvider) {
117
77
  const { sodax } = useSodaxContext();
118
- const spokeProvider = useSpokeProvider(spokeChainId);
119
78
  return reactQuery.useMutation({
120
79
  mutationFn: async (amount) => {
121
80
  if (!spokeProvider) {
122
81
  throw new Error("spokeProvider is not found");
123
82
  }
124
- const response = await sodax.moneyMarket.borrowAndSubmit(
83
+ const response = await sodax.moneyMarket.borrow(
125
84
  {
126
- token: hubToken.address,
127
- amount: viem.parseUnits(amount, hubToken.decimals)
85
+ token: spokeToken.address,
86
+ amount: viem.parseUnits(amount, 18),
87
+ action: "borrow"
128
88
  },
129
89
  spokeProvider
130
90
  );
@@ -136,18 +96,18 @@ function useBorrow(hubToken, spokeChainId) {
136
96
  }
137
97
  });
138
98
  }
139
- function useRepay(hubToken, spokeChainId) {
99
+ function useRepay(spokeToken, spokeProvider) {
140
100
  const { sodax } = useSodaxContext();
141
- const spokeProvider = useSpokeProvider(spokeChainId);
142
101
  return reactQuery.useMutation({
143
102
  mutationFn: async (amount) => {
144
103
  if (!spokeProvider) {
145
104
  throw new Error("spokeProvider is not found");
146
105
  }
147
- const response = await sodax.moneyMarket.repayAndSubmit(
106
+ const response = await sodax.moneyMarket.repay(
148
107
  {
149
- token: hubToken.address,
150
- amount: viem.parseUnits(amount, hubToken.decimals)
108
+ token: spokeToken.address,
109
+ amount: viem.parseUnits(amount, spokeToken.decimals),
110
+ action: "repay"
151
111
  },
152
112
  spokeProvider
153
113
  );
@@ -159,18 +119,18 @@ function useRepay(hubToken, spokeChainId) {
159
119
  }
160
120
  });
161
121
  }
162
- function useSupply(spokeToken) {
122
+ function useSupply(spokeToken, spokeProvider) {
163
123
  const { sodax } = useSodaxContext();
164
- const spokeProvider = useSpokeProvider(spokeToken.xChainId);
165
124
  return reactQuery.useMutation({
166
125
  mutationFn: async (amount) => {
167
126
  if (!spokeProvider) {
168
127
  throw new Error("spokeProvider is not found");
169
128
  }
170
- const response = await sodax.moneyMarket.supplyAndSubmit(
129
+ const response = await sodax.moneyMarket.supply(
171
130
  {
172
131
  token: spokeToken.address,
173
- amount: viem.parseUnits(amount, spokeToken.decimals)
132
+ amount: viem.parseUnits(amount, spokeToken.decimals),
133
+ action: "supply"
174
134
  },
175
135
  spokeProvider
176
136
  );
@@ -182,18 +142,19 @@ function useSupply(spokeToken) {
182
142
  }
183
143
  });
184
144
  }
185
- function useWithdraw(hubToken, spokeChainId) {
145
+ function useWithdraw(spokeToken, spokeProvider) {
186
146
  const { sodax } = useSodaxContext();
187
- const spokeProvider = useSpokeProvider(spokeChainId);
188
147
  return reactQuery.useMutation({
189
148
  mutationFn: async (amount) => {
190
149
  if (!spokeProvider) {
191
150
  throw new Error("spokeProvider is not found");
192
151
  }
193
- const response = await sodax.moneyMarket.withdrawAndSubmit(
152
+ const response = await sodax.moneyMarket.withdraw(
194
153
  {
195
- token: hubToken.address,
196
- amount: viem.parseUnits(amount, hubToken.decimals)
154
+ token: spokeToken.address,
155
+ // vault token on hub chain decimals is 18
156
+ amount: viem.parseUnits(amount, 18),
157
+ action: "withdraw"
197
158
  },
198
159
  spokeProvider
199
160
  );
@@ -205,100 +166,107 @@ function useWithdraw(hubToken, spokeChainId) {
205
166
  }
206
167
  });
207
168
  }
208
- var allXTokens = [];
209
- Object.keys(sdk.hubAssets).forEach((xChainId) => {
210
- const tokens = sdk.hubAssets[xChainId];
211
- Object.keys(tokens).forEach((tokenAddress) => {
212
- const token = tokens[tokenAddress];
213
- allXTokens.push({
214
- xChainId,
215
- symbol: token.symbol,
216
- name: token.name,
217
- decimals: token.decimal,
218
- address: tokenAddress
219
- });
220
- allXTokens.push({
221
- // @ts-ignore
222
- xChainId: types.CHAIN_IDS.includes(xChainId) ? "sonic" : "sonic-blaze",
223
- symbol: token.symbol,
224
- name: token.name,
225
- decimals: token.decimal,
226
- address: token.vault
227
- });
228
- });
229
- });
230
- var getSpokeTokenAddressByVault = (spokeChainId, vault) => {
231
- const tokens = sdk.hubAssets[spokeChainId];
232
- const token = Object.keys(tokens).find((tokenAddress) => tokens[tokenAddress].vault === vault);
233
- if (!token) {
234
- throw new Error("Token not found");
235
- }
236
- return token;
237
- };
238
- function useHubWalletAddress(spokeChainId, address, hubProvider) {
239
- return reactQuery.useQuery({
240
- queryKey: ["hubWallet", spokeChainId, address],
169
+ function useUserReservesData(spokeChainId, address) {
170
+ const { sodax } = useSodaxContext();
171
+ const hubChainId = sodax.config?.hubProviderConfig?.chainConfig.chain.id ?? "sonic";
172
+ const hubProvider = useHubProvider();
173
+ const { data: userReserves } = reactQuery.useQuery({
174
+ queryKey: ["userReserves", spokeChainId, address],
241
175
  queryFn: async () => {
242
- if (!address) return null;
243
- try {
244
- const hubWalletAddress = await sdk.EvmWalletAbstraction.getUserHubWalletAddress(
245
- spokeChainId,
246
- address,
247
- hubProvider
248
- );
249
- return hubWalletAddress;
250
- } catch (error) {
251
- console.log("error", error);
252
- return null;
176
+ if (!hubProvider || !address) {
177
+ return;
253
178
  }
179
+ const addressBytes = sdk.encodeAddress(spokeChainId, address);
180
+ const hubWalletAddress = await sdk.EvmWalletAbstraction.getUserHubWalletAddress(
181
+ spokeChainId,
182
+ addressBytes,
183
+ hubProvider
184
+ );
185
+ const moneyMarketConfig = sdk.getMoneyMarketConfig(hubChainId);
186
+ const [res] = await sodax.moneyMarket.getUserReservesData(
187
+ hubWalletAddress,
188
+ moneyMarketConfig.uiPoolDataProvider,
189
+ moneyMarketConfig.poolAddressesProvider
190
+ );
191
+ return res;
254
192
  },
255
- enabled: !!address && !!hubProvider
193
+ enabled: !!spokeChainId && !!hubProvider && !!address,
194
+ refetchInterval: 5e3
256
195
  });
196
+ return userReserves;
257
197
  }
258
-
259
- // src/hooks/mm/useUserReservesData.ts
260
- function useUserReservesData(spokeChainId) {
198
+ function useReservesData() {
261
199
  const { sodax } = useSodaxContext();
262
200
  const hubChainId = sodax.config?.hubProviderConfig?.chainConfig.chain.id ?? "sonic";
263
- const hubWalletProvider = walletSdk.useWalletProvider(hubChainId);
264
- const hubProvider = useHubProvider();
265
- const { address } = walletSdk.useXAccount(spokeChainId);
266
- const { data: hubWalletAddress } = useHubWalletAddress(
267
- spokeChainId,
268
- address,
269
- hubProvider
270
- );
271
- const { data: userReserves } = reactQuery.useQuery({
272
- queryKey: ["userReserves", hubWalletAddress],
201
+ return reactQuery.useQuery({
202
+ queryKey: ["reservesData"],
273
203
  queryFn: async () => {
274
- if (!hubWalletProvider) {
275
- return;
204
+ const moneyMarketConfig = sdk.getMoneyMarketConfig(hubChainId);
205
+ return await sodax.moneyMarket.getReservesData(
206
+ moneyMarketConfig.uiPoolDataProvider,
207
+ moneyMarketConfig.poolAddressesProvider
208
+ );
209
+ }
210
+ });
211
+ }
212
+ function useMMAllowance(token, amount, action, spokeProvider) {
213
+ const { sodax } = useSodaxContext();
214
+ return reactQuery.useQuery({
215
+ queryKey: ["allowance", token.address, amount, action],
216
+ queryFn: async () => {
217
+ if (!spokeProvider) throw new Error("Spoke provider is required");
218
+ const allowance = await sodax.moneyMarket.isAllowanceValid(
219
+ {
220
+ token: token.address,
221
+ amount: viem.parseUnits(amount, token.decimals),
222
+ action
223
+ },
224
+ spokeProvider
225
+ );
226
+ if (allowance.ok) {
227
+ return allowance.value;
276
228
  }
277
- if (!hubWalletAddress) {
278
- return;
229
+ return false;
230
+ },
231
+ enabled: !!spokeProvider
232
+ });
233
+ }
234
+ function useMMApprove(token, spokeProvider) {
235
+ const { sodax } = useSodaxContext();
236
+ const queryClient = reactQuery.useQueryClient();
237
+ const {
238
+ mutateAsync: approve,
239
+ isPending,
240
+ error,
241
+ reset: resetError
242
+ } = reactQuery.useMutation({
243
+ mutationFn: async ({ amount, action }) => {
244
+ if (!spokeProvider) {
245
+ throw new Error("Spoke provider not found");
279
246
  }
280
- const moneyMarketConfig = sdk.getMoneyMarketConfig(hubChainId);
281
- try {
282
- const [res] = await sodax.moneyMarket.getUserReservesData(
283
- hubWalletAddress,
284
- moneyMarketConfig.uiPoolDataProvider,
285
- moneyMarketConfig.poolAddressesProvider
286
- );
287
- return res?.map((r) => {
288
- return {
289
- ...r,
290
- token: allXTokens.find((t) => t.address === r.underlyingAsset)
291
- };
292
- });
293
- } catch (error) {
294
- console.log("error", error);
295
- return;
247
+ const allowance = await sodax.moneyMarket.approve(
248
+ {
249
+ token: token.address,
250
+ amount: viem.parseUnits(amount, token.decimals),
251
+ action
252
+ },
253
+ spokeProvider
254
+ );
255
+ if (!allowance.ok) {
256
+ throw new Error("Failed to approve tokens");
296
257
  }
258
+ return allowance.ok;
297
259
  },
298
- enabled: !!address && !!hubWalletProvider && !!hubWalletAddress,
299
- refetchInterval: 5e3
260
+ onSuccess: () => {
261
+ queryClient.invalidateQueries({ queryKey: ["allowance", token.address] });
262
+ }
300
263
  });
301
- return userReserves;
264
+ return {
265
+ approve,
266
+ isLoading: isPending,
267
+ error,
268
+ resetError
269
+ };
302
270
  }
303
271
  var useQuote = (payload) => {
304
272
  const { sodax } = useSodaxContext();
@@ -314,9 +282,8 @@ var useQuote = (payload) => {
314
282
  refetchInterval: 3e3
315
283
  });
316
284
  };
317
- function useCreateIntentOrder(chainId) {
285
+ function useCreateIntentOrder(spokeProvider) {
318
286
  const { sodax } = useSodaxContext();
319
- const spokeProvider = useSpokeProvider(chainId);
320
287
  return reactQuery.useMutation({
321
288
  mutationFn: async (params) => {
322
289
  if (!spokeProvider) {
@@ -337,26 +304,100 @@ var useStatus = (intent_tx_hash) => {
337
304
  // 3s
338
305
  });
339
306
  };
307
+ function useSwapAllowance(params, spokeProvider) {
308
+ const { sodax } = useSodaxContext();
309
+ return reactQuery.useQuery({
310
+ queryKey: ["allowance", params],
311
+ queryFn: async () => {
312
+ if (!spokeProvider || !params) {
313
+ return false;
314
+ }
315
+ const allowance = await sodax.solver.isAllowanceValid(params, spokeProvider);
316
+ if (allowance.ok) {
317
+ return allowance.value;
318
+ }
319
+ return false;
320
+ },
321
+ enabled: !!spokeProvider && !!params
322
+ });
323
+ }
324
+ function useSwapApprove(token, spokeProvider) {
325
+ const { sodax } = useSodaxContext();
326
+ const queryClient = reactQuery.useQueryClient();
327
+ const {
328
+ mutateAsync: approve,
329
+ isPending,
330
+ error,
331
+ reset: resetError
332
+ } = reactQuery.useMutation({
333
+ mutationFn: async ({ amount }) => {
334
+ if (!spokeProvider) {
335
+ throw new Error("Spoke provider not found");
336
+ }
337
+ if (!token) {
338
+ throw new Error("Token not found");
339
+ }
340
+ const allowance = await sodax.solver.approve(
341
+ token.address,
342
+ viem.parseUnits(amount, token.decimals),
343
+ spokeProvider
344
+ );
345
+ if (!allowance.ok) {
346
+ throw new Error("Failed to approve tokens");
347
+ }
348
+ return allowance.ok;
349
+ },
350
+ onSuccess: () => {
351
+ queryClient.invalidateQueries({ queryKey: ["allowance", token?.address] });
352
+ }
353
+ });
354
+ return {
355
+ approve,
356
+ isLoading: isPending,
357
+ error,
358
+ resetError
359
+ };
360
+ }
340
361
  var SodaxProvider = ({ children, testnet = false, config }) => {
341
362
  const sodax = new sdk.Sodax(config);
342
- return /* @__PURE__ */ React__default.default.createElement(SodaxContext.Provider, { value: { sodax, testnet } }, children);
363
+ const hubChainId = config?.hubProviderConfig?.chainConfig.chain.id;
364
+ const hubRpcUrl = config?.hubProviderConfig?.hubRpcUrl;
365
+ const hubProvider = React.useMemo(() => {
366
+ if (hubChainId && hubRpcUrl) {
367
+ const hubChainCfg = sdk.getHubChainConfig(hubChainId);
368
+ return new sdk.EvmHubProvider({
369
+ hubRpcUrl,
370
+ chainConfig: hubChainCfg
371
+ });
372
+ }
373
+ return void 0;
374
+ }, [hubChainId, hubRpcUrl]);
375
+ return /* @__PURE__ */ React__default.default.createElement(SodaxContext.Provider, { value: { sodax, testnet, hubProvider } }, children);
376
+ };
377
+ var getSpokeTokenAddressByVault = (spokeChainId, vault) => {
378
+ const tokens = sdk.hubAssets[spokeChainId];
379
+ const address = Object.keys(tokens).find(
380
+ (tokenAddress) => tokens[tokenAddress].vault.toLowerCase() === vault.toLowerCase()
381
+ );
382
+ return address;
343
383
  };
344
384
 
345
385
  exports.SodaxProvider = SodaxProvider;
346
- exports.allXTokens = allXTokens;
347
386
  exports.getSpokeTokenAddressByVault = getSpokeTokenAddressByVault;
348
- exports.useAllowance = useAllowance;
349
- exports.useApprove = useApprove;
350
387
  exports.useBorrow = useBorrow;
351
388
  exports.useCreateIntentOrder = useCreateIntentOrder;
352
389
  exports.useHubProvider = useHubProvider;
353
- exports.useHubWalletAddress = useHubWalletAddress;
390
+ exports.useMMAllowance = useMMAllowance;
391
+ exports.useMMApprove = useMMApprove;
354
392
  exports.useQuote = useQuote;
355
393
  exports.useRepay = useRepay;
394
+ exports.useReservesData = useReservesData;
356
395
  exports.useSodaxContext = useSodaxContext;
357
396
  exports.useSpokeProvider = useSpokeProvider;
358
397
  exports.useStatus = useStatus;
359
398
  exports.useSupply = useSupply;
399
+ exports.useSwapAllowance = useSwapAllowance;
400
+ exports.useSwapApprove = useSwapApprove;
360
401
  exports.useUserReservesData = useUserReservesData;
361
402
  exports.useWithdraw = useWithdraw;
362
403
  //# sourceMappingURL=index.js.map