@sodax/dapp-kit 1.0.1-beta → 1.0.3-beta

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 (41) hide show
  1. package/README.md +130 -39
  2. package/dist/index.d.mts +576 -346
  3. package/dist/index.d.ts +576 -346
  4. package/dist/index.js +357 -176
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.mjs +354 -178
  7. package/dist/index.mjs.map +1 -1
  8. package/package.json +3 -3
  9. package/src/hooks/backend/README.md +148 -49
  10. package/src/hooks/backend/index.ts +2 -0
  11. package/src/hooks/backend/types.ts +4 -0
  12. package/src/hooks/backend/useBackendAllMoneyMarketAssets.ts +31 -20
  13. package/src/hooks/backend/useBackendAllMoneyMarketBorrowers.ts +25 -7
  14. package/src/hooks/backend/useBackendIntentByHash.ts +36 -26
  15. package/src/hooks/backend/useBackendIntentByTxHash.ts +41 -29
  16. package/src/hooks/backend/useBackendMoneyMarketAsset.ts +40 -27
  17. package/src/hooks/backend/useBackendMoneyMarketAssetBorrowers.ts +45 -36
  18. package/src/hooks/backend/useBackendMoneyMarketAssetSuppliers.ts +45 -36
  19. package/src/hooks/backend/useBackendMoneyMarketPosition.ts +34 -37
  20. package/src/hooks/backend/useBackendOrderbook.ts +38 -38
  21. package/src/hooks/backend/useBackendUserIntents.ts +81 -0
  22. package/src/hooks/mm/index.ts +2 -0
  23. package/src/hooks/mm/useAToken.ts +37 -20
  24. package/src/hooks/mm/useATokensBalances.ts +87 -0
  25. package/src/hooks/mm/useBorrow.ts +36 -36
  26. package/src/hooks/mm/useMMAllowance.ts +33 -24
  27. package/src/hooks/mm/useMMApprove.ts +43 -48
  28. package/src/hooks/mm/useRepay.ts +32 -36
  29. package/src/hooks/mm/useReservesData.ts +35 -16
  30. package/src/hooks/mm/useReservesHumanized.ts +15 -3
  31. package/src/hooks/mm/useReservesList.ts +28 -15
  32. package/src/hooks/mm/useReservesUsdFormat.ts +30 -21
  33. package/src/hooks/mm/useSupply.ts +34 -36
  34. package/src/hooks/mm/useUserFormattedSummary.ts +42 -20
  35. package/src/hooks/mm/useUserReservesData.ts +34 -19
  36. package/src/hooks/mm/useWithdraw.ts +33 -35
  37. package/src/hooks/swap/index.ts +2 -0
  38. package/src/hooks/swap/useCancelLimitOrder.ts +53 -0
  39. package/src/hooks/swap/useCreateLimitOrder.ts +72 -0
  40. package/src/hooks/swap/useSwapAllowance.ts +7 -7
  41. package/src/hooks/swap/useSwapApprove.ts +6 -6
package/README.md CHANGED
@@ -126,60 +126,147 @@ function App() {
126
126
 
127
127
  ```typescript
128
128
  // Connect Wallet Operations
129
- import { useXConnectors, useXConnect, useXAccount } from '@sodax/wallet-sdk-react';
130
- const evmConnectors = useXConnectors('EVM');
131
- const { mutateAsync: connect, isPending } = useXConnect();
132
- const account = useXAccount('EVM');
133
-
134
- const handleConnect = () => {
135
- connect(evmConnectors[0]);
136
- };
137
-
138
- return (
139
- <div>
140
- <button onClick={handleConnect}>Connect EVM Wallet</button>
141
- <div>Connected wallet: {account.address}</div>
142
- </div>
143
- );
144
-
145
129
  // Money Market Operations
146
- import { useSupply, useWithdraw, useBorrow, useRepay, useUserReservesData } from '@sodax/dapp-kit';
130
+ import { useSupply, useWithdraw, useBorrow, useRepay, useUserReservesData, useMMAllowance, useMMApprove } from '@sodax/dapp-kit';
131
+ import { parseUnits } from 'viem';
132
+ import { useMemo, useState } from 'react';
147
133
 
148
134
  function MoneyMarketComponent() {
135
+ const [amount, setAmount] = useState<string>('');
136
+ const spokeProvider = useSpokeProvider(chainId, walletProvider);
137
+
149
138
  // Supply tokens
150
- const { mutateAsync: supply, isPending: isSupplying } = useSupply(token);
151
- const handleSupply = async (amount: string) => {
152
- await supply(amount);
139
+ const supplyParams = useMemo(() => {
140
+ if (!amount) return undefined;
141
+ return {
142
+ token: token.address,
143
+ amount: parseUnits(amount, token.decimals),
144
+ action: 'supply' as const,
145
+ };
146
+ }, [token.address, token.decimals, amount]);
147
+
148
+ const { data: hasSupplyAllowed, isLoading: isSupplyAllowanceLoading } = useMMAllowance(supplyParams, spokeProvider);
149
+ const { mutateAsync: approveSupply, isPending: isApprovingSupply, error: approveSupplyError } = useMMApprove();
150
+ const { mutateAsync: supply, isPending: isSupplying, error: supplyError } = useSupply();
151
+
152
+ const handleApproveSupply = async () => {
153
+ if (!spokeProvider || !supplyParams) return;
154
+ try {
155
+ await approveSupply({ params: supplyParams, spokeProvider });
156
+ } catch (err) {
157
+ console.error('Error approving supply:', err);
158
+ }
159
+ };
160
+
161
+ const handleSupply = async () => {
162
+ if (!spokeProvider || !supplyParams) return;
163
+ try {
164
+ await supply({ params: supplyParams, spokeProvider });
165
+ } catch (err) {
166
+ console.error('Error supplying:', err);
167
+ }
153
168
  };
154
169
 
155
170
  // Withdraw tokens
156
- const { mutateAsync: withdraw, isPending: isWithdrawing } = useWithdraw(token, chainId);
157
- const handleWithdraw = async (amount: string) => {
158
- await withdraw(amount);
171
+ const withdrawParams = useMemo(() => {
172
+ if (!amount) return undefined;
173
+ return {
174
+ token: token.address,
175
+ amount: parseUnits(amount, 18), // vault token on hub chain decimals is 18
176
+ action: 'withdraw' as const,
177
+ };
178
+ }, [token.address, amount]);
179
+
180
+ const { data: hasWithdrawAllowed, isLoading: isWithdrawAllowanceLoading } = useMMAllowance(withdrawParams, spokeProvider);
181
+ const { data: hasWithdrawAllowed, isLoading: isWithdrawAllowanceLoading } = useMMAllowance({ params: withdrawParams, spokeProvider });
182
+
183
+ const { mutateAsync: approveWithdraw, isPending: isApprovingWithdraw, error: approveWithdrawError } = useMMApprove();
184
+ const { mutateAsync: withdraw, isPending: isWithdrawing, error: withdrawError } = useWithdraw();
185
+
186
+ const handleApproveWithdraw = async () => {
187
+ if (!spokeProvider || !withdrawParams) return;
188
+ try {
189
+ await approveWithdraw({ params: withdrawParams, spokeProvider });
190
+ } catch (err) {
191
+ console.error('Error approving withdraw:', err);
192
+ }
193
+ };
194
+
195
+ const handleWithdraw = async () => {
196
+ if (!spokeProvider || !withdrawParams) return;
197
+ try {
198
+ await withdraw({ params: withdrawParams, spokeProvider });
199
+ } catch (err) {
200
+ console.error('Error withdrawing:', err);
201
+ }
159
202
  };
160
203
 
161
204
  // Borrow tokens
162
- const { mutateAsync: borrow, isPending: isBorrowing } = useBorrow(token, chainId);
163
- const handleBorrow = async (amount: string) => {
164
- await borrow(amount);
205
+ const borrowParams = useMemo(() => {
206
+ if (!amount) return undefined;
207
+ return {
208
+ token: token.address,
209
+ amount: parseUnits(amount, 18),
210
+ action: 'borrow' as const,
211
+ };
212
+ }, [token.address, amount]);
213
+
214
+ const { data: hasBorrowAllowed, isLoading: isBorrowAllowanceLoading } = useMMAllowance({ params: borrowParams, spokeProvider });
215
+ const { mutateAsync: approveBorrow, isPending: isApprovingBorrow, error: approveBorrowError } = useMMApprove();
216
+ const { mutateAsync: borrow, isPending: isBorrowing, error: borrowError } = useBorrow();
217
+
218
+ const handleApproveBorrow = async () => {
219
+ if (!spokeProvider || !borrowParams) return;
220
+ try {
221
+ await approveBorrow({ params: borrowParams, spokeProvider });
222
+ } catch (err) {
223
+ console.error('Error approving borrow:', err);
224
+ }
165
225
  };
166
226
 
167
- // Get user's supplied assets
168
- const userReserves = useUserReservesData(chainId);
169
- }
227
+ const handleBorrow = async () => {
228
+ if (!spokeProvider || !borrowParams) return;
229
+ try {
230
+ await borrow({ params: borrowParams, spokeProvider });
231
+ } catch (err) {
232
+ console.error('Error borrowing:', err);
233
+ }
234
+ };
170
235
 
171
- // Token Management
172
- import { useMMAllowance, useApprove } from '@sodax/dapp-kit';
236
+ // Repay tokens
237
+ const repayParams = useMemo(() => {
238
+ if (!amount) return undefined;
239
+ return {
240
+ token: token.address,
241
+ amount: parseUnits(amount, token.decimals),
242
+ action: 'repay' as const,
243
+ };
244
+ }, [token.address, token.decimals, amount]);
245
+
246
+ const { data: hasRepayAllowed, isLoading: isRepayAllowanceLoading } = useMMAllowance({ params: repayParams, spokeProvider });
247
+ const { mutateAsync: approveRepay, isPending: isApprovingRepay, error: approveRepayError } = useMMApprove();
248
+ const { mutateAsync: repay, isPending: isRepaying, error: repayError } = useRepay();
249
+
250
+ const handleApproveRepay = async () => {
251
+ if (!spokeProvider || !repayParams) return;
252
+ try {
253
+ await approveRepay({ params: repayParams, spokeProvider });
254
+ } catch (err) {
255
+ console.error('Error approving repay:', err);
256
+ }
257
+ };
173
258
 
174
- function TokenManagementComponent() {
175
- // Check token allowance
176
- const { data: hasAllowed } = useMMAllowance(token, amount);
177
-
178
- // Approve token spending
179
- const { approve, isLoading: isApproving } = useApprove(token);
180
- const handleApprove = async (amount: string) => {
181
- await approve(amount);
259
+ const handleRepay = async () => {
260
+ if (!spokeProvider || !repayParams) return;
261
+ try {
262
+ await repay({ params: repayParams, spokeProvider });
263
+ } catch (err) {
264
+ console.error('Error repaying:', err);
265
+ }
182
266
  };
267
+
268
+ // Get user's supplied assets
269
+ const userReserves = useUserReservesData(chainId);
183
270
  }
184
271
 
185
272
  // Wallet Address Derivation
@@ -307,6 +394,10 @@ function BridgeComponent() {
307
394
  #### Swap Hooks
308
395
  - [`useQuote()`](https://github.com/icon-project/sodax-frontend/tree/main/packages/dapp-kit/src/hooks/swap/useQuote.ts) - Get quote for an intent order
309
396
  - [`useSwap()`](https://github.com/icon-project/sodax-frontend/tree/main/packages/dapp-kit/src/hooks/swap/useSwap.ts) - Create and submit an intent order
397
+ - [`useCreateLimitOrder()`](https://github.com/icon-project/sodax-frontend/tree/main/packages/dapp-kit/src/hooks/swap/useCreateLimitOrder.ts) - Create a limit order intent (no deadline, must be cancelled manually)
398
+ - **Note**: Limit orders use `useSwapAllowance()` for checking token allowance (same as swaps)
399
+ - **Note**: Limit orders use `useSwapApprove()` for approving token spending (same as swaps)
400
+ - **Note**: Limit orders use `useCancelSwap()` for cancelling (same as swaps)
310
401
  - [`useStatus()`](https://github.com/icon-project/sodax-frontend/tree/main/packages/dapp-kit/src/hooks/swap/useStatus.ts) - Get status of an intent order
311
402
  - [`useSwapAllowance()`](https://github.com/icon-project/sodax-frontend/tree/main/packages/dapp-kit/src/hooks/swap/useSwapAllowance.ts) - Check token allowance for an intent order
312
403
  - [`useSwapApprove()`](https://github.com/icon-project/sodax-frontend/tree/main/packages/dapp-kit/src/hooks/swap/useSwapApprove.ts) - Approve token spending