Skip to content

Instantly share code, notes, and snippets.

@ademidun
Created April 23, 2022 23:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ademidun/01264cf9fe23d8345a803af3b33e8503 to your computer and use it in GitHub Desktop.
Save ademidun/01264cf9fe23d8345a803af3b33e8503 to your computer and use it in GitHub Desktop.
/**
Working version of https://docs.web3auth.io/quick-start?lang=react&chain=eth&customAuthentication=no&customLogin=no&whitelabel=no
**/
import { ADAPTER_EVENTS, CHAIN_NAMESPACES, SafeEventEmitterProvider } from "@web3auth/base";
import { Web3Auth } from "@web3auth/web3auth";
import { OpenloginAdapter } from "@web3auth/openlogin-adapter";
import { useEffect, useState } from "react";
import "./App.css";
import RPC from "../../services/EVM";
const clientId = process.env.REACT_APP_WEB_3_AUTH_CLIENT_ID;
export const initParams = {}
function Account() {
const [web3auth, setWeb3auth] = useState<Web3Auth | null>(null);
const [provider, setProvider] = useState<SafeEventEmitterProvider | null>(null);
const subscribeAuthEvents = (web3auth: Web3Auth) => {
// Can subscribe to all ADAPTER_EVENTS and LOGIN_MODAL_EVENTS
web3auth.on(ADAPTER_EVENTS.CONNECTED, (data: unknown) => {
console.log("Yeah!, you are successfully logged in", data);
setProvider(web3auth.provider);
});
web3auth.on(ADAPTER_EVENTS.CONNECTING, () => {
console.log("connecting");
});
web3auth.on(ADAPTER_EVENTS.DISCONNECTED, () => {
console.log("disconnected");
});
web3auth.on(ADAPTER_EVENTS.ERRORED, (error) => {
console.error("some error or user has cancelled login request", error);
});
};
useEffect(() => {
const init = async () => {
try {
const web3AuthCtorParams = {
clientId: clientId||"",
chainConfig: { chainNamespace: "eip155", chainId: "0x1" }
};
const web3auth = new Web3Auth(web3AuthCtorParams as any);
const openloginAdapter = new OpenloginAdapter({
adapterSettings: {
clientId: clientId|| "",
network: "testnet",
uxMode: "redirect",
},
});
web3auth.configureAdapter(openloginAdapter);web3auth.configureAdapter(openloginAdapter);
subscribeAuthEvents(web3auth);
setWeb3auth(web3auth);
await web3auth.initModal(initParams);
} catch (error) {
console.error(error);
}
init();
}}, []);
const login = async () => {
if (!web3auth) {
console.log("web3auth not initialized yet");
return;
}
const provider = await web3auth.connect();
setProvider(provider);
};
const getUserInfo = async () => {
if (!web3auth) {
console.log("web3auth not initialized yet");
return;
}
const user = await web3auth.getUserInfo();
uiConsole(user);
};
const logout = async () => {
if (!web3auth) {
console.log("web3auth not initialized yet");
return;
}
await web3auth.logout();
setProvider(null);
};
const getAccounts = async () => {
if (!provider) {
console.log("provider not initialized yet");
return;
}
const rpc = new RPC(provider);
const userAccount = await rpc.getAccounts();
uiConsole(userAccount);
};
const getBalance = async () => {
if (!provider) {
console.log("provider not initialized yet");
return;
}
const rpc = new RPC(provider);
const balance = await rpc.getBalance();
uiConsole(balance);
};
const signMessage = async () => {
if (!provider) {
console.log("provider not initialized yet");
return;
}
const rpc = new RPC(provider);
const result = await rpc.signMessage();
uiConsole(result);
};
const signTransaction = async () => {
if (!provider) {
uiConsole("provider not initialized yet");
return;
}
const rpc = new RPC(provider);
const result = await rpc.signTransaction();
uiConsole(result);
};
const sendTransaction = async () => {
if (!provider) {
console.log("provider not initialized yet");
return;
}
const rpc = new RPC(provider);
const result = await rpc.signAndSendTransaction();
uiConsole(result);
};
function uiConsole(...args: any[]): void {
const el = document.querySelector("#console>p");
if (el) {
el.innerHTML = JSON.stringify(args || {}, null, 2);
}
}
const loggedInView = (
<>
<button onClick={getUserInfo} className="card">
Get User Info
</button>
<button onClick={getAccounts} className="card">
Get Accounts
</button>
<button onClick={getBalance} className="card">
Get Balance
</button>
<button onClick={signMessage} className="card">
Sign Message
</button>
<button onClick={signTransaction} className="card">
Sign Transaction
</button>
<button onClick={sendTransaction} className="card">
Send Transaction
</button>
<button onClick={logout} className="card">
Log Out
</button>
<div id="console" style={{ whiteSpace: "pre-line" }}>
<p style={{ whiteSpace: "pre-line" }}></p>
</div>
</>
);
const unloggedInView = (
<button onClick={login} className="card">
Login
</button>
);
return (
<div className="container">
<h1 className="title">
<a target="_blank" href="http://web3auth.io/" rel="noreferrer">
Web3Auth
</a>{" "}
& ReactJS Example
</h1>
<div className="grid">{provider ? loggedInView : unloggedInView}</div>
<footer className="footer">
<a href="https://github.com/Web3Auth/Web3Auth/tree/master/examples/react-app" target="_blank" rel="noopener noreferrer">
Source code {" "}
<img className="logo" src="/images/github-logo.png" alt="github-logo" />
</a>
</footer>
</div>
);
}
export default Account;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment