Skip to content

Commit d7382b1

Browse files
authored
[BA-2215] Remove WalletLink (#2)
* remove old SDK class * yarn build success * test * alll * action 3
1 parent 15b5a8e commit d7382b1

File tree

93 files changed

+104
-6787
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

93 files changed

+104
-6787
lines changed

.github/workflows/codeql-analysis.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ jobs:
4545

4646
# Initializes the CodeQL tools for scanning.
4747
- name: Initialize CodeQL
48-
uses: github/codeql-action/init@v2
48+
uses: github/codeql-action/init@v3
4949
with:
5050
languages: ${{ matrix.language }}
5151
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -56,7 +56,7 @@ jobs:
5656
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
5757
# If this step fails, then you should remove it and run the build manually (see below)
5858
- name: Autobuild
59-
uses: github/codeql-action/autobuild@v2
59+
uses: github/codeql-action/autobuild@v3
6060

6161
# ℹ️ Command-line programs to run using the OS shell.
6262
# 📚 https://git.io/JvXDl
@@ -70,4 +70,4 @@ jobs:
7070
# make release
7171

7272
- name: Perform CodeQL Analysis
73-
uses: github/codeql-action/analyze@v2
73+
uses: github/codeql-action/analyze@v3

packages/wallet-sdk/package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
"eth",
99
"ethereum",
1010
"wallet",
11-
"walletlink",
1211
"web3"
1312
],
1413
"type": "module",
@@ -24,7 +23,7 @@
2423
"test": "vitest",
2524
"test:coverage": "vitest --coverage",
2625
"prebuild": "rm -rf ./dist && node -p \"'export const VERSION = \\'' + require('./package.json').version + '\\';\\nexport const NAME = \\'' + require('./package.json').name + '\\';'\" > src/sdk-info.ts",
27-
"build": "node compile-assets.cjs && tsc -p ./tsconfig.build.json && tsc-alias && cp -a src/vendor-js dist && cp src/sign/walletlink/relay/connection/HeartbeatWorker.js dist/sign/walletlink/relay/connection/",
26+
"build": "node compile-assets.cjs && tsc -p ./tsconfig.build.json && tsc-alias",
2827
"dev": "yarn build && tsc --watch & nodemon --watch dist --delay 1 --exec tsc-alias",
2928
"typecheck": "tsc --noEmit",
3029
"lint": "biome lint .",
Lines changed: 12 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import { CB_WALLET_RPC_URL } from ':core/constants.js';
22
import { standardErrorCodes } from ':core/error/constants.js';
33
import { standardErrors } from ':core/error/errors.js';
4-
import { ProviderEventCallback, RequestArguments } from ':core/provider/interface.js';
4+
import { RequestArguments } from ':core/provider/interface.js';
55
import { store } from ':store/store.js';
66
import { CoinbaseWalletProvider } from './CoinbaseWalletProvider.js';
7-
import * as util from './sign/util.js';
87
import * as providerUtil from './util/provider.js';
98

109
function createProvider() {
@@ -18,28 +17,18 @@ const mockHandshake = vi.fn();
1817
const mockRequest = vi.fn();
1918
const mockCleanup = vi.fn();
2019
const mockFetchRPCRequest = vi.fn();
21-
const mockFetchSignerType = vi.spyOn(util, 'fetchSignerType');
22-
const mockStoreSignerType = vi.spyOn(util, 'storeSignerType');
23-
const mockLoadSignerType = vi.spyOn(util, 'loadSignerType');
2420

2521
let provider: CoinbaseWalletProvider;
26-
let callback: ProviderEventCallback;
2722

2823
beforeEach(() => {
2924
vi.resetAllMocks();
30-
vi.spyOn(util, 'createSigner').mockImplementation((params) => {
31-
callback = params.callback;
32-
return {
33-
accounts: ['0x123'],
34-
chainId: 1,
35-
handshake: mockHandshake,
36-
request: mockRequest,
37-
cleanup: mockCleanup,
38-
};
39-
});
25+
4026
vi.spyOn(providerUtil, 'fetchRPCRequest').mockImplementation(mockFetchRPCRequest);
4127

4228
provider = createProvider();
29+
provider['signer'].request = mockRequest;
30+
provider['signer'].handshake = mockHandshake;
31+
provider['signer'].cleanup = mockCleanup;
4332
});
4433

4534
describe('Event handling', () => {
@@ -58,8 +47,7 @@ describe('Event handling', () => {
5847
const chainChangedListener = vi.fn();
5948
provider.on('chainChanged', chainChangedListener);
6049

61-
await provider.request({ method: 'eth_requestAccounts' });
62-
callback('chainChanged', '0x1');
50+
provider['signer']?.['callback']?.('chainChanged', '0x1');
6351

6452
expect(chainChangedListener).toHaveBeenCalledWith('0x1');
6553
});
@@ -68,8 +56,7 @@ describe('Event handling', () => {
6856
const accountsChangedListener = vi.fn();
6957
provider.on('accountsChanged', accountsChangedListener);
7058

71-
await provider.request({ method: 'eth_requestAccounts' });
72-
callback('accountsChanged', ['0x123']);
59+
provider['signer']?.['callback']?.('accountsChanged', ['0x123']);
7360

7461
expect(accountsChangedListener).toHaveBeenCalledWith(['0x123']);
7562
});
@@ -103,123 +90,29 @@ describe('Request Handling', () => {
10390
describe('Ephemeral methods', () => {
10491
it('should post requests to wallet rpc url for wallet_getCallsStatus', async () => {
10592
const args = { method: 'wallet_getCallsStatus' };
106-
expect(provider['signer']).toBeNull();
10793
await provider.request(args);
10894
expect(mockFetchRPCRequest).toHaveBeenCalledWith(args, CB_WALLET_RPC_URL);
109-
expect(provider['signer']).toBeNull();
11095
});
11196

11297
it.each(['wallet_sendCalls', 'wallet_sign'])(
11398
'should perform a successful request after handshake',
11499
async (method) => {
115100
const args = { method, params: ['0xdeadbeef'] };
116-
expect(provider['signer']).toBeNull();
117101
await provider.request(args);
118102
expect(mockHandshake).toHaveBeenCalledWith({ method: 'handshake' });
119103
expect(mockRequest).toHaveBeenCalledWith(args);
120104
expect(mockCleanup).toHaveBeenCalled();
121-
expect(provider['signer']).toBeNull();
122105
}
123106
);
124107
});
125108

126-
describe('Signer configuration', () => {
127-
it('should complete signerType selection correctly', async () => {
128-
mockFetchSignerType.mockResolvedValue('scw');
129-
130-
const args = { method: 'eth_requestAccounts' };
131-
await provider.request(args);
132-
expect(mockHandshake).toHaveBeenCalledWith(args);
133-
});
134-
135-
it('should support enable', async () => {
136-
mockFetchSignerType.mockResolvedValue('scw');
137-
vi.spyOn(console, 'warn').mockImplementation(() => {});
138-
139-
await provider.enable();
140-
expect(mockHandshake).toHaveBeenCalledWith({ method: 'eth_requestAccounts' });
141-
});
142-
143-
it('should pass handshake request args', async () => {
144-
mockFetchSignerType.mockResolvedValue('scw');
145-
146-
const argsWithCustomParams = {
147-
method: 'eth_requestAccounts',
148-
params: [{ scwOnboardMode: 'create' }],
149-
};
150-
await provider.request(argsWithCustomParams);
151-
expect(mockFetchSignerType).toHaveBeenCalledWith(
152-
expect.objectContaining({
153-
handshakeRequest: argsWithCustomParams,
154-
})
155-
);
156-
});
157-
158-
it('should throw error if signer selection failed', async () => {
159-
const error = new Error('Signer selection failed');
160-
mockFetchSignerType.mockRejectedValue(error);
161-
162-
await expect(provider.request({ method: 'eth_requestAccounts' })).rejects.toMatchObject({
163-
code: standardErrorCodes.rpc.internal,
164-
message: error.message,
165-
});
166-
expect(mockHandshake).not.toHaveBeenCalled();
167-
expect(mockStoreSignerType).not.toHaveBeenCalled();
168-
});
169-
170-
it('should not store signer type unless handshake is successful', async () => {
171-
const error = new Error('Handshake failed');
172-
mockFetchSignerType.mockResolvedValue('scw');
173-
mockHandshake.mockRejectedValue(error);
174-
175-
await expect(provider.request({ method: 'eth_requestAccounts' })).rejects.toMatchObject({
176-
code: standardErrorCodes.rpc.internal,
177-
message: error.message,
178-
});
179-
expect(mockHandshake).toHaveBeenCalled();
180-
expect(mockStoreSignerType).not.toHaveBeenCalled();
181-
});
182-
183-
it('should load signer from storage when available', async () => {
184-
mockLoadSignerType.mockReturnValue('scw');
185-
const providerLoadedFromStorage = createProvider();
186-
187-
await providerLoadedFromStorage.request({ method: 'eth_requestAccounts' });
188-
expect(mockHandshake).not.toHaveBeenCalled();
189-
190-
const request = { method: 'personal_sign', params: ['0x123', '0xdeadbeef'] };
191-
await providerLoadedFromStorage.request(request);
192-
expect(mockRequest).toHaveBeenCalledWith(request);
193-
194-
await providerLoadedFromStorage.disconnect();
195-
expect(mockCleanup).toHaveBeenCalled();
196-
expect(provider['signer']).toBeNull();
197-
});
198-
199-
it('should throw error if signer is not initialized', async () => {
200-
await expect(provider.request({ method: 'personal_sign' })).rejects.toMatchObject({
201-
code: standardErrorCodes.provider.unauthorized,
202-
message: `Must call 'eth_requestAccounts' before other methods`,
109+
describe('Auto sub account', () => {
110+
it('call handshake without method when enableAutoSubAccounts is true', async () => {
111+
vi.spyOn(store.subAccountsConfig, 'get').mockReturnValue({
112+
enableAutoSubAccounts: true,
203113
});
204-
});
205114

206-
it('should set signer to null', async () => {
207115
await provider.request({ method: 'eth_requestAccounts' });
208-
209-
await provider.disconnect();
210-
expect(mockCleanup).toHaveBeenCalled();
211-
expect(provider['signer']).toBeNull();
212-
});
213-
214-
describe('Auto sub account', () => {
215-
it('call handshake without method when enableAutoSubAccounts is true', async () => {
216-
mockLoadSignerType.mockReturnValue('scw');
217-
vi.spyOn(store.subAccountsConfig, 'get').mockReturnValue({
218-
enableAutoSubAccounts: true,
219-
});
220-
221-
await provider.request({ method: 'eth_requestAccounts' });
222-
expect(mockHandshake).toHaveBeenCalledWith({ method: 'handshake' });
223-
});
116+
expect(mockHandshake).toHaveBeenCalledWith({ method: 'handshake' });
224117
});
225118
});

0 commit comments

Comments
 (0)