@abstract-foundation/agw-react
Version:
Abstract Global Wallet React Components
52 lines • 2.08 kB
JavaScript
import { validChains, } from '@abstract-foundation/agw-client';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import React, { useMemo } from 'react';
import { http } from 'viem';
import { createConfig, WagmiProvider } from 'wagmi';
import { abstractWalletConnector } from './abstractWalletConnector.js';
/**
* AbstractWalletProvider is a React provider that wraps the WagmiProvider and QueryClientProvider.
* It provides the AbstractWalletContext to its children.
* @example
* ```tsx
* import { AbstractWalletProvider } from '@abstractwallet/agw-react';
*
* const App = () => {
* // optional configuration overrides
* const transport = http("https://your.abstract.node.example.com/rpc")
* const queryClient = new QueryClient()
* return (
* <AbstractWalletProvider chain={abstractTestnet} transport={transport} queryClient={queryClient}>
* <Component {...pageProps} />
* </AbstractWalletProvider>
* );
* };
* ```
* @param {AbstractWalletConfig} config - The configuration for the AbstractWalletProvider.
*/
export const AbstractWalletProvider = ({ chain, transport, queryClient = new QueryClient(), customPaymasterHandler, children, }) => {
if (!validChains[chain.id]) {
throw new Error(`Chain ${chain.id} is not supported`);
}
const wagmiConfig = useMemo(() => {
return createConfig({
chains: [chain],
ssr: true,
connectors: [
abstractWalletConnector({
customPaymasterHandler,
}),
],
transports: {
[chain.id]: transport ??
http(undefined, {
batch: true,
}),
},
multiInjectedProviderDiscovery: false,
});
}, [chain, transport, customPaymasterHandler]);
return (React.createElement(WagmiProvider, { config: wagmiConfig },
React.createElement(QueryClientProvider, { client: queryClient }, children)));
};
//# sourceMappingURL=agwProvider.js.map