UNPKG

saepenatus

Version:

Web3-Onboard makes it simple to connect Ethereum hardware and software wallets to your dapp. Features standardised spec compliant web3 providers for all supported wallets, framework agnostic modern javascript UI with code splitting, CSS customization, mul

78 lines (62 loc) 2.05 kB
import { WalletInit } from '@web3-onboard/common' type GnosisOptions = { whitelistedDomains: RegExp[] } function gnosis(options?: GnosisOptions): WalletInit { const { whitelistedDomains = [ /^https:\/\/gnosis-safe\.io$/, /^https:\/\/app\.safe\.global$/, /^https:\/\/safe\.global$/ ] } = options || {} return () => { const loadedInIframe = window.self !== window.top return loadedInIframe ? { label: 'Safe', getIcon: async () => (await import('./icon.js')).default, getInterface: async () => { const { default: SafeAppsSDK } = await import( '@gnosis.pm/safe-apps-sdk' ) const { SafeAppProvider } = await import( '@gnosis.pm/safe-apps-provider' ) const { createEIP1193Provider } = await import( '@web3-onboard/common' ) const SafeAppProviderConstructor = // @ts-ignore SafeAppsSDK.default || SafeAppsSDK const opts = { whitelistedDomains } const appsSdk = new SafeAppProviderConstructor(opts) const safe = await Promise.race([ appsSdk.safe.getInfo(), new Promise(resolve => setTimeout(resolve, 200)) ]) if (!safe) { throw new Error( `App must be loaded in a Safe App context, head to <a href="https://gnosis-safe.io/app">the Safe</a> and open this website as an app.` ) } const provider = new SafeAppProvider( safe, // @ts-ignore appsSdk ) const patchedProvider = createEIP1193Provider(provider, { eth_requestAccounts: () => Promise.resolve([safe.safeAddress]) }) return { provider: patchedProvider, instance: appsSdk } } } : [] } } export default gnosis