UNPKG

@upbond/upbond-embed

Version:
480 lines (374 loc) 11.6 kB
![alt text](https://github.com/upbond/embed/blob/master/assets/upbond_logo.png?raw=true) # **Upbond Embed** ****************with npm**************** ```terminal npm install @upbond/upbond-embed ``` ******************with yarn****************** ```terminal yarn add @upbond/upbond-embed ``` ## **Initialization** This is the main class of anything related to Upbond Embed ```javascript const Upbond = require("@upbond/upbond-embed"); ``` Using ES6 ```javascript import Upbond from "@upbond/upbond-embed"; ``` Then, create a new instance of Upbond ```javascript const upbond = new Upbond(options); ``` ************Parameters************ - `options` (optional) : The options of the constructor - `buttonPosition` (optional) : string, default is `BOTTOM_LEFT` <br /> The position of the Upbond button. Supported values are `top-left` `bottom-left` `top-right` `bottom-right`. Or you can following this code: ```javascript BOTTOM_LEFT: "bottom-left", TOP_LEFT: "top-left", BOTTOM_RIGHT: "bottom-right", TOP_RIGHT: "top-right", ``` - `buttonSize` (optional) : number, default is `56` - `modalZIndex` (optional): number, default is `99999` Then, initialize Upbond embed ```javascript await upbond.init({ buildEnv: UPBOND_BUILD_ENV.PRODUCTION }); ``` ************Initializing with idToken from Login 3.0************ In addition to the standard initialization method, UPBOND Embed can be initialized using an `idToken` from Login 3.0 to the `state` variable This allows developers to bypass the `upbond.login()` function, directly creating a login session. Please refer to the Login 3.0 sample codes for the implementation. ```javascript await this.upbond.init({ state: idToken }); ``` ************Parameters************ - `buildEnv` (required): `UPBOND_BUILD_ENV` build environment settings: Build environments are divided into 3 types of environment usages: production and staging. Below is the definition or `UPBOND_BUILD_ENV` in the embed library. ``` PRODUCTION: "production", STAGING: "staging", . . . ``` `UPBOND_BUILD_ENV.PRODUCTION`, `UPBOND_BUILD_ENV.STAGING` always point to the newest environment. - `widgetConfig` (optional): Configuration to show embed button `before` or `after` logins. ```javascript widgetConfig: { showAfterLoggedIn: true, showBeforeLoggedIn: false, } ``` - `network` (optional): Blockchain network configuration to connect. Default to `matic` network. ```javascript network: { host: "mumbai", chainId: 80001, networkName: "Mumbai", blockExplorer: "", ticker: "MUMBAI", tickerName: "MUMBAI", rpcUrl: "https://polygon-testnet.public.blastapi.io/", } ``` - `dappRedirectUri` (optional): Redirect URI after successful login from Embed. Default to the dApps URI. `${window.location.origin}/` ```javascript dappRedirectUri: "https://demo-dapps.com" ``` **Examples** ```javascript import Upbond, { UPBOND_BUILD_ENV, BUTTON_POSITION_TYPE } from "@upbond/upbond-embed"; const upbond = new Upbond({ buttonPosition: BUTTON_POSITION_TYPE.BOTTOM_LEFT, // default: 'bottom-left' buttonSize: 56, // optional modalZIndex: 150, // optional }); await upbond.init({ buildEnv: UPBOND_BUILD_ENV.PRODUCTION, widgetConfig: { showAfterLoggedIn: true, showBeforeLoggedIn: false, }, network: { host: "mumbai", chainId: 80001, networkName: "Mumbai", blockExplorer: "", ticker: "MUMBAI", tickerName: "MUMBAI", rpcUrl: "https://polygon-testnet.public.blastapi.io/", }, dappRedirectUri: "https://demo-dapps.com" }); ``` ## **Cleanup** This cleans up the iframe and buttons created by upbond package. If the user is logged in, it logs him out first and then cleans up. This will be return `Promise<void>`: Returns a promise which resolves to void. ******************Examples:****************** ```javascript await upbond.cleanUp(); ``` # ACCOUNT user account management ## Login Prompts the user to login if they are not logged in. If an OAuth verifier is not provided, a modal selector will be shown. ******************Examples:****************** ```javascript import Upbond, { UPBOND_BUILD_ENV, BUTTON_POSITION_TYPE } from "@upbond/upbond-embed"; // Your code ... const upbond = new Upbond({ buttonPosition: BUTTON_POSITION_TYPE.BOTTOM_LEFT, buttonSize: 56, modalZIndex: 150 }); const [initialized, setInitialized] = useState(false) useEffect(() => { const init = async () => { await upbond.init({ buildEnv: UPBOND_BUILD_ENV.PRODUCTION }); setInitialized(true) } if (!initialized) { init() } }, []) const loginEmbed = async () => { try { await upbond.login(); } catch(err) { throw new Error(err) } } return ( // render yours ) ``` ## Logout Logs the user out of Upbond. Requires that a user is logged in already. ******************Examples:****************** ```javascript import Upbond, { UPBOND_BUILD_ENV, BUTTON_POSITION_TYPE } from "@upbond/upbond-embed"; // Your code ... const upbond = new Upbond({ buttonPosition: BUTTON_POSITION_TYPE.BOTTOM_LEFT, buttonSize: 56, modalZIndex: 150 }); const [initialized, setInitialized] = useState(false) useEffect(() => { const init = async () => { await upbond.init({ buildEnv: UPBOND_BUILD_ENV.PRODUCTION }); setInitialized(true) } if (!initialized) { init() } }, []) const logout = async () => { try { await upbond.logout(); } catch(err) { throw new Error(err) } } return ( // render yours ) ``` ## GetUserInfo Returns the logged-in user's info including name, email, and imageUrl. Only works if the user is logged in. In every `session`, only the first call opens the popup for the user's consent to access this information. All subsequent requests within the session don't trigger the popup. ******************Examples:****************** ```javascript const userInfo = await upbond.getUserInfo(); ``` **Returns** - `Promise<UserInfo>` : Returns a promise which resolves to `UserInfo` object. ```typescript interface UserInfo { email: string; name: string; profileImage: string; verifier: string; verifierId: string; } ``` # Web3 Provider assign upbond provider to use in Web3 ## Use Upbond Provider ****************Examples**************** ```javascript import web3 from 'web3' const upbond = new Upbond({ buttonPosition: BUTTON_POSITION_TYPE.BOTTOM_LEFT, buttonSize: 56, modalZIndex: 150 }); /* ... Your upbond embed code ... You need to login to upbond embed first for get the ethereum provider returned from upbond embed */ const web3 = new Web3(upbond.provider); const account = await web3.eth.getAccounts() //[0x000] - your account ``` # EIP-1193 handling some function eip-1193 function [EIP-1193](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1193.md) ******Examples:****** ```javascript import web3 from 'web3' import Upbond, { UPBOND_BUILD_ENV, BUTTON_POSITION_TYPE } from "@upbond/upbond-embed"; const upbond = new Upbond(); const upbond = new Upbond({ buttonPosition: BUTTON_POSITION_TYPE.BOTTOM_LEFT, buttonSize: 56, modalZIndex: 150 }); /* ... Your upbond embed code ... You need to login to upbond embed first for get the ethereum provider returned from upbond embed */ upbond.provider.on("chainChanged", (resp) => { console.log(resp, "chainchanged"); }); upbond.provider.on("accountsChanged", (accounts) => { console.log(accounts, "accountsChanged"); }); ``` If you want to use the upbond provider, sure you can use on a react lifecycles like this: ```javascript useEffect(() => { if (upbond.provider) { if (upbond.provider.on) { upbond.provider.on("chainChanged", (resp) => { console.log(resp, "chainchanged"); }); upbond.provider.on("accountsChanged", (accounts) => { console.log(accounts, "accountsChanged"); }); } } }, [upbond.provider]) ``` # Dapps Example **React** You can check this out [here](https://github.com/upbond/embed/tree/master/examples/react) **Demo Dapps** You can also check our example in action [here](https://demo.upbond.io) # Whitelabel Example Use `whiteLabel` option inside the init configuration. **Example in React:** ```jsx import Upbond from "@upbond/upbond-embed"; const Example = () => { const upbond = new Upbond({}) const init = async () => { await upbond.init({ whiteLabel: { walletTheme: { name: "Sample App", lang: "ja", logo: "https://miro.medium.com/max/1200/1*jfdwtvU6V6g99q3G7gq7dQ.png", buttonLogo: "https://cdn.freebiesupply.com/images/large/2x/medium-icon-white-on-black.png", modalColor: "#f3f3f3", bgColor: "#214999", bgColorHover: "#f3f3f3", textColor: "#f3f3f3", textColorHover: "#214999", upbondLogin: { globalBgColor: "#f3f3f3", globalTextColor: "#214999" } } }, }) } useEffect(() => init(), []) return ( // ... ) } ``` **Example in Vue:** ```jsx <script> import Upbond from "@upbond/upbond-embed"; const upbond = new Upbond(); const init = async () => { await upbond.init({ whiteLabel: { walletTheme: { name: "Sample App", lang: "ja", logo: "https://miro.medium.com/max/1200/1*jfdwtvU6V6g99q3G7gq7dQ.png", buttonLogo: "https://cdn.freebiesupply.com/images/large/2x/medium-icon-white-on-black.png", modalColor: "#f3f3f3", bgColor: "#214999", bgColorHover: "#f3f3f3", textColor: "#f3f3f3", textColorHover: "#214999", upbondLogin: { globalBgColor: "#ffffff", globalTextColor: "#214999" } } }, }) } export default { mounted() { init() } } </script> <template> // ... </template> ``` ## **Whitelabel wallet theme option** Setting up the color theme and logo. ```jsx whiteLabel: { /* wallet theme */ walletTheme: { // other name: "Sample App", lang: "ja", // Logo setup logo: "path or url", buttonLogo: "path or url", // Color theme setup modalColor: "color hex", bgColor: "color hex", bgColorHover: "color hex", textColor: "color hex", textColorHover: "color hex", // Upbond login theme setup upbondLogin: { globalBgColor: "color hex", globalTextColor: "color hex" } } } ``` - `name` let you setup the application’s name. - `lang` let you setup the wallet's language. Current options include `en` for English and `ja` for Japanese. Default is English. - `logo` let you setup logo that will be displayed the login popup. - `buttonLogo` let you setup the logo for the flying wallet button. - `modalColor` let you setup the background color for the login popup. - `bgColor` let you setup the buttons background color. - `bgColorHover` let you setup the hovered buttons background color. - `textColor` let you setup the color of the buttons text and some text on the notification popup. - `textColorHover` let you setup the color of the hovered text inside buttons and some text on the notification popup. - `upbondLogin.globalBgColor` let you setup the color of the background on Upbond login site. - `upbondLogin.globalTextColor` let you setup the color of the text on Upbond login site. ### Example white-labelled UI ![whitelabel](https://user-images.githubusercontent.com/605150/212630002-30a049a9-3539-43b7-8b48-1ffa83ef7008.png) # Current version version: v2.x