diff --git a/.changeset/dirty-camels-shave.md b/.changeset/dirty-camels-shave.md new file mode 100644 index 00000000000..c8fdae08509 --- /dev/null +++ b/.changeset/dirty-camels-shave.md @@ -0,0 +1,5 @@ +--- +"@thirdweb-dev/react-native": patch +--- + +Adds ability to delete the active ews account diff --git a/packages/react-native/src/evm/wallets/connectors/embedded-wallet/embedded-connector.ts b/packages/react-native/src/evm/wallets/connectors/embedded-wallet/embedded-connector.ts index b01b3a0497a..14999a620a7 100644 --- a/packages/react-native/src/evm/wallets/connectors/embedded-wallet/embedded-connector.ts +++ b/packages/react-native/src/evm/wallets/connectors/embedded-wallet/embedded-connector.ts @@ -14,6 +14,7 @@ import { utils } from "ethers"; import { authEndpoint, customJwt, + deleteActiveAccount, sendVerificationEmail, socialLogin, validateEmailOTP, @@ -178,6 +179,10 @@ export class EmbeddedWalletConnector extends Connector { try { const { storedToken, email } = await socialLogin( diff --git a/packages/react-native/src/evm/wallets/connectors/embedded-wallet/embedded/auth.ts b/packages/react-native/src/evm/wallets/connectors/embedded-wallet/embedded/auth.ts index 38aded57990..07bd50becc1 100644 --- a/packages/react-native/src/evm/wallets/connectors/embedded-wallet/embedded/auth.ts +++ b/packages/react-native/src/evm/wallets/connectors/embedded-wallet/embedded/auth.ts @@ -6,6 +6,7 @@ import { SendEmailOtpReturnType, } from "@thirdweb-dev/wallets"; import { + deleteAccount, generateAuthTokenFromCognitoEmailOtp, getEmbeddedWalletUserDetail, sendUserManagedEmailOtp, @@ -372,3 +373,20 @@ export async function authEndpoint( ); } } + +export async function deleteActiveAccount(options: { + clientId: string; +}): Promise { + await verifyClientId(options.clientId); + + let result; + try { + result = await deleteAccount({ + clientId: options.clientId, + }); + } catch (e) { + throw new Error(createErrorMessage("Error deleting the active account", e)); + } + + return result; +} diff --git a/packages/react-native/src/evm/wallets/connectors/embedded-wallet/embedded/helpers/api/fetchers.ts b/packages/react-native/src/evm/wallets/connectors/embedded-wallet/embedded/helpers/api/fetchers.ts index 45e994378fd..064617fbb6e 100644 --- a/packages/react-native/src/evm/wallets/connectors/embedded-wallet/embedded/helpers/api/fetchers.ts +++ b/packages/react-native/src/evm/wallets/connectors/embedded-wallet/embedded/helpers/api/fetchers.ts @@ -1,6 +1,6 @@ import { CognitoUserSession } from "amazon-cognito-identity-js"; import { - ROUTE_GET_EMBEDDED_WALLET_DETAILS, + ROUTE_EMBEDDED_WALLET_DETAILS, ROUTE_STORE_USER_SHARES, ROUTE_VERIFY_THIRDWEB_CLIENT_ID, ROUTE_VERIFY_COGNITO_OTP, @@ -89,7 +89,7 @@ export async function getEmbeddedWalletUserDetail(args: { email?: string; clientId: string; }) { - const url = new URL(ROUTE_GET_EMBEDDED_WALLET_DETAILS); + const url = new URL(ROUTE_EMBEDDED_WALLET_DETAILS); if (args) { if (args.email) { url.searchParams.append("email", args.email); @@ -296,3 +296,22 @@ export async function getUserShares(clientId: string, getShareUrl: URL) { ); } } + +export async function deleteAccount(args: { clientId: string }) { + const url = new URL(ROUTE_EMBEDDED_WALLET_DETAILS); + const resp = await authFetchEmbeddedWalletUser( + { clientId: args.clientId }, + url.href, + { + method: "DELETE", + }, + ); + if (!resp.ok) { + const error = await resp.json(); + throw new Error( + `Something went wrong deleting the active account: ${error.message}`, + ); + } + + return await resp.json(); +} diff --git a/packages/react-native/src/evm/wallets/connectors/embedded-wallet/embedded/helpers/constants.ts b/packages/react-native/src/evm/wallets/connectors/embedded-wallet/embedded/helpers/constants.ts index a0840730b13..0276983287a 100644 --- a/packages/react-native/src/evm/wallets/connectors/embedded-wallet/embedded/helpers/constants.ts +++ b/packages/react-native/src/evm/wallets/connectors/embedded-wallet/embedded/helpers/constants.ts @@ -26,7 +26,7 @@ export const DOMAIN_URL_2023 = "https://embedded-wallet.thirdweb.com"; const BASE_URL_2023 = `${DOMAIN_URL_2023}/`; const ROUTE_2023_10_20_API_BASE_PATH = `${BASE_URL_2023}api/2023-10-20`; -export const ROUTE_GET_EMBEDDED_WALLET_DETAILS = `${ROUTE_2023_10_20_API_BASE_PATH}/embedded-wallet/embedded-wallet-user-details`; +export const ROUTE_EMBEDDED_WALLET_DETAILS = `${ROUTE_2023_10_20_API_BASE_PATH}/embedded-wallet/embedded-wallet-user-details`; export const ROUTE_VERIFY_COGNITO_OTP = `${ROUTE_2023_10_20_API_BASE_PATH}/embedded-wallet/validate-cognito-email-otp`; export const ROUTE_COGNITO_IDENTITY_POOL_URL = `cognito-idp.${AWS_REGION}.amazonaws.com/${COGNITO_USER_POOL_ID}`; diff --git a/packages/react-native/src/evm/wallets/wallets/embedded/EmbeddedWallet.ts b/packages/react-native/src/evm/wallets/wallets/embedded/EmbeddedWallet.ts index 8e730cc7b09..fcaa81cfc9c 100644 --- a/packages/react-native/src/evm/wallets/wallets/embedded/EmbeddedWallet.ts +++ b/packages/react-native/src/evm/wallets/wallets/embedded/EmbeddedWallet.ts @@ -83,6 +83,10 @@ export class EmbeddedWallet extends AbstractClientWallet< return connector.authenticate(params); } + async deleteActiveAccount() { + return this.connector?.deleteActiveAccount(); + } + getMeta(): WalletMeta { const strategy = this.connector?.getConnectedAuthStrategy(); const meta = (this.constructor as typeof AbstractClientWallet).meta;