Skip to content

Commit e2b2c1e

Browse files
committed
test(sdk): coinbase wallet
1 parent c5acbff commit e2b2c1e

File tree

15 files changed

+191
-17
lines changed

15 files changed

+191
-17
lines changed

packages/thirdweb/src/exports/wallets.native.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ export const authenticateWithRedirect = () => {
107107
export type {
108108
CoinbaseWalletCreationOptions,
109109
CoinbaseSDKWalletConnectionOptions,
110-
} from "../wallets/coinbase/coinbaseWebSDK.js";
110+
} from "../wallets/coinbase/coinbase-web.js";
111111

112112
export type {
113113
WalletEmitter,

packages/thirdweb/src/exports/wallets.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ export {
117117
export type {
118118
CoinbaseWalletCreationOptions,
119119
CoinbaseSDKWalletConnectionOptions,
120-
} from "../wallets/coinbase/coinbaseWebSDK.js";
120+
} from "../wallets/coinbase/coinbase-web.js";
121121

122122
export type {
123123
WalletEmitter,

packages/thirdweb/src/react/web/utils/usePreloadWalletProviders.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export function usePreloadWalletProviders({
2121
switch (true) {
2222
case COINBASE === w.id: {
2323
const { getCoinbaseWebProvider } = await import(
24-
"../../../wallets/coinbase/coinbaseWebSDK.js"
24+
"../../../wallets/coinbase/coinbase-web.js"
2525
);
2626
await getCoinbaseWebProvider(
2727
w.getConfig() as CreateWalletArgs<typeof COINBASE>[1],
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import type { ProviderInterface } from "@coinbase/wallet-sdk";
2+
import { beforeEach, describe, expect, test, vi } from "vitest";
3+
import { getCoinbaseMobileProvider } from "./coinbase-mobile.js";
4+
import type { CoinbaseWalletCreationOptions } from "./coinbase-web.js";
5+
6+
// Mock dependencies
7+
vi.mock("expo-linking", () => ({
8+
addEventListener: vi.fn(),
9+
}));
10+
11+
vi.mock("@mobile-wallet-protocol/client", () => ({
12+
EIP1193Provider: class {
13+
constructor() {
14+
// biome-ignore lint/correctness/noConstructorReturn: Inside tests
15+
return {
16+
request: vi.fn(),
17+
};
18+
}
19+
},
20+
Wallets: {
21+
CoinbaseSmartWallet: {},
22+
},
23+
handleResponse: vi.fn(),
24+
}));
25+
26+
vi.mock("@coinbase/wallet-mobile-sdk", () => ({
27+
configure: vi.fn(),
28+
handleResponse: vi.fn(),
29+
}));
30+
31+
vi.mock("@coinbase/wallet-mobile-sdk/build/WalletMobileSDKEVMProvider", () => ({
32+
WalletMobileSDKEVMProvider: class {
33+
constructor() {
34+
// biome-ignore lint/correctness/noConstructorReturn: Inside tests
35+
return {
36+
request: vi.fn(),
37+
};
38+
}
39+
},
40+
}));
41+
42+
describe("Coinbase Mobile", () => {
43+
let provider: undefined | ProviderInterface;
44+
45+
beforeEach(() => {
46+
provider = undefined;
47+
});
48+
49+
test("getCoinbaseMobileProvider initializes smart wallet provider", async () => {
50+
const options: CoinbaseWalletCreationOptions = {
51+
walletConfig: { options: "smartWalletOnly" },
52+
mobileConfig: { callbackURL: "https://example.com" },
53+
};
54+
55+
provider = await getCoinbaseMobileProvider(options);
56+
expect(provider).toBeDefined();
57+
expect(provider.request).toBeInstanceOf(Function);
58+
});
59+
60+
test("getCoinbaseMobileProvider initializes coinbase app provider", async () => {
61+
const options: CoinbaseWalletCreationOptions = {
62+
mobileConfig: { callbackURL: "https://example.com" },
63+
};
64+
65+
provider = await getCoinbaseMobileProvider(options);
66+
expect(provider).toBeDefined();
67+
expect(provider.request).toBeInstanceOf(Function);
68+
});
69+
});

packages/thirdweb/src/wallets/coinbase/coinbaseMobileSDK.ts renamed to packages/thirdweb/src/wallets/coinbase/coinbase-mobile.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { ProviderInterface } from "@coinbase/wallet-sdk";
2-
import type { CoinbaseWalletCreationOptions } from "./coinbaseWebSDK.js";
2+
import type { CoinbaseWalletCreationOptions } from "./coinbase-web.js";
33

44
let _provider: ProviderInterface | undefined;
55

packages/thirdweb/src/wallets/coinbase/coinbase-wallet.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ export function coinbaseWalletSDK(args: {
6767
getAccount: () => account,
6868
autoConnect: async (options) => {
6969
const { autoConnectCoinbaseWalletSDK } = await import(
70-
"./coinbaseWebSDK.js"
70+
"./coinbase-web.js"
7171
);
7272
const provider = await args.providerFactory();
7373
const [connectedAccount, connectedChain, doDisconnect, doSwitchChain] =
@@ -87,7 +87,7 @@ export function coinbaseWalletSDK(args: {
8787
return account;
8888
},
8989
connect: async (options) => {
90-
const { connectCoinbaseWalletSDK } = await import("./coinbaseWebSDK.js");
90+
const { connectCoinbaseWalletSDK } = await import("./coinbase-web.js");
9191
const provider = await args.providerFactory();
9292
const [connectedAccount, connectedChain, doDisconnect, doSwitchChain] =
9393
await connectCoinbaseWalletSDK(options, emitter, provider);
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
import type { ProviderInterface } from "@coinbase/wallet-sdk";
2+
import { beforeEach, describe, expect, test, vi } from "vitest";
3+
import {} from "../../chains/utils.js";
4+
import { COINBASE } from "../constants.js";
5+
import type { Wallet } from "../interfaces/wallet.js";
6+
import {
7+
autoConnectCoinbaseWalletSDK,
8+
connectCoinbaseWalletSDK,
9+
getCoinbaseWebProvider,
10+
isCoinbaseSDKWallet,
11+
} from "./coinbase-web.js";
12+
13+
// Mock dependencies
14+
vi.mock("@coinbase/wallet-sdk", () => ({
15+
default: class {
16+
makeWeb3Provider() {
17+
return {
18+
request: vi.fn(),
19+
on: vi.fn(),
20+
removeListener: vi.fn(),
21+
disconnect: vi.fn(),
22+
};
23+
}
24+
},
25+
}));
26+
27+
vi.mock("../../utils/address.js", () => ({
28+
getAddress: vi.fn((address) => address),
29+
}));
30+
31+
vi.mock("../../chains/utils.js", () => ({
32+
getCachedChain: vi.fn((chainId) => ({ id: chainId })),
33+
getChainMetadata: vi.fn(async (_chain) => ({
34+
name: "Test Chain",
35+
nativeCurrency: { name: "Test Coin", symbol: "TC", decimals: 18 },
36+
explorers: [{ url: "https://explorer.test" }],
37+
})),
38+
}));
39+
40+
vi.mock("../../utils/normalizeChainId.js", () => ({
41+
normalizeChainId: vi.fn((chainId) => Number(chainId)),
42+
}));
43+
44+
describe("Coinbase Web", () => {
45+
let provider: ProviderInterface;
46+
47+
beforeEach(async () => {
48+
provider = await getCoinbaseWebProvider();
49+
});
50+
51+
test("getCoinbaseWebProvider initializes provider", async () => {
52+
expect(provider).toBeDefined();
53+
expect(provider.request).toBeInstanceOf(Function);
54+
});
55+
56+
test("isCoinbaseSDKWallet returns true for Coinbase wallet", () => {
57+
const wallet: Wallet = { id: COINBASE } as Wallet;
58+
expect(isCoinbaseSDKWallet(wallet)).toBe(true);
59+
});
60+
61+
test("isCoinbaseSDKWallet returns false for non-Coinbase wallet", () => {
62+
const wallet: Wallet = { id: "other" } as unknown as Wallet;
63+
expect(isCoinbaseSDKWallet(wallet)).toBe(false);
64+
});
65+
66+
test("connectCoinbaseWalletSDK connects to the wallet", async () => {
67+
provider.request = vi
68+
.fn()
69+
.mockResolvedValueOnce(["0x123"])
70+
.mockResolvedValueOnce("0x1");
71+
const emitter = { emit: vi.fn() };
72+
const options = { client: {} };
73+
74+
const [account, chain] = await connectCoinbaseWalletSDK(
75+
// biome-ignore lint/suspicious/noExplicitAny: Inside tests
76+
options as any,
77+
// biome-ignore lint/suspicious/noExplicitAny: Inside tests
78+
emitter as any,
79+
provider,
80+
);
81+
82+
expect(account.address).toBe("0x123");
83+
expect(chain.id).toBe(1);
84+
});
85+
86+
test("autoConnectCoinbaseWalletSDK auto-connects to the wallet", async () => {
87+
provider.request = vi
88+
.fn()
89+
.mockResolvedValueOnce(["0x123"])
90+
.mockResolvedValueOnce("0x1");
91+
const emitter = { emit: vi.fn() };
92+
const options = { client: {} };
93+
94+
const [account, chain] = await autoConnectCoinbaseWalletSDK(
95+
// biome-ignore lint/suspicious/noExplicitAny: Inside tests
96+
options as any,
97+
// biome-ignore lint/suspicious/noExplicitAny: Inside tests
98+
emitter as any,
99+
provider,
100+
);
101+
102+
expect(account.address).toBe("0x123");
103+
expect(chain.id).toBe(1);
104+
});
105+
});

packages/thirdweb/src/wallets/create-wallet.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import { webLocalStorage } from "../utils/storage/webStorage.js";
1717
import { isMobile } from "../utils/web/isMobile.js";
1818
import { openWindow } from "../utils/web/openWindow.js";
1919
import { coinbaseWalletSDK } from "./coinbase/coinbase-wallet.js";
20-
import { getCoinbaseWebProvider } from "./coinbase/coinbaseWebSDK.js";
20+
import { getCoinbaseWebProvider } from "./coinbase/coinbase-web.js";
2121
import { COINBASE } from "./constants.js";
2222
import { isEcosystemWallet } from "./ecosystem/is-ecosystem-wallet.js";
2323
import { ecosystemWallet } from "./in-app/web/ecosystem.js";

packages/thirdweb/src/wallets/eip5792/get-calls-status.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { ThirdwebClient } from "../../client/client.js";
2-
import { isCoinbaseSDKWallet } from "../coinbase/coinbaseWebSDK.js";
2+
import { isCoinbaseSDKWallet } from "../coinbase/coinbase-web.js";
33
import { isInAppWallet } from "../in-app/core/wallet/index.js";
44
import { getInjectedProvider } from "../injected/index.js";
55
import type { Wallet } from "../interfaces/wallet.js";
@@ -64,7 +64,7 @@ export async function getCallsStatus({
6464

6565
if (isCoinbaseSDKWallet(wallet)) {
6666
const { coinbaseSDKWalletGetCallsStatus } = await import(
67-
"../coinbase/coinbaseWebSDK.js"
67+
"../coinbase/coinbase-web.js"
6868
);
6969
return coinbaseSDKWalletGetCallsStatus({ wallet, bundleId });
7070
}

0 commit comments

Comments
 (0)