Skip to content

Commit b2d0f22

Browse files
committed
fix(clerk-js): cleanup solana authentication flow and improve error handling
Signed-off-by: Kenton Duprey <kenton@clerk.dev>
1 parent 69e9f28 commit b2d0f22

File tree

6 files changed

+222
-93
lines changed

6 files changed

+222
-93
lines changed

packages/clerk-js/src/core/resources/SignIn.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,7 @@ export class SignIn extends BaseResource implements SignInResource {
475475
identifier,
476476
generateSignature: generateSignatureWithSolana,
477477
strategy: 'web3_solana_signature',
478-
walletName: params?.walletName,
478+
walletName: params.walletName,
479479
});
480480
};
481481

@@ -1006,9 +1006,6 @@ class SignInFuture implements SignInFutureResource {
10061006
generateSignature = generateSignatureWithOKXWallet;
10071007
break;
10081008
case 'solana':
1009-
if (!params.walletName) {
1010-
throw new Error('walletName is required for solana web3 authentication');
1011-
}
10121009
identifier = await getSolanaIdentifier(params.walletName);
10131010
generateSignature = generateSignatureWithSolana;
10141011
break;

packages/clerk-js/src/ui/components/SignIn/SignInFactorOneSolanaWalletsCard.tsx

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { Card } from '@/ui/elements/Card';
77
import { useCardState, withCardStateProvider } from '@/ui/elements/contexts';
88
import { Header } from '@/ui/elements/Header';
99
import { Web3WalletButtons } from '@/ui/elements/Web3WalletButtons';
10-
import { handleError } from '@/ui/utils/errorHandler';
10+
import { web3CallbackErrorHandler } from '@/ui/utils/web3CallbackErrorHandler';
1111

1212
import { useSignInContext } from '../../contexts';
1313
import { useRouter } from '../../router';
@@ -18,23 +18,6 @@ const SignInFactorOneSolanaWalletsCardInner = () => {
1818
const router = useRouter();
1919
const ctx = useSignInContext();
2020

21-
const onSelect = async ({ walletName }: { walletName: string }) => {
22-
card.setLoading(walletName);
23-
try {
24-
await clerk.authenticateWithWeb3({
25-
strategy: 'web3_solana_signature',
26-
redirectUrl: ctx.afterSignInUrl || '/',
27-
signUpContinueUrl: ctx.isCombinedFlow ? '../create/continue' : ctx.signUpContinueUrl,
28-
customNavigate: router.navigate,
29-
secondFactorUrl: 'factor-two',
30-
walletName,
31-
});
32-
} catch (err) {
33-
handleError(err as Error, [], card.setError);
34-
card.setIdle();
35-
}
36-
};
37-
3821
const onBackLinkClick = () => {
3922
void router.navigate('../');
4023
};
@@ -52,7 +35,20 @@ const SignInFactorOneSolanaWalletsCardInner = () => {
5235
direction='col'
5336
gap={4}
5437
>
55-
<Web3WalletButtons onSelect={onSelect} />
38+
<Web3WalletButtons
39+
web3AuthCallback={({ walletName }) => {
40+
return clerk
41+
.authenticateWithWeb3({
42+
customNavigate: router.navigate,
43+
redirectUrl: ctx.afterSignInUrl || '/',
44+
secondFactorUrl: 'factor-two',
45+
signUpContinueUrl: ctx.isCombinedFlow ? '../create/continue' : ctx.signUpContinueUrl,
46+
strategy: 'web3_solana_signature',
47+
walletName,
48+
})
49+
.catch(err => web3CallbackErrorHandler(err, card.setError));
50+
}}
51+
/>
5652

5753
<BackLink
5854
boxElementDescriptor={descriptors.backRow}

packages/clerk-js/src/ui/components/SignUp/SignUpStartSolanaWalletsCard.tsx

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ import { Card } from '@/ui/elements/Card';
77
import { useCardState, withCardStateProvider } from '@/ui/elements/contexts';
88
import { Header } from '@/ui/elements/Header';
99
import { Web3WalletButtons } from '@/ui/elements/Web3WalletButtons';
10-
import { handleError } from '@/ui/utils/errorHandler';
11-
import { sleep } from '@/ui/utils/sleep';
10+
import { web3CallbackErrorHandler } from '@/ui/utils/web3CallbackErrorHandler';
1211

1312
import { useSignUpContext } from '../../contexts';
1413
import { useRouter } from '../../router';
@@ -19,28 +18,6 @@ const SignUpStartSolanaWalletsCardInner = () => {
1918
const router = useRouter();
2019
const ctx = useSignUpContext();
2120

22-
const onSelect = async ({ walletName }: { walletName: string }) => {
23-
card.setLoading(walletName);
24-
try {
25-
await clerk.authenticateWithWeb3({
26-
customNavigate: router.navigate,
27-
redirectUrl: ctx.afterSignUpUrl || '/',
28-
signUpContinueUrl: '../continue',
29-
unsafeMetadata: ctx.unsafeMetadata,
30-
strategy: 'web3_solana_signature',
31-
// TODO: Add support to pass legalAccepted status
32-
// legalAccepted: ,
33-
walletName,
34-
});
35-
} catch (err) {
36-
await sleep(1000);
37-
handleError(err as Error, [], card.setError);
38-
card.setIdle();
39-
}
40-
await sleep(5000);
41-
card.setIdle();
42-
};
43-
4421
const onBackLinkClick = () => {
4522
void router.navigate('../');
4623
};
@@ -58,7 +35,22 @@ const SignUpStartSolanaWalletsCardInner = () => {
5835
direction='col'
5936
gap={4}
6037
>
61-
<Web3WalletButtons onSelect={onSelect} />
38+
<Web3WalletButtons
39+
web3AuthCallback={({ walletName }) => {
40+
return clerk
41+
.authenticateWithWeb3({
42+
customNavigate: router.navigate,
43+
redirectUrl: ctx.afterSignUpUrl || '/',
44+
signUpContinueUrl: '../continue',
45+
strategy: 'web3_solana_signature',
46+
unsafeMetadata: ctx.unsafeMetadata,
47+
// TODO: Add support to pass legalAccepted status
48+
// legalAccepted: ,
49+
walletName,
50+
})
51+
.catch(err => web3CallbackErrorHandler(err, card.setError));
52+
}}
53+
/>
6254
<BackLink
6355
boxElementDescriptor={descriptors.backRow}
6456
linkElementDescriptor={descriptors.backLink}

0 commit comments

Comments
 (0)