@huma-finance/widgets 0.0.62-beta.718 → 0.0.62-beta.720

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@huma-finance/widgets",
3
- "version": "0.0.62-beta.718+109f130",
3
+ "version": "0.0.62-beta.720+a8e676c",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -31,7 +31,7 @@
31
31
  "@ethersproject/units": "^5.6.0",
32
32
  "@huma-finance/sdk": "^0.0.61",
33
33
  "@huma-finance/shared": "^0.0.61",
34
- "@huma-finance/web-shared": "^0.0.61",
34
+ "@huma-finance/web-shared": "^0.0.62-beta.720+a8e676c",
35
35
  "@mui/icons-material": "^5.3.0",
36
36
  "@mui/material": "^5.0.6",
37
37
  "@mui/styles": "^5.0.2",
@@ -203,5 +203,5 @@
203
203
  "optionalDependencies": {
204
204
  "encoding": "^0.1.13"
205
205
  },
206
- "gitHead": "109f130a1429b7d091f76547fc72e20a8dfa2f09"
206
+ "gitHead": "a8e676c365b2ad2658475a83b59f04a95ad2fd18"
207
207
  }
@@ -0,0 +1,61 @@
1
+ import { timeUtil } from '@huma-finance/shared'
2
+ import { getLenderLockupDates, SolanaPoolState } from '@huma-finance/web-shared'
3
+ import React, { useCallback } from 'react'
4
+ import { Box, css, useTheme } from '@mui/material'
5
+ import { useAppDispatch } from '../../../hooks/useRedux'
6
+ import { WrapperModal } from '../../WrapperModal'
7
+ import { WIDGET_STEP } from '../../../store/widgets.store'
8
+ import { setStep } from '../../../store/widgets.reducers'
9
+ import { BottomButton } from '../../BottomButton'
10
+ import { AutoPaybackImg } from '../../images'
11
+
12
+ type Props = {
13
+ poolState: SolanaPoolState
14
+ }
15
+
16
+ export function ApproveAllowance({ poolState }: Props): React.ReactElement {
17
+ const theme = useTheme()
18
+ const dispatch = useAppDispatch()
19
+ const handleNext = useCallback(() => {
20
+ dispatch(setStep(WIDGET_STEP.Transfer))
21
+ }, [dispatch])
22
+
23
+ const styles = {
24
+ iconWrapper: css`
25
+ ${theme.cssMixins.rowCentered};
26
+ margin-top: ${theme.spacing(6)};
27
+ & > img {
28
+ width: 220px;
29
+ }
30
+ `,
31
+ description: css`
32
+ margin-top: ${theme.spacing(4)};
33
+ font-weight: 400;
34
+ font-size: 16px;
35
+ color: ${theme.palette.text.secondary};
36
+ padding: ${theme.spacing(0, 1)};
37
+ `,
38
+ }
39
+
40
+ const { lockupEndTimeUnix, withdrawTimeUnix } = getLenderLockupDates(
41
+ poolState.withdrawalLockupPeriodDays ?? 0,
42
+ )
43
+
44
+ return (
45
+ <WrapperModal title='Auto-Redemption'>
46
+ <Box css={styles.iconWrapper}>
47
+ <img src={AutoPaybackImg} alt='auto-payback' />
48
+ </Box>
49
+ <Box css={styles.description}>
50
+ This allowance transaction will enable auto-redemption for your existing
51
+ tranche shares. Redemption requests will be automatically submitted on{' '}
52
+ {timeUtil.timestampToLL(lockupEndTimeUnix)}. Your deposit can be
53
+ redeemed and yield rewards will stop on{' '}
54
+ {timeUtil.timestampToLL(withdrawTimeUnix)}.
55
+ </Box>
56
+ <BottomButton variant='contained' onClick={handleNext}>
57
+ APPROVE ALLOWANCE
58
+ </BottomButton>
59
+ </WrapperModal>
60
+ )
61
+ }
@@ -0,0 +1,167 @@
1
+ import {
2
+ getSentinelAddress,
3
+ getTokenAccounts,
4
+ SolanaPoolInfo,
5
+ } from '@huma-finance/shared'
6
+ import React, { useCallback, useEffect, useState } from 'react'
7
+
8
+ import {
9
+ notEnabledAutoRedeem,
10
+ SolanaPoolState,
11
+ useHumaProgram,
12
+ useLenderAccounts,
13
+ useTrancheTokenAccounts,
14
+ } from '@huma-finance/web-shared'
15
+ import {
16
+ createApproveCheckedInstruction,
17
+ TOKEN_2022_PROGRAM_ID,
18
+ } from '@solana/spl-token'
19
+ import { useWallet } from '@solana/wallet-adapter-react'
20
+ import { PublicKey, Transaction } from '@solana/web3.js'
21
+ import { useAppDispatch } from '../../../hooks/useRedux'
22
+ import { setError, setStep } from '../../../store/widgets.reducers'
23
+ import { WIDGET_STEP } from '../../../store/widgets.store'
24
+ import { LoadingModal } from '../../LoadingModal'
25
+ import { SolanaTxSendModal } from '../../SolanaTxSendModal'
26
+
27
+ type Props = {
28
+ poolInfo: SolanaPoolInfo
29
+ poolState: SolanaPoolState
30
+ }
31
+
32
+ export function Transfer({
33
+ poolInfo,
34
+ poolState,
35
+ }: Props): React.ReactElement | null {
36
+ const dispatch = useAppDispatch()
37
+ const { publicKey } = useWallet()
38
+ const sentinel = getSentinelAddress(poolInfo.chainId)
39
+ const [transaction, setTransaction] = useState<Transaction>()
40
+ const {
41
+ juniorLenderApprovedAccountPDA,
42
+ seniorLenderApprovedAccountPDA,
43
+ seniorLenderStateAccount,
44
+ juniorLenderStateAccount,
45
+ seniorTrancheMintSupply,
46
+ juniorTrancheMintSupply,
47
+ loading: isLoadingLenderAccounts,
48
+ } = useLenderAccounts(poolInfo.chainId, poolInfo.poolName)
49
+ const {
50
+ seniorTokenAccount,
51
+ juniorTokenAccount,
52
+ loading: isLoadingTrancheTokenAccounts,
53
+ } = useTrancheTokenAccounts(poolInfo)
54
+ const program = useHumaProgram(poolInfo.chainId)
55
+
56
+ const handleSuccess = useCallback(() => {
57
+ dispatch(setStep(WIDGET_STEP.Done))
58
+ }, [dispatch])
59
+
60
+ useEffect(() => {
61
+ async function getTx() {
62
+ if (
63
+ !publicKey ||
64
+ transaction ||
65
+ isLoadingLenderAccounts ||
66
+ isLoadingTrancheTokenAccounts
67
+ ) {
68
+ return
69
+ }
70
+
71
+ const tx = new Transaction()
72
+
73
+ const { seniorTrancheATA, juniorTrancheATA } = getTokenAccounts(
74
+ poolInfo,
75
+ publicKey,
76
+ )
77
+ const poolAuthorityPubkey = new PublicKey(poolInfo.poolAuthority)
78
+
79
+ if (!seniorTokenAccount?.amount && !juniorTokenAccount?.amount) {
80
+ dispatch(
81
+ setError({ errorMessage: 'Error reading tranche token balance' }),
82
+ )
83
+ return
84
+ }
85
+ if (
86
+ notEnabledAutoRedeem(
87
+ seniorTokenAccount,
88
+ poolAuthorityPubkey,
89
+ seniorTokenAccount?.amount,
90
+ )
91
+ ) {
92
+ tx.add(
93
+ createApproveCheckedInstruction(
94
+ seniorTrancheATA,
95
+ new PublicKey(poolInfo.seniorTrancheMint),
96
+ poolAuthorityPubkey, // delegate
97
+ publicKey, // owner of the wallet
98
+ BigInt(seniorTokenAccount?.amount.toString() ?? 0), // amount
99
+ poolInfo.trancheDecimals,
100
+ undefined, // multiSigners
101
+ TOKEN_2022_PROGRAM_ID,
102
+ ),
103
+ )
104
+ }
105
+ if (
106
+ notEnabledAutoRedeem(
107
+ juniorTokenAccount,
108
+ poolAuthorityPubkey,
109
+ juniorTokenAccount?.amount,
110
+ )
111
+ ) {
112
+ tx.add(
113
+ createApproveCheckedInstruction(
114
+ juniorTrancheATA,
115
+ new PublicKey(poolInfo.juniorTrancheMint),
116
+ poolAuthorityPubkey, // delegate
117
+ publicKey, // owner of the wallet
118
+ BigInt(juniorTokenAccount?.amount.toString() ?? 0), // amount
119
+ poolInfo.trancheDecimals,
120
+ undefined, // multiSigners
121
+ TOKEN_2022_PROGRAM_ID,
122
+ ),
123
+ )
124
+ }
125
+ if (!tx.instructions.length) {
126
+ dispatch(
127
+ setError({ errorMessage: 'No tranches require Auto-Redemption' }),
128
+ )
129
+ return
130
+ }
131
+
132
+ setTransaction(tx)
133
+ }
134
+ getTx()
135
+ }, [
136
+ dispatch,
137
+ isLoadingLenderAccounts,
138
+ isLoadingTrancheTokenAccounts,
139
+ juniorLenderApprovedAccountPDA,
140
+ juniorLenderStateAccount,
141
+ juniorTokenAccount,
142
+ juniorTrancheMintSupply,
143
+ poolInfo,
144
+ poolState.juniorTrancheAssets,
145
+ poolState.seniorTrancheAssets,
146
+ program.methods,
147
+ publicKey,
148
+ seniorLenderApprovedAccountPDA,
149
+ seniorLenderStateAccount,
150
+ seniorTokenAccount,
151
+ seniorTrancheMintSupply,
152
+ sentinel,
153
+ transaction,
154
+ ])
155
+
156
+ if (isLoadingLenderAccounts || isLoadingTrancheTokenAccounts) {
157
+ return <LoadingModal title='Auto-Redeem' />
158
+ }
159
+
160
+ return (
161
+ <SolanaTxSendModal
162
+ tx={transaction}
163
+ chainId={poolInfo.chainId}
164
+ handleSuccess={handleSuccess}
165
+ />
166
+ )
167
+ }
@@ -0,0 +1,45 @@
1
+ import {
2
+ CloseModalOptions,
3
+ SolanaPoolInfo,
4
+ timeUtil,
5
+ } from '@huma-finance/shared'
6
+ import { getLenderLockupDates, SolanaPoolState } from '@huma-finance/web-shared'
7
+ import React from 'react'
8
+ import { useAppSelector } from '../../../hooks/useRedux'
9
+ import { selectWidgetState } from '../../../store/widgets.selectors'
10
+ import { SolanaTxDoneModal } from '../../SolanaTxDoneModal'
11
+
12
+ type Props = {
13
+ poolInfo: SolanaPoolInfo
14
+ poolState: SolanaPoolState
15
+ handleAction: (options?: CloseModalOptions) => void
16
+ }
17
+
18
+ export function Success({
19
+ poolInfo,
20
+ poolState,
21
+ handleAction,
22
+ }: Props): React.ReactElement {
23
+ const { solanaSignature } = useAppSelector(selectWidgetState)
24
+
25
+ const { lockupEndTimeUnix, withdrawTimeUnix } = getLenderLockupDates(
26
+ poolState.withdrawalLockupPeriodDays ?? 0,
27
+ )
28
+ const content = [
29
+ `Redemption request will be automatically submitted on ${timeUtil.timestampToLL(
30
+ lockupEndTimeUnix,
31
+ )}. Your deposit can be redeemed and yield rewards will stop on ${timeUtil.timestampToLL(
32
+ withdrawTimeUnix,
33
+ )}.`,
34
+ ]
35
+
36
+ return (
37
+ <SolanaTxDoneModal
38
+ handleAction={handleAction}
39
+ content={content}
40
+ chainId={poolInfo.chainId}
41
+ solanaSignature={solanaSignature}
42
+ buttonText='DONE'
43
+ />
44
+ )
45
+ }
@@ -0,0 +1,76 @@
1
+ import { CloseModalOptions, SolanaPoolInfo } from '@huma-finance/shared'
2
+ import { SolanaPoolState } from '@huma-finance/web-shared'
3
+ import React, { useEffect } from 'react'
4
+ import { useDispatch } from 'react-redux'
5
+
6
+ import { useAppSelector } from '../../../hooks/useRedux'
7
+ import { setStep } from '../../../store/widgets.reducers'
8
+ import { selectWidgetState } from '../../../store/widgets.selectors'
9
+ import { WIDGET_STEP } from '../../../store/widgets.store'
10
+ import { ErrorModal } from '../../ErrorModal'
11
+ import { WidgetWrapper } from '../../WidgetWrapper'
12
+ import { Transfer } from './2-Transfer'
13
+ import { Success } from './3-Success'
14
+ import { ApproveAllowance } from './1-ApproveAllowance'
15
+
16
+ /**
17
+ * Lend pool supply props
18
+ * @typedef {Object} SolanaEnableAutoRedemptionProps
19
+ * @property {SolanaPoolInfo} poolInfo The metadata of the pool.
20
+ * @property {SolanaPoolState} poolState The current state config of the pool.
21
+ * @property {function((CloseModalOptions|undefined)):void} handleClose Function to notify to close the widget modal when user clicks the 'x' close button.
22
+ * @property {function():void|undefined} handleSuccess Optional function to notify that the lending pool supply action is successful.
23
+ */
24
+ export interface SolanaEnableAutoRedemptionProps {
25
+ poolInfo: SolanaPoolInfo
26
+ poolState: SolanaPoolState
27
+ handleClose: (options?: CloseModalOptions) => void
28
+ handleSuccess?: () => void
29
+ }
30
+
31
+ export function SolanaEnableAutoRedemption({
32
+ poolInfo,
33
+ poolState,
34
+ handleClose,
35
+ handleSuccess,
36
+ }: SolanaEnableAutoRedemptionProps): React.ReactElement | null {
37
+ const dispatch = useDispatch()
38
+ const { step, errorMessage } = useAppSelector(selectWidgetState)
39
+
40
+ useEffect(() => {
41
+ if (!step) {
42
+ dispatch(setStep(WIDGET_STEP.ApproveAllowance))
43
+ }
44
+ }, [dispatch, step])
45
+
46
+ return (
47
+ <WidgetWrapper
48
+ isOpen
49
+ loadingTitle='Auto-Redemption'
50
+ handleClose={handleClose}
51
+ handleSuccess={handleSuccess}
52
+ >
53
+ {step === WIDGET_STEP.ApproveAllowance && (
54
+ <ApproveAllowance poolState={poolState} />
55
+ )}
56
+ {step === WIDGET_STEP.Transfer && (
57
+ <Transfer poolInfo={poolInfo} poolState={poolState} />
58
+ )}
59
+ {step === WIDGET_STEP.Done && (
60
+ <Success
61
+ poolInfo={poolInfo}
62
+ poolState={poolState}
63
+ handleAction={handleClose}
64
+ />
65
+ )}
66
+ {step === WIDGET_STEP.Error && (
67
+ <ErrorModal
68
+ title='Auto-Redemption'
69
+ errorReason='Sorry there was an error'
70
+ errorMessage={errorMessage}
71
+ handleOk={handleClose}
72
+ />
73
+ )}
74
+ </WidgetWrapper>
75
+ )
76
+ }
@@ -66,7 +66,7 @@ export function ChooseAmount({
66
66
  }
67
67
 
68
68
  const handleAction = () => {
69
- dispatch(setStep(WIDGET_STEP.Transfer))
69
+ dispatch(setStep(WIDGET_STEP.ApproveAllowance))
70
70
  }
71
71
 
72
72
  const getTrancheCap = () => {
@@ -125,7 +125,7 @@ export function ChooseAmount({
125
125
  )} balance`}
126
126
  infos={getInfos()}
127
127
  handleAction={handleAction}
128
- actionText='SUPPLY'
128
+ actionText='NEXT'
129
129
  />
130
130
  )
131
131
  }
@@ -0,0 +1,59 @@
1
+ import React, { useCallback } from 'react'
2
+ import { Box, css, useTheme } from '@mui/material'
3
+ import { getLenderLockupDates, SolanaPoolState } from '@huma-finance/web-shared'
4
+ import { timeUtil } from '@huma-finance/shared'
5
+ import { useAppDispatch } from '../../../hooks/useRedux'
6
+ import { WrapperModal } from '../../WrapperModal'
7
+ import { WIDGET_STEP } from '../../../store/widgets.store'
8
+ import { setStep } from '../../../store/widgets.reducers'
9
+ import { BottomButton } from '../../BottomButton'
10
+ import { AutoPaybackImg } from '../../images'
11
+
12
+ type Props = {
13
+ poolState: SolanaPoolState
14
+ }
15
+
16
+ export function ApproveAllowance({ poolState }: Props): React.ReactElement {
17
+ const theme = useTheme()
18
+ const dispatch = useAppDispatch()
19
+ const handleNext = useCallback(() => {
20
+ dispatch(setStep(WIDGET_STEP.Transfer))
21
+ }, [dispatch])
22
+
23
+ const styles = {
24
+ iconWrapper: css`
25
+ ${theme.cssMixins.rowCentered};
26
+ margin-top: ${theme.spacing(6)};
27
+ & > img {
28
+ width: 220px;
29
+ }
30
+ `,
31
+ description: css`
32
+ margin-top: ${theme.spacing(4)};
33
+ font-weight: 400;
34
+ font-size: 16px;
35
+ color: ${theme.palette.text.secondary};
36
+ padding: ${theme.spacing(0, 1)};
37
+ `,
38
+ }
39
+
40
+ const { lockupEndTimeUnix } = getLenderLockupDates(
41
+ poolState.withdrawalLockupPeriodDays ?? 0,
42
+ )
43
+ return (
44
+ <WrapperModal title='Auto-Redemption'>
45
+ <Box css={styles.iconWrapper}>
46
+ <img src={AutoPaybackImg} alt='auto-payback' />
47
+ </Box>
48
+ <Box css={styles.description}>
49
+ This transaction will also enable auto-redemption for your tranche
50
+ shares by approving our automation account as a delegate. Redemption
51
+ requests will be automatically submitted on{' '}
52
+ {timeUtil.timestampToLL(lockupEndTimeUnix)}.
53
+ </Box>
54
+ <BottomButton variant='contained' onClick={handleNext}>
55
+ SUPPLY
56
+ </BottomButton>
57
+ </WrapperModal>
58
+ )
59
+ }
@@ -2,7 +2,6 @@ import {
2
2
  CampaignService,
3
3
  checkIsDev,
4
4
  convertToShares,
5
- getSentinelAddress,
6
5
  getTokenAccounts,
7
6
  SolanaPoolInfo,
8
7
  SolanaTokenUtils,
@@ -14,6 +13,7 @@ import {
14
13
  SolanaPoolState,
15
14
  useHumaProgram,
16
15
  useLenderAccounts,
16
+ useTrancheTokenAccounts,
17
17
  } from '@huma-finance/web-shared'
18
18
  import {
19
19
  createApproveCheckedInstruction,
@@ -62,6 +62,11 @@ export function Transfer({
62
62
  juniorTrancheMintSupply,
63
63
  loading: isLoadingLenderAccounts,
64
64
  } = useLenderAccounts(poolInfo.chainId, poolInfo.poolName)
65
+ const {
66
+ seniorTokenAccount,
67
+ juniorTokenAccount,
68
+ loading: isLoadingTrancheTokenAccounts,
69
+ } = useTrancheTokenAccounts(poolInfo)
65
70
  const program = useHumaProgram(poolInfo.chainId)
66
71
 
67
72
  const handleSuccess = useCallback(
@@ -94,7 +99,12 @@ export function Transfer({
94
99
 
95
100
  useEffect(() => {
96
101
  async function getTx() {
97
- if (!publicKey || transaction || isLoadingLenderAccounts) {
102
+ if (
103
+ !publicKey ||
104
+ transaction ||
105
+ isLoadingLenderAccounts ||
106
+ isLoadingTrancheTokenAccounts
107
+ ) {
98
108
  return
99
109
  }
100
110
 
@@ -164,6 +174,17 @@ export function Transfer({
164
174
  : juniorTrancheMintSupply ?? new BN(0),
165
175
  supplyBigNumber,
166
176
  )
177
+ const existingShares = convertToShares(
178
+ selectedTranche === 'senior'
179
+ ? new BN(poolState.seniorTrancheAssets ?? 0)
180
+ : new BN(poolState.juniorTrancheAssets ?? 0),
181
+ selectedTranche === 'senior'
182
+ ? seniorTrancheMintSupply ?? new BN(0)
183
+ : juniorTrancheMintSupply ?? new BN(0),
184
+ selectedTranche === 'senior'
185
+ ? new BN(seniorTokenAccount?.amount.toString() ?? '0')
186
+ : new BN(juniorTokenAccount?.amount.toString() ?? '0'),
187
+ )
167
188
  tx.add(
168
189
  createApproveCheckedInstruction(
169
190
  selectedTranche === 'senior' ? seniorTrancheATA : juniorTrancheATA,
@@ -174,7 +195,7 @@ export function Transfer({
174
195
  ),
175
196
  new PublicKey(poolInfo.poolAuthority), // delegate
176
197
  publicKey, // owner of the wallet
177
- BigInt(sharesAmount.muln(1.1).toString()), // amount
198
+ BigInt(sharesAmount.muln(1.1).add(existingShares).toString()), // amount
178
199
  poolInfo.trancheDecimals,
179
200
  undefined, // multiSigners
180
201
  TOKEN_2022_PROGRAM_ID,
@@ -186,8 +207,10 @@ export function Transfer({
186
207
  getTx()
187
208
  }, [
188
209
  isLoadingLenderAccounts,
210
+ isLoadingTrancheTokenAccounts,
189
211
  juniorLenderApprovedAccountPDA,
190
212
  juniorLenderStateAccount,
213
+ juniorTokenAccount?.amount,
191
214
  juniorTrancheMintSupply,
192
215
  poolInfo,
193
216
  poolState.juniorTrancheAssets,
@@ -197,12 +220,13 @@ export function Transfer({
197
220
  selectedTranche,
198
221
  seniorLenderApprovedAccountPDA,
199
222
  seniorLenderStateAccount,
223
+ seniorTokenAccount?.amount,
200
224
  seniorTrancheMintSupply,
201
225
  supplyBigNumber,
202
226
  transaction,
203
227
  ])
204
228
 
205
- if (isLoadingLenderAccounts) {
229
+ if (isLoadingLenderAccounts || isLoadingTrancheTokenAccounts) {
206
230
  return <LoadingModal title='Supply' />
207
231
  }
208
232
 
@@ -23,6 +23,7 @@ import { ChooseTranche } from './2-ChooseTranche'
23
23
  import { ChooseAmount } from './3-ChooseAmount'
24
24
  import { Transfer } from './4-Transfer'
25
25
  import { Success } from './5-Success'
26
+ import { ApproveAllowance } from './4-ApproveAllowance'
26
27
 
27
28
  export interface Campaign {
28
29
  id: string
@@ -143,6 +144,9 @@ export function SolanaLendSupply({
143
144
  isUniTranche={isUniTranche}
144
145
  />
145
146
  )}
147
+ {step === WIDGET_STEP.ApproveAllowance && (
148
+ <ApproveAllowance poolState={poolState} />
149
+ )}
146
150
  {step === WIDGET_STEP.Transfer && selectedTranche && (
147
151
  <Transfer
148
152
  poolInfo={poolInfo}
package/src/index.tsx CHANGED
@@ -90,6 +90,10 @@ import {
90
90
  SolanaPaymentProps,
91
91
  } from './components/CreditLine/solanaPayment'
92
92
  import { NotifiContextWrapper } from './components/Notifi/NotifiContextWrapper'
93
+ import {
94
+ SolanaEnableAutoRedemption,
95
+ SolanaEnableAutoRedemptionProps,
96
+ } from './components/Lend/solanaEnableAutoRedemption'
93
97
 
94
98
  /**
95
99
  * Mapping of your JSON-RPC connections indexed by chainId
@@ -667,4 +671,26 @@ export function SolanaPaymentWidget(props: SolanaPaymentWidgetProps) {
667
671
  )
668
672
  }
669
673
 
674
+ /**
675
+ * Lend pool supply widget props for Solana pools
676
+ * @typedef {Object} SolanaEnableAutoRedemptionWidgetProps
677
+ */
678
+ type SolanaEnableAutoRedemptionWidgetProps = SolanaEnableAutoRedemptionProps &
679
+ SolanaWidgetProps
680
+
681
+ /**
682
+ * Lend pool supply widget for Solana pools
683
+ *
684
+ * @param {SolanaEnableAutoRedemptionWidgetProps} props - Widget props
685
+ */
686
+ export function SolanaEnableAutoRedemptionWidget(
687
+ props: SolanaEnableAutoRedemptionWidgetProps,
688
+ ) {
689
+ return (
690
+ <SolanaWidget {...props}>
691
+ <SolanaEnableAutoRedemption {...props} />
692
+ </SolanaWidget>
693
+ )
694
+ }
695
+
670
696
  export * from './components/Notifi/NotifiContextWrapper'