Skip to content

Commit dd9b829

Browse files
authored
Merge branch 'main' into tomiir/grafana-session-proposal-data
2 parents 6f6678e + 8fe48b0 commit dd9b829

17 files changed

Lines changed: 347 additions & 24 deletions

File tree

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
---
2+
'@reown/appkit-utils': patch
3+
'@reown/appkit': patch
4+
'@reown/appkit-cdn': patch
5+
'@reown/appkit-cli': patch
6+
'@reown/appkit-codemod': patch
7+
'@reown/appkit-common': patch
8+
'@reown/appkit-core': patch
9+
'@reown/appkit-experimental': patch
10+
'@reown/appkit-pay': patch
11+
'@reown/appkit-polyfills': patch
12+
'@reown/appkit-scaffold-ui': patch
13+
'@reown/appkit-siwe': patch
14+
'@reown/appkit-siwx': patch
15+
'@reown/appkit-testing': patch
16+
'@reown/appkit-ui': patch
17+
'@reown/appkit-universal-connector': patch
18+
'@reown/appkit-wallet-button': patch
19+
'@reown/appkit-wallet': patch
20+
'@reown/appkit-controllers': patch
21+
'@reown/appkit-adapter-bitcoin': patch
22+
'@reown/appkit-adapter-ethers': patch
23+
'@reown/appkit-adapter-ethers5': patch
24+
'@reown/appkit-adapter-solana': patch
25+
'@reown/appkit-adapter-ton': patch
26+
'@reown/appkit-adapter-tron': patch
27+
'@reown/appkit-adapter-wagmi': patch
28+
---
29+
30+
Fix headless hosts getting stuck after a disconnect, where connecting any wallet afterwards silently did nothing and every attempt reported a connection error until the page was reloaded.
31+
32+
Two gaps, both only reachable without scaffold-ui (which re-fetches the URI per view and clears the error on "try again"):
33+
34+
- `wcError` was only ever cleared by a successful mobile deeplink or the headful "try again" button, so a single failure left every later attempt reading as failed. A new `connectWalletConnect` attempt now starts from a clean error state.
35+
- `ConnectionControllerUtil.onConnectMobile` is a no-op without a pairing URI, and a disconnect clears it (`resetWcConnection`). `connectWallet` / the `useAppKitWallets` `connect` now reject in that case (`ConnectionControllerUtil.assertWcUriForDeeplink`) instead of resolving as if a wallet had been opened, so the host can pre-fetch a URI and retry rather than waiting on a redirect that never fires.
36+
37+
Headless hosts can also now read the pairing expiry: `getWalletConnectUri()` returns `wcPairingExpiry` alongside `wcUri` / `wcError` / `wcFetchingUri`, and `subscribeWalletConnectUri` fires on it. `ConnectionController.setUri` has always stamped it four minutes out, and scaffold-ui reads it (`isPairingExpired`) to decide whether to re-connect — it simply was never passed through to the headless read.
38+
39+
It matters for a host that consumes the URI later than it fetched it. Scaffold-ui generates a URI and acts on it in one gesture, so a lapsed pairing is nearly unreachable there. A host whose picker fetches on wallet select and deeplinks on a second, user-paced click can easily be past four minutes by the time the user taps, and no other field in the snapshot distinguishes a fresh URI from a dead one.
40+

.changeset/sweet-steaks-crash.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
---
2+
'@reown/appkit-adapter-wagmi': patch
3+
'@reown/appkit-controllers': patch
4+
'@reown/appkit-siwx': patch
5+
'pay-test-exchange': patch
6+
'@reown/appkit-adapter-bitcoin': patch
7+
'@reown/appkit-adapter-ethers': patch
8+
'@reown/appkit-adapter-ethers5': patch
9+
'@reown/appkit-adapter-solana': patch
10+
'@reown/appkit-adapter-ton': patch
11+
'@reown/appkit-adapter-tron': patch
12+
'@reown/appkit': patch
13+
'@reown/appkit-utils': patch
14+
'@reown/appkit-cdn': patch
15+
'@reown/appkit-cli': patch
16+
'@reown/appkit-codemod': patch
17+
'@reown/appkit-common': patch
18+
'@reown/appkit-core': patch
19+
'@reown/appkit-experimental': patch
20+
'@reown/appkit-pay': patch
21+
'@reown/appkit-polyfills': patch
22+
'@reown/appkit-scaffold-ui': patch
23+
'@reown/appkit-siwe': patch
24+
'@reown/appkit-testing': patch
25+
'@reown/appkit-ui': patch
26+
'@reown/appkit-universal-connector': patch
27+
'@reown/appkit-wallet': patch
28+
'@reown/appkit-wallet-button': patch
29+
---
30+
31+
fix(siwx): resolve multichain wallet signing race condition
32+
33+
Fixed an issue where SIWX signing would fail with multichain wallets (Trust Wallet, SafePal) when the active namespace changed between message creation and signing.

.changeset/wacky-bobcats-cross.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
---
2+
'@reown/appkit-utils': patch
3+
'@reown/appkit-common': patch
4+
'pay-test-exchange': patch
5+
'@reown/appkit-adapter-bitcoin': patch
6+
'@reown/appkit-adapter-ethers': patch
7+
'@reown/appkit-adapter-ethers5': patch
8+
'@reown/appkit-adapter-solana': patch
9+
'@reown/appkit-adapter-ton': patch
10+
'@reown/appkit-adapter-tron': patch
11+
'@reown/appkit-adapter-wagmi': patch
12+
'@reown/appkit': patch
13+
'@reown/appkit-cdn': patch
14+
'@reown/appkit-cli': patch
15+
'@reown/appkit-codemod': patch
16+
'@reown/appkit-controllers': patch
17+
'@reown/appkit-core': patch
18+
'@reown/appkit-experimental': patch
19+
'@reown/appkit-pay': patch
20+
'@reown/appkit-polyfills': patch
21+
'@reown/appkit-scaffold-ui': patch
22+
'@reown/appkit-siwe': patch
23+
'@reown/appkit-siwx': patch
24+
'@reown/appkit-testing': patch
25+
'@reown/appkit-ui': patch
26+
'@reown/appkit-universal-connector': patch
27+
'@reown/appkit-wallet': patch
28+
'@reown/appkit-wallet-button': patch
29+
---
30+
31+
Fixed Rootstock network logo not being displayed in the network selectors.

apps/laboratory/src/constants/appKitConfigs.ts

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,86 @@ export const appKitConfigs = {
396396
siwx: new ReownAuthentication(),
397397
siwxReown: true
398398
},
399+
400+
// ----- SIWX Single Chain Variants ------------------------------
401+
'siwx-wagmi': {
402+
...commonAppKitConfig,
403+
wagmiConfig: commonWagmiConfig,
404+
adapters: ['wagmi'],
405+
networks: ConstantsUtil.EvmNetworks,
406+
siwx: new DefaultSIWX()
407+
},
408+
'siwx-ethers': {
409+
...commonAppKitConfig,
410+
adapters: ['ethers'],
411+
networks: ConstantsUtil.EvmNetworks,
412+
siwx: new DefaultSIWX()
413+
},
414+
'siwx-ethers5': {
415+
...commonAppKitConfig,
416+
adapters: ['ethers5'],
417+
networks: ConstantsUtil.EvmNetworks,
418+
siwx: new DefaultSIWX()
419+
},
420+
'siwx-solana': {
421+
...commonAppKitConfig,
422+
adapters: ['solana'],
423+
networks: ConstantsUtil.SolanaNetworks,
424+
siwx: new DefaultSIWX()
425+
},
426+
'siwx-bitcoin': {
427+
...commonAppKitConfig,
428+
adapters: ['bitcoin'],
429+
networks: ConstantsUtil.BitcoinNetworks,
430+
siwx: new DefaultSIWX()
431+
},
432+
433+
// ----- SIWX Multichain Variants ------------------------------
434+
'siwx-wagmi-solana': {
435+
...commonAppKitConfig,
436+
wagmiConfig: commonWagmiConfig,
437+
adapters: ['wagmi', 'solana'],
438+
networks: [...ConstantsUtil.EvmNetworks, ...ConstantsUtil.SolanaNetworks],
439+
siwx: new DefaultSIWX()
440+
},
441+
'siwx-ethers-solana': {
442+
...commonAppKitConfig,
443+
adapters: ['ethers', 'solana'],
444+
networks: [...ConstantsUtil.EvmNetworks, ...ConstantsUtil.SolanaNetworks],
445+
siwx: new DefaultSIWX()
446+
},
447+
'siwx-all': {
448+
...commonAppKitConfig,
449+
wagmiConfig: commonWagmiConfig,
450+
adapters: ['wagmi', 'solana', 'bitcoin', 'ton', 'tron'],
451+
networks: ConstantsUtil.AllNetworks,
452+
siwx: new DefaultSIWX()
453+
},
454+
455+
// ----- Reown Authentication Variants ------------------------------
456+
'reown-auth-wagmi-solana': {
457+
...commonAppKitConfig,
458+
wagmiConfig: commonWagmiConfig,
459+
adapters: ['wagmi', 'solana'],
460+
networks: [...ConstantsUtil.EvmNetworks, ...ConstantsUtil.SolanaNetworks],
461+
siwx: new ReownAuthentication(),
462+
siwxReown: true
463+
},
464+
'reown-auth-ethers-solana': {
465+
...commonAppKitConfig,
466+
adapters: ['ethers', 'solana'],
467+
networks: [...ConstantsUtil.EvmNetworks, ...ConstantsUtil.SolanaNetworks],
468+
siwx: new ReownAuthentication(),
469+
siwxReown: true
470+
},
471+
'reown-auth-all': {
472+
...commonAppKitConfig,
473+
wagmiConfig: commonWagmiConfig,
474+
adapters: ['wagmi', 'solana', 'bitcoin'],
475+
networks: ConstantsUtil.AllNetworks,
476+
siwx: new ReownAuthentication(),
477+
siwxReown: true
478+
},
399479
'pay-default': {
400480
...commonAppKitConfig,
401481
wagmiConfig: commonWagmiConfig,

packages/adapters/wagmi/src/client.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ import {
3131
UserRejectedRequestError as ViemUserRejectedRequestError,
3232
checksumAddress,
3333
formatUnits,
34-
parseUnits
34+
isHex,
35+
parseUnits,
36+
toHex
3537
} from 'viem'
3638

3739
import { ErrorUtil, UserRejectedRequestError } from '@reown/appkit-common'
@@ -415,6 +417,22 @@ export class WagmiAdapter extends AdapterBlueprint {
415417
params: AdapterBlueprint.SignMessageParams
416418
): Promise<AdapterBlueprint.SignMessageResult> {
417419
try {
420+
if (
421+
params.connectorId === CommonConstantsUtil.CONNECTOR_ID.WALLET_CONNECT &&
422+
params.provider
423+
) {
424+
const hexMessage = isHex(params.message) ? params.message : toHex(params.message)
425+
const signature = await params.provider.request<string>(
426+
{
427+
method: 'personal_sign',
428+
params: [hexMessage, params.address]
429+
},
430+
params.caipNetworkId
431+
)
432+
433+
return { signature: signature as Hex }
434+
}
435+
418436
const signature = await signMessage(this.wagmiConfig, {
419437
message: params.message,
420438
account: params.address as Hex

packages/appkit-utils/src/PresetsUtil.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,10 @@ export const PresetsUtil = {
108108
80094: 'e329c2c9-59b0-4a02-83e4-212ff3779900',
109109
// Abstract Mainnet
110110
2741: 'fc2427d1-5af9-4a9c-8da5-6f94627cd900',
111+
// Rootstock Mainnet
112+
30: 'fb7e1624-99e3-4c36-ea01-4cfe46c4a300',
113+
// Rootstock Testnet
114+
31: '2eb3d92a-3d77-42aa-87c9-190adb144800',
111115
// Solana networks
112116
'5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp': 'a1b58899-f671-4276-6a5e-56ca5bd59700',
113117
'4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z': 'a1b58899-f671-4276-6a5e-56ca5bd59700',

packages/common/src/utils/PresetsUtil.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,10 @@ export const PresetsUtil = {
106106
80094: 'e329c2c9-59b0-4a02-83e4-212ff3779900',
107107
// Abstract Mainnet
108108
2741: 'fc2427d1-5af9-4a9c-8da5-6f94627cd900',
109+
// Rootstock Mainnet
110+
30: 'fb7e1624-99e3-4c36-ea01-4cfe46c4a300',
111+
// Rootstock Testnet
112+
31: '2eb3d92a-3d77-42aa-87c9-190adb144800',
109113
// Solana networks
110114
'5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp': 'a1b58899-f671-4276-6a5e-56ca5bd59700',
111115
'4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z': 'a1b58899-f671-4276-6a5e-56ca5bd59700',

packages/controllers/exports/react.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -542,6 +542,7 @@ export function useAppKitWallets(): UseAppKitWalletsReturn {
542542
const wcWallet = ConnectUtil.mapWalletItemToWcWallet(_wallet)
543543

544544
if (wcWallet.mobile_link) {
545+
ConnectionControllerUtil.assertWcUriForDeeplink()
545546
ConnectionControllerUtil.onConnectMobile(wcWallet, options?.wcPayUrl)
546547
} else {
547548
MobileWalletUtil.handleMobileDeeplinkRedirect(_wallet.id, activeNamespace, {

packages/controllers/src/controllers/AdapterController/ChainAdapterBlueprint.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -832,6 +832,8 @@ export namespace AdapterBlueprint {
832832
message: string
833833
address: string
834834
provider?: AppKitConnector['provider']
835+
caipNetworkId?: string
836+
connectorId?: string
835837
}
836838

837839
export type SignMessageResult = {

packages/controllers/src/controllers/ConnectionController.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,7 @@ const controller = {
227227

228228
async connectWalletConnect({ cache = 'auto' }: ConnectWalletConnectParameters = {}) {
229229
state.wcFetchingUri = true
230+
state.wcError = false
230231
const isInTelegramOrSafariIos =
231232
CoreHelperUtil.isTelegram() || (CoreHelperUtil.isSafari() && CoreHelperUtil.isIos())
232233

0 commit comments

Comments
 (0)