From 76533bb3a2a9bd885e9cc2be5e62e43c546aaefa Mon Sep 17 00:00:00 2001 From: Corban Riley Date: Tue, 22 Apr 2025 13:46:57 -0400 Subject: [PATCH 1/2] Signup method automatically logins if wallet selector returns a wallet --- packages/wallet/wdk/src/sequence/wallets.ts | 33 ++++++++++++++++----- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/packages/wallet/wdk/src/sequence/wallets.ts b/packages/wallet/wdk/src/sequence/wallets.ts index 67557ad34..7e95e2e07 100644 --- a/packages/wallet/wdk/src/sequence/wallets.ts +++ b/packages/wallet/wdk/src/sequence/wallets.ts @@ -67,6 +67,17 @@ export type LoginToPasskeyArgs = { export type LoginArgs = LoginToWalletArgs | LoginToMnemonicArgs | LoginToPasskeyArgs +export type SignupResult = + | { + type: 'signup' + wallet: Address.Address + } + | { + type: 'login' + wallet: Address.Address + requestId: string + } + export function isLoginToWalletArgs(args: LoginArgs): args is LoginToWalletArgs { return 'wallet' in args } @@ -356,14 +367,14 @@ export class Wallets { return commitment.target } - async signUp(args: SignupArgs) { + async signUp(args: SignupArgs): Promise { const loginSigner = await this.prepareSignUp(args) // If there is an existing wallet callback, we check if any wallet already exist for this login signer if (this.walletSelectionUiHandler) { const existingWallets = await State.getWalletsFor(this.shared.sequence.stateProvider, loginSigner.signer) if (existingWallets.length > 0) { - const result = await this.walletSelectionUiHandler({ + const selectedWallet = await this.walletSelectionUiHandler({ existingWallets: existingWallets.map((w) => w.wallet), signerAddress: await loginSigner.signer.address, context: isAuthCodePkceArgs(args) @@ -376,9 +387,17 @@ export class Wallets { }, }) - if (result) { - // A wallet was selected, we can exit early - return + if (selectedWallet) { + // If a wallet was selected, we login to it + const requestId = await this.login({ + wallet: selectedWallet, + }) + + return { + type: 'login', + wallet: selectedWallet, + requestId, + } } } } else { @@ -459,10 +478,10 @@ export class Wallets { useGuard: !args.noGuard, }) - return wallet.address + return { type: 'signup', wallet: wallet.address } } - async login(args: LoginArgs): Promise { + async login(args: LoginArgs): Promise { if (isLoginToWalletArgs(args)) { const prevWallet = await this.exists(args.wallet) if (prevWallet) { From 651e6f6e8ef87feb05d71cc6cd91b624d5defa54 Mon Sep 17 00:00:00 2001 From: Corban Riley Date: Tue, 22 Apr 2025 13:48:05 -0400 Subject: [PATCH 2/2] Ensure selected wallet is an existing wallet --- packages/wallet/wdk/src/sequence/wallets.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/wallet/wdk/src/sequence/wallets.ts b/packages/wallet/wdk/src/sequence/wallets.ts index 7e95e2e07..4f96e5477 100644 --- a/packages/wallet/wdk/src/sequence/wallets.ts +++ b/packages/wallet/wdk/src/sequence/wallets.ts @@ -348,7 +348,7 @@ export class Wallets { } if (commitment.isSignUp) { - await this.signUp({ + const result = await this.signUp({ kind: commitment.kind, commitment, code: args.code, @@ -387,7 +387,7 @@ export class Wallets { }, }) - if (selectedWallet) { + if (selectedWallet && existingWallets.some((wallet) => wallet.wallet === selectedWallet)) { // If a wallet was selected, we login to it const requestId = await this.login({ wallet: selectedWallet,