UNPKG

@perawallet/connect

Version:

JavaScript SDK for integrating Pera Wallet to web applications.

86 lines (73 loc) 2.34 kB
import { // PERA_WALLET_IFRAME_ID, PERA_WALLET_CONNECT_MODAL_ID, removeModalWrapperFromDOM // getHeaderCloseButton } from "../../modal/peraWalletConnectModalUtils"; import PeraWalletConnectError from "../PeraWalletConnectError"; // import {peraWalletFlowType} from "../device/deviceUtils"; import { // WAIT_FOR_TAB_MAX_TRY_COUNT, // WAIT_FOR_TAB_TRY_INTERVAL, getMetaInfo, waitForTabOpening } from "../dom/domUtils"; import appTellerManager, {PeraTeller} from "../network/teller/appTellerManager"; import {getPeraWebWalletURL} from "../peraWalletConstants"; import {RunWebConnectFlowTypes} from "./connectFlowModels"; import {newTabConnectFlowTellerReducer} from "./connectFlowReducers"; function runWebConnectFlow({ webWalletURL, chainId, // isCompactMode, resolve, reject }: RunWebConnectFlowTypes) { const webWalletURLs = getPeraWebWalletURL(webWalletURL); return runNewTabWebConnectFlow; // =========== New Tab Connect Flow =========== async function runNewTabWebConnectFlow() { try { const newPeraWalletTab = await waitForTabOpening(webWalletURLs.CONNECT); if (newPeraWalletTab) { appTellerManager.sendMessage({ message: { type: "CONNECT", data: { ...getMetaInfo(), chainId } }, origin: webWalletURLs.CONNECT, targetWindow: newPeraWalletTab }); } const checkTabIsAliveInterval = setInterval(() => { if (newPeraWalletTab?.closed === true) { reject( new PeraWalletConnectError( { type: "CONNECT_CANCELLED" }, "Connect is cancelled by user" ) ); clearInterval(checkTabIsAliveInterval); closeWebConnectFlow(); } // eslint-disable-next-line no-magic-numbers }, 2000); appTellerManager.setupListener({ onReceiveMessage: (event: MessageEvent<TellerMessage<PeraTeller>>) => newTabConnectFlowTellerReducer({event, newPeraWalletTab, resolve, reject}) }); } catch (error) { closeWebConnectFlow(); reject(error); } } function closeWebConnectFlow() { removeModalWrapperFromDOM(PERA_WALLET_CONNECT_MODAL_ID); } } export {runWebConnectFlow};