Skip to content

Commit 0ca0d12

Browse files
[Wallets] Fix potential embedded wallet autoconnect race condition
1 parent 8ff87be commit 0ca0d12

File tree

3 files changed

+18
-17
lines changed

3 files changed

+18
-17
lines changed

.changeset/real-bags-marry.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@thirdweb-dev/wallets": patch
3+
---
4+
5+
Fix potential auto connection race condition

packages/wallets/src/evm/connectors/embedded-wallet/index.ts

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ export class EmbeddedWalletConnector extends Connector<EmbeddedWalletConnectionA
8989
if (!this.user) {
9090
throw new Error("Embedded Wallet is not connected");
9191
}
92-
return this.user.walletAddress;
92+
return await this.getSigner().then((signer) => signer.getAddress());
9393
}
9494

9595
async isConnected(): Promise<boolean> {
@@ -115,7 +115,7 @@ export class EmbeddedWalletConnector extends Connector<EmbeddedWalletConnectionA
115115
}
116116

117117
const user = await this.getUser();
118-
const signer = await user?.wallet.getEthersJsSigner({
118+
const signer = await user.wallet.getEthersJsSigner({
119119
rpcEndpoint: this.options.chain.rpc[0] || "", // TODO: handle chain.rpc being empty array
120120
});
121121

@@ -180,11 +180,11 @@ export class EmbeddedWalletConnector extends Connector<EmbeddedWalletConnectionA
180180
this.emit("disconnect");
181181
};
182182

183-
async getUser(): Promise<InitializedUser | null> {
183+
private async getUser(): Promise<InitializedUser> {
184184
if (
185185
!this.user ||
186186
!this.user.wallet ||
187-
typeof this.user.wallet.getEthersJsSigner !== "function"
187+
!this.user.wallet.getEthersJsSigner // when serializing, functions are lost
188188
) {
189189
const embeddedWalletSdk = this.getEmbeddedWalletSDK();
190190
const user = await embeddedWalletSdk.getUser();
@@ -195,25 +195,22 @@ export class EmbeddedWalletConnector extends Connector<EmbeddedWalletConnectionA
195195
}
196196
}
197197
}
198+
if (!this.user) {
199+
throw new Error(
200+
"No user found, Embedded Wallet is not authenticated, please authenticate first",
201+
);
202+
}
198203
return this.user;
199204
}
200205

201206
async getEmail() {
202-
// implicit call to set the user
203-
await this.getSigner();
204-
if (!this.user) {
205-
throw new Error("No user found, Embedded Wallet is not connected");
206-
}
207-
return this.user.authDetails.email;
207+
const user = await this.getUser();
208+
return user.authDetails.email;
208209
}
209210

210211
async getRecoveryInformation() {
211-
// implicit call to set the user
212-
await this.getSigner();
213-
if (!this.user) {
214-
throw new Error("No user found, Embedded Wallet is not connected");
215-
}
216-
return this.user.authDetails;
212+
const user = await this.getUser();
213+
return user.authDetails;
217214
}
218215

219216
async sendVerificationEmail({

packages/wallets/src/evm/connectors/embedded-wallet/types.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,5 +64,4 @@ export type AuthResult = {
6464
user?: InitializedUser;
6565
isNewUser?: boolean;
6666
needsRecoveryCode?: boolean;
67-
verifyOTP?: (otp: string, recoveryCode?: string) => Promise<AuthResult>;
6867
};

0 commit comments

Comments
 (0)