Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion examples/privy/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"@mui/material": "^7.3.6",
"@privy-io/react-auth": "^2.25.0",
"@privy-io/wagmi": "^1.0.6",
"@solana/kit": "^3.0.3",
"@solana/kit": "^5.1.0",
"@solana/wallet-adapter-base": "^0.9.27",
"@solana/wallet-adapter-react": "^0.15.39",
"@solana/web3.js": "^1.98.4",
Expand Down
2 changes: 1 addition & 1 deletion packages/wallet-management/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@
"dependencies": {
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.1",
"@lifi/sdk": "^4.0.0-alpha.7",
"@lifi/sdk": "^4.0.0-alpha.8",
"@lifi/widget-provider": "workspace:*",
"@mui/icons-material": "^7.3.6",
"@mui/material": "^7.3.6",
Expand Down
2 changes: 1 addition & 1 deletion packages/widget-embedded/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
},
"author": "Eugene Chybisov <eugene@li.finance>",
"dependencies": {
"@lifi/sdk": "^4.0.0-alpha.7",
"@lifi/sdk": "^4.0.0-alpha.8",
"@lifi/wallet-management": "workspace:*",
"@lifi/widget": "workspace:*",
"@lifi/widget-provider-bitcoin": "workspace:*",
Expand Down
3 changes: 0 additions & 3 deletions packages/widget-playground/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,6 @@
"@reown/appkit-adapter-solana": "^1.8.15",
"@reown/appkit-adapter-wagmi": "^1.8.15",
"@reown/appkit-common": "^1.8.15",
"@solana/wallet-adapter-base": "^0.9.27",
"@solana/wallet-adapter-react": "^0.15.39",
"@solana/web3.js": "^1.98.4",
"@walletconnect/ethereum-provider": "~2.21.1",
"csstype": "^3.2.3",
"lodash.isequal": "^4.5.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ export function ReownWalletProvider({
projectId: EVMWalletConnectId,
ssr: false,
})
const solanaAdapter = new SolanaAdapter()
const solanaAdapter = new SolanaAdapter({ registerWalletStandard: true })

const appKit = createAppKit({
adapters: [wagmiAdapter, solanaAdapter],
Expand Down
Original file line number Diff line number Diff line change
@@ -1,46 +1,30 @@
import { useAppKitProvider } from '@reown/appkit/react'
import { useSolanaWalletStandard } from '@lifi/widget-provider-solana'
import { useAppKitProvider, useAppKitState } from '@reown/appkit/react'
import type { Provider as SolanaWalletProvider } from '@reown/appkit-adapter-solana'
import type { Adapter, WalletName } from '@solana/wallet-adapter-base'
import { WalletAdapterNetwork } from '@solana/wallet-adapter-base'
import {
ConnectionProvider,
useWallet,
WalletProvider,
} from '@solana/wallet-adapter-react'
import { clusterApiUrl } from '@solana/web3.js'
import { type FC, type PropsWithChildren, useEffect } from 'react'

const endpoint = clusterApiUrl(WalletAdapterNetwork.Mainnet)
const wallets: Adapter[] = []

const SolanaConnectedWalletKey = 'li.fi-widget-recent-wallet'

export const SolanaProvider: FC<PropsWithChildren> = ({ children }) => {
return (
<ConnectionProvider endpoint={endpoint}>
<WalletProvider
wallets={wallets}
localStorageKey={SolanaConnectedWalletKey}
autoConnect
>
<SolanaReownHandler />
{children}
</WalletProvider>
</ConnectionProvider>
)
}

const SolanaReownHandler: FC = () => {
const { walletProvider: solanaProvider } =
useAppKitProvider<SolanaWalletProvider>('solana')
const { disconnect, select } = useWallet()
const { initialized } = useAppKitState()

const { connect, disconnect } = useSolanaWalletStandard()

useEffect(() => {
if (solanaProvider?.name) {
select(solanaProvider.name as WalletName)
if (initialized) {
if (solanaProvider?.name) {
connect(solanaProvider.name, { silent: true })
} else {
disconnect()
}
}

return () => {
disconnect()
if (initialized) {
disconnect()
}
}
}, [disconnect, select, solanaProvider?.name])
return null
}, [solanaProvider?.name, connect, disconnect, initialized])

return children
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,10 @@ import { WidgetWalletConfigUpdater } from './WidgetWalletConfigUpdater.js'

export const WalletProvider: FC<PropsWithChildren> = ({ children }) => {
const { config } = useConfig()

const { chains, isLoading } = useWidgetChains(config as WidgetConfig)

if (!chains?.length || isLoading) {
return null
return children
}

return (
Expand Down
4 changes: 2 additions & 2 deletions packages/widget-provider-bitcoin/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@
"dependencies": {
"@bigmi/client": "^0.6.4",
"@bigmi/core": "^0.6.4",
"@lifi/sdk": "^4.0.0-alpha.7",
"@lifi/sdk-provider-bitcoin": "^4.0.0-alpha.7",
"@lifi/sdk": "^4.0.0-alpha.8",
"@lifi/sdk-provider-bitcoin": "^4.0.0-alpha.8",
"@lifi/widget-provider": "workspace:*"
},
"peerDependencies": {
Expand Down
4 changes: 2 additions & 2 deletions packages/widget-provider-ethereum/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@
"lifi"
],
"dependencies": {
"@lifi/sdk": "^4.0.0-alpha.7",
"@lifi/sdk-provider-ethereum": "^4.0.0-alpha.7",
"@lifi/sdk": "^4.0.0-alpha.8",
"@lifi/sdk-provider-ethereum": "^4.0.0-alpha.8",
"@lifi/widget-provider": "workspace:*",
"viem": "^2.43.5"
},
Expand Down
12 changes: 6 additions & 6 deletions packages/widget-provider-solana/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,15 +42,15 @@
"lifi"
],
"dependencies": {
"@lifi/sdk": "^4.0.0-alpha.7",
"@lifi/sdk-provider-solana": "^4.0.0-alpha.7",
"@lifi/sdk": "^4.0.0-alpha.8",
"@lifi/sdk-provider-solana": "^4.0.0-alpha.8",
"@lifi/widget-provider": "workspace:*",
"@solana/wallet-adapter-base": "^0.9.27",
"@solana/wallet-adapter-coinbase": "^0.1.23",
"@solana/web3.js": "^1.98.4"
"@wallet-standard/app": "^1.1.0",
"@wallet-standard/base": "^1.1.0",
"@wallet-standard/features": "^1.1.0",
"zustand": "^5.0.9"
},
"peerDependencies": {
"@solana/wallet-adapter-react": ">=0.15.39",
"bs58": ">=4.0.1"
},
"devDependencies": {
Expand Down
53 changes: 53 additions & 0 deletions packages/widget-provider-solana/src/hooks/useWalletAccount.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import type { AccountInfo } from '../wallet-standard/types.js'
import { useSolanaWalletStandard } from '../wallet-standard/useSolanaWalletStandard.js'

export interface UseWalletAccountReturn {
/** Currently selected account address */
address: string | null
/** All available accounts from connected wallet */
accounts: AccountInfo[]
/** Currently selected account full info */
account: AccountInfo | null
/** Switch to a different account */
selectAccount: (address: string) => Promise<void>
}

/**
* Hook to access wallet account information
*
* @example
* ```tsx
* function AccountSelector() {
* const { address, accounts, selectAccount } = useWalletAccount()
*
* if (!address) return null
*
* return (
* <div>
* <p>Current: {address}</p>
* {accounts.length > 1 && (
* <select value={address} onChange={(e) => selectAccount(e.target.value)}>
* {accounts.map(acc => (
* <option key={acc.address} value={acc.address}>
* {acc.address.slice(0, 8)}...
* </option>
* ))}
* </select>
* )}
* </div>
* )
* }
* ```
*/
export function useWalletAccount(): UseWalletAccountReturn {
const { accounts, selectAccount, selectedAccount } = useSolanaWalletStandard()

return {
address: selectedAccount,
accounts,
account: selectedAccount
? accounts.find((acc) => acc.address === selectedAccount) || null
: null,
selectAccount,
}
}
11 changes: 11 additions & 0 deletions packages/widget-provider-solana/src/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1,12 @@
export {
type UseWalletAccountReturn,
useWalletAccount,
} from './hooks/useWalletAccount'
export { SolanaProvider } from './providers/SolanaProvider.js'
export type {
AccountInfo,
SolanaWalletStandardState,
WalletInfo,
WalletStandardConfig,
} from './wallet-standard/types.js'
export { useSolanaWalletStandard } from './wallet-standard/useSolanaWalletStandard.js'

This file was deleted.

30 changes: 5 additions & 25 deletions packages/widget-provider-solana/src/providers/SolanaProvider.tsx
Original file line number Diff line number Diff line change
@@ -1,34 +1,14 @@
import type { WidgetProviderProps } from '@lifi/widget-provider'
import { ConnectionContext } from '@solana/wallet-adapter-react'
import { type PropsWithChildren, useContext } from 'react'
import { SolanaBaseProvider } from './SolanaBaseProvider'
import { SolanaProviderValues } from './SolanaProviderValues'

function useInSolanaContext(): boolean {
const context = useContext(ConnectionContext)
return Boolean(context?.connection)
}
import type { PropsWithChildren } from 'react'
import { SolanaProviderValues } from './SolanaProviderValues.js'

const SolanaWidgetProvider = ({
forceInternalWalletManagement,
children,
}: PropsWithChildren<WidgetProviderProps>) => {
const inSolanaContext = useInSolanaContext()

if (inSolanaContext && !forceInternalWalletManagement) {
return (
<SolanaProviderValues isExternalContext={inSolanaContext}>
{children}
</SolanaProviderValues>
)
}

return (
<SolanaBaseProvider>
<SolanaProviderValues isExternalContext={inSolanaContext}>
{children}
</SolanaProviderValues>
</SolanaBaseProvider>
<SolanaProviderValues isExternalContext={false}>
{children}
</SolanaProviderValues>
)
}

Expand Down
Loading