@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.js CHANGED
@@ -1104,6 +1104,10 @@ function useCurrentAddress() {
1104
1104
  const accountsState = useAccountsState();
1105
1105
  return accountsState.current.address;
1106
1106
  }
1107
+ function useCurrentAccountCapabilities() {
1108
+ const currentAccount = useCurrentAccount();
1109
+ return React.useMemo(() => walletShared.getAccountCapabilities(currentAccount), [currentAccount]);
1110
+ }
1107
1111
  function useAccounts() {
1108
1112
  const accountsState = useAccountsState();
1109
1113
  return accountsState.accounts;
@@ -2149,6 +2153,7 @@ function usePrepareSendBTCCallback() {
2149
2153
  const fromAddress = useAccountAddress();
2150
2154
  const utxos = useUtxos();
2151
2155
  const fetchUtxos = useFetchUtxosCallback();
2156
+ const accountCapabilities = useCurrentAccountCapabilities();
2152
2157
  const { t } = useI18n();
2153
2158
  return React.useCallback(
2154
2159
  async ({
@@ -2160,6 +2165,9 @@ function usePrepareSendBTCCallback() {
2160
2165
  disableAutoAdjust,
2161
2166
  enableRBF
2162
2167
  }) => {
2168
+ if (!accountCapabilities.canCreateSigningRequest) {
2169
+ throw new Error(t("not_supported"));
2170
+ }
2163
2171
  let _utxos = utxos;
2164
2172
  if (_utxos.length === 0) {
2165
2173
  _utxos = await fetchUtxos();
@@ -2193,12 +2201,14 @@ function usePrepareSendBTCCallback() {
2193
2201
  }
2194
2202
  return res;
2195
2203
  },
2196
- [dispatch, wallet, fromAddress, utxos, fetchUtxos]
2204
+ [dispatch, wallet, fromAddress, utxos, fetchUtxos, accountCapabilities.canCreateSigningRequest, t]
2197
2205
  );
2198
2206
  }
2199
2207
  function usePrepareSendBypassHeadOffsetsCallback() {
2200
2208
  const dispatch = useAppDispatch();
2201
2209
  const wallet = useWallet();
2210
+ const accountCapabilities = useCurrentAccountCapabilities();
2211
+ const { t } = useI18n();
2202
2212
  return React.useCallback(
2203
2213
  async ({
2204
2214
  toAddressInfo,
@@ -2206,6 +2216,9 @@ function usePrepareSendBypassHeadOffsetsCallback() {
2206
2216
  feeRate,
2207
2217
  enableRBF
2208
2218
  }) => {
2219
+ if (!accountCapabilities.canCreateSigningRequest) {
2220
+ throw new Error(t("not_supported"));
2221
+ }
2209
2222
  const res = await wallet.createSendBTCOffsetPsbt(
2210
2223
  [
2211
2224
  {
@@ -2218,7 +2231,7 @@ function usePrepareSendBypassHeadOffsetsCallback() {
2218
2231
  );
2219
2232
  return res;
2220
2233
  },
2221
- [dispatch, wallet]
2234
+ [dispatch, wallet, accountCapabilities.canCreateSigningRequest, t]
2222
2235
  );
2223
2236
  }
2224
2237
  function usePushBitcoinTxCallback() {
@@ -2266,6 +2279,8 @@ function usePrepareSendOrdinalsInscriptionCallback() {
2266
2279
  const fromAddress = useAccountAddress();
2267
2280
  const utxos = useUtxos();
2268
2281
  const fetchUtxos = useFetchUtxosCallback();
2282
+ const accountCapabilities = useCurrentAccountCapabilities();
2283
+ const { t } = useI18n();
2269
2284
  return React.useCallback(
2270
2285
  async ({
2271
2286
  toAddressInfo,
@@ -2274,6 +2289,9 @@ function usePrepareSendOrdinalsInscriptionCallback() {
2274
2289
  outputValue,
2275
2290
  enableRBF
2276
2291
  }) => {
2292
+ if (!accountCapabilities.canCreateSigningRequest) {
2293
+ throw new Error(t("not_supported"));
2294
+ }
2277
2295
  if (!feeRate) {
2278
2296
  const summary = await wallet.getFeeSummary();
2279
2297
  feeRate = summary.list[1].feeRate;
@@ -2292,7 +2310,7 @@ function usePrepareSendOrdinalsInscriptionCallback() {
2292
2310
  });
2293
2311
  return toSignData;
2294
2312
  },
2295
- [dispatch, wallet, fromAddress, utxos]
2313
+ [dispatch, wallet, fromAddress, utxos, accountCapabilities.canCreateSigningRequest, t]
2296
2314
  );
2297
2315
  }
2298
2316
  function usePrepareSendOrdinalsInscriptionsCallback() {
@@ -2301,6 +2319,8 @@ function usePrepareSendOrdinalsInscriptionsCallback() {
2301
2319
  const fromAddress = useAccountAddress();
2302
2320
  const fetchUtxos = useFetchUtxosCallback();
2303
2321
  const utxos = useUtxos();
2322
+ const accountCapabilities = useCurrentAccountCapabilities();
2323
+ const { t } = useI18n();
2304
2324
  return React.useCallback(
2305
2325
  async ({
2306
2326
  toAddressInfo,
@@ -2308,6 +2328,9 @@ function usePrepareSendOrdinalsInscriptionsCallback() {
2308
2328
  feeRate,
2309
2329
  enableRBF
2310
2330
  }) => {
2331
+ if (!accountCapabilities.canCreateSigningRequest) {
2332
+ throw new Error(t("not_supported"));
2333
+ }
2311
2334
  if (!feeRate) {
2312
2335
  const summary = await wallet.getFeeSummary();
2313
2336
  feeRate = summary.list[1].feeRate;
@@ -2325,7 +2348,7 @@ function usePrepareSendOrdinalsInscriptionsCallback() {
2325
2348
  });
2326
2349
  return res;
2327
2350
  },
2328
- [dispatch, wallet, fromAddress, utxos]
2351
+ [dispatch, wallet, fromAddress, utxos, accountCapabilities.canCreateSigningRequest, t]
2329
2352
  );
2330
2353
  }
2331
2354
  function useCreateSplitTxCallback() {
@@ -2335,6 +2358,8 @@ function useCreateSplitTxCallback() {
2335
2358
  const utxos = useUtxos();
2336
2359
  const fetchUtxos = useFetchUtxosCallback();
2337
2360
  useCurrentAccount();
2361
+ const accountCapabilities = useCurrentAccountCapabilities();
2362
+ const { t } = useI18n();
2338
2363
  return React.useCallback(
2339
2364
  async ({
2340
2365
  inscriptionId,
@@ -2342,6 +2367,9 @@ function useCreateSplitTxCallback() {
2342
2367
  outputValue,
2343
2368
  enableRBF
2344
2369
  }) => {
2370
+ if (!accountCapabilities.canCreateSigningRequest) {
2371
+ throw new Error(t("not_supported"));
2372
+ }
2345
2373
  let btcUtxos = utxos;
2346
2374
  if (btcUtxos.length === 0) {
2347
2375
  btcUtxos = await fetchUtxos();
@@ -2355,7 +2383,7 @@ function useCreateSplitTxCallback() {
2355
2383
  });
2356
2384
  return res;
2357
2385
  },
2358
- [dispatch, wallet, fromAddress, utxos]
2386
+ [dispatch, wallet, fromAddress, utxos, accountCapabilities.canCreateSigningRequest, t]
2359
2387
  );
2360
2388
  }
2361
2389
  function usePushOrdinalsTxCallback() {
@@ -2454,6 +2482,8 @@ function usePrepareSendRunesCallback() {
2454
2482
  const assetUtxosRunes = useAssetUtxosRunes();
2455
2483
  const fetchAssetUtxosRunes = useFetchAssetUtxosRunesCallback();
2456
2484
  const account = useCurrentAccount();
2485
+ const accountCapabilities = useCurrentAccountCapabilities();
2486
+ const { t } = useI18n();
2457
2487
  return React.useCallback(
2458
2488
  async ({
2459
2489
  toAddressInfo,
@@ -2463,6 +2493,9 @@ function usePrepareSendRunesCallback() {
2463
2493
  feeRate,
2464
2494
  enableRBF
2465
2495
  }) => {
2496
+ if (!accountCapabilities.canCreateSigningRequest) {
2497
+ throw new Error(t("not_supported"));
2498
+ }
2466
2499
  if (!feeRate) {
2467
2500
  const summary = await wallet.getFeeSummary();
2468
2501
  feeRate = summary.list[1].feeRate;
@@ -2487,7 +2520,17 @@ function usePrepareSendRunesCallback() {
2487
2520
  });
2488
2521
  return toSignData;
2489
2522
  },
2490
- [dispatch, wallet, fromAddress, utxos, assetUtxosRunes, fetchAssetUtxosRunes, account]
2523
+ [
2524
+ dispatch,
2525
+ wallet,
2526
+ fromAddress,
2527
+ utxos,
2528
+ assetUtxosRunes,
2529
+ fetchAssetUtxosRunes,
2530
+ account,
2531
+ accountCapabilities.canCreateSigningRequest,
2532
+ t
2533
+ ]
2491
2534
  );
2492
2535
  }
2493
2536
  function useRunesTx() {
@@ -2497,8 +2540,13 @@ function useRunesTx() {
2497
2540
  function usePrepareSendAlkanesCallback() {
2498
2541
  const wallet = useWallet();
2499
2542
  const account = useCurrentAccount();
2543
+ const accountCapabilities = useCurrentAccountCapabilities();
2544
+ const { t } = useI18n();
2500
2545
  const callback = React.useCallback(
2501
2546
  async (toAddressInfo, alkaneid, amount, feeRate, type, enableRBF) => {
2547
+ if (!accountCapabilities.canCreateSigningRequest) {
2548
+ throw new Error(t("not_supported"));
2549
+ }
2502
2550
  return await wallet.createSendAlkanesPsbt({
2503
2551
  to: toAddressInfo.address,
2504
2552
  alkaneid,
@@ -2508,7 +2556,7 @@ function usePrepareSendAlkanesCallback() {
2508
2556
  enableRBF
2509
2557
  });
2510
2558
  },
2511
- [wallet, account]
2559
+ [wallet, account, accountCapabilities.canCreateSigningRequest, t]
2512
2560
  );
2513
2561
  return callback;
2514
2562
  }
@@ -2541,19 +2589,22 @@ function useUiTxCreateScreen() {
2541
2589
  }
2542
2590
  function useUpdateUiTxCreateScreen() {
2543
2591
  const dispatch = useAppDispatch();
2544
- return ({
2545
- toInfo,
2546
- inputAmount,
2547
- enableRBF
2548
- }) => {
2549
- dispatch(
2550
- uiActions.updateTxCreateScreen({
2551
- toInfo,
2552
- inputAmount,
2553
- enableRBF
2554
- })
2555
- );
2556
- };
2592
+ return React.useCallback(
2593
+ ({
2594
+ toInfo,
2595
+ inputAmount,
2596
+ enableRBF
2597
+ }) => {
2598
+ dispatch(
2599
+ uiActions.updateTxCreateScreen({
2600
+ toInfo,
2601
+ inputAmount,
2602
+ enableRBF
2603
+ })
2604
+ );
2605
+ },
2606
+ [dispatch]
2607
+ );
2557
2608
  }
2558
2609
  function useFeeRateBar() {
2559
2610
  const uiState = useUIState();
@@ -2561,29 +2612,32 @@ function useFeeRateBar() {
2561
2612
  }
2562
2613
  function useUpdateFeeRateBar() {
2563
2614
  const dispatch = useAppDispatch();
2564
- return ({
2565
- feeRate,
2566
- feeRateInputVal,
2567
- enableLowFeeRate,
2568
- feeOptionIndex,
2569
- showCustomInput
2570
- }) => {
2571
- dispatch(
2572
- uiActions.updateFeeRateBar({
2573
- feeRate,
2574
- feeRateInputVal,
2575
- enableLowFeeRate,
2576
- feeOptionIndex,
2577
- showCustomInput
2578
- })
2579
- );
2580
- };
2615
+ return React.useCallback(
2616
+ ({
2617
+ feeRate,
2618
+ feeRateInputVal,
2619
+ enableLowFeeRate,
2620
+ feeOptionIndex,
2621
+ showCustomInput
2622
+ }) => {
2623
+ dispatch(
2624
+ uiActions.updateFeeRateBar({
2625
+ feeRate,
2626
+ feeRateInputVal,
2627
+ enableLowFeeRate,
2628
+ feeOptionIndex,
2629
+ showCustomInput
2630
+ })
2631
+ );
2632
+ },
2633
+ [dispatch]
2634
+ );
2581
2635
  }
2582
2636
  function useResetFeeRateBar() {
2583
2637
  const dispatch = useAppDispatch();
2584
- return () => {
2638
+ return React.useCallback(() => {
2585
2639
  dispatch(uiActions.resetFeeRateBar());
2586
- };
2640
+ }, [dispatch]);
2587
2641
  }
2588
2642
  function useAddressInput() {
2589
2643
  const uiState = useUIState();
@@ -2591,20 +2645,23 @@ function useAddressInput() {
2591
2645
  }
2592
2646
  function useUpdateAddressInput() {
2593
2647
  const dispatch = useAppDispatch();
2594
- return ({ address, domain }) => {
2595
- dispatch(
2596
- uiActions.updateAddressInput({
2597
- address,
2598
- domain
2599
- })
2600
- );
2601
- };
2648
+ return React.useCallback(
2649
+ ({ address, domain }) => {
2650
+ dispatch(
2651
+ uiActions.updateAddressInput({
2652
+ address,
2653
+ domain
2654
+ })
2655
+ );
2656
+ },
2657
+ [dispatch]
2658
+ );
2602
2659
  }
2603
2660
  function useResetAddressInput() {
2604
2661
  const dispatch = useAppDispatch();
2605
- return () => {
2662
+ return React.useCallback(() => {
2606
2663
  dispatch(uiActions.resetAddressInput());
2607
- };
2664
+ }, [dispatch]);
2608
2665
  }
2609
2666
  function useAmountInput() {
2610
2667
  const uiState = useUIState();
@@ -2612,32 +2669,35 @@ function useAmountInput() {
2612
2669
  }
2613
2670
  function useUpdateAmountInput() {
2614
2671
  const dispatch = useAppDispatch();
2615
- return ({ amount }) => {
2616
- dispatch(
2617
- uiActions.updateAmountInput({
2618
- amount
2619
- })
2620
- );
2621
- };
2672
+ return React.useCallback(
2673
+ ({ amount }) => {
2674
+ dispatch(
2675
+ uiActions.updateAmountInput({
2676
+ amount
2677
+ })
2678
+ );
2679
+ },
2680
+ [dispatch]
2681
+ );
2622
2682
  }
2623
2683
  function useResetAmountInput() {
2624
2684
  const dispatch = useAppDispatch();
2625
- return () => {
2685
+ return React.useCallback(() => {
2626
2686
  dispatch(uiActions.resetAmountInput());
2627
- };
2687
+ }, [dispatch]);
2628
2688
  }
2629
2689
  function useResetTxState() {
2630
2690
  const dispatch = useAppDispatch();
2631
- return () => {
2691
+ return React.useCallback(() => {
2632
2692
  dispatch(uiActions.resetTxCreateScreen());
2633
2693
  dispatch(uiActions.resetFeeRateBar());
2634
- };
2694
+ }, [dispatch]);
2635
2695
  }
2636
2696
  function useResetUiTxCreateScreen() {
2637
2697
  const dispatch = useAppDispatch();
2638
- return () => {
2698
+ return React.useCallback(() => {
2639
2699
  dispatch(uiActions.resetTxCreateScreen());
2640
- };
2700
+ }, [dispatch]);
2641
2701
  }
2642
2702
  var useThrottle = (callback, delay, lastCallRef) => {
2643
2703
  return React.useCallback(
@@ -2924,6 +2984,10 @@ function useAddressTypeScreenLogic() {
2924
2984
  const wallet = useWallet();
2925
2985
  const currentKeyring = useCurrentKeyring();
2926
2986
  const account = useCurrentAccount();
2987
+ const currentKeyringCapabilities = React.useMemo(
2988
+ () => walletShared.getAccountCapabilities({ type: currentKeyring.type }),
2989
+ [currentKeyring.type]
2990
+ );
2927
2991
  const nav = useNavigation();
2928
2992
  useAppDispatch();
2929
2993
  const reloadAccounts = useReloadAccounts();
@@ -2961,7 +3025,7 @@ function useAddressTypeScreenLogic() {
2961
3025
  loadAddresses();
2962
3026
  }, []);
2963
3027
  const addressTypes = React.useMemo(() => {
2964
- if (currentKeyring.type === types.KeyringType.ColdWalletKeyring) {
3028
+ if (!currentKeyringCapabilities.canChangeAddressType) {
2965
3029
  return types.ADDRESS_TYPES.filter((v) => v.value === currentKeyring.addressType);
2966
3030
  }
2967
3031
  if (currentKeyring.type === types.KeyringType.HdKeyring) {
@@ -2986,7 +3050,14 @@ function useAddressTypeScreenLogic() {
2986
3050
  (a, b) => a.displayIndex - b.displayIndex
2987
3051
  );
2988
3052
  }
2989
- }, [currentKeyring.type, currentKeyring.addressType, addressAssets, addresses]);
3053
+ }, [
3054
+ currentKeyring.type,
3055
+ currentKeyring.addressType,
3056
+ currentKeyringCapabilities.canChangeAddressType,
3057
+ currentKeyring.accountIndexDerivation,
3058
+ addressAssets,
3059
+ addresses
3060
+ ]);
2990
3061
  const items = React.useMemo(() => {
2991
3062
  return addressTypes.map((v) => {
2992
3063
  const address = addresses[v.value];
@@ -2995,7 +3066,11 @@ function useAddressTypeScreenLogic() {
2995
3066
  satoshis: 0,
2996
3067
  total_inscription: 0
2997
3068
  };
2998
- const derivedPath = walletShared.getAccountDerivationPath(v.hdPath, account.index || 0, currentKeyring.accountIndexDerivation);
3069
+ const derivedPath = walletShared.getAccountDerivationPath(
3070
+ v.hdPath,
3071
+ account.index || 0,
3072
+ currentKeyring.accountIndexDerivation
3073
+ );
2999
3074
  let name = `${v.name} (${derivedPath})`;
3000
3075
  if (currentKeyring.type === types.KeyringType.SimpleKeyring) {
3001
3076
  name = `${v.name}`;
@@ -3014,8 +3089,8 @@ function useAddressTypeScreenLogic() {
3014
3089
  if (item.value == currentKeyring.addressType) {
3015
3090
  return;
3016
3091
  }
3017
- if (currentKeyring.type === types.KeyringType.ColdWalletKeyring) {
3018
- tools.toastError(t("Cold wallet address type cannot be changed"));
3092
+ if (!currentKeyringCapabilities.canChangeAddressType) {
3093
+ tools.toastError(t("not_supported"));
3019
3094
  return;
3020
3095
  }
3021
3096
  await wallet.changeAddressType(item.value);
@@ -3942,6 +4017,7 @@ function useBRC20TokenScreenLogic() {
3942
4017
  });
3943
4018
  const wallet = useWallet();
3944
4019
  const account = useCurrentAccount();
4020
+ const accountCapabilities = useCurrentAccountCapabilities();
3945
4021
  const [loading, setLoading] = React.useState(true);
3946
4022
  const [deployInscription, setDeployInscription] = React.useState();
3947
4023
  const resetTxState = useResetTxState();
@@ -3982,11 +4058,11 @@ function useBRC20TokenScreenLogic() {
3982
4058
  }, [tokenSummary]);
3983
4059
  const enableTransfer = React.useMemo(() => {
3984
4060
  let enable = false;
3985
- if (tokenSummary.tokenBalance.overallBalance !== "0" && tokenSummary.tokenBalance.overallBalance !== "") {
4061
+ if (accountCapabilities.canCreateSigningRequest && tokenSummary.tokenBalance.overallBalance !== "0" && tokenSummary.tokenBalance.overallBalance !== "") {
3986
4062
  enable = true;
3987
4063
  }
3988
4064
  return enable;
3989
- }, [tokenSummary]);
4065
+ }, [accountCapabilities.canCreateSigningRequest, tokenSummary]);
3990
4066
  const tools = useTools();
3991
4067
  const chainType = useChainType();
3992
4068
  const chain = useChain();
@@ -5121,6 +5197,7 @@ function useAlkanesNFTScreenLogic() {
5121
5197
  const { alkanesInfo } = nav.getRouteState();
5122
5198
  const { t } = useI18n();
5123
5199
  const resetTxState = useResetTxState();
5200
+ const accountCapabilities = useCurrentAccountCapabilities();
5124
5201
  const [availableUtxo, setAvailableUtxo] = React.useState(0);
5125
5202
  const wallet = useWallet();
5126
5203
  React.useEffect(() => {
@@ -5139,7 +5216,7 @@ function useAlkanesNFTScreenLogic() {
5139
5216
  alkanesInfo
5140
5217
  });
5141
5218
  };
5142
- const disabledSend = availableUtxo <= 0;
5219
+ const disabledSend = !accountCapabilities.canCreateSigningRequest || availableUtxo <= 0;
5143
5220
  return {
5144
5221
  alkanesInfo,
5145
5222
  t,
@@ -5183,6 +5260,7 @@ function useAlkanesTokenScreenLogic() {
5183
5260
  });
5184
5261
  const wallet = useWallet();
5185
5262
  const account = useCurrentAccount();
5263
+ const accountCapabilities = useCurrentAccountCapabilities();
5186
5264
  const [loading, setLoading] = React.useState(true);
5187
5265
  const [warning, setWarning] = React.useState(false);
5188
5266
  const { t } = useI18n();
@@ -5198,11 +5276,11 @@ function useAlkanesTokenScreenLogic() {
5198
5276
  }, [tokenSummary.mintUrl]);
5199
5277
  const enableTransfer = React.useMemo(() => {
5200
5278
  let enable = false;
5201
- if (tokenSummary.tokenBalance.amount !== "0") {
5279
+ if (accountCapabilities.canCreateSigningRequest && tokenSummary.tokenBalance.amount !== "0") {
5202
5280
  enable = true;
5203
5281
  }
5204
5282
  return enable;
5205
- }, [tokenSummary]);
5283
+ }, [accountCapabilities.canCreateSigningRequest, tokenSummary]);
5206
5284
  const tools = useTools();
5207
5285
  const enableTrade = React.useMemo(() => {
5208
5286
  return tokenSummary.tradeUrl && tokenSummary.tradeUrl.trim() !== "";
@@ -5466,6 +5544,7 @@ function useOrdinalsInscriptionScreenLogic() {
5466
5544
  const [isLoadingDetails, setIsLoadingDetails] = React.useState(false);
5467
5545
  const [isInitialLoading, setIsInitialLoading] = React.useState(!props.inscription);
5468
5546
  const currentAccount = useCurrentAccount();
5547
+ const accountCapabilities = useCurrentAccountCapabilities();
5469
5548
  const resetTxState = useResetTxState();
5470
5549
  const { t } = useI18n();
5471
5550
  const [isNeedToSplit, setIsNeedToSplit] = React.useState(false);
@@ -5528,7 +5607,7 @@ function useOrdinalsInscriptionScreenLogic() {
5528
5607
  nav.navigate("SendOrdinalsInscriptionScreen", { inscription, inscriptionId });
5529
5608
  };
5530
5609
  const isUnconfirmed = inscription ? inscription.timestamp == 0 : false;
5531
- const withSend = inscription ? currentAccount.address === inscription.address : false;
5610
+ const withSend = inscription ? accountCapabilities.canCreateSigningRequest && currentAccount.address === inscription.address : false;
5532
5611
  const children = inscription ? inscription.children || [] : [];
5533
5612
  const parents = inscription ? inscription.parents || [] : [];
5534
5613
  const hasProvenance = children.length > 0 || parents.length > 0;
@@ -5599,6 +5678,7 @@ function useRunesTokenScreenLogic() {
5599
5678
  });
5600
5679
  const wallet = useWallet();
5601
5680
  const account = useCurrentAccount();
5681
+ const accountCapabilities = useCurrentAccountCapabilities();
5602
5682
  const [loading, setLoading] = React.useState(true);
5603
5683
  const { t } = useI18n();
5604
5684
  React.useEffect(() => {
@@ -5610,11 +5690,11 @@ function useRunesTokenScreenLogic() {
5610
5690
  const enableMint = tokenSummary.runeInfo.mintable;
5611
5691
  const enableTransfer = React.useMemo(() => {
5612
5692
  let enable = false;
5613
- if (tokenSummary.runeBalance.amount !== "0") {
5693
+ if (accountCapabilities.canCreateSigningRequest && tokenSummary.runeBalance.amount !== "0") {
5614
5694
  enable = true;
5615
5695
  }
5616
5696
  return enable;
5617
- }, [tokenSummary]);
5697
+ }, [accountCapabilities.canCreateSigningRequest, tokenSummary]);
5618
5698
  const tools = useTools();
5619
5699
  const ordinalsWebsite = useOrdinalsWebsite();
5620
5700
  const resetTxState = useResetTxState();
@@ -6990,6 +7070,7 @@ function useCAT20TokenScreenLogic() {
6990
7070
  const wallet = useWallet();
6991
7071
  const account = useCurrentAccount();
6992
7072
  const keyring = useCurrentKeyring();
7073
+ const accountCapabilities = useCurrentAccountCapabilities();
6993
7074
  const [loading, setLoading] = React.useState(true);
6994
7075
  const tools = useTools();
6995
7076
  React.useEffect(() => {
@@ -7001,11 +7082,12 @@ function useCAT20TokenScreenLogic() {
7001
7082
  const tokenUrl = useCAT20TokenInfoExplorerUrl(version, tokenSummary.cat20Info.tokenId);
7002
7083
  const enableTransfer = React.useMemo(() => {
7003
7084
  let enable = false;
7004
- if (tokenSummary.cat20Balance && tokenSummary.cat20Balance.amount !== "0") {
7085
+ if (accountCapabilities.canCreateSigningRequest && tokenSummary.cat20Balance && tokenSummary.cat20Balance.amount !== "0") {
7005
7086
  enable = true;
7006
7087
  }
7007
7088
  return enable;
7008
- }, [tokenSummary]);
7089
+ }, [accountCapabilities.canCreateSigningRequest, tokenSummary]);
7090
+ const enableMerge = accountCapabilities.canCreateSigningRequest;
7009
7091
  const chainType = useChainType();
7010
7092
  const enableTrade = React.useMemo(() => {
7011
7093
  if (chainType === walletTypes.ChainType.FRACTAL_BITCOIN_MAINNET && version === walletShared.CAT_VERSION.V1) {
@@ -7020,6 +7102,10 @@ function useCAT20TokenScreenLogic() {
7020
7102
  nav.goBack();
7021
7103
  };
7022
7104
  const onClickMerge = (e) => {
7105
+ if (!accountCapabilities.canCreateSigningRequest) {
7106
+ tools.toastError(t("not_supported"));
7107
+ return;
7108
+ }
7023
7109
  if (keyring.type === types.KeyringType.KeystoneKeyring) {
7024
7110
  tools.toastError(t("merge_utxos_is_not_supported_for_keystone_yet"));
7025
7111
  return;
@@ -7055,6 +7141,7 @@ function useCAT20TokenScreenLogic() {
7055
7141
  loading,
7056
7142
  tokenUrl,
7057
7143
  enableTransfer,
7144
+ enableMerge,
7058
7145
  enableTrade,
7059
7146
  iconInfo,
7060
7147
  onClickMerge,
@@ -7630,6 +7717,7 @@ function useCAT721NFTScreenLogic() {
7630
7717
  const { collectionInfo, localId, version } = nav.getRouteState();
7631
7718
  const { t } = useI18n();
7632
7719
  const resetTxState = useResetTxState();
7720
+ const accountCapabilities = useCurrentAccountCapabilities();
7633
7721
  const onClickBack = () => {
7634
7722
  nav.goBack();
7635
7723
  };
@@ -7650,7 +7738,8 @@ function useCAT721NFTScreenLogic() {
7650
7738
  t,
7651
7739
  // actions
7652
7740
  onClickBack,
7653
- onClickSend
7741
+ onClickSend,
7742
+ disabledSend: !accountCapabilities.canCreateSigningRequest
7654
7743
  };
7655
7744
  }
7656
7745
  function useSignMessageLogic(props) {
@@ -7666,10 +7755,10 @@ function useSignMessageLogic(props) {
7666
7755
  const [loading, setLoading] = React.useState(false);
7667
7756
  const [isKeystoneSigning, setIsKeystoneSigning] = React.useState(false);
7668
7757
  const [isColdWalletSigning, setIsColdWalletSigning] = React.useState(false);
7758
+ const [readonlySignature, setReadonlySignature] = React.useState("");
7669
7759
  const wallet = useWallet();
7670
- useTools();
7671
- const currentAccount = useCurrentAccount();
7672
- const keyringType = currentAccount.type;
7760
+ const tools = useTools();
7761
+ const accountCapabilities = useCurrentAccountCapabilities();
7673
7762
  const { t } = useI18n();
7674
7763
  const [disclaimerVisible, setDisclaimerVisible] = React.useState(false);
7675
7764
  const [signingTxIndex, setSigningTxIndex] = React.useState(toSignMessages.length > 1 ? -1 : 0);
@@ -7687,11 +7776,11 @@ function useSignMessageLogic(props) {
7687
7776
  if (toSignMessages.length <= 1) {
7688
7777
  return;
7689
7778
  }
7690
- if (keyringType === types.KeyringType.KeystoneKeyring || keyringType === types.KeyringType.ColdWalletKeyring) {
7779
+ if (accountCapabilities.signMethod !== walletShared.AccountSignMethod.Local) {
7691
7780
  return;
7692
7781
  }
7693
7782
  setAllowQuickMultiSign(websiteResult.allowQuickMultiSign && toSignMessages.length > 1);
7694
- }, [websiteResult, keyringType]);
7783
+ }, [websiteResult, accountCapabilities, toSignMessages.length]);
7695
7784
  useAsyncEffect(async () => {
7696
7785
  const website = session?.origin;
7697
7786
  if (website) {
@@ -7788,12 +7877,27 @@ function useSignMessageLogic(props) {
7788
7877
  }
7789
7878
  };
7790
7879
  const onNextStep = () => {
7791
- if (keyringType === types.KeyringType.KeystoneKeyring) {
7792
- setIsKeystoneSigning(true);
7793
- } else if (keyringType === types.KeyringType.ColdWalletKeyring) {
7794
- setIsColdWalletSigning(true);
7795
- } else {
7796
- localSign();
7880
+ switch (accountCapabilities.signMethod) {
7881
+ case walletShared.AccountSignMethod.Keystone:
7882
+ setIsKeystoneSigning(true);
7883
+ return;
7884
+ case walletShared.AccountSignMethod.ColdWallet:
7885
+ setIsColdWalletSigning(true);
7886
+ return;
7887
+ case walletShared.AccountSignMethod.External:
7888
+ if (!readonlySignature) {
7889
+ tools.toastError(t("please_enter_your_signature"));
7890
+ return;
7891
+ }
7892
+ onSignedData({ signature: readonlySignature }, signingTxIndex);
7893
+ setReadonlySignature("");
7894
+ return;
7895
+ case walletShared.AccountSignMethod.Local:
7896
+ localSign();
7897
+ return;
7898
+ case walletShared.AccountSignMethod.None:
7899
+ default:
7900
+ tools.toastError(t("not_supported"));
7797
7901
  }
7798
7902
  };
7799
7903
  const onSignedData = (data, signingTxIndex2) => {
@@ -7868,6 +7972,8 @@ function useSignMessageLogic(props) {
7868
7972
  onKeystoneSigningBack,
7869
7973
  onColdWalletSigningSuccess,
7870
7974
  onColdWalletSigningBack,
7975
+ readonlySignature,
7976
+ setReadonlySignature,
7871
7977
  onDisclaimerModalClose
7872
7978
  };
7873
7979
  }
@@ -7886,11 +7992,11 @@ function useSignPsbtLogic(props) {
7886
7992
  const [isPsbtRiskPopoverVisible, setIsPsbtRiskPopoverVisible] = React.useState(false);
7887
7993
  const [isKeystoneSigning, setIsKeystoneSigning] = React.useState(false);
7888
7994
  const [isColdWalletSigning, setIsColdWalletSigning] = React.useState(false);
7995
+ const [readonlySignedPsbtHex, setReadonlySignedPsbtHex] = React.useState("");
7889
7996
  const [contractPopoverData, setContractPopoverData] = React.useState(void 0);
7890
7997
  const wallet = useWallet();
7891
7998
  const tools = useTools();
7892
- const currentAccount = useCurrentAccount();
7893
- const keyringType = currentAccount.type;
7999
+ const accountCapabilities = useCurrentAccountCapabilities();
7894
8000
  const { t } = useI18n();
7895
8001
  const [disclaimerVisible, setDisclaimerVisible] = React.useState(false);
7896
8002
  const [localPsbtSummary, setLocalPsbtSummary] = React.useState(null);
@@ -7909,11 +8015,11 @@ function useSignPsbtLogic(props) {
7909
8015
  if (toSignDatas.length <= 1) {
7910
8016
  return;
7911
8017
  }
7912
- if (keyringType === types.KeyringType.KeystoneKeyring || keyringType === types.KeyringType.ColdWalletKeyring) {
8018
+ if (accountCapabilities.signMethod !== walletShared.AccountSignMethod.Local) {
7913
8019
  return;
7914
8020
  }
7915
8021
  setAllowQuickMultiSign(websiteResult.allowQuickMultiSign && toSignDatas.length > 1);
7916
- }, [websiteResult, keyringType]);
8022
+ }, [websiteResult, accountCapabilities]);
7917
8023
  useAsyncEffect(async () => {
7918
8024
  const website = session?.origin;
7919
8025
  if (website) {
@@ -8114,12 +8220,27 @@ function useSignPsbtLogic(props) {
8114
8220
  }
8115
8221
  };
8116
8222
  const onNextStep = () => {
8117
- if (keyringType === types.KeyringType.KeystoneKeyring) {
8118
- setIsKeystoneSigning(true);
8119
- } else if (keyringType === types.KeyringType.ColdWalletKeyring) {
8120
- setIsColdWalletSigning(true);
8121
- } else {
8122
- localSign();
8223
+ switch (accountCapabilities.signMethod) {
8224
+ case walletShared.AccountSignMethod.Keystone:
8225
+ setIsKeystoneSigning(true);
8226
+ return;
8227
+ case walletShared.AccountSignMethod.ColdWallet:
8228
+ setIsColdWalletSigning(true);
8229
+ return;
8230
+ case walletShared.AccountSignMethod.External:
8231
+ if (!readonlySignedPsbtHex) {
8232
+ tools.toastError(t("invalid_psbt"));
8233
+ return;
8234
+ }
8235
+ onSignedData({ psbtHex: readonlySignedPsbtHex }, signingTxIndex);
8236
+ setReadonlySignedPsbtHex("");
8237
+ return;
8238
+ case walletShared.AccountSignMethod.Local:
8239
+ localSign();
8240
+ return;
8241
+ case walletShared.AccountSignMethod.None:
8242
+ default:
8243
+ tools.toastError(t("not_supported"));
8123
8244
  }
8124
8245
  };
8125
8246
  const onSignedData = (data, signingTxIndex2) => {
@@ -8196,6 +8317,8 @@ function useSignPsbtLogic(props) {
8196
8317
  toSignDatas,
8197
8318
  currentToSignData,
8198
8319
  currentDecodedPsbt,
8320
+ readonlySignedPsbtHex,
8321
+ setReadonlySignedPsbtHex,
8199
8322
  // state
8200
8323
  networkFee,
8201
8324
  isValid,
@@ -8436,6 +8559,10 @@ function useSettingsTabScreenLogic() {
8436
8559
  const item = walletShared.ADDRESS_TYPES[currentKeyring.addressType];
8437
8560
  return currentKeyring.hdPath !== "" && item.hdPath !== currentKeyring.hdPath;
8438
8561
  }, [currentKeyring]);
8562
+ const currentKeyringCapabilities = React.useMemo(
8563
+ () => walletShared.getAccountCapabilities({ type: currentKeyring.type }),
8564
+ [currentKeyring.type]
8565
+ );
8439
8566
  const settings_connectedSites = React.useMemo(() => {
8440
8567
  const value = connected ? t("connected") : t("not_connected");
8441
8568
  return {
@@ -8467,7 +8594,7 @@ function useSettingsTabScreenLogic() {
8467
8594
  let value = "";
8468
8595
  const item = walletShared.ADDRESS_TYPES[currentKeyring.addressType];
8469
8596
  const hdPath = currentKeyring.hdPath || item.hdPath;
8470
- if (currentKeyring.type === types.KeyringType.SimpleKeyring) {
8597
+ if (currentKeyring.type === types.KeyringType.SimpleKeyring || currentKeyringCapabilities.signMethod === walletShared.AccountSignMethod.External || !currentKeyringCapabilities.canChangeAddressType) {
8471
8598
  value = `${item.name}`;
8472
8599
  } else {
8473
8600
  value = `${item.name} (${hdPath}/${currentAccount.index})`;
@@ -8491,7 +8618,7 @@ function useSettingsTabScreenLogic() {
8491
8618
  nav.navigate("AddressTypeScreen");
8492
8619
  }
8493
8620
  };
8494
- }, [t, isCustomHdPath]);
8621
+ }, [t, isCustomHdPath, currentKeyring, currentAccount.index, currentKeyringCapabilities]);
8495
8622
  const settings_advanced = React.useMemo(() => {
8496
8623
  return {
8497
8624
  key: "settings_advanced",
@@ -8860,6 +8987,7 @@ exports.useCreatePasswordScreenLogic = useCreatePasswordScreenLogic;
8860
8987
  exports.useCreateSplitTxCallback = useCreateSplitTxCallback;
8861
8988
  exports.useCreateWalletLogicImportWordsStep = useCreateWalletLogicImportWordsStep;
8862
8989
  exports.useCurrentAccount = useCurrentAccount;
8990
+ exports.useCurrentAccountCapabilities = useCurrentAccountCapabilities;
8863
8991
  exports.useCurrentAddress = useCurrentAddress;
8864
8992
  exports.useCurrentKeyring = useCurrentKeyring;
8865
8993
  exports.useDeveloperMode = useDeveloperMode;