UNPKG

@sky-mavis/tanto-widget

Version:
129 lines (125 loc) 12.4 kB
'use strict'; var _styled = require('@emotion/styled/base'); var jsxRuntime = require('@emotion/react/jsx-runtime'); var react = require('react'); var wagmi = require('wagmi'); var walletConfigs = require('../configs/walletConfigs.cjs'); var constants = require('../constants.cjs'); var common = require('../utils/common.cjs'); var userAgent = require('../utils/userAgent.cjs'); var walletDetection = require('../utils/walletDetection.cjs'); var useIsSafeWallet = require('./useIsSafeWallet.cjs'); function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; } const WalletIcon = /*#__PURE__*/_styled("img", process.env.NODE_ENV === "production" ? { target: "e2a4psx0" } : { target: "e2a4psx0", label: "WalletIcon" })(process.env.NODE_ENV === "production" ? { name: "sg5qoq", styles: "width:32px;height:32px;border-radius:8px;object-fit:contain" } : { name: "sg5qoq", styles: "width:32px;height:32px;border-radius:8px;object-fit:contain/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVzZVdhbGxldHMudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVVtQiIsImZpbGUiOiJ1c2VXYWxsZXRzLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlQ29ubmVjdG9ycyB9IGZyb20gJ3dhZ21pJztcbmltcG9ydCB7IHdhbGxldENvbmZpZ3MgfSBmcm9tICcuLi9jb25maWdzL3dhbGxldENvbmZpZ3MnO1xuaW1wb3J0IHsgV0FMTEVUX0lEUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBub3RFbXB0eSB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbic7XG5pbXBvcnQgeyBpc0Rlc2t0b3AsIGlzTW9iaWxlIH0gZnJvbSAnLi4vdXRpbHMvdXNlckFnZW50JztcbmltcG9ydCB7IGlzQ29pbmJhc2VDb25uZWN0b3IsIGlzSW5qZWN0ZWRDb25uZWN0b3IsIGlzUm9uaW5FeHRlbnNpb25JbnN0YWxsZWQsIGlzUm9uaW5JbkFwcEJyb3dzZXIsIGlzU2FmZUNvbm5lY3RvciwgaXNXYXlwb2ludENvbm5lY3RvciwgaXNXQ0Nvbm5lY3RvciwgfSBmcm9tICcuLi91dGlscy93YWxsZXREZXRlY3Rpb24nO1xuaW1wb3J0IHsgdXNlSXNTYWZlV2FsbGV0IH0gZnJvbSAnLi91c2VJc1NhZmVXYWxsZXQnO1xuY29uc3QgV2FsbGV0SWNvbiA9IHN0eWxlZC5pbWcoe1xuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIGJvcmRlclJhZGl1czogOCxcbiAgICBvYmplY3RGaXQ6ICdjb250YWluJyxcbn0pO1xuZnVuY3Rpb24gZ2V0V2FsbGV0SW5zdGFsbGF0aW9uU3RhdHVzKGNvbm5lY3RvciwgY29ubmVjdG9ycykge1xuICAgIGNvbnN0IHsgaWQsIHR5cGUgfSA9IGNvbm5lY3RvcjtcbiAgICBpZiAoaWQgPT09IFdBTExFVF9JRFMuUk9OSU5fV0FMTEVUKVxuICAgICAgICByZXR1cm4gaXNSb25pbkV4dGVuc2lvbkluc3RhbGxlZChjb25uZWN0b3JzKTtcbiAgICByZXR1cm4gKGlzU2FmZUNvbm5lY3RvcihpZCkgfHxcbiAgICAgICAgaXNDb2luYmFzZUNvbm5lY3RvcihpZCkgfHxcbiAgICAgICAgaXNXYXlwb2ludENvbm5lY3RvcihpZCkgfHxcbiAgICAgICAgaXNXQ0Nvbm5lY3RvcihpZCkgfHxcbiAgICAgICAgaXNJbmplY3RlZENvbm5lY3Rvcih0eXBlKSk7XG59XG5mdW5jdGlvbiBjcmVhdGVCYXNlV2FsbGV0KGNvbm5lY3RvciwgY29ubmVjdG9ycykge1xuICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBjb25uZWN0b3IuaWQsXG4gICAgICAgIG5hbWU6IGNvbm5lY3Rvci5uYW1lID8/IGNvbm5lY3Rvci5pZCA/PyBjb25uZWN0b3IudHlwZSxcbiAgICAgICAgaWNvbjogY29ubmVjdG9yLmljb24gPyBfanN4KFdhbGxldEljb24sIHsgc3JjOiBjb25uZWN0b3IuaWNvbiwgYWx0OiBjb25uZWN0b3IubmFtZSB9KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgaXNJbnN0YWxsZWQ6IGdldFdhbGxldEluc3RhbGxhdGlvblN0YXR1cyhjb25uZWN0b3IsIGNvbm5lY3RvcnMpLFxuICAgICAgICBjb25uZWN0b3IsXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVdhbGxldFdpdGhDb25maWcoYmFzZVdhbGxldCkge1xuICAgIGNvbnN0IHdhbGxldENvbmZpZyA9IHdhbGxldENvbmZpZ3NbYmFzZVdhbGxldC5pZF07XG4gICAgcmV0dXJuIHdhbGxldENvbmZpZyA/IHsgLi4uYmFzZVdhbGxldCwgLi4ud2FsbGV0Q29uZmlnIH0gOiBiYXNlV2FsbGV0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHVzZVdhbGxldHMoKSB7XG4gICAgY29uc3QgY29ubmVjdG9ycyA9IHVzZUNvbm5lY3RvcnMoKTtcbiAgICBjb25zdCB7IGlzU2FmZSB9ID0gdXNlSXNTYWZlV2FsbGV0KCk7XG4gICAgY29uc3QgZGV2aWNlSW5mbyA9IHVzZU1lbW8oKCkgPT4gKHtcbiAgICAgICAgaXNNb2JpbGU6IGlzTW9iaWxlKCksXG4gICAgICAgIGlzRGVza3RvcDogaXNEZXNrdG9wKCksXG4gICAgICAgIGlzUm9uaW5JbkFwcEJyb3dzZXI6IGlzUm9uaW5JbkFwcEJyb3dzZXIoKSxcbiAgICB9KSwgW10pO1xuICAgIGNvbnN0IHdhbGxldHMgPSB1c2VNZW1vKCgpID0+IGNvbm5lY3RvcnMubWFwKGNvbm5lY3RvciA9PiBjcmVhdGVCYXNlV2FsbGV0KGNvbm5lY3RvciwgY29ubmVjdG9ycykpLm1hcChjcmVhdGVXYWxsZXRXaXRoQ29uZmlnKSwgW2Nvbm5lY3RvcnNdKTtcbiAgICBjb25zdCB3YWxsZXRzQnlUeXBlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGNvbnN0IHdhbGxldE1hcCA9IG5ldyBNYXAod2FsbGV0cy5tYXAod2FsbGV0ID0+IFt3YWxsZXQuaWQsIHdhbGxldF0pKTtcbiAgICAgICAgY29uc3Qgc2FmZVdhbGxldCA9IGlzU2FmZSA/IHdhbGxldE1hcC5nZXQoV0FMTEVUX0lEUy5TQUZFKSA6IG51bGw7XG4gICAgICAgIGNvbnN0IHdheXBvaW50V2FsbGV0ID0gd2FsbGV0TWFwLmdldChXQUxMRVRfSURTLldBWVBPSU5UKTtcbiAgICAgICAgY29uc3QgY29pbmJhc2VXYWxsZXQgPSB3YWxsZXRNYXAuZ2V0KFdBTExFVF9JRFMuQ09JTkJBU0VfV0FMTEVUKTtcbiAgICAgICAgY29uc3Qgd2NXYWxsZXQgPSB3YWxsZXRNYXAuZ2V0KFdBTExFVF9JRFMuV0FMTEVUX0NPTk5FQ1QpO1xuICAgICAgICBjb25zdCByb25pbkV4dGVuc2lvbldhbGxldCA9IHdhbGxldE1hcC5nZXQoV0FMTEVUX0lEUy5ST05JTl9XQUxMRVQpID8/IHdhbGxldE1hcC5nZXQoV0FMTEVUX0lEUy5ST05JTl9XQUxMRVRfSU5KRUNURUQpO1xuICAgICAgICBjb25zdCBpbmplY3RlZFdhbGxldHMgPSB3YWxsZXRzLmZpbHRlcih3YWxsZXQgPT4gaXNJbmplY3RlZENvbm5lY3Rvcih3YWxsZXQuY29ubmVjdG9yPy50eXBlKSAmJlxuICAgICAgICAgICAgd2FsbGV0LmlkICE9PSBXQUxMRVRfSURTLlJPTklOX1dBTExFVCAmJlxuICAgICAgICAgICAgd2FsbGV0LmlkICE9PSBXQUxMRVRfSURTLlJPTklOX1dBTExFVF9JTkpFQ1RFRCk7XG4gICAgICAgIGNvbnN0IHJvbmluTW9iaWxlV2FsbGV0ID0gd2NXYWxsZXQgJiYge1xuICAgICAgICAgICAgLi4ud2NXYWxsZXQsXG4gICAgICAgICAgICAuLi53YWxsZXRDb25maWdzLkNVU1RPTV9ST05JTl9NT0JJTEVfV0FMTEVULFxuICAgICAgICAgICAgaXNJbnN0YWxsZWQ6IHRydWUsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJvbmluSW5BcHBCcm93c2VyV2FsbGV0ID0gcm9uaW5FeHRlbnNpb25XYWxsZXQgJiYge1xuICAgICAgICAgICAgLi4ucm9uaW5FeHRlbnNpb25XYWxsZXQsXG4gICAgICAgICAgICAuLi53YWxsZXRDb25maWdzLkNVU1RPTV9ST05JTl9JTl9BUFBfV0FMTEVULFxuICAgICAgICAgICAgaXNJbnN0YWxsZWQ6IHRydWUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3YXlwb2ludFdhbGxldCxcbiAgICAgICAgICAgIHJvbmluRXh0ZW5zaW9uV2FsbGV0LFxuICAgICAgICAgICAgcm9uaW5Nb2JpbGVXYWxsZXQsXG4gICAgICAgICAgICByb25pbkluQXBwQnJvd3NlcldhbGxldCxcbiAgICAgICAgICAgIGluamVjdGVkV2FsbGV0cyxcbiAgICAgICAgICAgIHdjV2FsbGV0LFxuICAgICAgICAgICAgc2FmZVdhbGxldCxcbiAgICAgICAgICAgIGNvaW5iYXNlV2FsbGV0LFxuICAgICAgICB9O1xuICAgIH0sIFt3YWxsZXRzLCBpc1NhZmVdKTtcbiAgICBjb25zdCBwcmltYXJ5V2FsbGV0cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHdheXBvaW50V2FsbGV0LCByb25pbkV4dGVuc2lvbldhbGxldCwgcm9uaW5Nb2JpbGVXYWxsZXQsIHJvbmluSW5BcHBCcm93c2VyV2FsbGV0IH0gPSB3YWxsZXRzQnlUeXBlO1xuICAgICAgICBpZiAoZGV2aWNlSW5mby5pc0Rlc2t0b3ApXG4gICAgICAgICAgICByZXR1cm4gW3dheXBvaW50V2FsbGV0LCByb25pbkV4dGVuc2lvbldhbGxldF0uZmlsdGVyKG5vdEVtcHR5KTtcbiAgICAgICAgaWYgKGRldmljZUluZm8uaXNNb2JpbGUgJiYgIWRldmljZUluZm8uaXNSb25pbkluQXBwQnJvd3NlcilcbiAgICAgICAgICAgIHJldHVybiBbd2F5cG9pbnRXYWxsZXQsIHJvbmluTW9iaWxlV2FsbGV0XS5maWx0ZXIobm90RW1wdHkpO1xuICAgICAgICBpZiAoZGV2aWNlSW5mby5pc1JvbmluSW5BcHBCcm93c2VyKVxuICAgICAgICAgICAgcmV0dXJuIFtyb25pbkluQXBwQnJvd3NlcldhbGxldF0uZmlsdGVyKG5vdEVtcHR5KTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH0sIFt3YWxsZXRzQnlUeXBlLCBkZXZpY2VJbmZvXSk7XG4gICAgY29uc3Qgc2Vjb25kYXJ5V2FsbGV0cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGluamVjdGVkV2FsbGV0cywgd2NXYWxsZXQsIHNhZmVXYWxsZXQsIGNvaW5iYXNlV2FsbGV0IH0gPSB3YWxsZXRzQnlUeXBlO1xuICAgICAgICBpZiAoIWRldmljZUluZm8uaXNEZXNrdG9wKVxuICAgICAgICAgICAgcmV0dXJuIFtjb2luYmFzZVdhbGxldCwgc2FmZVdhbGxldF0uZmlsdGVyKG5vdEVtcHR5KTtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRXYWxsZXRzID0gW3djV2FsbGV0LCBzYWZlV2FsbGV0LCBjb2luYmFzZVdhbGxldCwgLi4uaW5qZWN0ZWRXYWxsZXRzXS5maWx0ZXIobm90RW1wdHkpO1xuICAgICAgICAvLyBNb3ZlIFdhbGxldENvbm5lY3QgdG8gdG9wXG4gICAgICAgIGNvbnN0IHdjV2FsbGV0cyA9IGZpbHRlcmVkV2FsbGV0cy5maWx0ZXIod2FsbGV0ID0+IGlzV0NDb25uZWN0b3Iod2FsbGV0LmlkKSk7XG4gICAgICAgIGNvbnN0IG90aGVyV2FsbGV0cyA9IGZpbHRlcmVkV2FsbGV0cy5maWx0ZXIod2FsbGV0ID0+ICFpc1dDQ29ubmVjdG9yKHdhbGxldC5pZCkpO1xuICAgICAgICByZXR1cm4gWy4uLndjV2FsbGV0cywgLi4ub3RoZXJXYWxsZXRzXTtcbiAgICB9LCBbd2FsbGV0c0J5VHlwZSwgZGV2aWNlSW5mb10pO1xuICAgIHJldHVybiB1c2VNZW1vKCgpID0+ICh7XG4gICAgICAgIHdhbGxldHM6IFsuLi5wcmltYXJ5V2FsbGV0cywgLi4uc2Vjb25kYXJ5V2FsbGV0c10sXG4gICAgICAgIHByaW1hcnlXYWxsZXRzLFxuICAgICAgICBzZWNvbmRhcnlXYWxsZXRzLFxuICAgIH0pLCBbcHJpbWFyeVdhbGxldHMsIHNlY29uZGFyeVdhbGxldHNdKTtcbn1cbiJdfQ== */", toString: _EMOTION_STRINGIFIED_CSS_ERROR__ }); function getWalletInstallationStatus(connector, connectors) { const { id, type } = connector; if (id === constants.WALLET_IDS.RONIN_WALLET) return walletDetection.isRoninExtensionInstalled(connectors); return walletDetection.isSafeConnector(id) || walletDetection.isCoinbaseConnector(id) || walletDetection.isWaypointConnector(id) || walletDetection.isWCConnector(id) || walletDetection.isInjectedConnector(type); } function createBaseWallet(connector, connectors) { return { id: connector.id, name: connector.name ?? connector.id ?? connector.type, icon: connector.icon ? jsxRuntime.jsx(WalletIcon, { src: connector.icon, alt: connector.name }) : undefined, isInstalled: getWalletInstallationStatus(connector, connectors), connector }; } function createWalletWithConfig(baseWallet) { const walletConfig = walletConfigs.walletConfigs[baseWallet.id]; return walletConfig ? { ...baseWallet, ...walletConfig } : baseWallet; } function useWallets() { const connectors = wagmi.useConnectors(); const { isSafe } = useIsSafeWallet.useIsSafeWallet(); const deviceInfo = react.useMemo(() => ({ isMobile: userAgent.isMobile(), isDesktop: userAgent.isDesktop(), isRoninInAppBrowser: walletDetection.isRoninInAppBrowser() }), []); const wallets = react.useMemo(() => connectors.map(connector => createBaseWallet(connector, connectors)).map(createWalletWithConfig), [connectors]); const walletsByType = react.useMemo(() => { const walletMap = new Map(wallets.map(wallet => [wallet.id, wallet])); const safeWallet = isSafe ? walletMap.get(constants.WALLET_IDS.SAFE) : null; const waypointWallet = walletMap.get(constants.WALLET_IDS.WAYPOINT); const coinbaseWallet = walletMap.get(constants.WALLET_IDS.COINBASE_WALLET); const wcWallet = walletMap.get(constants.WALLET_IDS.WALLET_CONNECT); const roninExtensionWallet = walletMap.get(constants.WALLET_IDS.RONIN_WALLET) ?? walletMap.get(constants.WALLET_IDS.RONIN_WALLET_INJECTED); const injectedWallets = wallets.filter(wallet => walletDetection.isInjectedConnector(wallet.connector?.type) && wallet.id !== constants.WALLET_IDS.RONIN_WALLET && wallet.id !== constants.WALLET_IDS.RONIN_WALLET_INJECTED); const roninMobileWallet = wcWallet && { ...wcWallet, ...walletConfigs.walletConfigs.CUSTOM_RONIN_MOBILE_WALLET, isInstalled: true }; const roninInAppBrowserWallet = roninExtensionWallet && { ...roninExtensionWallet, ...walletConfigs.walletConfigs.CUSTOM_RONIN_IN_APP_WALLET, isInstalled: true }; return { waypointWallet, roninExtensionWallet, roninMobileWallet, roninInAppBrowserWallet, injectedWallets, wcWallet, safeWallet, coinbaseWallet }; }, [wallets, isSafe]); const primaryWallets = react.useMemo(() => { const { waypointWallet, roninExtensionWallet, roninMobileWallet, roninInAppBrowserWallet } = walletsByType; if (deviceInfo.isDesktop) return [waypointWallet, roninExtensionWallet].filter(common.notEmpty); if (deviceInfo.isMobile && !deviceInfo.isRoninInAppBrowser) return [waypointWallet, roninMobileWallet].filter(common.notEmpty); if (deviceInfo.isRoninInAppBrowser) return [roninInAppBrowserWallet].filter(common.notEmpty); return []; }, [walletsByType, deviceInfo]); const secondaryWallets = react.useMemo(() => { const { injectedWallets, wcWallet, safeWallet, coinbaseWallet } = walletsByType; if (!deviceInfo.isDesktop) return [coinbaseWallet, safeWallet].filter(common.notEmpty); const filteredWallets = [wcWallet, safeWallet, coinbaseWallet, ...injectedWallets].filter(common.notEmpty); // Move WalletConnect to top const wcWallets = filteredWallets.filter(wallet => walletDetection.isWCConnector(wallet.id)); const otherWallets = filteredWallets.filter(wallet => !walletDetection.isWCConnector(wallet.id)); return [...wcWallets, ...otherWallets]; }, [walletsByType, deviceInfo]); return react.useMemo(() => ({ wallets: [...primaryWallets, ...secondaryWallets], primaryWallets, secondaryWallets }), [primaryWallets, secondaryWallets]); } exports.useWallets = useWallets;