@unisat/wallet-state 1.0.1 → 1.0.2
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/lib/index.d.mts +934 -0
- package/lib/index.d.ts +934 -0
- package/lib/index.js +2225 -0
- package/lib/index.js.map +1 -0
- package/lib/index.mjs +2124 -0
- package/lib/index.mjs.map +1 -0
- package/package.json +8 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/reducers/accounts.ts","../src/actions/global.ts","../src/reducers/discovery.ts","../src/reducers/global.ts","../src/reducers/keyrings.ts","../src/reducers/settings.ts","../src/reducers/transactions.ts","../src/reducers/ui.ts","../src/context/I18nContext.tsx","../src/context/WalletContext.tsx","../src/context/PriceContext.tsx","../src/hooks/settings.ts","../src/utils/bitcoin-utils.ts","../src/utils/i18n.ts","../src/hooks/accounts.ts","../src/hooks/base.ts","../src/hooks/keyrings.ts","../src/hooks/approval.ts","../src/hooks/discovery.ts","../src/hooks/global.ts","../src/hooks/i18n.ts","../src/hooks/transactions.ts","../src/hooks/ui.ts","../src/updater/accounts.ts","../src/utils/eventBus.ts"],"names":["createSlice","initialState","slice","ChainType","createContext","jsx","error","t","useCallback","useContext","useEffect","useState","AddressType","NetworkType","res","FALLBACK_LOCALE","LOCALE_NAMES","useMemo","useRef"],"mappings":"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","sourcesContent":["import { load, save } from 'redux-localstorage-simple'\n\nimport { configureStore } from '@reduxjs/toolkit'\nimport { setupListeners } from '@reduxjs/toolkit/query/react'\n\nimport accounts from './reducers/accounts'\nimport discovery from './reducers/discovery'\nimport { updateVersion } from './actions/global'\nimport global from './reducers/global'\nimport keyrings from './reducers/keyrings'\nimport settings from './reducers/settings'\nimport transactions from './reducers/transactions'\nimport ui from './reducers/ui'\n\nconst PERSISTED_KEYS: string[] = ['ui', 'discovery']\nconst store = configureStore({\n reducer: {\n accounts,\n transactions,\n settings,\n global,\n keyrings,\n ui,\n discovery,\n },\n middleware: getDefaultMiddleware =>\n getDefaultMiddleware({ thunk: true }).concat(save({ states: PERSISTED_KEYS, debounce: 1000 })),\n preloadedState: load({ states: PERSISTED_KEYS, disableWarnings: true }),\n})\n\nstore.dispatch(updateVersion())\n\nsetupListeners(store.dispatch)\n\nexport default store\n\nexport type AppState = ReturnType<typeof store.getState>\nexport type AppDispatch = typeof store.dispatch\n\nexport * from './context'\nexport * from './hooks'\nexport * from './updater'\n","import {\n Account,\n AddressSummary,\n AppSummary,\n BitcoinBalanceV2,\n Inscription,\n InscriptionSummary,\n TxHistoryItem,\n} from '@unisat/wallet-shared'\nimport { createSlice, Slice } from '@reduxjs/toolkit'\n\nimport { updateVersion } from '../actions/global'\n\nexport interface AccountsState {\n accounts: Account[]\n current: Account\n loading: boolean\n balanceMap: {\n [key: string]: {\n amount: string\n btc_amount: string\n confirm_btc_amount: string\n pending_btc_amount: string\n inscription_amount: string\n expired: boolean\n }\n }\n balanceV2Map: {\n [key: string]: BitcoinBalanceV2\n }\n historyMap: {\n [key: string]: {\n list: TxHistoryItem[]\n expired: boolean\n }\n }\n inscriptionsMap: {\n [key: string]: {\n list: Inscription[]\n expired: boolean\n }\n }\n appSummary: AppSummary\n inscriptionSummary: InscriptionSummary\n addressSummary: AddressSummary\n}\n\nconst initialAccount = {\n type: '',\n address: '',\n brandName: '',\n alianName: '',\n displayBrandName: '',\n index: 0,\n balance: 0,\n pubkey: '',\n key: '',\n flag: 0,\n}\n\nexport const initialState: AccountsState = {\n accounts: [],\n current: initialAccount,\n loading: false,\n balanceMap: {},\n balanceV2Map: {},\n historyMap: {},\n inscriptionsMap: {},\n appSummary: {\n apps: [],\n },\n inscriptionSummary: {\n mintedList: [],\n },\n addressSummary: {\n totalSatoshis: 0,\n btcSatoshis: 0,\n assetSatoshis: 0,\n inscriptionCount: 0,\n brc20Count: 0,\n brc20Count5Byte: 0,\n brc20Count6Byte: 0,\n loading: true,\n address: '',\n runesCount: 0,\n },\n}\n\nconst slice: Slice<AccountsState> = createSlice({\n name: 'accounts',\n initialState,\n reducers: {\n pendingLogin(state) {\n state.loading = true\n },\n setCurrent(state, action: { payload: Account }) {\n const { payload } = action\n state.current = payload || initialAccount\n },\n setAccounts(state, action: { payload: Account[] }) {\n const { payload } = action\n state.accounts = payload\n },\n setBalance(\n state,\n action: {\n payload: {\n address: string\n amount: string\n btc_amount: string\n inscription_amount: string\n confirm_btc_amount: string\n pending_btc_amount: string\n }\n }\n ) {\n const {\n payload: {\n address,\n amount,\n btc_amount,\n inscription_amount,\n confirm_btc_amount,\n pending_btc_amount,\n },\n } = action\n state.balanceMap[address] = state.balanceMap[address] || {\n amount: '0',\n btc_amount: '0',\n inscription_amount: '0',\n confirm_btc_amount: '0',\n pending_btc_amount: '0',\n expired: true,\n }\n state.balanceMap[address]!.amount = amount\n state.balanceMap[address]!.btc_amount = btc_amount\n state.balanceMap[address]!.inscription_amount = inscription_amount\n state.balanceMap[address]!.confirm_btc_amount = confirm_btc_amount\n state.balanceMap[address]!.pending_btc_amount = pending_btc_amount\n state.balanceMap[address]!.expired = false\n },\n setBalanceV2(\n state,\n action: {\n payload: {\n address: string\n balance: BitcoinBalanceV2\n }\n }\n ) {\n const {\n payload: {\n balance: { availableBalance, unavailableBalance, totalBalance },\n address,\n },\n } = action\n state.balanceV2Map[address] = state.balanceV2Map[address] || {\n availableBalance: 0,\n unavailableBalance: 0,\n totalBalance: 0,\n }\n state.balanceV2Map[address].availableBalance = availableBalance\n state.balanceV2Map[address].unavailableBalance = unavailableBalance\n state.balanceV2Map[address].totalBalance = totalBalance\n },\n setAddressSummary(state, action: { payload: any }) {\n state.addressSummary = action.payload\n },\n expireBalance(state) {\n const balance = state.balanceMap[state.current.address]\n if (balance) {\n balance.expired = true\n }\n },\n setHistory(state, action: { payload: { address: string; list: TxHistoryItem[] } }) {\n const {\n payload: { address, list },\n } = action\n state.historyMap[address] = state.historyMap[address] || {\n list: [],\n expired: true,\n }\n state.historyMap[address].list = list\n state.historyMap[address].expired = false\n },\n expireHistory(state) {\n const history = state.historyMap[state.current.address]\n if (history) {\n history.expired = true\n }\n },\n setInscriptions(state, action: { payload: { address: string; list: Inscription[] } }) {\n const {\n payload: { address, list },\n } = action\n state.inscriptionsMap[address] = state.inscriptionsMap[address] || {\n list: [],\n expired: true,\n }\n state.inscriptionsMap[address].list = list\n state.inscriptionsMap[address].expired = false\n },\n expireInscriptions(state) {\n const inscriptions = state.inscriptionsMap[state.current.address]\n if (inscriptions) {\n inscriptions.expired = true\n }\n },\n setCurrentAccountName(state, action: { payload: string }) {\n const { payload } = action\n state.current.alianName = payload\n const account = state.accounts.find(v => v.address === state.current.address)\n if (account) {\n account.alianName = payload\n }\n },\n setCurrentAddressFlag(state, action: { payload: number }) {\n const { payload } = action\n state.current.flag = payload\n const account = state.accounts.find(v => v.address === state.current.address)\n if (account) {\n account.flag = payload\n }\n },\n setInscriptionSummary(state, action: { payload: InscriptionSummary }) {\n const { payload } = action\n state.inscriptionSummary = payload\n },\n setAppSummary(state, action: { payload: AppSummary }) {\n const { payload } = action\n state.appSummary = payload\n },\n rejectLogin(state) {\n state.loading = false\n },\n reset(state) {\n return initialState\n },\n updateAccountName(\n state,\n action: {\n payload: Account\n }\n ) {\n const account = action.payload\n if (state.current.key === account.key) {\n state.current.alianName = account.alianName!\n }\n state.accounts.forEach(v => {\n if (v.key === account.key) {\n v.alianName = account.alianName!\n }\n })\n },\n },\n extraReducers: builder => {\n builder.addCase(updateVersion, state => {\n // todo\n if (!state.addressSummary) {\n state.addressSummary = {\n totalSatoshis: 0,\n btcSatoshis: 0,\n assetSatoshis: 0,\n inscriptionCount: 0,\n brc20Count: 0,\n brc20Count5Byte: 0,\n brc20Count6Byte: 0,\n loading: true,\n address: '',\n runesCount: 0,\n }\n }\n\n if (!state.balanceV2Map) {\n state.balanceV2Map = {}\n }\n })\n },\n})\n\nexport const accountActions = slice.actions\nexport default slice.reducer\n","import { createAction } from '@reduxjs/toolkit'\n\n// fired once when the app reloads but before the app renders\n// allows any updates to be applied to store data loaded from localStorage\nexport const updateVersion = createAction<void>('global/updateVersion')\n","import { ChainType } from '@unisat/wallet-types'\nimport { AppInfo } from '@unisat/wallet-shared'\nimport { createSlice, Slice } from '@reduxjs/toolkit'\n\nexport interface DiscoveryState {\n bannerList: { id: string; img: string; link: string }[]\n appList: { tab: string; items: AppInfo[] }[]\n lastFetchTime: number\n lastFetchChainType: ChainType\n cachedBannerIds: string[]\n hasNewBanner: boolean\n}\n\nexport const initialState: DiscoveryState = {\n bannerList: [],\n appList: [],\n lastFetchTime: 0,\n lastFetchChainType: ChainType.BITCOIN_MAINNET,\n cachedBannerIds: [],\n hasNewBanner: true,\n}\n\nconst slice: Slice<DiscoveryState> = createSlice({\n name: 'discovery',\n initialState,\n reducers: {\n reset(state) {\n return initialState\n },\n setBannerList(\n state,\n action: {\n payload: {\n bannerList: { id: string; img: string; link: string }[]\n chainType: ChainType\n fetchTime: number\n }\n }\n ) {\n const { payload } = action\n const newBannerIds = payload.bannerList.map(banner => banner.id)\n const hasNewBanner = newBannerIds.some(id => !state.cachedBannerIds.includes(id))\n\n state.bannerList = payload.bannerList\n state.lastFetchChainType = payload.chainType\n state.lastFetchTime = payload.fetchTime\n state.hasNewBanner = hasNewBanner\n\n state.cachedBannerIds = newBannerIds\n },\n setAppList(\n state,\n action: {\n payload: {\n appList: { tab: string; items: AppInfo[] }[]\n chainType: ChainType\n fetchTime: number\n }\n }\n ) {\n const { payload } = action\n state.appList = payload.appList\n state.lastFetchChainType = payload.chainType\n state.lastFetchTime = payload.fetchTime\n },\n clearNewBannerFlag(state) {\n state.hasNewBanner = false\n },\n },\n})\n\nexport const discoveryActions = slice.actions\nexport default slice.reducer\n","import { createSlice, PayloadAction, Slice, SliceCaseReducers } from '@reduxjs/toolkit'\n\nimport { updateVersion } from '../actions/global'\n\nexport type TabOption = 'home' | 'discover' | 'settings'\n\nexport interface GlobalState {\n tab: TabOption\n isUnlocked: boolean\n isReady: boolean\n isBooted: boolean\n}\n\nexport const initialState: GlobalState = {\n tab: 'home',\n isUnlocked: false,\n isReady: false,\n isBooted: false,\n}\n\nconst reducers: SliceCaseReducers<GlobalState> = {\n reset: state => initialState,\n update: (\n state,\n action: PayloadAction<{\n tab?: TabOption\n isUnlocked?: boolean\n isReady?: boolean\n isBooted?: boolean\n }>\n ) => {\n const { payload } = action\n state = Object.assign({}, state, payload)\n return state\n },\n}\n\nconst slice = createSlice({\n name: 'global',\n initialState,\n reducers,\n extraReducers: builder => {\n builder.addCase(updateVersion, state => {\n // todo\n })\n },\n})\n\nexport const globalActions = slice.actions as any\n\nexport default slice.reducer\n","import { Account, WalletKeyring } from '@unisat/wallet-shared'\nimport { AddressType } from '@unisat/wallet-types'\nimport { createSlice, Slice } from '@reduxjs/toolkit'\n\nimport { updateVersion } from '../actions/global'\n\nexport interface KeyringsState {\n keyrings: WalletKeyring[]\n current: WalletKeyring\n}\n\nconst initialKeyring: WalletKeyring = {\n key: '',\n index: 0,\n type: '',\n addressType: AddressType.P2TR,\n accounts: [],\n alianName: '',\n hdPath: '',\n}\n\nexport const initialState: KeyringsState = {\n keyrings: [],\n current: initialKeyring,\n}\n\nconst slice: Slice<KeyringsState> = createSlice({\n name: 'keyrings',\n initialState,\n reducers: {\n setCurrent(state, action: { payload: WalletKeyring }) {\n const { payload } = action\n state.current = payload || initialKeyring\n },\n setKeyrings(state, action: { payload: WalletKeyring[] }) {\n const { payload } = action\n state.keyrings = payload\n },\n\n reset(state) {\n return initialState\n },\n\n updateKeyringName(state, action: { payload: WalletKeyring }) {\n const keyring = action.payload\n if (state.current.key === keyring.key) {\n state.current.alianName = keyring.alianName\n }\n state.keyrings.forEach(v => {\n if (v.key === keyring.key) {\n v.alianName = keyring.alianName\n }\n })\n },\n\n updateAccountName(state, action: { payload: Account }) {\n const account = action.payload\n\n state.current.accounts.forEach(v => {\n if (v.key === account.key) {\n v.alianName = account.alianName!\n }\n })\n\n state.keyrings.forEach(v => {\n v.accounts.forEach(w => {\n if (w.key === account.key) {\n w.alianName = account.alianName!\n }\n })\n })\n },\n },\n extraReducers: builder => {\n builder.addCase(updateVersion, state => {\n // todo\n })\n },\n})\n\nexport const keyringsActions = slice.actions\nexport default slice.reducer\n","import { DEFAULT_LOCKTIME_ID, WalletConfig } from '@unisat/wallet-shared'\nimport { ChainType, NetworkType } from '@unisat/wallet-types'\nimport { createSlice, Slice } from '@reduxjs/toolkit'\n\nimport { updateVersion } from '../actions/global'\n\nexport interface SettingsState {\n locale: string\n networkType: NetworkType\n chainType: ChainType\n walletConfig: WalletConfig\n skippedVersion: string\n autoLockTimeId: number\n developerMode: boolean\n}\n\nexport const initialState: SettingsState = {\n locale: 'English',\n networkType: NetworkType.MAINNET,\n chainType: ChainType.BITCOIN_MAINNET,\n walletConfig: {\n version: '',\n moonPayEnabled: true,\n statusMessage: '',\n endpoint: '',\n chainTip: '',\n disableUtxoTools: true,\n },\n skippedVersion: '',\n autoLockTimeId: DEFAULT_LOCKTIME_ID,\n developerMode: false,\n}\n\nconst slice: Slice<SettingsState> = createSlice({\n name: 'settings',\n initialState,\n reducers: {\n reset(state) {\n return initialState\n },\n updateSettings(\n state,\n action: {\n payload: {\n locale?: string\n networkType?: NetworkType\n walletConfig?: WalletConfig\n skippedVersion?: string\n chainType?: ChainType\n autoLockTimeId?: number\n developerMode?: boolean\n }\n }\n ) {\n const { payload } = action\n state = Object.assign({}, state, payload)\n return state\n },\n },\n extraReducers: builder => {\n builder.addCase(updateVersion, state => {\n // todo\n if (!state.networkType) {\n state.networkType = NetworkType.MAINNET\n }\n })\n },\n})\n\nexport const settingsActions = slice.actions\nexport default slice.reducer\n","import { Inscription, UnspentOutput } from '@unisat/wallet-shared'\nimport { createSlice, Slice } from '@reduxjs/toolkit'\n\nimport { updateVersion } from '../actions/global'\n\nexport interface BitcoinTx {\n fromAddress: string\n toAddress: string\n toSatoshis: number\n rawtx: string\n txid: string\n fee: number\n estimateFee: number\n changeSatoshis: number\n sending: boolean\n autoAdjust: boolean\n psbtHex: string\n feeRate: number\n toDomain: string\n enableRBF: boolean\n}\n\nexport interface OrdinalsTx {\n fromAddress: string\n toAddress: string\n inscription: Inscription\n rawtx: string\n txid: string\n fee: number\n estimateFee: number\n changeSatoshis: number\n sending: boolean\n psbtHex: string\n feeRate: number\n toDomain: string\n outputValue: number\n enableRBF: boolean\n}\n\nexport interface RunesTx {\n fromAddress: string\n toAddress: string\n rawtx: string\n txid: string\n fee: number\n estimateFee: number\n changeSatoshis: number\n sending: boolean\n psbtHex: string\n feeRate: number\n toDomain: string\n outputValue: number\n enableRBF: boolean\n runeid?: string\n runeAmount?: string\n}\n\nexport interface TransactionsState {\n bitcoinTx: BitcoinTx\n ordinalsTx: OrdinalsTx\n runesTx: RunesTx\n utxos: UnspentOutput[]\n spendUnavailableUtxos: UnspentOutput[]\n assetUtxos_inscriptions: UnspentOutput[]\n assetUtxos_runes: UnspentOutput[]\n}\n\nexport const initialState: TransactionsState = {\n bitcoinTx: {\n fromAddress: '',\n toAddress: '',\n toSatoshis: 0,\n rawtx: '',\n txid: '',\n fee: 0,\n estimateFee: 0,\n changeSatoshis: 0,\n sending: false,\n autoAdjust: false,\n psbtHex: '',\n feeRate: 5,\n toDomain: '',\n enableRBF: false,\n },\n ordinalsTx: {\n fromAddress: '',\n toAddress: '',\n inscription: {\n inscriptionId: '',\n inscriptionNumber: 0,\n address: '',\n outputValue: 0,\n preview: '',\n content: '',\n contentType: '',\n contentLength: 0,\n timestamp: 0,\n genesisTransaction: '',\n location: '',\n output: '',\n offset: 0,\n contentBody: '',\n utxoHeight: 0,\n utxoConfirmation: 0,\n },\n rawtx: '',\n txid: '',\n fee: 0,\n estimateFee: 0,\n changeSatoshis: 0,\n sending: false,\n psbtHex: '',\n feeRate: 5,\n toDomain: '',\n outputValue: 10000,\n enableRBF: false,\n },\n\n runesTx: {\n fromAddress: '',\n toAddress: '',\n rawtx: '',\n txid: '',\n fee: 0,\n estimateFee: 0,\n changeSatoshis: 0,\n sending: false,\n psbtHex: '',\n feeRate: 5,\n toDomain: '',\n outputValue: 10000,\n enableRBF: false,\n },\n utxos: [],\n spendUnavailableUtxos: [],\n assetUtxos_inscriptions: [],\n assetUtxos_runes: [],\n}\n\nconst slice: Slice<TransactionsState> = createSlice({\n name: 'transactions',\n initialState,\n reducers: {\n updateBitcoinTx(\n state,\n action: {\n payload: {\n fromAddress?: string\n toAddress?: string\n toSatoshis?: number\n changeSatoshis?: number\n rawtx?: string\n txid?: string\n fee?: number\n estimateFee?: number\n sending?: boolean\n autoAdjust?: boolean\n psbtHex?: string\n feeRate?: number\n toDomain?: string\n enableRBF?: boolean\n }\n }\n ) {\n const { payload } = action\n state.bitcoinTx = Object.assign({}, state.bitcoinTx, payload)\n },\n updateOrdinalsTx(\n state,\n action: {\n payload: {\n fromAddress?: string\n toAddress?: string\n inscription?: Inscription\n changeSatoshis?: number\n rawtx?: string\n txid?: string\n fee?: number\n estimateFee?: number\n sending?: boolean\n psbtHex?: string\n feeRate?: number\n toDomain?: string\n outputValue?: number\n enableRBF?: boolean\n }\n }\n ) {\n const { payload } = action\n state.ordinalsTx = Object.assign({}, state.ordinalsTx, payload)\n },\n\n updateRunesTx(\n state,\n action: {\n payload: {\n fromAddress?: string\n toAddress?: string\n changeSatoshis?: number\n rawtx?: string\n txid?: string\n fee?: number\n estimateFee?: number\n sending?: boolean\n psbtHex?: string\n feeRate?: number\n toDomain?: string\n outputValue?: number\n enableRBF?: boolean\n runeid?: string\n runeAmount?: string\n }\n }\n ) {\n const { payload } = action\n state.runesTx = Object.assign({}, state.runesTx, payload)\n },\n setUtxos(state, action: { payload: UnspentOutput[] }) {\n state.utxos = action.payload\n },\n setSpendUnavailableUtxos(state, action: { payload: UnspentOutput[] }) {\n state.spendUnavailableUtxos = action.payload\n },\n\n setAssetUtxosInscriptions(state, action: { payload: UnspentOutput[] }) {\n state.assetUtxos_inscriptions = action.payload\n },\n setAssetUtxosRunes(state, action: { payload: UnspentOutput[] }) {\n state.assetUtxos_runes = action.payload\n },\n reset(state) {\n return initialState\n },\n },\n\n extraReducers: builder => {\n builder.addCase(updateVersion, state => {\n if (!state.assetUtxos_inscriptions) {\n state.assetUtxos_inscriptions = []\n }\n\n if (!state.spendUnavailableUtxos) {\n state.spendUnavailableUtxos = []\n }\n\n if (!state.assetUtxos_runes) {\n state.assetUtxos_runes = []\n }\n })\n },\n})\n\nexport const transactionsActions = slice.actions\nexport default slice.reducer\n","import { Inscription } from '@unisat/wallet-shared'\nimport { createSlice, Slice } from '@reduxjs/toolkit'\n\nimport { updateVersion } from '../actions/global'\n\nexport interface UIState {\n assetTabKey: AssetTabKey\n ordinalsAssetTabKey: OrdinalsAssetTabKey\n catAssetTabKey: CATAssetTabKey\n alkanesAssetTabKey: AlkanesAssetTabKey\n uiTxCreateScreen: {\n toInfo: {\n address: string\n domain: string\n inscription?: Inscription\n }\n inputAmount: string\n enableRBF: boolean\n feeRate: number\n }\n babylonSendScreen: {\n inputAmount: string\n memo: string\n }\n navigationSource: NavigationSource\n isBalanceHidden: boolean\n}\n\nexport enum AssetTabKey {\n ORDINALS = 0,\n ATOMICALS = 1, // IGNORED\n RUNES = 2,\n CAT = 3,\n ALKANES = 4,\n}\n\nexport enum OrdinalsAssetTabKey {\n ALL = 0,\n BRC20 = 1,\n BRC20_6BYTE = 2,\n}\n\nexport enum CATAssetTabKey {\n CAT20,\n CAT721,\n CAT20_V2,\n CAT721_V2,\n}\n\nexport enum AlkanesAssetTabKey {\n TOKEN,\n COLLECTION,\n}\n\nexport enum NavigationSource {\n BACK,\n NORMAL,\n}\n\nexport const initialState: UIState = {\n assetTabKey: AssetTabKey.ORDINALS,\n ordinalsAssetTabKey: OrdinalsAssetTabKey.ALL,\n catAssetTabKey: CATAssetTabKey.CAT20,\n alkanesAssetTabKey: AlkanesAssetTabKey.TOKEN,\n uiTxCreateScreen: {\n toInfo: {\n address: '',\n domain: '',\n },\n inputAmount: '',\n enableRBF: false,\n feeRate: 1,\n },\n babylonSendScreen: {\n inputAmount: '',\n memo: '',\n },\n navigationSource: NavigationSource.NORMAL,\n isBalanceHidden: false,\n}\n\nconst slice: Slice<UIState> = createSlice({\n name: 'ui',\n initialState,\n reducers: {\n reset(state) {\n return initialState\n },\n updateAssetTabScreen(\n state,\n action: {\n payload: {\n assetTabKey?: AssetTabKey\n ordinalsAssetTabKey?: OrdinalsAssetTabKey\n catAssetTabKey?: CATAssetTabKey\n alkanesAssetTabKey?: AlkanesAssetTabKey\n }\n }\n ) {\n const { payload } = action\n if (payload.assetTabKey !== undefined) {\n state.assetTabKey = payload.assetTabKey\n }\n if (payload.ordinalsAssetTabKey !== undefined) {\n state.ordinalsAssetTabKey = payload.ordinalsAssetTabKey\n }\n\n if (payload.catAssetTabKey !== undefined) {\n state.catAssetTabKey = payload.catAssetTabKey\n }\n if (payload.alkanesAssetTabKey !== undefined) {\n state.alkanesAssetTabKey = payload.alkanesAssetTabKey\n }\n return state\n },\n updateTxCreateScreen(\n state,\n action: {\n payload: {\n toInfo?: {\n address: string\n domain: string\n inscription?: Inscription\n }\n inputAmount?: string\n enableRBF?: boolean\n feeRate?: number\n }\n }\n ) {\n if (action.payload.toInfo !== undefined) {\n state.uiTxCreateScreen.toInfo = action.payload.toInfo\n }\n if (action.payload.inputAmount !== undefined) {\n state.uiTxCreateScreen.inputAmount = action.payload.inputAmount\n }\n if (action.payload.enableRBF !== undefined) {\n state.uiTxCreateScreen.enableRBF = action.payload.enableRBF\n }\n if (action.payload.feeRate !== undefined) {\n state.uiTxCreateScreen.feeRate = action.payload.feeRate\n }\n },\n resetTxCreateScreen(state) {\n state.uiTxCreateScreen = initialState.uiTxCreateScreen\n },\n updateBabylonSendScreen(\n state,\n action: {\n payload: {\n inputAmount?: string\n memo?: string\n }\n }\n ) {\n if (action.payload.inputAmount !== undefined) {\n state.babylonSendScreen.inputAmount = action.payload.inputAmount\n }\n if (action.payload.memo !== undefined) {\n state.babylonSendScreen.memo = action.payload.memo\n }\n },\n resetBabylonSendScreen(state) {\n state.babylonSendScreen = initialState.babylonSendScreen\n },\n setNavigationSource(state, action: { payload: NavigationSource }) {\n state.navigationSource = action.payload\n },\n setBalanceHidden(state, action: { payload: boolean }) {\n state.isBalanceHidden = action.payload\n },\n },\n extraReducers: builder => {\n builder.addCase(updateVersion, state => {\n // todo\n if (!state.assetTabKey) {\n state.assetTabKey = AssetTabKey.ORDINALS\n }\n if (!state.ordinalsAssetTabKey) {\n state.ordinalsAssetTabKey = OrdinalsAssetTabKey.ALL\n }\n if (!state.catAssetTabKey) {\n state.catAssetTabKey = CATAssetTabKey.CAT20\n }\n if (!state.alkanesAssetTabKey) {\n state.alkanesAssetTabKey = AlkanesAssetTabKey.TOKEN\n }\n if (!state.uiTxCreateScreen) {\n state.uiTxCreateScreen = initialState.uiTxCreateScreen\n }\n if (!state.babylonSendScreen) {\n state.babylonSendScreen = initialState.babylonSendScreen\n }\n if (state.isBalanceHidden === undefined) {\n state.isBalanceHidden = false\n }\n })\n },\n})\n\nexport const uiActions = slice.actions\nexport default slice.reducer\n","import log from 'loglevel'\nimport React, { createContext, useEffect, useState } from 'react'\n\nimport {\n BROWSER_TO_APP_LOCALE_MAP,\n changeLanguage,\n FALLBACK_LOCALE,\n getSupportedLocales,\n initI18n,\n LOCALE_NAMES,\n t as translate,\n} from '@unisat/i18n'\nimport { useWallet } from './WalletContext'\n\ninterface I18nContextType {\n t: (key: string, substitutions?: string | string[]) => string\n locale: string\n supportedLocales: string[]\n localeNames: Record<string, string>\n changeLocale: (locale: string) => Promise<void>\n}\n\n// Create context\nexport const I18nContext = createContext<I18nContextType>({\n t: key => key,\n locale: FALLBACK_LOCALE,\n supportedLocales: [],\n localeNames: {},\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n changeLocale: async () => {},\n})\n\n// Context provider component\nexport const I18nProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const [locale, setLocale] = useState<string>(FALLBACK_LOCALE)\n const [isInitialized, setIsInitialized] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n const wallet = useWallet()\n\n // Initialize i18n\n useEffect(() => {\n const initialize = async () => {\n try {\n let localeToUse = FALLBACK_LOCALE\n // @ts-ignore\n const userSelectedLanguage = localStorage.getItem('userSelectedLanguage') === 'true'\n\n if (userSelectedLanguage) {\n // @ts-ignore\n const savedLocale = localStorage.getItem('i18nextLng')\n if (savedLocale && getSupportedLocales().includes(savedLocale)) {\n localeToUse = savedLocale\n log.debug(`Using user selected language: ${savedLocale}`)\n }\n } else {\n try {\n const isFirstOpen = await wallet.getIsFirstOpen()\n\n if (isFirstOpen) {\n // @ts-ignore\n const browserLang = navigator.language\n log.debug(`New user - Browser language: ${browserLang}`)\n\n const mappedLocale = BROWSER_TO_APP_LOCALE_MAP[browserLang]\n if (mappedLocale && getSupportedLocales().includes(mappedLocale)) {\n localeToUse = mappedLocale\n log.debug(`Using mapped browser language: ${mappedLocale}`)\n } else if (getSupportedLocales().includes(browserLang)) {\n localeToUse = browserLang\n log.debug(`Using browser language: ${browserLang}`)\n } else {\n const mainLang = browserLang.split('-')[0]\n if (getSupportedLocales().includes(mainLang)) {\n localeToUse = mainLang\n log.debug(`Using browser main language: ${mainLang}`)\n } else {\n log.debug(`Browser language not supported, using default: ${FALLBACK_LOCALE}`)\n localeToUse = FALLBACK_LOCALE\n }\n }\n } else {\n log.debug('Existing user - Using default English')\n localeToUse = FALLBACK_LOCALE\n }\n } catch (error) {\n log.error('Failed to get user status, using default language:', error)\n localeToUse = FALLBACK_LOCALE\n }\n }\n\n // @ts-ignore\n localStorage.setItem('i18nextLng', localeToUse)\n await initI18n(localeToUse)\n\n chrome.storage.local.set({ i18nextLng: localeToUse })\n await initI18n(localeToUse)\n // const currentLocale = await getCurrentLocale();\n\n // setLocale(currentLocale);\n setIsInitialized(true)\n } catch (error) {\n log.error('Failed to initialize i18n:', error)\n\n setLocale(FALLBACK_LOCALE)\n setIsInitialized(true)\n setError(error instanceof Error ? error : new Error('Unknown error'))\n }\n }\n\n initialize()\n }, [wallet])\n\n // Change language\n const changeLocale = async (newLocale: string) => {\n try {\n await changeLanguage(newLocale)\n setLocale(newLocale)\n // @ts-ignore\n localStorage.setItem('userSelectedLanguage', 'true')\n // @ts-ignore\n localStorage.setItem('i18nextLng', newLocale)\n chrome.storage.local.set({ i18nextLng: newLocale })\n } catch (error) {\n setError(error instanceof Error ? error : new Error('Unknown error'))\n }\n }\n\n // Translation function\n const t = (key: string, substitutions?: string | string[]) => {\n try {\n return translate(key, substitutions)\n } catch (error) {\n log.error(`Translation error for key \"${key}\":`, error)\n return key\n }\n }\n\n // If not yet initialized, show loading\n if (!isInitialized) {\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n width: '100vw',\n height: '100vh',\n overflowY: 'auto',\n overflowX: 'hidden',\n }}\n >\n <div\n style={{\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n justifyItems: 'center',\n alignItems: 'center',\n }}\n >\n <div />\n </div>\n </div>\n )\n }\n\n // If there is an error, show error message in development environment\n // @ts-ignore\n if (error && process.env.NODE_ENV === 'development') {\n return (\n <div style={{ color: 'red', padding: '20px' }}>\n <h2>Error initializing i18n</h2>\n <p>{error.message}</p>\n <pre>{error.stack}</pre>\n </div>\n )\n }\n\n return (\n <I18nContext.Provider\n value={{\n t,\n locale,\n supportedLocales: getSupportedLocales(),\n localeNames: LOCALE_NAMES,\n changeLocale,\n }}\n >\n {children}\n </I18nContext.Provider>\n )\n}\n","import { createContext, ReactNode, useContext } from 'react'\n\nimport {\n Account,\n AddressAlkanesTokenSummary,\n AddressCAT20TokenSummary,\n AddressCAT20UtxoSummary,\n AddressCAT721CollectionSummary,\n AddressRunesTokenSummary,\n AddressSummary,\n AddressTokenSummary,\n AlkanesBalance,\n AlkanesCollection,\n AlkanesInfo,\n AppInfo,\n AppSummary,\n BabylonAddressSummary,\n BitcoinBalance,\n BitcoinBalanceV2,\n BRC20HistoryItem,\n BtcChannelItem,\n CAT20Balance,\n CAT20MergeOrder,\n CAT721Balance,\n CoinPrice,\n CosmosBalance,\n CosmosSignDataType,\n DecodedPsbt,\n FeeSummary,\n InscribeOrder,\n Inscription,\n InscriptionSummary,\n RuneBalance,\n SignPsbtOptions,\n TickPriceItem,\n TokenBalance,\n TokenTransfer,\n TxHistoryItem,\n UserToSignInput,\n UTXO,\n UTXO_Detail,\n VersionDetail,\n WalletConfig,\n WalletKeyring,\n WebsiteResult,\n ToSignInput,\n UnspentOutput,\n AddressFlagType,\n ConnectedSite,\n} from '@unisat/wallet-shared'\nimport { BabylonConfigV2 } from '@unisat/babylon-service/types'\nimport { AddressType, ChainType, NetworkType } from '@unisat/wallet-types'\n\ninterface ContactBookItem {\n name: string\n address: string\n chain: ChainType\n isAlias: boolean\n isContact: boolean\n sortIndex?: number\n}\ntype ContactBookStore = Record<string, ContactBookItem | undefined>\n\nexport interface WalletController {\n openapi: {\n [key: string]: (...params: any) => Promise<any>\n }\n\n boot(password: string): Promise<void>\n isBooted(): Promise<boolean>\n\n getApproval(): Promise<any>\n resolveApproval(data?: any, data2?: any): Promise<void>\n rejectApproval(data?: any, data2?: any, data3?: any): Promise<void>\n\n hasVault(): Promise<boolean>\n\n verifyPassword(password: string): Promise<void>\n changePassword: (password: string, newPassword: string) => Promise<void>\n\n unlock(password: string): Promise<void>\n isUnlocked(): Promise<boolean>\n\n lockWallet(): Promise<void>\n setPopupOpen(isOpen: boolean): void\n isReady(): Promise<boolean>\n\n getIsFirstOpen(): Promise<boolean>\n updateIsFirstOpen(): Promise<void>\n\n getAddressBalanceV2(address: string): Promise<BitcoinBalanceV2>\n getAddressBalance(address: string): Promise<BitcoinBalance>\n getAddressCacheBalance(address: string): Promise<BitcoinBalance>\n getMultiAddressAssets(addresses: string): Promise<AddressSummary[]>\n findGroupAssets(\n groups: { type: number; address_arr: string[]; pubkey_arr: string[] }[]\n ): Promise<\n { type: number; address_arr: string[]; pubkey_arr: string[]; satoshis_arr: number[] }[]\n >\n\n getAddressInscriptions(\n address: string,\n cursor: number,\n size: number\n ): Promise<{ list: Inscription[]; total: number }>\n\n getAddressHistory: (params: {\n address: string\n start: number\n limit: number\n }) => Promise<{ start: number; total: number; detail: TxHistoryItem[] }>\n getAddressCacheHistory: (address: string) => Promise<TxHistoryItem[]>\n\n getLocale(): Promise<string>\n setLocale(locale: string): Promise<void>\n\n getCurrency(): Promise<string>\n setCurrency(currency: string): Promise<void>\n\n clearKeyrings(): Promise<void>\n getPrivateKey(\n password: string,\n account: { address: string; type: string }\n ): Promise<{ hex: string; wif: string }>\n getMnemonics(\n password: string,\n keyring: WalletKeyring\n ): Promise<{\n hdPath: string\n mnemonic: string\n passphrase: string\n }>\n createKeyringWithPrivateKey(\n data: string,\n addressType: AddressType,\n alianName?: string\n ): Promise<Account[]>\n getPreMnemonics(): Promise<any>\n generatePreMnemonic(): Promise<string>\n removePreMnemonics(): void\n createKeyringWithMnemonics(\n mnemonic: string,\n hdPath: string,\n passphrase: string,\n addressType: AddressType,\n accountCount: number\n ): Promise<{ address: string; type: string }[]>\n createKeyringWithKeystone(\n urType: string,\n urCbor: string,\n addressType: AddressType,\n hdPath: string,\n accountCount: number,\n filterPubkey?: string[],\n connectionType?: 'USB' | 'QR'\n ): Promise<{ address: string; type: string }[]>\n createTmpKeyringWithPrivateKey(\n privateKey: string,\n addressType: AddressType\n ): Promise<WalletKeyring>\n createTmpKeyringWithKeystone(\n urType: string,\n urCbor: string,\n addressType: AddressType,\n hdPath: string,\n accountCount?: number\n ): Promise<WalletKeyring>\n\n createKeyringWithColdWallet(\n xpub: string,\n addressType: AddressType,\n alianName?: string,\n hdPath?: string,\n accountCount?: number\n ): Promise<WalletKeyring>\n\n deriveAccountsFromXpub(\n xpub: string,\n addressType: AddressType,\n hdPath?: string,\n accountCount?: number\n ): Promise<{ pubkey: string; address: string }[]>\n\n createTmpKeyringWithMnemonics(\n mnemonic: string,\n hdPath: string,\n passphrase: string,\n addressType: AddressType,\n accountCount?: number\n ): Promise<WalletKeyring>\n removeKeyring(keyring: WalletKeyring): Promise<WalletKeyring>\n deriveNewAccountFromMnemonic(keyring: WalletKeyring, alianName?: string): Promise<string[]>\n getAccountsCount(): Promise<number>\n getAllAlianName: () => (ContactBookItem | undefined)[]\n getContactsByMap: () => ContactBookStore\n\n getCurrentAccount(): Promise<Account>\n getAccounts(): Promise<Account[]>\n getNextAlianName: (keyring: WalletKeyring) => Promise<string>\n\n getCurrentKeyringAccounts(): Promise<Account[]>\n\n signPsbtWithHex(\n psbtHex: string,\n toSignInputs: ToSignInput[],\n autoFinalized: boolean\n ): Promise<string>\n\n sendBTC(data: {\n to: string\n amount: number\n btcUtxos: UnspentOutput[]\n feeRate: number\n enableRBF: boolean\n memo?: string\n memos?: string[]\n }): Promise<{\n psbtHex: string\n rawtx: string\n fee: number\n }>\n\n sendAllBTC(data: {\n to: string\n btcUtxos: UnspentOutput[]\n feeRate: number\n enableRBF: boolean\n }): Promise<{\n psbtHex: string\n rawtx: string\n fee: number\n }>\n\n sendOrdinalsInscription(data: {\n to: string\n inscriptionId: string\n feeRate: number\n outputValue?: number\n enableRBF: boolean\n btcUtxos: UnspentOutput[]\n }): Promise<{\n psbtHex: string\n rawtx: string\n fee: number\n }>\n\n sendOrdinalsInscriptions(data: {\n to: string\n inscriptionIds: string[]\n feeRate: number\n enableRBF: boolean\n btcUtxos: UnspentOutput[]\n }): Promise<{\n psbtHex: string\n rawtx: string\n fee: number\n }>\n\n splitOrdinalsInscription(data: {\n inscriptionId: string\n feeRate: number\n outputValue: number\n enableRBF: boolean\n btcUtxos: UnspentOutput[]\n }): Promise<{\n psbtHex: string\n rawtx: string\n fee: number\n splitedCount: number\n }>\n\n pushTx(rawtx: string): Promise<string>\n\n queryDomainInfo(domain: string): Promise<Inscription>\n\n getInscriptionSummary(): Promise<InscriptionSummary>\n getAppSummary(): Promise<AppSummary>\n getBTCUtxos(): Promise<UnspentOutput[]>\n getAssetUtxosInscriptions(inscriptionId: string): Promise<UnspentOutput[]>\n\n getNetworkType(): Promise<NetworkType>\n setNetworkType(type: NetworkType): Promise<void>\n\n getChainType(): Promise<ChainType>\n setChainType(type: ChainType): Promise<void>\n\n getConnectedSites(): Promise<ConnectedSite[]>\n removeConnectedSite(origin: string): Promise<void>\n getCurrentConnectedSite(id: string): Promise<ConnectedSite>\n\n getCurrentKeyring(): Promise<WalletKeyring>\n getKeyrings(): Promise<WalletKeyring[]>\n changeKeyring(keyring: WalletKeyring, accountIndex?: number): Promise<void>\n getAllAddresses(keyring: WalletKeyring, index: number): Promise<string[]>\n\n setKeyringAlianName(keyring: WalletKeyring, name: string): Promise<WalletKeyring>\n changeAddressType(addressType: AddressType): Promise<void>\n\n setAccountAlianName(account: Account, name: string): Promise<Account>\n getFeeSummary(): Promise<FeeSummary>\n getCoinPrice(): Promise<CoinPrice>\n getBrc20sPrice(ticks: string[]): Promise<{ [tick: string]: TickPriceItem }>\n getRunesPrice(ticks: string[]): Promise<{ [tick: string]: TickPriceItem }>\n getCAT20sPrice(tokenIds: string[]): Promise<{ [tokenId: string]: TickPriceItem }>\n getAlkanesPrice(alkaneid: string[]): Promise<{ [tick: string]: TickPriceItem }>\n\n setEditingKeyring(keyringIndex: number): Promise<void>\n getEditingKeyring(): Promise<WalletKeyring>\n\n setEditingAccount(account: Account): Promise<void>\n getEditingAccount(): Promise<Account>\n\n inscribeBRC20Transfer(\n address: string,\n tick: string,\n amount: string,\n feeRate: number,\n outputValue: number\n ): Promise<InscribeOrder>\n getInscribeResult(orderId: string): Promise<TokenTransfer>\n\n decodePsbt(psbtHex: string, website: string): Promise<DecodedPsbt>\n\n decodeContracts(contracts: any[], account: any): Promise<any[]>\n\n getAllInscriptionList(\n address: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ currentPage: number; pageSize: number; total: number; list: Inscription[] }>\n\n getBRC20List(\n address: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ currentPage: number; pageSize: number; total: number; list: TokenBalance[] }>\n\n getBRC20ProgList(\n address: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ currentPage: number; pageSize: number; total: number; list: TokenBalance[] }>\n\n getBRC20TransferableList(\n address: string,\n ticker: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ currentPage: number; pageSize: number; total: number; list: TokenTransfer[] }>\n\n getOrdinalsInscriptions(\n address: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ currentPage: number; pageSize: number; total: number; list: Inscription[] }>\n\n getBRC20Summary(address: string, ticker: string): Promise<AddressTokenSummary>\n\n expireUICachedData(address: string): Promise<void>\n\n getWalletConfig(): Promise<WalletConfig>\n\n getSkippedVersion(): Promise<string>\n setSkippedVersion(version: string): Promise<void>\n\n getInscriptionUtxoDetail(inscriptionId: string): Promise<UTXO_Detail>\n getUtxoByInscriptionId(inscriptionId: string): Promise<UTXO>\n getInscriptionInfo(inscriptionId: string): Promise<Inscription>\n\n checkWebsite(website: string): Promise<WebsiteResult>\n\n readTab(tabName: string): Promise<void>\n readApp(appid: number): Promise<void>\n\n formatOptionsToSignInputs(psbtHex: string, options?: SignPsbtOptions): Promise<ToSignInput[]>\n\n getAddressSummary(address: string): Promise<AddressSummary>\n\n getShowSafeNotice(): Promise<boolean>\n setShowSafeNotice(show: boolean): Promise<void>\n\n // address flag\n addAddressFlag(account: Account, flag: AddressFlagType): Promise<Account>\n removeAddressFlag(account: Account, flag: AddressFlagType): Promise<Account>\n\n getVersionDetail(version: string): Promise<VersionDetail>\n\n genSignPsbtUr(psbtHex: string): Promise<{ type: string; cbor: string }>\n parseSignPsbtUr(\n type: string,\n cbor: string,\n isFinalize?: boolean\n ): Promise<{ psbtHex: string; rawtx?: string }>\n genSignMsgUr(\n text: string,\n msgType?: string\n ): Promise<{ type: string; cbor: string; requestId: string }>\n parseSignMsgUr(type: string, cbor: string, msgType: string): Promise<{ signature: string }>\n getKeystoneConnectionType(): Promise<'USB' | 'QR'>\n genSignCosmosUr(cosmosSignRequest: {\n requestId?: string\n signData: string\n dataType: CosmosSignDataType\n path: string\n chainId?: string\n accountNumber?: string\n address?: string\n }): Promise<{ type: string; cbor: string; requestId: string }>\n parseCosmosSignUr(type: string, cbor: string): Promise<any>\n\n cosmosSignData(\n chainId: string,\n signBytesHex: string\n ): Promise<{\n publicKey: string\n signature: string\n }>\n\n getEnableSignData(): Promise<boolean>\n setEnableSignData(enable: boolean): Promise<void>\n\n getRunesList(\n address: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ currentPage: number; pageSize: number; total: number; list: RuneBalance[] }>\n\n getAssetUtxosRunes(rune: string): Promise<UnspentOutput[]>\n\n getAddressRunesTokenSummary(address: string, runeid: string): Promise<AddressRunesTokenSummary>\n\n sendRunes(data: {\n to: string\n runeid: string\n runeAmount: string\n feeRate: number\n enableRBF: boolean\n btcUtxos?: UnspentOutput[]\n assetUtxos?: UnspentOutput[]\n outputValue?: number\n }): Promise<{\n psbtHex: string\n rawtx: string\n fee: number\n }>\n\n setAutoLockTimeId(timeId: number): Promise<void>\n getAutoLockTimeId(): Promise<number>\n\n getDeveloperMode(): Promise<boolean>\n setDeveloperMode(developerMode: boolean): Promise<void>\n\n getCAT20List(\n version: 'v1' | 'v2',\n address: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ currentPage: number; pageSize: number; total: number; list: CAT20Balance[] }>\n\n getAddressCAT20TokenSummary(\n version: 'v1' | 'v2',\n address: string,\n tokenId: string\n ): Promise<AddressCAT20TokenSummary>\n\n getAddressCAT20UtxoSummary(\n version: 'v1' | 'v2',\n address: string,\n tokenId: string\n ): Promise<AddressCAT20UtxoSummary>\n\n transferCAT20Step1(\n version: 'v1' | 'v2',\n to: string,\n tokenId: string,\n tokenAmount: string,\n feeRate: number\n ): Promise<{ id: string; commitTx: string; toSignInputs: UserToSignInput[]; feeRate: number }>\n transferCAT20Step2(\n version: 'v1' | 'v2',\n transferId: string,\n commitTx: string,\n toSignInputs: UserToSignInput[]\n ): Promise<{ revealTx: string; toSignInputs: UserToSignInput[] }>\n transferCAT20Step3(\n version: 'v1' | 'v2',\n transferId: string,\n revealTx: string,\n toSignInputs: UserToSignInput[]\n ): Promise<{ txid: string }>\n\n mergeCAT20Prepare(\n version: 'v1' | 'v2',\n tokenId: string,\n utxoCount: number,\n feeRate: number\n ): Promise<CAT20MergeOrder>\n transferCAT20Step1ByMerge(\n version: 'v1' | 'v2',\n mergeId: string\n ): Promise<{ id: string; commitTx: string; toSignInputs: UserToSignInput[]; feeRate: number }>\n getMergeCAT20Status(version: 'v1' | 'v2', mergeId: string): Promise<any>\n\n getAppList(): Promise<{ tab: string; items: AppInfo[] }[]>\n getBannerList(): Promise<{ id: string; img: string; link: string }[]>\n getBlockActiveInfo(): Promise<{ allTransactions: number; allAddrs: number }>\n\n getCAT721List(\n version: 'v1' | 'v2',\n address: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ currentPage: number; pageSize: number; total: number; list: CAT721Balance[] }>\n\n getAddressCAT721CollectionSummary(\n version: 'v1' | 'v2',\n address: string,\n collectionId: string\n ): Promise<AddressCAT721CollectionSummary>\n\n transferCAT721Step1(\n version: 'v1' | 'v2',\n to: string,\n collectionId: string,\n localId: string,\n feeRate: number\n ): Promise<{ id: string; commitTx: string; toSignInputs: UserToSignInput[]; feeRate: number }>\n transferCAT721Step2(\n version: 'v1' | 'v2',\n transferId: string,\n commitTx: string,\n toSignInputs: UserToSignInput[]\n ): Promise<{ revealTx: string; toSignInputs: UserToSignInput[] }>\n transferCAT721Step3(\n version: 'v1' | 'v2',\n transferId: string,\n revealTx: string,\n toSignInputs: UserToSignInput[]\n ): Promise<{ txid: string }>\n\n getBuyCoinChannelList(coin: string): Promise<BtcChannelItem[]>\n createBuyCoinPaymentUrl(coin: string, address: string, channel: string): Promise<string>\n\n getBabylonAddress(address: string): Promise<string>\n\n getBabylonAddressSummary(\n chainId: string,\n babylonConfig?: BabylonConfigV2\n ): Promise<BabylonAddressSummary>\n\n createSendTokenStep1(\n chainId: string,\n tokenBalance: CosmosBalance,\n to: string,\n memo: string,\n {\n gasLimit,\n gasPrice,\n gasAdjustment,\n }: {\n gasLimit: number\n gasPrice: string\n gasAdjustment?: number\n }\n ): Promise<string>\n createSendTokenStep2(chainId: string, signature: string): Promise<string>\n\n simulateBabylonGas(\n chainId: string,\n recipient: string,\n amount: { denom: string; amount: string },\n memo: string\n ): Promise<number>\n\n getBabylonConfig(): Promise<BabylonConfigV2>\n\n getContactByAddress(address: string): Promise<ContactBookItem | undefined>\n getContactByAddressAndChain(\n address: string,\n chain: ChainType\n ): Promise<ContactBookItem | undefined>\n updateContact(data: ContactBookItem): Promise<void>\n removeContact(address: string, chain?: ChainType): Promise<void>\n listContacts(): Promise<ContactBookItem[]>\n saveContactsOrder(contacts: ContactBookItem[]): Promise<void>\n\n singleStepTransferBRC20Step1(params: {\n userAddress: string\n userPubkey: string\n receiver: string\n ticker: string\n amount: string\n feeRate: number\n }): Promise<{\n orderId: string\n psbtHex: string\n toSignInputs: UserToSignInput[]\n }>\n\n singleStepTransferBRC20Step2(params: {\n orderId: string\n commitTx: string\n toSignInputs: UserToSignInput[]\n }): Promise<{\n psbtHex: string\n toSignInputs: UserToSignInput[]\n }>\n\n singleStepTransferBRC20Step3(params: {\n orderId: string\n revealTx: string\n toSignInputs: UserToSignInput[]\n }): Promise<{ txid: string }>\n\n setLastActiveTime(): void\n\n getOpenInSidePanel(): Promise<boolean>\n setOpenInSidePanel(openInSidePanel: boolean): Promise<void>\n\n sendCoinBypassHeadOffsets(\n tos: { address: string; satoshis: number }[],\n feeRate: number\n ): Promise<{\n psbtHex: string\n rawtx: string\n fee: number\n }>\n\n getAlkanesList(\n address: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ currentPage: number; pageSize: number; total: number; list: AlkanesBalance[] }>\n\n getAssetUtxosAlkanes(rune: string): Promise<UnspentOutput[]>\n\n getAddressAlkanesTokenSummary(\n address: string,\n alkaneid: string,\n fetchAvailable: boolean\n ): Promise<AddressAlkanesTokenSummary>\n\n createAlkanesSendTx(params: {\n userAddress: string\n userPubkey: string\n receiver: string\n alkaneid: string\n amount: string\n feeRate: number\n }): Promise<{\n psbtHex: string\n toSignInputs: UserToSignInput[]\n }>\n\n signAlkanesSendTx(params: {\n commitTx: string\n toSignInputs: ToSignInput[]\n }): Promise<{ txid: string }>\n\n sendAlkanes(params: {\n to: string\n alkaneid: string\n amount: string\n feeRate: number\n enableRBF: boolean\n }): Promise<string>\n\n getAlkanesCollectionList(\n address: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ list: AlkanesCollection[]; total: number }>\n getAlkanesCollectionItems(\n address: string,\n collectionId: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ currentPage: number; pageSize: number; list: AlkanesInfo[]; total: number }>\n\n getBRC20RecentHistory(address: string, ticker: string): Promise<BRC20HistoryItem[]>\n}\n\nconst WalletContext = createContext<{\n wallet: WalletController\n} | null>(null)\n\nconst WalletProvider = ({\n children,\n wallet,\n}: {\n children?: ReactNode\n wallet: WalletController\n}) => <WalletContext.Provider value={{ wallet }}>{children}</WalletContext.Provider>\n\nconst useWallet = () => {\n const { wallet } = useContext(WalletContext) as {\n wallet: WalletController\n }\n\n return wallet\n}\n\nexport { useWallet, WalletProvider }\n","import { createContext, ReactNode, useCallback, useContext, useEffect, useState } from 'react'\n\nimport { CoinPrice } from '@unisat/wallet-shared'\nimport { useWallet } from './WalletContext'\n\nimport { useChain, useChainType } from '../hooks/settings'\n\ninterface PriceContextType {\n isLoadingCoinPrice: boolean\n coinPrice: CoinPrice\n refreshCoinPrice: () => void\n}\n\nconst PriceContext = createContext<PriceContextType>({} as PriceContextType)\n\nexport function usePrice() {\n const context = useContext(PriceContext)\n if (!context) {\n throw Error('Feature flag hooks can only be used by children of BridgeProvider.')\n } else {\n return context\n }\n}\n\nlet isRequestingCoinPrice = false\nlet refreshCoinPriceTime = 0\n\nexport function PriceProvider({ children }: { children: ReactNode }) {\n const wallet = useWallet()\n const chainType = useChainType()\n const chain = useChain()\n const [isLoadingCoinPrice, setIsLoadingCoinPrice] = useState(false)\n const [coinPrice, setCoinPrice] = useState<CoinPrice>({\n btc: 0,\n fb: 0,\n })\n\n const refreshCoinPrice = useCallback(() => {\n if (chain.showPrice === false) {\n return\n }\n if (isRequestingCoinPrice) {\n return\n }\n // 30s cache\n if (Date.now() - refreshCoinPriceTime < 30 * 1000) {\n return\n }\n isRequestingCoinPrice = true\n setIsLoadingCoinPrice(true)\n\n wallet\n .getCoinPrice()\n .then(res => {\n refreshCoinPriceTime = Date.now()\n setCoinPrice(res)\n })\n .catch(e => {\n setCoinPrice({\n btc: 0,\n fb: 0,\n })\n })\n .finally(() => {\n setIsLoadingCoinPrice(false)\n isRequestingCoinPrice = false\n })\n }, [chainType, chain])\n\n useEffect(() => {\n refreshCoinPrice()\n }, [refreshCoinPrice])\n\n const value = {\n isLoadingCoinPrice,\n coinPrice,\n refreshCoinPrice,\n }\n\n return <PriceContext.Provider value={value}>{children}</PriceContext.Provider>\n}\n","import compareVersions from 'compare-versions'\nimport { useCallback } from 'react'\n\nimport { CHAINS_MAP, CAT_VERSION, VERSION } from '@unisat/wallet-shared'\nimport { AddressType, ChainType, NetworkType } from '@unisat/wallet-types'\nimport { useWallet } from '../context/WalletContext'\nimport { getAddressType } from '../utils/bitcoin-utils'\nimport i18n, { addResourceBundle } from '../utils/i18n'\nimport { BABYLON_CONFIG_MAP } from '@unisat/babylon-service/types'\nimport { t } from '@unisat/i18n'\n\nimport { AppState } from '..'\nimport { useCurrentAccount } from '../hooks/accounts'\nimport { useAppDispatch, useAppSelector } from './base'\nimport { settingsActions } from '../reducers/settings'\n\nexport function useSettingsState(): AppState['settings'] {\n return useAppSelector(state => state.settings)\n}\n\nexport function useLocale() {\n const settings = useSettingsState()\n return settings.locale\n}\n\nexport function useChangeLocaleCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n return useCallback(\n async (locale: string) => {\n await wallet.setLocale(locale)\n await addResourceBundle(locale)\n i18n.changeLanguage(locale)\n dispatch(\n (settingsActions as any).updateSettings({\n locale,\n })\n )\n\n // @ts-ignore\n window.location.reload()\n },\n [dispatch, wallet]\n )\n}\n\nexport function useNetworkType() {\n const accountsState = useSettingsState()\n const chain = CHAINS_MAP[accountsState.chainType]\n if (chain) {\n return chain.networkType\n } else {\n return NetworkType.TESTNET\n }\n}\n\nexport function useChangeNetworkTypeCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n return useCallback(\n async (type: NetworkType) => {\n if (type === NetworkType.MAINNET) {\n await wallet.setChainType(ChainType.BITCOIN_MAINNET)\n dispatch(\n (settingsActions as any).updateSettings({\n chainType: ChainType.BITCOIN_MAINNET,\n })\n )\n } else if (type === NetworkType.TESTNET) {\n await wallet.setChainType(ChainType.BITCOIN_TESTNET)\n dispatch(\n (settingsActions as any).updateSettings({\n chainType: ChainType.BITCOIN_TESTNET,\n })\n )\n }\n },\n [dispatch]\n )\n}\n\nexport function useChainType() {\n const accountsState = useSettingsState()\n return accountsState.chainType\n}\n\nexport function useChain() {\n const accountsState = useSettingsState()\n return CHAINS_MAP[accountsState.chainType]\n}\n\nexport function useChangeChainTypeCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n return useCallback(\n async (type: ChainType) => {\n dispatch(\n (settingsActions as any).updateSettings({\n chainType: type,\n })\n )\n await wallet.setChainType(type)\n },\n [dispatch]\n )\n}\n\nexport function useBTCUnit() {\n const chainType = useChainType()\n return CHAINS_MAP[chainType]!.unit\n}\n\nexport function useTxExplorerUrl(txid: string) {\n const chain = useChain()!\n if (chain.enum === ChainType.BITCOIN_MAINNET) {\n return `${chain.unisatExplorerUrl}/tx/${txid}`\n } else if (chain.defaultExplorer === 'mempool-space') {\n return `${chain.mempoolSpaceUrl}/tx/${txid}`\n } else {\n return `${chain.unisatExplorerUrl}/tx/${txid}`\n }\n}\n\nexport function useGetTxExplorerUrlCallback() {\n const chain = useChain()!\n return useCallback(\n (txid: string) => {\n if (chain.enum === ChainType.BITCOIN_MAINNET) {\n return `${chain.unisatExplorerUrl}/tx/${txid}`\n } else if (chain.defaultExplorer === 'mempool-space') {\n return `${chain.mempoolSpaceUrl}/tx/${txid}`\n } else {\n return `${chain.unisatExplorerUrl}/tx/${txid}`\n }\n },\n [chain]\n )\n}\n\nexport function useAddressExplorerUrl(address: string) {\n const chain = useChain()!\n if (chain.enum === ChainType.BITCOIN_MAINNET) {\n return `${chain.unisatExplorerUrl}/address/${address}`\n } else if (chain.defaultExplorer === 'mempool-space') {\n return `${chain.mempoolSpaceUrl}/address/${address}`\n } else {\n return `${chain.unisatExplorerUrl}/address/${address}`\n }\n}\n\nexport function useCAT20TokenInfoExplorerUrl(version: CAT_VERSION, tokenId: string) {\n const chain = useChain()!\n if (version === CAT_VERSION.V1) {\n return `${chain.unisatExplorerUrl}/cat20/${tokenId}`\n } else {\n return `${chain.unisatExplorerUrl}/cat20-v2/${tokenId}`\n }\n}\n\nexport function useUnisatWebsite() {\n const chainType = useChainType()\n return CHAINS_MAP[chainType]!.unisatUrl\n}\n\nexport function useOrdinalsWebsite() {\n const chainType = useChainType()\n return CHAINS_MAP[chainType]!.ordinalsUrl\n}\n\nexport function useWalletConfig() {\n const accountsState = useSettingsState()\n return accountsState.walletConfig\n}\n\nexport function useVersionInfo() {\n const accountsState = useSettingsState()\n const walletConfig = accountsState.walletConfig\n const newVersion = walletConfig.version\n const skippedVersion = accountsState.skippedVersion\n const currentVesion = VERSION!\n let skipped = false\n let latestVersion = ''\n // skip if new version is empty\n if (!newVersion) {\n skipped = true\n }\n\n // skip if skipped\n if (newVersion == skippedVersion) {\n skipped = true\n }\n\n // skip if current version is greater or equal to new version\n if (newVersion) {\n if (compareVersions(currentVesion, newVersion) >= 0) {\n skipped = true\n } else {\n latestVersion = newVersion\n }\n }\n\n // skip if current version is 0.0.0\n if (currentVesion === '0.0.0') {\n skipped = true\n }\n return {\n currentVesion,\n newVersion,\n latestVersion,\n skipped,\n }\n}\n\nexport function useSkipVersionCallback() {\n const wallet = useWallet()\n const dispatch = useAppDispatch()\n return useCallback((version: string) => {\n wallet.setSkippedVersion(version).then(v => {\n dispatch((settingsActions as any).updateSettings({ skippedVersion: version }))\n })\n }, [])\n}\n\nexport function useAutoLockTimeId() {\n const state = useSettingsState()\n return state.autoLockTimeId\n}\n\nexport function getAddressTips(address: string, chanEnum: ChainType) {\n let ret = {\n homeTip: '',\n sendTip: '',\n }\n try {\n const chain = CHAINS_MAP[chanEnum]!\n const addressType = getAddressType(address, chain.networkType)\n if (chain.isFractal && addressType === AddressType.P2PKH) {\n ret = {\n homeTip: t('legacy_address_warning_3'),\n sendTip: t('legacy_address_warning_4'),\n }\n }\n } catch (e) {\n console.log(e)\n }\n\n return ret\n}\n\nexport function useAddressTips() {\n const chain = useChain()!\n const account = useCurrentAccount()\n return getAddressTips(account.address, chain.enum)\n}\n\nexport function useCAT721NFTContentBaseUrl(version: CAT_VERSION) {\n const chainType = useChainType()\n if (chainType === ChainType.FRACTAL_BITCOIN_MAINNET) {\n if (version === CAT_VERSION.V1) {\n return 'https://tracker-fractal-mainnet.catprotocol.org'\n } else {\n return 'https://tracker2-fractal-mainnet.catprotocol.org'\n }\n } else if (chainType === ChainType.FRACTAL_BITCOIN_TESTNET) {\n return 'https://tracker-fractal-testnet.catprotocol.org'\n } else {\n return ''\n }\n}\n\nexport function useBRC20MarketPlaceWebsite(ticker: string) {\n const chainType = useChainType()\n if (chainType === ChainType.BITCOIN_MAINNET) {\n if (ticker.length == 6) {\n return `${CHAINS_MAP[chainType]!.unisatUrl}/market/brc20_prog?tick=${ticker}`\n }\n }\n return `${CHAINS_MAP[chainType]!.unisatUrl}/market/brc20?tick=${ticker}`\n}\n\nexport function useRunesMarketPlaceWebsite(ticker: string) {\n const chainType = useChainType()\n return `${CHAINS_MAP[chainType]!.unisatUrl}/runes/market?tick=${ticker}`\n}\n\nexport function useCAT20MarketPlaceWebsite(tokenId: string) {\n const chainType = useChainType()\n return `${CHAINS_MAP[chainType]!.unisatUrl}/dex/cat20/${tokenId}`\n}\n\nexport function useBabylonConfig() {\n const chainType = useChainType()\n return BABYLON_CONFIG_MAP[chainType] || BABYLON_CONFIG_MAP[ChainType.BITCOIN_MAINNET]\n}\n\nexport function useIsMainnetChain() {\n const chainType = useChainType()\n return chainType === ChainType.BITCOIN_MAINNET || chainType === ChainType.FRACTAL_BITCOIN_MAINNET\n}\n\nexport function useDeveloperMode() {\n const settings = useSettingsState()\n return settings.developerMode\n}\n\nexport function useSetDeveloperModeCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n return useCallback(\n async (developerMode: boolean) => {\n await wallet.setDeveloperMode(developerMode)\n dispatch(\n (settingsActions as any).updateSettings({\n developerMode,\n })\n )\n },\n [dispatch, wallet]\n )\n}\n","import { AddressType, NetworkType } from '@unisat/wallet-types'\n\nexport function getAddressType(address: string, networkType?: NetworkType) {\n if (address.startsWith('bc1q') || address.startsWith('tb1q')) {\n return AddressType.P2WPKH\n } else if (address.startsWith('bc1p') || address.startsWith('tb1p')) {\n return AddressType.P2TR\n } else if (address.startsWith('1') || address.startsWith('m') || address.startsWith('n')) {\n return AddressType.P2PKH\n } else if (address.startsWith('3') || address.startsWith('2')) {\n return AddressType.P2SH_P2WPKH\n } else {\n return AddressType.UNKNOWN\n }\n}\n\nexport function isValidAddress(address: string, networkType?: NetworkType) {\n const addressType = getAddressType(address, networkType)\n if (addressType === AddressType.UNKNOWN) {\n return false\n }\n\n return true\n}\n\nexport function getAddressUtxoDust(address: string) {\n const addressType = getAddressType(address)\n if (addressType === AddressType.P2WPKH) {\n return 294\n } else if (addressType === AddressType.P2TR) {\n return 330\n } else {\n return 546\n }\n}\n\nexport function isValidHdPath(path: string): boolean {\n if (!path || typeof path !== 'string') {\n return false\n }\n\n // HD path should start with 'm' or 'M'\n if (!path.startsWith('m') && !path.startsWith('M')) {\n return false\n }\n\n // Split by '/' and validate each component\n const components = path.split('/')\n\n // First component should be 'm' or 'M'\n if (components[0] !== 'm' && components[0] !== 'M') {\n return false\n }\n\n // Validate each path component after 'm'\n for (let i = 1; i < components.length; i++) {\n const component = components[i]\n\n if (!component) {\n return false\n }\n\n // Check if it's a hardened path (ends with ')\n const isHardened = component.endsWith(\"'\")\n const numberPart = isHardened ? component.slice(0, -1) : component\n\n // Check if the number part is a valid integer\n if (!/^\\d+$/.test(numberPart)) {\n return false\n }\n\n const num = parseInt(numberPart, 10)\n\n // Check if number is within valid range (0 to 2^31-1)\n if (num < 0 || num >= Math.pow(2, 31)) {\n return false\n }\n }\n\n return true\n}\n","import i18n from 'i18next'\nimport { initReactI18next } from 'react-i18next'\n\nexport const fetchLocale = async locale => {\n // @ts-ignore\n const res = await fetch(`./_locales/${locale}/messages.json`)\n const data: Record<string, { message: string; description: string }> = await res.json()\n return Object.keys(data).reduce((res, key) => {\n return {\n ...res,\n [key.replace(/__/g, ' ')]: data[key].message,\n }\n }, {})\n}\n\ni18n\n .use(initReactI18next) // passes i18n down to react-i18next\n .init({\n fallbackLng: 'en',\n defaultNS: 'translations',\n interpolation: {\n escapeValue: false, // react already safes from xss\n },\n })\n\nexport const I18N_NS = 'translations'\n\nexport const addResourceBundle = async (locale: string) => {\n if (i18n.hasResourceBundle(locale, I18N_NS)) return\n const bundle = await fetchLocale(locale)\n\n i18n.addResourceBundle(locale, 'translations', bundle)\n}\n\naddResourceBundle('en')\n\ni18n.on('languageChanged', function (lng: string) {\n addResourceBundle(lng)\n})\n\nexport default i18n\n","import { useCallback } from 'react'\n\nimport { Account } from '@unisat/wallet-shared'\n\nimport { AddressType } from '@unisat/wallet-types'\nimport { KeyringType } from '@unisat/keyring-service/types'\n\nimport { AppState } from '..'\nimport { useAppDispatch, useAppSelector } from './base'\nimport { useCurrentKeyring } from './keyrings'\nimport { keyringsActions } from '../reducers/keyrings'\nimport { settingsActions } from '../reducers/settings'\nimport { accountActions } from '../reducers/accounts'\nimport { useWallet } from '../context/WalletContext'\n\nexport function useAccountsState(): AppState['accounts'] {\n return useAppSelector(state => state.accounts)\n}\n\nexport function useCurrentAccount() {\n const accountsState = useAccountsState()\n return accountsState.current\n}\n\nexport function useCurrentAddress() {\n const accountsState = useAccountsState()\n return accountsState.current.address\n}\n\nexport function useAccounts() {\n const accountsState = useAccountsState()\n return accountsState.accounts\n}\n\nexport function useAccountBalance() {\n const accountsState = useAccountsState()\n const currentAccount = useCurrentAccount()\n return (\n accountsState.balanceV2Map[currentAccount.address] || {\n availableBalance: 0,\n unavailableBalance: 0,\n totalBalance: 0,\n }\n )\n}\n\nexport function useAddressSummary() {\n const accountsState = useAccountsState()\n return accountsState.addressSummary\n}\n\nexport function useAccountInscriptions() {\n const accountsState = useAccountsState()\n const currentAccount = useCurrentAccount()\n return accountsState.inscriptionsMap[currentAccount.address] || { list: [], expired: true }\n}\n\nexport function useInscriptionSummary() {\n const accountsState = useAccountsState()\n return accountsState.inscriptionSummary\n}\n\nexport function useAppSummary() {\n const accountsState = useAccountsState()\n return accountsState.appSummary\n}\n\nexport function useUnreadAppSummary() {\n const accountsState = useAccountsState()\n const summary = accountsState.appSummary\n return summary.apps.find(w => w.time && summary.readTabTime && w.time > summary.readTabTime)\n}\n\nexport function useReadTab() {\n const wallet = useWallet()\n const dispatch = useAppDispatch()\n const appSummary = useAppSummary()\n return useCallback(\n async (name: 'app' | 'home' | 'settings') => {\n await wallet.readTab(name)\n if (name == 'app') {\n const appSummary = await wallet.getAppSummary()\n dispatch(accountActions['setAppSummary']!(appSummary))\n }\n },\n [dispatch, wallet, appSummary]\n )\n}\n\nexport function useReadApp() {\n const wallet = useWallet()\n const dispatch = useAppDispatch()\n const appSummary = useAppSummary()\n return useCallback(\n async (id: number) => {\n await wallet.readApp(id)\n const appSummary = await wallet.getAppSummary()\n dispatch(accountActions['setAppSummary']!(appSummary))\n },\n [dispatch, wallet, appSummary]\n )\n}\n\nexport function useHistory() {\n const accountsState = useAccountsState()\n const address = useAccountAddress()\n return accountsState.historyMap[address] || { list: [], expired: true }\n}\n\nexport function useAccountAddress() {\n const currentAccount = useCurrentAccount()\n return currentAccount.address\n}\n\nexport function useSetCurrentAccountCallback() {\n const dispatch = useAppDispatch()\n return useCallback(\n (account: Account) => {\n dispatch(accountActions['setCurrent']!(account))\n },\n [dispatch]\n )\n}\n\nexport function useImportAccountCallback() {\n const wallet = useWallet()\n const dispatch = useAppDispatch()\n const currentKeyring = useCurrentKeyring()\n return useCallback(\n async (privateKey: string, addressType: AddressType) => {\n let success = false\n let error\n try {\n const alianName = await wallet.getNextAlianName(currentKeyring)\n await wallet.createKeyringWithPrivateKey(privateKey, addressType, alianName)\n const currentAccount = await wallet.getCurrentAccount()\n dispatch(accountActions['setCurrent']!(currentAccount))\n\n success = true\n } catch (e) {\n console.log(e)\n error = (e as any).message\n }\n return { success, error }\n },\n [dispatch, wallet, currentKeyring]\n )\n}\n\nexport function useChangeAddressFlagCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n return useCallback(\n async (isAdd: boolean, flag: number) => {\n const account = isAdd\n ? await wallet.addAddressFlag(currentAccount, flag)\n : await wallet.removeAddressFlag(currentAccount, flag)\n dispatch(accountActions['setCurrentAddressFlag']!(account.flag))\n },\n [dispatch, wallet, currentAccount]\n )\n}\n\n// export function useFetchHistoryCallback() {\n// const dispatch = useAppDispatch();\n// const wallet = useWallet();\n// const address = useAccountAddress();\n// return useCallback(async () => {\n// const _accountHistory = await wallet.getAddressHistory(address);\n// dispatch(\n// accountActions.setHistory({\n// address: address,\n// list: _accountHistory\n// })\n// );\n// }, [dispatch, wallet, address]);\n// }\n\nexport function useFetchBalanceCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n const balance = useAccountBalance()\n return useCallback(async () => {\n if (!currentAccount.address) return\n // const cachedBalance = await wallet.getAddressCacheBalance(currentAccount.address);\n // const _accountBalance = await wallet.getAddressBalance(currentAccount.address);\n // dispatch(\n // accountActions.setBalance({\n // address: currentAccount.address,\n // amount: _accountBalance.amount,\n // btc_amount: _accountBalance.btc_amount,\n // inscription_amount: _accountBalance.inscription_amount,\n // confirm_btc_amount: _accountBalance.confirm_btc_amount,\n // pending_btc_amount: _accountBalance.pending_btc_amount\n // })\n // );\n // if (cachedBalance.amount !== _accountBalance.amount) {\n // wallet.expireUICachedData(currentAccount.address);\n // dispatch(accountActions.expireHistory());\n // }\n\n const summary = await wallet.getAddressSummary(currentAccount.address)\n summary.address = currentAccount.address\n dispatch(accountActions['setAddressSummary']!(summary))\n\n const balanceV2 = await wallet.getAddressBalanceV2(currentAccount.address)\n dispatch(\n accountActions['setBalanceV2']!({\n address: currentAccount.address,\n balance: balanceV2,\n })\n )\n }, [dispatch, wallet, currentAccount, balance])\n}\n\nexport function useReloadAccounts() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n return useCallback(async () => {\n const keyrings = await wallet.getKeyrings()\n dispatch(keyringsActions['setKeyrings']!(keyrings))\n\n const currentKeyring = await wallet.getCurrentKeyring()\n dispatch(keyringsActions['setCurrent']!(currentKeyring))\n\n const _accounts = await wallet.getAccounts()\n dispatch(accountActions['setAccounts']!(_accounts))\n\n const account = await wallet.getCurrentAccount()\n dispatch(accountActions['setCurrent']!(account))\n\n dispatch(accountActions['expireBalance']!(null))\n dispatch(accountActions['expireInscriptions']!(null))\n\n wallet.getWalletConfig().then(data => {\n dispatch(settingsActions['updateSettings']!({ walletConfig: data }))\n })\n }, [dispatch, wallet])\n}\n\nexport function useIsKeystoneWallet() {\n const currentKeyring = useCurrentKeyring()\n return currentKeyring.type === KeyringType.KeystoneKeyring\n}\n","import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux'\n\nimport { AppDispatch, AppState } from '../index'\n\nexport const useAppDispatch = () => useDispatch<AppDispatch>()\nexport const useAppSelector: TypedUseSelectorHook<AppState> = useSelector\n","import { AppState } from '..'\nimport { useAppSelector } from './base'\n\nexport function useKeyringsState(): AppState['keyrings'] {\n return useAppSelector(state => state.keyrings)\n}\n\nexport function useKeyrings() {\n const keyringsState = useKeyringsState()\n return keyringsState.keyrings\n}\n\nexport function useCurrentKeyring() {\n const keyringsState = useKeyringsState()\n return keyringsState.current\n}\n","import { useEffect, useRef, useState } from 'react'\nimport { useNavigate } from 'react-router-dom'\n\nimport { useWallet } from '../context/WalletContext'\n\nconst UI_TYPE = {\n Tab: 'index',\n Pop: 'popup',\n Notification: 'notification',\n SidePanel: 'sidepanel',\n}\n\ntype UiTypeCheck = {\n isTab: boolean\n isNotification: boolean\n isPop: boolean\n isSidePanel: boolean\n}\n\nexport const getUiType = (): UiTypeCheck => {\n // @ts-ignore\n const { pathname } = window.location\n return Object.entries(UI_TYPE).reduce((m, [key, value]) => {\n // @ts-ignore\n m[`is${key}`] = pathname === `/${value}.html`\n\n return m\n }, {} as UiTypeCheck)\n}\n\nexport const useApproval = () => {\n const wallet = useWallet()\n const navigate = useNavigate()\n const getApproval = wallet.getApproval\n\n const resolveApproval = async (data?: any, stay = false, forceReject = false) => {\n const approval = await getApproval()\n\n if (approval) {\n wallet.resolveApproval(data, forceReject)\n }\n if (stay) {\n return\n }\n setTimeout(() => {\n navigate('/')\n })\n }\n\n const rejectApproval = async (err: any, stay = false, isInternal = false) => {\n const approval = await getApproval()\n if (approval) {\n await wallet.rejectApproval(err, stay, isInternal)\n }\n if (!stay) {\n navigate('/')\n }\n }\n\n useEffect(() => {\n if (!getUiType().isNotification) {\n return () => {}\n }\n // @ts-ignore\n window.addEventListener('beforeunload', rejectApproval)\n\n // @ts-ignore\n return () => window.removeEventListener('beforeunload', rejectApproval)\n }, [])\n\n return [getApproval, resolveApproval, rejectApproval] as const\n}\n","import { AppState } from '..'\nimport { useAppSelector } from './base'\n\nexport function useDiscoveryState(): AppState['discovery'] {\n return useAppSelector(state => state.discovery)\n}\n\nexport function useAppList() {\n const state = useDiscoveryState()\n return state.appList\n}\n\nexport function useBannerList() {\n const state = useDiscoveryState()\n return state.bannerList\n}\n\nexport function useLastFetchInfo() {\n const state = useDiscoveryState()\n return {\n lastFetchTime: state.lastFetchTime,\n lasfFetchChainType: state.lastFetchChainType,\n }\n}\n\nexport function useHasNewBanner() {\n const state = useDiscoveryState()\n return state.hasNewBanner\n}\n","import { useCallback } from 'react'\n\nimport { AddressType } from '@unisat/wallet-types'\n\nimport { AppState } from '..'\nimport { useAppDispatch, useAppSelector } from './base'\nimport { TabOption, globalActions } from '../reducers/global'\nimport { useWallet } from '../context/WalletContext'\nimport { useApproval } from './approval'\n\nexport function useGlobalState(): AppState['global'] {\n return useAppSelector(state => state.global)\n}\n\nexport function useTab() {\n const globalState = useGlobalState()\n return globalState.tab\n}\n\nexport function useSetTabCallback() {\n const dispatch = useAppDispatch()\n return useCallback(\n (tab: TabOption) => {\n dispatch(\n globalActions['update']!({\n tab,\n })\n )\n },\n [dispatch]\n )\n}\n\nexport function useBooted() {\n const globalState = useGlobalState()\n return globalState.isBooted\n}\n\nexport function useIsUnlocked() {\n const globalState = useGlobalState()\n return globalState.isUnlocked\n}\n\nexport function useIsReady() {\n const globalState = useGlobalState()\n return globalState.isReady\n}\n\nexport function useUnlockCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const [, resolveApproval] = useApproval()\n return useCallback(\n async (password: string) => {\n await wallet.unlock(password)\n dispatch(globalActions.update({ isUnlocked: true }))\n resolveApproval()\n },\n [dispatch, wallet]\n )\n}\n\nexport function useCreateAccountCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n return useCallback(\n async (\n mnemonics: string,\n hdPath: string,\n passphrase: string,\n addressType: AddressType,\n accountCount: number\n ) => {\n await wallet.createKeyringWithMnemonics(\n mnemonics,\n hdPath,\n passphrase,\n addressType,\n accountCount\n )\n dispatch(globalActions.update({ isUnlocked: true }))\n },\n [dispatch, wallet]\n )\n}\n\nexport function useImportAccountsFromKeystoneCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n return useCallback(\n async (\n urType: string,\n urCbor: string,\n addressType: AddressType,\n accountCount: number,\n hdPath: string,\n filterPubkey?: string[],\n connectionType: 'USB' | 'QR' = 'USB'\n ) => {\n await wallet.createKeyringWithKeystone(\n urType,\n urCbor,\n addressType,\n hdPath,\n accountCount,\n filterPubkey,\n connectionType\n )\n dispatch(globalActions.update({ isUnlocked: true }))\n },\n [dispatch, wallet]\n )\n}\n\nexport function useCreateColdWalletCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n return useCallback(\n async (\n xpub: string,\n addressType: AddressType,\n alianName?: string,\n hdPath?: string,\n accountCount?: number\n ) => {\n await wallet.createKeyringWithColdWallet(xpub, addressType, alianName, hdPath, accountCount)\n dispatch(globalActions.update({ isUnlocked: true }))\n },\n [dispatch, wallet]\n )\n}\n","import { useContext } from 'react'\n\nimport { I18nContext } from '../context/I18nContext'\nimport { FALLBACK_LOCALE, getCurrentLocaleAsync, LOCALE_NAMES } from '@unisat/i18n'\n\nconst defaultI18nContext = {\n t: (key: string) => key,\n locale: FALLBACK_LOCALE,\n supportedLocales: [FALLBACK_LOCALE],\n localeNames: LOCALE_NAMES,\n changeLocale: async () => {\n /* empty implementation */\n },\n}\n\n/**\n * Use i18n Hook\n * @returns i18n context\n */\nexport const useI18n = () => {\n try {\n const context = useContext(I18nContext)\n\n if (!context) {\n console.warn('useI18n must be used within an I18nProvider, using default context instead')\n return defaultI18nContext\n }\n\n return context as any\n } catch (error) {\n console.error('Error in useI18n:', error)\n return defaultI18nContext\n }\n}\n\n/**\n * Get current language\n * @returns current language code\n */\nexport const getCurrentLocale = async (): Promise<string> => {\n return await getCurrentLocaleAsync()\n}\n\n/**\n * Select special languages for style adaptation\n * @returns { currentLocale: string, isSpecialLocale: boolean }\n */\nexport const getSpecialLocale = async () => {\n const currentLocale = await getCurrentLocale()\n const specialLocales = ['es', 'ru', 'fr', 'ja']\n const isSpecialLocale = specialLocales.includes(currentLocale)\n return { currentLocale, isSpecialLocale }\n}\n","import { useCallback, useMemo } from 'react'\n\nimport { RawTxInfo, ToAddressInfo, UnspentOutput } from '@unisat/wallet-shared'\n\nimport { useI18n } from './i18n'\nimport { useBTCUnit } from '../hooks/settings'\n\nimport { AppState } from '..'\nimport { useAccountAddress, useCurrentAccount } from '../hooks/accounts'\nimport { accountActions } from '../reducers/accounts'\nimport { useAppDispatch, useAppSelector } from './base'\nimport { transactionsActions } from '../reducers/transactions'\nimport { numUtils, timeUtils } from '@unisat/base-utils'\nimport { useWallet } from '../context/WalletContext'\n\nfunction useTools() {\n return {\n showLoading: (show: boolean) => {},\n }\n}\n\nexport function useTransactionsState(): AppState['transactions'] {\n return useAppSelector(state => state.transactions)\n}\n\nexport function useBitcoinTx() {\n const transactionsState = useTransactionsState()\n return transactionsState.bitcoinTx\n}\n\nexport function usePrepareSendBTCCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const fromAddress = useAccountAddress()\n const utxos = useUtxos()\n const fetchUtxos = useFetchUtxosCallback()\n const account = useCurrentAccount()\n const btcUnit = useBTCUnit()\n const { t } = useI18n()\n return useCallback(\n async ({\n toAddressInfo,\n toAmount,\n feeRate,\n enableRBF,\n memo,\n memos,\n disableAutoAdjust,\n }: {\n toAddressInfo: ToAddressInfo\n toAmount: number\n feeRate?: number\n enableRBF: boolean\n memo?: string\n memos?: string[]\n disableAutoAdjust?: boolean\n }) => {\n let _utxos: UnspentOutput[] = utxos\n if (_utxos.length === 0) {\n _utxos = await fetchUtxos()\n }\n const safeBalance = _utxos\n .filter(v => v.inscriptions.length == 0)\n .reduce((pre, cur) => pre + cur.satoshis, 0)\n if (safeBalance < toAmount) {\n throw new Error(t('insufficient_balance'))\n }\n\n if (!feeRate) {\n const summary = await wallet.getFeeSummary()\n feeRate = summary.list[1]!.feeRate\n }\n let res: {\n psbtHex: string\n rawtx: string\n fee: number\n }\n\n if (safeBalance === toAmount && !disableAutoAdjust) {\n res = await wallet.sendAllBTC({\n to: toAddressInfo.address,\n btcUtxos: _utxos,\n enableRBF,\n feeRate,\n })\n } else {\n res = await wallet.sendBTC({\n to: toAddressInfo.address,\n amount: toAmount,\n btcUtxos: _utxos,\n enableRBF,\n feeRate,\n memo: memo!,\n memos: memos!,\n })\n }\n\n dispatch(\n (transactionsActions as any).updateBitcoinTx({\n rawtx: res.rawtx,\n psbtHex: res.psbtHex,\n fromAddress,\n feeRate,\n enableRBF,\n })\n )\n const rawTxInfo: RawTxInfo = {\n psbtHex: res.psbtHex,\n rawtx: res.rawtx,\n toAddressInfo,\n fee: res.fee,\n }\n return rawTxInfo\n },\n [dispatch, wallet, fromAddress, utxos, fetchUtxos]\n )\n}\n\nexport function usePrepareSendBypassHeadOffsetsCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const fromAddress = useAccountAddress()\n const account = useCurrentAccount()\n const btcUnit = useBTCUnit()\n return useCallback(\n async ({\n toAddressInfo,\n toAmount,\n feeRate,\n }: {\n toAddressInfo: ToAddressInfo\n toAmount: number\n feeRate: number\n }) => {\n const res = await wallet.sendCoinBypassHeadOffsets(\n [\n {\n address: toAddressInfo.address,\n satoshis: toAmount,\n },\n ],\n feeRate\n )\n\n dispatch(\n (transactionsActions as any).updateBitcoinTx({\n rawtx: res.rawtx,\n psbtHex: res.psbtHex,\n fromAddress,\n feeRate,\n })\n )\n const rawTxInfo: RawTxInfo = {\n psbtHex: res.psbtHex,\n rawtx: res.rawtx,\n toAddressInfo,\n fee: res.fee,\n }\n return rawTxInfo\n },\n [dispatch, wallet, fromAddress]\n )\n}\n\nexport function usePushBitcoinTxCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const tools = useTools()\n return useCallback(\n async (rawtx: string) => {\n const ret = {\n success: false,\n txid: '',\n error: '',\n }\n try {\n tools.showLoading(true)\n const txid = await wallet.pushTx(rawtx)\n await timeUtils.sleep(3) // Wait for transaction synchronization\n tools.showLoading(false)\n dispatch((transactionsActions as any).updateBitcoinTx({ txid }))\n dispatch((accountActions as any).expireBalance())\n setTimeout(() => {\n dispatch((accountActions as any).expireBalance())\n }, 2000)\n setTimeout(() => {\n dispatch((accountActions as any).expireBalance())\n }, 5000)\n\n ret.success = true\n ret.txid = txid\n } catch (e) {\n ret.error = (e as Error).message\n tools.showLoading(false)\n }\n\n return ret\n },\n [dispatch, wallet]\n )\n}\n\nexport function useOrdinalsTx() {\n const transactionsState = useTransactionsState()\n return transactionsState.ordinalsTx\n}\n\nexport function usePrepareSendOrdinalsInscriptionCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const fromAddress = useAccountAddress()\n const utxos = useUtxos()\n const fetchUtxos = useFetchUtxosCallback()\n const account = useCurrentAccount()\n return useCallback(\n async ({\n toAddressInfo,\n inscriptionId,\n feeRate,\n outputValue,\n enableRBF,\n }: {\n toAddressInfo: ToAddressInfo\n inscriptionId: string\n feeRate?: number\n outputValue?: number\n enableRBF: boolean\n }) => {\n if (!feeRate) {\n const summary = await wallet.getFeeSummary()\n feeRate = summary.list[1]!.feeRate\n }\n\n let btcUtxos = utxos\n if (btcUtxos.length === 0) {\n btcUtxos = await fetchUtxos()\n }\n\n const res = await wallet.sendOrdinalsInscription({\n to: toAddressInfo.address,\n inscriptionId,\n feeRate,\n outputValue: outputValue!,\n enableRBF,\n btcUtxos,\n })\n dispatch(\n (transactionsActions as any).updateOrdinalsTx({\n rawtx: res.rawtx,\n psbtHex: res.psbtHex,\n fromAddress,\n // inscription,\n feeRate,\n outputValue,\n enableRBF,\n })\n )\n const rawTxInfo: RawTxInfo = {\n psbtHex: res.psbtHex,\n rawtx: res.rawtx,\n toAddressInfo,\n }\n return rawTxInfo\n },\n [dispatch, wallet, fromAddress, utxos]\n )\n}\n\nexport function usePrepareSendOrdinalsInscriptionsCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const fromAddress = useAccountAddress()\n const fetchUtxos = useFetchUtxosCallback()\n const utxos = useUtxos()\n const account = useCurrentAccount()\n return useCallback(\n async ({\n toAddressInfo,\n inscriptionIds,\n feeRate,\n enableRBF,\n }: {\n toAddressInfo: ToAddressInfo\n inscriptionIds: string[]\n feeRate?: number\n enableRBF: boolean\n }) => {\n if (!feeRate) {\n const summary = await wallet.getFeeSummary()\n feeRate = summary.list[1]!.feeRate\n }\n\n let btcUtxos = utxos\n if (btcUtxos.length === 0) {\n btcUtxos = await fetchUtxos()\n }\n const res = await wallet.sendOrdinalsInscriptions({\n to: toAddressInfo.address,\n inscriptionIds,\n feeRate,\n enableRBF,\n btcUtxos,\n })\n dispatch(\n (transactionsActions as any).updateOrdinalsTx({\n rawtx: res.rawtx,\n psbtHex: res.psbtHex,\n fromAddress,\n feeRate,\n enableRBF,\n })\n )\n const rawTxInfo: RawTxInfo = {\n psbtHex: res.psbtHex,\n rawtx: res.rawtx,\n toAddressInfo,\n }\n return rawTxInfo\n },\n [dispatch, wallet, fromAddress, utxos]\n )\n}\n\nexport function useCreateSplitTxCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const fromAddress = useAccountAddress()\n const utxos = useUtxos()\n const fetchUtxos = useFetchUtxosCallback()\n const account = useCurrentAccount()\n return useCallback(\n async ({\n inscriptionId,\n feeRate,\n outputValue,\n enableRBF,\n }: {\n inscriptionId: string\n feeRate: number\n outputValue: number\n enableRBF: boolean\n }) => {\n let btcUtxos = utxos\n if (btcUtxos.length === 0) {\n btcUtxos = await fetchUtxos()\n }\n\n const res = await wallet.splitOrdinalsInscription({\n inscriptionId,\n feeRate,\n outputValue,\n enableRBF,\n btcUtxos,\n })\n dispatch(\n (transactionsActions as any).updateOrdinalsTx({\n rawtx: res.rawtx,\n psbtHex: res.psbtHex,\n fromAddress,\n // inscription,\n enableRBF,\n feeRate,\n outputValue,\n })\n )\n const rawTxInfo: RawTxInfo = {\n psbtHex: res.psbtHex,\n rawtx: res.rawtx,\n toAddressInfo: {\n address: fromAddress,\n },\n }\n return { rawTxInfo, splitedCount: res.splitedCount }\n },\n [dispatch, wallet, fromAddress, utxos]\n )\n}\n\nexport function usePushOrdinalsTxCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const tools = useTools()\n return useCallback(\n async (rawtx: string) => {\n const ret = {\n success: false,\n txid: '',\n error: '',\n }\n try {\n tools.showLoading(true)\n const txid = await wallet.pushTx(rawtx)\n await timeUtils.sleep(3) // Wait for transaction synchronization\n tools.showLoading(false)\n dispatch((transactionsActions as any).updateOrdinalsTx({ txid }))\n\n dispatch((accountActions as any).expireBalance())\n setTimeout(() => {\n dispatch((accountActions as any).expireBalance())\n }, 2000)\n setTimeout(() => {\n dispatch((accountActions as any).expireBalance())\n }, 5000)\n\n ret.success = true\n ret.txid = txid\n } catch (e) {\n console.log(e)\n ret.error = (e as Error).message\n tools.showLoading(false)\n }\n\n return ret\n },\n [dispatch, wallet]\n )\n}\n\nexport function useUtxos() {\n const transactionsState = useTransactionsState()\n return transactionsState.utxos\n}\n\nexport function useFetchUtxosCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const account = useCurrentAccount()\n return useCallback(async () => {\n const data = await wallet.getBTCUtxos()\n dispatch((transactionsActions as any).setUtxos(data))\n return data\n }, [wallet, account])\n}\n\nexport function useSpendUnavailableUtxos() {\n const transactionsState = useTransactionsState()\n return transactionsState.spendUnavailableUtxos\n}\n\nexport function useSetSpendUnavailableUtxosCallback() {\n const dispatch = useAppDispatch()\n return useCallback(\n (utxos: UnspentOutput[]) => {\n dispatch((transactionsActions as any).setSpendUnavailableUtxos(utxos))\n },\n [dispatch]\n )\n}\n\nexport function useSafeBalance() {\n const utxos = useUtxos()\n return useMemo(() => {\n const satoshis = utxos\n .filter(v => v.inscriptions.length === 0)\n .reduce((pre, cur) => pre + cur.satoshis, 0)\n return numUtils.satoshisToAmount(satoshis)\n }, [utxos])\n}\n\nexport function useAssetUtxosRunes() {\n const transactionsState = useTransactionsState()\n return transactionsState.assetUtxos_runes\n}\n\nexport function useFetchAssetUtxosRunesCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const account = useCurrentAccount()\n return useCallback(\n async (rune: string) => {\n const data = await wallet.getAssetUtxosRunes(rune)\n dispatch((transactionsActions as any).setAssetUtxosRunes(data))\n return data\n },\n [wallet, account]\n )\n}\n\nexport function usePrepareSendRunesCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const fromAddress = useAccountAddress()\n const utxos = useUtxos()\n const fetchUtxos = useFetchUtxosCallback()\n const assetUtxosRunes = useAssetUtxosRunes()\n const fetchAssetUtxosRunes = useFetchAssetUtxosRunesCallback()\n const account = useCurrentAccount()\n return useCallback(\n async ({\n toAddressInfo,\n runeid,\n runeAmount,\n outputValue,\n feeRate,\n enableRBF,\n }: {\n toAddressInfo: ToAddressInfo\n runeid: string\n runeAmount: string\n outputValue?: number\n feeRate: number\n enableRBF: boolean\n }) => {\n if (!feeRate) {\n const summary = await wallet.getFeeSummary()\n feeRate = summary.list[1]!.feeRate\n }\n\n let btcUtxos = utxos\n if (btcUtxos.length === 0) {\n btcUtxos = await fetchUtxos()\n }\n\n let assetUtxos = assetUtxosRunes\n if (assetUtxos.length == 0) {\n assetUtxos = await fetchAssetUtxosRunes(runeid)\n }\n\n const res = await wallet.sendRunes({\n to: toAddressInfo.address,\n runeid,\n runeAmount,\n outputValue: outputValue!,\n feeRate,\n enableRBF,\n btcUtxos,\n assetUtxos,\n })\n\n dispatch(\n (transactionsActions as any).updateRunesTx({\n rawtx: res.rawtx,\n psbtHex: res.psbtHex,\n fromAddress,\n feeRate,\n enableRBF,\n runeid,\n runeAmount,\n outputValue,\n })\n )\n const rawTxInfo: RawTxInfo = {\n psbtHex: res.psbtHex,\n rawtx: res.rawtx,\n toAddressInfo,\n }\n return rawTxInfo\n },\n [dispatch, wallet, fromAddress, utxos, assetUtxosRunes, fetchAssetUtxosRunes, account]\n )\n}\n\nexport function useRunesTx() {\n const transactionsState = useTransactionsState()\n return transactionsState.runesTx\n}\n\nexport function usePrepareSendAlkanesCallback() {\n const wallet = useWallet()\n const account = useCurrentAccount()\n const callback = useCallback(\n async (\n toAddressInfo: ToAddressInfo,\n alkaneid: string,\n amount: string,\n feeRate: number,\n enableRBF = false\n ) => {\n return await wallet.sendAlkanes({\n to: toAddressInfo.address,\n alkaneid,\n amount,\n feeRate,\n enableRBF,\n })\n },\n [wallet, account]\n )\n return callback\n}\n","import { useMemo } from 'react'\n\nimport { ChainType } from '@unisat/wallet-types'\nimport { Inscription } from '@unisat/wallet-shared'\nimport { getAddressType } from '../utils/bitcoin-utils'\nimport { AddressType } from '@unisat/wallet-types'\n\nimport { AppState } from '..'\nimport { useCurrentAccount, useCurrentAddress } from '../hooks/accounts'\nimport { useAppDispatch, useAppSelector } from '../hooks/base'\nimport { useChainType, useNetworkType } from '../hooks/settings'\nimport { AssetTabKey, uiActions } from '../reducers/ui'\nimport { TypeChain } from '@unisat/wallet-shared'\nexport function useUIState(): AppState['ui'] {\n return useAppSelector(state => state.ui)\n}\n\nexport function useAssetTabKey() {\n const uiState = useUIState()\n return uiState.assetTabKey\n}\n\nexport function useOrdinalsAssetTabKey() {\n const uiState = useUIState()\n return uiState.ordinalsAssetTabKey\n}\n\nexport function useCATAssetTabKey() {\n const uiState = useUIState()\n return uiState.catAssetTabKey\n}\n\nexport function useAlkanesAssetTabKey() {\n const uiState = useUIState()\n return uiState.alkanesAssetTabKey\n}\n\nexport function useUiTxCreateScreen() {\n const uiState = useUIState()\n return uiState.uiTxCreateScreen\n}\n\nexport function useUpdateUiTxCreateScreen() {\n const dispatch = useAppDispatch()\n return ({\n toInfo,\n inputAmount,\n enableRBF,\n feeRate,\n }: {\n toInfo?: { address: string; domain: string; inscription?: Inscription }\n inputAmount?: string\n enableRBF?: boolean\n feeRate?: number\n }) => {\n dispatch((uiActions as any).updateTxCreateScreen({ toInfo, inputAmount, enableRBF, feeRate }))\n }\n}\n\nexport function useResetUiTxCreateScreen() {\n const dispatch = useAppDispatch()\n return () => {\n dispatch((uiActions as any).resetTxCreateScreen())\n }\n}\n\nexport function useSupportedAssets() {\n const chainType = useChainType()\n const currentAddress = useCurrentAddress()\n const networkType = useNetworkType()\n const currentAccount = useCurrentAccount()\n\n const assetTabKeys: AssetTabKey[] = []\n const assets = {\n ordinals: false,\n runes: false,\n CAT20: false,\n alkanes: false,\n }\n\n assets.ordinals = true\n assetTabKeys.push(AssetTabKey.ORDINALS)\n\n assets.runes = true\n assetTabKeys.push(AssetTabKey.RUNES)\n\n if (\n chainType === ChainType.FRACTAL_BITCOIN_MAINNET ||\n chainType === ChainType.FRACTAL_BITCOIN_TESTNET\n ) {\n const addressType = getAddressType(currentAddress, networkType)\n if (addressType == AddressType.P2TR || addressType == AddressType.P2WPKH) {\n assets.CAT20 = true\n assetTabKeys.push(AssetTabKey.CAT)\n }\n }\n\n if (chainType === ChainType.BITCOIN_SIGNET || chainType === ChainType.BITCOIN_MAINNET) {\n assets.alkanes = true\n assetTabKeys.push(AssetTabKey.ALKANES)\n }\n\n return {\n tabKeys: assetTabKeys,\n assets,\n key: assetTabKeys.join(','),\n }\n}\n\nexport const useIsInExpandView = () => {\n // @ts-ignore\n if (typeof window === 'undefined') {\n return false\n }\n return useMemo(() => {\n // @ts-ignore\n if (window.innerWidth > 156 * 3) {\n return true\n } else {\n return false\n }\n // @ts-ignore\n }, [window.innerWidth])\n}\n\nexport const useUtxoTools = (chain: TypeChain) => {\n const openUtxoTools = () => {\n // @ts-ignore\n window.open(`${chain.unisatUrl}/utxo?tab=all`)\n }\n\n return {\n openUtxoTools,\n }\n}\n","import { useCallback, useEffect, useRef } from 'react'\n\nimport { Account } from '@unisat/wallet-shared'\nimport eventBus from '../utils/eventBus'\n\nimport { useIsUnlocked } from '../hooks/global'\nimport { globalActions } from '../reducers/global'\nimport { useAppDispatch } from '../hooks/base'\nimport { settingsActions } from '../reducers/settings'\nimport { useCurrentAccount, useFetchBalanceCallback, useReloadAccounts } from '../hooks/accounts'\nimport { accountActions } from '../reducers/accounts'\nimport { ChainType } from '@unisat/wallet-types'\nimport { useWallet } from '../context/WalletContext'\n\nexport function AccountUpdater() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n const isUnlocked = useIsUnlocked()\n const selfRef = useRef({\n preAccountKey: '',\n loadingBalance: false,\n loadingHistory: false,\n })\n const self = selfRef.current\n\n const reloadAccounts = useReloadAccounts()\n const onCurrentChange = useCallback(async () => {\n if (isUnlocked && currentAccount && currentAccount.key != self.preAccountKey) {\n self.preAccountKey = currentAccount.key\n\n // setLoading(true);\n\n reloadAccounts()\n\n // setLoading(false);\n }\n }, [dispatch, currentAccount, wallet, isUnlocked])\n\n useEffect(() => {\n onCurrentChange()\n }, [currentAccount && currentAccount.key, isUnlocked])\n\n const fetchBalance = useFetchBalanceCallback()\n useEffect(() => {\n if (self.loadingBalance) {\n return\n }\n if (!isUnlocked) {\n return\n }\n self.loadingBalance = true\n fetchBalance().finally(() => {\n self.loadingBalance = false\n })\n }, [fetchBalance, wallet, isUnlocked, self])\n\n useEffect(() => {\n const accountChangeHandler = (account: Account) => {\n if (account && account.address) {\n dispatch((accountActions as any).setCurrent(account))\n }\n }\n eventBus.addEventListener('accountsChanged', accountChangeHandler)\n return () => {\n eventBus.removeEventListener('accountsChanged', accountChangeHandler)\n }\n }, [dispatch])\n\n useEffect(() => {\n const chaintChangeHandler = (params: { type: ChainType }) => {\n dispatch(\n (settingsActions as any).updateSettings({\n chainType: params.type,\n })\n )\n\n reloadAccounts()\n }\n eventBus.addEventListener('chainChanged', chaintChangeHandler)\n return () => {\n eventBus.removeEventListener('chainChanged', chaintChangeHandler)\n }\n }, [dispatch])\n\n useEffect(() => {\n const lockHandler = () => {\n dispatch(globalActions.update({ isUnlocked: false }))\n }\n eventBus.addEventListener('lock', lockHandler)\n return () => {\n eventBus.removeEventListener('lock', lockHandler)\n }\n }, [dispatch])\n\n useEffect(() => {\n const unlockHandler = () => {\n dispatch(globalActions.update({ isUnlocked: true }))\n }\n eventBus.addEventListener('unlock', unlockHandler)\n return () => {\n eventBus.removeEventListener('unlock', unlockHandler)\n }\n }, [dispatch])\n\n return null\n}\n","type Listener = (params?: any) => void\n\nclass EventBus {\n events: Record<string, Listener[]> = {}\n\n emit = (type: string, params?: any) => {\n const listeners = this.events[type]\n if (listeners) {\n listeners.forEach(fn => {\n fn(params)\n })\n }\n }\n\n once = (type: string, fn: Listener) => {\n const listeners = this.events[type]\n const func = (...params: any[]) => {\n fn(...params)\n this.events[type] = this.events[type]!.filter(item => item !== func)\n }\n if (listeners) {\n this.events[type]!.push(func)\n } else {\n this.events[type] = [func]\n }\n }\n\n addEventListener = (type: string, fn: Listener) => {\n const listeners = this.events[type]\n if (listeners) {\n this.events[type]!.push(fn)\n } else {\n this.events[type] = [fn]\n }\n }\n\n removeEventListener = (type: string, fn: Listener) => {\n const listeners = this.events[type]\n if (listeners) {\n this.events[type] = this.events[type]!.filter(item => item !== fn)\n }\n }\n\n removeAllEventListeners = (type: string) => {\n this.events[type] = []\n }\n}\n\nexport default new EventBus()\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unisat/wallet-state",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "Redux state management for UniSat wallet, shared between platforms",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "lib/index.mjs",
|
|
@@ -13,17 +13,18 @@
|
|
|
13
13
|
}
|
|
14
14
|
},
|
|
15
15
|
"files": [
|
|
16
|
-
"lib",
|
|
17
|
-
"src"
|
|
16
|
+
"lib/**/*",
|
|
17
|
+
"src/**/*",
|
|
18
|
+
"README.md"
|
|
18
19
|
],
|
|
19
20
|
"dependencies": {
|
|
20
21
|
"loglevel": "^1.8.0",
|
|
21
|
-
"@unisat/keyring-service": "1.0.0",
|
|
22
|
-
"@unisat/babylon-service": "1.0.1",
|
|
23
|
-
"@unisat/base-utils": "0.1.2",
|
|
24
22
|
"@unisat/wallet-types": "1.0.0",
|
|
25
23
|
"@unisat/wallet-shared": "0.1.1",
|
|
26
|
-
"@unisat/
|
|
24
|
+
"@unisat/babylon-service": "1.0.1",
|
|
25
|
+
"@unisat/base-utils": "0.1.2",
|
|
26
|
+
"@unisat/i18n": "1.0.0",
|
|
27
|
+
"@unisat/keyring-service": "1.0.0"
|
|
27
28
|
},
|
|
28
29
|
"peerDependencies": {
|
|
29
30
|
"redux-localstorage-simple": "^2.5.1",
|