@iota/dapp-kit 0.1.2 → 0.3.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 (359) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +14 -12
  3. package/dist/cjs/components/AccountDropdownMenu.css +4 -5
  4. package/dist/cjs/components/AccountDropdownMenu.css.css.map +1 -1
  5. package/dist/cjs/components/AccountDropdownMenu.css.map +3 -3
  6. package/dist/cjs/components/AccountDropdownMenu.d.ts +3 -1
  7. package/dist/cjs/components/AccountDropdownMenu.js +50 -106
  8. package/dist/cjs/components/AccountDropdownMenu.js.map +4 -4
  9. package/dist/cjs/components/ConnectButton.css +5 -10
  10. package/dist/cjs/components/ConnectButton.css.map +3 -3
  11. package/dist/cjs/components/ConnectButton.d.ts +5 -3
  12. package/dist/cjs/components/ConnectButton.js +129 -179
  13. package/dist/cjs/components/ConnectButton.js.map +4 -4
  14. package/dist/cjs/components/IotaClientProvider.d.ts +0 -1
  15. package/dist/cjs/components/WalletProvider.d.ts +3 -3
  16. package/dist/cjs/components/WalletProvider.js +115 -75
  17. package/dist/cjs/components/WalletProvider.js.map +2 -2
  18. package/dist/cjs/components/connect-modal/ConnectModal.css +5 -10
  19. package/dist/cjs/components/connect-modal/ConnectModal.css.css.map +1 -1
  20. package/dist/cjs/components/connect-modal/ConnectModal.css.map +3 -3
  21. package/dist/cjs/components/connect-modal/ConnectModal.js +15 -9
  22. package/dist/cjs/components/connect-modal/ConnectModal.js.map +3 -3
  23. package/dist/cjs/components/connect-modal/InfoSection.css.css.map +1 -1
  24. package/dist/cjs/components/connect-modal/InfoSection.css.map +1 -1
  25. package/dist/cjs/components/connect-modal/views/ConnectionStatus.css +4 -5
  26. package/dist/cjs/components/connect-modal/views/ConnectionStatus.css.css.map +1 -1
  27. package/dist/cjs/components/connect-modal/views/ConnectionStatus.css.map +3 -3
  28. package/dist/cjs/components/connect-modal/views/ConnectionStatus.js.map +2 -2
  29. package/dist/cjs/components/connect-modal/views/GetTheWallet.css +78 -0
  30. package/dist/cjs/components/connect-modal/views/GetTheWallet.css.css +35 -0
  31. package/dist/cjs/components/connect-modal/views/GetTheWallet.css.css.map +7 -0
  32. package/dist/cjs/components/connect-modal/views/GetTheWallet.css.d.ts +5 -0
  33. package/dist/cjs/components/connect-modal/views/GetTheWallet.css.js +35 -0
  34. package/dist/cjs/components/connect-modal/views/GetTheWallet.css.js.map +7 -0
  35. package/dist/cjs/components/connect-modal/views/GetTheWallet.css.map +7 -0
  36. package/dist/cjs/components/connect-modal/views/GetTheWallet.d.ts +1 -0
  37. package/dist/cjs/components/connect-modal/views/GetTheWallet.js +145 -0
  38. package/dist/cjs/components/connect-modal/views/GetTheWallet.js.map +7 -0
  39. package/dist/cjs/components/connect-modal/views/GettingStarted.css +4 -5
  40. package/dist/cjs/components/connect-modal/views/GettingStarted.css.css.map +1 -1
  41. package/dist/cjs/components/connect-modal/views/GettingStarted.css.map +3 -3
  42. package/dist/cjs/components/connect-modal/views/GettingStarted.js +2 -2
  43. package/dist/cjs/components/connect-modal/views/GettingStarted.js.map +1 -1
  44. package/dist/cjs/components/connect-modal/views/WhatIsAWallet.css.css.map +1 -1
  45. package/dist/cjs/components/connect-modal/views/WhatIsAWallet.css.map +1 -1
  46. package/dist/cjs/components/connect-modal/views/index.css +205 -0
  47. package/dist/cjs/components/connect-modal/views/index.css.map +7 -0
  48. package/dist/cjs/components/connect-modal/views/index.d.ts +3 -0
  49. package/dist/cjs/components/connect-modal/views/index.js +286 -0
  50. package/dist/cjs/components/connect-modal/views/index.js.map +7 -0
  51. package/dist/cjs/components/connect-modal/wallet-list/WalletList.css.css.map +1 -1
  52. package/dist/cjs/components/connect-modal/wallet-list/WalletList.css.map +1 -1
  53. package/dist/cjs/components/connect-modal/wallet-list/WalletList.js +1 -1
  54. package/dist/cjs/components/connect-modal/wallet-list/WalletList.js.map +2 -2
  55. package/dist/cjs/components/connect-modal/wallet-list/WalletListItem.css.css.map +1 -1
  56. package/dist/cjs/components/connect-modal/wallet-list/WalletListItem.css.map +1 -1
  57. package/dist/cjs/components/connect-modal/wallet-list/WalletListItem.js.map +1 -1
  58. package/dist/cjs/components/icons/ArrowRightIcon.d.ts +2 -0
  59. package/dist/cjs/components/icons/ArrowRightIcon.js +47 -0
  60. package/dist/cjs/components/icons/ArrowRightIcon.js.map +7 -0
  61. package/dist/cjs/components/icons/ArrowTopRightIcon.d.ts +2 -0
  62. package/dist/cjs/components/icons/ArrowTopRightIcon.js +47 -0
  63. package/dist/cjs/components/icons/ArrowTopRightIcon.js.map +7 -0
  64. package/dist/cjs/components/styling/InjectedThemeStyles.js +15 -8
  65. package/dist/cjs/components/styling/InjectedThemeStyles.js.map +2 -2
  66. package/dist/cjs/components/styling/StyleMarker.css.css.map +1 -1
  67. package/dist/cjs/components/styling/StyleMarker.css.map +1 -1
  68. package/dist/cjs/components/styling/StyleMarker.d.ts +0 -1
  69. package/dist/cjs/components/styling/StyleMarker.js +2 -2
  70. package/dist/cjs/components/styling/StyleMarker.js.map +3 -3
  71. package/dist/cjs/components/ui/Button.css +4 -5
  72. package/dist/cjs/components/ui/Button.css.css +4 -5
  73. package/dist/cjs/components/ui/Button.css.css.map +3 -3
  74. package/dist/cjs/components/ui/Button.css.d.ts +0 -1
  75. package/dist/cjs/components/ui/Button.css.js.map +1 -1
  76. package/dist/cjs/components/ui/Button.css.map +3 -3
  77. package/dist/cjs/components/ui/Button.d.ts +1 -1
  78. package/dist/cjs/components/ui/Button.js.map +1 -1
  79. package/dist/cjs/components/ui/Heading.css.css.map +1 -1
  80. package/dist/cjs/components/ui/Heading.css.map +1 -1
  81. package/dist/cjs/components/ui/Heading.d.ts +0 -1
  82. package/dist/cjs/components/ui/IconButton.css +1 -5
  83. package/dist/cjs/components/ui/IconButton.css.css +1 -5
  84. package/dist/cjs/components/ui/IconButton.css.css.map +3 -3
  85. package/dist/cjs/components/ui/IconButton.css.js.map +1 -1
  86. package/dist/cjs/components/ui/IconButton.css.map +3 -3
  87. package/dist/cjs/components/ui/IconButton.d.ts +1 -1
  88. package/dist/cjs/components/ui/IconButton.js.map +1 -1
  89. package/dist/cjs/components/ui/Text.css.css.map +1 -1
  90. package/dist/cjs/components/ui/Text.css.map +1 -1
  91. package/dist/cjs/components/ui/Text.d.ts +0 -1
  92. package/dist/cjs/constants/styleDataAttribute.js.map +1 -1
  93. package/dist/cjs/constants/walletDefaults.d.ts +3 -2
  94. package/dist/cjs/constants/walletDefaults.js +8 -6
  95. package/dist/cjs/constants/walletDefaults.js.map +2 -2
  96. package/dist/cjs/constants/walletMutationKeys.d.ts +3 -2
  97. package/dist/cjs/constants/walletMutationKeys.js +4 -3
  98. package/dist/cjs/constants/walletMutationKeys.js.map +2 -2
  99. package/dist/cjs/contexts/walletContext.d.ts +1 -2
  100. package/dist/cjs/hooks/useIotaClientInfiniteQuery.js.map +2 -2
  101. package/dist/cjs/hooks/useIotaClientQuery.js +3 -1
  102. package/dist/cjs/hooks/useIotaClientQuery.js.map +2 -2
  103. package/dist/cjs/hooks/wallet/useAutoConnectWallet.js +17 -7
  104. package/dist/cjs/hooks/wallet/useAutoConnectWallet.js.map +2 -2
  105. package/dist/cjs/hooks/wallet/useConnectWallet.js +10 -4
  106. package/dist/cjs/hooks/wallet/useConnectWallet.js.map +2 -2
  107. package/dist/cjs/hooks/wallet/useCurrentWallet.d.ts +3 -0
  108. package/dist/cjs/hooks/wallet/useCurrentWallet.js +7 -3
  109. package/dist/cjs/hooks/wallet/useCurrentWallet.js.map +2 -2
  110. package/dist/cjs/hooks/wallet/useDisconnectWallet.js +11 -6
  111. package/dist/cjs/hooks/wallet/useDisconnectWallet.js.map +2 -2
  112. package/dist/cjs/hooks/wallet/useReportTransactionEffects.d.ts +15 -0
  113. package/dist/cjs/hooks/wallet/{useSignTransactionBlock.js → useReportTransactionEffects.js} +41 -37
  114. package/dist/cjs/hooks/wallet/useReportTransactionEffects.js.map +7 -0
  115. package/dist/cjs/hooks/wallet/useSignAndExecuteTransaction.d.ts +29 -0
  116. package/dist/cjs/hooks/wallet/useSignAndExecuteTransaction.js +252 -0
  117. package/dist/cjs/hooks/wallet/useSignAndExecuteTransaction.js.map +7 -0
  118. package/dist/cjs/hooks/wallet/useSignPersonalMessage.js +21 -27
  119. package/dist/cjs/hooks/wallet/useSignPersonalMessage.js.map +2 -2
  120. package/dist/cjs/hooks/wallet/useSignTransaction.d.ts +18 -0
  121. package/dist/cjs/hooks/wallet/{useSignAndExecuteTransactionBlock.js → useSignTransaction.js} +86 -46
  122. package/dist/cjs/hooks/wallet/useSignTransaction.js.map +7 -0
  123. package/dist/cjs/hooks/wallet/useSwitchAccount.js +11 -6
  124. package/dist/cjs/hooks/wallet/useSwitchAccount.js.map +2 -2
  125. package/dist/cjs/hooks/wallet/useUnsafeBurnerWallet.js +45 -33
  126. package/dist/cjs/hooks/wallet/useUnsafeBurnerWallet.js.map +2 -2
  127. package/dist/cjs/hooks/wallet/useWalletPropertiesChanged.js +7 -3
  128. package/dist/cjs/hooks/wallet/useWalletPropertiesChanged.js.map +2 -2
  129. package/dist/cjs/hooks/wallet/useWalletsChanged.d.ts +1 -1
  130. package/dist/cjs/hooks/wallet/useWalletsChanged.js +7 -6
  131. package/dist/cjs/hooks/wallet/useWalletsChanged.js.map +2 -2
  132. package/dist/cjs/index.css +5 -10
  133. package/dist/cjs/index.css.map +3 -3
  134. package/dist/cjs/index.d.ts +4 -3
  135. package/dist/cjs/index.js +437 -287
  136. package/dist/cjs/index.js.map +4 -4
  137. package/dist/cjs/themes/darkTheme.d.ts +2 -0
  138. package/dist/cjs/themes/darkTheme.js +88 -0
  139. package/dist/cjs/themes/darkTheme.js.map +7 -0
  140. package/dist/cjs/themes/lightTheme.js +13 -8
  141. package/dist/cjs/themes/lightTheme.js.map +2 -2
  142. package/dist/cjs/themes/themeContract.d.ts +22 -12
  143. package/dist/cjs/themes/themeContract.js +13 -8
  144. package/dist/cjs/themes/themeContract.js.map +2 -2
  145. package/dist/cjs/types.d.ts +1 -1
  146. package/dist/cjs/types.js.map +1 -1
  147. package/dist/cjs/utils/assertUnreachable.js.map +1 -1
  148. package/dist/cjs/utils/walletUtils.d.ts +2 -2
  149. package/dist/cjs/utils/walletUtils.js +2 -2
  150. package/dist/cjs/utils/walletUtils.js.map +2 -2
  151. package/dist/cjs/walletStore.d.ts +3 -2
  152. package/dist/cjs/walletStore.js +8 -4
  153. package/dist/cjs/walletStore.js.map +2 -2
  154. package/dist/esm/components/AccountDropdownMenu.css +4 -5
  155. package/dist/esm/components/AccountDropdownMenu.css.css.map +1 -1
  156. package/dist/esm/components/AccountDropdownMenu.css.map +3 -3
  157. package/dist/esm/components/AccountDropdownMenu.d.ts +3 -1
  158. package/dist/esm/components/AccountDropdownMenu.js +39 -95
  159. package/dist/esm/components/AccountDropdownMenu.js.map +4 -4
  160. package/dist/esm/components/ConnectButton.css +5 -10
  161. package/dist/esm/components/ConnectButton.css.map +3 -3
  162. package/dist/esm/components/ConnectButton.d.ts +5 -3
  163. package/dist/esm/components/ConnectButton.js +101 -151
  164. package/dist/esm/components/ConnectButton.js.map +4 -4
  165. package/dist/esm/components/IotaClientProvider.d.ts +0 -1
  166. package/dist/esm/components/WalletProvider.d.ts +3 -3
  167. package/dist/esm/components/WalletProvider.js +114 -74
  168. package/dist/esm/components/WalletProvider.js.map +2 -2
  169. package/dist/esm/components/connect-modal/ConnectModal.css +5 -10
  170. package/dist/esm/components/connect-modal/ConnectModal.css.css.map +1 -1
  171. package/dist/esm/components/connect-modal/ConnectModal.css.map +3 -3
  172. package/dist/esm/components/connect-modal/ConnectModal.js +15 -9
  173. package/dist/esm/components/connect-modal/ConnectModal.js.map +3 -3
  174. package/dist/esm/components/connect-modal/InfoSection.css.css.map +1 -1
  175. package/dist/esm/components/connect-modal/InfoSection.css.map +1 -1
  176. package/dist/esm/components/connect-modal/views/ConnectionStatus.css +4 -5
  177. package/dist/esm/components/connect-modal/views/ConnectionStatus.css.css.map +1 -1
  178. package/dist/esm/components/connect-modal/views/ConnectionStatus.css.map +3 -3
  179. package/dist/esm/components/connect-modal/views/ConnectionStatus.js.map +2 -2
  180. package/dist/esm/components/connect-modal/views/GetTheWallet.css +78 -0
  181. package/dist/esm/components/connect-modal/views/GetTheWallet.css.css +35 -0
  182. package/dist/esm/components/connect-modal/views/GetTheWallet.css.css.map +7 -0
  183. package/dist/esm/components/connect-modal/views/GetTheWallet.css.d.ts +5 -0
  184. package/dist/esm/components/connect-modal/views/GetTheWallet.css.js +14 -0
  185. package/dist/esm/components/connect-modal/views/GetTheWallet.css.js.map +7 -0
  186. package/dist/esm/components/connect-modal/views/GetTheWallet.css.map +7 -0
  187. package/dist/esm/components/connect-modal/views/GetTheWallet.d.ts +1 -0
  188. package/dist/esm/components/connect-modal/views/GetTheWallet.js +112 -0
  189. package/dist/esm/components/connect-modal/views/GetTheWallet.js.map +7 -0
  190. package/dist/esm/components/connect-modal/views/GettingStarted.css +4 -5
  191. package/dist/esm/components/connect-modal/views/GettingStarted.css.css.map +1 -1
  192. package/dist/esm/components/connect-modal/views/GettingStarted.css.map +3 -3
  193. package/dist/esm/components/connect-modal/views/GettingStarted.js +2 -2
  194. package/dist/esm/components/connect-modal/views/GettingStarted.js.map +1 -1
  195. package/dist/esm/components/connect-modal/views/WhatIsAWallet.css.css.map +1 -1
  196. package/dist/esm/components/connect-modal/views/WhatIsAWallet.css.map +1 -1
  197. package/dist/esm/components/connect-modal/views/index.css +205 -0
  198. package/dist/esm/components/connect-modal/views/index.css.map +7 -0
  199. package/dist/esm/components/connect-modal/views/index.d.ts +3 -0
  200. package/dist/esm/components/connect-modal/views/index.js +253 -0
  201. package/dist/esm/components/connect-modal/views/index.js.map +7 -0
  202. package/dist/esm/components/connect-modal/wallet-list/WalletList.css.css.map +1 -1
  203. package/dist/esm/components/connect-modal/wallet-list/WalletList.css.map +1 -1
  204. package/dist/esm/components/connect-modal/wallet-list/WalletList.js +1 -1
  205. package/dist/esm/components/connect-modal/wallet-list/WalletList.js.map +2 -2
  206. package/dist/esm/components/connect-modal/wallet-list/WalletListItem.css.css.map +1 -1
  207. package/dist/esm/components/connect-modal/wallet-list/WalletListItem.css.map +1 -1
  208. package/dist/esm/components/connect-modal/wallet-list/WalletListItem.js.map +1 -1
  209. package/dist/esm/components/icons/ArrowRightIcon.d.ts +2 -0
  210. package/dist/esm/components/icons/ArrowRightIcon.js +26 -0
  211. package/dist/esm/components/icons/ArrowRightIcon.js.map +7 -0
  212. package/dist/esm/components/icons/ArrowTopRightIcon.d.ts +2 -0
  213. package/dist/esm/components/icons/ArrowTopRightIcon.js +26 -0
  214. package/dist/esm/components/icons/ArrowTopRightIcon.js.map +7 -0
  215. package/dist/esm/components/styling/InjectedThemeStyles.js +15 -8
  216. package/dist/esm/components/styling/InjectedThemeStyles.js.map +2 -2
  217. package/dist/esm/components/styling/StyleMarker.css.css.map +1 -1
  218. package/dist/esm/components/styling/StyleMarker.css.js +2 -2
  219. package/dist/esm/components/styling/StyleMarker.css.js.map +3 -3
  220. package/dist/esm/components/styling/StyleMarker.css.map +1 -1
  221. package/dist/esm/components/styling/StyleMarker.d.ts +0 -1
  222. package/dist/esm/components/styling/StyleMarker.js +2 -2
  223. package/dist/esm/components/styling/StyleMarker.js.map +3 -3
  224. package/dist/esm/components/ui/Button.css +4 -5
  225. package/dist/esm/components/ui/Button.css.css +4 -5
  226. package/dist/esm/components/ui/Button.css.css.map +3 -3
  227. package/dist/esm/components/ui/Button.css.d.ts +0 -1
  228. package/dist/esm/components/ui/Button.css.js.map +1 -1
  229. package/dist/esm/components/ui/Button.css.map +3 -3
  230. package/dist/esm/components/ui/Button.d.ts +1 -1
  231. package/dist/esm/components/ui/Button.js.map +1 -1
  232. package/dist/esm/components/ui/Heading.css.css.map +1 -1
  233. package/dist/esm/components/ui/Heading.css.map +1 -1
  234. package/dist/esm/components/ui/Heading.d.ts +0 -1
  235. package/dist/esm/components/ui/IconButton.css +1 -5
  236. package/dist/esm/components/ui/IconButton.css.css +1 -5
  237. package/dist/esm/components/ui/IconButton.css.css.map +3 -3
  238. package/dist/esm/components/ui/IconButton.css.js.map +1 -1
  239. package/dist/esm/components/ui/IconButton.css.map +3 -3
  240. package/dist/esm/components/ui/IconButton.d.ts +1 -1
  241. package/dist/esm/components/ui/IconButton.js.map +1 -1
  242. package/dist/esm/components/ui/Text.css.css.map +1 -1
  243. package/dist/esm/components/ui/Text.css.map +1 -1
  244. package/dist/esm/components/ui/Text.d.ts +0 -1
  245. package/dist/esm/constants/styleDataAttribute.js.map +1 -1
  246. package/dist/esm/constants/walletDefaults.d.ts +3 -2
  247. package/dist/esm/constants/walletDefaults.js +8 -6
  248. package/dist/esm/constants/walletDefaults.js.map +2 -2
  249. package/dist/esm/constants/walletMutationKeys.d.ts +3 -2
  250. package/dist/esm/constants/walletMutationKeys.js +4 -3
  251. package/dist/esm/constants/walletMutationKeys.js.map +2 -2
  252. package/dist/esm/contexts/walletContext.d.ts +1 -2
  253. package/dist/esm/hooks/useIotaClientInfiniteQuery.js.map +2 -2
  254. package/dist/esm/hooks/useIotaClientQuery.js +3 -1
  255. package/dist/esm/hooks/useIotaClientQuery.js.map +2 -2
  256. package/dist/esm/hooks/wallet/useAutoConnectWallet.js +17 -7
  257. package/dist/esm/hooks/wallet/useAutoConnectWallet.js.map +2 -2
  258. package/dist/esm/hooks/wallet/useConnectWallet.js +10 -4
  259. package/dist/esm/hooks/wallet/useConnectWallet.js.map +2 -2
  260. package/dist/esm/hooks/wallet/useCurrentWallet.d.ts +3 -0
  261. package/dist/esm/hooks/wallet/useCurrentWallet.js +7 -3
  262. package/dist/esm/hooks/wallet/useCurrentWallet.js.map +2 -2
  263. package/dist/esm/hooks/wallet/useDisconnectWallet.js +11 -6
  264. package/dist/esm/hooks/wallet/useDisconnectWallet.js.map +2 -2
  265. package/dist/esm/hooks/wallet/useReportTransactionEffects.d.ts +15 -0
  266. package/dist/esm/hooks/wallet/{useSignTransactionBlock.js → useReportTransactionEffects.js} +38 -34
  267. package/dist/esm/hooks/wallet/useReportTransactionEffects.js.map +7 -0
  268. package/dist/esm/hooks/wallet/useSignAndExecuteTransaction.d.ts +29 -0
  269. package/dist/esm/hooks/wallet/useSignAndExecuteTransaction.js +231 -0
  270. package/dist/esm/hooks/wallet/useSignAndExecuteTransaction.js.map +7 -0
  271. package/dist/esm/hooks/wallet/useSignPersonalMessage.js +21 -27
  272. package/dist/esm/hooks/wallet/useSignPersonalMessage.js.map +2 -2
  273. package/dist/esm/hooks/wallet/useSignTransaction.d.ts +18 -0
  274. package/dist/esm/hooks/wallet/{useSignAndExecuteTransactionBlock.js → useSignTransaction.js} +83 -43
  275. package/dist/esm/hooks/wallet/useSignTransaction.js.map +7 -0
  276. package/dist/esm/hooks/wallet/useSwitchAccount.js +11 -6
  277. package/dist/esm/hooks/wallet/useSwitchAccount.js.map +2 -2
  278. package/dist/esm/hooks/wallet/useUnsafeBurnerWallet.js +44 -32
  279. package/dist/esm/hooks/wallet/useUnsafeBurnerWallet.js.map +2 -2
  280. package/dist/esm/hooks/wallet/useWalletPropertiesChanged.js +7 -3
  281. package/dist/esm/hooks/wallet/useWalletPropertiesChanged.js.map +2 -2
  282. package/dist/esm/hooks/wallet/useWalletsChanged.d.ts +1 -1
  283. package/dist/esm/hooks/wallet/useWalletsChanged.js +7 -6
  284. package/dist/esm/hooks/wallet/useWalletsChanged.js.map +2 -2
  285. package/dist/esm/index.css +5 -10
  286. package/dist/esm/index.css.map +3 -3
  287. package/dist/esm/index.d.ts +4 -3
  288. package/dist/esm/index.js +424 -274
  289. package/dist/esm/index.js.map +4 -4
  290. package/dist/esm/themes/darkTheme.d.ts +2 -0
  291. package/dist/esm/themes/darkTheme.js +67 -0
  292. package/dist/esm/themes/darkTheme.js.map +7 -0
  293. package/dist/esm/themes/lightTheme.js +13 -8
  294. package/dist/esm/themes/lightTheme.js.map +2 -2
  295. package/dist/esm/themes/themeContract.d.ts +22 -12
  296. package/dist/esm/themes/themeContract.js +13 -8
  297. package/dist/esm/themes/themeContract.js.map +2 -2
  298. package/dist/esm/types.d.ts +1 -1
  299. package/dist/esm/utils/assertUnreachable.js.map +1 -1
  300. package/dist/esm/utils/walletUtils.d.ts +2 -2
  301. package/dist/esm/utils/walletUtils.js +2 -2
  302. package/dist/esm/utils/walletUtils.js.map +2 -2
  303. package/dist/esm/walletStore.d.ts +3 -2
  304. package/dist/esm/walletStore.js +8 -4
  305. package/dist/esm/walletStore.js.map +2 -2
  306. package/dist/index.css/package.json +5 -0
  307. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  308. package/dist/tsconfig.tsbuildinfo +1 -1
  309. package/package.json +27 -28
  310. package/src/components/AccountDropdownMenu.tsx +5 -12
  311. package/src/components/ConnectButton.tsx +8 -4
  312. package/src/components/WalletProvider.tsx +9 -9
  313. package/src/components/connect-modal/views/GetTheWallet.css.ts +38 -0
  314. package/src/components/connect-modal/views/GetTheWallet.tsx +25 -0
  315. package/src/components/connect-modal/views/GettingStarted.tsx +3 -3
  316. package/src/components/connect-modal/views/index.ts +6 -0
  317. package/src/components/connect-modal/wallet-list/WalletList.tsx +1 -1
  318. package/src/components/icons/ArrowRightIcon.tsx +23 -0
  319. package/src/components/icons/ArrowTopRightIcon.tsx +23 -0
  320. package/src/components/styling/InjectedThemeStyles.tsx +4 -0
  321. package/src/components/ui/Button.css.ts +3 -5
  322. package/src/components/ui/IconButton.css.ts +0 -3
  323. package/src/constants/walletDefaults.ts +11 -5
  324. package/src/constants/walletMutationKeys.ts +3 -2
  325. package/src/hooks/useIotaClientInfiniteQuery.ts +2 -1
  326. package/src/hooks/useIotaClientQuery.ts +3 -1
  327. package/src/hooks/wallet/useAutoConnectWallet.ts +1 -1
  328. package/src/hooks/wallet/useConnectWallet.ts +6 -1
  329. package/src/hooks/wallet/useCurrentWallet.ts +4 -0
  330. package/src/hooks/wallet/useReportTransactionEffects.ts +87 -0
  331. package/src/hooks/wallet/useSignAndExecuteTransaction.ts +165 -0
  332. package/src/hooks/wallet/useSignPersonalMessage.ts +11 -25
  333. package/src/hooks/wallet/useSignTransaction.ts +117 -0
  334. package/src/hooks/wallet/useUnsafeBurnerWallet.ts +41 -18
  335. package/src/hooks/wallet/useWalletsChanged.ts +5 -4
  336. package/src/index.ts +4 -3
  337. package/src/themes/darkTheme.ts +69 -0
  338. package/src/themes/lightTheme.ts +11 -6
  339. package/src/themes/themeContract.ts +11 -6
  340. package/src/types.ts +1 -1
  341. package/src/utils/walletUtils.ts +8 -3
  342. package/src/walletStore.ts +12 -1
  343. package/dist/cjs/hooks/useResolveIotaNSNames.d.ts +0 -3
  344. package/dist/cjs/hooks/useResolveIotaNSNames.js +0 -83
  345. package/dist/cjs/hooks/useResolveIotaNSNames.js.map +0 -7
  346. package/dist/cjs/hooks/wallet/useSignAndExecuteTransactionBlock.d.ts +0 -15
  347. package/dist/cjs/hooks/wallet/useSignAndExecuteTransactionBlock.js.map +0 -7
  348. package/dist/cjs/hooks/wallet/useSignTransactionBlock.d.ts +0 -13
  349. package/dist/cjs/hooks/wallet/useSignTransactionBlock.js.map +0 -7
  350. package/dist/esm/hooks/useResolveIotaNSNames.d.ts +0 -3
  351. package/dist/esm/hooks/useResolveIotaNSNames.js +0 -60
  352. package/dist/esm/hooks/useResolveIotaNSNames.js.map +0 -7
  353. package/dist/esm/hooks/wallet/useSignAndExecuteTransactionBlock.d.ts +0 -15
  354. package/dist/esm/hooks/wallet/useSignAndExecuteTransactionBlock.js.map +0 -7
  355. package/dist/esm/hooks/wallet/useSignTransactionBlock.d.ts +0 -13
  356. package/dist/esm/hooks/wallet/useSignTransactionBlock.js.map +0 -7
  357. package/src/hooks/useResolveIotaNSNames.ts +0 -31
  358. package/src/hooks/wallet/useSignAndExecuteTransactionBlock.ts +0 -117
  359. package/src/hooks/wallet/useSignTransactionBlock.ts +0 -85
@@ -9,9 +9,9 @@ import type { StateStorage } from 'zustand/middleware';
9
9
 
10
10
  import {
11
11
  DEFAULT_PREFERRED_WALLETS,
12
- DEFAULT_REQUIRED_FEATURES,
13
12
  DEFAULT_STORAGE,
14
13
  DEFAULT_STORAGE_KEY,
14
+ DEFAULT_WALLET_FILTER,
15
15
  } from '../constants/walletDefaults.js';
16
16
  import { WalletContext } from '../contexts/walletContext.js';
17
17
  import { useAutoConnectWallet } from '../hooks/wallet/useAutoConnectWallet.js';
@@ -29,8 +29,8 @@ export type WalletProviderProps = {
29
29
  /** A list of wallets that are sorted to the top of the wallet list, if they are available to connect to. By default, wallets are sorted by the order they are loaded in. */
30
30
  preferredWallets?: string[];
31
31
 
32
- /** A list of features that are required for the dApp to function. This filters the list of wallets presented to users when selecting a wallet to connect from, ensuring that only wallets that meet the dApps requirements can connect. */
33
- requiredFeatures?: (keyof WalletWithRequiredFeatures['features'])[];
32
+ /** A filter function to select wallets that support features required for the dApp to function. This filters the list of wallets presented to users when selecting a wallet to connect from, ensuring that only wallets that meet the dApps requirements can connect. */
33
+ walletFilter?: (wallet: WalletWithRequiredFeatures) => boolean;
34
34
 
35
35
  /** Enables the development-only unsafe burner wallet, which can be useful for testing. */
36
36
  enableUnsafeBurner?: boolean;
@@ -54,7 +54,7 @@ export type { WalletWithFeatures };
54
54
 
55
55
  export function WalletProvider({
56
56
  preferredWallets = DEFAULT_PREFERRED_WALLETS,
57
- requiredFeatures = DEFAULT_REQUIRED_FEATURES,
57
+ walletFilter = DEFAULT_WALLET_FILTER,
58
58
  storage = DEFAULT_STORAGE,
59
59
  storageKey = DEFAULT_STORAGE_KEY,
60
60
  enableUnsafeBurner = false,
@@ -65,7 +65,7 @@ export function WalletProvider({
65
65
  const storeRef = useRef(
66
66
  createWalletStore({
67
67
  autoConnectEnabled: autoConnect,
68
- wallets: getRegisteredWallets(preferredWallets, requiredFeatures),
68
+ wallets: getRegisteredWallets(preferredWallets, walletFilter),
69
69
  storage: storage || createInMemoryStore(),
70
70
  storageKey,
71
71
  }),
@@ -75,7 +75,7 @@ export function WalletProvider({
75
75
  <WalletContext.Provider value={storeRef.current}>
76
76
  <WalletConnectionManager
77
77
  preferredWallets={preferredWallets}
78
- requiredFeatures={requiredFeatures}
78
+ walletFilter={walletFilter}
79
79
  enableUnsafeBurner={enableUnsafeBurner}
80
80
  >
81
81
  {/* TODO: We ideally don't want to inject styles if people aren't using the UI components */}
@@ -88,16 +88,16 @@ export function WalletProvider({
88
88
 
89
89
  type WalletConnectionManagerProps = Pick<
90
90
  WalletProviderProps,
91
- 'preferredWallets' | 'requiredFeatures' | 'enableUnsafeBurner' | 'children'
91
+ 'preferredWallets' | 'walletFilter' | 'enableUnsafeBurner' | 'children'
92
92
  >;
93
93
 
94
94
  function WalletConnectionManager({
95
95
  preferredWallets = DEFAULT_PREFERRED_WALLETS,
96
- requiredFeatures = DEFAULT_REQUIRED_FEATURES,
96
+ walletFilter = DEFAULT_WALLET_FILTER,
97
97
  enableUnsafeBurner = false,
98
98
  children,
99
99
  }: WalletConnectionManagerProps) {
100
- useWalletsChanged(preferredWallets, requiredFeatures);
100
+ useWalletsChanged(preferredWallets, walletFilter);
101
101
  useWalletPropertiesChanged();
102
102
  useUnsafeBurnerWallet(enableUnsafeBurner);
103
103
  useAutoConnectWallet();
@@ -0,0 +1,38 @@
1
+ // Copyright (c) 2024 IOTA Stiftung
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { style } from '@vanilla-extract/css';
5
+ import { themeVars } from '../../../themes/themeContract.js';
6
+
7
+ export const container = style({
8
+ display: 'flex',
9
+ flexDirection: 'column',
10
+ alignItems: 'center',
11
+ justifyContent: 'center',
12
+ padding: themeVars.spacing.medium,
13
+ height: '100%',
14
+ gap: themeVars.spacing.xlarge,
15
+ });
16
+
17
+ export const content = style({
18
+ display: 'flex',
19
+ flexDirection: 'column',
20
+ alignItems: 'center',
21
+ gap: themeVars.spacing.medium,
22
+ });
23
+
24
+ export const text = style({
25
+ fontSize: themeVars.fontSizes.medium,
26
+ textAlign: 'center',
27
+ color: themeVars.colors.body,
28
+ });
29
+
30
+ export const button = style({
31
+ display: 'flex',
32
+ alignItems: 'center',
33
+ gap: themeVars.spacing.xsmall,
34
+ });
35
+
36
+ export const icon = style({
37
+ color: themeVars.colors.body,
38
+ });
@@ -0,0 +1,25 @@
1
+ // Copyright (c) 2024 IOTA Stiftung
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { WALLET_DOWNLOAD_URL } from '../../../constants/walletDefaults.js';
5
+ import { ArrowTopRightIcon } from '../../icons/ArrowTopRightIcon.js';
6
+ import { IotaIcon } from '../../icons/IotaIcon.js';
7
+ import { Button } from '../../ui/Button.js';
8
+ import * as styles from './GetTheWallet.css.js';
9
+
10
+ export function GetTheWalletView() {
11
+ return (
12
+ <div className={styles.container}>
13
+ <div className={styles.content}>
14
+ <IotaIcon className={styles.icon} width={48} height={48} />
15
+ <p className={styles.text}>Don't have a wallet yet?</p>
16
+ </div>
17
+ <a href={WALLET_DOWNLOAD_URL} target="_blank" rel="noopener noreferrer">
18
+ <Button size="md" variant="primary" className={styles.button}>
19
+ Get the IOTA wallet
20
+ <ArrowTopRightIcon width={16} height={16} />
21
+ </Button>
22
+ </a>
23
+ </div>
24
+ );
25
+ }
@@ -10,10 +10,10 @@ import * as styles from './GettingStarted.css.js';
10
10
  export function GettingStarted() {
11
11
  return (
12
12
  <div className={styles.container}>
13
- <Heading as="h2">Get Started with Iota</Heading>
13
+ <Heading as="h2">Get Started with IOTA</Heading>
14
14
  <div className={styles.content}>
15
- <InfoSection title="Install the Iota Wallet Extension">
16
- We recommend pinning Iota Wallet to your taskbar for quicker access.
15
+ <InfoSection title="Install the IOTA Wallet Extension">
16
+ We recommend pinning IOTA Wallet to your taskbar for quicker access.
17
17
  </InfoSection>
18
18
  <InfoSection title="Create or Import a Wallet">
19
19
  Be sure to back up your wallet using a secure method. Never share your secret
@@ -0,0 +1,6 @@
1
+ // Copyright (c) 2024 IOTA Stiftung
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ export * from './ConnectionStatus.js';
5
+ export * from './WhatIsAWallet.js';
6
+ export * from './GetTheWallet.js';
@@ -32,7 +32,7 @@ export function WalletList({ selectedWalletName, onPlaceholderClick, onSelect }:
32
32
  ))
33
33
  ) : (
34
34
  <WalletListItem
35
- name="Iota Wallet"
35
+ name="IOTA Wallet"
36
36
  icon={<IotaIcon />}
37
37
  onClick={onPlaceholderClick}
38
38
  isSelected
@@ -0,0 +1,23 @@
1
+ // Copyright (c) Mysten Labs, Inc.
2
+ // Modifications Copyright (c) 2024 IOTA Stiftung
3
+ // SPDX-License-Identifier: Apache-2.0
4
+
5
+ import type { ComponentProps } from 'react';
6
+
7
+ export function ArrowRightIcon(props: ComponentProps<'svg'>) {
8
+ return (
9
+ <svg
10
+ xmlns="http://www.w3.org/2000/svg"
11
+ width="24"
12
+ height="24"
13
+ viewBox="0 0 24 24"
14
+ fill="none"
15
+ {...props}
16
+ >
17
+ <path
18
+ fill="currentColor"
19
+ d="m10.707 6.293 5 5a1 1 0 0 1 0 1.414l-5 5a1 1 0 0 1-1.414-1.414L13.586 12 9.293 7.707a1 1 0 0 1 1.414-1.414Z"
20
+ />
21
+ </svg>
22
+ );
23
+ }
@@ -0,0 +1,23 @@
1
+ // Copyright (c) Mysten Labs, Inc.
2
+ // Modifications Copyright (c) 2024 IOTA Stiftung
3
+ // SPDX-License-Identifier: Apache-2.0
4
+
5
+ import type { ComponentProps } from 'react';
6
+
7
+ export function ArrowTopRightIcon(props: ComponentProps<'svg'>) {
8
+ return (
9
+ <svg
10
+ xmlns="http://www.w3.org/2000/svg"
11
+ width="24"
12
+ height="24"
13
+ viewBox="0 0 24 24"
14
+ fill="none"
15
+ {...props}
16
+ >
17
+ <path
18
+ d="M17.4825 6.29014C17.3873 6.19563 17.2778 6.12421 17.161 6.07588C17.0431 6.02699 16.9138 6 16.7782 6L8.70711 6C8.15482 6 7.70711 6.44772 7.70711 7C7.70711 7.55228 8.15482 8 8.70711 8L14.364 8L6.29289 16.0711C5.90237 16.4616 5.90237 17.0948 6.29289 17.4853C6.68342 17.8758 7.31658 17.8758 7.70711 17.4853L15.7782 9.41421V15.0711C15.7782 15.6234 16.2259 16.0711 16.7782 16.0711C17.3305 16.0711 17.7782 15.6234 17.7782 15.0711L17.7782 7.0008C17.7782 6.86458 17.7509 6.73391 17.7016 6.61556C17.6531 6.49895 17.5816 6.38966 17.487 6.29464L17.4853 6.29289L17.4825 6.29014Z"
19
+ fill="currentColor"
20
+ />
21
+ </svg>
22
+ );
23
+ }
@@ -19,6 +19,10 @@ export function InjectedThemeStyles({ theme }: InjectedThemeStylesProps) {
19
19
 
20
20
  return (
21
21
  <style
22
+ // @ts-expect-error The precedence prop hasn't made it to the stable release of React, but we
23
+ // don't want this to break in frameworks like Next which use the latest canary build.
24
+ precedence="default"
25
+ href="iota-dapp-kit-theme"
22
26
  dangerouslySetInnerHTML={{
23
27
  __html: themeStyles,
24
28
  }}
@@ -4,7 +4,6 @@
4
4
 
5
5
  import type { RecipeVariants } from '@vanilla-extract/recipes';
6
6
  import { recipe } from '@vanilla-extract/recipes';
7
-
8
7
  import { themeVars } from '../../themes/themeContract.js';
9
8
 
10
9
  export const buttonVariants = recipe({
@@ -22,7 +21,6 @@ export const buttonVariants = recipe({
22
21
  primary: {
23
22
  backgroundColor: themeVars.backgroundColors.primaryButton,
24
23
  color: themeVars.colors.primaryButton,
25
- boxShadow: themeVars.shadows.primaryButton,
26
24
  ':hover': {
27
25
  backgroundColor: themeVars.backgroundColors.primaryButtonHover,
28
26
  },
@@ -31,15 +29,15 @@ export const buttonVariants = recipe({
31
29
  borderWidth: 1,
32
30
  borderStyle: 'solid',
33
31
  borderColor: themeVars.borderColors.outlineButton,
34
- color: themeVars.colors.outlineButton,
32
+ color: themeVars.colors.primaryButton,
35
33
  ':hover': {
36
34
  backgroundColor: themeVars.backgroundColors.outlineButtonHover,
37
35
  },
38
36
  },
39
37
  },
40
38
  size: {
41
- md: { borderRadius: themeVars.radii.medium, padding: '8px 16px' },
42
- lg: { borderRadius: themeVars.radii.large, padding: '16px 24px ' },
39
+ md: { borderRadius: themeVars.radii.full, padding: '8px 16px' },
40
+ lg: { borderRadius: themeVars.radii.full, padding: '16px 24px ' },
43
41
  },
44
42
  },
45
43
  defaultVariants: {
@@ -11,7 +11,4 @@ export const container = style({
11
11
  padding: 8,
12
12
  color: themeVars.colors.iconButton,
13
13
  backgroundColor: themeVars.backgroundColors.iconButton,
14
- ':hover': {
15
- backgroundColor: themeVars.backgroundColors.iconButtonHover,
16
- },
17
14
  });
@@ -2,19 +2,25 @@
2
2
  // Modifications Copyright (c) 2024 IOTA Stiftung
3
3
  // SPDX-License-Identifier: Apache-2.0
4
4
 
5
- import type { WalletWithRequiredFeatures } from '@iota/wallet-standard';
5
+ import type { IotaWalletFeatures, WalletWithRequiredFeatures } from '@iota/wallet-standard';
6
6
 
7
7
  import { createInMemoryStore } from '../utils/stateStorage.js';
8
8
 
9
- export const IOTA_WALLET_NAME = 'Iota Wallet';
9
+ export const IOTA_WALLET_NAME = 'IOTA Wallet';
10
10
 
11
11
  export const DEFAULT_STORAGE =
12
12
  typeof window !== 'undefined' && window.localStorage ? localStorage : createInMemoryStore();
13
13
 
14
14
  export const DEFAULT_STORAGE_KEY = 'iota-dapp-kit:wallet-connection-info';
15
15
 
16
- export const DEFAULT_REQUIRED_FEATURES: (keyof WalletWithRequiredFeatures['features'])[] = [
17
- 'iota:signTransactionBlock',
18
- ];
16
+ const SIGN_FEATURES = ['iota:signTransaction'] satisfies (keyof IotaWalletFeatures)[];
17
+
18
+ export const DEFAULT_WALLET_FILTER = (wallet: WalletWithRequiredFeatures) =>
19
+ SIGN_FEATURES.some((feature) => wallet.features[feature]);
19
20
 
20
21
  export const DEFAULT_PREFERRED_WALLETS = [IOTA_WALLET_NAME];
22
+
23
+ const WALLET_CHROME_EXTENSION_ID = 'TODO';
24
+
25
+ export const WALLET_DOWNLOAD_URL =
26
+ 'https://chromewebstore.google.com/detail/' + WALLET_CHROME_EXTENSION_ID;
@@ -10,9 +10,10 @@ export const walletMutationKeys = {
10
10
  autoconnectWallet: formMutationKeyFn('autoconnect-wallet'),
11
11
  disconnectWallet: formMutationKeyFn('disconnect-wallet'),
12
12
  signPersonalMessage: formMutationKeyFn('sign-personal-message'),
13
- signTransactionBlock: formMutationKeyFn('sign-transaction-block'),
14
- signAndExecuteTransactionBlock: formMutationKeyFn('sign-and-execute-transaction-block'),
13
+ signTransaction: formMutationKeyFn('sign-transaction'),
14
+ signAndExecuteTransaction: formMutationKeyFn('sign-and-execute-transaction'),
15
15
  switchAccount: formMutationKeyFn('switch-account'),
16
+ reportTransactionEffects: formMutationKeyFn('report-transaction-effects'),
16
17
  };
17
18
 
18
19
  function formMutationKeyFn(baseEntity: string) {
@@ -81,6 +81,7 @@ export function useIotaClientInfiniteQuery<
81
81
  ...(params ?? {}),
82
82
  cursor: pageParam,
83
83
  } as never),
84
- getNextPageParam: (lastPage) => (lastPage.hasNextPage ? lastPage.nextCursor ?? null : null),
84
+ getNextPageParam: (lastPage) =>
85
+ lastPage.hasNextPage ? (lastPage.nextCursor ?? null) : null,
85
86
  });
86
87
  }
@@ -66,7 +66,9 @@ export function useIotaClientQuery<
66
66
  ...options,
67
67
  queryKey: [iotaContext.network, method, params, ...queryKey],
68
68
  queryFn: async () => {
69
- return await iotaContext.client[method](params as never);
69
+ return (await iotaContext.client[method](
70
+ params as never,
71
+ )) as IotaRpcMethods[T]['result'];
70
72
  },
71
73
  });
72
74
  }
@@ -91,5 +91,5 @@ export function useAutoConnectWallet(): 'disabled' | 'idle' | 'attempted' {
91
91
  return 'attempted';
92
92
  }
93
93
 
94
- return isError ? 'attempted' : data ?? 'idle';
94
+ return isError ? 'attempted' : (data ?? 'idle');
95
95
  }
@@ -58,7 +58,12 @@ export function useConnectWallet({
58
58
  );
59
59
  const selectedAccount = getSelectedAccount(connectedIotaAccounts, accountAddress);
60
60
 
61
- setWalletConnected(wallet, connectedIotaAccounts, selectedAccount);
61
+ setWalletConnected(
62
+ wallet,
63
+ connectedIotaAccounts,
64
+ selectedAccount,
65
+ connectResult.supportedIntents,
66
+ );
62
67
 
63
68
  return { accounts: connectedIotaAccounts };
64
69
  } catch (error) {
@@ -10,6 +10,7 @@ import { useWalletStore } from './useWalletStore.js';
10
10
  export function useCurrentWallet() {
11
11
  const currentWallet = useWalletStore((state) => state.currentWallet);
12
12
  const connectionStatus = useWalletStore((state) => state.connectionStatus);
13
+ const supportedIntents = useWalletStore((state) => state.supportedIntents);
13
14
 
14
15
  switch (connectionStatus) {
15
16
  case 'connecting':
@@ -19,6 +20,7 @@ export function useCurrentWallet() {
19
20
  isDisconnected: false,
20
21
  isConnecting: true,
21
22
  isConnected: false,
23
+ supportedIntents: [],
22
24
  } as const;
23
25
  case 'disconnected':
24
26
  return {
@@ -27,6 +29,7 @@ export function useCurrentWallet() {
27
29
  isDisconnected: true,
28
30
  isConnecting: false,
29
31
  isConnected: false,
32
+ supportedIntents: [],
30
33
  } as const;
31
34
  case 'connected': {
32
35
  return {
@@ -35,6 +38,7 @@ export function useCurrentWallet() {
35
38
  isDisconnected: false,
36
39
  isConnecting: false,
37
40
  isConnected: true,
41
+ supportedIntents,
38
42
  } as const;
39
43
  }
40
44
  }
@@ -0,0 +1,87 @@
1
+ // Copyright (c) Mysten Labs, Inc.
2
+ // Modifications Copyright (c) 2024 IOTA Stiftung
3
+ // SPDX-License-Identifier: Apache-2.0
4
+
5
+ import { toB64 } from '@iota/iota-sdk/utils';
6
+ import type { IotaReportTransactionEffectsInput } from '@iota/wallet-standard';
7
+ import type { UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
8
+ import { useMutation } from '@tanstack/react-query';
9
+
10
+ import { walletMutationKeys } from '../../constants/walletMutationKeys.js';
11
+ import type { WalletFeatureNotSupportedError } from '../../errors/walletErrors.js';
12
+ import {
13
+ WalletNoAccountSelectedError,
14
+ WalletNotConnectedError,
15
+ } from '../../errors/walletErrors.js';
16
+ import type { PartialBy } from '../../types/utilityTypes.js';
17
+ import { useCurrentAccount } from './useCurrentAccount.js';
18
+ import { useCurrentWallet } from './useCurrentWallet.js';
19
+
20
+ type UseReportTransactionEffectsArgs = Omit<
21
+ PartialBy<IotaReportTransactionEffectsInput, 'account' | 'chain'>,
22
+ 'effects'
23
+ > & {
24
+ effects: string | number[];
25
+ };
26
+
27
+ type UseReportTransactionEffectsError =
28
+ | WalletFeatureNotSupportedError
29
+ | WalletNoAccountSelectedError
30
+ | WalletNotConnectedError
31
+ | Error;
32
+
33
+ type UseReportTransactionEffectsMutationOptions = Omit<
34
+ UseMutationOptions<
35
+ void,
36
+ UseReportTransactionEffectsError,
37
+ UseReportTransactionEffectsArgs,
38
+ unknown
39
+ >,
40
+ 'mutationFn'
41
+ >;
42
+
43
+ /**
44
+ * Mutation hook for prompting the user to sign a message.
45
+ */
46
+ export function useReportTransactionEffects({
47
+ mutationKey,
48
+ ...mutationOptions
49
+ }: UseReportTransactionEffectsMutationOptions = {}): UseMutationResult<
50
+ void,
51
+ UseReportTransactionEffectsError,
52
+ UseReportTransactionEffectsArgs
53
+ > {
54
+ const { currentWallet } = useCurrentWallet();
55
+ const currentAccount = useCurrentAccount();
56
+
57
+ return useMutation({
58
+ mutationKey: walletMutationKeys.reportTransactionEffects(mutationKey),
59
+ mutationFn: async ({
60
+ effects,
61
+ chain = currentWallet?.chains[0],
62
+ account = currentAccount,
63
+ }) => {
64
+ if (!currentWallet) {
65
+ throw new WalletNotConnectedError('No wallet is connected.');
66
+ }
67
+
68
+ if (!account) {
69
+ throw new WalletNoAccountSelectedError(
70
+ 'No wallet account is selected to report transaction effects for',
71
+ );
72
+ }
73
+
74
+ const reportTransactionEffectsFeature =
75
+ currentWallet.features['iota:reportTransactionEffects'];
76
+
77
+ if (reportTransactionEffectsFeature) {
78
+ return await reportTransactionEffectsFeature.reportTransactionEffects({
79
+ effects: Array.isArray(effects) ? toB64(new Uint8Array(effects)) : effects,
80
+ account,
81
+ chain: chain ?? currentWallet?.chains[0],
82
+ });
83
+ }
84
+ },
85
+ ...mutationOptions,
86
+ });
87
+ }
@@ -0,0 +1,165 @@
1
+ // Copyright (c) Mysten Labs, Inc.
2
+ // Modifications Copyright (c) 2024 IOTA Stiftung
3
+ // SPDX-License-Identifier: Apache-2.0
4
+
5
+ import type { Transaction } from '@iota/iota-sdk/transactions';
6
+ import { toB64 } from '@iota/iota-sdk/utils';
7
+ import type {
8
+ IotaSignAndExecuteTransactionInput,
9
+ IotaSignAndExecuteTransactionOutput,
10
+ } from '@iota/wallet-standard';
11
+ import { signTransaction } from '@iota/wallet-standard';
12
+ import type { UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
13
+ import { useMutation } from '@tanstack/react-query';
14
+
15
+ import { walletMutationKeys } from '../../constants/walletMutationKeys.js';
16
+ import {
17
+ WalletFeatureNotSupportedError,
18
+ WalletNoAccountSelectedError,
19
+ WalletNotConnectedError,
20
+ } from '../../errors/walletErrors.js';
21
+ import type { PartialBy } from '../../types/utilityTypes.js';
22
+ import { useIotaClient } from '../useIotaClient.js';
23
+ import { useCurrentAccount } from './useCurrentAccount.js';
24
+ import { useCurrentWallet } from './useCurrentWallet.js';
25
+ import { useReportTransactionEffects } from './useReportTransactionEffects.js';
26
+
27
+ type UseSignAndExecuteTransactionArgs = PartialBy<
28
+ Omit<IotaSignAndExecuteTransactionInput, 'transaction'>,
29
+ 'account' | 'chain'
30
+ > & {
31
+ transaction: Transaction | string;
32
+ };
33
+
34
+ type UseSignAndExecuteTransactionResult = IotaSignAndExecuteTransactionOutput;
35
+
36
+ type UseSignAndExecuteTransactionError =
37
+ | WalletFeatureNotSupportedError
38
+ | WalletNoAccountSelectedError
39
+ | WalletNotConnectedError
40
+ | Error;
41
+
42
+ type ExecuteTransactionResult =
43
+ | {
44
+ digest: string;
45
+ rawEffects?: number[];
46
+ }
47
+ | {
48
+ effects?: {
49
+ bcs?: string;
50
+ };
51
+ };
52
+
53
+ type UseSignAndExecuteTransactionMutationOptions<Result extends ExecuteTransactionResult> = Omit<
54
+ UseMutationOptions<
55
+ Result,
56
+ UseSignAndExecuteTransactionError,
57
+ UseSignAndExecuteTransactionArgs,
58
+ unknown
59
+ >,
60
+ 'mutationFn'
61
+ > & {
62
+ execute?: ({ bytes, signature }: { bytes: string; signature: string }) => Promise<Result>;
63
+ };
64
+
65
+ /**
66
+ * Mutation hook for prompting the user to sign and execute a transaction.
67
+ */
68
+ export function useSignAndExecuteTransaction<
69
+ Result extends ExecuteTransactionResult = UseSignAndExecuteTransactionResult,
70
+ >({
71
+ mutationKey,
72
+ execute,
73
+ ...mutationOptions
74
+ }: UseSignAndExecuteTransactionMutationOptions<Result> = {}): UseMutationResult<
75
+ Result,
76
+ UseSignAndExecuteTransactionError,
77
+ UseSignAndExecuteTransactionArgs
78
+ > {
79
+ const { currentWallet, supportedIntents } = useCurrentWallet();
80
+ const currentAccount = useCurrentAccount();
81
+ const client = useIotaClient();
82
+ const { mutate: reportTransactionEffects } = useReportTransactionEffects();
83
+
84
+ const executeTransaction: ({
85
+ bytes,
86
+ signature,
87
+ }: {
88
+ bytes: string;
89
+ signature: string;
90
+ }) => Promise<ExecuteTransactionResult> =
91
+ execute ??
92
+ (async ({ bytes, signature }) => {
93
+ const { digest, rawEffects } = await client.executeTransactionBlock({
94
+ transactionBlock: bytes,
95
+ signature,
96
+ options: {
97
+ showRawEffects: true,
98
+ },
99
+ });
100
+
101
+ return {
102
+ digest,
103
+ rawEffects,
104
+ effects: toB64(new Uint8Array(rawEffects!)),
105
+ bytes,
106
+ signature,
107
+ };
108
+ });
109
+
110
+ return useMutation({
111
+ mutationKey: walletMutationKeys.signAndExecuteTransaction(mutationKey),
112
+ mutationFn: async ({ transaction, ...signTransactionArgs }): Promise<Result> => {
113
+ if (!currentWallet) {
114
+ throw new WalletNotConnectedError('No wallet is connected.');
115
+ }
116
+
117
+ const signerAccount = signTransactionArgs.account ?? currentAccount;
118
+ if (!signerAccount) {
119
+ throw new WalletNoAccountSelectedError(
120
+ 'No wallet account is selected to sign the transaction with.',
121
+ );
122
+ }
123
+ const chain = signTransactionArgs.chain ?? signerAccount?.chains[0];
124
+
125
+ if (!currentWallet.features['iota:signTransaction']) {
126
+ throw new WalletFeatureNotSupportedError(
127
+ "This wallet doesn't support the `signTransaction` feature.",
128
+ );
129
+ }
130
+
131
+ const { signature, bytes } = await signTransaction(currentWallet, {
132
+ ...signTransactionArgs,
133
+ transaction: {
134
+ async toJSON() {
135
+ return typeof transaction === 'string'
136
+ ? transaction
137
+ : await transaction.toJSON({
138
+ supportedIntents,
139
+ client,
140
+ });
141
+ },
142
+ },
143
+ account: signerAccount,
144
+ chain: signTransactionArgs.chain ?? signerAccount.chains[0],
145
+ });
146
+
147
+ const result = await executeTransaction({ bytes, signature });
148
+
149
+ let effects: string;
150
+
151
+ if ('effects' in result && result.effects?.bcs) {
152
+ effects = result.effects.bcs;
153
+ } else if ('rawEffects' in result) {
154
+ effects = toB64(new Uint8Array(result.rawEffects!));
155
+ } else {
156
+ throw new Error('Could not parse effects from transaction result.');
157
+ }
158
+
159
+ reportTransactionEffects({ effects, account: signerAccount, chain });
160
+
161
+ return result as Result;
162
+ },
163
+ ...mutationOptions,
164
+ });
165
+ }