@mindsorg/web3modal-angular
Version:
Web3Modal implementation for Angular
1 lines • 109 kB
Source Map (JSON)
{"version":3,"file":"mindsorg-web3modal-angular.mjs","sources":["../../../projects/web3modal/src/lib/web3modal-ts/src/constants/chains.ts","../../../projects/web3modal/src/lib/web3modal-ts/src/constants/events.ts","../../../projects/web3modal/src/lib/web3modal-ts/src/constants/keys.ts","../../../projects/web3modal/src/lib/web3modal-ts/src/controllers/events.ts","../../../projects/web3modal/src/lib/web3modal-ts/src/providers/connectors/injected.ts","../../../projects/web3modal/src/lib/web3modal-ts/src/helpers/local.ts","../../../projects/web3modal/src/lib/web3modal-ts/src/helpers/utils.ts","../../../projects/web3modal/src/lib/web3modal-ts/src/providers/connectors/walletconnect.ts","../../../projects/web3modal/src/lib/web3modal-ts/src/providers/connectors/fortmatic.ts","../../../projects/web3modal/src/lib/web3modal-ts/src/providers/connectors/torus.ts","../../../projects/web3modal/src/lib/web3modal-ts/src/providers/connectors/squarelink.ts","../../../projects/web3modal/src/lib/web3modal-ts/src/providers/connectors/arkane.ts","../../../projects/web3modal/src/lib/web3modal-ts/src/providers/connectors/authereum.ts","../../../projects/web3modal/src/lib/web3modal-ts/src/providers/connectors/burnerconnect.ts","../../../projects/web3modal/src/lib/web3modal-ts/src/providers/connectors/unilogin.ts","../../../projects/web3modal/src/lib/web3modal-ts/src/providers/connectors/mewconnect.ts","../../../projects/web3modal/src/lib/web3modal-ts/src/providers/connectors/dcentwallet.ts","../../../projects/web3modal/src/lib/web3modal-ts/src/providers/connectors/bitski.ts","../../../projects/web3modal/src/lib/web3modal-ts/src/providers/connectors/walletlink.ts","../../../projects/web3modal/src/lib/web3modal-ts/src/providers/injected/index.ts","../../../projects/web3modal/src/lib/web3modal-ts/src/providers/providers/index.ts","../../../projects/web3modal/src/lib/web3modal-ts/src/controllers/providers.ts","../../../projects/web3modal/src/lib/web3modal-ts/src/core/service.ts","../../../projects/web3modal/src/lib/web3-modal/web3-modal.service.ts","../../../projects/web3modal/src/lib/modal/modal.component.ts","../../../projects/web3modal/src/lib/modal/modal.component.html","../../../projects/web3modal/src/lib/web3-modal/web3-modal-metamask-logo.component.ts","../../../projects/web3modal/src/lib/web3-modal/web3-modal.component.ts","../../../projects/web3modal/src/lib/web3-modal/web3-modal.component.html","../../../projects/web3modal/src/lib/web3-modal/web3-modal.module.ts","../../../projects/web3modal/src/public-api.ts","../../../projects/web3modal/src/mindsorg-web3modal-angular.ts"],"sourcesContent":["import { ChainDataList } from '../helpers';\n\nexport const CHAIN_DATA_LIST: ChainDataList = {\n 1: {\n chainId: 1,\n chain: \"ETH\",\n network: \"mainnet\",\n networkId: 1\n },\n 2: {\n chainId: 2,\n chain: \"EXP\",\n network: \"expanse\",\n networkId: 1\n },\n 3: {\n chainId: 3,\n chain: \"ETH\",\n network: \"ropsten\",\n networkId: 3\n },\n 4: {\n chainId: 4,\n chain: \"ETH\",\n network: \"rinkeby\",\n networkId: 4\n },\n 5: {\n chainId: 5,\n chain: \"ETH\",\n network: \"goerli\",\n networkId: 5\n },\n 6: {\n chainId: 6,\n chain: \"ETC\",\n network: \"kotti\",\n networkId: 6\n },\n 8: {\n chainId: 8,\n chain: \"UBQ\",\n network: \"ubiq\",\n networkId: 88\n },\n 9: {\n chainId: 9,\n chain: \"UBQ\",\n network: \"ubiq-testnet\",\n networkId: 2\n },\n 10: {\n chainId: 10,\n chain: \"ETH\",\n network: \"optimism\",\n networkId: 10\n },\n 11: {\n chainId: 11,\n chain: \"META\",\n network: \"metadium\",\n networkId: 11\n },\n 12: {\n chainId: 12,\n chain: \"META\",\n network: \"metadium-testnet\",\n networkId: 12\n },\n 18: {\n chainId: 18,\n chain: \"TST\",\n network: \"thundercore-testnet\",\n networkId: 18\n },\n 22: {\n chainId: 22,\n chain: \"LYX\",\n network: \"lukso-l14-testnet\",\n networkId: 22\n },\n 23: {\n chainId: 23,\n chain: \"LYX\",\n network: \"lukso-l15-testnet\",\n networkId: 23\n },\n 30: {\n chainId: 30,\n chain: \"RSK\",\n network: \"rsk\",\n networkId: 30\n },\n 31: {\n chainId: 31,\n chain: \"RSK\",\n network: \"rsk-testnet\",\n networkId: 31\n },\n 42: {\n chainId: 42,\n chain: \"ETH\",\n network: \"kovan\",\n networkId: 42\n },\n 56: {\n chainId: 56,\n chain: \"BSC\",\n network: \"binance\",\n networkId: 56\n },\n 60: {\n chainId: 60,\n chain: \"GO\",\n network: \"gochain\",\n networkId: 60\n },\n 61: {\n chainId: 61,\n chain: \"ETC\",\n network: \"etc\",\n networkId: 1\n },\n 62: {\n chainId: 62,\n chain: \"ETC\",\n network: \"etc-morden\",\n networkId: 2\n },\n 63: {\n chainId: 63,\n chain: \"ETC\",\n network: \"etc-testnet\",\n networkId: 7\n },\n 64: {\n chainId: 64,\n chain: \"ELLA\",\n network: \"ellaism\",\n networkId: 64\n },\n 69: {\n chainId: 69,\n chain: \"ETH\",\n network: \"optimism-kovan\",\n networkId: 69\n },\n 76: {\n chainId: 76,\n chain: \"MIX\",\n network: \"mix\",\n networkId: 76\n },\n 77: {\n chainId: 77,\n chain: \"POA\",\n network: \"poa-sokol\",\n networkId: 77\n },\n 88: {\n chainId: 88,\n chain: \"TOMO\",\n network: \"tomochain\",\n networkId: 88\n },\n 97: {\n chainId: 97,\n chain: \"BSC\",\n network: \"binance-testnet\",\n networkId: 97\n },\n 99: {\n chainId: 99,\n chain: \"POA\",\n network: \"poa-core\",\n networkId: 99\n },\n 100: {\n chainId: 100,\n chain: \"XDAI\",\n network: \"xdai\",\n networkId: 100\n },\n 101: {\n chainId: 101,\n chain: \"ETI\",\n network: \"etherinc\",\n networkId: 1\n },\n 108: {\n chainId: 108,\n chain: \"TT\",\n network: \"thundercore\",\n networkId: 108\n },\n 162: {\n chainId: 162,\n chain: \"PHT\",\n network: \"sirius\",\n networkId: 162\n },\n 163: {\n chainId: 163,\n chain: \"PHT\",\n network: \"lightstreams\",\n networkId: 163\n },\n 211: {\n chainId: 211,\n chain: \"FTN\",\n network: \"freight\",\n networkId: 0\n },\n 250: {\n chainId: 250,\n chain: \"FTM\",\n network: \"fantom\",\n networkId: 250\n },\n 269: {\n chainId: 269,\n chain: \"HPB\",\n network: \"hpb\",\n networkId: 100\n },\n 385: {\n chainId: 385,\n chain: \"CRO\",\n network: \"lisinski\",\n networkId: 385\n },\n 820: {\n chainId: 820,\n chain: \"CLO\",\n network: \"callisto\",\n networkId: 1\n },\n 821: {\n chainId: 821,\n chain: \"CLO\",\n network: \"callisto-testnet\",\n networkId: 2\n },\n 137: {\n chainId: 137,\n chain: \"MATIC\",\n network: \"matic\",\n networkId: 137\n },\n 42161: {\n chainId: 42161,\n chain: \"ETH\",\n network: \"arbitrum\",\n networkId: 42161\n },\n 42220: {\n chainId: 42220,\n chain: \"CELO\",\n network: \"celo\",\n networkId: 42220\n },\n 44787: {\n chainId: 44787,\n chain: \"CELO\",\n network: \"celo-alfajores\",\n networkId: 44787\n },\n 62320: {\n chainId: 62320,\n chain: \"CELO\",\n network: \"celo-baklava\",\n networkId: 62320\n },\n 80001: {\n chainId: 80001,\n chain: \"MUMBAI\",\n network: \"mumbai\",\n networkId: 80001\n },\n 43113: {\n chainId: 43113,\n chain: \"AVAX\",\n network: \"avalanche-fuji-testnet\",\n networkId: 43113\n },\n 43114: {\n chainId: 43114,\n chain: \"AVAX\",\n network: \"avalanche-fuji-mainnet\",\n networkId: 43114\n },\n 246529: {\n chainId: 246529,\n chain: \"ARTIS sigma1\",\n network: \"artis-s1\",\n networkId: 246529\n },\n 246785: {\n chainId: 246785,\n chain: \"ARTIS tau1\",\n network: \"artis-t1\",\n networkId: 246785\n },\n 1007: {\n chainId: 1007,\n chain: \"NewChain TestNet\",\n network: \"newchain-testnet\",\n networkId: 1007\n },\n 1012: {\n chainId: 1012,\n chain: \"NewChain MainNet\",\n network: \"newchain-mainnet\",\n networkId: 1012\n },\n 421611: {\n chainId: 421611,\n chain: \"ETH\",\n network: \"arbitrum-rinkeby\",\n networkId: 421611\n }\n};\n","export const CONNECT_EVENT = 'connect';\nexport const ERROR_EVENT = 'error';\nexport const CLOSE_EVENT = 'close';\n","export const INJECTED_PROVIDER_ID = 'injected';\nexport const CACHED_PROVIDER_KEY = 'WEB3_CONNECT_CACHED_PROVIDER';\n","import { IEventCallback } from '../helpers';\n\n// -- EventController --------------------------------------------------------- //\n\nexport class EventController {\n private _eventCallbacks: IEventCallback[];\n\n constructor() {\n this._eventCallbacks = [];\n }\n\n public on(eventCallback: IEventCallback) {\n this._eventCallbacks.push(eventCallback);\n }\n\n public off(eventObj?: Partial<IEventCallback>) {\n // remove specific event callback\n if (eventObj) {\n if (eventObj.callback) {\n this._eventCallbacks = this._eventCallbacks.filter(\n (eventCallback: IEventCallback) =>\n eventCallback.event !== eventObj.event ||\n eventCallback.callback !== eventObj.callback\n );\n } // No callback to remove, remove entire event\n else {\n this._eventCallbacks = this._eventCallbacks.filter(\n (eventCallback: IEventCallback) =>\n eventCallback.event !== eventObj.event\n );\n }\n } else {\n this._eventCallbacks = [];\n }\n }\n\n public trigger(event: string, result?: any): void {\n let eventCallbacks: IEventCallback[] = this._eventCallbacks.filter(\n (eventCallback: IEventCallback) => eventCallback.event === event\n );\n\n if (eventCallbacks && eventCallbacks.length) {\n eventCallbacks.forEach((eventCallback: IEventCallback) => {\n eventCallback.callback(result);\n });\n }\n }\n}\n","const ConnectToInjected = async () => {\n let provider = null;\n if ((window as any).ethereum) {\n provider = (window as any).ethereum;\n try {\n await (window as any).ethereum.enable();\n } catch (error) {\n throw new Error('User Rejected');\n }\n } else if ((window as any).web3) {\n provider = (window as any).web3.currentProvider;\n } else {\n throw new Error('No Web3 Provider found');\n }\n return provider;\n};\n\nexport default ConnectToInjected;\n","export let local: Storage;\n\nif (\n typeof window !== 'undefined' &&\n typeof (window as any).localStorage !== 'undefined'\n) {\n local = (window as any).localStorage;\n}\n\nexport const setLocal = (key: string, data: any) => {\n const jsonData = JSON.stringify(data);\n if (local) {\n local.setItem(key, jsonData);\n }\n};\n\nexport const getLocal = (key: string) => {\n let data = null;\n let raw = null;\n if (local) {\n raw = local.getItem(key);\n }\n if (raw && typeof raw === 'string') {\n try {\n data = JSON.parse(raw);\n } catch (error) {\n return null;\n }\n }\n return data;\n};\n\nexport const removeLocal = (key: string) => {\n if (local) {\n local.removeItem(key);\n }\n};\n\nexport const updateLocal = (key: string, data: any) => {\n const localData = getLocal(key) || {};\n const mergedData = { ...localData, ...data };\n setLocal(key, mergedData);\n};\n","import * as env from 'detect-browser';\n\nimport { CHAIN_DATA_LIST } from '../constants';\nimport { providers, injected } from '../providers';\nimport {\n IProviderInfo,\n IInjectedProvidersMap,\n ChainData,\n ThemeColors,\n RequiredOption,\n} from './types';\n\nexport function checkInjectedProviders(): IInjectedProvidersMap {\n const result = {\n injectedAvailable: !!(window as any).ethereum || !!(window as any).web3,\n };\n if (result.injectedAvailable) {\n let fallbackProvider = true;\n Object.values(injected).forEach(provider => {\n const isAvailable = verifyInjectedProvider(provider.check);\n if (isAvailable) {\n result[provider.check] = true;\n fallbackProvider = false;\n }\n });\n\n const browser = env.detect();\n\n if (browser && browser.name === 'opera') {\n result[injected.OPERA.check] = true;\n fallbackProvider = false;\n }\n\n if (fallbackProvider) {\n result[injected.FALLBACK.check] = true;\n }\n }\n\n return result;\n}\n\nexport function verifyInjectedProvider(check: string): boolean {\n return (window as any).ethereum\n ? (window as any).ethereum[check] || ((window as any).web3 && (window as any).web3.currentProvider)\n ? (window as any).web3\n ? (window as any).web3.currentProvider[check]\n : true\n : false\n : (window as any).web3 && (window as any).web3.currentProvider\n ? (window as any).web3.currentProvider[check]\n : false;\n}\n\nexport function getInjectedProvider(): IProviderInfo | null {\n let result = null;\n\n const injectedProviders = checkInjectedProviders();\n\n if (injectedProviders.injectedAvailable) {\n delete injectedProviders.injectedAvailable;\n const checks = Object.keys(injectedProviders);\n result = getProviderInfoFromChecksArray(checks);\n }\n return result;\n}\n\nexport function getInjectedProviderName(): string | null {\n const injectedProvider = getInjectedProvider();\n return injectedProvider ? injectedProvider.name : null;\n}\n\nexport function getProviderInfo(provider: any): IProviderInfo {\n if (!provider) return providers.FALLBACK;\n const checks = Object.values(providers)\n .filter(x => provider[x.check])\n .map(x => x.check);\n return getProviderInfoFromChecksArray(checks);\n}\n\nexport function getProviderInfoFromChecksArray(\n checks: string[]\n): IProviderInfo {\n const check = filterProviderChecks(checks);\n return filterProviders('check', check);\n}\n\nexport function getProviderInfoByName(name: string | null): IProviderInfo {\n return filterProviders('name', name);\n}\n\nexport function getProviderInfoById(id: string | null): IProviderInfo {\n return filterProviders('id', id);\n}\n\nexport function getProviderInfoByCheck(check: string | null): IProviderInfo {\n return filterProviders('check', check);\n}\n\nexport function isMobile(): boolean {\n let mobile: boolean = false;\n\n function hasTouchEvent(): boolean {\n try {\n document.createEvent('TouchEvent');\n return true;\n } catch (e) {\n return false;\n }\n }\n\n function hasMobileUserAgent(): boolean {\n if (\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(\n navigator.userAgent\n ) ||\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(\n navigator.userAgent.substr(0, 4)\n )\n ) {\n return true;\n } else if (hasTouchEvent()) {\n return true;\n }\n return false;\n }\n\n mobile = hasMobileUserAgent();\n\n return mobile;\n}\n\nexport function getProviderDescription(\n providerInfo: Partial<IProviderInfo>\n): string {\n if (providerInfo.description) {\n return providerInfo.description;\n }\n let description = '';\n switch (providerInfo.type) {\n case 'injected':\n description = `Connect to your ${providerInfo.name} Wallet`;\n break;\n case 'web':\n description = `Connect with your ${providerInfo.name} account`;\n break;\n case 'qrcode':\n description = `Scan with ${providerInfo.name} to connect`;\n break;\n case 'hardware':\n description = `Connect to your ${providerInfo.name} Hardware Wallet`;\n break;\n default:\n break;\n }\n return description;\n}\n\nexport function filterMatches<T>(\n array: T[],\n condition: (x: T) => boolean,\n fallback: T | undefined\n): T | undefined {\n let result = fallback;\n const matches = array.filter(condition);\n\n if (!!matches && matches.length) {\n result = matches[0];\n }\n\n return result;\n}\n\nexport function filterProviders(\n param: string,\n value: string | null\n): IProviderInfo {\n if (!value) return providers.FALLBACK;\n const match = filterMatches<IProviderInfo>(\n Object.values(providers),\n x => x[param] === value,\n providers.FALLBACK\n );\n return match || providers.FALLBACK;\n}\n\nexport function filterProviderChecks(checks: string[]): string {\n if (!!checks && checks.length) {\n if (checks.length > 1) {\n if (\n checks[0] === injected.METAMASK.check ||\n checks[0] === injected.CIPHER.check\n ) {\n return checks[1];\n }\n }\n return checks[0];\n }\n return providers.FALLBACK.check;\n}\n\nexport function getChainId(network: string): number {\n const chains: ChainData[] = Object.values(CHAIN_DATA_LIST);\n const match = filterMatches<ChainData>(\n chains,\n x => x.network === network,\n undefined\n );\n if (!match) {\n throw new Error(`No chainId found match ${network}`);\n }\n return match.chainId;\n}\n\nexport function findMatchingRequiredOptions(\n requiredOptions: RequiredOption[],\n providedOptions: { [key: string]: any }\n): RequiredOption[] {\n const matches = requiredOptions.filter(requiredOption => {\n if (typeof requiredOption === 'string') {\n return requiredOption in providedOptions;\n }\n const matches = findMatchingRequiredOptions(\n requiredOption,\n providedOptions\n );\n return matches && matches.length;\n });\n return matches;\n}\n","import { IAbstractConnectorOptions, getChainId } from '../../helpers';\n\nexport interface IWalletConnectConnectorOptions\n extends IAbstractConnectorOptions {\n infuraId?: string;\n rpc?: { [chainId: number]: string };\n bridge?: string;\n qrcode?: boolean;\n}\n\nconst ConnectToWalletConnect = (\n WalletConnectProvider: any,\n opts: IWalletConnectConnectorOptions\n) => {\n return new Promise(async (resolve, reject) => {\n let bridge = 'https://bridge.walletconnect.org';\n let qrcode = true;\n let infuraId = '';\n let rpc = undefined;\n let chainId = 1;\n console.log('wallet connect'); // todo remove dev item\n if (opts) {\n bridge = opts.bridge || bridge;\n qrcode = typeof opts.qrcode !== 'undefined' ? opts.qrcode : qrcode;\n infuraId = opts.infuraId || '';\n rpc = opts.rpc || undefined;\n chainId =\n opts.network && getChainId(opts.network) ? getChainId(opts.network) : 1;\n }\n\n const provider = new WalletConnectProvider({\n bridge,\n qrcode,\n infuraId,\n rpc,\n chainId,\n });\n try {\n await provider.enable();\n resolve(provider);\n } catch (e) {\n reject(e);\n }\n });\n};\n\nexport default ConnectToWalletConnect;\n","import { IAbstractConnectorOptions } from '../../helpers';\n\nexport interface IFortmaticConnectorOptions extends IAbstractConnectorOptions {\n key: string;\n}\n\nconst ConnectToFortmatic = async (\n Fortmatic: any,\n opts: IFortmaticConnectorOptions\n) => {\n if (opts && opts.key) {\n try {\n const key = opts.key;\n const fm = new Fortmatic(key, opts.network);\n const provider = await fm.getProvider();\n provider.fm = fm;\n await fm.user.login();\n const isLoggedIn = await fm.user.isLoggedIn();\n if (isLoggedIn) {\n return provider;\n } else {\n throw new Error('Failed to login to Fortmatic');\n }\n } catch (error) {\n throw error;\n }\n } else {\n throw new Error('Missing Fortmatic key');\n }\n};\n\nexport default ConnectToFortmatic;\n","import { IAbstractConnectorOptions } from '../../helpers';\n\ntype ETHEREUM_NETWORK_TYPE =\n | 'ropsten'\n | 'rinkeby'\n | 'kovan'\n | 'mainnet'\n | 'goerli'\n | 'localhost'\n | 'matic'\n | 'mumbai';\n\ninterface NetworkParams {\n host: ETHEREUM_NETWORK_TYPE | string;\n chainId?: number;\n networkName?: string;\n}\n\ninterface VerifierStatus {\n google?: boolean;\n facebook?: boolean;\n reddit?: boolean;\n twitch?: boolean;\n discord?: boolean;\n}\n\ninterface LoginParams {\n verifier?: 'google' | 'facebook' | 'twitch' | 'reddit' | 'discord' | string;\n}\n\ntype LOGIN_TYPE =\n | 'google'\n | 'facebook'\n | 'reddit'\n | 'discord'\n | 'twitch'\n | 'apple'\n | 'github'\n | 'linkedin'\n | 'twitter'\n | 'weibo'\n | 'line'\n | 'jwt'\n | 'email-password'\n | 'passwordless';\n\ninterface BaseLoginOptions {\n display?: 'page' | 'popup' | 'touch' | 'wap';\n prompt?: 'none' | 'login' | 'consent' | 'select_account';\n max_age?: string | number;\n ui_locales?: string;\n id_token_hint?: string;\n login_hint?: string;\n acr_values?: string;\n scope?: string;\n audience?: string;\n connection?: string;\n [key: string]: unknown;\n}\n\ninterface JwtParameters extends BaseLoginOptions {\n domain: string;\n client_id?: string;\n redirect_uri?: string;\n leeway?: number;\n verifierIdField?: string;\n isVerifierIdCaseSensitive?: boolean;\n}\n\ninterface IntegrityParams {\n check: boolean;\n hash?: string;\n version?: string;\n}\n\ninterface WhiteLabelParams {\n theme: ThemeParams;\n defaultLanguage?: string;\n logoDark: string;\n logoLight: string;\n topupHide?: boolean;\n featuredBillboardHide?: boolean;\n disclaimerHide?: boolean;\n tncLink?: LocaleLinks<string>;\n privacyPolicy?: LocaleLinks<string>;\n contactLink?: LocaleLinks<string>;\n customTranslations?: LocaleLinks<any>;\n}\n\ninterface LocaleLinks<T> {\n en?: T;\n ja?: T;\n ko?: T;\n de?: T;\n zh?: T;\n}\n\ninterface ThemeParams {\n isDark: boolean;\n colors: any;\n}\n\ninterface LoginConfigItem {\n name?: string;\n typeOfLogin: LOGIN_TYPE;\n description?: string;\n clientId?: string;\n logoHover?: string;\n logoLight?: string;\n logoDark?: string;\n showOnModal?: boolean;\n jwtParameters?: JwtParameters;\n}\n\ninterface LoginConfig {\n [verifier: string]: LoginConfigItem;\n}\n\nexport interface IOptions {\n buttonPosition?: 'top-left' | 'top-right' | 'bottom-right' | 'bottom-left';\n modalZIndex?: number;\n apiKey?: string;\n buildEnv?: 'production' | 'development' | 'staging' | 'testing' | 'lrc';\n enableLogging?: boolean;\n enabledVerifiers?: VerifierStatus;\n loginConfig?: LoginConfig;\n showTorusButton?: boolean;\n integrity?: IntegrityParams;\n whiteLabel?: WhiteLabelParams;\n}\n\nexport interface ITorusConnectorOptions extends IAbstractConnectorOptions {\n config?: IOptions;\n loginParams?: LoginParams;\n networkParams?: NetworkParams;\n}\n\n// Supports Torus package versions 0.2.*\nconst ConnectToTorus = async (Torus: any, opts: ITorusConnectorOptions) => {\n return new Promise(async (resolve, reject) => {\n try {\n // defaults\n let buttonPosition = 'bottom-left';\n let apiKey = 'torus-default';\n let modalZIndex = 99999999;\n let network: NetworkParams = { host: 'mainnet' };\n let defaultVerifier = undefined;\n\n // parsing to Torus interfaces\n network =\n opts.networkParams || opts.network\n ? { host: opts.network, ...opts.networkParams }\n : network;\n\n const torus = new Torus({\n buttonPosition: opts.config?.buttonPosition || buttonPosition,\n apiKey: opts.config?.apiKey || apiKey,\n modalZIndex: opts.config?.modalZIndex || modalZIndex,\n });\n await torus.init({\n showTorusButton: false,\n ...opts.config,\n network,\n });\n\n if (opts.loginParams) {\n defaultVerifier = opts.loginParams.verifier;\n }\n await torus.login({ verifier: defaultVerifier });\n const provider = torus.provider;\n provider.torus = torus;\n resolve(provider);\n } catch (err) {\n reject(err);\n }\n });\n};\n\nexport default ConnectToTorus;\n","import { IAbstractConnectorOptions } from '../../helpers';\n\nexport interface IOptions {\n scope?: string[];\n}\n\nexport interface ISquarelinkConnectorOptions extends IAbstractConnectorOptions {\n id: string;\n config?: IOptions;\n}\n\nconst ConnectToSquarelink = (\n Squarelink: any,\n opts: ISquarelinkConnectorOptions\n) => {\n return new Promise(async (resolve, reject) => {\n if (opts && opts.id) {\n try {\n const id = opts.id;\n const network = opts.network || 'mainnet';\n const config = opts.config;\n const sqlk = new Squarelink(id, network, config);\n const provider = await sqlk.getProvider();\n provider.sqlk = sqlk;\n await provider.enable();\n return resolve(provider);\n } catch (error) {\n return reject(new Error('Failed to login to Squarelink'));\n }\n } else {\n return reject(new Error('Missing Squarelink Id'));\n }\n });\n};\n\nexport default ConnectToSquarelink;\n","import { IAbstractConnectorOptions } from '../../helpers';\n\nexport interface IArkaneConnectorOptions extends IAbstractConnectorOptions {\n clientId: string;\n nodeUrl?: string;\n environment?: string;\n}\n\nconst ConnectToArkane = (Arkane: any, opts: IArkaneConnectorOptions) => {\n return new Promise(async (resolve, reject) => {\n if (opts && opts.clientId) {\n try {\n const options = {\n clientId: opts.clientId,\n rpcUrl: opts.nodeUrl,\n environment: opts.environment,\n signMethod: 'POPUP',\n };\n const provider = await (window as any).Arkane.createArkaneProviderEngine(\n options\n );\n return resolve(provider);\n } catch (error) {\n console.error(error);\n return reject(new Error('Failed to login to Arkane 2'));\n }\n } else {\n return reject(new Error('Please provide an Arkane client id'));\n }\n });\n};\n\nexport default ConnectToArkane;\n","import { IAbstractConnectorOptions } from '../../helpers';\n\nexport interface IAuthereumConnectorOptions extends IAbstractConnectorOptions {\n networkName: string;\n apiKey: string;\n rpcUri: string;\n webUri: string;\n xsUri: string;\n blockedPopupRedirect: boolean;\n forceRedirect: boolean;\n disableNotifications: boolean;\n disableGoogleAnalytics: boolean;\n}\n\nconst ConnectToAuthereum = (\n Authereum: any,\n opts: Partial<IAuthereumConnectorOptions> = {}\n) => {\n return new Promise(async (resolve, reject) => {\n try {\n const authereum = new Authereum({\n ...opts,\n networkName: opts.networkName || opts.network,\n });\n const provider = authereum.getProvider();\n provider.authereum = authereum;\n await provider.enable();\n resolve(provider);\n } catch (error) {\n return reject(error);\n }\n });\n};\n\nexport default ConnectToAuthereum;\n","import { IAbstractConnectorOptions } from '../../helpers';\n\ninterface Wallet {\n origin: string;\n name: string;\n}\n\nexport interface IBurnerConnectorOptions extends IAbstractConnectorOptions {\n hubUrl?: string;\n defaultNetwork?: string;\n defaultWallets?: Wallet[];\n}\n\nconst ConnectToBurnerConnect = async (\n BurnerConnectProvider: any,\n opts: IBurnerConnectorOptions\n) => {\n opts.defaultNetwork = opts.defaultNetwork || opts.network;\n const provider = new BurnerConnectProvider(opts);\n\n await provider.enable();\n\n return provider;\n};\n\nexport default ConnectToBurnerConnect;\n","import { IAbstractConnectorOptions } from '../../helpers';\n\nexport interface IUniloginConnectorOptions extends IAbstractConnectorOptions {}\n\nconst ConnectToUniLogin = async (\n UniLogin: any,\n options: IUniloginConnectorOptions\n) => {\n try {\n const uniloginProvider = new UniLogin.create(options.network || 'mainnet');\n await uniloginProvider.enable();\n uniloginProvider.on = () => {};\n return uniloginProvider;\n } catch (error) {\n return error;\n }\n};\n\nexport default ConnectToUniLogin;\n","import { IAbstractConnectorOptions, getChainId } from '../../helpers';\n\nexport interface IMewConnectConnectorOptions extends IAbstractConnectorOptions {\n infuraId?: string;\n rpc?: { [chainId: number]: string };\n}\n\nconst ConnectToMewConnect = (\n MewConnectProvider: any,\n opts: IMewConnectConnectorOptions\n) => {\n return new Promise(async (resolve, reject) => {\n let infuraId = '';\n let rpc = undefined;\n let chainId = 1;\n\n if (opts) {\n infuraId = opts.infuraId || '';\n rpc = opts.rpc || undefined;\n if (opts.infuraId && !rpc) {\n rpc = `wss://mainnet.infura.io/ws/v3/${infuraId}`;\n }\n chainId =\n opts.network && getChainId(opts.network) ? getChainId(opts.network) : 1;\n }\n\n if (!MewConnectProvider.Provider.isConnected) {\n const mewConnect = new MewConnectProvider.Provider();\n const provider = mewConnect.makeWeb3Provider(chainId, rpc, true);\n\n mewConnect.on('disconnected', () => {});\n try {\n const address = await mewConnect.enable();\n console.log(address); // todo remove dev item\n resolve(provider);\n } catch (e) {\n reject(e);\n }\n }\n });\n};\n\nexport default ConnectToMewConnect;\n","import { IAbstractConnectorOptions } from '../../helpers';\n\nexport interface IDcentConnectorOptions extends IAbstractConnectorOptions {\n rpcUrl: string;\n chainId: number;\n}\n\nconst ConnectToDcentWallet = async (\n DcentProvider: any,\n opts: IDcentConnectorOptions\n) => {\n const provider = new DcentProvider(opts);\n\n await provider.enable();\n\n return provider;\n};\n\nexport default ConnectToDcentWallet;\n","import { IAbstractConnectorOptions } from '../../helpers';\n\ninterface IBitskiOptions extends IAbstractConnectorOptions {\n clientId: string;\n callbackUrl: string;\n extraBitskiOptions?: any;\n extraProviderOptions?: any;\n}\n\nconst ConnectToBitski = async (Bitski: any, opts: IBitskiOptions) => {\n const bitski = new Bitski(\n opts.clientId,\n opts.callbackUrl,\n opts.extraBitskiOptions\n );\n\n await bitski.signIn();\n\n const provider = bitski.getProvider(opts.extraProviderOptions);\n\n return provider;\n};\n\nexport default ConnectToBitski;\n","import { IAbstractConnectorOptions, getChainId } from '../../helpers';\n\nexport interface IWalletLinkConnectorOptions\n extends IAbstractConnectorOptions {\n infuraUrl: string;\n appName?: string;\n appLogoUrl?: string;\n darkMode: boolean;\n}\n\nconst ConnectToWalletLink = (\n WalletLinkProvider: any,\n opts: IWalletLinkConnectorOptions\n) => {\n return new Promise(async (resolve, reject) => {\n let infuraUrl = '';\n let appName = \"\"\n let appLogoUrl = \"\"\n let darkMode = false\n let chainId = 1;\n\n if (opts) {\n appName = opts.appName || appName;\n appLogoUrl = opts.appLogoUrl || appLogoUrl;\n darkMode = opts.darkMode || darkMode;\n infuraUrl = opts.infuraUrl || '';\n chainId = opts.network && getChainId(opts.network) ? getChainId(opts.network) : 1;\n }\n\n if(!infuraUrl) {\n throw new Error('Missing Infura URL for WalletLink Provider')\n }\n\n const provider = new WalletLinkProvider({\n appName,\n appLogoUrl,\n darkMode\n }).makeWeb3Provider(infuraUrl, chainId)\n\n try {\n await provider.enable();\n resolve(provider);\n } catch (e) {\n reject(e);\n }\n });\n};\n\nexport default ConnectToWalletLink;\n","import { IProviderInfo } from '../../helpers';\n\nexport const FALLBACK: IProviderInfo = {\n id: 'injected',\n name: 'Web3',\n logo: 'https://cdn-assets.minds.com/web3modal-assets/web3-default.svg',\n type: 'injected',\n check: 'isWeb3',\n};\n\nexport const METAMASK: IProviderInfo = {\n id: 'injected',\n name: 'MetaMask',\n logo: 'https://cdn-assets.minds.com/web3modal-assets/metamask.svg',\n type: 'injected',\n check: 'isMetaMask',\n};\n\nexport const SAFE: IProviderInfo = {\n id: 'injected',\n name: 'Safe',\n logo: 'https://cdn-assets.minds.com/web3modal-assets/safe.svg',\n type: 'injected',\n check: 'isSafe',\n};\n\nexport const NIFTY: IProviderInfo = {\n id: 'injected',\n name: 'Nifty',\n logo: 'https://cdn-assets.minds.com/web3modal-assets/niftyWallet.png',\n type: 'injected',\n check: 'isNiftyWallet',\n};\n\nexport const DAPPER: IProviderInfo = {\n id: 'injected',\n name: 'Dapper',\n logo: 'https://cdn-assets.minds.com/web3modal-assets/dapper.png',\n type: 'injected',\n check: 'isDapper',\n};\n\nexport const OPERA: IProviderInfo = {\n id: 'injected',\n name: 'Opera',\n logo: 'https://cdn-assets.minds.com/web3modal-assets/opera.svg',\n type: 'injected',\n check: 'isOpera',\n};\n\nexport const TRUST: IProviderInfo = {\n id: 'injected',\n name: 'Trust',\n logo: 'https://cdn-assets.minds.com/web3modal-assets/trust.svg',\n type: 'injected',\n check: 'isTrust',\n};\n\nexport const COINBASE: IProviderInfo = {\n id: 'injected',\n name: 'Coinbase',\n logo: 'https://cdn-assets.minds.com/web3modal-assets/coinbase.svg',\n type: 'injected',\n check: 'isToshi',\n};\n\nexport const CIPHER: IProviderInfo = {\n id: 'injected',\n name: 'Cipher',\n logo: 'https://cdn-assets.minds.com/web3modal-assets/cipher.svg',\n type: 'injected',\n check: 'isCipher',\n};\n\nexport const IMTOKEN: IProviderInfo = {\n id: 'injected',\n name: 'imToken',\n logo: 'https://cdn-assets.minds.com/web3modal-assets/imtoken.svg',\n type: 'injected',\n check: 'isImToken',\n};\n\nexport const STATUS: IProviderInfo = {\n id: 'injected',\n name: 'Status',\n logo: 'https://cdn-assets.minds.com/web3modal-assets/status.svg',\n type: 'injected',\n check: 'isStatus',\n};\n\nexport const TOKENARY: IProviderInfo = {\n id: 'injected',\n name: 'Tokenary',\n logo: 'https://cdn-assets.minds.com/web3modal-assets/tokenary.png',\n type: 'injected',\n check: 'isTokenary',\n};\n","import { IProviderInfo } from '../../helpers';\n\nexport * from '../injected';\n\nexport const WALLETCONNECT: IProviderInfo = {\n id: 'walletconnect',\n name: 'WalletConnect',\n logo: 'https://cdn-assets.minds.com/web3modal-assets/walletconnect-circle.svg',\n type: 'qrcode',\n check: 'isWalletConnect',\n package: {\n required: [['infuraId', 'rpc']],\n },\n};\n\nexport const WALLETLINK: IProviderInfo = {\n id: 'walletlink',\n name: 'Coinbase',\n logo: 'https://cdn-assets.minds.com/web3modal-assets/coinbase.svg',\n type: 'qrcode',\n check: 'isWalletLink',\n package: {\n required: ['infuraUrl'],\n },\n};\n\nexport const FORTMATIC: IProviderInfo = {\n id: 'fortmatic',\n name: 'Fortmatic',\n logo: 'https://cdn-assets.minds.com/web3modal-assets/fortmatic.svg',\n type: 'web',\n check: 'isFortmatic',\n package: {\n required: ['key'],\n },\n};\n\nexport const SQUARELINK: IProviderInfo = {\n id: 'squarelink',\n name: 'Squarelink',\n logo: 'https://cdn-assets.minds.com/web3modal-assets/squarelink.svg',\n type: 'web',\n check: 'isSquarelink',\n package: {\n required: ['id'],\n },\n};\n\nexport const TORUS: IProviderInfo = {\n id: 'torus',\n name: 'Torus',\n logo: 'https://cdn-assets.minds.com/web3modal-assets/torus.svg',\n type: 'web',\n check: 'isTorus',\n};\n\nexport const ARKANE: IProviderInfo = {\n id: 'arkane',\n name: 'Arkane',\n logo: 'https://cdn-assets.minds.com/web3modal-assets/arkane.svg',\n type: 'web',\n check: 'isArkane',\n package: {\n required: ['clientId'],\n },\n};\n\nexport const AUTHEREUM: IProviderInfo = {\n id: 'authereum',\n name: 'Authereum',\n logo: 'https://cdn-assets.minds.com/web3modal-assets/authereum.svg',\n type: 'web',\n check: 'isAuthereum',\n};\n\nexport const BURNERCONNECT: IProviderInfo = {\n id: 'burnerconnect',\n name: 'Burner Connect',\n logo: 'https://cdn-assets.minds.com/web3modal-assets/burnerwallet.png',\n type: 'web',\n check: 'isBurnerProvider',\n};\n\nexport const UNILOGIN: IProviderInfo = {\n id: 'unilogin',\n name: 'UniLogin',\n logo: 'https://cdn-assets.minds.com/web3modal-assets/unilogin.svg',\n check: 'isUniLogin',\n type: 'web',\n};\n\nexport const MEWCONNECT: IProviderInfo = {\n id: 'mewconnect',\n name: 'MEW wallet',\n logo: 'https://cdn-assets.minds.com/web3modal-assets/mewwallet.png',\n type: 'qrcode',\n check: 'isMEWconnect',\n package: {\n required: [['infuraId', 'rpc']],\n },\n};\n\nexport const DCENT: IProviderInfo = {\n id: 'dcentwallet',\n name: \"D'CENT\",\n logo: 'https://cdn-assets.minds.com/web3modal-assets/dcentwallet.png',\n type: 'hardware',\n check: 'isDcentWallet',\n package: {\n required: ['rpcUrl'],\n },\n};\n\nexport const BITSKI: IProviderInfo = {\n id: 'bitski',\n name: 'Bitski',\n logo: 'https://cdn-assets.minds.com/web3modal-assets/bitski.svg',\n type: 'web',\n check: 'isBitski',\n package: {\n required: ['clientId', 'callbackUrl'],\n },\n};\n","import * as list from '../providers';\nimport { CACHED_PROVIDER_KEY, CONNECT_EVENT, ERROR_EVENT, INJECTED_PROVIDER_ID } from '../constants';\nimport {\n filterMatches,\n findMatchingRequiredOptions,\n getInjectedProvider,\n getLocal,\n getProviderDescription,\n getProviderInfoById,\n IProviderControllerOptions,\n IProviderDisplayWithConnector,\n IProviderInfo,\n IProviderOptions,\n IProviderUserOptions,\n isMobile,\n removeLocal,\n setLocal,\n} from '../helpers';\nimport { EventController } from './events';\n\nexport class ProviderController {\n public cachedProvider: string = '';\n public shouldCacheProvider: boolean = false;\n public disableInjectedProvider: boolean = false;\n\n private eventController: EventController = new EventController();\n private injectedProvider: IProviderInfo | null = null;\n private providers: IProviderDisplayWithConnector[] = [];\n private providerOptions: IProviderOptions;\n private network: string = '';\n\n constructor(opts: IProviderControllerOptions) {\n this.cachedProvider = getLocal(CACHED_PROVIDER_KEY) || '';\n\n this.disableInjectedProvider = opts.disableInjectedProvider;\n this.shouldCacheProvider = opts.cacheProvider;\n this.providerOptions = opts.providerOptions;\n this.network = opts.network;\n\n this.injectedProvider = getInjectedProvider();\n\n this.providers = Object.keys(list.connectors).map((id: string) => {\n let providerInfo: IProviderInfo;\n if (id === INJECTED_PROVIDER_ID) {\n providerInfo = this.injectedProvider || list.providers.FALLBACK;\n } else {\n providerInfo = getProviderInfoById(id);\n }\n // parse custom display options\n if (this.providerOptions[id]) {\n const options = this.providerOptions[id];\n if (typeof options.display !== 'undefined') {\n providerInfo = {\n ...providerInfo,\n ...this.providerOptions[id].display,\n };\n }\n }\n return {\n ...providerInfo,\n connector: list.connectors[id],\n package: providerInfo.package,\n };\n });\n // parse custom providers\n Object.keys(this.providerOptions)\n .filter(key => key.startsWith('custom-'))\n .map(id => {\n if (id && this.providerOptions[id]) {\n const options = this.providerOptions[id];\n if (\n typeof options.display !== 'undefined' &&\n typeof options.connector !== 'undefined'\n ) {\n this.providers.push({\n ...list.providers.FALLBACK,\n id,\n ...options.display,\n connector: options.connector,\n });\n }\n }\n });\n }\n\n public shouldDisplayProvider(id: string) {\n const provider = this.getProvider(id);\n if (typeof provider !== 'undefined') {\n const providerPackageOptions = this.providerOptions[id];\n if (providerPackageOptions) {\n const isProvided = !!providerPackageOptions.package;\n if (isProvided) {\n const requiredOptions = provider.package\n ? provider.package.required\n : undefined;\n if (requiredOptions && requiredOptions.length) {\n const providedOptions = providerPackageOptions.options;\n if (providedOptions && Object.keys(providedOptions).length) {\n const matches = findMatchingRequiredOptions(\n requiredOptions,\n providedOptions\n );\n if (requiredOptions.length === matches.length) {\n return true;\n }\n }\n } else {\n return true;\n }\n }\n }\n }\n return false;\n }\n\n public getUserOptions = () => {\n const mobile = isMobile();\n const defaultProviderList = this.providers.map(({ id }) => id);\n\n const displayInjected =\n !!this.injectedProvider && !this.disableInjectedProvider;\n const onlyInjected = displayInjected && mobile;\n\n const providerList = [];\n\n if (onlyInjected) {\n providerList.push(INJECTED_PROVIDER_ID);\n } else {\n if (displayInjected) {\n providerList.push(INJECTED_PROVIDER_ID);\n }\n\n defaultProviderList.forEach((id: string) => {\n if (id !== INJECTED_PROVIDER_ID) {\n const result = this.shouldDisplayProvider(id);\n if (result) {\n providerList.push(id);\n }\n }\n });\n }\n\n const userOptions: IProviderUserOptions[] = [];\n\n providerList.forEach((id: string) => {\n let provider = this.getProvider(id);\n if (typeof provider !== 'undefined') {\n let { id, name, logo, connector } = provider;\n\n // replace logo with configuration set logo, use default as fallback.\n logo = this.providerOptions[id]?.logoUrl ?? logo;\n userOptions.push({\n name,\n logo,\n description: getProviderDescription(provider),\n onClick: () => this.connectTo(id, connector),\n });\n }\n });\n\n return userOptions;\n };\n\n public getProvider(id: string) {\n return filterMatches<IProviderDisplayWithConnector>(\n this.providers,\n x => x.id === id,\n undefined\n );\n }\n\n public getProviderOption(id: string, key: string) {\n return this.providerOptions &&\n this.providerOptions[id] &&\n this.providerOptions[id][key]\n ? this.providerOptions[id][key]\n : {};\n }\n\n public clearCachedProvider() {\n this.cachedProvider = '';\n removeLocal(CACHED_PROVIDER_KEY);\n }\n\n public setCachedProvider(id: string) {\n this.cachedProvider = id;\n setLocal(CACHED_PROVIDER_KEY, id);\n }\n\n public connectTo = async (\n id: string,\n connector: (providerPackage: any, opts: any) => Promise<any>\n ) => {\n try {\n const providerPackage = this.getProviderOption(id, 'package');\n const providerOptions = this.getProviderOption(id, 'options');\n const opts = { network: this.network || undefined, ...providerOptions };\n const provider = await connector(providerPackage, opts);\n this.eventController.trigger(CONNECT_EVENT, provider);\n if (this.shouldCacheProvider && this.cachedProvider !== id) {\n this.setCachedProvider(id);\n }\n } catch (error) {\n this.eventController.trigger(ERROR_EVENT);\n }\n };\n\n public async connectToCachedProvider() {\n const provider = this.getProvider(this.cachedProvider);\n if (typeof provider !== 'undefined') {\n await this.connectTo(provider.id, provider.connector);\n }\n }\n\n public on(event: string, callback: (result: any) => void): () => void {\n this.eventController.on({\n event,\n callback,\n });\n\n return () =>\n this.eventController.off({\n event,\n callback,\n });\n }\n\n public off(event: string, callback?: (result: any) => void): void {\n this.eventController.off({\n event,\n callback,\n });\n }\n}\n","import { IProviderControllerOptions, IProviderUserOptions, ProviderController } from '..';\n\nexport class Web3WalletConnector {\n public providers: IProviderUserOptions[] = [];\n public providerController: ProviderController;\n\n constructor(configOptions?: IProviderControllerOptions) {\n if (!configOptions) {\n this.providerController = new ProviderController({\n disableInjectedProvider: false,\n cacheProvider: false,\n providerOptions: {},\n network: \"\",\n });\n } else {\n this.providerController = new ProviderController(configOptions);\n }\n\n this.providers = this.providerController.getUserOptions()\n }\n\n get cachedProvider(): string {\n return this.providerController.cachedProvider;\n }\n\n setConfiguration = (options: IProviderControllerOptions): void => {\n this.providerController = new ProviderController(options);\n this.clearCachedProvider();\n\n this.providers = this.providerController.getUserOptions();\n };\n\n async checkIfCachedProviderOrSingleOption(): Promise<void> {\n if (this.cachedProvider) {\n await this.providerController.connectToCachedProvider();\n return;\n }\n if (\n this.providers &&\n this.providers.length === 1 &&\n this.providers[0].name\n ) {\n await this.providers[0].onClick();\n return;\n }\n }\n\n clearCachedProvider(): void {\n this.providerController.clearCachedProvider();\n }\n\n setCachedProvider(id: string): void {\n this.providerController.setCachedProvider(id);\n }\n}\n","import { EventEmitter, Injectable, Optional } from '@angular/core';\nimport { CONNECT_EVENT, ERROR_EVENT, IProviderControllerOptions, IProviderUserOptions, Web3WalletConnector } from '../web3modal-ts/src';\nimport { take } from 'rxjs/operators';\n\n@Injectable()\nexport class Web3ModalService {\n private web3WalletConnector: Web3WalletConnector\n\n public shouldOpen: EventEmitter<boolean> = new EventEmitter();\n public providers: EventEmitter<IProviderUserOptions[]> = new EventEmitter();\n\n constructor (@Optional() configOptions?: IProviderControllerOptions) {\n this.web3WalletConnector = new Web3WalletConnector(configOptions)\n }\n\n async open() {\n this.providers.next(this.web3WalletConnector.providers)\n\n return await new Promise((resolve, reject) => {\n this.web3WalletConnector.providerController.on(CONNECT_EVENT, provider => {\n resolve(provider);\n });\n\n this.web3WalletConnector.providerController.on(ERROR_EVENT, error => {\n reject(error);\n });\n\n this.shouldOpen.next(true)\n\n this.shouldOpen.pipe(take(1)).subscribe({\n next: (open) => {\n if (!open) {\n reject('Dismissed modal');\n }\n }\n })\n }).finally(() => {\n this.close()\n })\n }\n\n setConfiguration(options: IProviderControllerOptions) {\n this.web3WalletConnector.setConfiguration(options)\n }\n\n clearCachedProvider(): void {\n this.web3WalletConnector.providerController.clearCachedProvider();\n }\n\n setCachedProvider(id: string): void {\n this.web3WalletConnector.providerController.setCachedProvider(id);\n }\n\n close() {\n this.shouldOpen.next(false)\n }\n}\n","import { Component, EventEmitter, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'm-modal',\n host: {\n '[hidden]': 'hidden',\n },\n inputs: ['open', 'allowClose'],\n outputs: ['closed'],\n styleUrls: ['./modal.component.scss'],\n encapsulation: ViewEncapsulation.None,\n templateUrl: './modal.component.html',\n standalone: false,\n})\nexport class Modal {\n allowClose: boolean = true;\n hidden: boolean = true;\n closed: EventEmitter<any> = new EventEmitter();\n\n set _hidden(value: boolean) {\n this.hidden = value;\n }\n\n set open(value: boolean) {\n this.hidden = !value;\n }\n\n close(event) {\n if (!this.allowClose) return;\n\n this.hidden = !this.hidden;\n this.closed.next(true);\n event.stopPropagation();\n }\n}\n","<div class=\"m-modal-bg\" (click)=\"close($event)\"></div>\n<div class=\"m-modal-container\">\n <ng-content></ng-content>\n</div>","import { Component } from '@angular/core';\n\n/**\n * Component wrapper for Metamask logo SVG.\n */\n@Component({\n selector: 'm-web3-modal-metamask-logo',\n standalon