@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.
- package/CHANGELOG.md +28 -0
- package/README.md +14 -12
- package/dist/cjs/components/AccountDropdownMenu.css +4 -5
- package/dist/cjs/components/AccountDropdownMenu.css.css.map +1 -1
- package/dist/cjs/components/AccountDropdownMenu.css.map +3 -3
- package/dist/cjs/components/AccountDropdownMenu.d.ts +3 -1
- package/dist/cjs/components/AccountDropdownMenu.js +50 -106
- package/dist/cjs/components/AccountDropdownMenu.js.map +4 -4
- package/dist/cjs/components/ConnectButton.css +5 -10
- package/dist/cjs/components/ConnectButton.css.map +3 -3
- package/dist/cjs/components/ConnectButton.d.ts +5 -3
- package/dist/cjs/components/ConnectButton.js +129 -179
- package/dist/cjs/components/ConnectButton.js.map +4 -4
- package/dist/cjs/components/IotaClientProvider.d.ts +0 -1
- package/dist/cjs/components/WalletProvider.d.ts +3 -3
- package/dist/cjs/components/WalletProvider.js +115 -75
- package/dist/cjs/components/WalletProvider.js.map +2 -2
- package/dist/cjs/components/connect-modal/ConnectModal.css +5 -10
- package/dist/cjs/components/connect-modal/ConnectModal.css.css.map +1 -1
- package/dist/cjs/components/connect-modal/ConnectModal.css.map +3 -3
- package/dist/cjs/components/connect-modal/ConnectModal.js +15 -9
- package/dist/cjs/components/connect-modal/ConnectModal.js.map +3 -3
- package/dist/cjs/components/connect-modal/InfoSection.css.css.map +1 -1
- package/dist/cjs/components/connect-modal/InfoSection.css.map +1 -1
- package/dist/cjs/components/connect-modal/views/ConnectionStatus.css +4 -5
- package/dist/cjs/components/connect-modal/views/ConnectionStatus.css.css.map +1 -1
- package/dist/cjs/components/connect-modal/views/ConnectionStatus.css.map +3 -3
- package/dist/cjs/components/connect-modal/views/ConnectionStatus.js.map +2 -2
- package/dist/cjs/components/connect-modal/views/GetTheWallet.css +78 -0
- package/dist/cjs/components/connect-modal/views/GetTheWallet.css.css +35 -0
- package/dist/cjs/components/connect-modal/views/GetTheWallet.css.css.map +7 -0
- package/dist/cjs/components/connect-modal/views/GetTheWallet.css.d.ts +5 -0
- package/dist/cjs/components/connect-modal/views/GetTheWallet.css.js +35 -0
- package/dist/cjs/components/connect-modal/views/GetTheWallet.css.js.map +7 -0
- package/dist/cjs/components/connect-modal/views/GetTheWallet.css.map +7 -0
- package/dist/cjs/components/connect-modal/views/GetTheWallet.d.ts +1 -0
- package/dist/cjs/components/connect-modal/views/GetTheWallet.js +145 -0
- package/dist/cjs/components/connect-modal/views/GetTheWallet.js.map +7 -0
- package/dist/cjs/components/connect-modal/views/GettingStarted.css +4 -5
- package/dist/cjs/components/connect-modal/views/GettingStarted.css.css.map +1 -1
- package/dist/cjs/components/connect-modal/views/GettingStarted.css.map +3 -3
- package/dist/cjs/components/connect-modal/views/GettingStarted.js +2 -2
- package/dist/cjs/components/connect-modal/views/GettingStarted.js.map +1 -1
- package/dist/cjs/components/connect-modal/views/WhatIsAWallet.css.css.map +1 -1
- package/dist/cjs/components/connect-modal/views/WhatIsAWallet.css.map +1 -1
- package/dist/cjs/components/connect-modal/views/index.css +205 -0
- package/dist/cjs/components/connect-modal/views/index.css.map +7 -0
- package/dist/cjs/components/connect-modal/views/index.d.ts +3 -0
- package/dist/cjs/components/connect-modal/views/index.js +286 -0
- package/dist/cjs/components/connect-modal/views/index.js.map +7 -0
- package/dist/cjs/components/connect-modal/wallet-list/WalletList.css.css.map +1 -1
- package/dist/cjs/components/connect-modal/wallet-list/WalletList.css.map +1 -1
- package/dist/cjs/components/connect-modal/wallet-list/WalletList.js +1 -1
- package/dist/cjs/components/connect-modal/wallet-list/WalletList.js.map +2 -2
- package/dist/cjs/components/connect-modal/wallet-list/WalletListItem.css.css.map +1 -1
- package/dist/cjs/components/connect-modal/wallet-list/WalletListItem.css.map +1 -1
- package/dist/cjs/components/connect-modal/wallet-list/WalletListItem.js.map +1 -1
- package/dist/cjs/components/icons/ArrowRightIcon.d.ts +2 -0
- package/dist/cjs/components/icons/ArrowRightIcon.js +47 -0
- package/dist/cjs/components/icons/ArrowRightIcon.js.map +7 -0
- package/dist/cjs/components/icons/ArrowTopRightIcon.d.ts +2 -0
- package/dist/cjs/components/icons/ArrowTopRightIcon.js +47 -0
- package/dist/cjs/components/icons/ArrowTopRightIcon.js.map +7 -0
- package/dist/cjs/components/styling/InjectedThemeStyles.js +15 -8
- package/dist/cjs/components/styling/InjectedThemeStyles.js.map +2 -2
- package/dist/cjs/components/styling/StyleMarker.css.css.map +1 -1
- package/dist/cjs/components/styling/StyleMarker.css.map +1 -1
- package/dist/cjs/components/styling/StyleMarker.d.ts +0 -1
- package/dist/cjs/components/styling/StyleMarker.js +2 -2
- package/dist/cjs/components/styling/StyleMarker.js.map +3 -3
- package/dist/cjs/components/ui/Button.css +4 -5
- package/dist/cjs/components/ui/Button.css.css +4 -5
- package/dist/cjs/components/ui/Button.css.css.map +3 -3
- package/dist/cjs/components/ui/Button.css.d.ts +0 -1
- package/dist/cjs/components/ui/Button.css.js.map +1 -1
- package/dist/cjs/components/ui/Button.css.map +3 -3
- package/dist/cjs/components/ui/Button.d.ts +1 -1
- package/dist/cjs/components/ui/Button.js.map +1 -1
- package/dist/cjs/components/ui/Heading.css.css.map +1 -1
- package/dist/cjs/components/ui/Heading.css.map +1 -1
- package/dist/cjs/components/ui/Heading.d.ts +0 -1
- package/dist/cjs/components/ui/IconButton.css +1 -5
- package/dist/cjs/components/ui/IconButton.css.css +1 -5
- package/dist/cjs/components/ui/IconButton.css.css.map +3 -3
- package/dist/cjs/components/ui/IconButton.css.js.map +1 -1
- package/dist/cjs/components/ui/IconButton.css.map +3 -3
- package/dist/cjs/components/ui/IconButton.d.ts +1 -1
- package/dist/cjs/components/ui/IconButton.js.map +1 -1
- package/dist/cjs/components/ui/Text.css.css.map +1 -1
- package/dist/cjs/components/ui/Text.css.map +1 -1
- package/dist/cjs/components/ui/Text.d.ts +0 -1
- package/dist/cjs/constants/styleDataAttribute.js.map +1 -1
- package/dist/cjs/constants/walletDefaults.d.ts +3 -2
- package/dist/cjs/constants/walletDefaults.js +8 -6
- package/dist/cjs/constants/walletDefaults.js.map +2 -2
- package/dist/cjs/constants/walletMutationKeys.d.ts +3 -2
- package/dist/cjs/constants/walletMutationKeys.js +4 -3
- package/dist/cjs/constants/walletMutationKeys.js.map +2 -2
- package/dist/cjs/contexts/walletContext.d.ts +1 -2
- package/dist/cjs/hooks/useIotaClientInfiniteQuery.js.map +2 -2
- package/dist/cjs/hooks/useIotaClientQuery.js +3 -1
- package/dist/cjs/hooks/useIotaClientQuery.js.map +2 -2
- package/dist/cjs/hooks/wallet/useAutoConnectWallet.js +17 -7
- package/dist/cjs/hooks/wallet/useAutoConnectWallet.js.map +2 -2
- package/dist/cjs/hooks/wallet/useConnectWallet.js +10 -4
- package/dist/cjs/hooks/wallet/useConnectWallet.js.map +2 -2
- package/dist/cjs/hooks/wallet/useCurrentWallet.d.ts +3 -0
- package/dist/cjs/hooks/wallet/useCurrentWallet.js +7 -3
- package/dist/cjs/hooks/wallet/useCurrentWallet.js.map +2 -2
- package/dist/cjs/hooks/wallet/useDisconnectWallet.js +11 -6
- package/dist/cjs/hooks/wallet/useDisconnectWallet.js.map +2 -2
- package/dist/cjs/hooks/wallet/useReportTransactionEffects.d.ts +15 -0
- package/dist/cjs/hooks/wallet/{useSignTransactionBlock.js → useReportTransactionEffects.js} +41 -37
- package/dist/cjs/hooks/wallet/useReportTransactionEffects.js.map +7 -0
- package/dist/cjs/hooks/wallet/useSignAndExecuteTransaction.d.ts +29 -0
- package/dist/cjs/hooks/wallet/useSignAndExecuteTransaction.js +252 -0
- package/dist/cjs/hooks/wallet/useSignAndExecuteTransaction.js.map +7 -0
- package/dist/cjs/hooks/wallet/useSignPersonalMessage.js +21 -27
- package/dist/cjs/hooks/wallet/useSignPersonalMessage.js.map +2 -2
- package/dist/cjs/hooks/wallet/useSignTransaction.d.ts +18 -0
- package/dist/cjs/hooks/wallet/{useSignAndExecuteTransactionBlock.js → useSignTransaction.js} +86 -46
- package/dist/cjs/hooks/wallet/useSignTransaction.js.map +7 -0
- package/dist/cjs/hooks/wallet/useSwitchAccount.js +11 -6
- package/dist/cjs/hooks/wallet/useSwitchAccount.js.map +2 -2
- package/dist/cjs/hooks/wallet/useUnsafeBurnerWallet.js +45 -33
- package/dist/cjs/hooks/wallet/useUnsafeBurnerWallet.js.map +2 -2
- package/dist/cjs/hooks/wallet/useWalletPropertiesChanged.js +7 -3
- package/dist/cjs/hooks/wallet/useWalletPropertiesChanged.js.map +2 -2
- package/dist/cjs/hooks/wallet/useWalletsChanged.d.ts +1 -1
- package/dist/cjs/hooks/wallet/useWalletsChanged.js +7 -6
- package/dist/cjs/hooks/wallet/useWalletsChanged.js.map +2 -2
- package/dist/cjs/index.css +5 -10
- package/dist/cjs/index.css.map +3 -3
- package/dist/cjs/index.d.ts +4 -3
- package/dist/cjs/index.js +437 -287
- package/dist/cjs/index.js.map +4 -4
- package/dist/cjs/themes/darkTheme.d.ts +2 -0
- package/dist/cjs/themes/darkTheme.js +88 -0
- package/dist/cjs/themes/darkTheme.js.map +7 -0
- package/dist/cjs/themes/lightTheme.js +13 -8
- package/dist/cjs/themes/lightTheme.js.map +2 -2
- package/dist/cjs/themes/themeContract.d.ts +22 -12
- package/dist/cjs/themes/themeContract.js +13 -8
- package/dist/cjs/themes/themeContract.js.map +2 -2
- package/dist/cjs/types.d.ts +1 -1
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/utils/assertUnreachable.js.map +1 -1
- package/dist/cjs/utils/walletUtils.d.ts +2 -2
- package/dist/cjs/utils/walletUtils.js +2 -2
- package/dist/cjs/utils/walletUtils.js.map +2 -2
- package/dist/cjs/walletStore.d.ts +3 -2
- package/dist/cjs/walletStore.js +8 -4
- package/dist/cjs/walletStore.js.map +2 -2
- package/dist/esm/components/AccountDropdownMenu.css +4 -5
- package/dist/esm/components/AccountDropdownMenu.css.css.map +1 -1
- package/dist/esm/components/AccountDropdownMenu.css.map +3 -3
- package/dist/esm/components/AccountDropdownMenu.d.ts +3 -1
- package/dist/esm/components/AccountDropdownMenu.js +39 -95
- package/dist/esm/components/AccountDropdownMenu.js.map +4 -4
- package/dist/esm/components/ConnectButton.css +5 -10
- package/dist/esm/components/ConnectButton.css.map +3 -3
- package/dist/esm/components/ConnectButton.d.ts +5 -3
- package/dist/esm/components/ConnectButton.js +101 -151
- package/dist/esm/components/ConnectButton.js.map +4 -4
- package/dist/esm/components/IotaClientProvider.d.ts +0 -1
- package/dist/esm/components/WalletProvider.d.ts +3 -3
- package/dist/esm/components/WalletProvider.js +114 -74
- package/dist/esm/components/WalletProvider.js.map +2 -2
- package/dist/esm/components/connect-modal/ConnectModal.css +5 -10
- package/dist/esm/components/connect-modal/ConnectModal.css.css.map +1 -1
- package/dist/esm/components/connect-modal/ConnectModal.css.map +3 -3
- package/dist/esm/components/connect-modal/ConnectModal.js +15 -9
- package/dist/esm/components/connect-modal/ConnectModal.js.map +3 -3
- package/dist/esm/components/connect-modal/InfoSection.css.css.map +1 -1
- package/dist/esm/components/connect-modal/InfoSection.css.map +1 -1
- package/dist/esm/components/connect-modal/views/ConnectionStatus.css +4 -5
- package/dist/esm/components/connect-modal/views/ConnectionStatus.css.css.map +1 -1
- package/dist/esm/components/connect-modal/views/ConnectionStatus.css.map +3 -3
- package/dist/esm/components/connect-modal/views/ConnectionStatus.js.map +2 -2
- package/dist/esm/components/connect-modal/views/GetTheWallet.css +78 -0
- package/dist/esm/components/connect-modal/views/GetTheWallet.css.css +35 -0
- package/dist/esm/components/connect-modal/views/GetTheWallet.css.css.map +7 -0
- package/dist/esm/components/connect-modal/views/GetTheWallet.css.d.ts +5 -0
- package/dist/esm/components/connect-modal/views/GetTheWallet.css.js +14 -0
- package/dist/esm/components/connect-modal/views/GetTheWallet.css.js.map +7 -0
- package/dist/esm/components/connect-modal/views/GetTheWallet.css.map +7 -0
- package/dist/esm/components/connect-modal/views/GetTheWallet.d.ts +1 -0
- package/dist/esm/components/connect-modal/views/GetTheWallet.js +112 -0
- package/dist/esm/components/connect-modal/views/GetTheWallet.js.map +7 -0
- package/dist/esm/components/connect-modal/views/GettingStarted.css +4 -5
- package/dist/esm/components/connect-modal/views/GettingStarted.css.css.map +1 -1
- package/dist/esm/components/connect-modal/views/GettingStarted.css.map +3 -3
- package/dist/esm/components/connect-modal/views/GettingStarted.js +2 -2
- package/dist/esm/components/connect-modal/views/GettingStarted.js.map +1 -1
- package/dist/esm/components/connect-modal/views/WhatIsAWallet.css.css.map +1 -1
- package/dist/esm/components/connect-modal/views/WhatIsAWallet.css.map +1 -1
- package/dist/esm/components/connect-modal/views/index.css +205 -0
- package/dist/esm/components/connect-modal/views/index.css.map +7 -0
- package/dist/esm/components/connect-modal/views/index.d.ts +3 -0
- package/dist/esm/components/connect-modal/views/index.js +253 -0
- package/dist/esm/components/connect-modal/views/index.js.map +7 -0
- package/dist/esm/components/connect-modal/wallet-list/WalletList.css.css.map +1 -1
- package/dist/esm/components/connect-modal/wallet-list/WalletList.css.map +1 -1
- package/dist/esm/components/connect-modal/wallet-list/WalletList.js +1 -1
- package/dist/esm/components/connect-modal/wallet-list/WalletList.js.map +2 -2
- package/dist/esm/components/connect-modal/wallet-list/WalletListItem.css.css.map +1 -1
- package/dist/esm/components/connect-modal/wallet-list/WalletListItem.css.map +1 -1
- package/dist/esm/components/connect-modal/wallet-list/WalletListItem.js.map +1 -1
- package/dist/esm/components/icons/ArrowRightIcon.d.ts +2 -0
- package/dist/esm/components/icons/ArrowRightIcon.js +26 -0
- package/dist/esm/components/icons/ArrowRightIcon.js.map +7 -0
- package/dist/esm/components/icons/ArrowTopRightIcon.d.ts +2 -0
- package/dist/esm/components/icons/ArrowTopRightIcon.js +26 -0
- package/dist/esm/components/icons/ArrowTopRightIcon.js.map +7 -0
- package/dist/esm/components/styling/InjectedThemeStyles.js +15 -8
- package/dist/esm/components/styling/InjectedThemeStyles.js.map +2 -2
- package/dist/esm/components/styling/StyleMarker.css.css.map +1 -1
- package/dist/esm/components/styling/StyleMarker.css.js +2 -2
- package/dist/esm/components/styling/StyleMarker.css.js.map +3 -3
- package/dist/esm/components/styling/StyleMarker.css.map +1 -1
- package/dist/esm/components/styling/StyleMarker.d.ts +0 -1
- package/dist/esm/components/styling/StyleMarker.js +2 -2
- package/dist/esm/components/styling/StyleMarker.js.map +3 -3
- package/dist/esm/components/ui/Button.css +4 -5
- package/dist/esm/components/ui/Button.css.css +4 -5
- package/dist/esm/components/ui/Button.css.css.map +3 -3
- package/dist/esm/components/ui/Button.css.d.ts +0 -1
- package/dist/esm/components/ui/Button.css.js.map +1 -1
- package/dist/esm/components/ui/Button.css.map +3 -3
- package/dist/esm/components/ui/Button.d.ts +1 -1
- package/dist/esm/components/ui/Button.js.map +1 -1
- package/dist/esm/components/ui/Heading.css.css.map +1 -1
- package/dist/esm/components/ui/Heading.css.map +1 -1
- package/dist/esm/components/ui/Heading.d.ts +0 -1
- package/dist/esm/components/ui/IconButton.css +1 -5
- package/dist/esm/components/ui/IconButton.css.css +1 -5
- package/dist/esm/components/ui/IconButton.css.css.map +3 -3
- package/dist/esm/components/ui/IconButton.css.js.map +1 -1
- package/dist/esm/components/ui/IconButton.css.map +3 -3
- package/dist/esm/components/ui/IconButton.d.ts +1 -1
- package/dist/esm/components/ui/IconButton.js.map +1 -1
- package/dist/esm/components/ui/Text.css.css.map +1 -1
- package/dist/esm/components/ui/Text.css.map +1 -1
- package/dist/esm/components/ui/Text.d.ts +0 -1
- package/dist/esm/constants/styleDataAttribute.js.map +1 -1
- package/dist/esm/constants/walletDefaults.d.ts +3 -2
- package/dist/esm/constants/walletDefaults.js +8 -6
- package/dist/esm/constants/walletDefaults.js.map +2 -2
- package/dist/esm/constants/walletMutationKeys.d.ts +3 -2
- package/dist/esm/constants/walletMutationKeys.js +4 -3
- package/dist/esm/constants/walletMutationKeys.js.map +2 -2
- package/dist/esm/contexts/walletContext.d.ts +1 -2
- package/dist/esm/hooks/useIotaClientInfiniteQuery.js.map +2 -2
- package/dist/esm/hooks/useIotaClientQuery.js +3 -1
- package/dist/esm/hooks/useIotaClientQuery.js.map +2 -2
- package/dist/esm/hooks/wallet/useAutoConnectWallet.js +17 -7
- package/dist/esm/hooks/wallet/useAutoConnectWallet.js.map +2 -2
- package/dist/esm/hooks/wallet/useConnectWallet.js +10 -4
- package/dist/esm/hooks/wallet/useConnectWallet.js.map +2 -2
- package/dist/esm/hooks/wallet/useCurrentWallet.d.ts +3 -0
- package/dist/esm/hooks/wallet/useCurrentWallet.js +7 -3
- package/dist/esm/hooks/wallet/useCurrentWallet.js.map +2 -2
- package/dist/esm/hooks/wallet/useDisconnectWallet.js +11 -6
- package/dist/esm/hooks/wallet/useDisconnectWallet.js.map +2 -2
- package/dist/esm/hooks/wallet/useReportTransactionEffects.d.ts +15 -0
- package/dist/esm/hooks/wallet/{useSignTransactionBlock.js → useReportTransactionEffects.js} +38 -34
- package/dist/esm/hooks/wallet/useReportTransactionEffects.js.map +7 -0
- package/dist/esm/hooks/wallet/useSignAndExecuteTransaction.d.ts +29 -0
- package/dist/esm/hooks/wallet/useSignAndExecuteTransaction.js +231 -0
- package/dist/esm/hooks/wallet/useSignAndExecuteTransaction.js.map +7 -0
- package/dist/esm/hooks/wallet/useSignPersonalMessage.js +21 -27
- package/dist/esm/hooks/wallet/useSignPersonalMessage.js.map +2 -2
- package/dist/esm/hooks/wallet/useSignTransaction.d.ts +18 -0
- package/dist/esm/hooks/wallet/{useSignAndExecuteTransactionBlock.js → useSignTransaction.js} +83 -43
- package/dist/esm/hooks/wallet/useSignTransaction.js.map +7 -0
- package/dist/esm/hooks/wallet/useSwitchAccount.js +11 -6
- package/dist/esm/hooks/wallet/useSwitchAccount.js.map +2 -2
- package/dist/esm/hooks/wallet/useUnsafeBurnerWallet.js +44 -32
- package/dist/esm/hooks/wallet/useUnsafeBurnerWallet.js.map +2 -2
- package/dist/esm/hooks/wallet/useWalletPropertiesChanged.js +7 -3
- package/dist/esm/hooks/wallet/useWalletPropertiesChanged.js.map +2 -2
- package/dist/esm/hooks/wallet/useWalletsChanged.d.ts +1 -1
- package/dist/esm/hooks/wallet/useWalletsChanged.js +7 -6
- package/dist/esm/hooks/wallet/useWalletsChanged.js.map +2 -2
- package/dist/esm/index.css +5 -10
- package/dist/esm/index.css.map +3 -3
- package/dist/esm/index.d.ts +4 -3
- package/dist/esm/index.js +424 -274
- package/dist/esm/index.js.map +4 -4
- package/dist/esm/themes/darkTheme.d.ts +2 -0
- package/dist/esm/themes/darkTheme.js +67 -0
- package/dist/esm/themes/darkTheme.js.map +7 -0
- package/dist/esm/themes/lightTheme.js +13 -8
- package/dist/esm/themes/lightTheme.js.map +2 -2
- package/dist/esm/themes/themeContract.d.ts +22 -12
- package/dist/esm/themes/themeContract.js +13 -8
- package/dist/esm/themes/themeContract.js.map +2 -2
- package/dist/esm/types.d.ts +1 -1
- package/dist/esm/utils/assertUnreachable.js.map +1 -1
- package/dist/esm/utils/walletUtils.d.ts +2 -2
- package/dist/esm/utils/walletUtils.js +2 -2
- package/dist/esm/utils/walletUtils.js.map +2 -2
- package/dist/esm/walletStore.d.ts +3 -2
- package/dist/esm/walletStore.js +8 -4
- package/dist/esm/walletStore.js.map +2 -2
- package/dist/index.css/package.json +5 -0
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +27 -28
- package/src/components/AccountDropdownMenu.tsx +5 -12
- package/src/components/ConnectButton.tsx +8 -4
- package/src/components/WalletProvider.tsx +9 -9
- package/src/components/connect-modal/views/GetTheWallet.css.ts +38 -0
- package/src/components/connect-modal/views/GetTheWallet.tsx +25 -0
- package/src/components/connect-modal/views/GettingStarted.tsx +3 -3
- package/src/components/connect-modal/views/index.ts +6 -0
- package/src/components/connect-modal/wallet-list/WalletList.tsx +1 -1
- package/src/components/icons/ArrowRightIcon.tsx +23 -0
- package/src/components/icons/ArrowTopRightIcon.tsx +23 -0
- package/src/components/styling/InjectedThemeStyles.tsx +4 -0
- package/src/components/ui/Button.css.ts +3 -5
- package/src/components/ui/IconButton.css.ts +0 -3
- package/src/constants/walletDefaults.ts +11 -5
- package/src/constants/walletMutationKeys.ts +3 -2
- package/src/hooks/useIotaClientInfiniteQuery.ts +2 -1
- package/src/hooks/useIotaClientQuery.ts +3 -1
- package/src/hooks/wallet/useAutoConnectWallet.ts +1 -1
- package/src/hooks/wallet/useConnectWallet.ts +6 -1
- package/src/hooks/wallet/useCurrentWallet.ts +4 -0
- package/src/hooks/wallet/useReportTransactionEffects.ts +87 -0
- package/src/hooks/wallet/useSignAndExecuteTransaction.ts +165 -0
- package/src/hooks/wallet/useSignPersonalMessage.ts +11 -25
- package/src/hooks/wallet/useSignTransaction.ts +117 -0
- package/src/hooks/wallet/useUnsafeBurnerWallet.ts +41 -18
- package/src/hooks/wallet/useWalletsChanged.ts +5 -4
- package/src/index.ts +4 -3
- package/src/themes/darkTheme.ts +69 -0
- package/src/themes/lightTheme.ts +11 -6
- package/src/themes/themeContract.ts +11 -6
- package/src/types.ts +1 -1
- package/src/utils/walletUtils.ts +8 -3
- package/src/walletStore.ts +12 -1
- package/dist/cjs/hooks/useResolveIotaNSNames.d.ts +0 -3
- package/dist/cjs/hooks/useResolveIotaNSNames.js +0 -83
- package/dist/cjs/hooks/useResolveIotaNSNames.js.map +0 -7
- package/dist/cjs/hooks/wallet/useSignAndExecuteTransactionBlock.d.ts +0 -15
- package/dist/cjs/hooks/wallet/useSignAndExecuteTransactionBlock.js.map +0 -7
- package/dist/cjs/hooks/wallet/useSignTransactionBlock.d.ts +0 -13
- package/dist/cjs/hooks/wallet/useSignTransactionBlock.js.map +0 -7
- package/dist/esm/hooks/useResolveIotaNSNames.d.ts +0 -3
- package/dist/esm/hooks/useResolveIotaNSNames.js +0 -60
- package/dist/esm/hooks/useResolveIotaNSNames.js.map +0 -7
- package/dist/esm/hooks/wallet/useSignAndExecuteTransactionBlock.d.ts +0 -15
- package/dist/esm/hooks/wallet/useSignAndExecuteTransactionBlock.js.map +0 -7
- package/dist/esm/hooks/wallet/useSignTransactionBlock.d.ts +0 -13
- package/dist/esm/hooks/wallet/useSignTransactionBlock.js.map +0 -7
- package/src/hooks/useResolveIotaNSNames.ts +0 -31
- package/src/hooks/wallet/useSignAndExecuteTransactionBlock.ts +0 -117
- 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
|
|
33
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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' | '
|
|
91
|
+
'preferredWallets' | 'walletFilter' | 'enableUnsafeBurner' | 'children'
|
|
92
92
|
>;
|
|
93
93
|
|
|
94
94
|
function WalletConnectionManager({
|
|
95
95
|
preferredWallets = DEFAULT_PREFERRED_WALLETS,
|
|
96
|
-
|
|
96
|
+
walletFilter = DEFAULT_WALLET_FILTER,
|
|
97
97
|
enableUnsafeBurner = false,
|
|
98
98
|
children,
|
|
99
99
|
}: WalletConnectionManagerProps) {
|
|
100
|
-
useWalletsChanged(preferredWallets,
|
|
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
|
|
13
|
+
<Heading as="h2">Get Started with IOTA</Heading>
|
|
14
14
|
<div className={styles.content}>
|
|
15
|
-
<InfoSection title="Install the
|
|
16
|
-
We recommend pinning
|
|
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,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.
|
|
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.
|
|
42
|
-
lg: { borderRadius: themeVars.radii.
|
|
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: {
|
|
@@ -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 = '
|
|
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
|
-
|
|
17
|
-
|
|
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
|
-
|
|
14
|
-
|
|
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) =>
|
|
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](
|
|
69
|
+
return (await iotaContext.client[method](
|
|
70
|
+
params as never,
|
|
71
|
+
)) as IotaRpcMethods[T]['result'];
|
|
70
72
|
},
|
|
71
73
|
});
|
|
72
74
|
}
|
|
@@ -58,7 +58,12 @@ export function useConnectWallet({
|
|
|
58
58
|
);
|
|
59
59
|
const selectedAccount = getSelectedAccount(connectedIotaAccounts, accountAddress);
|
|
60
60
|
|
|
61
|
-
setWalletConnected(
|
|
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
|
+
}
|