Releases: rainbow-me/rainbowkit
@rainbow-me/[email protected]
Patch Changes
- b5a7878: Updated OP Mainnet branding
@rainbow-me/[email protected]
Patch Changes
- f533ac2: Support for React 19.
@rainbow-me/[email protected]
Patch Changes
- 5b8e146: Added
de-DE
andde
locale support for the German language. - 7fceab8: Added
ms-MY
andms
locale support for the Malay language. - 9dd23d9: Added BeraSig support with
berasigWallet
wallet connector - 3469982: Added Wigwam support with
wigwamWallet
wallet connector - 0c6af55: Added icon for Flow chain
@rainbow-me/[email protected]
Minor Changes
-
f02bced: The Authentication API now supports ERC-1271 and ERC-6492 for smart contract signature verification to enable Sign-in with Ethereum for Smart Contract Wallets, including Coinbase Smart Wallet and Argent.
We have also deprecated the
siwe
andethers
peer dependencies in favor ofviem/siwe
to make RainbowKit even more seamless.No changes are necessary for dApps that don't rely on the Authentication API.
Follow the appropriate steps below to migrate.
NextAuth Authentication
- Remove
siwe
andethers
npm uninstall siwe ethers
- Upgrade RainbowKit,
rainbowkit-siwe-next-auth
, andviem
npm i @rainbow-me/rainbowkit@^2.2.0 rainbow-me/rainbowkit-siwe-next-auth@^0.5.0 viem@^2.12.0
- Create a Public Client
This allows
viem
to verify smart contract signatures.const config = getDefaultConfig({ /* your config */ }); + const publicClient = config.getClient().extend(publicActions);
- Adjust your
authorize
implementation in/api/auth/[...nextauth].ts
- import { SiweMessage } from 'siwe'; + import { + type SiweMessage, + parseSiweMessage, + validateSiweMessage, + } from 'viem/siwe'; export function getAuthOptions(req: IncomingMessage): NextAuthOptions { const providers = [ CredentialsProvider({ async authorize(credentials: any) { - const siwe = new SiweMessage( - JSON.parse(credentials?.message || '{}'), - ); + const siweMessage = parseSiweMessage( + credentials?.message, + ) as SiweMessage; + if (!validateSiweMessage({ + address: siweMessage?.address, + message: siweMessage, + })) { + return null; + } /* ... */ - await siwe.verify({ signature: credentials?.signature || '' }); + const valid = await publicClient.verifyMessage({ + address: siweMessage?.address, + message: credentials?.message, + signature: credentials?.signature, + }); + if (!valid) { + return null; + } }, /* ... */ }) ] }
Reference the with-next-siwe-next-auth example for more guidance.
Custom Authentication
- Remove
siwe
andethers
npm uninstall siwe ethers
- Upgrade RainbowKit and
viem
npm i @rainbow-me/rainbowkit@^2.2.0 viem@^2.12.0
- Create a Public Client
This allows
viem
to verify smart contract signatures.const config = getDefaultConfig({ /* your config */ }); + const publicClient = config.getClient().extend(publicActions);
- Adjust your
createAuthenticationAdapter
implementation
- import { SiweMessage } from 'siwe'; + import { createSiweMessage } from 'viem/siwe'; createAuthenticationAdapter({ getNonce: async () => { const response = await fetch('/api/nonce'); return await response.text(); }, createMessage: ({ nonce, address, chainId }) => { - return new SiweMessage({ + return createSiweMessage({ domain: window.location.host, address, statement: 'Sign in with Ethereum to the app.', uri: window.location.origin, version: '1', chainId, nonce, }); }, - getMessageBody: ({ message }) => { - return message.prepareMessage(); - }, /* ... */ })
- Adopt
generateSiweNonce
- import { generateNonce } from 'siwe'; + import { generateSiweNonce } from 'viem/siwe'; - req.session.nonce = generateNonce(); + req.session.nonce = generateSiweNonce();
- Adopt
parseSiweMessage
andverifyMessage
if your Verify handler
- import { SiweMessage } from 'siwe'; + import { parseSiweMessage, type SiweMessage } from 'viem/siwe'; const { message, signature } = req.body; - const siweMessage = new SiweMessage(message); - const { success, error, data } = await siweMessage.verify({ - signature, - }); + const siweMessage = parseSiweMessage(message) as SiweMessage; + const success = await publicClient.verifyMessage({ + address: siweMessage.address, + message, + signature, + }); - if (!success) throw error; + if (!success) throw new Error('Invalid signature.'); - if (data.nonce !== req.session.nonce) + if (siweMessage.nonce !== req.session.nonce) + return res.status(422).json({ message: 'Invalid nonce.' });
Reference the with-next-siwe-iron-session example for more guidance.
- Remove
@rainbow-me/[email protected]
Minor Changes
-
f02bced: The Authentication API now supports ERC-1271 and ERC-6492 for smart contract signature verification to enable Sign-in with Ethereum for Smart Contract Wallets.
We have also deprecated the
siwe
andethers
peer dependencies in favor ofviem/siwe
.Follow the appropriate steps below to migrate.
- Remove
siwe
andethers
npm uninstall siwe ethers
- Upgrade RainbowKit,
rainbowkit-siwe-next-auth
, andviem
npm i @rainbow-me/rainbowkit@^2.2.0 rainbow-me/rainbowkit-siwe-next-auth@^0.5.0 viem@^2.12.0
- Create a Public Client
This allows
viem
to verify smart contract signatures.const config = getDefaultConfig({ /* your config */ }); + const publicClient = config.getClient().extend(publicActions);
- Adjust your
authorize
implementation in/api/auth/[...nextauth].ts
- import { SiweMessage } from 'siwe'; + import { + type SiweMessage, + parseSiweMessage, + validateSiweMessage, + } from 'viem/siwe'; export function getAuthOptions(req: IncomingMessage): NextAuthOptions { const providers = [ CredentialsProvider({ async authorize(credentials: any) { - const siwe = new SiweMessage( - JSON.parse(credentials?.message || '{}'), - ); + const siweMessage = parseSiweMessage( + credentials?.message, + ) as SiweMessage; + if (!validateSiweMessage({ + address: siweMessage?.address, + message: siweMessage, + })) { + return null; + } /* ... */ - await siwe.verify({ signature: credentials?.signature || '' }); + const valid = await publicClient.verifyMessage({ + address: siweMessage?.address, + message: credentials?.message, + signature: credentials?.signature, + }); + if (!valid) { + return null; + } }, /* ... */ }) ] }
Reference the with-next-siwe-next-auth example for more guidance.
- Remove
@rainbow-me/[email protected]
@rainbow-me/[email protected]
Patch Changes
- 63d8386: Added Valora support with
valoraWallet
wallet connector - d46637a: Added
safeWallet
wallet connector togetDefaultConfig
by default to improve the Safe Wallet app browser connection flow with a Safe button included by default in the wallet list - 8d9a4e6: Fixed an issue where some options in the "Get Wallet" flow would appear as a blank page, or lack a back button to return to the Connect flow.
@rainbow-me/[email protected]
Patch Changes
-
c08f620: Added
zh-HK
andzh-TW
locales for Traditional Chinese language support. You can also specifyzh-Hans
andzh-Hant
locales to refer to the writing systems directly.Reference our guide to learn more about Localization.
-
675f9dd: Added icon for Gnosis Chain
-
f65b5c4: Added icon for Celo chain
-
9c36bfd: Added Kaia Wallet support with
kaiaWallet
wallet connector
@rainbow-me/[email protected]
Patch Changes
- 72fe07d: Added Binance Web3 Wallet support with
binanceWallet
wallet connector - b530c80: Added mobile support for
zealWallet
wallet connector - 7f6e36e: Added missing
rdns
property for some wallets. This allows them to be discoverable as an EIP-6963 connector. - 2eeb7b9: Improved the Safe Wallet app browser connection flow with a Safe button included by default in the wallet list
- d02d73f: Resolved an issue where the Phantom wallet did not appear as an EIP-6963 connector.