thirdweb 5.61.7-nightly-da9f1964e4ae74ed5d33666788e2d16e4d56614d-20241015000333 → 5.63.0-nightly-3a141e742c19eeeecf031a3014cb476ee69d4c0c-20241016000332
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/dist/cjs/exports/extensions/erc1155.js +3 -1
- package/dist/cjs/exports/extensions/erc1155.js.map +1 -1
- package/dist/cjs/extensions/erc1155/write/mintToBatch.js +79 -0
- package/dist/cjs/extensions/erc1155/write/mintToBatch.js.map +1 -0
- package/dist/cjs/extensions/erc721/lazyMinting/write/createDelayedRevealBatch.js +15 -4
- package/dist/cjs/extensions/erc721/lazyMinting/write/createDelayedRevealBatch.js.map +1 -1
- package/dist/cjs/react/core/utils/walletIcon.js +4 -0
- package/dist/cjs/react/core/utils/walletIcon.js.map +1 -1
- package/dist/cjs/react/native/ui/components/WalletImage.js +5 -2
- package/dist/cjs/react/native/ui/components/WalletImage.js.map +1 -1
- package/dist/cjs/react/native/ui/connect/ConnectModal.js +6 -6
- package/dist/cjs/react/native/ui/connect/ConnectModal.js.map +1 -1
- package/dist/cjs/react/native/ui/connect/ConnectedButton.js +2 -2
- package/dist/cjs/react/native/ui/connect/ConnectedButton.js.map +1 -1
- package/dist/cjs/react/native/ui/connect/ConnectedModal.js +3 -3
- package/dist/cjs/react/native/ui/connect/ConnectedModal.js.map +1 -1
- package/dist/cjs/react/native/ui/connect/InAppWalletUI.js +1 -0
- package/dist/cjs/react/native/ui/connect/InAppWalletUI.js.map +1 -1
- package/dist/cjs/react/native/ui/connect/ReceiveScreen.js +2 -2
- package/dist/cjs/react/native/ui/connect/ReceiveScreen.js.map +1 -1
- package/dist/cjs/react/native/ui/icons/svgs.js +20 -1
- package/dist/cjs/react/native/ui/icons/svgs.js.map +1 -1
- package/dist/cjs/react/web/wallets/in-app/WalletAuth.js +8 -0
- package/dist/cjs/react/web/wallets/in-app/WalletAuth.js.map +1 -1
- package/dist/cjs/react/web/wallets/shared/ConnectWalletSocialOptions.js +2 -0
- package/dist/cjs/react/web/wallets/shared/ConnectWalletSocialOptions.js.map +1 -1
- package/dist/cjs/react/web/wallets/shared/OTPLoginUI.js +11 -16
- package/dist/cjs/react/web/wallets/shared/OTPLoginUI.js.map +1 -1
- package/dist/cjs/react/web/wallets/shared/PassKeyLogin.js +7 -0
- package/dist/cjs/react/web/wallets/shared/PassKeyLogin.js.map +1 -1
- package/dist/cjs/react/web/wallets/shared/SocialLogin.js +9 -12
- package/dist/cjs/react/web/wallets/shared/SocialLogin.js.map +1 -1
- package/dist/cjs/react/web/wallets/shared/oauthSignIn.js +1 -0
- package/dist/cjs/react/web/wallets/shared/oauthSignIn.js.map +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/wallets/in-app/{web/lib → core}/actions/generate-wallet.enclave.js +2 -2
- package/dist/cjs/wallets/in-app/core/actions/generate-wallet.enclave.js.map +1 -0
- package/dist/cjs/wallets/in-app/{web/lib → core}/actions/get-enclave-user-status.js +2 -2
- package/dist/cjs/wallets/in-app/core/actions/get-enclave-user-status.js.map +1 -0
- package/dist/cjs/wallets/in-app/{web/lib → core}/actions/sign-message.enclave.js +6 -5
- package/dist/cjs/wallets/in-app/core/actions/sign-message.enclave.js.map +1 -0
- package/dist/cjs/wallets/in-app/{web/lib → core}/actions/sign-transaction.enclave.js +6 -5
- package/dist/cjs/wallets/in-app/core/actions/sign-transaction.enclave.js.map +1 -0
- package/dist/cjs/wallets/in-app/{web/lib → core}/actions/sign-typed-data.enclave.js +6 -5
- package/dist/cjs/wallets/in-app/core/actions/sign-typed-data.enclave.js.map +1 -0
- package/dist/cjs/wallets/in-app/core/authentication/client-scoped-storage.js +9 -2
- package/dist/cjs/wallets/in-app/core/authentication/client-scoped-storage.js.map +1 -1
- package/dist/cjs/wallets/in-app/core/authentication/guest.js +1 -1
- package/dist/cjs/wallets/in-app/core/authentication/guest.js.map +1 -1
- package/dist/cjs/wallets/in-app/core/wallet/enclave-wallet.js +4 -8
- package/dist/cjs/wallets/in-app/core/wallet/enclave-wallet.js.map +1 -1
- package/dist/cjs/wallets/in-app/native/auth/passkeys.js +1 -1
- package/dist/cjs/wallets/in-app/native/auth/passkeys.js.map +1 -1
- package/dist/cjs/wallets/in-app/native/helpers/api/fetchers.js +14 -0
- package/dist/cjs/wallets/in-app/native/helpers/api/fetchers.js.map +1 -1
- package/dist/cjs/wallets/in-app/native/helpers/auth/middleware.js +3 -2
- package/dist/cjs/wallets/in-app/native/helpers/auth/middleware.js.map +1 -1
- package/dist/cjs/wallets/in-app/native/helpers/constants.js +2 -1
- package/dist/cjs/wallets/in-app/native/helpers/constants.js.map +1 -1
- package/dist/cjs/wallets/in-app/native/helpers/wallet/migration.js +133 -0
- package/dist/cjs/wallets/in-app/native/helpers/wallet/migration.js.map +1 -0
- package/dist/cjs/wallets/in-app/native/helpers/wallet/retrieval.js +2 -0
- package/dist/cjs/wallets/in-app/native/helpers/wallet/retrieval.js.map +1 -1
- package/dist/cjs/wallets/in-app/native/native-connector.js +50 -28
- package/dist/cjs/wallets/in-app/native/native-connector.js.map +1 -1
- package/dist/cjs/wallets/in-app/web/lib/auth/iframe-auth.js +2 -2
- package/dist/cjs/wallets/in-app/web/lib/auth/iframe-auth.js.map +1 -1
- package/dist/cjs/wallets/in-app/web/lib/auth/passkeys.js +1 -1
- package/dist/cjs/wallets/in-app/web/lib/auth/passkeys.js.map +1 -1
- package/dist/cjs/wallets/in-app/web/lib/web-connector.js +15 -13
- package/dist/cjs/wallets/in-app/web/lib/web-connector.js.map +1 -1
- package/dist/cjs/wallets/in-app/web/utils/iFrameCommunication/InAppWalletIframeCommunicator.js +1 -1
- package/dist/cjs/wallets/in-app/web/utils/iFrameCommunication/InAppWalletIframeCommunicator.js.map +1 -1
- package/dist/cjs/wallets/types.js +1 -0
- package/dist/cjs/wallets/types.js.map +1 -1
- package/dist/esm/exports/extensions/erc1155.js +1 -0
- package/dist/esm/exports/extensions/erc1155.js.map +1 -1
- package/dist/esm/extensions/erc1155/write/mintToBatch.js +76 -0
- package/dist/esm/extensions/erc1155/write/mintToBatch.js.map +1 -0
- package/dist/esm/extensions/erc721/lazyMinting/write/createDelayedRevealBatch.js +15 -4
- package/dist/esm/extensions/erc721/lazyMinting/write/createDelayedRevealBatch.js.map +1 -1
- package/dist/esm/react/core/utils/walletIcon.js +4 -0
- package/dist/esm/react/core/utils/walletIcon.js.map +1 -1
- package/dist/esm/react/native/ui/components/WalletImage.js +6 -3
- package/dist/esm/react/native/ui/components/WalletImage.js.map +1 -1
- package/dist/esm/react/native/ui/connect/ConnectModal.js +6 -6
- package/dist/esm/react/native/ui/connect/ConnectModal.js.map +1 -1
- package/dist/esm/react/native/ui/connect/ConnectedButton.js +2 -2
- package/dist/esm/react/native/ui/connect/ConnectedButton.js.map +1 -1
- package/dist/esm/react/native/ui/connect/ConnectedModal.js +3 -3
- package/dist/esm/react/native/ui/connect/ConnectedModal.js.map +1 -1
- package/dist/esm/react/native/ui/connect/InAppWalletUI.js +2 -1
- package/dist/esm/react/native/ui/connect/InAppWalletUI.js.map +1 -1
- package/dist/esm/react/native/ui/connect/ReceiveScreen.js +2 -2
- package/dist/esm/react/native/ui/connect/ReceiveScreen.js.map +1 -1
- package/dist/esm/react/native/ui/icons/svgs.js +19 -0
- package/dist/esm/react/native/ui/icons/svgs.js.map +1 -1
- package/dist/esm/react/web/wallets/in-app/WalletAuth.js +8 -0
- package/dist/esm/react/web/wallets/in-app/WalletAuth.js.map +1 -1
- package/dist/esm/react/web/wallets/shared/ConnectWalletSocialOptions.js +2 -0
- package/dist/esm/react/web/wallets/shared/ConnectWalletSocialOptions.js.map +1 -1
- package/dist/esm/react/web/wallets/shared/OTPLoginUI.js +12 -17
- package/dist/esm/react/web/wallets/shared/OTPLoginUI.js.map +1 -1
- package/dist/esm/react/web/wallets/shared/PassKeyLogin.js +7 -0
- package/dist/esm/react/web/wallets/shared/PassKeyLogin.js.map +1 -1
- package/dist/esm/react/web/wallets/shared/SocialLogin.js +9 -12
- package/dist/esm/react/web/wallets/shared/SocialLogin.js.map +1 -1
- package/dist/esm/react/web/wallets/shared/oauthSignIn.js +1 -0
- package/dist/esm/react/web/wallets/shared/oauthSignIn.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/wallets/in-app/{web/lib → core}/actions/generate-wallet.enclave.js +2 -2
- package/dist/esm/wallets/in-app/core/actions/generate-wallet.enclave.js.map +1 -0
- package/dist/esm/wallets/in-app/{web/lib → core}/actions/get-enclave-user-status.js +2 -2
- package/dist/esm/wallets/in-app/core/actions/get-enclave-user-status.js.map +1 -0
- package/dist/esm/wallets/in-app/{web/lib → core}/actions/sign-message.enclave.js +6 -5
- package/dist/esm/wallets/in-app/core/actions/sign-message.enclave.js.map +1 -0
- package/dist/esm/wallets/in-app/{web/lib → core}/actions/sign-transaction.enclave.js +6 -5
- package/dist/esm/wallets/in-app/core/actions/sign-transaction.enclave.js.map +1 -0
- package/dist/esm/wallets/in-app/{web/lib → core}/actions/sign-typed-data.enclave.js +6 -5
- package/dist/esm/wallets/in-app/core/actions/sign-typed-data.enclave.js.map +1 -0
- package/dist/esm/wallets/in-app/core/authentication/client-scoped-storage.js +9 -2
- package/dist/esm/wallets/in-app/core/authentication/client-scoped-storage.js.map +1 -1
- package/dist/esm/wallets/in-app/core/authentication/guest.js +1 -1
- package/dist/esm/wallets/in-app/core/authentication/guest.js.map +1 -1
- package/dist/esm/wallets/in-app/core/wallet/enclave-wallet.js +4 -8
- package/dist/esm/wallets/in-app/core/wallet/enclave-wallet.js.map +1 -1
- package/dist/esm/wallets/in-app/native/auth/passkeys.js +1 -1
- package/dist/esm/wallets/in-app/native/auth/passkeys.js.map +1 -1
- package/dist/esm/wallets/in-app/native/helpers/api/fetchers.js +14 -0
- package/dist/esm/wallets/in-app/native/helpers/api/fetchers.js.map +1 -1
- package/dist/esm/wallets/in-app/native/helpers/auth/middleware.js +3 -2
- package/dist/esm/wallets/in-app/native/helpers/auth/middleware.js.map +1 -1
- package/dist/esm/wallets/in-app/native/helpers/constants.js +1 -0
- package/dist/esm/wallets/in-app/native/helpers/constants.js.map +1 -1
- package/dist/esm/wallets/in-app/native/helpers/wallet/migration.js +130 -0
- package/dist/esm/wallets/in-app/native/helpers/wallet/migration.js.map +1 -0
- package/dist/esm/wallets/in-app/native/helpers/wallet/retrieval.js +2 -2
- package/dist/esm/wallets/in-app/native/helpers/wallet/retrieval.js.map +1 -1
- package/dist/esm/wallets/in-app/native/native-connector.js +50 -28
- package/dist/esm/wallets/in-app/native/native-connector.js.map +1 -1
- package/dist/esm/wallets/in-app/web/lib/auth/iframe-auth.js +2 -2
- package/dist/esm/wallets/in-app/web/lib/auth/iframe-auth.js.map +1 -1
- package/dist/esm/wallets/in-app/web/lib/auth/passkeys.js +1 -1
- package/dist/esm/wallets/in-app/web/lib/auth/passkeys.js.map +1 -1
- package/dist/esm/wallets/in-app/web/lib/web-connector.js +15 -13
- package/dist/esm/wallets/in-app/web/lib/web-connector.js.map +1 -1
- package/dist/esm/wallets/in-app/web/utils/iFrameCommunication/InAppWalletIframeCommunicator.js +1 -1
- package/dist/esm/wallets/in-app/web/utils/iFrameCommunication/InAppWalletIframeCommunicator.js.map +1 -1
- package/dist/esm/wallets/types.js +1 -0
- package/dist/esm/wallets/types.js.map +1 -1
- package/dist/types/exports/extensions/erc1155.d.ts +1 -0
- package/dist/types/exports/extensions/erc1155.d.ts.map +1 -1
- package/dist/types/extensions/erc1155/write/mintToBatch.d.ts +72 -0
- package/dist/types/extensions/erc1155/write/mintToBatch.d.ts.map +1 -0
- package/dist/types/extensions/erc721/lazyMinting/write/createDelayedRevealBatch.d.ts.map +1 -1
- package/dist/types/react/core/utils/walletIcon.d.ts +2 -1
- package/dist/types/react/core/utils/walletIcon.d.ts.map +1 -1
- package/dist/types/react/native/ui/components/WalletImage.d.ts +2 -0
- package/dist/types/react/native/ui/components/WalletImage.d.ts.map +1 -1
- package/dist/types/react/native/ui/connect/ConnectModal.d.ts.map +1 -1
- package/dist/types/react/native/ui/connect/ConnectedButton.d.ts.map +1 -1
- package/dist/types/react/native/ui/connect/ConnectedModal.d.ts.map +1 -1
- package/dist/types/react/native/ui/connect/InAppWalletUI.d.ts.map +1 -1
- package/dist/types/react/native/ui/connect/ReceiveScreen.d.ts +2 -0
- package/dist/types/react/native/ui/connect/ReceiveScreen.d.ts.map +1 -1
- package/dist/types/react/native/ui/icons/svgs.d.ts +1 -0
- package/dist/types/react/native/ui/icons/svgs.d.ts.map +1 -1
- package/dist/types/react/web/wallets/in-app/WalletAuth.d.ts.map +1 -1
- package/dist/types/react/web/wallets/shared/ConnectWalletSocialOptions.d.ts.map +1 -1
- package/dist/types/react/web/wallets/shared/OTPLoginUI.d.ts.map +1 -1
- package/dist/types/react/web/wallets/shared/SocialLogin.d.ts.map +1 -1
- package/dist/types/react/web/wallets/shared/oauthSignIn.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/dist/types/wallets/in-app/core/actions/generate-wallet.enclave.d.ts +13 -0
- package/dist/types/wallets/in-app/core/actions/generate-wallet.enclave.d.ts.map +1 -0
- package/dist/types/wallets/in-app/core/actions/get-enclave-user-status.d.ts +14 -0
- package/dist/types/wallets/in-app/core/actions/get-enclave-user-status.d.ts.map +1 -0
- package/dist/types/wallets/in-app/core/actions/sign-message.enclave.d.ts +17 -0
- package/dist/types/wallets/in-app/core/actions/sign-message.enclave.d.ts.map +1 -0
- package/dist/types/wallets/in-app/core/actions/sign-transaction.enclave.d.ts +9 -0
- package/dist/types/wallets/in-app/core/actions/sign-transaction.enclave.d.ts.map +1 -0
- package/dist/types/wallets/in-app/{web/lib → core}/actions/sign-typed-data.enclave.d.ts +3 -5
- package/dist/types/wallets/in-app/core/actions/sign-typed-data.enclave.d.ts.map +1 -0
- package/dist/types/wallets/in-app/core/authentication/client-scoped-storage.d.ts +4 -3
- package/dist/types/wallets/in-app/core/authentication/client-scoped-storage.d.ts.map +1 -1
- package/dist/types/wallets/in-app/core/authentication/types.d.ts +1 -1
- package/dist/types/wallets/in-app/core/authentication/types.d.ts.map +1 -1
- package/dist/types/wallets/in-app/core/wallet/enclave-wallet.d.ts +6 -7
- package/dist/types/wallets/in-app/core/wallet/enclave-wallet.d.ts.map +1 -1
- package/dist/types/wallets/in-app/native/helpers/api/fetchers.d.ts.map +1 -1
- package/dist/types/wallets/in-app/native/helpers/constants.d.ts +1 -0
- package/dist/types/wallets/in-app/native/helpers/constants.d.ts.map +1 -1
- package/dist/types/wallets/in-app/native/helpers/wallet/migration.d.ts +17 -0
- package/dist/types/wallets/in-app/native/helpers/wallet/migration.d.ts.map +1 -0
- package/dist/types/wallets/in-app/native/helpers/wallet/retrieval.d.ts +27 -0
- package/dist/types/wallets/in-app/native/helpers/wallet/retrieval.d.ts.map +1 -1
- package/dist/types/wallets/in-app/native/native-connector.d.ts +2 -2
- package/dist/types/wallets/in-app/native/native-connector.d.ts.map +1 -1
- package/dist/types/wallets/in-app/web/lib/auth/iframe-auth.d.ts.map +1 -1
- package/dist/types/wallets/in-app/web/lib/web-connector.d.ts +1 -1
- package/dist/types/wallets/in-app/web/lib/web-connector.d.ts.map +1 -1
- package/dist/types/wallets/types.d.ts +2 -2
- package/dist/types/wallets/types.d.ts.map +1 -1
- package/package.json +5 -1
- package/src/exports/extensions/erc1155.ts +5 -0
- package/src/extensions/erc1155/write/mintToBatch.test.ts +74 -0
- package/src/extensions/erc1155/write/mintToBatch.ts +117 -0
- package/src/extensions/erc721/lazyMinting/write/createDelayedRevealBatch.test.ts +75 -80
- package/src/extensions/erc721/lazyMinting/write/createDelayedRevealBatch.ts +18 -4
- package/src/react/core/utils/walletIcon.ts +5 -0
- package/src/react/native/ui/components/WalletImage.tsx +8 -2
- package/src/react/native/ui/connect/ConnectModal.tsx +19 -2
- package/src/react/native/ui/connect/ConnectedButton.tsx +8 -2
- package/src/react/native/ui/connect/ConnectedModal.tsx +9 -2
- package/src/react/native/ui/connect/InAppWalletUI.tsx +2 -0
- package/src/react/native/ui/connect/ReceiveScreen.tsx +5 -2
- package/src/react/native/ui/icons/svgs.ts +20 -0
- package/src/react/web/wallets/in-app/WalletAuth.tsx +8 -0
- package/src/react/web/wallets/shared/ConnectWalletSocialOptions.tsx +2 -0
- package/src/react/web/wallets/shared/OTPLoginUI.tsx +12 -18
- package/src/react/web/wallets/shared/PassKeyLogin.tsx +7 -0
- package/src/react/web/wallets/shared/SocialLogin.tsx +9 -12
- package/src/react/web/wallets/shared/oauthSignIn.ts +1 -0
- package/src/version.ts +1 -1
- package/src/wallets/in-app/{web/lib → core}/actions/generate-wallet.enclave.ts +6 -8
- package/src/wallets/in-app/{web/lib → core}/actions/get-enclave-user-status.ts +5 -5
- package/src/wallets/in-app/{web/lib → core}/actions/sign-message.enclave.ts +7 -9
- package/src/wallets/in-app/{web/lib → core}/actions/sign-transaction.enclave.ts +8 -10
- package/src/wallets/in-app/{web/lib → core}/actions/sign-typed-data.enclave.ts +7 -9
- package/src/wallets/in-app/core/authentication/client-scoped-storage.ts +6 -4
- package/src/wallets/in-app/core/authentication/guest.ts +1 -1
- package/src/wallets/in-app/core/authentication/types.ts +1 -0
- package/src/wallets/in-app/core/wallet/enclave-wallet.ts +11 -17
- package/src/wallets/in-app/native/auth/passkeys.ts +1 -1
- package/src/wallets/in-app/native/helpers/api/fetchers.ts +14 -0
- package/src/wallets/in-app/native/helpers/auth/middleware.ts +3 -2
- package/src/wallets/in-app/native/helpers/constants.ts +2 -0
- package/src/wallets/in-app/native/helpers/wallet/migration.ts +185 -0
- package/src/wallets/in-app/native/helpers/wallet/retrieval.ts +2 -2
- package/src/wallets/in-app/native/native-connector.ts +62 -28
- package/src/wallets/in-app/web/lib/auth/iframe-auth.ts +2 -2
- package/src/wallets/in-app/web/lib/auth/passkeys.ts +1 -1
- package/src/wallets/in-app/web/lib/web-connector.ts +15 -13
- package/src/wallets/in-app/web/utils/iFrameCommunication/InAppWalletIframeCommunicator.ts +1 -1
- package/src/wallets/types.ts +1 -0
- package/dist/cjs/wallets/in-app/web/lib/actions/generate-wallet.enclave.js.map +0 -1
- package/dist/cjs/wallets/in-app/web/lib/actions/get-enclave-user-status.js.map +0 -1
- package/dist/cjs/wallets/in-app/web/lib/actions/sign-message.enclave.js.map +0 -1
- package/dist/cjs/wallets/in-app/web/lib/actions/sign-transaction.enclave.js.map +0 -1
- package/dist/cjs/wallets/in-app/web/lib/actions/sign-typed-data.enclave.js.map +0 -1
- package/dist/esm/wallets/in-app/web/lib/actions/generate-wallet.enclave.js.map +0 -1
- package/dist/esm/wallets/in-app/web/lib/actions/get-enclave-user-status.js.map +0 -1
- package/dist/esm/wallets/in-app/web/lib/actions/sign-message.enclave.js.map +0 -1
- package/dist/esm/wallets/in-app/web/lib/actions/sign-transaction.enclave.js.map +0 -1
- package/dist/esm/wallets/in-app/web/lib/actions/sign-typed-data.enclave.js.map +0 -1
- package/dist/types/wallets/in-app/web/lib/actions/generate-wallet.enclave.d.ts +0 -15
- package/dist/types/wallets/in-app/web/lib/actions/generate-wallet.enclave.d.ts.map +0 -1
- package/dist/types/wallets/in-app/web/lib/actions/get-enclave-user-status.d.ts +0 -14
- package/dist/types/wallets/in-app/web/lib/actions/get-enclave-user-status.d.ts.map +0 -1
- package/dist/types/wallets/in-app/web/lib/actions/sign-message.enclave.d.ts +0 -19
- package/dist/types/wallets/in-app/web/lib/actions/sign-message.enclave.d.ts.map +0 -1
- package/dist/types/wallets/in-app/web/lib/actions/sign-transaction.enclave.d.ts +0 -11
- package/dist/types/wallets/in-app/web/lib/actions/sign-transaction.enclave.d.ts.map +0 -1
- package/dist/types/wallets/in-app/web/lib/actions/sign-typed-data.enclave.d.ts.map +0 -1
@@ -0,0 +1,117 @@
|
|
1
|
+
import { maxUint256 } from "viem";
|
2
|
+
import { multicall } from "../../../extensions/common/__generated__/IMulticall/write/multicall.js";
|
3
|
+
import { upload } from "../../../storage/upload.js";
|
4
|
+
import type {
|
5
|
+
BaseTransactionOptions,
|
6
|
+
WithOverrides,
|
7
|
+
} from "../../../transaction/types.js";
|
8
|
+
import type { NFTInput } from "../../../utils/nft/parseNft.js";
|
9
|
+
import { encodeMintTo } from "../__generated__/IMintableERC1155/write/mintTo.js";
|
10
|
+
|
11
|
+
/**
|
12
|
+
* @extension ERC1155
|
13
|
+
*/
|
14
|
+
export type MintToBatchParams = WithOverrides<{
|
15
|
+
/**
|
16
|
+
* The wallet that the NFTs will be minted to
|
17
|
+
*/
|
18
|
+
to: string;
|
19
|
+
/**
|
20
|
+
* An array of NFT metadata & supply to mint
|
21
|
+
* @example
|
22
|
+
* ```ts
|
23
|
+
* const nfts = [
|
24
|
+
* {
|
25
|
+
* metadata: { name: "token 0" },
|
26
|
+
* supply: 1n,
|
27
|
+
* },
|
28
|
+
* {
|
29
|
+
* metadata: { name: "token 1" },
|
30
|
+
* supply: 10n,
|
31
|
+
* },
|
32
|
+
* ]
|
33
|
+
* ```
|
34
|
+
*/
|
35
|
+
nfts: Array<{
|
36
|
+
supply: bigint;
|
37
|
+
metadata: NFTInput | string;
|
38
|
+
}>;
|
39
|
+
}>;
|
40
|
+
|
41
|
+
/**
|
42
|
+
* This extension batches multiple `mintTo` extensions into one single multicall.
|
43
|
+
* Keep in mind that there is a limit of how many NFTs you can mint per transaction.
|
44
|
+
* This limit varies depends on the network that you are transacting on.
|
45
|
+
*
|
46
|
+
* You are recommended to experiment with the number to figure out the best number for your chain of choice.
|
47
|
+
* @param options - the transaction options
|
48
|
+
* @returns A promise that resolves to the transaction result.
|
49
|
+
* @extension ERC1155
|
50
|
+
* @example
|
51
|
+
* ```ts
|
52
|
+
* import { mintBatchTo } from "thirdweb/extension/erc1155";
|
53
|
+
*
|
54
|
+
* const transaction = mintToBatch({
|
55
|
+
* contract: editionContract,
|
56
|
+
* to: "0x...",
|
57
|
+
* nfts: [
|
58
|
+
* {
|
59
|
+
* metadata: {
|
60
|
+
* name: "Token #0",
|
61
|
+
* image: "...",
|
62
|
+
* attributes: [],
|
63
|
+
* },
|
64
|
+
* supply: 100n,
|
65
|
+
* },
|
66
|
+
* {
|
67
|
+
* metadata: {
|
68
|
+
* name: "Token #1",
|
69
|
+
* image: "...",
|
70
|
+
* attributes: [],
|
71
|
+
* },
|
72
|
+
* supply: 111n,
|
73
|
+
* },
|
74
|
+
* ],
|
75
|
+
* });
|
76
|
+
*
|
77
|
+
* await sendTransaction({ transaction, account });
|
78
|
+
* ```
|
79
|
+
*/
|
80
|
+
export function mintToBatch(
|
81
|
+
options: BaseTransactionOptions<MintToBatchParams>,
|
82
|
+
) {
|
83
|
+
return multicall({
|
84
|
+
contract: options.contract,
|
85
|
+
asyncParams: async () => {
|
86
|
+
const uris = await Promise.all(
|
87
|
+
options.nfts.map((item) => {
|
88
|
+
if (typeof item.metadata === "string") {
|
89
|
+
return item.metadata;
|
90
|
+
}
|
91
|
+
return upload({
|
92
|
+
client: options.contract.client,
|
93
|
+
files: [item.metadata],
|
94
|
+
});
|
95
|
+
}),
|
96
|
+
);
|
97
|
+
|
98
|
+
const data = uris.map((uri, index) => {
|
99
|
+
const item = options.nfts[index];
|
100
|
+
if (!item) {
|
101
|
+
// Should not happen
|
102
|
+
throw new Error("Index mismatch");
|
103
|
+
}
|
104
|
+
return encodeMintTo({
|
105
|
+
to: options.to,
|
106
|
+
// maxUint256 is used to indicate that this is a NEW token!
|
107
|
+
tokenId: maxUint256,
|
108
|
+
uri,
|
109
|
+
amount: item.supply,
|
110
|
+
});
|
111
|
+
});
|
112
|
+
|
113
|
+
return { data };
|
114
|
+
},
|
115
|
+
overrides: options.overrides,
|
116
|
+
});
|
117
|
+
}
|
@@ -1,97 +1,92 @@
|
|
1
|
-
import {
|
1
|
+
import { describe, expect, it } from "vitest";
|
2
|
+
import { TEST_CONTRACT_URI } from "~test/ipfs-uris.js";
|
3
|
+
import { TEST_ACCOUNT_D } from "~test/test-wallets.js";
|
2
4
|
import { ANVIL_CHAIN } from "../../../../../test/src/chains.js";
|
3
5
|
import { TEST_CLIENT } from "../../../../../test/src/test-clients.js";
|
4
|
-
import {
|
5
|
-
|
6
|
-
|
7
|
-
} from "
|
8
|
-
import type { Hex } from "../../../../utils/encoding/hex.js";
|
6
|
+
import { getContract } from "../../../../contract/contract.js";
|
7
|
+
import { deployERC721Contract } from "../../../../extensions/prebuilts/deploy-erc721.js";
|
8
|
+
import { sendAndConfirmTransaction } from "../../../../transaction/actions/send-and-confirm-transaction.js";
|
9
|
+
import { getNFT } from "../../read/getNFT.js";
|
9
10
|
import { createDelayedRevealBatch } from "./createDelayedRevealBatch.js";
|
11
|
+
import { reveal } from "./reveal.js";
|
10
12
|
|
11
|
-
const
|
12
|
-
getBaseUriFromBatch: vi.fn(),
|
13
|
-
getBaseURICount: vi.fn(),
|
14
|
-
encryptDecrypt: vi.fn(),
|
15
|
-
lazyMint: vi.fn(),
|
16
|
-
upload: vi.fn(),
|
17
|
-
}));
|
18
|
-
|
19
|
-
vi.mock("../../../../utils/ipfs.js", () => ({
|
20
|
-
getBaseUriFromBatch: mocks.getBaseUriFromBatch,
|
21
|
-
}));
|
22
|
-
|
23
|
-
vi.mock(
|
24
|
-
"../../__generated__/IBatchMintMetadata/read/getBaseURICount.js",
|
25
|
-
() => ({
|
26
|
-
getBaseURICount: mocks.getBaseURICount,
|
27
|
-
}),
|
28
|
-
);
|
29
|
-
|
30
|
-
vi.mock("../../__generated__/IDelayedReveal/read/encryptDecrypt.js", () => ({
|
31
|
-
encryptDecrypt: mocks.encryptDecrypt,
|
32
|
-
}));
|
33
|
-
|
34
|
-
vi.mock("../../../../storage/upload.js", () => ({
|
35
|
-
upload: mocks.upload,
|
36
|
-
}));
|
37
|
-
|
38
|
-
const placeholderNFT = {
|
13
|
+
const placeholderMetadata = {
|
39
14
|
name: "Hidden NFT",
|
40
15
|
description: "Will be revealed next week!",
|
41
16
|
};
|
17
|
+
const account = TEST_ACCOUNT_D;
|
18
|
+
const chain = ANVIL_CHAIN;
|
19
|
+
const client = TEST_CLIENT;
|
20
|
+
const password = "1234";
|
42
21
|
|
43
|
-
|
44
|
-
{
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
22
|
+
describe.runIf(process.env.TW_SECRET_KEY)("createDelayedRevealedBatch", () => {
|
23
|
+
it("should create delayed-reveal batches properly", async () => {
|
24
|
+
const contract = getContract({
|
25
|
+
address: await deployERC721Contract({
|
26
|
+
account,
|
27
|
+
chain,
|
28
|
+
client,
|
29
|
+
type: "DropERC721",
|
30
|
+
params: {
|
31
|
+
name: "nftdrop",
|
32
|
+
contractURI: TEST_CONTRACT_URI,
|
33
|
+
},
|
34
|
+
}),
|
35
|
+
chain,
|
36
|
+
client,
|
37
|
+
});
|
53
38
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
39
|
+
// Create batch #0
|
40
|
+
await sendAndConfirmTransaction({
|
41
|
+
account,
|
42
|
+
transaction: createDelayedRevealBatch({
|
43
|
+
contract,
|
44
|
+
placeholderMetadata,
|
45
|
+
password: "1234",
|
46
|
+
metadata: [{ name: "token 0" }, { name: "token 1" }],
|
47
|
+
}),
|
62
48
|
});
|
63
|
-
});
|
64
49
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
"0x8967ae24bd1c6439791bc1c8ca3b3499537283b71af366693792a707eb99e80bc0058c90c1f92f18ec716e4760fdf9279241d442b5b5",
|
76
|
-
);
|
50
|
+
// Create batch #1
|
51
|
+
await sendAndConfirmTransaction({
|
52
|
+
account,
|
53
|
+
transaction: createDelayedRevealBatch({
|
54
|
+
contract,
|
55
|
+
placeholderMetadata,
|
56
|
+
password,
|
57
|
+
metadata: [{ name: "token 2" }, { name: "token 3" }],
|
58
|
+
}),
|
59
|
+
});
|
77
60
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
61
|
+
// Reveal batch #0
|
62
|
+
await sendAndConfirmTransaction({
|
63
|
+
account,
|
64
|
+
transaction: reveal({ contract, batchId: 0n, password }),
|
65
|
+
});
|
66
|
+
// Reveal batch #1
|
67
|
+
await sendAndConfirmTransaction({
|
68
|
+
account,
|
69
|
+
transaction: reveal({ contract, batchId: 1n, password }),
|
83
70
|
});
|
84
71
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
72
|
+
/**
|
73
|
+
* The token URIs of batch 0 should end with "/0" and "/1"
|
74
|
+
* while the token URIs of batch 1 should end with "/2" and "/3"
|
75
|
+
*/
|
76
|
+
const [token0, token1, token2, token3] = await Promise.all([
|
77
|
+
getNFT({ contract, tokenId: 0n }),
|
78
|
+
getNFT({ contract, tokenId: 1n }),
|
79
|
+
getNFT({ contract, tokenId: 2n }),
|
80
|
+
getNFT({ contract, tokenId: 3n }),
|
81
|
+
]);
|
91
82
|
|
92
|
-
expect(
|
93
|
-
|
94
|
-
);
|
95
|
-
expect(
|
83
|
+
expect(token0.tokenURI.endsWith("/0")).toBe(true);
|
84
|
+
expect(token0.metadata.name).toBe("token 0");
|
85
|
+
expect(token1.tokenURI.endsWith("/1")).toBe(true);
|
86
|
+
expect(token1.metadata.name).toBe("token 1");
|
87
|
+
expect(token2.tokenURI.endsWith("/2")).toBe(true);
|
88
|
+
expect(token2.metadata.name).toBe("token 2");
|
89
|
+
expect(token3.tokenURI.endsWith("/3")).toBe(true);
|
90
|
+
expect(token3.metadata.name).toBe("token 3");
|
96
91
|
});
|
97
92
|
});
|
@@ -14,6 +14,7 @@ import {
|
|
14
14
|
encryptDecrypt,
|
15
15
|
isEncryptDecryptSupported,
|
16
16
|
} from "../../__generated__/IDelayedReveal/read/encryptDecrypt.js";
|
17
|
+
import { nextTokenIdToMint } from "../../__generated__/IERC721Enumerable/read/nextTokenIdToMint.js";
|
17
18
|
import {
|
18
19
|
lazyMint as generatedLazyMint,
|
19
20
|
isLazyMintSupported,
|
@@ -80,16 +81,29 @@ export function createDelayedRevealBatch(
|
|
80
81
|
return generatedLazyMint({
|
81
82
|
contract: options.contract,
|
82
83
|
asyncParams: async () => {
|
83
|
-
const placeholderUris = await
|
84
|
-
|
85
|
-
|
86
|
-
|
84
|
+
const [placeholderUris, startFileNumber] = await Promise.all([
|
85
|
+
upload({
|
86
|
+
client: options.contract.client,
|
87
|
+
files: Array(options.metadata.length).fill(
|
88
|
+
options.placeholderMetadata,
|
89
|
+
),
|
90
|
+
}),
|
91
|
+
nextTokenIdToMint({
|
92
|
+
contract: options.contract,
|
93
|
+
}),
|
94
|
+
]);
|
87
95
|
const placeholderUri = getBaseUriFromBatch(placeholderUris);
|
88
96
|
|
89
97
|
const uris = await upload({
|
90
98
|
client: options.contract.client,
|
91
99
|
files: options.metadata,
|
100
|
+
// IMPORTANT: File number has to be calculated properly otherwise the whole batch will break
|
101
|
+
// e.g: If you are uploading a second batch, the file name should never start from `0`
|
102
|
+
rewriteFileNames: {
|
103
|
+
fileStartNumber: Number(startFileNumber),
|
104
|
+
},
|
92
105
|
});
|
106
|
+
|
93
107
|
const baseUri = getBaseUriFromBatch(uris);
|
94
108
|
const baseUriId = await getBaseURICount({
|
95
109
|
contract: options.contract,
|
@@ -15,6 +15,8 @@ const farcasterIconUri =
|
|
15
15
|
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwMCIgaGVpZ2h0PSIxMDAwIiB2aWV3Qm94PSIwIDAgMTAwMCAxMDAwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cmVjdCB3aWR0aD0iMTAwMCIgaGVpZ2h0PSIxMDAwIiByeD0iMjAwIiBmaWxsPSIjODU1RENEIi8+CjxwYXRoIGQ9Ik0yNTcuNzc4IDE1NS41NTZINzQyLjIyMlY4NDQuNDQ0SDY3MS4xMTFWNTI4Ljg4OUg2NzAuNDE0QzY2Mi41NTQgNDQxLjY3NyA1ODkuMjU4IDM3My4zMzMgNTAwIDM3My4zMzNDNDEwLjc0MiAzNzMuMzMzIDMzNy40NDYgNDQxLjY3NyAzMjkuNTg2IDUyOC44ODlIMzI4Ljg4OVY4NDQuNDQ0SDI1Ny43NzhWMTU1LjU1NloiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xMjguODg5IDI1My4zMzNMMTU3Ljc3OCAzNTEuMTExSDE4Mi4yMjJWNzQ2LjY2N0MxNjkuOTQ5IDc0Ni42NjcgMTYwIDc1Ni42MTYgMTYwIDc2OC44ODlWNzk1LjU1NkgxNTUuNTU2QzE0My4yODMgNzk1LjU1NiAxMzMuMzMzIDgwNS41MDUgMTMzLjMzMyA4MTcuNzc4Vjg0NC40NDRIMzgyLjIyMlY4MTcuNzc4QzM4Mi4yMjIgODA1LjUwNSAzNzIuMjczIDc5NS41NTYgMzYwIDc5NS41NTZIMzU1LjU1NlY3NjguODg5QzM1NS41NTYgNzU2LjYxNiAzNDUuNjA2IDc0Ni42NjcgMzMzLjMzMyA3NDYuNjY3SDMwNi42NjdWMjUzLjMzM0gxMjguODg5WiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTY3NS41NTYgNzQ2LjY2N0M2NjMuMjgzIDc0Ni42NjcgNjUzLjMzMyA3NTYuNjE2IDY1My4zMzMgNzY4Ljg4OVY3OTUuNTU2SDY0OC44ODlDNjM2LjYxNiA3OTUuNTU2IDYyNi42NjcgODA1LjUwNSA2MjYuNjY3IDgxNy43NzhWODQ0LjQ0NEg4NzUuNTU2VjgxNy43NzhDODc1LjU1NiA4MDUuNTA1IDg2NS42MDYgNzk1LjU1NiA4NTMuMzMzIDc5NS41NTZIODQ4Ljg4OVY3NjguODg5Qzg0OC44ODkgNzU2LjYxNiA4MzguOTQgNzQ2LjY2NyA4MjYuNjY3IDc0Ni42NjdWMzUxLjExMUg4NTEuMTExTDg4MCAyNTMuMzMzSDcwMi4yMjJWNzQ2LjY2N0g2NzUuNTU2WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==";
|
16
16
|
const telegramIconUri =
|
17
17
|
"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTAwMHB4IiBoZWlnaHQ9IjEwMDBweCIgdmlld0JveD0iMCAwIDEwMDAgMTAwMCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KICAgIDwhLS0gR2VuZXJhdG9yOiBTa2V0Y2ggNTMuMiAoNzI2NDMpIC0gaHR0cHM6Ly9za2V0Y2hhcHAuY29tIC0tPgogICAgPHRpdGxlPkFydGJvYXJkPC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGRlZnM+CiAgICAgICAgPGxpbmVhckdyYWRpZW50IHgxPSI1MCUiIHkxPSIwJSIgeDI9IjUwJSIgeTI9Ijk5LjI1ODM0MDQlIiBpZD0ibGluZWFyR3JhZGllbnQtMSI+CiAgICAgICAgICAgIDxzdG9wIHN0b3AtY29sb3I9IiMyQUFCRUUiIG9mZnNldD0iMCUiPjwvc3RvcD4KICAgICAgICAgICAgPHN0b3Agc3RvcC1jb2xvcj0iIzIyOUVEOSIgb2Zmc2V0PSIxMDAlIj48L3N0b3A+CiAgICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDwvZGVmcz4KICAgIDxnIGlkPSJBcnRib2FyZCIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgZmlsbD0idXJsKCNsaW5lYXJHcmFkaWVudC0xKSIgY3g9IjUwMCIgY3k9IjUwMCIgcj0iNTAwIj48L2NpcmNsZT4KICAgICAgICA8cGF0aCBkPSJNMjI2LjMyODQxOSw0OTQuNzIyMDY5IEMzNzIuMDg4NTczLDQzMS4yMTY2ODUgNDY5LjI4NDgzOSwzODkuMzUwMDQ5IDUxNy45MTcyMTYsMzY5LjEyMjE2MSBDNjU2Ljc3MjUzNSwzMTEuMzY3NDMgNjg1LjYyNTQ4MSwzMDEuMzM0ODE1IDcwNC40MzE0MjcsMzAxLjAwMzUzMiBDNzA4LjU2NzYyMSwzMDAuOTMwNjcgNzE3LjgxNTgzOSwzMDEuOTU1NzQzIDcyMy44MDY0NDYsMzA2LjgxNjcwNyBDNzI4Ljg2NDc5NywzMTAuOTIxMjEgNzMwLjI1NjU1MiwzMTYuNDY1ODEgNzMwLjkyMjU1MSwzMjAuMzU3MzI5IEM3MzEuNTg4NTUxLDMyNC4yNDg4NDggNzMyLjQxNzg3OSwzMzMuMTEzODI4IDczMS43NTg2MjYsMzQwLjA0MDY2NiBDNzI0LjIzNDAwNyw0MTkuMTAyNDg2IDY5MS42NzUxMDQsNjEwLjk2NDY3NCA2NzUuMTEwOTgyLDY5OS41MTUyNjcgQzY2OC4xMDIwOCw3MzYuOTg0MzQyIDY1NC4zMDEzMzYsNzQ5LjU0NzUzMiA2NDAuOTQwNjE4LDc1MC43NzcwMDYgQzYxMS45MDQ2ODQsNzUzLjQ0ODkzOCA1ODkuODU2MTE1LDczMS41ODgwMzUgNTYxLjczMzM5Myw3MTMuMTUzMjM3IEM1MTcuNzI2ODg2LDY4NC4zMDY0MTYgNDkyLjg2NjAwOSw2NjYuMzQ5MTgxIDQ1MC4xNTAwNzQsNjM4LjIwMDAxMyBDNDAwLjc4NDQyLDYwNS42Njg3OCA0MzIuNzg2MTE5LDU4Ny43ODkwNDggNDYwLjkxOTQ2Miw1NTguNTY4NTYzIEM0NjguMjgyMDkxLDU1MC45MjE0MjMgNTk2LjIxNTA4LDQzNC41NTY0NzkgNTk4LjY5MTIyNyw0MjQuMDAwMzU1IEM1OTkuMDAwOTEsNDIyLjY4MDEzNSA1OTkuMjg4MzEyLDQxNy43NTg5ODEgNTk2LjM2NDc0LDQxNS4xNjA0MzEgQzU5My40NDExNjgsNDEyLjU2MTg4MSA1ODkuMTI2MjI5LDQxMy40NTA0ODQgNTg2LjAxMjQ0OCw0MTQuMTU3MTk4IEM1ODEuNTk4NzU4LDQxNS4xNTg5NDMgNTExLjI5Nzc5Myw0NjEuNjI1Mjc0IDM3NS4xMDk1NTMsNTUzLjU1NjE4OSBDMzU1LjE1NDg1OCw1NjcuMjU4NjIzIDMzNy4wODA1MTUsNTczLjkzNDkwOCAzMjAuODg2NTI0LDU3My41ODUwNDYgQzMwMy4wMzM5NDgsNTczLjE5OTM1MSAyNjguNjkyNzU0LDU2My40OTA5MjggMjQzLjE2MzYwNiw1NTUuMTkyNDA4IEMyMTEuODUxMDY3LDU0NS4wMTM5MzYgMTg2Ljk2NDQ4NCw1MzkuNjMyNTA0IDE4OS4xMzE1NDcsNTIyLjM0NjMwOSBDMTkwLjI2MDI4Nyw1MTMuMzQyNTg5IDIwMi42NTkyNDQsNTA0LjEzNDUwOSAyMjYuMzI4NDE5LDQ5NC43MjIwNjkgWiIgaWQ9IlBhdGgtMyIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogICAgPC9nPgo8L3N2Zz4=";
|
18
|
+
const twitchIconUri =
|
19
|
+
"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgMjQwMCAyODAwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyNDAwIDI4MDA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojRkZGRkZGO30KCS5zdDF7ZmlsbDojOTE0NkZGO30KPC9zdHlsZT4KPHRpdGxlPkFzc2V0IDI8L3RpdGxlPgo8Zz4KCTxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iMjIwMCwxMzAwIDE4MDAsMTcwMCAxNDAwLDE3MDAgMTA1MCwyMDUwIDEwNTAsMTcwMCA2MDAsMTcwMCA2MDAsMjAwIDIyMDAsMjAwIAkiLz4KCTxnPgoJCTxnIGlkPSJMYXllcl8xLTIiPgoJCQk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNNTAwLDBMMCw1MDB2MTgwMGg2MDB2NTAwbDUwMC01MDBoNDAwbDkwMC05MDBWMEg1MDB6IE0yMjAwLDEzMDBsLTQwMCw0MDBoLTQwMGwtMzUwLDM1MHYtMzUwSDYwMFYyMDBoMTYwMAoJCQkJVjEzMDB6Ii8+CgkJCTxyZWN0IHg9IjE3MDAiIHk9IjU1MCIgY2xhc3M9InN0MSIgd2lkdGg9IjIwMCIgaGVpZ2h0PSI2MDAiLz4KCQkJPHJlY3QgeD0iMTE1MCIgeT0iNTUwIiBjbGFzcz0ic3QxIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjYwMCIvPgoJCTwvZz4KCTwvZz4KPC9nPgo8L3N2Zz4K";
|
18
20
|
const xIcon =
|
19
21
|
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIwIiBoZWlnaHQ9IjMyMCIgdmlld0JveD0iMCAwIDMyMCAzMjAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIzMjAiIGhlaWdodD0iMzIwIiByeD0iMjQiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xNzcuMzE1IDE0NS4zMzVMMjQ1LjA2OCA2N0gyMjkuMDEzTDE3MC4xODIgMTM1LjAxN0wxMjMuMTk1IDY3SDY5TDE0MC4wNTUgMTY5Ljg1NEw2OSAyNTJIODUuMDU2M0wxNDcuMTgzIDE4MC4xNzJMMTk2LjgwNSAyNTJIMjUxTDE3Ny4zMTEgMTQ1LjMzNUgxNzcuMzE1Wk0xNTUuMzIzIDE3MC43NkwxNDguMTI0IDE2MC41MThMOTAuODQxNyA3OS4wMjJIMTE1LjUwM0wxNjEuNzMxIDE0NC43OTJMMTY4LjkzIDE1NS4wMzRMMjI5LjAyIDI0MC41MjVIMjA0LjM1OUwxNTUuMzIzIDE3MC43NjRWMTcwLjc2WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==";
|
20
22
|
export const emailIcon =
|
@@ -40,6 +42,7 @@ export const socialIcons = {
|
|
40
42
|
x: xIcon,
|
41
43
|
farcaster: farcasterIconUri,
|
42
44
|
telegram: telegramIconUri,
|
45
|
+
twitch: twitchIconUri,
|
43
46
|
};
|
44
47
|
|
45
48
|
// TODO: this should return actual <svg> elements so they can be themed
|
@@ -69,6 +72,8 @@ export function getWalletIcon(provider: string) {
|
|
69
72
|
return farcasterIconUri;
|
70
73
|
case "telegram":
|
71
74
|
return telegramIconUri;
|
75
|
+
case "twitch":
|
76
|
+
return twitchIconUri;
|
72
77
|
case "guest":
|
73
78
|
return guestIcon;
|
74
79
|
default:
|
@@ -1,4 +1,6 @@
|
|
1
1
|
import { useQuery } from "@tanstack/react-query";
|
2
|
+
import type { ThirdwebClient } from "../../../../client/client.js";
|
3
|
+
import { resolveScheme } from "../../../../utils/ipfs.js";
|
2
4
|
import { nativeLocalStorage } from "../../../../utils/storage/nativeStorage.js";
|
3
5
|
import { getWalletInfo } from "../../../../wallets/__generated__/getWalletInfo.js";
|
4
6
|
import type { Wallet } from "../../../../wallets/interfaces/wallet.js";
|
@@ -17,6 +19,7 @@ import {
|
|
17
19
|
PASSKEY_ICON,
|
18
20
|
PHONE_ICON,
|
19
21
|
TELEGRAM_ICON,
|
22
|
+
TWITCH_ICON,
|
20
23
|
WALLET_ICON,
|
21
24
|
X_ICON,
|
22
25
|
} from "../icons/svgs.js";
|
@@ -25,10 +28,11 @@ import { RNImage } from "./RNImage.js";
|
|
25
28
|
export const WalletImage = (props: {
|
26
29
|
theme: Theme;
|
27
30
|
wallet: Wallet;
|
31
|
+
client: ThirdwebClient;
|
28
32
|
size: number;
|
29
33
|
avatar?: string | null;
|
30
34
|
}) => {
|
31
|
-
const { wallet, avatar, size } = props;
|
35
|
+
const { wallet, avatar, size, client } = props;
|
32
36
|
|
33
37
|
const { data: imageData } = useQuery({
|
34
38
|
queryKey: ["wallet-image", wallet.id, wallet.getAccount()?.address],
|
@@ -55,7 +59,7 @@ export const WalletImage = (props: {
|
|
55
59
|
try {
|
56
60
|
const externalWalletImage = await getWalletInfo(activeEOAId, true);
|
57
61
|
if (externalWalletImage) {
|
58
|
-
return externalWalletImage;
|
62
|
+
return resolveScheme({ client, uri: externalWalletImage });
|
59
63
|
}
|
60
64
|
} catch {}
|
61
65
|
|
@@ -99,6 +103,8 @@ export function getAuthProviderImage(authProvider: string | null): string {
|
|
99
103
|
return FARCASTER_ICON;
|
100
104
|
case "telegram":
|
101
105
|
return TELEGRAM_ICON;
|
106
|
+
case "twitch":
|
107
|
+
return TWITCH_ICON;
|
102
108
|
case "guest":
|
103
109
|
return GUEST_ICON;
|
104
110
|
default:
|
@@ -2,6 +2,7 @@ import { useCallback, useState } from "react";
|
|
2
2
|
import { Platform, StyleSheet, View } from "react-native";
|
3
3
|
import { SvgXml } from "react-native-svg";
|
4
4
|
import type { Chain } from "../../../../chains/types.js";
|
5
|
+
import type { ThirdwebClient } from "../../../../client/client.js";
|
5
6
|
import type { MultiStepAuthProviderType } from "../../../../wallets/in-app/core/authentication/types.js";
|
6
7
|
import type { InAppWalletAuth } from "../../../../wallets/in-app/core/wallet/types.js";
|
7
8
|
import type { Wallet } from "../../../../wallets/interfaces/wallet.js";
|
@@ -269,6 +270,7 @@ export function ConnectModal(
|
|
269
270
|
<WalletLoadingView
|
270
271
|
theme={theme}
|
271
272
|
wallet={modalState.wallet}
|
273
|
+
client={client}
|
272
274
|
authProvider={modalState.authMethod}
|
273
275
|
/>
|
274
276
|
{containerType === "modal" ? (
|
@@ -328,6 +330,7 @@ export function ConnectModal(
|
|
328
330
|
)}
|
329
331
|
<SignInView
|
330
332
|
theme={theme}
|
333
|
+
client={client}
|
331
334
|
siweAuth={siweAuth}
|
332
335
|
onSignIn={() => props.onClose?.()}
|
333
336
|
onError={(error) => setModalState({ screen: "error", error })}
|
@@ -462,10 +465,12 @@ export function ConnectModal(
|
|
462
465
|
function WalletLoadingView({
|
463
466
|
theme,
|
464
467
|
wallet,
|
468
|
+
client,
|
465
469
|
authProvider,
|
466
470
|
}: {
|
467
471
|
theme: Theme;
|
468
472
|
wallet: Wallet;
|
473
|
+
client: ThirdwebClient;
|
469
474
|
authProvider?: InAppWalletAuth;
|
470
475
|
}) {
|
471
476
|
const walletInfo = useWalletInfo(wallet.id);
|
@@ -500,7 +505,12 @@ function WalletLoadingView({
|
|
500
505
|
/>
|
501
506
|
</View>
|
502
507
|
) : (
|
503
|
-
<WalletImage
|
508
|
+
<WalletImage
|
509
|
+
theme={theme}
|
510
|
+
size={90}
|
511
|
+
wallet={wallet}
|
512
|
+
client={client}
|
513
|
+
/>
|
504
514
|
)}
|
505
515
|
</WalletLoadingThumbnail>
|
506
516
|
<Spacer size="xl" />
|
@@ -522,12 +532,14 @@ function WalletLoadingView({
|
|
522
532
|
function SignInView({
|
523
533
|
theme,
|
524
534
|
siweAuth,
|
535
|
+
client,
|
525
536
|
onSignIn,
|
526
537
|
onError,
|
527
538
|
onDisconnect,
|
528
539
|
}: {
|
529
540
|
theme: Theme;
|
530
541
|
siweAuth: ReturnType<typeof useSiweAuth>;
|
542
|
+
client: ThirdwebClient;
|
531
543
|
onSignIn: () => void;
|
532
544
|
onError: (error: string) => void;
|
533
545
|
onDisconnect: () => void;
|
@@ -552,7 +564,12 @@ function SignInView({
|
|
552
564
|
imageSize={100}
|
553
565
|
animate={isSigningIn}
|
554
566
|
>
|
555
|
-
<WalletImage
|
567
|
+
<WalletImage
|
568
|
+
theme={theme}
|
569
|
+
size={90}
|
570
|
+
wallet={wallet}
|
571
|
+
client={client}
|
572
|
+
/>
|
556
573
|
</WalletLoadingThumbnail>
|
557
574
|
<Spacer size="xl" />
|
558
575
|
<ThemedText theme={theme} type="subtitle">
|
@@ -20,7 +20,7 @@ export function ConnectedButton(
|
|
20
20
|
},
|
21
21
|
) {
|
22
22
|
const theme = parseTheme(props.theme);
|
23
|
-
const { account, wallet } = props;
|
23
|
+
const { account, wallet, client } = props;
|
24
24
|
const walletChain = useActiveWalletChain();
|
25
25
|
const { pfp, name, balanceQuery } = useConnectedWalletDetails(
|
26
26
|
props.client,
|
@@ -40,7 +40,13 @@ export function ConnectedButton(
|
|
40
40
|
}}
|
41
41
|
>
|
42
42
|
<View style={styles.row}>
|
43
|
-
<WalletImage
|
43
|
+
<WalletImage
|
44
|
+
theme={theme}
|
45
|
+
size={40}
|
46
|
+
wallet={wallet}
|
47
|
+
avatar={pfp}
|
48
|
+
client={client}
|
49
|
+
/>
|
44
50
|
<View style={styles.col}>
|
45
51
|
<ThemedText
|
46
52
|
theme={theme}
|
@@ -85,6 +85,7 @@ export function ConnectedModal(props: ConnectedModalProps) {
|
|
85
85
|
<ReceiveScreen
|
86
86
|
account={props.account}
|
87
87
|
wallet={props.wallet}
|
88
|
+
client={props.client}
|
88
89
|
theme={theme}
|
89
90
|
containerType={props.containerType}
|
90
91
|
onBack={() => setModalState({ screen: "account" })}
|
@@ -161,7 +162,7 @@ export function ConnectedModal(props: ConnectedModalProps) {
|
|
161
162
|
}
|
162
163
|
|
163
164
|
const AccountHeader = (props: ConnectedModalProps) => {
|
164
|
-
const { account, wallet, theme } = props;
|
165
|
+
const { account, wallet, theme, client } = props;
|
165
166
|
const walletChain = useActiveWalletChain();
|
166
167
|
const { pfp, name, balanceQuery } = useConnectedWalletDetails(
|
167
168
|
props.client,
|
@@ -171,7 +172,13 @@ const AccountHeader = (props: ConnectedModalProps) => {
|
|
171
172
|
);
|
172
173
|
return (
|
173
174
|
<View style={styles.accountHeaderContainer}>
|
174
|
-
<WalletImage
|
175
|
+
<WalletImage
|
176
|
+
theme={theme}
|
177
|
+
size={70}
|
178
|
+
wallet={wallet}
|
179
|
+
avatar={pfp}
|
180
|
+
client={client}
|
181
|
+
/>
|
175
182
|
<SmartAccountBadge client={props.client} theme={theme} />
|
176
183
|
<Spacer size="smd" />
|
177
184
|
<Address account={account} theme={theme} addressOrENS={name} />
|
@@ -37,6 +37,7 @@ import {
|
|
37
37
|
GOOGLE_ICON,
|
38
38
|
LINE_ICON,
|
39
39
|
TELEGRAM_ICON,
|
40
|
+
TWITCH_ICON,
|
40
41
|
X_ICON,
|
41
42
|
} from "../icons/svgs.js";
|
42
43
|
import type { ModalState } from "./ConnectModal.js";
|
@@ -61,6 +62,7 @@ const socialIcons = {
|
|
61
62
|
x: X_ICON,
|
62
63
|
farcaster: FARCASTER_ICON,
|
63
64
|
telegram: TELEGRAM_ICON,
|
65
|
+
twitch: TWITCH_ICON,
|
64
66
|
};
|
65
67
|
|
66
68
|
type InAppWalletFormUIProps = {
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import { StyleSheet, View } from "react-native";
|
2
|
+
import type { ThirdwebClient } from "../../../../client/client.js";
|
2
3
|
import { shortenAddress } from "../../../../utils/address.js";
|
3
4
|
import type { Account, Wallet } from "../../../../wallets/interfaces/wallet.js";
|
4
5
|
import type { Theme } from "../../../core/design-system/index.js";
|
@@ -16,10 +17,12 @@ type ReceiveScreenProps = {
|
|
16
17
|
onClose?: () => void;
|
17
18
|
onBack?: () => void;
|
18
19
|
containerType: ContainerType;
|
20
|
+
client: ThirdwebClient;
|
19
21
|
};
|
20
22
|
|
21
23
|
export const ReceiveScreen = (props: ReceiveScreenProps) => {
|
22
|
-
const { wallet, account, theme, onClose, onBack, containerType } =
|
24
|
+
const { wallet, account, theme, onClose, onBack, containerType, client } =
|
25
|
+
props;
|
23
26
|
|
24
27
|
return (
|
25
28
|
<>
|
@@ -32,7 +35,7 @@ export const ReceiveScreen = (props: ReceiveScreenProps) => {
|
|
32
35
|
/>
|
33
36
|
<View style={styles.container}>
|
34
37
|
{/* TODO (rn) QR code scanning */}
|
35
|
-
<WalletImage theme={theme} wallet={wallet} size={80} />
|
38
|
+
<WalletImage theme={theme} wallet={wallet} size={80} client={client} />
|
36
39
|
<Spacer size="lg" />
|
37
40
|
<View
|
38
41
|
style={[
|
@@ -71,6 +71,26 @@ export const TELEGRAM_ICON = `<svg width={width} height={height} viewBox="0 0 10
|
|
71
71
|
</g>
|
72
72
|
</svg>`;
|
73
73
|
|
74
|
+
export const TWITCH_ICON = `<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
75
|
+
viewBox="0 0 2400 2800" style="enable-background:new 0 0 2400 2800;" xml:space="preserve">
|
76
|
+
<style type="text/css">
|
77
|
+
.st0{fill:#FFFFFF;}
|
78
|
+
.st1{fill:#9146FF;}
|
79
|
+
</style>
|
80
|
+
<title>Asset 2</title>
|
81
|
+
<g>
|
82
|
+
<polygon class="st0" points="2200,1300 1800,1700 1400,1700 1050,2050 1050,1700 600,1700 600,200 2200,200 "/>
|
83
|
+
<g>
|
84
|
+
<g id="Layer_1-2">
|
85
|
+
<path class="st1" d="M500,0L0,500v1800h600v500l500-500h400l900-900V0H500z M2200,1300l-400,400h-400l-350,350v-350H600V200h1600
|
86
|
+
V1300z"/>
|
87
|
+
<rect x="1700" y="550" class="st1" width="200" height="600"/>
|
88
|
+
<rect x="1150" y="550" class="st1" width="200" height="600"/>
|
89
|
+
</g>
|
90
|
+
</g>
|
91
|
+
</g>
|
92
|
+
</svg>`;
|
93
|
+
|
74
94
|
export const EMAIL_ICON = `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
75
95
|
<path d="M13.3335 2.6665H2.66683C1.93045 2.6665 1.3335 3.26346 1.3335 3.99984V11.9998C1.3335 12.7362 1.93045 13.3332 2.66683 13.3332H13.3335C14.0699 13.3332 14.6668 12.7362 14.6668 11.9998V3.99984C14.6668 3.26346 14.0699 2.6665 13.3335 2.6665Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/>
|
76
96
|
<path d="M14.6668 4.6665L8.68683 8.4665C8.48101 8.59545 8.24304 8.66384 8.00016 8.66384C7.75728 8.66384 7.51931 8.59545 7.3135 8.4665L1.3335 4.6665" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/>
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import { Suspense, useRef, useState } from "react";
|
2
2
|
import { defineChain } from "../../../../chains/utils.js";
|
3
3
|
import type { ThirdwebClient } from "../../../../client/client.js";
|
4
|
+
import { isEcosystemWallet } from "../../../../wallets/ecosystem/is-ecosystem-wallet.js";
|
4
5
|
import { linkProfile } from "../../../../wallets/in-app/web/lib/auth/index.js";
|
5
6
|
import type { Wallet } from "../../../../wallets/interfaces/wallet.js";
|
6
7
|
import type { EcosystemWalletId } from "../../../../wallets/wallet-types.js";
|
@@ -43,6 +44,12 @@ export function WalletAuth(props: {
|
|
43
44
|
);
|
44
45
|
const [error, setError] = useState<string | undefined>();
|
45
46
|
const [showAll, setShowAll] = useState<boolean>(false);
|
47
|
+
const ecosystem = isEcosystemWallet(wallet)
|
48
|
+
? {
|
49
|
+
id: wallet.id,
|
50
|
+
partnerId: wallet.getConfig()?.partnerId,
|
51
|
+
}
|
52
|
+
: undefined;
|
46
53
|
|
47
54
|
const back = () => {
|
48
55
|
setStatus("selecting");
|
@@ -59,6 +66,7 @@ export function WalletAuth(props: {
|
|
59
66
|
strategy: "wallet",
|
60
67
|
wallet: walletToLink,
|
61
68
|
chain: wallet.getChain() || defineChain(1),
|
69
|
+
ecosystem,
|
62
70
|
}).catch((e) => {
|
63
71
|
setError(e.message);
|
64
72
|
throw e;
|
@@ -114,6 +114,7 @@ export const ConnectWalletSocialOptions = (
|
|
114
114
|
coinbase: "Coinbase",
|
115
115
|
farcaster: "Farcaster",
|
116
116
|
telegram: "Telegram",
|
117
|
+
twitch: "Twitch",
|
117
118
|
};
|
118
119
|
|
119
120
|
const { data: ecosystemAuthOptions, isLoading } = useQuery({
|
@@ -262,6 +263,7 @@ export const ConnectWalletSocialOptions = (
|
|
262
263
|
closeOpenedWindow: (openedWindow: Window) => {
|
263
264
|
openedWindow.close();
|
264
265
|
},
|
266
|
+
ecosystem: ecosystemInfo,
|
265
267
|
};
|
266
268
|
|
267
269
|
const connectPromise = (() => {
|