@unisat/wallet-state 1.2.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/lib/index.d.mts +9 -1
  2. package/lib/index.d.ts +2827 -31
  3. package/lib/index.js +229 -101
  4. package/lib/index.js.map +1 -1
  5. package/lib/index.mjs +231 -104
  6. package/lib/index.mjs.map +1 -1
  7. package/lib/types/index.d.ts +34 -3
  8. package/package.json +3 -3
  9. package/src/context/NavigationContext.tsx +1 -0
  10. package/src/hooks/accounts.ts +7 -2
  11. package/src/hooks/transactions.ts +52 -8
  12. package/src/hooks/ui.ts +77 -65
  13. package/src/ui-hooks/useAddressTypeScreenLogic.ts +22 -8
  14. package/src/ui-hooks/useAlkanesNFTScreenLogic.ts +3 -2
  15. package/src/ui-hooks/useAlkanesTokenScreenLogic.ts +4 -2
  16. package/src/ui-hooks/useBRC20TokenScreenLogic.ts +4 -1
  17. package/src/ui-hooks/useCAT20TokenScreenLogic.ts +11 -2
  18. package/src/ui-hooks/useCAT721NFTScreenLogic.ts +3 -1
  19. package/src/ui-hooks/useOrdinalsInscriptionScreenLogic.ts +3 -2
  20. package/src/ui-hooks/useRunesTokenScreenLogic.ts +4 -2
  21. package/src/ui-hooks/useSendOrdinalsInscriptionScreenLogic.ts +2 -5
  22. package/src/ui-hooks/useSettingsTabScreenLogic.ts +18 -3
  23. package/src/ui-hooks/useSignMessageLogic.ts +37 -16
  24. package/src/ui-hooks/useSignPsbtLogic.ts +31 -15
  25. package/lib/actions/global.d.ts +0 -2
  26. package/lib/actions/global.d.ts.map +0 -1
  27. package/lib/context/ApprovalContext.d.ts +0 -9
  28. package/lib/context/ApprovalContext.d.ts.map +0 -1
  29. package/lib/context/DeviceContext.d.ts +0 -17
  30. package/lib/context/DeviceContext.d.ts.map +0 -1
  31. package/lib/context/I18nContext.d.ts +0 -13
  32. package/lib/context/I18nContext.d.ts.map +0 -1
  33. package/lib/context/NavigationContext.d.ts +0 -218
  34. package/lib/context/NavigationContext.d.ts.map +0 -1
  35. package/lib/context/PriceContext.d.ts +0 -13
  36. package/lib/context/PriceContext.d.ts.map +0 -1
  37. package/lib/context/StorageContext.d.ts +0 -60
  38. package/lib/context/StorageContext.d.ts.map +0 -1
  39. package/lib/context/ToolsContext.d.ts +0 -17
  40. package/lib/context/ToolsContext.d.ts.map +0 -1
  41. package/lib/context/WalletContext.d.ts +0 -493
  42. package/lib/context/WalletContext.d.ts.map +0 -1
  43. package/lib/context/index.d.ts +0 -9
  44. package/lib/context/index.d.ts.map +0 -1
  45. package/lib/hooks/accounts.d.ts +0 -34
  46. package/lib/hooks/accounts.d.ts.map +0 -1
  47. package/lib/hooks/base.d.ts +0 -14
  48. package/lib/hooks/base.d.ts.map +0 -1
  49. package/lib/hooks/browser.d.ts +0 -32
  50. package/lib/hooks/browser.d.ts.map +0 -1
  51. package/lib/hooks/discovery.d.ts +0 -17
  52. package/lib/hooks/discovery.d.ts.map +0 -1
  53. package/lib/hooks/global.d.ts +0 -43
  54. package/lib/hooks/global.d.ts.map +0 -1
  55. package/lib/hooks/index.d.ts +0 -10
  56. package/lib/hooks/index.d.ts.map +0 -1
  57. package/lib/hooks/keyrings.d.ts +0 -5
  58. package/lib/hooks/keyrings.d.ts.map +0 -1
  59. package/lib/hooks/settings.d.ts +0 -43
  60. package/lib/hooks/settings.d.ts.map +0 -1
  61. package/lib/hooks/transactions.d.ts +0 -67
  62. package/lib/hooks/transactions.d.ts.map +0 -1
  63. package/lib/hooks/ui.d.ts +0 -112
  64. package/lib/hooks/ui.d.ts.map +0 -1
  65. package/lib/index.d.ts.map +0 -1
  66. package/lib/reducers/accounts.d.ts +0 -49
  67. package/lib/reducers/accounts.d.ts.map +0 -1
  68. package/lib/reducers/browser.d.ts +0 -49
  69. package/lib/reducers/browser.d.ts.map +0 -1
  70. package/lib/reducers/discovery.d.ts +0 -22
  71. package/lib/reducers/discovery.d.ts.map +0 -1
  72. package/lib/reducers/global.d.ts +0 -35
  73. package/lib/reducers/global.d.ts.map +0 -1
  74. package/lib/reducers/index.d.ts +0 -9
  75. package/lib/reducers/index.d.ts.map +0 -1
  76. package/lib/reducers/keyrings.d.ts +0 -10
  77. package/lib/reducers/keyrings.d.ts.map +0 -1
  78. package/lib/reducers/settings.d.ts +0 -16
  79. package/lib/reducers/settings.d.ts.map +0 -1
  80. package/lib/reducers/transactions.d.ts +0 -61
  81. package/lib/reducers/transactions.d.ts.map +0 -1
  82. package/lib/reducers/ui.d.ts +0 -55
  83. package/lib/reducers/ui.d.ts.map +0 -1
  84. package/lib/types/index.d.ts.map +0 -1
  85. package/lib/types/ui.d.ts +0 -31
  86. package/lib/types/ui.d.ts.map +0 -1
  87. package/lib/ui-hooks/index.d.ts +0 -55
  88. package/lib/ui-hooks/index.d.ts.map +0 -1
  89. package/lib/ui-hooks/useActionOverviewSectionLogic.d.ts +0 -12
  90. package/lib/ui-hooks/useActionOverviewSectionLogic.d.ts.map +0 -1
  91. package/lib/ui-hooks/useAddressTypeScreenLogic.d.ts +0 -19
  92. package/lib/ui-hooks/useAddressTypeScreenLogic.d.ts.map +0 -1
  93. package/lib/ui-hooks/useAlkanesBalanceCardLogic.d.ts +0 -19
  94. package/lib/ui-hooks/useAlkanesBalanceCardLogic.d.ts.map +0 -1
  95. package/lib/ui-hooks/useAlkanesCollectionListLogic.d.ts +0 -11
  96. package/lib/ui-hooks/useAlkanesCollectionListLogic.d.ts.map +0 -1
  97. package/lib/ui-hooks/useAlkanesListLogic.d.ts +0 -14
  98. package/lib/ui-hooks/useAlkanesListLogic.d.ts.map +0 -1
  99. package/lib/ui-hooks/useAlkanesNFTListLogic.d.ts +0 -11
  100. package/lib/ui-hooks/useAlkanesNFTListLogic.d.ts.map +0 -1
  101. package/lib/ui-hooks/useAlkanesNFTScreenLogic.d.ts +0 -9
  102. package/lib/ui-hooks/useAlkanesNFTScreenLogic.d.ts.map +0 -1
  103. package/lib/ui-hooks/useAlkanesTokenScreenLogic.d.ts +0 -22
  104. package/lib/ui-hooks/useAlkanesTokenScreenLogic.d.ts.map +0 -1
  105. package/lib/ui-hooks/useAmountInputLogic.d.ts +0 -22
  106. package/lib/ui-hooks/useAmountInputLogic.d.ts.map +0 -1
  107. package/lib/ui-hooks/useAnnouncementCardLogic.d.ts +0 -11
  108. package/lib/ui-hooks/useAnnouncementCardLogic.d.ts.map +0 -1
  109. package/lib/ui-hooks/useBRC20BalanceCardLogic.d.ts +0 -26
  110. package/lib/ui-hooks/useBRC20BalanceCardLogic.d.ts.map +0 -1
  111. package/lib/ui-hooks/useBRC20InscribeTransferLogic.d.ts +0 -103
  112. package/lib/ui-hooks/useBRC20InscribeTransferLogic.d.ts.map +0 -1
  113. package/lib/ui-hooks/useBRC20ListLogic.d.ts +0 -14
  114. package/lib/ui-hooks/useBRC20ListLogic.d.ts.map +0 -1
  115. package/lib/ui-hooks/useBRC20ProgListLogic.d.ts +0 -14
  116. package/lib/ui-hooks/useBRC20ProgListLogic.d.ts.map +0 -1
  117. package/lib/ui-hooks/useBRC20SendScreenLogic.d.ts +0 -67
  118. package/lib/ui-hooks/useBRC20SendScreenLogic.d.ts.map +0 -1
  119. package/lib/ui-hooks/useBRC20SingleStepScreenLogic.d.ts +0 -36
  120. package/lib/ui-hooks/useBRC20SingleStepScreenLogic.d.ts.map +0 -1
  121. package/lib/ui-hooks/useBRC20TokenScreenLogic.d.ts +0 -75
  122. package/lib/ui-hooks/useBRC20TokenScreenLogic.d.ts.map +0 -1
  123. package/lib/ui-hooks/useBalanceCardLogic.d.ts +0 -26
  124. package/lib/ui-hooks/useBalanceCardLogic.d.ts.map +0 -1
  125. package/lib/ui-hooks/useBtcDisplayLogic.d.ts +0 -5
  126. package/lib/ui-hooks/useBtcDisplayLogic.d.ts.map +0 -1
  127. package/lib/ui-hooks/useCAT20BalanceCardLogic.d.ts +0 -20
  128. package/lib/ui-hooks/useCAT20BalanceCardLogic.d.ts.map +0 -1
  129. package/lib/ui-hooks/useCAT20ListLogic.d.ts +0 -14
  130. package/lib/ui-hooks/useCAT20ListLogic.d.ts.map +0 -1
  131. package/lib/ui-hooks/useCAT20TokenScreenLogic.d.ts +0 -19
  132. package/lib/ui-hooks/useCAT20TokenScreenLogic.d.ts.map +0 -1
  133. package/lib/ui-hooks/useCAT721ListLogic.d.ts +0 -11
  134. package/lib/ui-hooks/useCAT721ListLogic.d.ts.map +0 -1
  135. package/lib/ui-hooks/useCAT721NFTScreenLogic.d.ts +0 -9
  136. package/lib/ui-hooks/useCAT721NFTScreenLogic.d.ts.map +0 -1
  137. package/lib/ui-hooks/useCreatePasswordScreenLogic.d.ts +0 -27
  138. package/lib/ui-hooks/useCreatePasswordScreenLogic.d.ts.map +0 -1
  139. package/lib/ui-hooks/useCreateWalletLogicImportWordsStep.d.ts +0 -78
  140. package/lib/ui-hooks/useCreateWalletLogicImportWordsStep.d.ts.map +0 -1
  141. package/lib/ui-hooks/useEditAccountNameScreenLogic.d.ts +0 -18
  142. package/lib/ui-hooks/useEditAccountNameScreenLogic.d.ts.map +0 -1
  143. package/lib/ui-hooks/useEditContactScreenLogic.d.ts +0 -24
  144. package/lib/ui-hooks/useEditContactScreenLogic.d.ts.map +0 -1
  145. package/lib/ui-hooks/useEditWalletNameScreenLogic.d.ts +0 -15
  146. package/lib/ui-hooks/useEditWalletNameScreenLogic.d.ts.map +0 -1
  147. package/lib/ui-hooks/useExportMnemonicsScreenLogic.d.ts +0 -18
  148. package/lib/ui-hooks/useExportMnemonicsScreenLogic.d.ts.map +0 -1
  149. package/lib/ui-hooks/useExportPrivateKeyScreenLogic.d.ts +0 -17
  150. package/lib/ui-hooks/useExportPrivateKeyScreenLogic.d.ts.map +0 -1
  151. package/lib/ui-hooks/useFeeRateBarLogic.d.ts +0 -34
  152. package/lib/ui-hooks/useFeeRateBarLogic.d.ts.map +0 -1
  153. package/lib/ui-hooks/useInfiniteList.d.ts +0 -19
  154. package/lib/ui-hooks/useInfiniteList.d.ts.map +0 -1
  155. package/lib/ui-hooks/useInscriptionListLogic.d.ts +0 -11
  156. package/lib/ui-hooks/useInscriptionListLogic.d.ts.map +0 -1
  157. package/lib/ui-hooks/useLockTimePageLogic.d.ts +0 -11
  158. package/lib/ui-hooks/useLockTimePageLogic.d.ts.map +0 -1
  159. package/lib/ui-hooks/useNotificationsLogic.d.ts +0 -14
  160. package/lib/ui-hooks/useNotificationsLogic.d.ts.map +0 -1
  161. package/lib/ui-hooks/useOrdinalsInscriptionScreenLogic.d.ts +0 -27
  162. package/lib/ui-hooks/useOrdinalsInscriptionScreenLogic.d.ts.map +0 -1
  163. package/lib/ui-hooks/useRunesBalanceCardLogic.d.ts +0 -19
  164. package/lib/ui-hooks/useRunesBalanceCardLogic.d.ts.map +0 -1
  165. package/lib/ui-hooks/useRunesListLogic.d.ts +0 -14
  166. package/lib/ui-hooks/useRunesListLogic.d.ts.map +0 -1
  167. package/lib/ui-hooks/useRunesTokenScreenLogic.d.ts +0 -22
  168. package/lib/ui-hooks/useRunesTokenScreenLogic.d.ts.map +0 -1
  169. package/lib/ui-hooks/useSecurityCardLogic.d.ts +0 -1
  170. package/lib/ui-hooks/useSecurityCardLogic.d.ts.map +0 -1
  171. package/lib/ui-hooks/useSendAlkanesNFTScreenLogic.d.ts +0 -32
  172. package/lib/ui-hooks/useSendAlkanesNFTScreenLogic.d.ts.map +0 -1
  173. package/lib/ui-hooks/useSendAlkanesScreenLogic.d.ts +0 -37
  174. package/lib/ui-hooks/useSendAlkanesScreenLogic.d.ts.map +0 -1
  175. package/lib/ui-hooks/useSendCAT20ScreenLogic.d.ts +0 -44
  176. package/lib/ui-hooks/useSendCAT20ScreenLogic.d.ts.map +0 -1
  177. package/lib/ui-hooks/useSendCAT721ScreenLogic.d.ts +0 -40
  178. package/lib/ui-hooks/useSendCAT721ScreenLogic.d.ts.map +0 -1
  179. package/lib/ui-hooks/useSendOrdinalsInscriptionScreenLogic.d.ts +0 -22
  180. package/lib/ui-hooks/useSendOrdinalsInscriptionScreenLogic.d.ts.map +0 -1
  181. package/lib/ui-hooks/useSendRunesScreenLogic.d.ts +0 -30
  182. package/lib/ui-hooks/useSendRunesScreenLogic.d.ts.map +0 -1
  183. package/lib/ui-hooks/useSettingsTabScreenLogic.d.ts +0 -72
  184. package/lib/ui-hooks/useSettingsTabScreenLogic.d.ts.map +0 -1
  185. package/lib/ui-hooks/useSignMessageLogic.d.ts +0 -54
  186. package/lib/ui-hooks/useSignMessageLogic.d.ts.map +0 -1
  187. package/lib/ui-hooks/useSignPsbtLogic.d.ts +0 -82
  188. package/lib/ui-hooks/useSignPsbtLogic.d.ts.map +0 -1
  189. package/lib/ui-hooks/useSplitOrdinalsInscriptionScreenLogic.d.ts +0 -15
  190. package/lib/ui-hooks/useSplitOrdinalsInscriptionScreenLogic.d.ts.map +0 -1
  191. package/lib/ui-hooks/useTxConfirmScreenLogic.d.ts +0 -8
  192. package/lib/ui-hooks/useTxConfirmScreenLogic.d.ts.map +0 -1
  193. package/lib/ui-hooks/useTxCreateScreenLogic.d.ts +0 -28
  194. package/lib/ui-hooks/useTxCreateScreenLogic.d.ts.map +0 -1
  195. package/lib/ui-hooks/useTxFailScreenLogic.d.ts +0 -7
  196. package/lib/ui-hooks/useTxFailScreenLogic.d.ts.map +0 -1
  197. package/lib/ui-hooks/useTxSuccessScreenLogic.d.ts +0 -8
  198. package/lib/ui-hooks/useTxSuccessScreenLogic.d.ts.map +0 -1
  199. package/lib/updater/accounts.d.ts +0 -2
  200. package/lib/updater/accounts.d.ts.map +0 -1
  201. package/lib/updater/index.d.ts +0 -2
  202. package/lib/updater/index.d.ts.map +0 -1
  203. package/lib/utils/bitcoin-utils.d.ts +0 -7
  204. package/lib/utils/bitcoin-utils.d.ts.map +0 -1
  205. package/lib/utils/eventBus.d.ts +0 -12
  206. package/lib/utils/eventBus.d.ts.map +0 -1
  207. package/lib/utils/password-utils.d.ts +0 -12
  208. package/lib/utils/password-utils.d.ts.map +0 -1
  209. package/lib/utils/ui-utils.d.ts +0 -4
  210. package/lib/utils/ui-utils.d.ts.map +0 -1
package/lib/index.mjs CHANGED
@@ -2,8 +2,8 @@ import { save, load } from 'redux-localstorage-simple';
2
2
  import { createAction, createSlice, configureStore } from '@reduxjs/toolkit';
3
3
  import { setupListeners } from '@reduxjs/toolkit/dist/query/react/index.js';
4
4
  import { ChainType, AddressType, NetworkType } from '@unisat/wallet-types';
5
- import { DEFAULT_LOCKTIME_ID, FALLBACK_LOCALE, CHAINS_MAP, CAT_VERSION, PlatformEnv, BUS_METHODS, getAccountDerivationPath, AnnouncementLinkType, MAX_ALIAS_NAME_LENGTH, getAutoLockTimes, COIN_DUST, RESTORE_WALLETS, WordsType, ADDRESS_TYPES as ADDRESS_TYPES$1, SignState, PsbtActionType, PsbtActionDetailType, RestoreWalletType, OW_HD_PATH, FEEDBACK_URL } from '@unisat/wallet-shared';
6
- import React, { createContext, useContext, useCallback, useState, useEffect, useMemo, useRef, startTransition } from 'react';
5
+ import { DEFAULT_LOCKTIME_ID, FALLBACK_LOCALE, getAccountCapabilities, CHAINS_MAP, CAT_VERSION, PlatformEnv, BUS_METHODS, getAccountDerivationPath, AnnouncementLinkType, MAX_ALIAS_NAME_LENGTH, getAutoLockTimes, COIN_DUST, RESTORE_WALLETS, WordsType, ADDRESS_TYPES as ADDRESS_TYPES$1, SignState, AccountSignMethod, PsbtActionType, PsbtActionDetailType, RestoreWalletType, OW_HD_PATH, FEEDBACK_URL } from '@unisat/wallet-shared';
6
+ import React, { createContext, useContext, useMemo, useCallback, useState, useEffect, useRef, startTransition } from 'react';
7
7
  import { jsx } from 'react/jsx-runtime';
8
8
  import compareVersions from 'compare-versions';
9
9
  import { BABYLON_CONFIG_MAP } from '@unisat/babylon-service/types';
@@ -1076,6 +1076,10 @@ function useCurrentAddress() {
1076
1076
  const accountsState = useAccountsState();
1077
1077
  return accountsState.current.address;
1078
1078
  }
1079
+ function useCurrentAccountCapabilities() {
1080
+ const currentAccount = useCurrentAccount();
1081
+ return useMemo(() => getAccountCapabilities(currentAccount), [currentAccount]);
1082
+ }
1079
1083
  function useAccounts() {
1080
1084
  const accountsState = useAccountsState();
1081
1085
  return accountsState.accounts;
@@ -2121,6 +2125,7 @@ function usePrepareSendBTCCallback() {
2121
2125
  const fromAddress = useAccountAddress();
2122
2126
  const utxos = useUtxos();
2123
2127
  const fetchUtxos = useFetchUtxosCallback();
2128
+ const accountCapabilities = useCurrentAccountCapabilities();
2124
2129
  const { t } = useI18n();
2125
2130
  return useCallback(
2126
2131
  async ({
@@ -2132,6 +2137,9 @@ function usePrepareSendBTCCallback() {
2132
2137
  disableAutoAdjust,
2133
2138
  enableRBF
2134
2139
  }) => {
2140
+ if (!accountCapabilities.canCreateSigningRequest) {
2141
+ throw new Error(t("not_supported"));
2142
+ }
2135
2143
  let _utxos = utxos;
2136
2144
  if (_utxos.length === 0) {
2137
2145
  _utxos = await fetchUtxos();
@@ -2165,12 +2173,14 @@ function usePrepareSendBTCCallback() {
2165
2173
  }
2166
2174
  return res;
2167
2175
  },
2168
- [dispatch, wallet, fromAddress, utxos, fetchUtxos]
2176
+ [dispatch, wallet, fromAddress, utxos, fetchUtxos, accountCapabilities.canCreateSigningRequest, t]
2169
2177
  );
2170
2178
  }
2171
2179
  function usePrepareSendBypassHeadOffsetsCallback() {
2172
2180
  const dispatch = useAppDispatch();
2173
2181
  const wallet = useWallet();
2182
+ const accountCapabilities = useCurrentAccountCapabilities();
2183
+ const { t } = useI18n();
2174
2184
  return useCallback(
2175
2185
  async ({
2176
2186
  toAddressInfo,
@@ -2178,6 +2188,9 @@ function usePrepareSendBypassHeadOffsetsCallback() {
2178
2188
  feeRate,
2179
2189
  enableRBF
2180
2190
  }) => {
2191
+ if (!accountCapabilities.canCreateSigningRequest) {
2192
+ throw new Error(t("not_supported"));
2193
+ }
2181
2194
  const res = await wallet.createSendBTCOffsetPsbt(
2182
2195
  [
2183
2196
  {
@@ -2190,7 +2203,7 @@ function usePrepareSendBypassHeadOffsetsCallback() {
2190
2203
  );
2191
2204
  return res;
2192
2205
  },
2193
- [dispatch, wallet]
2206
+ [dispatch, wallet, accountCapabilities.canCreateSigningRequest, t]
2194
2207
  );
2195
2208
  }
2196
2209
  function usePushBitcoinTxCallback() {
@@ -2238,6 +2251,8 @@ function usePrepareSendOrdinalsInscriptionCallback() {
2238
2251
  const fromAddress = useAccountAddress();
2239
2252
  const utxos = useUtxos();
2240
2253
  const fetchUtxos = useFetchUtxosCallback();
2254
+ const accountCapabilities = useCurrentAccountCapabilities();
2255
+ const { t } = useI18n();
2241
2256
  return useCallback(
2242
2257
  async ({
2243
2258
  toAddressInfo,
@@ -2246,6 +2261,9 @@ function usePrepareSendOrdinalsInscriptionCallback() {
2246
2261
  outputValue,
2247
2262
  enableRBF
2248
2263
  }) => {
2264
+ if (!accountCapabilities.canCreateSigningRequest) {
2265
+ throw new Error(t("not_supported"));
2266
+ }
2249
2267
  if (!feeRate) {
2250
2268
  const summary = await wallet.getFeeSummary();
2251
2269
  feeRate = summary.list[1].feeRate;
@@ -2264,7 +2282,7 @@ function usePrepareSendOrdinalsInscriptionCallback() {
2264
2282
  });
2265
2283
  return toSignData;
2266
2284
  },
2267
- [dispatch, wallet, fromAddress, utxos]
2285
+ [dispatch, wallet, fromAddress, utxos, accountCapabilities.canCreateSigningRequest, t]
2268
2286
  );
2269
2287
  }
2270
2288
  function usePrepareSendOrdinalsInscriptionsCallback() {
@@ -2273,6 +2291,8 @@ function usePrepareSendOrdinalsInscriptionsCallback() {
2273
2291
  const fromAddress = useAccountAddress();
2274
2292
  const fetchUtxos = useFetchUtxosCallback();
2275
2293
  const utxos = useUtxos();
2294
+ const accountCapabilities = useCurrentAccountCapabilities();
2295
+ const { t } = useI18n();
2276
2296
  return useCallback(
2277
2297
  async ({
2278
2298
  toAddressInfo,
@@ -2280,6 +2300,9 @@ function usePrepareSendOrdinalsInscriptionsCallback() {
2280
2300
  feeRate,
2281
2301
  enableRBF
2282
2302
  }) => {
2303
+ if (!accountCapabilities.canCreateSigningRequest) {
2304
+ throw new Error(t("not_supported"));
2305
+ }
2283
2306
  if (!feeRate) {
2284
2307
  const summary = await wallet.getFeeSummary();
2285
2308
  feeRate = summary.list[1].feeRate;
@@ -2297,7 +2320,7 @@ function usePrepareSendOrdinalsInscriptionsCallback() {
2297
2320
  });
2298
2321
  return res;
2299
2322
  },
2300
- [dispatch, wallet, fromAddress, utxos]
2323
+ [dispatch, wallet, fromAddress, utxos, accountCapabilities.canCreateSigningRequest, t]
2301
2324
  );
2302
2325
  }
2303
2326
  function useCreateSplitTxCallback() {
@@ -2307,6 +2330,8 @@ function useCreateSplitTxCallback() {
2307
2330
  const utxos = useUtxos();
2308
2331
  const fetchUtxos = useFetchUtxosCallback();
2309
2332
  useCurrentAccount();
2333
+ const accountCapabilities = useCurrentAccountCapabilities();
2334
+ const { t } = useI18n();
2310
2335
  return useCallback(
2311
2336
  async ({
2312
2337
  inscriptionId,
@@ -2314,6 +2339,9 @@ function useCreateSplitTxCallback() {
2314
2339
  outputValue,
2315
2340
  enableRBF
2316
2341
  }) => {
2342
+ if (!accountCapabilities.canCreateSigningRequest) {
2343
+ throw new Error(t("not_supported"));
2344
+ }
2317
2345
  let btcUtxos = utxos;
2318
2346
  if (btcUtxos.length === 0) {
2319
2347
  btcUtxos = await fetchUtxos();
@@ -2327,7 +2355,7 @@ function useCreateSplitTxCallback() {
2327
2355
  });
2328
2356
  return res;
2329
2357
  },
2330
- [dispatch, wallet, fromAddress, utxos]
2358
+ [dispatch, wallet, fromAddress, utxos, accountCapabilities.canCreateSigningRequest, t]
2331
2359
  );
2332
2360
  }
2333
2361
  function usePushOrdinalsTxCallback() {
@@ -2426,6 +2454,8 @@ function usePrepareSendRunesCallback() {
2426
2454
  const assetUtxosRunes = useAssetUtxosRunes();
2427
2455
  const fetchAssetUtxosRunes = useFetchAssetUtxosRunesCallback();
2428
2456
  const account = useCurrentAccount();
2457
+ const accountCapabilities = useCurrentAccountCapabilities();
2458
+ const { t } = useI18n();
2429
2459
  return useCallback(
2430
2460
  async ({
2431
2461
  toAddressInfo,
@@ -2435,6 +2465,9 @@ function usePrepareSendRunesCallback() {
2435
2465
  feeRate,
2436
2466
  enableRBF
2437
2467
  }) => {
2468
+ if (!accountCapabilities.canCreateSigningRequest) {
2469
+ throw new Error(t("not_supported"));
2470
+ }
2438
2471
  if (!feeRate) {
2439
2472
  const summary = await wallet.getFeeSummary();
2440
2473
  feeRate = summary.list[1].feeRate;
@@ -2459,7 +2492,17 @@ function usePrepareSendRunesCallback() {
2459
2492
  });
2460
2493
  return toSignData;
2461
2494
  },
2462
- [dispatch, wallet, fromAddress, utxos, assetUtxosRunes, fetchAssetUtxosRunes, account]
2495
+ [
2496
+ dispatch,
2497
+ wallet,
2498
+ fromAddress,
2499
+ utxos,
2500
+ assetUtxosRunes,
2501
+ fetchAssetUtxosRunes,
2502
+ account,
2503
+ accountCapabilities.canCreateSigningRequest,
2504
+ t
2505
+ ]
2463
2506
  );
2464
2507
  }
2465
2508
  function useRunesTx() {
@@ -2469,8 +2512,13 @@ function useRunesTx() {
2469
2512
  function usePrepareSendAlkanesCallback() {
2470
2513
  const wallet = useWallet();
2471
2514
  const account = useCurrentAccount();
2515
+ const accountCapabilities = useCurrentAccountCapabilities();
2516
+ const { t } = useI18n();
2472
2517
  const callback = useCallback(
2473
2518
  async (toAddressInfo, alkaneid, amount, feeRate, type, enableRBF) => {
2519
+ if (!accountCapabilities.canCreateSigningRequest) {
2520
+ throw new Error(t("not_supported"));
2521
+ }
2474
2522
  return await wallet.createSendAlkanesPsbt({
2475
2523
  to: toAddressInfo.address,
2476
2524
  alkaneid,
@@ -2480,7 +2528,7 @@ function usePrepareSendAlkanesCallback() {
2480
2528
  enableRBF
2481
2529
  });
2482
2530
  },
2483
- [wallet, account]
2531
+ [wallet, account, accountCapabilities.canCreateSigningRequest, t]
2484
2532
  );
2485
2533
  return callback;
2486
2534
  }
@@ -2513,19 +2561,22 @@ function useUiTxCreateScreen() {
2513
2561
  }
2514
2562
  function useUpdateUiTxCreateScreen() {
2515
2563
  const dispatch = useAppDispatch();
2516
- return ({
2517
- toInfo,
2518
- inputAmount,
2519
- enableRBF
2520
- }) => {
2521
- dispatch(
2522
- uiActions.updateTxCreateScreen({
2523
- toInfo,
2524
- inputAmount,
2525
- enableRBF
2526
- })
2527
- );
2528
- };
2564
+ return useCallback(
2565
+ ({
2566
+ toInfo,
2567
+ inputAmount,
2568
+ enableRBF
2569
+ }) => {
2570
+ dispatch(
2571
+ uiActions.updateTxCreateScreen({
2572
+ toInfo,
2573
+ inputAmount,
2574
+ enableRBF
2575
+ })
2576
+ );
2577
+ },
2578
+ [dispatch]
2579
+ );
2529
2580
  }
2530
2581
  function useFeeRateBar() {
2531
2582
  const uiState = useUIState();
@@ -2533,29 +2584,32 @@ function useFeeRateBar() {
2533
2584
  }
2534
2585
  function useUpdateFeeRateBar() {
2535
2586
  const dispatch = useAppDispatch();
2536
- return ({
2537
- feeRate,
2538
- feeRateInputVal,
2539
- enableLowFeeRate,
2540
- feeOptionIndex,
2541
- showCustomInput
2542
- }) => {
2543
- dispatch(
2544
- uiActions.updateFeeRateBar({
2545
- feeRate,
2546
- feeRateInputVal,
2547
- enableLowFeeRate,
2548
- feeOptionIndex,
2549
- showCustomInput
2550
- })
2551
- );
2552
- };
2587
+ return useCallback(
2588
+ ({
2589
+ feeRate,
2590
+ feeRateInputVal,
2591
+ enableLowFeeRate,
2592
+ feeOptionIndex,
2593
+ showCustomInput
2594
+ }) => {
2595
+ dispatch(
2596
+ uiActions.updateFeeRateBar({
2597
+ feeRate,
2598
+ feeRateInputVal,
2599
+ enableLowFeeRate,
2600
+ feeOptionIndex,
2601
+ showCustomInput
2602
+ })
2603
+ );
2604
+ },
2605
+ [dispatch]
2606
+ );
2553
2607
  }
2554
2608
  function useResetFeeRateBar() {
2555
2609
  const dispatch = useAppDispatch();
2556
- return () => {
2610
+ return useCallback(() => {
2557
2611
  dispatch(uiActions.resetFeeRateBar());
2558
- };
2612
+ }, [dispatch]);
2559
2613
  }
2560
2614
  function useAddressInput() {
2561
2615
  const uiState = useUIState();
@@ -2563,20 +2617,23 @@ function useAddressInput() {
2563
2617
  }
2564
2618
  function useUpdateAddressInput() {
2565
2619
  const dispatch = useAppDispatch();
2566
- return ({ address, domain }) => {
2567
- dispatch(
2568
- uiActions.updateAddressInput({
2569
- address,
2570
- domain
2571
- })
2572
- );
2573
- };
2620
+ return useCallback(
2621
+ ({ address, domain }) => {
2622
+ dispatch(
2623
+ uiActions.updateAddressInput({
2624
+ address,
2625
+ domain
2626
+ })
2627
+ );
2628
+ },
2629
+ [dispatch]
2630
+ );
2574
2631
  }
2575
2632
  function useResetAddressInput() {
2576
2633
  const dispatch = useAppDispatch();
2577
- return () => {
2634
+ return useCallback(() => {
2578
2635
  dispatch(uiActions.resetAddressInput());
2579
- };
2636
+ }, [dispatch]);
2580
2637
  }
2581
2638
  function useAmountInput() {
2582
2639
  const uiState = useUIState();
@@ -2584,32 +2641,35 @@ function useAmountInput() {
2584
2641
  }
2585
2642
  function useUpdateAmountInput() {
2586
2643
  const dispatch = useAppDispatch();
2587
- return ({ amount }) => {
2588
- dispatch(
2589
- uiActions.updateAmountInput({
2590
- amount
2591
- })
2592
- );
2593
- };
2644
+ return useCallback(
2645
+ ({ amount }) => {
2646
+ dispatch(
2647
+ uiActions.updateAmountInput({
2648
+ amount
2649
+ })
2650
+ );
2651
+ },
2652
+ [dispatch]
2653
+ );
2594
2654
  }
2595
2655
  function useResetAmountInput() {
2596
2656
  const dispatch = useAppDispatch();
2597
- return () => {
2657
+ return useCallback(() => {
2598
2658
  dispatch(uiActions.resetAmountInput());
2599
- };
2659
+ }, [dispatch]);
2600
2660
  }
2601
2661
  function useResetTxState() {
2602
2662
  const dispatch = useAppDispatch();
2603
- return () => {
2663
+ return useCallback(() => {
2604
2664
  dispatch(uiActions.resetTxCreateScreen());
2605
2665
  dispatch(uiActions.resetFeeRateBar());
2606
- };
2666
+ }, [dispatch]);
2607
2667
  }
2608
2668
  function useResetUiTxCreateScreen() {
2609
2669
  const dispatch = useAppDispatch();
2610
- return () => {
2670
+ return useCallback(() => {
2611
2671
  dispatch(uiActions.resetTxCreateScreen());
2612
- };
2672
+ }, [dispatch]);
2613
2673
  }
2614
2674
  var useThrottle = (callback, delay, lastCallRef) => {
2615
2675
  return useCallback(
@@ -2896,6 +2956,10 @@ function useAddressTypeScreenLogic() {
2896
2956
  const wallet = useWallet();
2897
2957
  const currentKeyring = useCurrentKeyring();
2898
2958
  const account = useCurrentAccount();
2959
+ const currentKeyringCapabilities = useMemo(
2960
+ () => getAccountCapabilities({ type: currentKeyring.type }),
2961
+ [currentKeyring.type]
2962
+ );
2899
2963
  const nav = useNavigation();
2900
2964
  useAppDispatch();
2901
2965
  const reloadAccounts = useReloadAccounts();
@@ -2933,7 +2997,7 @@ function useAddressTypeScreenLogic() {
2933
2997
  loadAddresses();
2934
2998
  }, []);
2935
2999
  const addressTypes = useMemo(() => {
2936
- if (currentKeyring.type === KeyringType.ColdWalletKeyring) {
3000
+ if (!currentKeyringCapabilities.canChangeAddressType) {
2937
3001
  return ADDRESS_TYPES.filter((v) => v.value === currentKeyring.addressType);
2938
3002
  }
2939
3003
  if (currentKeyring.type === KeyringType.HdKeyring) {
@@ -2958,7 +3022,14 @@ function useAddressTypeScreenLogic() {
2958
3022
  (a, b) => a.displayIndex - b.displayIndex
2959
3023
  );
2960
3024
  }
2961
- }, [currentKeyring.type, currentKeyring.addressType, addressAssets, addresses]);
3025
+ }, [
3026
+ currentKeyring.type,
3027
+ currentKeyring.addressType,
3028
+ currentKeyringCapabilities.canChangeAddressType,
3029
+ currentKeyring.accountIndexDerivation,
3030
+ addressAssets,
3031
+ addresses
3032
+ ]);
2962
3033
  const items = useMemo(() => {
2963
3034
  return addressTypes.map((v) => {
2964
3035
  const address = addresses[v.value];
@@ -2967,7 +3038,11 @@ function useAddressTypeScreenLogic() {
2967
3038
  satoshis: 0,
2968
3039
  total_inscription: 0
2969
3040
  };
2970
- const derivedPath = getAccountDerivationPath(v.hdPath, account.index || 0, currentKeyring.accountIndexDerivation);
3041
+ const derivedPath = getAccountDerivationPath(
3042
+ v.hdPath,
3043
+ account.index || 0,
3044
+ currentKeyring.accountIndexDerivation
3045
+ );
2971
3046
  let name = `${v.name} (${derivedPath})`;
2972
3047
  if (currentKeyring.type === KeyringType.SimpleKeyring) {
2973
3048
  name = `${v.name}`;
@@ -2986,8 +3061,8 @@ function useAddressTypeScreenLogic() {
2986
3061
  if (item.value == currentKeyring.addressType) {
2987
3062
  return;
2988
3063
  }
2989
- if (currentKeyring.type === KeyringType.ColdWalletKeyring) {
2990
- tools.toastError(t("Cold wallet address type cannot be changed"));
3064
+ if (!currentKeyringCapabilities.canChangeAddressType) {
3065
+ tools.toastError(t("not_supported"));
2991
3066
  return;
2992
3067
  }
2993
3068
  await wallet.changeAddressType(item.value);
@@ -3914,6 +3989,7 @@ function useBRC20TokenScreenLogic() {
3914
3989
  });
3915
3990
  const wallet = useWallet();
3916
3991
  const account = useCurrentAccount();
3992
+ const accountCapabilities = useCurrentAccountCapabilities();
3917
3993
  const [loading, setLoading] = useState(true);
3918
3994
  const [deployInscription, setDeployInscription] = useState();
3919
3995
  const resetTxState = useResetTxState();
@@ -3954,11 +4030,11 @@ function useBRC20TokenScreenLogic() {
3954
4030
  }, [tokenSummary]);
3955
4031
  const enableTransfer = useMemo(() => {
3956
4032
  let enable = false;
3957
- if (tokenSummary.tokenBalance.overallBalance !== "0" && tokenSummary.tokenBalance.overallBalance !== "") {
4033
+ if (accountCapabilities.canCreateSigningRequest && tokenSummary.tokenBalance.overallBalance !== "0" && tokenSummary.tokenBalance.overallBalance !== "") {
3958
4034
  enable = true;
3959
4035
  }
3960
4036
  return enable;
3961
- }, [tokenSummary]);
4037
+ }, [accountCapabilities.canCreateSigningRequest, tokenSummary]);
3962
4038
  const tools = useTools();
3963
4039
  const chainType = useChainType();
3964
4040
  const chain = useChain();
@@ -5093,6 +5169,7 @@ function useAlkanesNFTScreenLogic() {
5093
5169
  const { alkanesInfo } = nav.getRouteState();
5094
5170
  const { t } = useI18n();
5095
5171
  const resetTxState = useResetTxState();
5172
+ const accountCapabilities = useCurrentAccountCapabilities();
5096
5173
  const [availableUtxo, setAvailableUtxo] = useState(0);
5097
5174
  const wallet = useWallet();
5098
5175
  useEffect(() => {
@@ -5111,7 +5188,7 @@ function useAlkanesNFTScreenLogic() {
5111
5188
  alkanesInfo
5112
5189
  });
5113
5190
  };
5114
- const disabledSend = availableUtxo <= 0;
5191
+ const disabledSend = !accountCapabilities.canCreateSigningRequest || availableUtxo <= 0;
5115
5192
  return {
5116
5193
  alkanesInfo,
5117
5194
  t,
@@ -5155,6 +5232,7 @@ function useAlkanesTokenScreenLogic() {
5155
5232
  });
5156
5233
  const wallet = useWallet();
5157
5234
  const account = useCurrentAccount();
5235
+ const accountCapabilities = useCurrentAccountCapabilities();
5158
5236
  const [loading, setLoading] = useState(true);
5159
5237
  const [warning, setWarning] = useState(false);
5160
5238
  const { t } = useI18n();
@@ -5170,11 +5248,11 @@ function useAlkanesTokenScreenLogic() {
5170
5248
  }, [tokenSummary.mintUrl]);
5171
5249
  const enableTransfer = useMemo(() => {
5172
5250
  let enable = false;
5173
- if (tokenSummary.tokenBalance.amount !== "0") {
5251
+ if (accountCapabilities.canCreateSigningRequest && tokenSummary.tokenBalance.amount !== "0") {
5174
5252
  enable = true;
5175
5253
  }
5176
5254
  return enable;
5177
- }, [tokenSummary]);
5255
+ }, [accountCapabilities.canCreateSigningRequest, tokenSummary]);
5178
5256
  const tools = useTools();
5179
5257
  const enableTrade = useMemo(() => {
5180
5258
  return tokenSummary.tradeUrl && tokenSummary.tradeUrl.trim() !== "";
@@ -5438,6 +5516,7 @@ function useOrdinalsInscriptionScreenLogic() {
5438
5516
  const [isLoadingDetails, setIsLoadingDetails] = useState(false);
5439
5517
  const [isInitialLoading, setIsInitialLoading] = useState(!props.inscription);
5440
5518
  const currentAccount = useCurrentAccount();
5519
+ const accountCapabilities = useCurrentAccountCapabilities();
5441
5520
  const resetTxState = useResetTxState();
5442
5521
  const { t } = useI18n();
5443
5522
  const [isNeedToSplit, setIsNeedToSplit] = useState(false);
@@ -5500,7 +5579,7 @@ function useOrdinalsInscriptionScreenLogic() {
5500
5579
  nav.navigate("SendOrdinalsInscriptionScreen", { inscription, inscriptionId });
5501
5580
  };
5502
5581
  const isUnconfirmed = inscription ? inscription.timestamp == 0 : false;
5503
- const withSend = inscription ? currentAccount.address === inscription.address : false;
5582
+ const withSend = inscription ? accountCapabilities.canCreateSigningRequest && currentAccount.address === inscription.address : false;
5504
5583
  const children = inscription ? inscription.children || [] : [];
5505
5584
  const parents = inscription ? inscription.parents || [] : [];
5506
5585
  const hasProvenance = children.length > 0 || parents.length > 0;
@@ -5571,6 +5650,7 @@ function useRunesTokenScreenLogic() {
5571
5650
  });
5572
5651
  const wallet = useWallet();
5573
5652
  const account = useCurrentAccount();
5653
+ const accountCapabilities = useCurrentAccountCapabilities();
5574
5654
  const [loading, setLoading] = useState(true);
5575
5655
  const { t } = useI18n();
5576
5656
  useEffect(() => {
@@ -5582,11 +5662,11 @@ function useRunesTokenScreenLogic() {
5582
5662
  const enableMint = tokenSummary.runeInfo.mintable;
5583
5663
  const enableTransfer = useMemo(() => {
5584
5664
  let enable = false;
5585
- if (tokenSummary.runeBalance.amount !== "0") {
5665
+ if (accountCapabilities.canCreateSigningRequest && tokenSummary.runeBalance.amount !== "0") {
5586
5666
  enable = true;
5587
5667
  }
5588
5668
  return enable;
5589
- }, [tokenSummary]);
5669
+ }, [accountCapabilities.canCreateSigningRequest, tokenSummary]);
5590
5670
  const tools = useTools();
5591
5671
  const ordinalsWebsite = useOrdinalsWebsite();
5592
5672
  const resetTxState = useResetTxState();
@@ -6962,6 +7042,7 @@ function useCAT20TokenScreenLogic() {
6962
7042
  const wallet = useWallet();
6963
7043
  const account = useCurrentAccount();
6964
7044
  const keyring = useCurrentKeyring();
7045
+ const accountCapabilities = useCurrentAccountCapabilities();
6965
7046
  const [loading, setLoading] = useState(true);
6966
7047
  const tools = useTools();
6967
7048
  useEffect(() => {
@@ -6973,11 +7054,12 @@ function useCAT20TokenScreenLogic() {
6973
7054
  const tokenUrl = useCAT20TokenInfoExplorerUrl(version, tokenSummary.cat20Info.tokenId);
6974
7055
  const enableTransfer = useMemo(() => {
6975
7056
  let enable = false;
6976
- if (tokenSummary.cat20Balance && tokenSummary.cat20Balance.amount !== "0") {
7057
+ if (accountCapabilities.canCreateSigningRequest && tokenSummary.cat20Balance && tokenSummary.cat20Balance.amount !== "0") {
6977
7058
  enable = true;
6978
7059
  }
6979
7060
  return enable;
6980
- }, [tokenSummary]);
7061
+ }, [accountCapabilities.canCreateSigningRequest, tokenSummary]);
7062
+ const enableMerge = accountCapabilities.canCreateSigningRequest;
6981
7063
  const chainType = useChainType();
6982
7064
  const enableTrade = useMemo(() => {
6983
7065
  if (chainType === ChainType.FRACTAL_BITCOIN_MAINNET && version === CAT_VERSION.V1) {
@@ -6992,6 +7074,10 @@ function useCAT20TokenScreenLogic() {
6992
7074
  nav.goBack();
6993
7075
  };
6994
7076
  const onClickMerge = (e) => {
7077
+ if (!accountCapabilities.canCreateSigningRequest) {
7078
+ tools.toastError(t("not_supported"));
7079
+ return;
7080
+ }
6995
7081
  if (keyring.type === KeyringType.KeystoneKeyring) {
6996
7082
  tools.toastError(t("merge_utxos_is_not_supported_for_keystone_yet"));
6997
7083
  return;
@@ -7027,6 +7113,7 @@ function useCAT20TokenScreenLogic() {
7027
7113
  loading,
7028
7114
  tokenUrl,
7029
7115
  enableTransfer,
7116
+ enableMerge,
7030
7117
  enableTrade,
7031
7118
  iconInfo,
7032
7119
  onClickMerge,
@@ -7602,6 +7689,7 @@ function useCAT721NFTScreenLogic() {
7602
7689
  const { collectionInfo, localId, version } = nav.getRouteState();
7603
7690
  const { t } = useI18n();
7604
7691
  const resetTxState = useResetTxState();
7692
+ const accountCapabilities = useCurrentAccountCapabilities();
7605
7693
  const onClickBack = () => {
7606
7694
  nav.goBack();
7607
7695
  };
@@ -7622,7 +7710,8 @@ function useCAT721NFTScreenLogic() {
7622
7710
  t,
7623
7711
  // actions
7624
7712
  onClickBack,
7625
- onClickSend
7713
+ onClickSend,
7714
+ disabledSend: !accountCapabilities.canCreateSigningRequest
7626
7715
  };
7627
7716
  }
7628
7717
  function useSignMessageLogic(props) {
@@ -7638,10 +7727,10 @@ function useSignMessageLogic(props) {
7638
7727
  const [loading, setLoading] = useState(false);
7639
7728
  const [isKeystoneSigning, setIsKeystoneSigning] = useState(false);
7640
7729
  const [isColdWalletSigning, setIsColdWalletSigning] = useState(false);
7730
+ const [readonlySignature, setReadonlySignature] = useState("");
7641
7731
  const wallet = useWallet();
7642
- useTools();
7643
- const currentAccount = useCurrentAccount();
7644
- const keyringType = currentAccount.type;
7732
+ const tools = useTools();
7733
+ const accountCapabilities = useCurrentAccountCapabilities();
7645
7734
  const { t } = useI18n();
7646
7735
  const [disclaimerVisible, setDisclaimerVisible] = useState(false);
7647
7736
  const [signingTxIndex, setSigningTxIndex] = useState(toSignMessages.length > 1 ? -1 : 0);
@@ -7659,11 +7748,11 @@ function useSignMessageLogic(props) {
7659
7748
  if (toSignMessages.length <= 1) {
7660
7749
  return;
7661
7750
  }
7662
- if (keyringType === KeyringType.KeystoneKeyring || keyringType === KeyringType.ColdWalletKeyring) {
7751
+ if (accountCapabilities.signMethod !== AccountSignMethod.Local) {
7663
7752
  return;
7664
7753
  }
7665
7754
  setAllowQuickMultiSign(websiteResult.allowQuickMultiSign && toSignMessages.length > 1);
7666
- }, [websiteResult, keyringType]);
7755
+ }, [websiteResult, accountCapabilities, toSignMessages.length]);
7667
7756
  useAsyncEffect(async () => {
7668
7757
  const website = session?.origin;
7669
7758
  if (website) {
@@ -7760,12 +7849,27 @@ function useSignMessageLogic(props) {
7760
7849
  }
7761
7850
  };
7762
7851
  const onNextStep = () => {
7763
- if (keyringType === KeyringType.KeystoneKeyring) {
7764
- setIsKeystoneSigning(true);
7765
- } else if (keyringType === KeyringType.ColdWalletKeyring) {
7766
- setIsColdWalletSigning(true);
7767
- } else {
7768
- localSign();
7852
+ switch (accountCapabilities.signMethod) {
7853
+ case AccountSignMethod.Keystone:
7854
+ setIsKeystoneSigning(true);
7855
+ return;
7856
+ case AccountSignMethod.ColdWallet:
7857
+ setIsColdWalletSigning(true);
7858
+ return;
7859
+ case AccountSignMethod.External:
7860
+ if (!readonlySignature) {
7861
+ tools.toastError(t("please_enter_your_signature"));
7862
+ return;
7863
+ }
7864
+ onSignedData({ signature: readonlySignature }, signingTxIndex);
7865
+ setReadonlySignature("");
7866
+ return;
7867
+ case AccountSignMethod.Local:
7868
+ localSign();
7869
+ return;
7870
+ case AccountSignMethod.None:
7871
+ default:
7872
+ tools.toastError(t("not_supported"));
7769
7873
  }
7770
7874
  };
7771
7875
  const onSignedData = (data, signingTxIndex2) => {
@@ -7840,6 +7944,8 @@ function useSignMessageLogic(props) {
7840
7944
  onKeystoneSigningBack,
7841
7945
  onColdWalletSigningSuccess,
7842
7946
  onColdWalletSigningBack,
7947
+ readonlySignature,
7948
+ setReadonlySignature,
7843
7949
  onDisclaimerModalClose
7844
7950
  };
7845
7951
  }
@@ -7858,11 +7964,11 @@ function useSignPsbtLogic(props) {
7858
7964
  const [isPsbtRiskPopoverVisible, setIsPsbtRiskPopoverVisible] = useState(false);
7859
7965
  const [isKeystoneSigning, setIsKeystoneSigning] = useState(false);
7860
7966
  const [isColdWalletSigning, setIsColdWalletSigning] = useState(false);
7967
+ const [readonlySignedPsbtHex, setReadonlySignedPsbtHex] = useState("");
7861
7968
  const [contractPopoverData, setContractPopoverData] = useState(void 0);
7862
7969
  const wallet = useWallet();
7863
7970
  const tools = useTools();
7864
- const currentAccount = useCurrentAccount();
7865
- const keyringType = currentAccount.type;
7971
+ const accountCapabilities = useCurrentAccountCapabilities();
7866
7972
  const { t } = useI18n();
7867
7973
  const [disclaimerVisible, setDisclaimerVisible] = useState(false);
7868
7974
  const [localPsbtSummary, setLocalPsbtSummary] = useState(null);
@@ -7881,11 +7987,11 @@ function useSignPsbtLogic(props) {
7881
7987
  if (toSignDatas.length <= 1) {
7882
7988
  return;
7883
7989
  }
7884
- if (keyringType === KeyringType.KeystoneKeyring || keyringType === KeyringType.ColdWalletKeyring) {
7990
+ if (accountCapabilities.signMethod !== AccountSignMethod.Local) {
7885
7991
  return;
7886
7992
  }
7887
7993
  setAllowQuickMultiSign(websiteResult.allowQuickMultiSign && toSignDatas.length > 1);
7888
- }, [websiteResult, keyringType]);
7994
+ }, [websiteResult, accountCapabilities]);
7889
7995
  useAsyncEffect(async () => {
7890
7996
  const website = session?.origin;
7891
7997
  if (website) {
@@ -8086,12 +8192,27 @@ function useSignPsbtLogic(props) {
8086
8192
  }
8087
8193
  };
8088
8194
  const onNextStep = () => {
8089
- if (keyringType === KeyringType.KeystoneKeyring) {
8090
- setIsKeystoneSigning(true);
8091
- } else if (keyringType === KeyringType.ColdWalletKeyring) {
8092
- setIsColdWalletSigning(true);
8093
- } else {
8094
- localSign();
8195
+ switch (accountCapabilities.signMethod) {
8196
+ case AccountSignMethod.Keystone:
8197
+ setIsKeystoneSigning(true);
8198
+ return;
8199
+ case AccountSignMethod.ColdWallet:
8200
+ setIsColdWalletSigning(true);
8201
+ return;
8202
+ case AccountSignMethod.External:
8203
+ if (!readonlySignedPsbtHex) {
8204
+ tools.toastError(t("invalid_psbt"));
8205
+ return;
8206
+ }
8207
+ onSignedData({ psbtHex: readonlySignedPsbtHex }, signingTxIndex);
8208
+ setReadonlySignedPsbtHex("");
8209
+ return;
8210
+ case AccountSignMethod.Local:
8211
+ localSign();
8212
+ return;
8213
+ case AccountSignMethod.None:
8214
+ default:
8215
+ tools.toastError(t("not_supported"));
8095
8216
  }
8096
8217
  };
8097
8218
  const onSignedData = (data, signingTxIndex2) => {
@@ -8168,6 +8289,8 @@ function useSignPsbtLogic(props) {
8168
8289
  toSignDatas,
8169
8290
  currentToSignData,
8170
8291
  currentDecodedPsbt,
8292
+ readonlySignedPsbtHex,
8293
+ setReadonlySignedPsbtHex,
8171
8294
  // state
8172
8295
  networkFee,
8173
8296
  isValid,
@@ -8408,6 +8531,10 @@ function useSettingsTabScreenLogic() {
8408
8531
  const item = ADDRESS_TYPES$1[currentKeyring.addressType];
8409
8532
  return currentKeyring.hdPath !== "" && item.hdPath !== currentKeyring.hdPath;
8410
8533
  }, [currentKeyring]);
8534
+ const currentKeyringCapabilities = useMemo(
8535
+ () => getAccountCapabilities({ type: currentKeyring.type }),
8536
+ [currentKeyring.type]
8537
+ );
8411
8538
  const settings_connectedSites = useMemo(() => {
8412
8539
  const value = connected ? t("connected") : t("not_connected");
8413
8540
  return {
@@ -8439,7 +8566,7 @@ function useSettingsTabScreenLogic() {
8439
8566
  let value = "";
8440
8567
  const item = ADDRESS_TYPES$1[currentKeyring.addressType];
8441
8568
  const hdPath = currentKeyring.hdPath || item.hdPath;
8442
- if (currentKeyring.type === KeyringType.SimpleKeyring) {
8569
+ if (currentKeyring.type === KeyringType.SimpleKeyring || currentKeyringCapabilities.signMethod === AccountSignMethod.External || !currentKeyringCapabilities.canChangeAddressType) {
8443
8570
  value = `${item.name}`;
8444
8571
  } else {
8445
8572
  value = `${item.name} (${hdPath}/${currentAccount.index})`;
@@ -8463,7 +8590,7 @@ function useSettingsTabScreenLogic() {
8463
8590
  nav.navigate("AddressTypeScreen");
8464
8591
  }
8465
8592
  };
8466
- }, [t, isCustomHdPath]);
8593
+ }, [t, isCustomHdPath, currentKeyring, currentAccount.index, currentKeyringCapabilities]);
8467
8594
  const settings_advanced = useMemo(() => {
8468
8595
  return {
8469
8596
  key: "settings_advanced",
@@ -8714,6 +8841,6 @@ function createAppStore() {
8714
8841
  return store;
8715
8842
  }
8716
8843
 
8717
- export { AccountUpdater, AlkanesAssetTabKey, ApprovalContext, AssetTabKey, BRC20SendTabKey, BRC20SingleStepKey, BRC20TokenScreenTabKey, CATAssetTabKey, DeviceContext, I18nContext, MoreAssetTabKey, NavigationContext, NavigationSource, OrdinalsAssetTabKey, PriceProvider, SendAlkanesNFTScreenStep, SendAlkanesScreenStep, SendCAT20ScreenStep, SendCAT721ScreenStep, StorageContext, ToolsContext, WalletProvider, WalletTabScreenTabKey, accountActions, browserActions, createAppStore, createStorageProvider, discoveryActions, getSupportedAssets, globalActions, keyringsActions, settingsActions, transactionsActions, uiActions, uiEventBus, useAccountAddress, useAccountBalance, useAccountInscriptions, useAccounts, useAccountsState, useActionOverviewSectionLogic, useAddressExplorerUrl, useAddressInput, useAddressSummary, useAddressTips, useAddressTypeScreenLogic, useAlkanesAssetTabKey, useAlkanesBalanceCardLogic, useAlkanesCollectionListLogic, useAlkanesIconInfo, useAlkanesListLogic, useAlkanesMarketPlaceWebsite, useAlkanesNFTListLogic, useAlkanesNFTScreenLogic, useAlkanesTokenInfoExplorerUrl, useAlkanesTokenScreenLogic, useAmountInput, useAmountInputLogic, useAnnouncementCardLogic, useAppDispatch, useAppList, useAppSelector, useAppSummary, useApproval, useAssetTabKey, useAssetUtxosRunes, useAsyncEffect, useAutoLockTimeId, useBRC20BalanceCardLogic, useBRC20IconInfo, useBRC20InscribeTransferLogic, useBRC20InscribeTransferLogicStep1, useBRC20InscribeTransferLogicStep2, useBRC20InscribeTransferLogicStep3, useBRC20InscribeTransferLogicStep4, useBRC20ListLogic, useBRC20MarketPlaceWebsite, useBRC20ProgListLogic, useBRC20SendScreenLogic, useBRC20SendScreenLogicStep1, useBRC20SendScreenLogicStep2, useBRC20SendScreenLogicStep3, useBRC20SingleStepScreenLogic, useBRC20TokenHistoryLogic, useBRC20TokenInfoExplorerUrl, useBRC20TokenScreenLogic, useBTCUnit, useBabylonConfig, useBackRefresh, useBalanceCardDetailExpanded, useBalanceCardLogic, useBannerList, useBitcoinTx, useBooted, useBrowserState, useBtcDisplayLogic, useCAT20BalanceCardLogic, useCAT20IconInfo, useCAT20ListLogic, useCAT20MarketPlaceWebsite, useCAT20TokenInfoExplorerUrl, useCAT20TokenScreenLogic, useCAT721ListLogic, useCAT721NFTContentBaseUrl, useCAT721NFTScreenLogic, useCATAssetTabKey, useChain, useChainType, useChangeAddressFlagCallback, useChangeChainTypeCallback, useChangeLocaleCallback, useChangeNetworkTypeCallback, useCreateAccountCallback, useCreateColdWalletCallback, useCreatePasswordScreenLogic, useCreateSplitTxCallback, useCreateWalletLogicImportWordsStep, useCurrentAccount, useCurrentAddress, useCurrentKeyring, useDeveloperMode, useDevice, useDiscoveryState, useEditAccountNameScreenLogic, useEditContactScreenLogic, useEditWalletNameScreenLogic, useExportMnemonicsScreenLogic, useExportPrivateKeyScreenLogic, useFeeRateBar, useFeeRateBarLogic, useFetchAssetUtxosRunesCallback, useFetchBalanceCallback, useFetchUtxosCallback, useGetTxExplorerUrlCallback, useGlobalState, useGoBackRefresh, useHasBiometricsKey, useHasNewBanner, useHistory, useI18n, useIconBaseUrl, useImportAccountCallback, useImportAccountsFromKeystoneCallback, useInfiniteListScrollOffset, useInfiniteListScrollState, useInscriptionListLogic, useInscriptionSummary, useIsBiometricsSupported, useIsInExpandView, useIsKeystoneWallet, useIsMainnetChain, useIsReady, useIsRefresh, useIsScrollViewBot, useIsScrollViewTop, useIsUnlockTimeRefres, useIsUnlocked, useKeyrings, useKeyringsState, useLastFetchInfo, useLayerState, useLocale, useLockCallback, useLockTimePageLogic, useLockedOverlayVisible, useModelPopover, useMoreAssetTabKey, useNavigation, useNetworkType, useNotificationsLogic, useOrdinalsAssetTabKey, useOrdinalsInscriptionScreenLogic, useOrdinalsTx, useOrdinalsWebsite, usePrepareSendAlkanesCallback, usePrepareSendBTCCallback, usePrepareSendBypassHeadOffsetsCallback, usePrepareSendOrdinalsInscriptionCallback, usePrepareSendOrdinalsInscriptionsCallback, usePrepareSendRunesCallback, usePrice, usePushBitcoinTxCallback, usePushOrdinalsTxCallback, useReadApp, useReadTab, useReloadAccounts, useResetAddressInput, useResetAmountInput, useResetFeeRateBar, useResetTxState, useResetUiTxCreateScreen, useRunesBalanceCardLogic, useRunesIconInfo, useRunesInscribeUrl, useRunesListLogic, useRunesMarketUrl, useRunesTokenInfoExplorerUrl, useRunesTokenScreenLogic, useRunesTx, useSafeBalance, useScreenState, useSendAlkanesNFTScreenLogic, useSendAlkanesScreenLogic, useSendCAT20ScreenLogic, useSendCAT721ScreenLogic, useSendOrdinalsInscriptionScreenLogic, useSendRunesScreenLogic, useSetCurrentAccountCallback, useSetDeveloperModeCallback, useSetLockedOverlayVisibleCallback, useSetSpendUnavailableUtxosCallback, useSetTabCallback, useSettingsState, useSettingsTabScreenLogic, useSignMessageLogic, useSignPsbtLogic, useSkipVersionCallback, useSpendUnavailableUtxos, useSplitOrdinalsInscriptionScreenLogic, useStorage, useSupportedAssets, useSwitchChainModalVisible, useTab, useThrottle, useToggleBalanceCardDetailExpanded, useTools, useTransactionsState, useTransferableListLogic, useTxConfirmScreenLogic, useTxCreateScreenLogic, useTxExplorerUrl, useTxFailScreenLogic, useTxSuccessScreenLogic, useUIState, useUiTxCreateScreen, useUnisatWebsite, useUnlockCallback, useUnlockRead, useUnlockRefresh, useUnreadAppSummary, useUnreadNotificationsCount, useUpdateAddressInput, useUpdateAmountInput, useUpdateFeeRateBar, useUpdateScreenStateCallback, useUpdateUiTxCreateScreen, useUtxos, useVersionInfo, useWallRefresh, useWallTabFocusRefresh, useWallTabRefresh, useWallet, useWalletConfig, useWalletTabScreenState, useWalletTopTabScreenState };
8844
+ export { AccountUpdater, AlkanesAssetTabKey, ApprovalContext, AssetTabKey, BRC20SendTabKey, BRC20SingleStepKey, BRC20TokenScreenTabKey, CATAssetTabKey, DeviceContext, I18nContext, MoreAssetTabKey, NavigationContext, NavigationSource, OrdinalsAssetTabKey, PriceProvider, SendAlkanesNFTScreenStep, SendAlkanesScreenStep, SendCAT20ScreenStep, SendCAT721ScreenStep, StorageContext, ToolsContext, WalletProvider, WalletTabScreenTabKey, accountActions, browserActions, createAppStore, createStorageProvider, discoveryActions, getSupportedAssets, globalActions, keyringsActions, settingsActions, transactionsActions, uiActions, uiEventBus, useAccountAddress, useAccountBalance, useAccountInscriptions, useAccounts, useAccountsState, useActionOverviewSectionLogic, useAddressExplorerUrl, useAddressInput, useAddressSummary, useAddressTips, useAddressTypeScreenLogic, useAlkanesAssetTabKey, useAlkanesBalanceCardLogic, useAlkanesCollectionListLogic, useAlkanesIconInfo, useAlkanesListLogic, useAlkanesMarketPlaceWebsite, useAlkanesNFTListLogic, useAlkanesNFTScreenLogic, useAlkanesTokenInfoExplorerUrl, useAlkanesTokenScreenLogic, useAmountInput, useAmountInputLogic, useAnnouncementCardLogic, useAppDispatch, useAppList, useAppSelector, useAppSummary, useApproval, useAssetTabKey, useAssetUtxosRunes, useAsyncEffect, useAutoLockTimeId, useBRC20BalanceCardLogic, useBRC20IconInfo, useBRC20InscribeTransferLogic, useBRC20InscribeTransferLogicStep1, useBRC20InscribeTransferLogicStep2, useBRC20InscribeTransferLogicStep3, useBRC20InscribeTransferLogicStep4, useBRC20ListLogic, useBRC20MarketPlaceWebsite, useBRC20ProgListLogic, useBRC20SendScreenLogic, useBRC20SendScreenLogicStep1, useBRC20SendScreenLogicStep2, useBRC20SendScreenLogicStep3, useBRC20SingleStepScreenLogic, useBRC20TokenHistoryLogic, useBRC20TokenInfoExplorerUrl, useBRC20TokenScreenLogic, useBTCUnit, useBabylonConfig, useBackRefresh, useBalanceCardDetailExpanded, useBalanceCardLogic, useBannerList, useBitcoinTx, useBooted, useBrowserState, useBtcDisplayLogic, useCAT20BalanceCardLogic, useCAT20IconInfo, useCAT20ListLogic, useCAT20MarketPlaceWebsite, useCAT20TokenInfoExplorerUrl, useCAT20TokenScreenLogic, useCAT721ListLogic, useCAT721NFTContentBaseUrl, useCAT721NFTScreenLogic, useCATAssetTabKey, useChain, useChainType, useChangeAddressFlagCallback, useChangeChainTypeCallback, useChangeLocaleCallback, useChangeNetworkTypeCallback, useCreateAccountCallback, useCreateColdWalletCallback, useCreatePasswordScreenLogic, useCreateSplitTxCallback, useCreateWalletLogicImportWordsStep, useCurrentAccount, useCurrentAccountCapabilities, useCurrentAddress, useCurrentKeyring, useDeveloperMode, useDevice, useDiscoveryState, useEditAccountNameScreenLogic, useEditContactScreenLogic, useEditWalletNameScreenLogic, useExportMnemonicsScreenLogic, useExportPrivateKeyScreenLogic, useFeeRateBar, useFeeRateBarLogic, useFetchAssetUtxosRunesCallback, useFetchBalanceCallback, useFetchUtxosCallback, useGetTxExplorerUrlCallback, useGlobalState, useGoBackRefresh, useHasBiometricsKey, useHasNewBanner, useHistory, useI18n, useIconBaseUrl, useImportAccountCallback, useImportAccountsFromKeystoneCallback, useInfiniteListScrollOffset, useInfiniteListScrollState, useInscriptionListLogic, useInscriptionSummary, useIsBiometricsSupported, useIsInExpandView, useIsKeystoneWallet, useIsMainnetChain, useIsReady, useIsRefresh, useIsScrollViewBot, useIsScrollViewTop, useIsUnlockTimeRefres, useIsUnlocked, useKeyrings, useKeyringsState, useLastFetchInfo, useLayerState, useLocale, useLockCallback, useLockTimePageLogic, useLockedOverlayVisible, useModelPopover, useMoreAssetTabKey, useNavigation, useNetworkType, useNotificationsLogic, useOrdinalsAssetTabKey, useOrdinalsInscriptionScreenLogic, useOrdinalsTx, useOrdinalsWebsite, usePrepareSendAlkanesCallback, usePrepareSendBTCCallback, usePrepareSendBypassHeadOffsetsCallback, usePrepareSendOrdinalsInscriptionCallback, usePrepareSendOrdinalsInscriptionsCallback, usePrepareSendRunesCallback, usePrice, usePushBitcoinTxCallback, usePushOrdinalsTxCallback, useReadApp, useReadTab, useReloadAccounts, useResetAddressInput, useResetAmountInput, useResetFeeRateBar, useResetTxState, useResetUiTxCreateScreen, useRunesBalanceCardLogic, useRunesIconInfo, useRunesInscribeUrl, useRunesListLogic, useRunesMarketUrl, useRunesTokenInfoExplorerUrl, useRunesTokenScreenLogic, useRunesTx, useSafeBalance, useScreenState, useSendAlkanesNFTScreenLogic, useSendAlkanesScreenLogic, useSendCAT20ScreenLogic, useSendCAT721ScreenLogic, useSendOrdinalsInscriptionScreenLogic, useSendRunesScreenLogic, useSetCurrentAccountCallback, useSetDeveloperModeCallback, useSetLockedOverlayVisibleCallback, useSetSpendUnavailableUtxosCallback, useSetTabCallback, useSettingsState, useSettingsTabScreenLogic, useSignMessageLogic, useSignPsbtLogic, useSkipVersionCallback, useSpendUnavailableUtxos, useSplitOrdinalsInscriptionScreenLogic, useStorage, useSupportedAssets, useSwitchChainModalVisible, useTab, useThrottle, useToggleBalanceCardDetailExpanded, useTools, useTransactionsState, useTransferableListLogic, useTxConfirmScreenLogic, useTxCreateScreenLogic, useTxExplorerUrl, useTxFailScreenLogic, useTxSuccessScreenLogic, useUIState, useUiTxCreateScreen, useUnisatWebsite, useUnlockCallback, useUnlockRead, useUnlockRefresh, useUnreadAppSummary, useUnreadNotificationsCount, useUpdateAddressInput, useUpdateAmountInput, useUpdateFeeRateBar, useUpdateScreenStateCallback, useUpdateUiTxCreateScreen, useUtxos, useVersionInfo, useWallRefresh, useWallTabFocusRefresh, useWallTabRefresh, useWallet, useWalletConfig, useWalletTabScreenState, useWalletTopTabScreenState };
8718
8845
  //# sourceMappingURL=out.js.map
8719
8846
  //# sourceMappingURL=index.mjs.map