Skip to content

Commit 1a4614e

Browse files
committed
aligning v2 auth with server-side validation
1 parent 0fdb3b8 commit 1a4614e

File tree

3 files changed

+23
-20
lines changed

3 files changed

+23
-20
lines changed

packages/blockchain-sdk-solana/src/auth/sign-message-v2/solana-sign-message-v2-token-generator.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,24 @@
11
import {
2+
bytesFromBase64,
23
jsonParseFromBase64,
34
type Token,
5+
TokenGenerator,
46
type TokenSigner,
57
} from '@dialectlabs/sdk';
6-
import { TokenGenerator } from '@dialectlabs/sdk';
78
import axios from 'axios';
8-
import { Buffer } from 'buffer/';
9-
import { bytesFromBase64 } from '@dialectlabs/sdk/src';
9+
import bs58 from 'bs58';
1010

1111
export class SolanaSignMessageV2TokenGenerator extends TokenGenerator {
1212
constructor(signer: TokenSigner, private readonly v2BaseUrl: string) {
1313
super(signer);
1414
}
1515

16-
override async generate(ttlSeconds: number): Promise<Token> {
16+
override async generate(): Promise<Token> {
1717
const prepareResponse = await axios.post<{ message: string }>(
1818
`${this.v2BaseUrl}/v2/auth/solana/prepare`,
1919
{ walletAddress: this.signer.subject },
2020
);
21+
2122
const messageToSign = prepareResponse.data.message;
2223

2324
const { signature } = await this.signer.sign(
@@ -28,11 +29,12 @@ export class SolanaSignMessageV2TokenGenerator extends TokenGenerator {
2829
`${this.v2BaseUrl}/v2/auth/solana/verify`,
2930
{
3031
message: messageToSign,
31-
signature: Buffer.from(signature).toString('base64'),
32+
signature: bs58.encode(signature),
3233
},
3334
);
3435

3536
const tokenStr = tokenResponse.data.token;
37+
3638
const [base64Header, base64Body, base64Signature] = tokenStr.split('.');
3739
if (!base64Header || !base64Body || !base64Signature) {
3840
throw new Error('Invalid token format from backend');
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
import type { Token, TokenHeader } from '@dialectlabs/sdk';
1+
import type { TokenHeader } from '@dialectlabs/sdk';
22
import { TokenValidator } from '@dialectlabs/sdk';
33

44
export class SolanaSignMessageV2TokenValidator extends TokenValidator {
5-
constructor(private readonly baseUrl: string) {
5+
constructor() {
66
super();
77
}
88

99
override canValidate(tokenHeader: TokenHeader): boolean {
1010
return tokenHeader.typ === 'JWT' && tokenHeader.alg === 'HS256';
1111
}
1212

13-
override isSignatureValid(token: Token): boolean {
13+
override isSignatureValid(): boolean {
1414
return true;
1515
}
1616
}

packages/blockchain-sdk-solana/src/sdk/sdk.ts

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ Solana settings:
5151
Wallet supports authentication: ${
5252
config.wallet.canSignMessage() || config.wallet.canSignTransaction()
5353
}
54+
Auth version: ${config.authVersion}
5455
`,
5556
);
5657
}
@@ -67,13 +68,10 @@ Solana settings:
6768
config.encryptionKeysStore,
6869
);
6970

70-
const authenticationFacadeFactory = wallet.canSignMessage()
71-
? new SolanaEd25519AuthenticationFacadeFactory(
72-
new DialectWalletAdapterSolanaEd25519TokenSigner(wallet),
73-
)
74-
: new SolanaTxAuthenticationFacadeFactory(
75-
new DialectWalletAdapterSolanaTxTokenSigner(wallet),
76-
);
71+
const authenticationFacadeFactory = this.createAuthenticationFacadeFactory(
72+
solanaConfig,
73+
config,
74+
);
7775
const authenticationFacade = authenticationFacadeFactory.get();
7876

7977
return {
@@ -87,28 +85,31 @@ Solana settings:
8785
};
8886
}
8987

90-
createAuthenticationFacade(solanaConfig: SolanaConfig, config: Config) {
88+
createAuthenticationFacadeFactory(
89+
solanaConfig: SolanaConfig,
90+
config: Config,
91+
) {
9192
if (solanaConfig.authVersion === 1) {
9293
if (solanaConfig.wallet.canSignMessage()) {
9394
return new SolanaEd25519AuthenticationFacadeFactory(
9495
new DialectWalletAdapterSolanaEd25519TokenSigner(solanaConfig.wallet),
95-
).get();
96+
);
9697
}
9798
if (solanaConfig.wallet.canSignTransaction()) {
9899
return new SolanaTxAuthenticationFacadeFactory(
99100
new DialectWalletAdapterSolanaTxTokenSigner(solanaConfig.wallet),
100-
).get();
101+
);
101102
}
102103
}
103104
if (solanaConfig.authVersion === 2) {
104105
if (solanaConfig.wallet.canSignMessage()) {
105106
return new SolanaSignMessageV2AuthenticationFacadeFactory(
106107
new DialectWalletAdapterSolanaEd25519TokenSigner(solanaConfig.wallet),
107108
config.dialectCloud.v2Url,
108-
).get();
109+
);
109110
}
110111
}
111-
throw new IllegalArgumentError('Unsupported auth version');
112+
throw new IllegalArgumentError('Unsupported authentication');
112113
}
113114

114115
private initializeSolanaConfig(): SolanaConfig {

0 commit comments

Comments
 (0)