Skip to main content

Initializing PnP Web Modal SDK

After Installation, the next step to use Web3Auth is to Initialize the SDK. However, the Initialization is a two-step process, with an additional two steps for customizations, i.e.

Please note that these are the most critical steps where you need to pass on different parameters according to the preference of your project. Additionally, If you wish to customize your Web3Auth Instance, Whitelabeling and Custom Authentication have to be configured within this step.

Instantiating Web3Auth

Import the Web3Auth class from @web3auth/modal

import { Web3Auth } from "@web3auth/modal";

Assign the Web3Auth class to a variable

const web3auth = new Web3Auth(Web3AuthOptions);

This Web3Auth constructor takes an object with Web3AuthOptions as input.

Arguments

Web3AuthOptions

ParameterDescription
clientIdYour Web3Auth Client ID. You can get it from Web3Auth Dashboard under project details. It's a mandatory field of type string
web3AuthNetworkDefines the Web3Auth network. It's a mandatory field of type OPENLOGIN_NETWORK_TYPE.
useCoreKitKey?Use CoreKit Key to get core kit key. It's an optional field with default value as false.
sessionTime?It allows developers to configure the session management time. Session Time is in seconds, default is 86400 seconds which is 1 day. sessionTime can be max 7 days
authMode?Web3Auth instance provides different adapters for different type of usages. If you are a dApp and want to use external wallets like metamask, then you can use the DAPP authMode. If you are a wallet and only want to use you own wallet implementations, then you should use WALLET authMode.
uiConfig?WhiteLabel options for web3auth. It helps you define custom UI, branding, and translations for your brand app. It takes Omit<UIConfig, "adapterListener"> as a value.
storageKey?Setting to "local" will persist social login session across browser tabs.
privateKeyProviderPrivate key provider for your chain namespace. It takes IBaseProvider as a value.

Adding a Private key provider

privateKeyProvider

privateKeyProvider parameter helps you to connect with various wallet SDKs. These are preconfigured RPC clients for different blockchains used to interact with the respective blockchain networks.

note

It's mandatory to provide privateKeyProvider for your corresponding chain namespace. To know more in-depth about providers, have a look at your Providers reference.

const chainConfig = {
chainId: "0x1", // Please use 0x1 for Mainnet
rpcTarget: "https://rpc.ankr.com/eth",
displayName: "Ethereum Mainnet",
blockExplorerUrl: "https://etherscan.io/",
ticker: "ETH",
tickerName: "Ethereum",
logo: "https://images.toruswallet.io/eth.svg",
};

const ethereumPrivateKeyProvider = EthereumPrivateKeyProvider({
config: { chainConfig },
});

const web3auth = new Web3Auth({
clientId: "", // Get your Client ID from the Web3Auth Dashboard
web3AuthNetwork: WEB3AUTH_NETWORK.SAPPHIRE_MAINNET,
privateKeyProvider: ethereumPrivateKeyProvider,
});

Adding a Custom Chain Configuration

chainConfig

ParameterDescription
chainNamespaceThe namespace of your preferred chain. Checkout Providers SDK Reference for understanding RPC Calls. It accepts ChainNamespaceType as a value.
chainIdThe chain id of the selected blockchain in hex string format.
rpcTarget
  • RPC Target URL for the selected chainNamespace & chainId.
  • We provide a default RPC Target for certain blockchains, but due to congestion it might be slow hence it is recommended to provide your own RPC Target URL.
wsTargetWeb socket target URL for the chain in string.
displayNameDisplay Name for the chain in string.
blockExplorerUrlBlockchain's explorer URL in string. (eg: https://etherscan.io)
tickerDefault currency ticker in string for the network (e.g: ETH)
tickerNameName for currency ticker in string (e.g: Ethereum)
decimals?Number of decimals in number for the currency ticker (e.g: 18)
logoLogo for the chain.
isTestnet?Defines whether the network is testnet or not.

Whitelabeling

Within the uiConfig parameter, you can configure the Web3Auth Modal according to your application's requirements.

tip

This is just one of the aspects of whitelabeling you can achieve with Web3Auth. To know more in-depth about how you can Whitelabel your application with Web3Auth Plug and Play Modal SDK, have a look at our Whitelabeling SDK Reference.

uiConfig

ParameterDescription
loginMethodsOrder?The list of login methods can be reordered with this parameter. Those methods specified will be first on the list. Default value is ["google", "facebook", "twitter", "reddit", "discord", "twitch", "apple", "line", "github", "kakao", "linkedin", "weibo", "wechat", "email_passwordless"].
modalZIndex?Z-index of the modal and iframe. The default value is 99998 and accepts a string as a value.
displayErrorsOnModal?Whether to show errors on Web3Auth modal. Default value is true.
loginGridCol?Number of columns to display the Social Login buttons. Default value is 3, available options are 2 or 3.
primaryButton?Decides which button will be displayed as primary button in modal. Only one button will be primary and other buttons in modal will be secondary. Default value is socialLogin. Available options are externalLogin, socialLogin, and emailLogin.

WhiteLabelData

whiteLabel?: WhiteLabelData;

The whitelabel parameter takes WhitelabelData as input. The WhitelabelData object takes the following parameters:

WhiteLabelData

ParameterDescription
appName?App name to be displayed in the User Flow Screens. It accepts string as a value.
appUrl?App URL to be displayed in the User Flow Screens. It accepts string as a value.
logoLight?App logo to be shown on the light background (light theme). It accepts string as a value.
logoDark?App logo to be shown on the dark background (dark theme). It accepts string as a value.
defaultLanguage?Default Language to use.
Choose from:
  • en - English
  • de - German
  • ja - Japanese
  • ko - Korean
  • zh - Mandarin
  • es - Spanish
  • fr - French
  • pt - Portuguese
  • nl - Dutch
  • tr - Turkish
. Default language is en
mode?Choose between auto, light or dark background modes. Default is auto.
theme?Used to customize the theme of the login modal with the following options
'primary' - To customize the primary color of the modal's content. It accepts Record as a value.
tncLink?Language specific link for terms and conditions on torus-website. See (examples/vue-app) to configure e.g. tncLink: {en: "http://example.com/tnc/en", ja: "http://example.com/tnc/ja"}
privacyPolicy?Language specific link for privacy policy on torus-website. See (examples/vue-app) to configure e.g. privacyPolicy: { en: "http://example.com/tnc/en", ja: "http://example.com/tnc/ja", }

Returns

  • Object: The web3auth instance with all its methods and events.

Example

const web3auth = new Web3Auth({
clientId: "", // Get your Client ID from the Web3Auth Dashboard
web3AuthNetwork: WEB3AUTH_NETWORK.SAPPHIRE_MAINNET, // import {WEB3AUTH_NETWORK} from "@web3auth/base";
chainConfig: {
chainNamespace: CHAIN_NAMESPACES.EIP155,
chainId: "0x1",
rpcTarget: "https://rpc.ankr.com/eth", // This is the mainnet RPC we have added, please pass on your own endpoint while creating an app
},
uiConfig: {
appName: "W3A Heroes",
mode: "dark", // light, dark or auto
loginMethodsOrder: ["apple", "google", "twitter"],
logoLight: "https://web3auth.io/images/web3auth-logo.svg",
logoDark: "https://web3auth.io/images/web3auth-logo---Dark.svg",
defaultLanguage: "en", // en, de, ja, ko, zh, es, fr, pt, nl, tr
loginGridCol: 3,
primaryButton: "socialLogin", // "externalLogin" | "socialLogin" | "emailLogin"
},
modalZIndex: "99998",
});

Configuring Adapters

An adapter is a pluggable package that implements an IAdapter interface for a wallet within Web3Auth. An adapter can be plugged in and out of web3auth modal. Each adapter exposes the provider on successful user login that can be used to invoke RPC calls on the wallet and on the connected blockchain. Web3Auth's modal UI supports a set of default adapters depending on the authMode being used.

info

This step is generally optional. You don't have to configure any default adapter unless you want to override default configs for the adapter.

Only those adapters that are marked are nondefault in this table on the Adapters Documentation are required to be configured always based on the authMode you are using.

Configuring Openlogin Adapter

The default adapter of Web3Auth is the openlogin-adapter. This adapter is a wrapper around the openlogin library from Web3Auth and enables the social login features. For customising features of the main Web3Auth flow, like Whitelabel, Custom Authentication, etc. you need to customise the Openlogin Adapter.

tip

Checkout the openlogin-adapter SDK Reference for more details on different configurations you can pass for customisations.

Whitelabeling

whiteLabel

For customising the redirect screens while logging in and constructing the key, you need to pass on whiteLabel configurations to the adapterSettings property of the openlogin-adapter.

tip

This is just one of the aspects of whitelabeling you can achieve with Web3Auth. To know more in depth about how you can Whitelabel your application with Web3Auth, have a look at our Whitelabeling SDK Reference.

Example
import { OpenloginAdapter } from "@web3auth/openlogin-adapter";

const openloginAdapter = new OpenloginAdapter({
adapterSettings: {
clientId, //Optional - Provide only if you haven't provided it in the Web3Auth Instantiation Code
network: "sapphire_mainnet", // Optional - Provide only if you haven't provided it in the Web3Auth Instantiation Code
uxMode: "popup",
whiteLabel: {
appName: "W3A Heroes",
appUrl: "https://web3auth.io",
logoLight: "https://web3auth.io/images/web3auth-logo.svg",
logoDark: "https://web3auth.io/images/web3auth-logo---Dark.svg",
defaultLanguage: "en", // en, de, ja, ko, zh, es, fr, pt, nl, tr
mode: "dark", // whether to enable dark mode. defaultValue: auto
theme: {
primary: "#00D1B2",
},
useLogoLoader: true,
},
},
privateKeyProvider,
});
web3auth.configureAdapter(openloginAdapter);

Custom Authentication

loginConfig

With Web3Auth, you have the option to configure logins using your own authentication services. For adding your own authentication, you have to first configure your verifiers in the Web3Auth Dashboard. Have a look at our Custom Authentication Documentation for configuring that first.

Custom Authentication in Web3Auth is supported by the Openlogin Adapter, which is the default adapter for the Web3Auth SDK. For this, you need to configure the loginConfig parameter in the adapterSettings of the openlogin-adapter package.

tip

Refer to the Custom Authentication Documentation for more information.

Example

Since we're using the @web3auth/modal, ie. the Plug and Play Modal SDK, the loginConfig should correspond to the socials mentioned in the modal. Here, we're customizing Google and Facebook to be custom verified, rest of all other socials will be the default. You can customize other social logins or remove them using the whitelabeling option.

import OpenloginAdapter from "@web3auth/openlogin-adapter";

const openloginAdapter = new OpenloginAdapter({
adapterSettings: {
clientId, //Optional - Provide only if you haven't provided it in the Web3Auth Instantiation Code
uxMode: "popup",
loginConfig: {
// Google login
google: {
verifier: "YOUR_GOOGLE_VERIFIER_NAME", // Please create a verifier on the developer dashboard and pass the name here
typeOfLogin: "google", // Pass on the login provider of the verifier you've created
clientId: "GOOGLE_CLIENT_ID.apps.googleusercontent.com", // Pass on the clientId of the login provider here - Please note this differs from the Web3Auth ClientID. This is the JWT Client ID
},
},
},
privateKeyProvider,
});
web3auth.configureAdapter(openloginAdapter);

Configuring External Wallet Adapters

configureAdapter(ADAPTER)

To configure an adapter, create the instance of adapter by using its corresponding package and pass the returned adapter instance in configureAdapter function.

tip

Refer to the Adapters documentation to know more deeply about what adapters are available and how to configure them.

Example

If you want to configure the Torus EVM Wallet Adapter

  • Import the TorusWalletAdapter from @web3auth/torus-evm-adapter package
  • Create an instance of the adapter along with the configuration
  • Pass the returned instance in to web3auth.configureAdapter
import { TorusWalletAdapter } from "@web3auth/torus-evm-adapter";

const torusAdapter = new TorusWalletAdapter({
adapterSettings: {
clientId, //Optional - Provide only if you haven't provided it in the Web3Auth Instantiation Code
buttonPosition: "bottom-left",
},
loginSettings: {
verifier: "google",
},
initParams: {
buildEnv: "testing",
},
chainConfig: {
chainNamespace: CHAIN_NAMESPACES.EIP155,
chainId: "0x1",
rpcTarget: "https://rpc.ankr.com/eth", // This is the mainnet RPC we have added, please pass on your own endpoint while creating an app
displayName: "Ethereum Mainnet",
blockExplorerUrl: "https://etherscan.io/",
ticker: "ETH",
tickerName: "Ethereum",
logo: "https://images.toruswallet.io/eth.svg",
},
});

web3auth.configureAdapter(torusAdapter);

Subscribing the Lifecycle Events

Subscribing to events help you trigger responses based on the status of the connection of the user. An adapter emits certain events like CONNECTED, CONNECTING and DISCONNECTED etc during login lifecycle of a user. For example, you can use this to show an error message, if the user is not connected to the network. Generally, this is not a required step and should be done only if needed in particular cases.

info

This step is totally optional. If you don't want to use any plugins, feel free to skip this section.

tip

If you're using the uxMode: "redirect" option within your openlogin-adapter configuration, you need to subscribe to the event to handle the logging in implicitly. This is because, when redirected to a different application, the app state is not updated as per the login status. Using a lifecycle method to check this, one can easily handle the login status within the constructor function.

on(EVENT, CALLBACK)

Web3Auth provides the following lifecycle event to check the login status:

Adapter Events

EventTrigger with @web3auth/base packageTrigger without packageDescription
ADAPTER_DATA_UPDATEDADAPTER_EVENTS.ADAPTER_DATA_UPDATED"adapter_data_updated"Adapter data is updated within the dApp
NOT_READYADAPTER_EVENTS.NOT_READY"not_ready"Adapter is not yet ready for login
READYADAPTER_EVENTS.READY"ready"Adapter is ready for login
CONNECTINGADAPTER_EVENTS.CONNECTING"connecting"User is connecting to the dApp/ login process is in progress
CONNECTEDADAPTER_EVENTS.CONNECTED"connected"User is logged in and connected with the dApp
DISCONNECTEDADAPTER_EVENTS.DISCONNECTED"disconnected"User is logged out and disconnected from the dApp
ERROREDADAPTER_EVENTS.ERRORED"errored"There has been some error in connecting the user to the dApp
Example
import { ADAPTER_EVENTS } from "@web3auth/base";

// subscribe to lifecycle events emitted by web3auth
const subscribeAuthEvents = (web3auth: Web3Auth) => {
web3auth.on(ADAPTER_EVENTS.CONNECTED, (data: CONNECTED_EVENT_DATA) => {
console.log("connected to wallet", data);
// web3auth.provider will be available here after user is connected
});
web3auth.on(ADAPTER_EVENTS.CONNECTING, () => {
console.log("connecting");
});
web3auth.on(ADAPTER_EVENTS.DISCONNECTED, () => {
console.log("disconnected");
});
web3auth.on(ADAPTER_EVENTS.ERRORED, (error) => {
console.log("error", error);
});
web3auth.on(ADAPTER_EVENTS.ERRORED, (error) => {
console.log("error", error);
});
};

Login Modal Events

EventTrigger with @web3auth/ui packageTrigger without packageDescription
INIT_EXTERNAL_WALLETSLOGIN_MODAL_EVENTS.INIT_EXTERNAL_WALLETS"INIT_EXTERNAL_WALLETS"External Wallet are initialized
LOGINLOGIN_MODAL_EVENTS.LOGIN"LOGIN"Login is triggered
DISCONNECTLOGIN_MODAL_EVENTS.DISCONNECT"DISCONNECT"Disconnection is triggered
MODAL_VISIBILITYLOGIN_MODAL_EVENTS.MODAL_VISIBILITY"MODAL_VISIBILITY"Indicates whether the modal is visible or not
Example
import { LOGIN_MODAL_EVENTS } from "@web3auth/ui";

// subscribe to lifecycle events emitted by web3auth
const subscribeAuthEvents = (web3auth: Web3Auth) => {
// emitted when modal visibility changes.
web3auth.on(LOGIN_MODAL_EVENTS.MODAL_VISIBILITY, (isVisible) => {
console.log("is modal visible", isVisible);
});
};

Configuring Plugins

Plugins are essentially extensions to the core functionality of Web3Auth, allowing you to add additional features to your dApp. These features can be used to extend the UI functionalities, making your integration more interoperable, and a lot more, even having the functionality to be customised extremely and to your liking.

info

This step is totally optional. If you don't want to use any plugins, feel free to skip this section.

showWalletConnectScanner()

Shows the Wallet Connect Scanner to connect with dApps having Wallet Connect login option. This is useful for interoperability with dApps having Wallet Connect login option.

Example

import { WalletServicesPlugin } from "@web3auth/wallet-services-plugin";

const walletServicesPlugin = new WalletServicesPlugin();
web3auth.addPlugin(walletServicesPlugin); // Add the plugin to web3auth

await walletServicesPlugin.showWalletConnectScanner();

initiateTopup()

Shows the TopUp modal to select local currency and amount to top up the wallet.

Example

import { WalletServicesPlugin } from "@web3auth/wallet-services-plugin";

const walletServicesPlugin = new WalletServicesPlugin();
web3auth.addPlugin(walletServicesPlugin); // Add the plugin to web3auth

await walletServicesPlugin.showCheckout(); // Opens the TopUp modal

Initializing Modal

initModal()

The final step in the whole initialization process is the initialize the Modal from Web3Auth.

This is done by calling the initModal function of the web3auth instance we created above.

await web3auth.initModal(params);

Arguments

The web3auth.initModal takes an optional params config object as input.

params?: {
modalConfig?: Record<WALLET_ADAPTER_TYPE, ModalConfig>;
}

This params object further takes a modalConfig object using which you can configure the visibility of each adapter within the modal. Each modal config has the following configurations:

modalConfig

modalConfig: { ADAPTER : { params } }

ParameterDescription
labelLabel of the adapter you want to configure. It's a mandatory field which accepts string.
showOnModal?Whether to show an adapter in modal or not. Default value is true.
showOnDesktop?Whether to show an adapter in desktop or not. Default value is true.
showOnMobile?Whether to show an adapter in mobile or not. Default value is true.

Additionally, to configure the Openlogin Adapter's each login method, we have the loginMethods? parameter.

ParameterDescription
loginMethods?To configure visibility of each social login method for the openlogin adapter. It accepts LoginMethodConfig as a value.

loginMethods: { label: { params } }

In loginMethods, you can configure the visibility of each social login method for the openlogin adapter. The social login is corresponded by the label parameter. Below is the table indicating the different params available for customization.

For labels you can choose between these options: google, facebook, twitter, reddit, discord, twitch, apple, line, github, kakao, linkedin, weibo, wechat, email_passwordless

params

ParameterDescription
name?Display Name. It accepts string as a value.
description?Description for the button. If provided, it renders as a full length button. else, icon button. It accepts string as a value.
logoHover?Logo to be shown on mouse hover. It accepts string as a value.
logoLight?Light logo for dark background. It accepts string as a value.
logoDark?Dark logo for light background. It accepts string as a value.
mainOption?Show login button on the main list. It accepts oolean as a value. Default value is false.
showOnModal?Whether to show the login button on modal or not. Default value is true.
showOnDesktop?Whether to show the login button on desktop. Default value is true.
showOnMobile?Whether to show the login button on mobile. Default value is true.

Example

await web3auth.initModal({
modalConfig: {
[WALLET_ADAPTERS.OPENLOGIN]: {
label: "openlogin",
loginMethods: {
google: {
name: "google login",
logoDark: "url to your custom logo which will shown in dark mode",
},
facebook: {
// it will hide the facebook option from the Web3Auth modal.
name: "facebook login",
showOnModal: false,
},
},
// setting it to false will hide all social login methods from modal.
showOnModal: true,
},
},
});