Skip to content

Commit 2342396

Browse files
authored
create new SDK utils (#1405)
1 parent 019fb4b commit 2342396

File tree

6 files changed

+106
-0
lines changed

6 files changed

+106
-0
lines changed

packages/wallet-sdk/src/CoinbaseWalletSDK.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,12 @@ import { getCoinbaseInjectedProvider } from ':util/provider';
1111
// for backwards compatibility
1212
type CoinbaseWalletSDKOptions = Partial<AppMetadata>;
1313

14+
/**
15+
* CoinbaseWalletSDK
16+
*
17+
* @deprecated CoinbaseWalletSDK is deprecated and will likely be removed in a future major version release.
18+
* It's recommended to use `createCoinbaseWalletSDK` instead.
19+
*/
1420
export class CoinbaseWalletSDK {
1521
private metadata: AppMetadata;
1622

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { CoinbaseWalletProvider } from './CoinbaseWalletProvider';
2+
import { createCoinbaseWalletProvider } from './createCoinbaseWalletProvider';
3+
import { ConstructorOptions } from ':core/provider/interface';
4+
5+
describe('createCoinbaseWalletProvider', () => {
6+
it('should return a provider', () => {
7+
const options: ConstructorOptions = {
8+
metadata: {
9+
appName: 'Dapp',
10+
appLogoUrl: 'https://example.com/favicon.ico',
11+
appChainIds: [],
12+
},
13+
preference: { options: 'all' },
14+
};
15+
const result = createCoinbaseWalletProvider(options);
16+
expect(result).toBeInstanceOf(CoinbaseWalletProvider);
17+
});
18+
});
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { CoinbaseWalletProvider } from './CoinbaseWalletProvider';
2+
import { AppMetadata, Preference } from ':core/provider/interface';
3+
import { ConstructorOptions } from ':core/provider/interface';
4+
import { getCoinbaseInjectedProvider } from ':util/provider';
5+
6+
export type CreateProviderOptions = {
7+
metadata: AppMetadata;
8+
preference: Preference;
9+
};
10+
11+
export function createCoinbaseWalletProvider(options: CreateProviderOptions) {
12+
const params: ConstructorOptions = {
13+
metadata: options.metadata,
14+
preference: options.preference,
15+
};
16+
return getCoinbaseInjectedProvider(params) ?? new CoinbaseWalletProvider(params);
17+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { createCoinbaseWalletSDK, CreateCoinbaseWalletSDKOptions } from './createCoinbaseWalletSDK';
2+
3+
const options: CreateCoinbaseWalletSDKOptions = {
4+
appName: 'Dapp',
5+
appLogoUrl: 'https://example.com/favicon.ico',
6+
appChainIds: [],
7+
preference: { options: 'all' },
8+
};
9+
10+
describe('createCoinbaseWalletSDK', () => {
11+
it('should return an object with a getProvider method', () => {
12+
const sdk = createCoinbaseWalletSDK(options);
13+
expect(sdk).toHaveProperty('getProvider');
14+
expect(typeof sdk.getProvider).toBe('function');
15+
});
16+
17+
it('should return the same provider instance on subsequent calls to getProvider', () => {
18+
const sdk = createCoinbaseWalletSDK(options);
19+
const provider1 = sdk.getProvider();
20+
const provider2 = sdk.getProvider();
21+
expect(provider1).toBe(provider2);
22+
});
23+
});
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { createCoinbaseWalletProvider } from './createCoinbaseWalletProvider';
2+
import { LIB_VERSION } from './version';
3+
import {
4+
AppMetadata,
5+
ConstructorOptions,
6+
Preference,
7+
ProviderInterface,
8+
} from ':core/provider/interface';
9+
import { ScopedLocalStorage } from ':core/storage/ScopedLocalStorage';
10+
11+
export type CreateCoinbaseWalletSDKOptions = Partial<AppMetadata> & {
12+
preference?: Preference;
13+
};
14+
15+
const DEFAULT_PREFERENCE: Preference = {
16+
options: 'all',
17+
};
18+
19+
export function createCoinbaseWalletSDK(params: CreateCoinbaseWalletSDKOptions) {
20+
const versionStorage = new ScopedLocalStorage('CBWSDK');
21+
versionStorage.setItem('VERSION', LIB_VERSION);
22+
23+
const options: ConstructorOptions = {
24+
metadata: {
25+
appName: params.appName || 'Dapp',
26+
appLogoUrl: params.appLogoUrl || '',
27+
appChainIds: params.appChainIds || [],
28+
},
29+
preference: Object.assign(DEFAULT_PREFERENCE, params.preference ?? {}),
30+
};
31+
let provider: ProviderInterface | null = null;
32+
33+
return {
34+
getProvider: () => {
35+
if (!provider) {
36+
provider = createCoinbaseWalletProvider(options);
37+
}
38+
return provider;
39+
},
40+
};
41+
}

packages/wallet-sdk/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ export default CoinbaseWalletSDK;
55
export type { CoinbaseWalletProvider } from './CoinbaseWalletProvider';
66
export { CoinbaseWalletSDK } from './CoinbaseWalletSDK';
77
export type { AppMetadata, Preference, ProviderInterface } from './core/provider/interface';
8+
export { createCoinbaseWalletSDK } from './createCoinbaseWalletSDK';

0 commit comments

Comments
 (0)