"use client";
import { Web3Auth } from "@web3auth/modal";
import { OpenloginAdapter } from "@web3auth/openlogin-adapter";
import { CHAIN_NAMESPACES } from "@web3auth/base";
import { createContext, useContext, useEffect, useState, ReactNode } from "react";
const Web3AuthContext = createContext<{ web3auth: Web3Auth | null }>({ web3auth: null });
export const useWeb3Auth = () => useContext(Web3AuthContext);
export const Web3AuthProvider = ({ children }: { children: ReactNode }) => {
const [web3auth, setWeb3auth] = useState<Web3Auth | null>(null);
useEffect(() => {
const init = async () => {
try {
const web3auth = new Web3Auth({
clientId: process.env.NEXT_PUBLIC_WEB3AUTH_CLIENT_ID!,
web3AuthNetwork: "testnet",
chainConfig: {
chainNamespace: CHAIN_NAMESPACES.EIP155,
chainId: "0x1",
rpcTarget: "https://rpc.ankr.com/eth",
},
});
const openloginAdapter = new OpenloginAdapter({
adapterSettings: {
network: "testnet",
uxMode: "popup",
},
});
web3auth.configureAdapter(openloginAdapter);
setWeb3auth(web3auth);
await web3auth.initModal();
} catch (error) {
console.error(error);
}
};
init();
}, []);
return (
<Web3AuthContext.Provider value={{ web3auth }}>
{children}
</Web3AuthContext.Provider>
);
};