thirdweb 5.36.1-nightly-af4acc4319fdfb323778694bd8843bd695e52d6b-20240719161043 → 5.37.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/dist/cjs/extensions/erc4337/account/addSessionKey.js +1 -0
- package/dist/cjs/extensions/erc4337/account/addSessionKey.js.map +1 -1
- package/dist/cjs/react/core/utils/socialIcons.js +1 -0
- package/dist/cjs/react/core/utils/socialIcons.js.map +1 -1
- package/dist/cjs/react/native/ui/components/WalletImage.js +2 -0
- package/dist/cjs/react/native/ui/components/WalletImage.js.map +1 -1
- package/dist/cjs/react/native/ui/connect/ConnectModal.js +2 -2
- package/dist/cjs/react/native/ui/connect/InAppWalletUI.js +4 -3
- package/dist/cjs/react/native/ui/connect/InAppWalletUI.js.map +1 -1
- package/dist/cjs/react/native/ui/icons/svgs.js +8 -1
- package/dist/cjs/react/native/ui/icons/svgs.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/Details.js +11 -4
- package/dist/cjs/react/web/ui/ConnectWallet/Details.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/TransactionsScreen.js +4 -3
- package/dist/cjs/react/web/ui/ConnectWallet/TransactionsScreen.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/icons/ShuffleIconLucide.js +9 -0
- package/dist/cjs/react/web/ui/ConnectWallet/icons/ShuffleIconLucide.js.map +1 -0
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/BuyTxHistory.js +3 -2
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/BuyTxHistory.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/screens/WalletTransactionHistory.js +7 -6
- package/dist/cjs/react/web/ui/ConnectWallet/screens/WalletTransactionHistory.js.map +1 -1
- package/dist/cjs/react/web/ui/components/Modal.js +1 -4
- package/dist/cjs/react/web/ui/components/Modal.js.map +1 -1
- package/dist/cjs/react/web/ui/components/Tabs.js +8 -9
- package/dist/cjs/react/web/ui/components/Tabs.js.map +1 -1
- package/dist/cjs/react/web/ui/components/WalletImage.js +3 -0
- package/dist/cjs/react/web/ui/components/WalletImage.js.map +1 -1
- package/dist/cjs/react/web/ui/components/buttons.js +1 -1
- package/dist/cjs/react/web/wallets/shared/ConnectWalletSocialOptions.js +17 -3
- package/dist/cjs/react/web/wallets/shared/ConnectWalletSocialOptions.js.map +1 -1
- package/dist/cjs/react/web/wallets/shared/SocialLogin.js +12 -1
- package/dist/cjs/react/web/wallets/shared/SocialLogin.js.map +1 -1
- package/dist/cjs/react/web/wallets/shared/locale/en.js +1 -0
- package/dist/cjs/react/web/wallets/shared/locale/en.js.map +1 -1
- package/dist/cjs/react/web/wallets/shared/locale/es.js +1 -0
- package/dist/cjs/react/web/wallets/shared/locale/es.js.map +1 -1
- package/dist/cjs/react/web/wallets/shared/locale/ja.js +1 -0
- package/dist/cjs/react/web/wallets/shared/locale/ja.js.map +1 -1
- package/dist/cjs/react/web/wallets/shared/locale/tl.js +1 -0
- package/dist/cjs/react/web/wallets/shared/locale/tl.js.map +1 -1
- package/dist/cjs/react/web/wallets/shared/locale/vi.js +1 -0
- package/dist/cjs/react/web/wallets/shared/locale/vi.js.map +1 -1
- package/dist/cjs/react/web/wallets/shared/openOauthSignInWindow.js +11 -2
- package/dist/cjs/react/web/wallets/shared/openOauthSignInWindow.js.map +1 -1
- package/dist/cjs/transaction/actions/encode.js +55 -10
- package/dist/cjs/transaction/actions/encode.js.map +1 -1
- package/dist/cjs/transaction/actions/estimate-gas.js +1 -1
- package/dist/cjs/transaction/actions/estimate-gas.js.map +1 -1
- package/dist/cjs/transaction/prepare-contract-call.js +17 -0
- package/dist/cjs/transaction/prepare-contract-call.js.map +1 -1
- package/dist/cjs/transaction/prepare-transaction.js.map +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/version.js.map +1 -1
- package/dist/cjs/wallets/in-app/core/authentication/getLoginPath.js +17 -0
- package/dist/cjs/wallets/in-app/core/authentication/getLoginPath.js.map +1 -0
- package/dist/cjs/wallets/in-app/core/authentication/type.js +2 -0
- package/dist/cjs/wallets/in-app/core/authentication/type.js.map +1 -1
- package/dist/cjs/wallets/in-app/native/auth/native-auth.js +11 -2
- package/dist/cjs/wallets/in-app/native/auth/native-auth.js.map +1 -1
- package/dist/cjs/wallets/in-app/native/helpers/auth/middleware.js +4 -1
- package/dist/cjs/wallets/in-app/native/helpers/auth/middleware.js.map +1 -1
- package/dist/cjs/wallets/in-app/native/helpers/constants.js +10 -4
- package/dist/cjs/wallets/in-app/native/helpers/constants.js.map +1 -1
- package/dist/cjs/wallets/in-app/native/helpers/wallet/recoveryCode.js +47 -5
- package/dist/cjs/wallets/in-app/native/helpers/wallet/recoveryCode.js.map +1 -1
- package/dist/cjs/wallets/in-app/native/native-connector.js +1 -0
- package/dist/cjs/wallets/in-app/native/native-connector.js.map +1 -1
- package/dist/cjs/wallets/in-app/web/lib/auth/constants.js +5 -0
- package/dist/cjs/wallets/in-app/web/lib/auth/constants.js.map +1 -0
- package/dist/cjs/wallets/in-app/web/lib/auth/discord.js +72 -0
- package/dist/cjs/wallets/in-app/web/lib/auth/discord.js.map +1 -0
- package/dist/cjs/wallets/in-app/web/lib/auth/utils.js +18 -0
- package/dist/cjs/wallets/in-app/web/lib/auth/utils.js.map +1 -0
- package/dist/cjs/wallets/in-app/web/lib/web-connector.js +10 -0
- package/dist/cjs/wallets/in-app/web/lib/web-connector.js.map +1 -1
- package/dist/cjs/wallets/types.js +7 -0
- package/dist/cjs/wallets/types.js.map +1 -1
- package/dist/esm/extensions/erc4337/account/addSessionKey.js +1 -0
- package/dist/esm/extensions/erc4337/account/addSessionKey.js.map +1 -1
- package/dist/esm/react/core/utils/socialIcons.js +1 -0
- package/dist/esm/react/core/utils/socialIcons.js.map +1 -1
- package/dist/esm/react/native/ui/components/WalletImage.js +3 -1
- package/dist/esm/react/native/ui/components/WalletImage.js.map +1 -1
- package/dist/esm/react/native/ui/connect/ConnectModal.js +2 -2
- package/dist/esm/react/native/ui/connect/InAppWalletUI.js +5 -4
- package/dist/esm/react/native/ui/connect/InAppWalletUI.js.map +1 -1
- package/dist/esm/react/native/ui/icons/svgs.js +7 -0
- package/dist/esm/react/native/ui/icons/svgs.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/Details.js +12 -5
- package/dist/esm/react/web/ui/ConnectWallet/Details.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/TransactionsScreen.js +4 -3
- package/dist/esm/react/web/ui/ConnectWallet/TransactionsScreen.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/icons/ShuffleIconLucide.js +5 -0
- package/dist/esm/react/web/ui/ConnectWallet/icons/ShuffleIconLucide.js.map +1 -0
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/BuyTxHistory.js +3 -2
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/BuyTxHistory.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/screens/WalletTransactionHistory.js +7 -6
- package/dist/esm/react/web/ui/ConnectWallet/screens/WalletTransactionHistory.js.map +1 -1
- package/dist/esm/react/web/ui/components/Modal.js +1 -4
- package/dist/esm/react/web/ui/components/Modal.js.map +1 -1
- package/dist/esm/react/web/ui/components/Tabs.js +9 -10
- package/dist/esm/react/web/ui/components/Tabs.js.map +1 -1
- package/dist/esm/react/web/ui/components/WalletImage.js +4 -1
- package/dist/esm/react/web/ui/components/WalletImage.js.map +1 -1
- package/dist/esm/react/web/ui/components/buttons.js +1 -1
- package/dist/esm/react/web/wallets/shared/ConnectWalletSocialOptions.js +17 -3
- package/dist/esm/react/web/wallets/shared/ConnectWalletSocialOptions.js.map +1 -1
- package/dist/esm/react/web/wallets/shared/SocialLogin.js +12 -1
- package/dist/esm/react/web/wallets/shared/SocialLogin.js.map +1 -1
- package/dist/esm/react/web/wallets/shared/locale/en.js +1 -0
- package/dist/esm/react/web/wallets/shared/locale/en.js.map +1 -1
- package/dist/esm/react/web/wallets/shared/locale/es.js +1 -0
- package/dist/esm/react/web/wallets/shared/locale/es.js.map +1 -1
- package/dist/esm/react/web/wallets/shared/locale/ja.js +1 -0
- package/dist/esm/react/web/wallets/shared/locale/ja.js.map +1 -1
- package/dist/esm/react/web/wallets/shared/locale/tl.js +1 -0
- package/dist/esm/react/web/wallets/shared/locale/tl.js.map +1 -1
- package/dist/esm/react/web/wallets/shared/locale/vi.js +1 -0
- package/dist/esm/react/web/wallets/shared/locale/vi.js.map +1 -1
- package/dist/esm/react/web/wallets/shared/openOauthSignInWindow.js +11 -2
- package/dist/esm/react/web/wallets/shared/openOauthSignInWindow.js.map +1 -1
- package/dist/esm/transaction/actions/encode.js +53 -10
- package/dist/esm/transaction/actions/encode.js.map +1 -1
- package/dist/esm/transaction/actions/estimate-gas.js +1 -1
- package/dist/esm/transaction/actions/estimate-gas.js.map +1 -1
- package/dist/esm/transaction/prepare-contract-call.js +17 -0
- package/dist/esm/transaction/prepare-contract-call.js.map +1 -1
- package/dist/esm/transaction/prepare-transaction.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/dist/esm/wallets/in-app/core/authentication/getLoginPath.js +13 -0
- package/dist/esm/wallets/in-app/core/authentication/getLoginPath.js.map +1 -0
- package/dist/esm/wallets/in-app/core/authentication/type.js +2 -0
- package/dist/esm/wallets/in-app/core/authentication/type.js.map +1 -1
- package/dist/esm/wallets/in-app/native/auth/native-auth.js +11 -2
- package/dist/esm/wallets/in-app/native/auth/native-auth.js.map +1 -1
- package/dist/esm/wallets/in-app/native/helpers/auth/middleware.js +5 -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 +9 -3
- package/dist/esm/wallets/in-app/native/helpers/constants.js.map +1 -1
- package/dist/esm/wallets/in-app/native/helpers/wallet/recoveryCode.js +46 -6
- package/dist/esm/wallets/in-app/native/helpers/wallet/recoveryCode.js.map +1 -1
- package/dist/esm/wallets/in-app/native/native-connector.js +1 -0
- package/dist/esm/wallets/in-app/native/native-connector.js.map +1 -1
- package/dist/esm/wallets/in-app/web/lib/auth/constants.js +2 -0
- package/dist/esm/wallets/in-app/web/lib/auth/constants.js.map +1 -0
- package/dist/esm/wallets/in-app/web/lib/auth/discord.js +69 -0
- package/dist/esm/wallets/in-app/web/lib/auth/discord.js.map +1 -0
- package/dist/esm/wallets/in-app/web/lib/auth/utils.js +14 -0
- package/dist/esm/wallets/in-app/web/lib/auth/utils.js.map +1 -0
- package/dist/esm/wallets/in-app/web/lib/web-connector.js +10 -0
- package/dist/esm/wallets/in-app/web/lib/web-connector.js.map +1 -1
- package/dist/esm/wallets/types.js +6 -1
- package/dist/esm/wallets/types.js.map +1 -1
- package/dist/types/extensions/erc4337/account/addSessionKey.d.ts +2 -1
- package/dist/types/extensions/erc4337/account/addSessionKey.d.ts.map +1 -1
- package/dist/types/react/core/utils/socialIcons.d.ts +1 -0
- package/dist/types/react/core/utils/socialIcons.d.ts.map +1 -1
- package/dist/types/react/core/utils/storage.d.ts +1 -1
- package/dist/types/react/core/utils/storage.d.ts.map +1 -1
- package/dist/types/react/native/ui/components/WalletImage.d.ts.map +1 -1
- package/dist/types/react/native/ui/connect/InAppWalletUI.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/ui/ConnectWallet/Details.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/TransactionsScreen.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/icons/ShuffleIconLucide.d.ts +3 -0
- package/dist/types/react/web/ui/ConnectWallet/icons/ShuffleIconLucide.d.ts.map +1 -0
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/BuyTxHistory.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/WalletTransactionHistory.d.ts.map +1 -1
- package/dist/types/react/web/ui/components/Modal.d.ts.map +1 -1
- package/dist/types/react/web/ui/components/Tabs.d.ts.map +1 -1
- package/dist/types/react/web/ui/components/WalletImage.d.ts.map +1 -1
- package/dist/types/react/web/wallets/shared/ConnectWalletSocialOptions.d.ts +1 -1
- package/dist/types/react/web/wallets/shared/ConnectWalletSocialOptions.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/locale/en.d.ts +1 -0
- package/dist/types/react/web/wallets/shared/locale/en.d.ts.map +1 -1
- package/dist/types/react/web/wallets/shared/locale/es.d.ts +1 -0
- package/dist/types/react/web/wallets/shared/locale/es.d.ts.map +1 -1
- package/dist/types/react/web/wallets/shared/locale/ja.d.ts +1 -0
- package/dist/types/react/web/wallets/shared/locale/ja.d.ts.map +1 -1
- package/dist/types/react/web/wallets/shared/locale/tl.d.ts +1 -0
- package/dist/types/react/web/wallets/shared/locale/tl.d.ts.map +1 -1
- package/dist/types/react/web/wallets/shared/locale/types.d.ts +1 -0
- package/dist/types/react/web/wallets/shared/locale/types.d.ts.map +1 -1
- package/dist/types/react/web/wallets/shared/locale/vi.d.ts +1 -0
- package/dist/types/react/web/wallets/shared/locale/vi.d.ts.map +1 -1
- package/dist/types/react/web/wallets/shared/openOauthSignInWindow.d.ts +8 -1
- package/dist/types/react/web/wallets/shared/openOauthSignInWindow.d.ts.map +1 -1
- package/dist/types/transaction/actions/encode.d.ts +13 -0
- package/dist/types/transaction/actions/encode.d.ts.map +1 -1
- package/dist/types/transaction/prepare-contract-call.d.ts +17 -0
- package/dist/types/transaction/prepare-contract-call.d.ts.map +1 -1
- package/dist/types/transaction/prepare-transaction.d.ts +1 -0
- package/dist/types/transaction/prepare-transaction.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/dist/types/version.d.ts.map +1 -1
- package/dist/types/wallets/in-app/core/authentication/getLoginPath.d.ts +4 -0
- package/dist/types/wallets/in-app/core/authentication/getLoginPath.d.ts.map +1 -0
- package/dist/types/wallets/in-app/core/authentication/type.d.ts +3 -2
- package/dist/types/wallets/in-app/core/authentication/type.d.ts.map +1 -1
- package/dist/types/wallets/in-app/native/auth/native-auth.d.ts.map +1 -1
- package/dist/types/wallets/in-app/native/helpers/auth/middleware.d.ts.map +1 -1
- package/dist/types/wallets/in-app/native/helpers/constants.d.ts +18 -14
- package/dist/types/wallets/in-app/native/helpers/constants.d.ts.map +1 -1
- package/dist/types/wallets/in-app/native/helpers/wallet/recoveryCode.d.ts +3 -1
- package/dist/types/wallets/in-app/native/helpers/wallet/recoveryCode.d.ts.map +1 -1
- package/dist/types/wallets/in-app/native/native-connector.d.ts.map +1 -1
- package/dist/types/wallets/in-app/web/lib/auth/constants.d.ts +2 -0
- package/dist/types/wallets/in-app/web/lib/auth/constants.d.ts.map +1 -0
- package/dist/types/wallets/in-app/web/lib/auth/discord.d.ts +10 -0
- package/dist/types/wallets/in-app/web/lib/auth/discord.d.ts.map +1 -0
- package/dist/types/wallets/in-app/web/lib/auth/utils.d.ts +6 -0
- package/dist/types/wallets/in-app/web/lib/auth/utils.d.ts.map +1 -0
- package/dist/types/wallets/in-app/web/lib/web-connector.d.ts.map +1 -1
- package/dist/types/wallets/types.d.ts +2 -1
- package/dist/types/wallets/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/extensions/erc4337/account/addSessionKey.ts +2 -1
- package/src/react/core/utils/socialIcons.ts +1 -0
- package/src/react/core/utils/wait.test.ts +1 -1
- package/src/react/native/ui/components/WalletImage.tsx +3 -0
- package/src/react/native/ui/connect/ConnectModal.tsx +2 -2
- package/src/react/native/ui/connect/InAppWalletUI.tsx +9 -6
- package/src/react/native/ui/icons/svgs.ts +8 -0
- package/src/react/web/ui/ConnectWallet/Details.tsx +15 -5
- package/src/react/web/ui/ConnectWallet/TransactionsScreen.tsx +23 -23
- package/src/react/web/ui/ConnectWallet/icons/ShuffleIconLucide.tsx +24 -0
- package/src/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/BuyTxHistory.tsx +3 -2
- package/src/react/web/ui/ConnectWallet/screens/WalletTransactionHistory.tsx +19 -23
- package/src/react/web/ui/components/Modal.tsx +1 -4
- package/src/react/web/ui/components/Tabs.tsx +23 -18
- package/src/react/web/ui/components/WalletImage.tsx +4 -0
- package/src/react/web/ui/components/buttons.tsx +1 -1
- package/src/react/web/wallets/shared/ConnectWalletSocialOptions.tsx +23 -9
- package/src/react/web/wallets/shared/SocialLogin.tsx +12 -1
- package/src/react/web/wallets/shared/locale/en.ts +1 -0
- package/src/react/web/wallets/shared/locale/es.ts +1 -0
- package/src/react/web/wallets/shared/locale/ja.ts +1 -0
- package/src/react/web/wallets/shared/locale/tl.ts +1 -0
- package/src/react/web/wallets/shared/locale/types.ts +1 -0
- package/src/react/web/wallets/shared/locale/vi.ts +1 -0
- package/src/react/web/wallets/shared/openOauthSignInWindow.ts +28 -5
- package/src/transaction/actions/encode.test.ts +152 -3
- package/src/transaction/actions/encode.ts +59 -10
- package/src/transaction/actions/estimate-gas.ts +1 -1
- package/src/transaction/actions/to-serializable-transaction.test.ts +16 -0
- package/src/transaction/prepare-contract-call.test.ts +3 -5
- package/src/transaction/prepare-contract-call.ts +17 -0
- package/src/transaction/prepare-transaction.ts +1 -0
- package/src/utils/promise/wait.test.ts +1 -1
- package/src/version.ts +1 -1
- package/src/wallets/in-app/core/authentication/getLoginPath.ts +18 -0
- package/src/wallets/in-app/core/authentication/type.ts +3 -1
- package/src/wallets/in-app/native/auth/native-auth.ts +16 -6
- package/src/wallets/in-app/native/helpers/auth/middleware.ts +8 -2
- package/src/wallets/in-app/native/helpers/constants.ts +12 -3
- package/src/wallets/in-app/native/helpers/wallet/recoveryCode.ts +75 -8
- package/src/wallets/in-app/native/native-connector.ts +1 -0
- package/src/wallets/in-app/web/lib/auth/constants.ts +1 -0
- package/src/wallets/in-app/web/lib/auth/discord.ts +92 -0
- package/src/wallets/in-app/web/lib/auth/utils.ts +19 -0
- package/src/wallets/in-app/web/lib/web-connector.ts +11 -0
- package/src/wallets/types.ts +7 -1
@@ -1,13 +1,11 @@
|
|
1
|
-
import { describe, expect,
|
2
|
-
|
1
|
+
import { describe, expect, it } from "vitest";
|
3
2
|
import { TEST_WALLET_B } from "../../test/src/addresses.js";
|
4
|
-
|
5
3
|
import { USDT_CONTRACT_WITH_ABI } from "../../test/src/test-contracts.js";
|
6
4
|
import { toWei } from "../utils/units.js";
|
7
5
|
import { prepareContractCall } from "./prepare-contract-call.js";
|
8
6
|
|
9
|
-
describe("prepareContractCall", () => {
|
10
|
-
|
7
|
+
describe.runIf(process.env.TW_SECRET_KEY)("prepareContractCall", () => {
|
8
|
+
it("should prepare a contract call with ABI", () => {
|
11
9
|
const preparedTx = prepareContractCall({
|
12
10
|
contract: USDT_CONTRACT_WITH_ABI,
|
13
11
|
method: "transfer",
|
@@ -121,6 +121,23 @@ export type PrepareContractCallOptions<
|
|
121
121
|
* params: [to, value],
|
122
122
|
* });
|
123
123
|
* ```
|
124
|
+
*
|
125
|
+
* @example
|
126
|
+
* Passing extra call data to the transaction
|
127
|
+
* ```ts
|
128
|
+
* import { getContract, prepareContractCall } from "thirdweb";
|
129
|
+
* const contract = getContract({
|
130
|
+
* ..., // chain, address, client
|
131
|
+
* });
|
132
|
+
*
|
133
|
+
* const transaction = prepareContractCall({
|
134
|
+
* contract,
|
135
|
+
* method: "function transfer(address to, uint256 value)",
|
136
|
+
* params: [...],
|
137
|
+
* // The extra call data MUST be encoded to hex before passing
|
138
|
+
* extraCallData: "0x......."
|
139
|
+
* });
|
140
|
+
* ```
|
124
141
|
*/
|
125
142
|
export function prepareContractCall<
|
126
143
|
const TAbi extends Abi,
|
package/src/version.ts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export const version = "5.
|
1
|
+
export const version = "5.37.0";
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import type { ThirdwebClient } from "../../../../client/client.js";
|
2
|
+
import { getThirdwebBaseUrl } from "../../../../utils/domains.js";
|
3
|
+
import type { Ecosystem } from "../../web/types.js";
|
4
|
+
|
5
|
+
// TODO: make this generic for all auth providers
|
6
|
+
export const getDiscordLoginPath = (
|
7
|
+
client: ThirdwebClient,
|
8
|
+
ecosystem?: Ecosystem,
|
9
|
+
) => {
|
10
|
+
const baseUrl = `${getThirdwebBaseUrl("inAppWallet")}/api/2024-05-05/login/discord?clientId=${client.clientId}`;
|
11
|
+
if (ecosystem?.partnerId) {
|
12
|
+
return `${baseUrl}&ecosystemId=${ecosystem.id}&ecosystemPartnerId=${ecosystem.partnerId}`;
|
13
|
+
}
|
14
|
+
if (ecosystem) {
|
15
|
+
return `${baseUrl}&ecosystemId=${ecosystem.id}`;
|
16
|
+
}
|
17
|
+
return baseUrl;
|
18
|
+
};
|
@@ -61,6 +61,7 @@ export enum AuthProvider {
|
|
61
61
|
FACEBOOK = "Facebook",
|
62
62
|
APPLE = "Apple",
|
63
63
|
PASSKEY = "Passkey",
|
64
|
+
DISCORD = "Discord",
|
64
65
|
}
|
65
66
|
|
66
67
|
export type OauthOption = {
|
@@ -208,10 +209,11 @@ export type GetAuthenticatedUserParams = {
|
|
208
209
|
};
|
209
210
|
|
210
211
|
export const oauthStrategyToAuthProvider: Record<
|
211
|
-
|
212
|
+
SocialAuthOption,
|
212
213
|
AuthProvider
|
213
214
|
> = {
|
214
215
|
google: AuthProvider.GOOGLE,
|
215
216
|
facebook: AuthProvider.FACEBOOK,
|
216
217
|
apple: AuthProvider.APPLE,
|
218
|
+
discord: AuthProvider.DISCORD,
|
217
219
|
};
|
@@ -3,6 +3,7 @@ import type { CognitoUser } from "amazon-cognito-identity-js";
|
|
3
3
|
import { Auth } from "aws-amplify";
|
4
4
|
import * as WebBrowser from "expo-web-browser";
|
5
5
|
import type { ThirdwebClient } from "../../../../client/client.js";
|
6
|
+
import { getDiscordLoginPath } from "../../core/authentication/getLoginPath.js";
|
6
7
|
import {
|
7
8
|
AuthProvider,
|
8
9
|
type AuthStoredTokenWithCookieReturnType,
|
@@ -229,15 +230,24 @@ export async function socialLogin(
|
|
229
230
|
|
230
231
|
const { platformLoginLink } = json;
|
231
232
|
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
233
|
+
// Temporary fork for discord until we migrate all methods to the new auth flow
|
234
|
+
const loginUrl = (() => {
|
235
|
+
if (oauthOptions.provider === AuthProvider.DISCORD) {
|
236
|
+
return `${getDiscordLoginPath(client)}&redirectUrl=${encodeURIComponent(
|
237
|
+
oauthOptions.redirectUrl,
|
238
|
+
)}`;
|
239
|
+
} else {
|
240
|
+
return `${platformLoginLink}?developerClientId=${encodeURIComponent(
|
241
|
+
client.clientId,
|
242
|
+
)}&platform=${encodeURIComponent("mobile")}&redirectUrl=${encodeURIComponent(
|
243
|
+
oauthOptions.redirectUrl,
|
244
|
+
)}&authOption=${encodedProvider}`;
|
245
|
+
}
|
246
|
+
})();
|
237
247
|
|
238
248
|
// TODO platform specific code should be extracted out
|
239
249
|
const result = await WebBrowser.openAuthSessionAsync(
|
240
|
-
|
250
|
+
loginUrl,
|
241
251
|
oauthOptions.redirectUrl,
|
242
252
|
{
|
243
253
|
preferEphemeralSession: false,
|
@@ -11,7 +11,10 @@ import {
|
|
11
11
|
setWallerUserDetails,
|
12
12
|
} from "../storage/local.js";
|
13
13
|
import { setUpNewUserWallet } from "../wallet/creation.js";
|
14
|
-
import {
|
14
|
+
import {
|
15
|
+
getCognitoRecoveryPasswordV1,
|
16
|
+
getCognitoRecoveryPasswordV2,
|
17
|
+
} from "../wallet/recoveryCode.js";
|
15
18
|
import { setUpShareForNewDevice } from "../wallet/retrieval.js";
|
16
19
|
|
17
20
|
export async function preAuth(args: {
|
@@ -151,7 +154,10 @@ async function getRecoveryCode(
|
|
151
154
|
return recoveryCode;
|
152
155
|
} else {
|
153
156
|
try {
|
154
|
-
|
157
|
+
// temporary fork for discord until we migrate all methods to the new auth flow
|
158
|
+
const code = await (storedToken.authProvider === AuthProvider.DISCORD
|
159
|
+
? getCognitoRecoveryPasswordV2(client)
|
160
|
+
: getCognitoRecoveryPasswordV1(client));
|
155
161
|
return code;
|
156
162
|
} catch (e) {
|
157
163
|
throw new Error("Something went wrong getting cognito recovery code");
|
@@ -1,3 +1,5 @@
|
|
1
|
+
import { getThirdwebBaseUrl } from "../../../../utils/domains.js";
|
2
|
+
|
1
3
|
export const AUTH_SHARE_ID = 3;
|
2
4
|
export const AUTH_SHARE_INDEX = AUTH_SHARE_ID - 1;
|
3
5
|
export const NO_EXISTING_WALLET_FOUND_FOR_USER =
|
@@ -19,13 +21,18 @@ export const COGNITO_USER_POOL_ID = "us-west-2_UFwLcZIpq";
|
|
19
21
|
export const COGNITO_APP_CLIENT_ID = "2e02ha2ce6du13ldk8pai4h3d0";
|
20
22
|
export const COGNITO_IDENTITY_POOL_ID =
|
21
23
|
"us-west-2:2ad7ab1e-f48b-48a6-adfa-ac1090689c26";
|
22
|
-
export const
|
24
|
+
export const GENERATE_RECOVERY_PASSWORD_LAMBDA_FUNCTION_V1 =
|
23
25
|
"arn:aws:lambda:us-west-2:324457261097:function:recovery-share-password-GenerateRecoverySharePassw-bbE5ZbVAToil";
|
26
|
+
export const GENERATE_RECOVERY_PASSWORD_LAMBDA_FUNCTION_V2 =
|
27
|
+
"arn:aws:lambda:us-west-2:324457261097:function:lambda-thirdweb-auth-enc-key-prod-ThirdwebAuthEncKeyFunction";
|
28
|
+
export const GENERATE_RECOVERY_PASSWORD_LAMBDA_FUNCTION =
|
29
|
+
GENERATE_RECOVERY_PASSWORD_LAMBDA_FUNCTION_V2;
|
24
30
|
|
25
31
|
// TODO allow overriding domain
|
26
|
-
export const DOMAIN_URL_2023 = "
|
32
|
+
export const DOMAIN_URL_2023 = getThirdwebBaseUrl("inAppWallet");
|
27
33
|
const BASE_URL_2023 = `${DOMAIN_URL_2023}/`;
|
28
34
|
const ROUTE_2023_10_20_API_BASE_PATH = `${BASE_URL_2023}api/2023-10-20`;
|
35
|
+
const ROUTE_2024_05_05_API_BASE_PATH = `${BASE_URL_2023}api/2024-05-05`;
|
29
36
|
|
30
37
|
export const ROUTE_EMBEDDED_WALLET_DETAILS = `${ROUTE_2023_10_20_API_BASE_PATH}/embedded-wallet/embedded-wallet-user-details`;
|
31
38
|
export const ROUTE_VERIFY_COGNITO_OTP = `${ROUTE_2023_10_20_API_BASE_PATH}/embedded-wallet/validate-cognito-email-otp`;
|
@@ -43,4 +50,6 @@ export const ROUTE_IS_VALID_USER_MANAGED_OTP = `${ROUTE_2023_10_20_API_BASE_PATH
|
|
43
50
|
|
44
51
|
export const ROUTE_HEADLESS_OAUTH_LOGIN = `${ROUTE_2023_10_20_API_BASE_PATH}/embedded-wallet/headless-oauth-login-link`;
|
45
52
|
|
46
|
-
export const
|
53
|
+
export const ROUTE_AUTH_COGNITO_ID_TOKEN_V1 = `${ROUTE_2023_10_20_API_BASE_PATH}/embedded-wallet/cognito-id-token`;
|
54
|
+
export const ROUTE_AUTH_COGNITO_ID_TOKEN_V2 = `${ROUTE_2024_05_05_API_BASE_PATH}/login/web-token-exchange`;
|
55
|
+
export const ROUTE_AUTH_COGNITO_ID_TOKEN = ROUTE_AUTH_COGNITO_ID_TOKEN_V2;
|
@@ -1,20 +1,25 @@
|
|
1
1
|
import { InvokeCommand, LambdaClient } from "@aws-sdk/client-lambda";
|
2
|
-
import {
|
2
|
+
import {
|
3
|
+
fromCognitoIdentity,
|
4
|
+
fromCognitoIdentityPool,
|
5
|
+
} from "@aws-sdk/credential-providers";
|
3
6
|
import type { ThirdwebClient } from "../../../../../client/client.js";
|
4
7
|
import { stringToBytes } from "../../../../../utils/encoding/to-bytes.js";
|
5
8
|
import { authFetchEmbeddedWalletUser } from "../api/fetchers.js";
|
6
9
|
import {
|
7
10
|
AWS_REGION,
|
8
11
|
COGNITO_IDENTITY_POOL_ID,
|
9
|
-
|
10
|
-
|
12
|
+
GENERATE_RECOVERY_PASSWORD_LAMBDA_FUNCTION_V1,
|
13
|
+
GENERATE_RECOVERY_PASSWORD_LAMBDA_FUNCTION_V2,
|
14
|
+
ROUTE_AUTH_COGNITO_ID_TOKEN_V1,
|
15
|
+
ROUTE_AUTH_COGNITO_ID_TOKEN_V2,
|
11
16
|
ROUTE_COGNITO_IDENTITY_POOL_URL,
|
12
17
|
} from "../constants.js";
|
13
18
|
|
14
|
-
export async function
|
19
|
+
export async function getCognitoRecoveryPasswordV1(client: ThirdwebClient) {
|
15
20
|
const idTokenResponse = await authFetchEmbeddedWalletUser(
|
16
21
|
client,
|
17
|
-
|
22
|
+
ROUTE_AUTH_COGNITO_ID_TOKEN_V1,
|
18
23
|
{
|
19
24
|
method: "GET",
|
20
25
|
},
|
@@ -48,10 +53,8 @@ export async function getCognitoRecoveryPassword(client: ThirdwebClient) {
|
|
48
53
|
credentials: credentials,
|
49
54
|
});
|
50
55
|
|
51
|
-
const functionName = GENERATE_RECOVERY_PASSWORD_LAMBDA_FUNCTION;
|
52
|
-
|
53
56
|
const params = {
|
54
|
-
FunctionName:
|
57
|
+
FunctionName: GENERATE_RECOVERY_PASSWORD_LAMBDA_FUNCTION_V1,
|
55
58
|
Payload: stringToBytes(
|
56
59
|
JSON.stringify({
|
57
60
|
accessToken,
|
@@ -69,3 +72,67 @@ export async function getCognitoRecoveryPassword(client: ThirdwebClient) {
|
|
69
72
|
|
70
73
|
return result;
|
71
74
|
}
|
75
|
+
|
76
|
+
export async function getCognitoRecoveryPasswordV2(client: ThirdwebClient) {
|
77
|
+
const idTokenResponse = await authFetchEmbeddedWalletUser(
|
78
|
+
client,
|
79
|
+
ROUTE_AUTH_COGNITO_ID_TOKEN_V2,
|
80
|
+
{
|
81
|
+
method: "GET",
|
82
|
+
},
|
83
|
+
);
|
84
|
+
if (!idTokenResponse.ok) {
|
85
|
+
throw new Error(
|
86
|
+
`Failed to fetch id token from Cognito: ${JSON.stringify(
|
87
|
+
await idTokenResponse.json(),
|
88
|
+
null,
|
89
|
+
2,
|
90
|
+
)}`,
|
91
|
+
);
|
92
|
+
}
|
93
|
+
const idTokenResult = await idTokenResponse.json();
|
94
|
+
const { token, identityId, lambdaToken } = idTokenResult;
|
95
|
+
|
96
|
+
const cognitoIdentity = fromCognitoIdentity({
|
97
|
+
clientConfig: {
|
98
|
+
region: AWS_REGION,
|
99
|
+
},
|
100
|
+
identityId,
|
101
|
+
logins: {
|
102
|
+
"cognito-identity.amazonaws.com": token,
|
103
|
+
},
|
104
|
+
});
|
105
|
+
|
106
|
+
// ? Figure out how to potentially route things through API Gateway
|
107
|
+
const lambdaClient = new LambdaClient({
|
108
|
+
region: AWS_REGION,
|
109
|
+
credentials: cognitoIdentity,
|
110
|
+
});
|
111
|
+
|
112
|
+
const params = {
|
113
|
+
FunctionName: GENERATE_RECOVERY_PASSWORD_LAMBDA_FUNCTION_V2,
|
114
|
+
Payload: stringToBytes(
|
115
|
+
JSON.stringify({
|
116
|
+
token: lambdaToken,
|
117
|
+
}),
|
118
|
+
),
|
119
|
+
};
|
120
|
+
|
121
|
+
const data = await lambdaClient.send(new InvokeCommand(params));
|
122
|
+
|
123
|
+
if (!data.Payload) {
|
124
|
+
throw new Error("No payload");
|
125
|
+
}
|
126
|
+
const encKeyResult = JSON.parse(data.Payload.transformToString());
|
127
|
+
|
128
|
+
if (encKeyResult.statusCode !== 200) {
|
129
|
+
throw new Error(
|
130
|
+
"Failed to get recovery code",
|
131
|
+
JSON.parse(encKeyResult.body).message,
|
132
|
+
);
|
133
|
+
}
|
134
|
+
|
135
|
+
return (JSON.parse(encKeyResult.body) as { recoveryShareEncKey: string })
|
136
|
+
.recoveryShareEncKey;
|
137
|
+
}
|
138
|
+
export const getCognitoRecoveryPassword = getCognitoRecoveryPasswordV2;
|
@@ -0,0 +1 @@
|
|
1
|
+
export const DEFAULT_POP_UP_SIZE = "width=350, height=500";
|
@@ -0,0 +1,92 @@
|
|
1
|
+
import type { ThirdwebClient } from "../../../../../client/client.js";
|
2
|
+
import { getThirdwebBaseUrl } from "../../../../../utils/domains.js";
|
3
|
+
import type { AuthStoredTokenWithCookieReturnType } from "../../../../../wallets/in-app/core/authentication/type.js";
|
4
|
+
import { getDiscordLoginPath } from "../../../core/authentication/getLoginPath.js";
|
5
|
+
import type { Ecosystem } from "../../types.js";
|
6
|
+
import { DEFAULT_POP_UP_SIZE } from "./constants.js";
|
7
|
+
import { closeWindow } from "./utils.js";
|
8
|
+
|
9
|
+
export async function loginWithDiscord(options: {
|
10
|
+
client: ThirdwebClient;
|
11
|
+
ecosystem?: Ecosystem;
|
12
|
+
openedWindow?: Window | null | undefined;
|
13
|
+
closeOpenedWindow?: ((openedWindow: Window) => void) | undefined;
|
14
|
+
}): Promise<AuthStoredTokenWithCookieReturnType> {
|
15
|
+
let win = options.openedWindow;
|
16
|
+
let isWindowOpenedByFn = false;
|
17
|
+
if (!win) {
|
18
|
+
win = window.open(
|
19
|
+
getDiscordLoginPath(options.client, options.ecosystem),
|
20
|
+
"Login to discord",
|
21
|
+
DEFAULT_POP_UP_SIZE,
|
22
|
+
);
|
23
|
+
isWindowOpenedByFn = true;
|
24
|
+
}
|
25
|
+
if (!win) {
|
26
|
+
throw new Error("Something went wrong opening pop-up");
|
27
|
+
}
|
28
|
+
|
29
|
+
const result = await new Promise<AuthStoredTokenWithCookieReturnType>(
|
30
|
+
(resolve, reject) => {
|
31
|
+
// detect when the user closes the login window
|
32
|
+
const pollTimer = window.setInterval(async () => {
|
33
|
+
if (!win) {
|
34
|
+
return;
|
35
|
+
}
|
36
|
+
if (win.closed) {
|
37
|
+
clearInterval(pollTimer);
|
38
|
+
window.removeEventListener("message", messageListener);
|
39
|
+
reject(new Error("User closed login window"));
|
40
|
+
}
|
41
|
+
}, 1000);
|
42
|
+
|
43
|
+
const messageListener = async (
|
44
|
+
event: MessageEvent<{
|
45
|
+
eventType: string;
|
46
|
+
authResult?: AuthStoredTokenWithCookieReturnType;
|
47
|
+
errorString?: string;
|
48
|
+
}>,
|
49
|
+
) => {
|
50
|
+
if (event.origin !== getThirdwebBaseUrl("inAppWallet")) {
|
51
|
+
return;
|
52
|
+
}
|
53
|
+
if (typeof event.data !== "object") {
|
54
|
+
reject(new Error("Invalid event data"));
|
55
|
+
return;
|
56
|
+
}
|
57
|
+
|
58
|
+
switch (event.data.eventType) {
|
59
|
+
case "oauthSuccessResult": {
|
60
|
+
window.removeEventListener("message", messageListener);
|
61
|
+
clearInterval(pollTimer);
|
62
|
+
closeWindow({
|
63
|
+
isWindowOpenedByFn,
|
64
|
+
win,
|
65
|
+
closeOpenedWindow: options.closeOpenedWindow,
|
66
|
+
});
|
67
|
+
if (event.data.authResult) {
|
68
|
+
resolve(event.data.authResult);
|
69
|
+
}
|
70
|
+
break;
|
71
|
+
}
|
72
|
+
case "oauthFailureResult": {
|
73
|
+
window.removeEventListener("message", messageListener);
|
74
|
+
clearInterval(pollTimer);
|
75
|
+
closeWindow({
|
76
|
+
isWindowOpenedByFn,
|
77
|
+
win,
|
78
|
+
closeOpenedWindow: options.closeOpenedWindow,
|
79
|
+
});
|
80
|
+
reject(new Error(event.data.errorString));
|
81
|
+
break;
|
82
|
+
}
|
83
|
+
default: {
|
84
|
+
reject(new Error(`Invalid event type: ${event.data.eventType}`));
|
85
|
+
}
|
86
|
+
}
|
87
|
+
};
|
88
|
+
window.addEventListener("message", messageListener);
|
89
|
+
},
|
90
|
+
);
|
91
|
+
return result;
|
92
|
+
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
export const closeWindow = ({
|
2
|
+
isWindowOpenedByFn,
|
3
|
+
win,
|
4
|
+
closeOpenedWindow,
|
5
|
+
}: {
|
6
|
+
win?: Window | null;
|
7
|
+
isWindowOpenedByFn: boolean;
|
8
|
+
closeOpenedWindow?: (openedWindow: Window) => void;
|
9
|
+
}) => {
|
10
|
+
if (isWindowOpenedByFn) {
|
11
|
+
win?.close();
|
12
|
+
} else {
|
13
|
+
if (win && closeOpenedWindow) {
|
14
|
+
closeOpenedWindow(win);
|
15
|
+
} else if (win) {
|
16
|
+
win.close();
|
17
|
+
}
|
18
|
+
}
|
19
|
+
};
|
@@ -15,6 +15,7 @@ import {
|
|
15
15
|
import type { InAppConnector } from "../../core/interfaces/connector.js";
|
16
16
|
import type { InAppWalletConstructorType } from "../types.js";
|
17
17
|
import { InAppWalletIframeCommunicator } from "../utils/iFrameCommunication/InAppWalletIframeCommunicator.js";
|
18
|
+
import { loginWithDiscord } from "./auth/discord.js";
|
18
19
|
import { Auth, type AuthQuerierTypes } from "./auth/iframe-auth.js";
|
19
20
|
import { loginWithPasskey, registerPasskey } from "./auth/passkeys.js";
|
20
21
|
import { IFrameWallet } from "./in-app-account.js";
|
@@ -215,6 +216,16 @@ export class InAppWebConnector implements InAppConnector {
|
|
215
216
|
});
|
216
217
|
return this.auth.loginWithAuthToken(authToken);
|
217
218
|
}
|
219
|
+
case "discord": {
|
220
|
+
const authToken = await loginWithDiscord({
|
221
|
+
client: this.wallet.client,
|
222
|
+
ecosystem: this.wallet.ecosystem,
|
223
|
+
closeOpenedWindow: args.closeOpenedWindow,
|
224
|
+
openedWindow: args.openedWindow,
|
225
|
+
});
|
226
|
+
return this.auth.loginWithAuthToken(authToken);
|
227
|
+
}
|
228
|
+
|
218
229
|
default:
|
219
230
|
assertUnreachable(strategy);
|
220
231
|
}
|
package/src/wallets/types.ts
CHANGED
@@ -19,7 +19,13 @@ export type AppMetadata = {
|
|
19
19
|
logoUrl?: string;
|
20
20
|
};
|
21
21
|
|
22
|
-
export
|
22
|
+
export const socialAuthOptions = [
|
23
|
+
"google",
|
24
|
+
"apple",
|
25
|
+
"facebook",
|
26
|
+
"discord",
|
27
|
+
] as const;
|
28
|
+
export type SocialAuthOption = (typeof socialAuthOptions)[number];
|
23
29
|
|
24
30
|
export type AuthOption = "email" | "phone" | "passkey" | SocialAuthOption;
|
25
31
|
|