@sky-mavis/tanto-widget
Version:
Tanto Widget
129 lines (125 loc) • 12.4 kB
JavaScript
'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;