Skip to content

Commit 2551701

Browse files
authored
feat(sdk): upgrade @metamask/providers to ^18.3.1 (#1199)
* feat: turborepo setup * feat: new nextjs playground * feat: cleanup * feat: upgrade metamask/providers
1 parent 123dd05 commit 2551701

File tree

4 files changed

+153
-24
lines changed

4 files changed

+153
-24
lines changed

packages/playground-next/src/app/page.tsx

Lines changed: 60 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,54 +2,92 @@
22

33
import { useSDK } from '@metamask/sdk-react';
44
import styles from './page.module.css';
5-
import { useState } from 'react';
5+
import { useCallback, useEffect, useState } from 'react';
66

77
interface AccountInfo {
88
account: string;
99
balance: string;
1010
}
1111

1212
export default function Home() {
13-
const { sdk } = useSDK();
14-
const [account, setAccount] = useState<AccountInfo | null>(null);
13+
const { sdk, connected, connecting, provider, account } = useSDK();
14+
const [accountInfo, setAccountInfo] = useState<AccountInfo | null>(null);
15+
const [isLoading, setIsLoading] = useState<boolean>(false);
16+
17+
const getBalance = useCallback(async (address: string): Promise<string> => {
18+
const balance = await provider?.request({
19+
method: 'eth_getBalance',
20+
params: [address, 'latest']
21+
});
22+
return balance ? parseInt(balance as string, 16).toString() : '0';
23+
}, [provider]);
1524

1625
const connectWallet = async (): Promise<void> => {
1726
try {
18-
const accounts = await sdk?.connect();
19-
20-
if (accounts?.[0]) {
21-
const provider = sdk?.getProvider();
22-
const balance = await provider?.request({
23-
method: 'eth_getBalance',
24-
params: [accounts[0], 'latest']
25-
});
26-
27-
setAccount({
28-
account: accounts[0],
29-
balance: balance ? (parseInt(balance as string, 16)).toString() : '0'
30-
});
31-
}
27+
setIsLoading(true);
28+
await sdk?.connect();
3229
} catch (err) {
3330
console.error('Failed to connect wallet:', err);
31+
} finally {
32+
setIsLoading(false);
3433
}
3534
};
3635

36+
const terminateConnection = async (): Promise<void> => {
37+
try {
38+
setIsLoading(true);
39+
await sdk?.terminate();
40+
setAccountInfo(null);
41+
} catch (err) {
42+
console.error('Failed to terminate connection:', err);
43+
} finally {
44+
setIsLoading(false);
45+
}
46+
};
47+
48+
useEffect(() => {
49+
const updateAccountInfo = async () => {
50+
if (connected && account) {
51+
const balance = await getBalance(account);
52+
setAccountInfo({
53+
account,
54+
balance
55+
});
56+
} else {
57+
setAccountInfo(null);
58+
}
59+
};
60+
61+
updateAccountInfo();
62+
}, [connected, account, provider, getBalance]);
63+
3764
return (
3865
<div className={styles.container}>
3966
<h1>Simple Web3 Dapp</h1>
4067

41-
{!account ? (
42-
<button className={styles.button} onClick={connectWallet}>
43-
Connect MetaMask
68+
{!connected ? (
69+
<button
70+
className={styles.button}
71+
onClick={connectWallet}
72+
disabled={isLoading || connecting}
73+
>
74+
{isLoading || connecting ? 'Connecting...' : 'Connect MetaMask'}
4475
</button>
4576
) : (
4677
<>
4778
<div className={styles.address}>
48-
Address: {account.account}
79+
Address: {accountInfo?.account}
4980
</div>
5081
<div className={styles.address}>
51-
Balance: {account.balance} Wei
82+
Balance: {accountInfo?.balance} Wei
5283
</div>
84+
<button
85+
className={styles.button}
86+
onClick={terminateConnection}
87+
disabled={isLoading}
88+
>
89+
{isLoading ? 'Terminating...' : 'Terminate Connection'}
90+
</button>
5391
</>
5492
)}
5593
</div>

packages/sdk/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
"dependencies": {
5151
"@babel/runtime": "^7.26.0",
5252
"@metamask/onboarding": "^1.0.1",
53-
"@metamask/providers": "16.1.0",
53+
"@metamask/providers": "^18.3.1",
5454
"@metamask/sdk-communication-layer": "workspace:*",
5555
"@metamask/sdk-install-modal-web": "workspace:*",
5656
"@paulmillr/qr": "^0.2.1",

packages/sdk/rollup.config.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ const dependencies = Object.keys(packageJson.dependencies || {});
2323
// Dependencies that should be bundled
2424
const bundledDeps = [
2525
// '@metamask/sdk-communication-layer',
26+
'readable-stream',
2627
// Add other dependencies that should be bundled
2728
];
2829

@@ -58,6 +59,7 @@ const baseExternalDeps = [
5859
...sharedDeps, // Exclude shared deps from bundle
5960
'@react-native-async-storage/async-storage',
6061
'extension-port-stream',
62+
'@metamask/providers',
6163
];
6264

6365
// Platform-specific externals

yarn.lock

Lines changed: 90 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10979,6 +10979,17 @@ __metadata:
1097910979
languageName: node
1098010980
linkType: hard
1098110981

10982+
"@metamask/json-rpc-engine@npm:^10.0.2":
10983+
version: 10.0.2
10984+
resolution: "@metamask/json-rpc-engine@npm:10.0.2"
10985+
dependencies:
10986+
"@metamask/rpc-errors": ^7.0.2
10987+
"@metamask/safe-event-emitter": ^3.0.0
10988+
"@metamask/utils": ^11.0.1
10989+
checksum: db561d6ffe4de041dc2fe79c6d1eb098bd9eb444864568c4781f3227e6c7e33563ac2858caadb14f6b58facbf189fe0f50725adbc29f3b2641b787e550e548e6
10990+
languageName: node
10991+
linkType: hard
10992+
1098210993
"@metamask/json-rpc-engine@npm:^7.0.0":
1098310994
version: 7.3.3
1098410995
resolution: "@metamask/json-rpc-engine@npm:7.3.3"
@@ -11024,6 +11035,18 @@ __metadata:
1102411035
languageName: node
1102511036
linkType: hard
1102611037

11038+
"@metamask/json-rpc-middleware-stream@npm:^8.0.6":
11039+
version: 8.0.6
11040+
resolution: "@metamask/json-rpc-middleware-stream@npm:8.0.6"
11041+
dependencies:
11042+
"@metamask/json-rpc-engine": ^10.0.2
11043+
"@metamask/safe-event-emitter": ^3.0.0
11044+
"@metamask/utils": ^11.0.1
11045+
readable-stream: ^3.6.2
11046+
checksum: e004de7a8090afc0441b9bf661106ac07a550862f6e824bfebcb14b46eea7551beeaeab4c39ac810beee0f53ad1032344a99eef1c0f5f118fe8d388e7e0c5014
11047+
languageName: node
11048+
linkType: hard
11049+
1102711050
"@metamask/network-controller@npm:^16.0.0":
1102811051
version: 16.0.0
1102911052
resolution: "@metamask/network-controller@npm:16.0.0"
@@ -11126,6 +11149,27 @@ __metadata:
1112611149
languageName: node
1112711150
linkType: hard
1112811151

11152+
"@metamask/providers@npm:^18.3.1":
11153+
version: 18.3.1
11154+
resolution: "@metamask/providers@npm:18.3.1"
11155+
dependencies:
11156+
"@metamask/json-rpc-engine": ^10.0.2
11157+
"@metamask/json-rpc-middleware-stream": ^8.0.6
11158+
"@metamask/object-multiplex": ^2.0.0
11159+
"@metamask/rpc-errors": ^7.0.2
11160+
"@metamask/safe-event-emitter": ^3.1.1
11161+
"@metamask/utils": ^11.0.1
11162+
detect-browser: ^5.2.0
11163+
extension-port-stream: ^4.1.0
11164+
fast-deep-equal: ^3.1.3
11165+
is-stream: ^2.0.0
11166+
readable-stream: ^3.6.2
11167+
peerDependencies:
11168+
webextension-polyfill: ^0.10.0 || ^0.11.0 || ^0.12.0
11169+
checksum: 626112e3bdaa3b63c041ac0d280777419109a1ed2a6cdd50c1b3c7700c53d2e342f93748244a58a74d2e94357fe9eed1137317acff4df9ee0586798e02cfe00d
11170+
languageName: node
11171+
linkType: hard
11172+
1112911173
"@metamask/rpc-errors@npm:^6.0.0, @metamask/rpc-errors@npm:^6.1.0":
1113011174
version: 6.1.0
1113111175
resolution: "@metamask/rpc-errors@npm:6.1.0"
@@ -11146,6 +11190,16 @@ __metadata:
1114611190
languageName: node
1114711191
linkType: hard
1114811192

11193+
"@metamask/rpc-errors@npm:^7.0.2":
11194+
version: 7.0.2
11195+
resolution: "@metamask/rpc-errors@npm:7.0.2"
11196+
dependencies:
11197+
"@metamask/utils": ^11.0.1
11198+
fast-safe-stringify: ^2.0.6
11199+
checksum: 262a1ab57121e277eb979325d8e4335b9f4194c5acd0138ee0032db35b4e20ea0423badb5dad4bdf6abb85d22b476377f17911a54f82b3b1a2bdffc36654d028
11200+
languageName: node
11201+
linkType: hard
11202+
1114911203
"@metamask/safe-event-emitter@npm:2.0.0, @metamask/safe-event-emitter@npm:^2.0.0":
1115011204
version: 2.0.0
1115111205
resolution: "@metamask/safe-event-emitter@npm:2.0.0"
@@ -11842,7 +11896,7 @@ __metadata:
1184211896
"@metamask/eslint-config-nodejs": ^6.0.0
1184311897
"@metamask/eslint-config-typescript": ^6.0.0
1184411898
"@metamask/onboarding": ^1.0.1
11845-
"@metamask/providers": 16.1.0
11899+
"@metamask/providers": ^18.3.1
1184611900
"@metamask/sdk-communication-layer": "workspace:*"
1184711901
"@metamask/sdk-install-modal-web": "workspace:*"
1184811902
"@paulmillr/qr": ^0.2.1
@@ -11911,13 +11965,37 @@ __metadata:
1191111965
languageName: unknown
1191211966
linkType: soft
1191311967

11968+
"@metamask/superstruct@npm:^3.1.0":
11969+
version: 3.1.0
11970+
resolution: "@metamask/superstruct@npm:3.1.0"
11971+
checksum: 00e4d0c0aae8b25ccc1885c1db0bb4ed1590010570140c255e4deee3bf8a10c859c8fce5e475b4ae09c8a56316207af87585b91f7f5a5c028d668ccd111f19e3
11972+
languageName: node
11973+
linkType: hard
11974+
1191411975
"@metamask/swappable-obj-proxy@npm:^2.1.0":
1191511976
version: 2.1.0
1191611977
resolution: "@metamask/swappable-obj-proxy@npm:2.1.0"
1191711978
checksum: b15cebee7fb189d1143d3a755a38a7d88f56f91e1277425a51f63c50c432dfb4e6e22650ef67474ae4ef2a97344231af00be6780f126c47d401a23c8a8fb3c9c
1191811979
languageName: node
1191911980
linkType: hard
1192011981

11982+
"@metamask/utils@npm:^11.0.1":
11983+
version: 11.0.1
11984+
resolution: "@metamask/utils@npm:11.0.1"
11985+
dependencies:
11986+
"@ethereumjs/tx": ^4.2.0
11987+
"@metamask/superstruct": ^3.1.0
11988+
"@noble/hashes": ^1.3.1
11989+
"@scure/base": ^1.1.3
11990+
"@types/debug": ^4.1.7
11991+
debug: ^4.3.4
11992+
pony-cause: ^2.1.10
11993+
semver: ^7.5.4
11994+
uuid: ^9.0.1
11995+
checksum: a5072f87157f6763328767bf1ddc01deb94e13f32af58d0993e0450e7e211fb29882280a1013cbdc7752b152a662be3d9beef8129a9097dba7d465389c398b3c
11996+
languageName: node
11997+
linkType: hard
11998+
1192111999
"@metamask/utils@npm:^3.0.1":
1192212000
version: 3.6.0
1192312001
resolution: "@metamask/utils@npm:3.6.0"
@@ -31798,6 +31876,17 @@ __metadata:
3179831876
languageName: node
3179931877
linkType: hard
3180031878

31879+
"extension-port-stream@npm:^4.1.0":
31880+
version: 4.2.0
31881+
resolution: "extension-port-stream@npm:4.2.0"
31882+
dependencies:
31883+
readable-stream: ^3.6.2 || ^4.4.2
31884+
peerDependencies:
31885+
webextension-polyfill: ^0.10.0 || ^0.11.0 || ^0.12.0
31886+
checksum: 85559c82e3f3aa21462e234b30b7d53872708893664cd03f2f848af556cf0730cf2243b089efc9d40bbe9a4f73bd8fd19684db5a985329b0c4402b4f2fe26358
31887+
languageName: node
31888+
linkType: hard
31889+
3180131890
"extract-zip@npm:2.0.1, extract-zip@npm:^2.0.1":
3180231891
version: 2.0.1
3180331892
resolution: "extract-zip@npm:2.0.1"

0 commit comments

Comments
 (0)