@unisat/wallet-state 1.0.5 → 1.2.0

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 (290) hide show
  1. package/LICENSE +0 -5
  2. package/lib/actions/global.d.ts +2 -0
  3. package/lib/actions/global.d.ts.map +1 -0
  4. package/lib/context/ApprovalContext.d.ts +9 -0
  5. package/lib/context/ApprovalContext.d.ts.map +1 -0
  6. package/lib/context/DeviceContext.d.ts +17 -0
  7. package/lib/context/DeviceContext.d.ts.map +1 -0
  8. package/lib/context/I18nContext.d.ts +13 -0
  9. package/lib/context/I18nContext.d.ts.map +1 -0
  10. package/lib/context/NavigationContext.d.ts +218 -0
  11. package/lib/context/NavigationContext.d.ts.map +1 -0
  12. package/lib/context/PriceContext.d.ts +13 -0
  13. package/lib/context/PriceContext.d.ts.map +1 -0
  14. package/lib/context/StorageContext.d.ts +60 -0
  15. package/lib/context/StorageContext.d.ts.map +1 -0
  16. package/lib/context/ToolsContext.d.ts +17 -0
  17. package/lib/context/ToolsContext.d.ts.map +1 -0
  18. package/lib/context/WalletContext.d.ts +493 -0
  19. package/lib/context/WalletContext.d.ts.map +1 -0
  20. package/lib/context/index.d.ts +9 -0
  21. package/lib/context/index.d.ts.map +1 -0
  22. package/lib/hooks/accounts.d.ts +34 -0
  23. package/lib/hooks/accounts.d.ts.map +1 -0
  24. package/lib/hooks/base.d.ts +14 -0
  25. package/lib/hooks/base.d.ts.map +1 -0
  26. package/lib/hooks/browser.d.ts +32 -0
  27. package/lib/hooks/browser.d.ts.map +1 -0
  28. package/lib/hooks/discovery.d.ts +17 -0
  29. package/lib/hooks/discovery.d.ts.map +1 -0
  30. package/lib/hooks/global.d.ts +43 -0
  31. package/lib/hooks/global.d.ts.map +1 -0
  32. package/lib/hooks/index.d.ts +10 -0
  33. package/lib/hooks/index.d.ts.map +1 -0
  34. package/lib/hooks/keyrings.d.ts +5 -0
  35. package/lib/hooks/keyrings.d.ts.map +1 -0
  36. package/lib/hooks/settings.d.ts +43 -0
  37. package/lib/hooks/settings.d.ts.map +1 -0
  38. package/lib/hooks/transactions.d.ts +67 -0
  39. package/lib/hooks/transactions.d.ts.map +1 -0
  40. package/lib/hooks/ui.d.ts +112 -0
  41. package/lib/hooks/ui.d.ts.map +1 -0
  42. package/lib/index.d.mts +2072 -199
  43. package/lib/index.d.ts +31 -946
  44. package/lib/index.d.ts.map +1 -0
  45. package/lib/index.js +7176 -582
  46. package/lib/index.js.map +1 -1
  47. package/lib/index.mjs +6971 -525
  48. package/lib/index.mjs.map +1 -1
  49. package/lib/reducers/accounts.d.ts +49 -0
  50. package/lib/reducers/accounts.d.ts.map +1 -0
  51. package/lib/reducers/browser.d.ts +49 -0
  52. package/lib/reducers/browser.d.ts.map +1 -0
  53. package/lib/reducers/discovery.d.ts +22 -0
  54. package/lib/reducers/discovery.d.ts.map +1 -0
  55. package/lib/reducers/global.d.ts +35 -0
  56. package/lib/reducers/global.d.ts.map +1 -0
  57. package/lib/reducers/index.d.ts +9 -0
  58. package/lib/reducers/index.d.ts.map +1 -0
  59. package/lib/reducers/keyrings.d.ts +10 -0
  60. package/lib/reducers/keyrings.d.ts.map +1 -0
  61. package/lib/reducers/settings.d.ts +16 -0
  62. package/lib/reducers/settings.d.ts.map +1 -0
  63. package/lib/reducers/transactions.d.ts +61 -0
  64. package/lib/reducers/transactions.d.ts.map +1 -0
  65. package/lib/reducers/ui.d.ts +55 -0
  66. package/lib/reducers/ui.d.ts.map +1 -0
  67. package/lib/types/index.d.mts +7 -3
  68. package/lib/types/index.d.ts +3 -30
  69. package/lib/types/index.d.ts.map +1 -0
  70. package/lib/types/index.js +7 -1
  71. package/lib/types/index.js.map +1 -1
  72. package/lib/types/index.mjs +7 -2
  73. package/lib/types/index.mjs.map +1 -1
  74. package/lib/types/ui.d.ts +31 -0
  75. package/lib/types/ui.d.ts.map +1 -0
  76. package/lib/ui-hooks/index.d.ts +55 -0
  77. package/lib/ui-hooks/index.d.ts.map +1 -0
  78. package/lib/ui-hooks/useActionOverviewSectionLogic.d.ts +12 -0
  79. package/lib/ui-hooks/useActionOverviewSectionLogic.d.ts.map +1 -0
  80. package/lib/ui-hooks/useAddressTypeScreenLogic.d.ts +19 -0
  81. package/lib/ui-hooks/useAddressTypeScreenLogic.d.ts.map +1 -0
  82. package/lib/ui-hooks/useAlkanesBalanceCardLogic.d.ts +19 -0
  83. package/lib/ui-hooks/useAlkanesBalanceCardLogic.d.ts.map +1 -0
  84. package/lib/ui-hooks/useAlkanesCollectionListLogic.d.ts +11 -0
  85. package/lib/ui-hooks/useAlkanesCollectionListLogic.d.ts.map +1 -0
  86. package/lib/ui-hooks/useAlkanesListLogic.d.ts +14 -0
  87. package/lib/ui-hooks/useAlkanesListLogic.d.ts.map +1 -0
  88. package/lib/ui-hooks/useAlkanesNFTListLogic.d.ts +11 -0
  89. package/lib/ui-hooks/useAlkanesNFTListLogic.d.ts.map +1 -0
  90. package/lib/ui-hooks/useAlkanesNFTScreenLogic.d.ts +9 -0
  91. package/lib/ui-hooks/useAlkanesNFTScreenLogic.d.ts.map +1 -0
  92. package/lib/ui-hooks/useAlkanesTokenScreenLogic.d.ts +22 -0
  93. package/lib/ui-hooks/useAlkanesTokenScreenLogic.d.ts.map +1 -0
  94. package/lib/ui-hooks/useAmountInputLogic.d.ts +22 -0
  95. package/lib/ui-hooks/useAmountInputLogic.d.ts.map +1 -0
  96. package/lib/ui-hooks/useAnnouncementCardLogic.d.ts +11 -0
  97. package/lib/ui-hooks/useAnnouncementCardLogic.d.ts.map +1 -0
  98. package/lib/ui-hooks/useBRC20BalanceCardLogic.d.ts +26 -0
  99. package/lib/ui-hooks/useBRC20BalanceCardLogic.d.ts.map +1 -0
  100. package/lib/ui-hooks/useBRC20InscribeTransferLogic.d.ts +103 -0
  101. package/lib/ui-hooks/useBRC20InscribeTransferLogic.d.ts.map +1 -0
  102. package/lib/ui-hooks/useBRC20ListLogic.d.ts +14 -0
  103. package/lib/ui-hooks/useBRC20ListLogic.d.ts.map +1 -0
  104. package/lib/ui-hooks/useBRC20ProgListLogic.d.ts +14 -0
  105. package/lib/ui-hooks/useBRC20ProgListLogic.d.ts.map +1 -0
  106. package/lib/ui-hooks/useBRC20SendScreenLogic.d.ts +67 -0
  107. package/lib/ui-hooks/useBRC20SendScreenLogic.d.ts.map +1 -0
  108. package/lib/ui-hooks/useBRC20SingleStepScreenLogic.d.ts +36 -0
  109. package/lib/ui-hooks/useBRC20SingleStepScreenLogic.d.ts.map +1 -0
  110. package/lib/ui-hooks/useBRC20TokenScreenLogic.d.ts +75 -0
  111. package/lib/ui-hooks/useBRC20TokenScreenLogic.d.ts.map +1 -0
  112. package/lib/ui-hooks/useBalanceCardLogic.d.ts +26 -0
  113. package/lib/ui-hooks/useBalanceCardLogic.d.ts.map +1 -0
  114. package/lib/ui-hooks/useBtcDisplayLogic.d.ts +5 -0
  115. package/lib/ui-hooks/useBtcDisplayLogic.d.ts.map +1 -0
  116. package/lib/ui-hooks/useCAT20BalanceCardLogic.d.ts +20 -0
  117. package/lib/ui-hooks/useCAT20BalanceCardLogic.d.ts.map +1 -0
  118. package/lib/ui-hooks/useCAT20ListLogic.d.ts +14 -0
  119. package/lib/ui-hooks/useCAT20ListLogic.d.ts.map +1 -0
  120. package/lib/ui-hooks/useCAT20TokenScreenLogic.d.ts +19 -0
  121. package/lib/ui-hooks/useCAT20TokenScreenLogic.d.ts.map +1 -0
  122. package/lib/ui-hooks/useCAT721ListLogic.d.ts +11 -0
  123. package/lib/ui-hooks/useCAT721ListLogic.d.ts.map +1 -0
  124. package/lib/ui-hooks/useCAT721NFTScreenLogic.d.ts +9 -0
  125. package/lib/ui-hooks/useCAT721NFTScreenLogic.d.ts.map +1 -0
  126. package/lib/ui-hooks/useCreatePasswordScreenLogic.d.ts +27 -0
  127. package/lib/ui-hooks/useCreatePasswordScreenLogic.d.ts.map +1 -0
  128. package/lib/ui-hooks/useCreateWalletLogicImportWordsStep.d.ts +78 -0
  129. package/lib/ui-hooks/useCreateWalletLogicImportWordsStep.d.ts.map +1 -0
  130. package/lib/ui-hooks/useEditAccountNameScreenLogic.d.ts +18 -0
  131. package/lib/ui-hooks/useEditAccountNameScreenLogic.d.ts.map +1 -0
  132. package/lib/ui-hooks/useEditContactScreenLogic.d.ts +24 -0
  133. package/lib/ui-hooks/useEditContactScreenLogic.d.ts.map +1 -0
  134. package/lib/ui-hooks/useEditWalletNameScreenLogic.d.ts +15 -0
  135. package/lib/ui-hooks/useEditWalletNameScreenLogic.d.ts.map +1 -0
  136. package/lib/ui-hooks/useExportMnemonicsScreenLogic.d.ts +18 -0
  137. package/lib/ui-hooks/useExportMnemonicsScreenLogic.d.ts.map +1 -0
  138. package/lib/ui-hooks/useExportPrivateKeyScreenLogic.d.ts +17 -0
  139. package/lib/ui-hooks/useExportPrivateKeyScreenLogic.d.ts.map +1 -0
  140. package/lib/ui-hooks/useFeeRateBarLogic.d.ts +34 -0
  141. package/lib/ui-hooks/useFeeRateBarLogic.d.ts.map +1 -0
  142. package/lib/ui-hooks/useInfiniteList.d.ts +19 -0
  143. package/lib/ui-hooks/useInfiniteList.d.ts.map +1 -0
  144. package/lib/ui-hooks/useInscriptionListLogic.d.ts +11 -0
  145. package/lib/ui-hooks/useInscriptionListLogic.d.ts.map +1 -0
  146. package/lib/ui-hooks/useLockTimePageLogic.d.ts +11 -0
  147. package/lib/ui-hooks/useLockTimePageLogic.d.ts.map +1 -0
  148. package/lib/ui-hooks/useNotificationsLogic.d.ts +14 -0
  149. package/lib/ui-hooks/useNotificationsLogic.d.ts.map +1 -0
  150. package/lib/ui-hooks/useOrdinalsInscriptionScreenLogic.d.ts +27 -0
  151. package/lib/ui-hooks/useOrdinalsInscriptionScreenLogic.d.ts.map +1 -0
  152. package/lib/ui-hooks/useRunesBalanceCardLogic.d.ts +19 -0
  153. package/lib/ui-hooks/useRunesBalanceCardLogic.d.ts.map +1 -0
  154. package/lib/ui-hooks/useRunesListLogic.d.ts +14 -0
  155. package/lib/ui-hooks/useRunesListLogic.d.ts.map +1 -0
  156. package/lib/ui-hooks/useRunesTokenScreenLogic.d.ts +22 -0
  157. package/lib/ui-hooks/useRunesTokenScreenLogic.d.ts.map +1 -0
  158. package/lib/ui-hooks/useSecurityCardLogic.d.ts +1 -0
  159. package/lib/ui-hooks/useSecurityCardLogic.d.ts.map +1 -0
  160. package/lib/ui-hooks/useSendAlkanesNFTScreenLogic.d.ts +32 -0
  161. package/lib/ui-hooks/useSendAlkanesNFTScreenLogic.d.ts.map +1 -0
  162. package/lib/ui-hooks/useSendAlkanesScreenLogic.d.ts +37 -0
  163. package/lib/ui-hooks/useSendAlkanesScreenLogic.d.ts.map +1 -0
  164. package/lib/ui-hooks/useSendCAT20ScreenLogic.d.ts +44 -0
  165. package/lib/ui-hooks/useSendCAT20ScreenLogic.d.ts.map +1 -0
  166. package/lib/ui-hooks/useSendCAT721ScreenLogic.d.ts +40 -0
  167. package/lib/ui-hooks/useSendCAT721ScreenLogic.d.ts.map +1 -0
  168. package/lib/ui-hooks/useSendOrdinalsInscriptionScreenLogic.d.ts +22 -0
  169. package/lib/ui-hooks/useSendOrdinalsInscriptionScreenLogic.d.ts.map +1 -0
  170. package/lib/ui-hooks/useSendRunesScreenLogic.d.ts +30 -0
  171. package/lib/ui-hooks/useSendRunesScreenLogic.d.ts.map +1 -0
  172. package/lib/ui-hooks/useSettingsTabScreenLogic.d.ts +72 -0
  173. package/lib/ui-hooks/useSettingsTabScreenLogic.d.ts.map +1 -0
  174. package/lib/ui-hooks/useSignMessageLogic.d.ts +54 -0
  175. package/lib/ui-hooks/useSignMessageLogic.d.ts.map +1 -0
  176. package/lib/ui-hooks/useSignPsbtLogic.d.ts +82 -0
  177. package/lib/ui-hooks/useSignPsbtLogic.d.ts.map +1 -0
  178. package/lib/ui-hooks/useSplitOrdinalsInscriptionScreenLogic.d.ts +15 -0
  179. package/lib/ui-hooks/useSplitOrdinalsInscriptionScreenLogic.d.ts.map +1 -0
  180. package/lib/ui-hooks/useTxConfirmScreenLogic.d.ts +8 -0
  181. package/lib/ui-hooks/useTxConfirmScreenLogic.d.ts.map +1 -0
  182. package/lib/ui-hooks/useTxCreateScreenLogic.d.ts +28 -0
  183. package/lib/ui-hooks/useTxCreateScreenLogic.d.ts.map +1 -0
  184. package/lib/ui-hooks/useTxFailScreenLogic.d.ts +7 -0
  185. package/lib/ui-hooks/useTxFailScreenLogic.d.ts.map +1 -0
  186. package/lib/ui-hooks/useTxSuccessScreenLogic.d.ts +8 -0
  187. package/lib/ui-hooks/useTxSuccessScreenLogic.d.ts.map +1 -0
  188. package/lib/updater/accounts.d.ts +2 -0
  189. package/lib/updater/accounts.d.ts.map +1 -0
  190. package/lib/updater/index.d.ts +2 -0
  191. package/lib/updater/index.d.ts.map +1 -0
  192. package/lib/utils/bitcoin-utils.d.ts +7 -0
  193. package/lib/utils/bitcoin-utils.d.ts.map +1 -0
  194. package/lib/utils/eventBus.d.ts +12 -0
  195. package/lib/utils/eventBus.d.ts.map +1 -0
  196. package/lib/utils/password-utils.d.ts +12 -0
  197. package/lib/utils/password-utils.d.ts.map +1 -0
  198. package/lib/utils/ui-utils.d.ts +4 -0
  199. package/lib/utils/ui-utils.d.ts.map +1 -0
  200. package/package.json +19 -15
  201. package/src/.DS_Store +0 -0
  202. package/src/context/ApprovalContext.tsx +27 -0
  203. package/src/context/DeviceContext.tsx +36 -0
  204. package/src/context/I18nContext.tsx +14 -172
  205. package/src/context/NavigationContext.tsx +305 -0
  206. package/src/context/PriceContext.tsx +2 -2
  207. package/src/context/StorageContext.tsx +393 -0
  208. package/src/context/ToolsContext.tsx +50 -0
  209. package/src/context/WalletContext.tsx +170 -126
  210. package/src/context/index.ts +17 -2
  211. package/src/hooks/accounts.ts +11 -5
  212. package/src/hooks/browser.ts +11 -0
  213. package/src/hooks/global.ts +170 -7
  214. package/src/hooks/index.ts +1 -2
  215. package/src/hooks/settings.ts +38 -37
  216. package/src/hooks/transactions.ts +45 -151
  217. package/src/hooks/ui.ts +239 -35
  218. package/src/index.ts +33 -24
  219. package/src/reducers/accounts.ts +22 -2
  220. package/src/reducers/browser.ts +223 -0
  221. package/src/reducers/global.ts +67 -1
  222. package/src/reducers/index.ts +1 -0
  223. package/src/reducers/transactions.ts +0 -9
  224. package/src/reducers/ui.ts +144 -4
  225. package/src/types/index.ts +1 -1
  226. package/src/types/ui.ts +6 -1
  227. package/src/ui-hooks/index.ts +107 -0
  228. package/src/ui-hooks/useActionOverviewSectionLogic.ts +150 -0
  229. package/src/ui-hooks/useAddressTypeScreenLogic.ts +160 -0
  230. package/src/ui-hooks/useAlkanesBalanceCardLogic.ts +41 -0
  231. package/src/ui-hooks/useAlkanesCollectionListLogic.ts +68 -0
  232. package/src/ui-hooks/useAlkanesListLogic.ts +69 -0
  233. package/src/ui-hooks/useAlkanesNFTListLogic.ts +42 -0
  234. package/src/ui-hooks/useAlkanesNFTScreenLogic.ts +45 -0
  235. package/src/ui-hooks/useAlkanesTokenScreenLogic.ts +138 -0
  236. package/src/ui-hooks/useAmountInputLogic.ts +80 -0
  237. package/src/ui-hooks/useAnnouncementCardLogic.ts +91 -0
  238. package/src/ui-hooks/useBRC20BalanceCardLogic.ts +115 -0
  239. package/src/ui-hooks/useBRC20InscribeTransferLogic.ts +418 -0
  240. package/src/ui-hooks/useBRC20ListLogic.ts +79 -0
  241. package/src/ui-hooks/useBRC20ProgListLogic.ts +81 -0
  242. package/src/ui-hooks/useBRC20SendScreenLogic.ts +424 -0
  243. package/src/ui-hooks/useBRC20SingleStepScreenLogic.ts +208 -0
  244. package/src/ui-hooks/useBRC20TokenScreenLogic.ts +489 -0
  245. package/src/ui-hooks/useBalanceCardLogic.ts +164 -0
  246. package/src/ui-hooks/useBtcDisplayLogic.ts +16 -0
  247. package/src/ui-hooks/useCAT20BalanceCardLogic.ts +35 -0
  248. package/src/ui-hooks/useCAT20ListLogic.ts +83 -0
  249. package/src/ui-hooks/useCAT20TokenScreenLogic.ts +127 -0
  250. package/src/ui-hooks/useCAT721ListLogic.ts +68 -0
  251. package/src/ui-hooks/useCAT721NFTScreenLogic.ts +37 -0
  252. package/src/ui-hooks/useCreatePasswordScreenLogic.ts +92 -0
  253. package/src/ui-hooks/useCreateWalletLogicImportWordsStep.ts +299 -0
  254. package/src/ui-hooks/useEditAccountNameScreenLogic.ts +71 -0
  255. package/src/ui-hooks/useEditContactScreenLogic.ts +162 -0
  256. package/src/ui-hooks/useEditWalletNameScreenLogic.ts +60 -0
  257. package/src/ui-hooks/useExportMnemonicsScreenLogic.ts +75 -0
  258. package/src/ui-hooks/useExportPrivateKeyScreenLogic.ts +64 -0
  259. package/src/ui-hooks/useFeeRateBarLogic.ts +303 -0
  260. package/src/ui-hooks/useInfiniteList.ts +85 -0
  261. package/src/ui-hooks/useInscriptionListLogic.ts +68 -0
  262. package/src/ui-hooks/useLockTimePageLogic.ts +43 -0
  263. package/src/ui-hooks/useNotificationsLogic.ts +115 -0
  264. package/src/ui-hooks/useOrdinalsInscriptionScreenLogic.ts +130 -0
  265. package/src/ui-hooks/useRunesBalanceCardLogic.ts +44 -0
  266. package/src/ui-hooks/useRunesListLogic.ts +74 -0
  267. package/src/ui-hooks/useRunesTokenScreenLogic.ts +156 -0
  268. package/src/ui-hooks/useSecurityCardLogic.ts +0 -0
  269. package/src/ui-hooks/useSendAlkanesNFTScreenLogic.ts +160 -0
  270. package/src/ui-hooks/useSendAlkanesScreenLogic.ts +208 -0
  271. package/src/ui-hooks/useSendCAT20ScreenLogic.ts +297 -0
  272. package/src/ui-hooks/useSendCAT721ScreenLogic.ts +205 -0
  273. package/src/ui-hooks/useSendOrdinalsInscriptionScreenLogic.ts +152 -0
  274. package/src/ui-hooks/useSendRunesScreenLogic.ts +189 -0
  275. package/src/ui-hooks/useSettingsTabScreenLogic.ts +211 -0
  276. package/src/ui-hooks/useSignMessageLogic.ts +302 -0
  277. package/src/ui-hooks/useSignPsbtLogic.ts +517 -0
  278. package/src/ui-hooks/useSplitOrdinalsInscriptionScreenLogic.ts +109 -0
  279. package/src/ui-hooks/useTxConfirmScreenLogic.ts +47 -0
  280. package/src/ui-hooks/useTxCreateScreenLogic.ts +177 -0
  281. package/src/ui-hooks/useTxFailScreenLogic.ts +26 -0
  282. package/src/ui-hooks/useTxSuccessScreenLogic.ts +33 -0
  283. package/src/updater/accounts.ts +11 -11
  284. package/src/utils/bitcoin-utils.ts +17 -8
  285. package/src/utils/eventBus.ts +2 -1
  286. package/src/utils/password-utils.ts +78 -0
  287. package/src/utils/ui-utils.ts +28 -0
  288. package/src/hooks/approval.ts +0 -72
  289. package/src/hooks/i18n.ts +0 -53
  290. package/src/utils/i18n.ts +0 -41
@@ -0,0 +1,302 @@
1
+ import { KeyringType } from '@unisat/keyring-service/types'
2
+ import { SignedMessage, SignState, ToSignMessage, WebsiteResult } from '@unisat/wallet-shared'
3
+ import logger from 'loglevel'
4
+ import { useEffect, useMemo, useRef, useState } from 'react'
5
+ import { useApproval, useI18n, useTools, useWallet } from 'src/context'
6
+ import { useCurrentAccount } from 'src/hooks'
7
+ import { shortAddress, useAsyncEffect } from 'src/utils/ui-utils'
8
+ export interface SignMessageProps {
9
+ header?: React.ReactNode
10
+ params: {
11
+ data: {
12
+ toSignMessages: ToSignMessage[]
13
+ }
14
+ session?: {
15
+ origin: string
16
+ icon: string
17
+ name: string
18
+ }
19
+ }
20
+ handleCancel?: () => void
21
+ handleConfirm?: (signedMessages: SignedMessage[]) => void
22
+ }
23
+
24
+ export function useSignMessageLogic(props: SignMessageProps) {
25
+ const {
26
+ params: {
27
+ data: { toSignMessages },
28
+ session,
29
+ },
30
+ handleCancel,
31
+ handleConfirm,
32
+ } = props
33
+
34
+ const { resolveApproval, rejectApproval } = useApproval()
35
+
36
+ const [loading, setLoading] = useState(false)
37
+ const [isKeystoneSigning, setIsKeystoneSigning] = useState(false)
38
+ const [isColdWalletSigning, setIsColdWalletSigning] = useState(false)
39
+
40
+ const wallet = useWallet()
41
+ const tools = useTools()
42
+ const currentAccount = useCurrentAccount()
43
+ const keyringType = currentAccount.type
44
+
45
+ const { t } = useI18n()
46
+
47
+ const [disclaimerVisible, setDisclaimerVisible] = useState(false)
48
+
49
+ const [signingTxIndex, setSigningTxIndex] = useState(toSignMessages.length > 1 ? -1 : 0)
50
+ const [signedStates, setSignedStates] = useState<SignState[]>(
51
+ toSignMessages.map(() => SignState.PENDING)
52
+ )
53
+
54
+ const [websiteResult, setWebsiteResult] = useState<WebsiteResult>({
55
+ isScammer: false,
56
+ warning: '',
57
+ allowQuickMultiSign: false,
58
+ })
59
+
60
+ const isMultipleViewMode = toSignMessages.length > 1
61
+ const [allowQuickMultiSign, setAllowQuickMultiSign] = useState(false)
62
+
63
+ useEffect(() => {
64
+ if (toSignMessages.length <= 1) {
65
+ return
66
+ }
67
+
68
+ if (
69
+ keyringType === KeyringType.KeystoneKeyring ||
70
+ keyringType === KeyringType.ColdWalletKeyring
71
+ ) {
72
+ return
73
+ }
74
+
75
+ setAllowQuickMultiSign(websiteResult.allowQuickMultiSign && toSignMessages.length > 1)
76
+ }, [websiteResult, keyringType])
77
+
78
+ useAsyncEffect(async () => {
79
+ const website = session?.origin
80
+ if (website) {
81
+ const result = await wallet.checkWebsite(website)
82
+ setWebsiteResult(result)
83
+
84
+ // Also check local user-granted trust
85
+ if (!result.allowQuickMultiSign && toSignMessages.length > 1) {
86
+ const sites = await wallet.getConnectedSites()
87
+ const site = sites.find(s => s.origin === website)
88
+ if (site?.allowQuickMultiSign) {
89
+ setAllowQuickMultiSign(true)
90
+ }
91
+ }
92
+ }
93
+ }, [])
94
+
95
+ const currentToSignMessage = toSignMessages[signingTxIndex]
96
+
97
+ const signedMessages = useRef<SignedMessage[]>([])
98
+
99
+ const isScammer = websiteResult ? websiteResult.isScammer : false
100
+
101
+ const isAllSigned = signedStates.every(state => state === SignState.SUCCESS)
102
+ const signedCount = signedStates.filter(state => state === SignState.SUCCESS).length
103
+
104
+ const defaultHandleCancel = () => rejectApproval()
105
+ const actualHandleCancel = handleCancel || defaultHandleCancel
106
+
107
+ const multiSignList = useMemo(() => {
108
+ return toSignMessages.map((data, index) => {
109
+ const signState = signedStates[index]
110
+ let buttonText = 'View'
111
+ if (signState == SignState.PENDING) {
112
+ buttonText = t('view')
113
+ } else if (signState == SignState.SUCCESS) {
114
+ buttonText = t('signed')
115
+ } else if (signState == SignState.FAILED) {
116
+ buttonText = t('reject')
117
+ }
118
+
119
+ let buttonPreset = 'primary'
120
+ if (signState === SignState.SUCCESS) {
121
+ buttonPreset = 'approval'
122
+ } else if (signState === SignState.FAILED) {
123
+ buttonPreset = 'danger'
124
+ }
125
+
126
+ let title = shortAddress(data.text, 10)
127
+
128
+ const onClick = () => {
129
+ setSigningTxIndex(index)
130
+ }
131
+ return {
132
+ index,
133
+ title,
134
+ buttonText,
135
+ buttonPreset,
136
+ onClick,
137
+ }
138
+ })
139
+ }, [toSignMessages, signedStates, t])
140
+
141
+ // action
142
+ const onClickBack = () => {
143
+ if (isMultipleViewMode && signingTxIndex != -1) {
144
+ // back to multi sign view
145
+ setSigningTxIndex(-1)
146
+ return
147
+ }
148
+ actualHandleCancel()
149
+ }
150
+
151
+ const onClickSign = () => {
152
+ onNextStep()
153
+ }
154
+
155
+ const onTryMultiSign = async () => {
156
+ setDisclaimerVisible(true)
157
+ }
158
+
159
+ const onTrustSite = async () => {
160
+ const origin = session?.origin
161
+ if (!origin) return
162
+ await wallet.updateConnectSite(origin, { allowQuickMultiSign: true })
163
+ setAllowQuickMultiSign(true)
164
+ }
165
+
166
+ const onQuickMultiSign = async () => {
167
+ for (let i = 0; i < toSignMessages.length; i++) {
168
+ try {
169
+ const toSignMessage = toSignMessages[i]
170
+ const signedData = await wallet.signMessage(toSignMessage)
171
+ onSignedData(signedData, i)
172
+ } catch (e) {
173
+ signedStates[i] = SignState.FAILED
174
+ setSignedStates([...signedStates])
175
+ logger.error(`Quick signing message ${i} failed:`, e)
176
+ }
177
+ }
178
+ }
179
+
180
+ const localSign = async () => {
181
+ try {
182
+ const toSignMessage = toSignMessages[signingTxIndex]
183
+ const signedData = await wallet.signMessage(toSignMessage)
184
+ onSignedData(signedData, signingTxIndex)
185
+ } catch (e) {
186
+ signedStates[signingTxIndex] = SignState.FAILED
187
+ setSignedStates([...signedStates])
188
+ logger.error('Local signing failed:', e)
189
+ }
190
+ }
191
+
192
+ const onNextStep = () => {
193
+ if (keyringType === KeyringType.KeystoneKeyring) {
194
+ setIsKeystoneSigning(true)
195
+ } else if (keyringType === KeyringType.ColdWalletKeyring) {
196
+ setIsColdWalletSigning(true)
197
+ } else {
198
+ localSign()
199
+ }
200
+ }
201
+
202
+ const onSignedData = (data: SignedMessage, signingTxIndex: number) => {
203
+ signedStates[signingTxIndex] = SignState.SUCCESS
204
+ setSignedStates([...signedStates])
205
+
206
+ signedMessages.current[signingTxIndex] = data
207
+
208
+ // check if all signed
209
+
210
+ // single mode
211
+ if (!isMultipleViewMode) {
212
+ if (handleConfirm) {
213
+ handleConfirm(signedMessages.current)
214
+ } else {
215
+ resolveApproval(signedMessages.current)
216
+ }
217
+ return
218
+ }
219
+
220
+ // multiple mode
221
+ const isAllSigned = signedStates.every(state => state === SignState.SUCCESS)
222
+ if (isAllSigned) {
223
+ if (handleConfirm) {
224
+ handleConfirm(signedMessages.current)
225
+ } else {
226
+ resolveApproval(signedMessages.current)
227
+ }
228
+ return
229
+ } else {
230
+ setSigningTxIndex(-1)
231
+ return
232
+ }
233
+ }
234
+
235
+ // keystone
236
+ const onKeystoneSigningSuccess = (data: SignedMessage) => {
237
+ setIsKeystoneSigning(false)
238
+ onSignedData(data, signingTxIndex)
239
+ }
240
+
241
+ const onKeystoneSigningBack = () => {
242
+ setIsKeystoneSigning(false)
243
+ }
244
+
245
+ // coldwallet
246
+ const onColdWalletSigningSuccess = (data: SignedMessage) => {
247
+ setIsColdWalletSigning(false)
248
+ onSignedData(data, signingTxIndex)
249
+ }
250
+
251
+ const onColdWalletSigningBack = () => {
252
+ setIsColdWalletSigning(false)
253
+ }
254
+
255
+ // disclaimer modal
256
+ const onDisclaimerModalClose = () => {
257
+ setDisclaimerVisible(false)
258
+ }
259
+
260
+ const showMultiSignView = isMultipleViewMode && signingTxIndex == -1
261
+
262
+ return {
263
+ loading,
264
+ t,
265
+ session,
266
+
267
+ // page state
268
+ isKeystoneSigning,
269
+ isColdWalletSigning,
270
+ showMultiSignView,
271
+
272
+ disclaimerVisible,
273
+
274
+ // data
275
+ toSignMessages,
276
+ currentToSignMessage,
277
+
278
+ // state
279
+ isScammer,
280
+ allowQuickMultiSign,
281
+
282
+ // multiple sign state
283
+ isAllSigned,
284
+ signedCount,
285
+ multiSignList,
286
+
287
+ // actions
288
+ onClickBack,
289
+ onClickSign,
290
+ onQuickMultiSign,
291
+ onTryMultiSign,
292
+ onTrustSite,
293
+
294
+ onKeystoneSigningSuccess,
295
+ onKeystoneSigningBack,
296
+
297
+ onColdWalletSigningSuccess,
298
+ onColdWalletSigningBack,
299
+
300
+ onDisclaimerModalClose,
301
+ }
302
+ }