{"version":3,"sources":["../src/wallet/index.ts","../src/wallet/utils/index.ts","../package.json","../src/wallet/CustomWalletLogin.ts","../src/wallet/utils/message.ts","../src/wallet/CustomPostMessage.ts","../src/wallet/constants.ts"],"sourcesContent":["import { type GetAccountResult, type SendTransactionArgs, type SendTransactionResult, type SignMessageArgs, type SignMessageResult, type watchAccount } from '@wagmi/core'\nimport type { Listing, ThemeCtrlState } from '@web3modal/core'\nimport { CoreUtil, ExplorerCtrl, RouterCtrl, ThemeCtrl, WcConnectionCtrl } from '@web3modal/core'\nimport { handleDesktopLinking, handleMobileLinking } from './utils'\nimport { CustomWalletLogin } from './CustomWalletLogin'\nimport type { AuthcWalletOptions } from './types'\n\nexport {\n  getAccount,\n  getConfig,\n  getWalletClient,\n  watchNetwork,\n  watchAccount,\n  watchContractEvent,\n  signMessage,\n  signTypedData,\n  sendTransaction,\n  watchReadContract,\n  watchReadContracts,\n  watchWalletClient,\n  getContract,\n} from '@wagmi/core'\n\nexport type {\n  SignMessageArgs,\n  SignMessageResult,\n  SendTransactionArgs,\n  SendTransactionResult,\n}\n\nexport * from './types'\n\nexport class AuthcWalletLogin extends CustomWalletLogin {\n  connectorNames = {\n    metamask: 'metaMask',\n    coinbase: 'coinbaseWallet',\n  }\n\n  constructor(config: AuthcWalletOptions) {\n    super(config)\n    // DO NOT NEED THIS\n    CoreUtil.setWalletConnectDeepLink = () => {}\n  }\n\n  private async onMobilePlatform(uri: string, listing: Listing) {\n    return handleMobileLinking(uri, listing)\n  }\n\n  private async onAndroidPlatform(uri: string, listing: Listing) {\n    return handleMobileLinking(uri, listing)\n  }\n\n  private async onConnectPlatformDesktop(uri: string, listing: Listing) {\n    return handleDesktopLinking(uri, listing)\n  }\n\n  private async onConnectConnector(name: string) {\n    const { ready } = await this.client().getConnectorById(name)\n    if (ready)\n      return await this.client().connectConnector(name, this.options.state.selectedChain?.id)\n    return false\n  }\n\n  async getWalletInfo(walletName: string) {\n    const { listings } = await ExplorerCtrl.getWallets({\n      page: 1,\n      entries: 1,\n      search: walletName,\n    })\n    if (listings.length === 0)\n      throw new Error(`Cannot find \"${walletName}\" wallet`)\n\n    return listings[0]\n  }\n\n  async connectWalletByWalletName(walletName: string) {\n    const connectorName = this.connectorNames[walletName.toLocaleLowerCase() as keyof typeof this.connectorNames]\n    if (connectorName) {\n      const res = await this.onConnectConnector(connectorName)\n      if (res)\n        return res\n    }\n\n    if (walletName.toLowerCase() === 'walletconnect')\n      return this.onWalletConnect()\n\n    const uri = await this.getWalletConnectUri()\n\n    if (CoreUtil.isAndroid())\n      return this.onAndroidPlatform(uri, await this.getWalletInfo(walletName))\n\n    else if (CoreUtil.isMobile())\n      return this.onMobilePlatform(uri, await this.getWalletInfo(walletName))\n\n    else\n      return this.onConnectPlatformDesktop(uri, await this.getWalletInfo(walletName))\n  }\n\n  // Support connect wallet with message\n  onConnectWalletByPostMessage(postMessage?: Window['postMessage']) {\n    const cancelLogin = (err: Error) => {\n      postMessage({\n        type: 'authcWallet',\n        data: {\n          type: 'cancelLogin',\n          error: err?.message,\n        },\n      }, '*')\n      this.cancelLogin()\n    }\n    this.addMessageListener('connectWalletByWalletName', async (data) => {\n      if (this.client().getAccount().isConnected)\n        await this.cancelLogin()\n\n      const postConnectedMessage = async () => {\n        const address = await this.client().getAccount().address\n        postMessage({\n          type: 'authcWallet',\n          data: {\n            type: 'walletConnected',\n            data: {\n              walletAddress: address,\n            },\n          },\n        }, '*')\n      }\n\n      let close = () => {}\n      this.connectWalletByWalletName(data.name).then(async () => {\n        // In metamask app, the network maybe change\n        close = this.client().watchNetwork((network) => {\n          // maybe the wallet is not connected\n          if (!network.chain)\n            return console.warn('SignMessage: Cannot get wallet address')\n\n          postConnectedMessage().finally(() => {\n            close()\n          })\n        })\n        postConnectedMessage().finally(() => {\n          close()\n        })\n      }).catch((err) => {\n        cancelLogin(err)\n        throw err\n      }).finally(() => {\n        close()\n      })\n    })\n\n    this.addMessageListener('signingMessage', async (data) => {\n      if (this.client().getAccount().isConnected)\n        await this.cancelLogin()\n\n      const signMessageAndPost = async () => {\n        const address = await this.client().getAccount().address\n        const walletClient: any = await this.getWalletClient()\n        const message = await walletClient.signMessage({\n          message: data.message,\n        }).catch((err: any) => {\n          cancelLogin(err)\n          throw err\n        })\n        postMessage({\n          type: 'authcWallet',\n          data: {\n            type: 'walletLogin',\n            data: {\n              walletAddress: address,\n              sid: data.sid,\n              signatureResult: message,\n            },\n          },\n        }, '*')\n      }\n\n      let close = () => {}\n      this.connectWalletByWalletName(data.name).then(async () => {\n        // In metamask app, the network maybe change\n        close = this.client().watchNetwork((network) => {\n          // maybe the wallet is not connected\n          if (!network.chain)\n            return console.warn('SignMessage: Cannot get wallet address')\n\n          signMessageAndPost().finally(() => {\n            close()\n          })\n        })\n        signMessageAndPost().finally(() => {\n          close()\n        })\n      }).catch((err) => {\n        cancelLogin(err)\n        throw err\n      }).finally(() => {\n        close()\n      })\n    })\n  }\n\n  async onWalletConnect(theme?: ThemeCtrlState) {\n    await this.importUi()\n    const uri = await this.getWalletConnectUri()\n    WcConnectionCtrl.setPairingUri(uri)\n\n    const qrcode = document.createElement('div')\n    RouterCtrl.push('Qrcode')\n    // 创建新的样式规则并添加至文档中\n    const style = document.createElement('style')\n    ThemeCtrl.setThemeConfig({\n      themeMode: 'light',\n      ...theme,\n      themeVariables: {\n        '--w3m-accent-color': 'rgb(16, 19, 20)',\n        ...theme?.themeVariables,\n      },\n    })\n\n    style.innerHTML = `:root { \n      --aw-walletconnect-mask-bg: rgba(16, 19, 20, 0.7);\n      --aw-walletconnect-backdrop-filter: blur(12px);\n      --aw-walletconnect-z-index: 10000;\n      --aw-walletconnect-max-width: 456px;\n      --aw-walletconnect-qrcode-bg: #fff;\n      --aw-walletconnect-qrcode-radius: 14px;\n      --aw-walletconnect-qrcode-padding: 10px;\n    }`\n    qrcode.innerHTML = `\n      <div\n        id=\"aw-walletconnect-qrcode-modal\"\n        class=\"aw-walletconnect-qrcode-modal\"\n        style=\"\n          width: 100%;\n          height: 100%;\n          overflow: hidden;\n          position: fixed;\n          inset: 0;\n          z-index: var(--aw-walletconnect-z-index);\n          background: var(--aw-walletconnect-mask-bg);\n          backdrop-filter: var(--aw-walletconnect-backdrop-filter);\n          display: flex;\n          justify-content: center;\n          align-items: center;\n        \"\n      >\n      <div class=\"aw-walletconnect-qrcode-wrapper\" style=\"position: relative; max-width: var(--aw-walletconnect-max-width); width: 100%; padding: var(--aw-walletconnect-qrcode-padding);\">\n        <div \n          class=\"aw-walletconnect-qrcode-content\"\n          style=\"background: var(--aw-walletconnect-qrcode-bg); border-radius: var(--aw-walletconnect-qrcode-radius);\"\n        >\n          <w3m-theme-context></w3m-theme-context>\n          <w3m-qrcode-view size=\"200\" />\n        </div>\n      </div>\n    </div>`\n    document.head.appendChild(style)\n    document.body.appendChild(qrcode)\n\n    return new Promise<GetAccountResult>((resolve, reject) => {\n      RouterCtrl.goBack = () => {\n        qrcode.remove()\n        reject(new Error('User rejected the connection'))\n      }\n      this.watchAccount((account) => {\n        if (account.isConnected) {\n          qrcode.remove()\n          resolve(account)\n        }\n        else if (account.isDisconnected) {\n          RouterCtrl.goBack()\n        }\n      })\n    })\n  }\n\n  async importUi() {\n    return import('@web3modal/ui')\n  }\n}\n\nexport type AccountType = Parameters<Parameters<typeof watchAccount>[0]>[0]\n","import type { WalletData } from '@web3modal/core'\nimport { CoreUtil } from '@web3modal/core'\nimport { version } from '../../../package.json'\n\nexport function formatUniversalUrl(appUrl: string, wcUri: string, name: string): string {\n  if (!CoreUtil.isHttpUrl(appUrl))\n    return formatNativeUrl(appUrl, wcUri, name)\n\n  let plainAppUrl = appUrl\n  if (appUrl.endsWith('/'))\n    plainAppUrl = appUrl.slice(0, -1)\n\n  const encodedWcUrl = encodeURIComponent(wcUri)\n\n  const search = new URLSearchParams({\n    uri: encodedWcUrl,\n    automatic: '1',\n  })\n  return `${plainAppUrl}/wc?${search.toString()}`\n}\n\nfunction formatNativeUrl(appUrl: string, wcUri: string, name: string): string {\n  if (CoreUtil.isHttpUrl(appUrl))\n    return formatUniversalUrl(appUrl, wcUri, name)\n\n  const plainAppUrl = appUrl.replaceAll('/', '').replaceAll(':', '')\n  const encodedWcUrl = encodeURIComponent(wcUri)\n\n  return `${plainAppUrl}://wc?uri=${encodedWcUrl}`\n}\n\nexport function openHref(href: string, target = '_self') {\n  const a = document.createElement('a')\n  a.target = target\n  a.href = href\n  document.body.appendChild(a)\n  a.click()\n  a.remove()\n}\n\nexport const handleMobileLinking = async (uri: string, wallet: WalletData, forceUniversalUrl = false) => {\n  const { mobile, name } = wallet\n  const nativeUrl = mobile?.native\n  const universalUrl = mobile?.universal\n\n  if (nativeUrl && !forceUniversalUrl) {\n    const href = CoreUtil.formatNativeUrl(nativeUrl, uri, name)\n    CoreUtil.openHref(href, '_self')\n  }\n  else if (universalUrl) {\n    const href = CoreUtil.formatUniversalUrl(universalUrl, uri, name)\n    CoreUtil.openHref(href, '_self')\n  }\n}\n\nexport const handleDesktopLinking = async (uri: string, wallet: WalletData, universal = true) => {\n  const { desktop, name } = wallet\n\n  if (universal && desktop.universal) {\n    const href = CoreUtil.formatUniversalUrl(desktop.universal, uri, name)\n    CoreUtil.openHref(href, '_blank')\n  }\n  else if (desktop.native) {\n    const href = CoreUtil.formatNativeUrl(desktop.native, uri, name)\n    CoreUtil.openHref(href, '_self')\n  }\n}\n\nexport const createWalletLoginIframe = (src: string, props: Partial<Pick<HTMLIFrameElement, 'onerror' | 'onload'>> = {}) => {\n  const iframe = document.createElement('iframe')\n  iframe.allow = 'clipboard-read *;camera *'\n  iframe.style.position = 'fixed'\n  iframe.style.border = '0'\n  iframe.style.inset = '0'\n  iframe.style.width = '100%'\n  iframe.style.height = '100%'\n  iframe.style.zIndex = '-1'\n  iframe.style.pointerEvents = 'none'\n  iframe.dataset.authcWallet = ''\n  iframe.src = `${src}&SDKVersion=${version}`\n\n  Object.keys(props).forEach((key: 'onload') => {\n    iframe[key] = props[key]\n  })\n\n  window.document.body.appendChild(iframe)\n\n  return iframe\n}\n\nexport const createLogoutIframe = (url: string) => {\n  const iframe = document.createElement('iframe')\n  iframe.style.position = 'fixed'\n  iframe.style.zIndex = '-1'\n  iframe.style.left = '-10000px'\n  iframe.style.top = '-10000px'\n  iframe.style.pointerEvents = 'none'\n  iframe.src = url\n\n  return new Promise<void>((resolve, reject) => {\n    window.document.body.appendChild(iframe)\n    iframe.onload = () => {\n      resolve()\n      iframe.remove()\n    }\n    iframe.onerror = () => {\n      reject()\n    }\n  })\n}\n","{\n  \"name\": \"authc-spa-js\",\n  \"version\": \"0.9.6\",\n  \"packageManager\": \"pnpm@7.26.0\",\n  \"description\": \"Authc SDK for Single Page Applications using Authorization Code Grant Flow with PKCE\",\n  \"author\": \"Authc\",\n  \"license\": \"MIT\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/src/index.d.ts\",\n      \"require\": \"./dist/src/index.js\",\n      \"import\": \"./dist/src/index.mjs\",\n      \"browser\": \"./dist/src/index.global.js\"\n    },\n    \"./wallet\": {\n      \"types\": \"./dist/wallet.d.ts\",\n      \"require\": \"./dist/wallet.js\",\n      \"import\": \"./dist/wallet.mjs\",\n      \"browser\": \"./dist/wallet.global.js\"\n    },\n    \"./authc\": {\n      \"types\": \"./dist/authc.d.ts\",\n      \"require\": \"./dist/authc.js\",\n      \"import\": \"./dist/authc.mjs\",\n      \"browser\": \"./dist/authc.global.js\"\n    },\n    \"./iframe\": {\n      \"types\": \"./dist/iframe.d.ts\",\n      \"require\": \"./dist/iframe.js\",\n      \"import\": \"./dist/iframe.mjs\",\n      \"browser\": \"./dist/iframe.global.js\"\n    }\n  },\n  \"main\": \"dist/src/index.cjs\",\n  \"module\": \"dist/src/index.mjs\",\n  \"unpkg\": \"dist/src/index.js\",\n  \"types\": \"dist/src/index.d.ts\",\n  \"browser\": \"dist/src/index.global.js\",\n  \"scripts\": {\n    \"dev\": \"tsup --watch\",\n    \"start\": \"npm run dev\",\n    \"docs\": \"typedoc --options ./typedoc.js --module commonjs\",\n    \"build:cjs\": \"tsc --project . --module commonjs --outDir dist/cjs\",\n    \"build:esm\": \"tsc --project . --module esnext --outDir dist/esm\",\n    \"build:iife\": \"tsup --minify\",\n    \"build:tsc\": \"pnpm run build:cjs && pnpm run build:esm && pnpm run build:iife\",\n    \"build\": \"tsup --clean\",\n    \"build:stats\": \"npm run build -- --environment WITH_STATS:true && open stats.html\",\n    \"lint\": \"eslint .\",\n    \"lint:fix\": \"pnpm lint --fix\",\n    \"test\": \"jest --coverage --silent\",\n    \"test:watch\": \"jest --coverage --watch\",\n    \"test:debug\": \"node --inspect node_modules/.bin/jest --runInBand\",\n    \"test:open:integration\": \"cypress open\",\n    \"test:watch:integration\": \"concurrently --raw npm:dev 'npm:test:open:integration'\",\n    \"test:es-check\": \"npm run test:es-check:es5 && npm run test:es-check:es2015:module\",\n    \"test:es-check:es5\": \"es-check es5 'dist/authc-spa-js.production.js'\",\n    \"test:es-check:es2015:module\": \"es-check es2015 'dist/authc-spa-js.production.esm.js' --module \",\n    \"test:integration:server\": \"npm run dev\",\n    \"test:integration:tests\": \"wait-on http://localhost:3000/ && cypress run\",\n    \"test:integration\": \"concurrently --raw --kill-others --success first npm:test:integration:server npm:test:integration:tests\",\n    \"serve:coverage\": \"serve coverage/lcov-report -n\",\n    \"serve:stats\": \"serve bundle-stats -n\",\n    \"print-bundle-size\": \"node ./scripts/print-bundle-size\",\n    \"prepublishOnly\": \"pnpm run build\",\n    \"release\": \"pnpm changeset && pnpm changeset version && pnpm i --lockfile-only && git add . && git commit -m 'chore: release' && pnpm changeset tag && git push --follow-tags\"\n  },\n  \"dependencies\": {\n    \"@coinbase/wallet-sdk\": \"^3.7.2\",\n    \"@tkey/chrome-storage\": \"^7.0.0\",\n    \"@tkey/common-types\": \"^7.0.0\",\n    \"@tkey/core\": \"^7.0.0\",\n    \"@tkey/default\": \"^7.0.0\",\n    \"@tkey/private-keys\": \"^7.0.0\",\n    \"@tkey/security-questions\": \"^7.0.0\",\n    \"@tkey/seed-phrase\": \"^7.0.0\",\n    \"@tkey/service-provider-base\": \"^7.0.0\",\n    \"@tkey/service-provider-torus\": \"^7.0.0\",\n    \"@tkey/share-serialization\": \"^7.0.0\",\n    \"@tkey/share-transfer\": \"^7.0.0\",\n    \"@tkey/storage-layer-torus\": \"^7.0.0\",\n    \"@tkey/web-storage\": \"^7.0.0\",\n    \"@types/node\": \"^18.11.9\",\n    \"@wagmi/chains\": \"^1.8.0\",\n    \"@wagmi/connectors\": \"^2\",\n    \"@wagmi/core\": \"^1.4.3\",\n    \"@walletconnect/sign-client\": \"^2.10.2\",\n    \"@walletconnect/universal-provider\": \"^2.10.2\",\n    \"@web3modal/core\": \"^2.0.0\",\n    \"@web3modal/ethereum\": \"2.7.1\",\n    \"@web3modal/ui\": \"^2.0.0\",\n    \"abortcontroller-polyfill\": \"^1.7.5\",\n    \"axios\": \"^0.26.1\",\n    \"bowser\": \"^2.11.0\",\n    \"browser-tabs-lock\": \"^1.2.15\",\n    \"bumpp\": \"^8.2.1\",\n    \"core-js\": \"^3.20.3\",\n    \"es-cookie\": \"^1.3.2\",\n    \"fast-text-encoding\": \"^1.0.3\",\n    \"promise-polyfill\": \"^8.2.3\",\n    \"unbuild\": \"^1.0.2\",\n    \"unfetch\": \"^4.2.0\",\n    \"viem\": \"^1.16.5\",\n    \"zustand\": \"^4.4.1\"\n  },\n  \"devDependencies\": {\n    \"@antfu/eslint-config\": \"^0.35.1\",\n    \"@changesets/cli\": \"^2.26.0\",\n    \"@esbuild-plugins/node-globals-polyfill\": \"^0.1.1\",\n    \"@esbuild-plugins/node-modules-polyfill\": \"^0.1.4\",\n    \"@rollup/plugin-replace\": \"^2.4.2\",\n    \"@toruslabs/customauth\": \"^11.0.1\",\n    \"@types/cypress\": \"^1.1.3\",\n    \"@types/jest\": \"^27.0.2\",\n    \"@walletconnect/ethereum-provider\": \"^2.10.2\",\n    \"browserstack-cypress-cli\": \"1.8.1\",\n    \"cli-table\": \"^0.3.6\",\n    \"codecov\": \"^3.8.3\",\n    \"concurrently\": \"^6.4.0\",\n    \"cypress\": \"7.2.0\",\n    \"es-check\": \"^6.1.1\",\n    \"esbuild\": \"^0.18.10\",\n    \"eslint\": \"^8.33.0\",\n    \"gzip-size\": \"^6.0.0\",\n    \"husky\": \"^7.0.4\",\n    \"idtoken-verifier\": \"^2.2.2\",\n    \"jest\": \"^27.3.1\",\n    \"jest-junit\": \"^13.0.0\",\n    \"jest-localstorage-mock\": \"^2.4.18\",\n    \"jsonwebtoken\": \"^8.5.1\",\n    \"oidc-provider\": \"^7.10.1\",\n    \"pem\": \"^1.14.4\",\n    \"prettier\": \"^2.4.1\",\n    \"pretty-quick\": \"^3.1.2\",\n    \"qss\": \"^2.0.3\",\n    \"rimraf\": \"^3.0.2\",\n    \"rollup\": \"^2.60.0\",\n    \"rollup-plugin-analyzer\": \"^4.0.0\",\n    \"rollup-plugin-commonjs\": \"^10.1.0\",\n    \"rollup-plugin-dev\": \"^1.1.3\",\n    \"rollup-plugin-dts\": \"^5.1.1\",\n    \"rollup-plugin-esbuild\": \"^5.0.0\",\n    \"rollup-plugin-lit-css\": \"^4.0.1\",\n    \"rollup-plugin-livereload\": \"^2.0.5\",\n    \"rollup-plugin-minify-html-literals\": \"^1.2.6\",\n    \"rollup-plugin-node-resolve\": \"^5.2.0\",\n    \"rollup-plugin-sourcemaps\": \"^0.6.3\",\n    \"rollup-plugin-terser\": \"^7.0.2\",\n    \"rollup-plugin-typescript2\": \"^0.30.0\",\n    \"rollup-plugin-visualizer\": \"^5.5.2\",\n    \"rollup-plugin-web-worker-loader\": \"^1.6.1\",\n    \"serve\": \"^12.0.1\",\n    \"ts-jest\": \"^27.0.7\",\n    \"tslib\": \"^2.3.1\",\n    \"tslint\": \"^6.1.3\",\n    \"tslint-config-security\": \"^1.16.0\",\n    \"tsup\": \"^7.1.0\",\n    \"typedoc\": \"0.18.0\",\n    \"typescript\": \"^5.1.6\",\n    \"wait-on\": \"^6.0.0\"\n  },\n  \"husky\": {\n    \"hooks\": {\n      \"pre-commit\": \"pretty-quick --staged\"\n    }\n  }\n}\n","import { goerli, mainnet, polygon, polygonMumbai, sepolia } from '@wagmi/chains'\nimport type { Chain, Connector, GetAccountResult, SwitchNetworkResult } from '@wagmi/core'\nimport { configureChains, createConfig, createStorage, getWalletClient } from '@wagmi/core'\nimport { MetaMaskConnector } from '@wagmi/connectors/metaMask'\nimport { ClientCtrl, ConfigCtrl, ExplorerCtrl, ModalCtrl, OptionsCtrl } from '@web3modal/core'\nimport { EthereumClient, w3mConnectors, w3mProvider } from '@web3modal/ethereum'\n\nimport type EthereumProvider from '@walletconnect/ethereum-provider'\nimport type { IProvider } from '@walletconnect/universal-provider'\nimport type { Authc } from '../authc'\nimport { CustomPostMessage } from './CustomPostMessage'\nimport type { AuthcWalletOptions } from './types'\nimport { createLogoutIframe, createWalletLoginIframe, formatUniversalUrl } from './utils'\nimport { AUTHC_CUSTOM_WALLET } from './constants'\n\nexport const defaultChains = [mainnet, polygon, polygonMumbai, goerli, sepolia]\nlet wagmiClientInstance: ReturnType<typeof createConfig>\n\nexport const createWeb3Modal = (config: AuthcWalletOptions) => {\n  const { projectId, storageKey = 'authc.wallet.wagmi', wagmiClientCache = false } = config\n  // 1. Define constants\n  const chains: Chain[] = config.chains ?? defaultChains\n\n  // 2. Configure wagmi client\n  if (!wagmiClientInstance || !wagmiClientCache) {\n    const { publicClient, webSocketPublicClient } = configureChains(chains, [w3mProvider({ projectId: projectId || '' })])\n    wagmiClientInstance = createConfig({\n      autoConnect: true,\n      connectors: [\n        new MetaMaskConnector({\n          chains,\n          options: {\n            shimDisconnect: true,\n          },\n        }) as any,\n        ...w3mConnectors({\n          chains, projectId,\n        }),\n      ],\n      publicClient,\n      storage: createStorage({\n        key: storageKey,\n        storage: window.localStorage,\n      }),\n      webSocketPublicClient: webSocketPublicClient as any,\n    })\n\n    // 3. Create ethereum and modal clients\n    const ethereumClient = new EthereumClient(wagmiClientInstance, chains)\n    ClientCtrl.setEthereumClient(ethereumClient)\n    ConfigCtrl.setConfig({ projectId, ...config })\n  }\n}\n\nexport class CustomWalletLogin extends CustomPostMessage {\n  private closeWatch: (() => void) | null = null\n  walletLoginPromise: Promise<GetAccountResult>\n  __resolve: (value: any) => void\n  __reject: (err: any) => void\n  CUSTOM_WALLET_KEY = AUTHC_CUSTOM_WALLET\n  authc: Authc\n\n  constructor(private walletOption: AuthcWalletOptions) {\n    super(() => this.customIframe, walletOption.authc ? 'authcWalletLogin' : 'walletLogin')\n\n    if (walletOption.storageKey)\n      this.CUSTOM_WALLET_KEY += `${walletOption.storageKey}.${AUTHC_CUSTOM_WALLET}`\n\n    createWeb3Modal(walletOption)\n    if (walletOption.customWallets?.length) {\n      this.authc = walletOption.authc\n\n      this.init()\n      this.watchCustomLogin()\n    }\n  }\n\n  get isCustomWallet() {\n    return !!this.customIframe\n  }\n\n  get walletName() {\n    return localStorage.getItem(this.CUSTOM_WALLET_KEY) || undefined\n  }\n\n  get customIframe() {\n    return document.querySelector<HTMLIFrameElement>('iframe[data-authc-wallet]')\n  }\n\n  async removeIframe() {\n    this.customIframe?.remove()\n    this.closeWatch?.()\n    this.closeWatch = null\n  }\n\n  private onLoadLoginIframeError() {\n    this.cancelLogin()\n    this.__reject(new Error('Load wallet website failed, Please check your network, or try again later'))\n  }\n\n  toggleIframeVisible = (state: boolean) => {\n    if (this.customIframe) {\n      if (state) {\n        this.customIframe.style.zIndex = '5000'\n        this.customIframe.style.pointerEvents = 'auto'\n      }\n      else {\n        if (this.customIframe) {\n          this.customIframe.style.zIndex = '-1'\n          this.customIframe.style.pointerEvents = 'none'\n        }\n      }\n    }\n  }\n\n  getWalletConnectUri() {\n    return new Promise<string>((resolve, reject) => {\n      const chain = this.options.getSelectedChain() || this.config.state.defaultChain\n      this.client().connectWalletConnect((uri) => {\n        resolve(uri)\n      }, chain?.id).catch(reject)\n    })\n  }\n\n  createLoginPromise() {\n    this.walletLoginPromise = new Promise<any>((resolve, reject) => {\n      this.__resolve = resolve\n      this.__reject = reject\n    })\n\n    return this.walletLoginPromise\n  }\n\n  reconnectWalletCustom() {\n    if (this.customIframe)\n      return this.walletLoginPromise\n\n    this.createLoginPromise()\n    const wallet = this.getCustomWallet(this.walletName!)\n\n    if (wallet) {\n      createWalletLoginIframe(\n      `${wallet.links.universal}?redirectUrl=${encodeURIComponent('/view/wc')}&locale=${this.walletOption.locale?.()}`,\n      {\n        onerror: this.onLoadLoginIframeError,\n      },\n      )\n    }\n\n    return this.walletLoginPromise\n  }\n\n  async connectWalletCustom(name?: string) {\n    if (!name)\n      name = (this.config.state as AuthcWalletOptions).customWallets?.[0].name\n\n    this.createLoginPromise()\n    if (this.customIframe) {\n      try {\n        this.replace('/login')\n      }\n      catch {}\n      return this.walletLoginPromise\n    }\n    const wallet = this.getCustomWallet(name)\n    if (!wallet) {\n      this.__reject(new Error(`Cannot find '${name}' wallet, please check you have added it to the customWallets`))\n      return this.walletLoginPromise\n    }\n\n    localStorage.setItem(this.CUSTOM_WALLET_KEY, wallet.name)\n    createWalletLoginIframe(\n      `${formatUniversalUrl(wallet.links.universal, await this.getWalletConnectUri(), wallet.name)}&locale=${this.walletOption.locale?.()}`,\n      {\n        onerror: this.onLoadLoginIframeError,\n      },\n    )\n    return this.walletLoginPromise\n  }\n\n  getCustomWallet = (name: string) => {\n    return (this.config.state as AuthcWalletOptions).customWallets?.find(wallet => wallet.name.toLowerCase() === name?.toLowerCase())\n  }\n\n  async watchCustomLogin() {\n    this.client().watchAccount((account) => {\n      const wallet = this.getCustomWallet(this.walletName)\n      if (!wallet)\n        return\n\n      if (account.isConnecting || account.isReconnecting) {\n        this.watchCustomWallet()\n      }\n      else if (account.isConnected) {\n        this.watchCustomWallet()\n        this.getSignerProvider().then((provider) => {\n          if (this.walletName && !wallet)\n            return this.cancelLogin()\n\n          if (!wallet)\n            return\n\n          const session = (provider as any)?.session || (provider as any)?.connector?.session\n          if (!session)\n            return\n          const walletUrl = (session.peerMeta || session.peer?.metadata)?.url\n          if (wallet.links.universal.includes(walletUrl)) {\n            if (!this.customIframe)\n              this.reconnectWalletCustom()\n\n            this.checkWalletAddress(account.address)\n          }\n          else if (this.walletName) {\n            this.cancelLogin()\n          }\n        })\n\n        if (this.initialized) {\n          // 如果没有就补充一个\n          if (!this.walletLoginPromise)\n            this.createLoginPromise()\n\n          this.__resolve(account)\n        }\n        else {\n          this.initializedCallbackQueue.push(async () => {\n            // 如果没有就补充一个\n            if (!this.walletLoginPromise)\n              this.createLoginPromise()\n\n            this.__resolve?.(account)\n          })\n        }\n      }\n      else if (account.isDisconnected && (this.customIframe)) {\n        if (!this.walletOption.unlockOnDemand)\n          this.cancelLogin()\n      }\n    })\n  }\n\n  watchCustomWallet() {\n    if (this.closeWatch)\n      return\n\n    this.closeWatch = this.receiveMessage(async (type, data) => {\n      if (type === 'lifecycle') {\n        if (data.name === 'reconstruct') {\n          if (this.client().getAccount().isConnected)\n            this.client().disconnect()\n\n          if (!this.walletOption.unlockOnDemand && this.client().getAccount().status !== 'disconnected')\n            this.replace('/reconstruct')\n        }\n      }\n      else if (type === 'loginFailed') {\n        this.__reject?.(new Error(data?.errorMessage || data?.error?.toString() || 'Login failed'))\n        this.cancelLogin()\n      }\n      else if (type === 'modal') {\n        this.toggleIframeVisible(!!data.state)\n      }\n      else if (type === 'wcUri') {\n        this.getWalletConnectUri().then((uri) => {\n          this.postMessage({\n            type: 'wcUri',\n            uri,\n            code: data.code,\n          })\n        })\n      }\n      else if (type.toString() === '401' && this.client().getAccount().isConnected) {\n        if (data.url) {\n          const url = new URL(data.url)\n          await this.logoutWithIframe(url.toString())\n        }\n        this.cancelLogin()\n      }\n      else if (type === 'logout') {\n        await this.cancelLogin()\n      }\n    })\n  }\n\n  watchAccount(callback: (\n    account: GetAccountResult & {\n      /**\n       * is custom wallet login?\n       */\n      isCustomWallet: boolean\n      errMessage: string\n    }) => void, ...args: any[]) {\n    return this.client().watchAccount(async (data) => {\n      let errMessage = ''\n      if (data.isConnected) {\n        try {\n          await this.walletLoginPromise\n        }\n        catch (err) {\n          errMessage = err.message\n        }\n      }\n      callback({\n        ...data,\n        isCustomWallet: this.isCustomWallet,\n        errMessage,\n      })\n    }, ...args)\n  }\n\n  // 内部的 disconnect\n  async cancelLogin() {\n    this.initialized = false\n    this.initializedCallbackQueue = []\n    this.removeIframe()\n    // disconnect need isCustomWallet value\n    const disconnected = await this.client().disconnect()\n    localStorage.removeItem(this.CUSTOM_WALLET_KEY)\n    return disconnected\n  }\n\n  disconnect() {\n    if (this.isCustomWallet) {\n      // 等待 iframe 退出后发出401\n      return this.logout()\n    }\n    else {\n      return this.client().disconnect()\n    }\n  }\n\n  async getWalletClient(_chainId?: number) {\n    const chainId = _chainId || await this.client().getNetwork()?.chain?.id\n    const client = await getWalletClient({\n      chainId,\n    })\n\n    return client ?? wagmiClientInstance.publicClient\n  }\n\n  async getSignerProvider() {\n    const connector = this.client().getConnectorById('walletConnect') as Connector\n    return connector.getProvider().then(res => res as EthereumProvider)\n  }\n\n  async getSignClient() {\n    return this.getSignerProvider().then((provider) => {\n      return provider.signer.rpcProviders.eip155 as IProvider\n    })\n  }\n\n  async switchNetwork(params: { chainId: number }): Promise<SwitchNetworkResult | void> {\n    if (this.isCustomWallet) {\n      const signClient = await this.getSignClient()\n      const signer = (await this.getSignerProvider()).signer\n      const session = signer.session\n      const namespaces = signer.namespaces\n      const namespace = signClient.namespace\n      const accounts = namespace.accounts\n      const hasChain = accounts.find((account: any) => account.includes(`eip155:${params.chainId}`))\n      const addresses = accounts.map((a: string) => a.split(':')[2])\n      namespaces.eip155 = namespace\n      if (!hasChain) {\n        namespace.accounts = accounts.concat(addresses.map((ad: string) => `eip155:${params.chainId}:${ad}`))\n        namespace.chains = namespace.chains.concat(`eip155:${params.chainId}`)\n        await signClient.client.update({\n          topic: session.topic,\n          namespaces: namespaces as any,\n        })\n      }\n    }\n\n    return this.client().switchNetwork(params)\n  }\n\n  protected logoutWithIframe(url: string) {\n    return createLogoutIframe(url)\n  }\n\n  get modal() {\n    return ModalCtrl\n  }\n\n  get config() {\n    return ConfigCtrl\n  }\n\n  get client(): () => EthereumClient {\n    return ClientCtrl.client\n  }\n\n  get explorer() {\n    return ExplorerCtrl\n  }\n\n  get options() {\n    return OptionsCtrl as typeof import('@web3modal/core').OptionsCtrl\n  }\n}\n","export interface EventMessage {\n  // modal 状态\n  modal: {\n    state: boolean\n  }\n  // 取消登录\n  cancelLogin: void\n  lifecycle: {\n    name: 'login' | 'loginFailed' | 'createWallet' | 'reconstruct' | 'viewAccount' | 'reconstructFailed'\n  }\n  loginFailed: {\n    err?: Error\n    errorMessage: string\n  }\n  // wallet 已完成初始化\n  initialized: void\n  connectWalletByWalletName: {\n    name: string\n    walletAddress: string\n  }\n  // 登出\n  401: void\n  wcUri: {\n    code: string\n  }\n  logout: void\n  $all: any\n  signingMessage: {\n    sid: string\n    message: string\n    name: string\n  }\n}\n\nexport type EventMessageCallback = ((type: keyof EventMessage, data: any, event: MessageEvent) => void)\n\nexport interface ListenerCallback<T extends keyof EventMessage> {\n  (data: EventMessage[T]): any\n}\n\nconst eventListener = new Map<keyof EventMessage, ((...args: any[]) => void)[]>()\n\nexport const addMessageListener = <T extends keyof EventMessage>(type: T, callback: ListenerCallback<T>) => {\n  const listeners = eventListener.get(type) || []\n  eventListener.set(type, [...listeners, callback])\n}\n\nexport const removeMessageListener = <T extends keyof EventMessage>(type: T, callback: ListenerCallback<T>) => {\n  const listeners = (eventListener.get(type) || []).filter(listener => listener !== callback)\n  eventListener.set(type, listeners)\n}\n\nconst eventListeners = new Set<EventMessageCallback>()\n\nconst executeListener = <T extends keyof EventMessage>(type: T, data: any, event: MessageEvent) => {\n  const listeners = (eventListener.get(type) || [])\n  listeners.forEach(listener => [\n    listener(data, event),\n  ])\n  eventListeners.forEach((listener) => {\n    return listener(type, data, event)\n  })\n}\n\nexport const receiveMessages = (callback?: EventMessageCallback) => {\n  eventListeners.add(callback)\n  return () => eventListeners.delete(callback)\n}\n\nwindow.addEventListener('message', (event: WindowEventMap['message']) => {\n  if (event.data.type !== 'authcWallet')\n    return\n  const messageType = event.data.data.type\n  Reflect.deleteProperty(event.data, 'type')\n  executeListener(messageType, event.data.data, event)\n})\n\nexport const sendMessage = (iframe: HTMLIFrameElement, data: {\n  type: string\n  [key: string]: any\n}) => {\n  iframe.contentWindow.postMessage({\n    type: 'authcWallet',\n    data,\n  }, '*')\n}\n","import { addMessageListener, receiveMessages, sendMessage } from './utils/message'\n\nexport class CustomPostMessage {\n  initialized = false\n  constructor(\n    private iframe: () => HTMLIFrameElement | null,\n    public type?: string,\n  ) { }\n\n  initializedCallbackQueue: (() => void)[] = []\n\n  protected init() {\n    addMessageListener('initialized', async () => {\n      this.initialized = true\n      this.placement()\n      await Promise.all(this.initializedCallbackQueue.map(fn => fn()))\n      this.initializedCallbackQueue = []\n    })\n  }\n\n  postMessage(data: Parameters<typeof sendMessage>[1]) {\n    const iframe = this.iframe()\n    if (!iframe)\n      throw new Error('Please login with your custom wallet first')\n\n    if (!this.initialized) {\n      this.initializedCallbackQueue.push(() => this.postMessage(data))\n      return\n    }\n    sendMessage(iframe, data)\n  }\n\n  receiveMessage = receiveMessages\n  addMessageListener = addMessageListener\n\n  viewWallet() {\n    this.push('/view')\n  }\n\n  push(path: string) {\n    this.postMessage({\n      type: 'router',\n      path,\n    })\n  }\n\n  replace(path: string, params?: Record<string, any>) {\n    this.postMessage({\n      type: 'router',\n      path,\n      replace: true,\n      ...params,\n    })\n  }\n\n  checkWalletAddress(address: string) {\n    this.postMessage({\n      type: 'checkWalletAddress',\n      address,\n    })\n  }\n\n  placement() {\n    this.postMessage({\n      type: 'where',\n      placement: this.type,\n    })\n  }\n\n  logout() {\n    this.postMessage({\n      type: 'logout',\n    })\n  }\n\n  setLocale(locale: string) {\n    this.postMessage({\n      type: 'locale',\n      locale,\n    })\n  }\n}\n","export const AUTHC_CUSTOM_WALLET = 'AUTHC_CUSTOM_WALLET'\n"],"mappings":"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","names":["CoreUtil","ExplorerCtrl","getWalletClient","CoreUtil","ExplorerCtrl"]}