Skip to content
Open
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
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { ReactNode, createContext, useCallback, useContext, useEffect, useState

import { APP_PATHS } from 'constants/index'

import { createFordefiProvider } from './providers/fordefi'
import { createLedgerProvider } from './providers/ledger'
import { createOkxProvider } from './providers/okx'
import { createUnisatProvider } from './providers/unisat'
Expand Down Expand Up @@ -77,13 +78,15 @@ export const BitcoinWalletProvider = ({ children }: { children: ReactNode }) =>
const xverseProvider = enhanceProvider(createXverseProvider(createProviderPrams))
const okxProvider = enhanceProvider(createOkxProvider(createProviderPrams))
const unisatProvider = enhanceProvider(createUnisatProvider(createProviderPrams))
const fordefiProvider = enhanceProvider(createFordefiProvider(createProviderPrams))
// const bitgetProvider = enhanceProvider(createBitgetProvider(createProviderPrams))
const ledgerProvider = enhanceProvider(createLedgerProvider(createProviderPrams))

providers.push(xverseProvider)
// providers.push(bitgetProvider)
providers.push(okxProvider)
providers.push(unisatProvider)
providers.push(fordefiProvider)
providers.push(ledgerProvider)

if (window.location.pathname === APP_PATHS.CROSS_CHAIN) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
import { BitcoinWalletBase, CreateProviderParams, SendBitcoinParams } from '../types'

const getFordefiUnisatProvider = () => window.FordefiProviders?.UtxoProvider?.unisatProvider

export const createFordefiProvider = ({
connectingWallet,
setConnectingWallet,
setWalletInfo,
defaultInfo,
}: CreateProviderParams): BitcoinWalletBase => {
const handleAccountsChanged = async (accounts: string[]) => {
if (accounts.length === 0) {
setWalletInfo(defaultInfo)
localStorage.removeItem('bitcoinWallet')
} else {
try {
const provider = getFordefiUnisatProvider()
const publicKey = await provider?.getPublicKey()
setWalletInfo({
isConnected: true,
address: accounts[0],
publicKey,
walletType: 'fordefi',
})
} catch (error) {
console.log('Error updating Fordefi wallet info after account change:', error)
}
}
}

const handleDisconnect = () => {
setWalletInfo(defaultInfo)
localStorage.removeItem('bitcoinWallet')
}

const setupEventListeners = () => {
const provider = getFordefiUnisatProvider()
provider?.on?.('accountsChanged', handleAccountsChanged)
provider?.on?.('disconnect', handleDisconnect)
}

const removeEventListeners = () => {
const provider = getFordefiUnisatProvider()
provider?.removeListener?.('accountsChanged', handleAccountsChanged)
provider?.removeListener?.('disconnect', handleDisconnect)
}

return {
name: 'Fordefi',
logo: 'https://storage.googleapis.com/ks-setting-1d682dca/5b0d4c33-2378-4f4b-9c5b-a7791b08b1af1780471044959.png',
type: 'fordefi' as const,
isInstalled: () => !!getFordefiUnisatProvider(),
connect: async () => {
const provider = getFordefiUnisatProvider()
if (!provider) {
window.open('https://www.fordefi.com/', '_blank')
return
}
if (!!connectingWallet) {
return
}
setConnectingWallet('fordefi')
const currentNetwork = await provider.getNetwork()
if (currentNetwork !== 'livenet') {
await provider.switchNetwork('livenet')
}
const [accounts, publicKey] = await Promise.all([provider.requestAccounts(), provider.getPublicKey()])

setWalletInfo({
isConnected: true,
address: accounts[0],
publicKey,
walletType: 'fordefi',
})
setConnectingWallet(null)
setupEventListeners()
},
disconnect: async () => {
removeEventListeners()
localStorage.removeItem('bitcoinWallet')
setWalletInfo(defaultInfo)
},
sendBitcoin: async ({ recipient, amount, options }: SendBitcoinParams) => {
return await getFordefiUnisatProvider()?.sendBitcoin(recipient, Number(amount), options)
},
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export type WalletType = 'xverse' | 'okx' | 'unisat' | 'bitget' | 'ledger'
export type WalletType = 'xverse' | 'okx' | 'unisat' | 'fordefi' | 'bitget' | 'ledger'

export interface SendBitcoinParams {
sender?: string // required for ledger
Expand Down
1 change: 1 addition & 0 deletions apps/kyberswap-interface/src/react-app-env.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,5 +51,6 @@ interface Window {
zESettings?: any

XverseProviders?: { BitcoinProvider: any }
FordefiProviders?: { UtxoProvider?: { unisatProvider?: any } }
bitkeep?: any
}
Loading