diff --git a/.env b/.env new file mode 100644 index 0000000..ab2f5fb --- /dev/null +++ b/.env @@ -0,0 +1,2 @@ +NEXT_PUBLIC_NETWORK=mainnet +NEXT_PUBLIC_STAGE=production \ No newline at end of file diff --git a/.gitignore b/.gitignore index d7db55a..b1bd2d6 100644 --- a/.gitignore +++ b/.gitignore @@ -33,8 +33,5 @@ yarn-error.log* # vercel .vercel -# Sentry -.sentryclirc - # IDE -.idea +.idea \ No newline at end of file diff --git a/README.md b/README.md index 093aa4f..5fa13bd 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,6 @@ Typescript is added and utilised (but optional if you want to create .jsx or .ts SCSS with [CSS modules](https://create-react-app.dev/docs/adding-a-css-modules-stylesheet) (webpack allows importing css files into javascript, use the CSS module technique to avoid className clashes). -Sentry is used for front end error logging/exception & bug reporting. - ## 2. Deployment Start web server diff --git a/next.config.js b/next.config.js index 2801090..e9f9259 100644 --- a/next.config.js +++ b/next.config.js @@ -1,6 +1,5 @@ /** @type {import('next').NextConfig} */ -const { withSentryConfig } = require('@sentry/nextjs') const path = require('path') const moduleExports = { @@ -50,18 +49,4 @@ const moduleExports = { }, } -const sentryWebpackPluginOptions = { - // Additional config options for the Sentry Webpack plugin. Keep in mind that - // the following options are set automatically, and overriding them is not - // recommended: - // release, url, org, project, authToken, configFile, stripPrefix, - // urlPrefix, include, ignore - - silent: true, // Suppresses all logs - // For all available options, see: - // https://github.com/getsentry/sentry-webpack-plugin#options. -} - -// Make sure adding Sentry options is the last code to run before exporting, to -// ensure that your source maps include changes from all other Webpack plugins -module.exports = withSentryConfig(moduleExports, sentryWebpackPluginOptions) +module.exports = moduleExports diff --git a/package.json b/package.json index bc239fd..31e7006 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "mars", "homepage": "./", - "version": "1.1.0", + "version": "1.2.0", "private": false, "license": "SEE LICENSE IN LICENSE FILE", "scripts": { @@ -22,11 +22,10 @@ "@cosmjs/launchpad": "^0.27.1", "@cosmjs/proto-signing": "^0.29.5", "@cosmjs/stargate": "^0.29.5", - "@marsprotocol/wallet-connector": "^1.2.3", + "@marsprotocol/wallet-connector": "^1.3.0", "@material-ui/core": "^4.12.4", "@material-ui/icons": "^4.11.3", "@ramonak/react-progress-bar": "^5.0.3", - "@sentry/nextjs": "^7.34.0", "@tanstack/react-query": "^4.24.4", "@tanstack/react-table": "^8.7.9", "@testing-library/dom": "^8.20.0", @@ -53,14 +52,14 @@ "ramda": "^0.28.0", "react": "^18.2.0", "react-chartjs-2": "^5.2.0", - "react-currency-input-field": "^3.6.9", + "react-currency-input-field": "^3.6.10", "react-device-detect": "^2.2.2", "react-dom": "^18.2.0", - "react-i18next": "^12.1.4", + "react-i18next": "^12.1.5", "react-spring": "^9.6.1", "react-table": "^7.8.0", "react-use-clipboard": "^1.0.9", - "sass": "^1.57.1", + "sass": "^1.58.0", "typescript": "^4.9.5", "web-vitals": "^3.1.1", "zustand": "^4.3.2" @@ -84,7 +83,7 @@ "@types/lodash.clonedeep": "^4.5.7", "@types/lodash.isequal": "^4.5.6", "@types/lodash.throttle": "^4.1.7", - "@types/node": "^18.11.18", + "@types/node": "^18.13.0", "@types/numeral": "^2.0.2", "@types/prettier": "^2.7.2", "@types/ramda": "^0.28.22", diff --git a/public/index.html b/public/index.html index ebae2e2..e6cb958 100644 --- a/public/index.html +++ b/public/index.html @@ -2,10 +2,11 @@ - + + - + - + diff --git a/src/components/common/BorrowCapacity/BorrowCapacity.tsx b/src/components/common/BorrowCapacity/BorrowCapacity.tsx index 754887b..e216816 100644 --- a/src/components/common/BorrowCapacity/BorrowCapacity.tsx +++ b/src/components/common/BorrowCapacity/BorrowCapacity.tsx @@ -1,6 +1,5 @@ -import Tippy from '@tippyjs/react' import classNames from 'classnames' -import { AnimatedNumber, DisplayCurrency } from 'components/common' +import { AnimatedNumber, DisplayCurrency, TextTooltip } from 'components/common' import { formatValue } from 'libs/parse' import { useMemo, useState } from 'react' import { useTranslation } from 'react-i18next' @@ -82,73 +81,66 @@ export const BorrowCapacity = ({ /> )} - document.body} - interactive={true} - animation={false} - render={(attrs) => { - return ( -
- {t('redbank.borrowingBarTooltip', { - limit: formatValue( - convertToDisplayCurrency({ - amount: limit.toString(), - denom: baseCurrency.denom, - }), - 2, - 2, - true, - '$', - ), - liquidation: formatValue( - convertToDisplayCurrency({ - amount: max.toString(), - denom: baseCurrency.denom, - }), - 2, - 2, - true, - '$', - ), - })} -
- ) - }} - > -
-
-
-
- -
+ +
+
-
+ className={styles.limitBar} + style={{ + right: `${limitPercentOfMax ? 100 - limitPercentOfMax : 100}%`, + }} + >
+ +
+
+
+
+ {showPercentageText ? ( + + {max !== 0 && ( + + )} + + ) : null}
- {showPercentageText ? ( - - {max !== 0 && ( - - )} - - ) : null}
-
- + } + /> {!hideValues && (
{ const exchangeRatesState = useStore((s) => s.exchangeRatesState) const isNetworkLoaded = useStore((s) => s.isNetworkLoaded) const rpc = useStore((s) => s.chainInfo?.rpc) - const marketAssetLiquidity = useStore((s) => s.marketAssetLiquidity) const marketDeposits = useStore((s) => s.marketDeposits) const marketInfo = useStore((s) => s.marketInfo) const marketIncentiveInfo = useStore((s) => s.marketIncentiveInfo) @@ -131,7 +130,6 @@ export const CommonContainer = ({ children }: CommonContainerProps) => { userBalancesState, exchangeRates, marketInfo, - marketAssetLiquidity, marketIncentiveInfo, userDebts, userDeposits, @@ -157,7 +155,7 @@ export const CommonContainer = ({ children }: CommonContainerProps) => { useMarsOracle() useSpotPrice(MARS_SYMBOL) useSpotPrice(USDC_SYMBOL) - useMarketDeposits() + useDepositAndDebt() useRedBank() return <>{isNetworkLoaded && children} diff --git a/src/components/common/CosmosWalletConnectProvider/CosmosWalletConnectProvider.tsx b/src/components/common/CosmosWalletConnectProvider/CosmosWalletConnectProvider.tsx index e6e3874..515d0b4 100644 --- a/src/components/common/CosmosWalletConnectProvider/CosmosWalletConnectProvider.tsx +++ b/src/components/common/CosmosWalletConnectProvider/CosmosWalletConnectProvider.tsx @@ -1,4 +1,4 @@ -import { ChainInfoID, WalletID, WalletManagerProvider } from '@marsprotocol/wallet-connector' +import { WalletID, WalletManagerProvider } from '@marsprotocol/wallet-connector' import { CircularProgress, SVG } from 'components/common' import { useEffect, useState } from 'react' @@ -8,10 +8,12 @@ type Props = { children?: React.ReactNode } -const defaultChain = ChainInfoID.OsmosisTestnet - export const CosmosWalletConnectProvider = ({ children }: Props) => { - const [chainInfoOverrides, setChainInfoOverrides] = useState<{ rpc: string; rest: string }>() + const [chainInfoOverrides, setChainInfoOverrides] = useState<{ + rpc: string + rest: string + chainID: string + }>() const [enabledWallets, setEnabledWallets] = useState([]) useEffect(() => { @@ -29,6 +31,7 @@ export const CosmosWalletConnectProvider = ({ children }: Props) => { setChainInfoOverrides({ rpc: networkConfig.rpcUrl, rest: networkConfig.restUrl, + chainID: networkConfig.name, }) setEnabledWallets(networkConfig.wallets) } @@ -42,7 +45,7 @@ export const CosmosWalletConnectProvider = ({ children }: Props) => { } - defaultChainId={defaultChain} + defaultChainId={chainInfoOverrides.chainID} enabledWallets={enabledWallets} persistent renderLoader={() => ( diff --git a/src/components/common/DisplayCurrency/DisplayCurrency.tsx b/src/components/common/DisplayCurrency/DisplayCurrency.tsx index aae480b..dcd1490 100644 --- a/src/components/common/DisplayCurrency/DisplayCurrency.tsx +++ b/src/components/common/DisplayCurrency/DisplayCurrency.tsx @@ -17,10 +17,12 @@ export const DisplayCurrency = ({ isApproximation, className, }: Props) => { - const displayCurrency = useStore((s) => s.displayCurrency) + const networkConfig = useStore((s) => s.networkConfig) const convertToDisplayCurrency = useStore((s) => s.convertToDisplayCurrency) - const amount = convertToDisplayCurrency(coin) + const displayCurrency = networkConfig?.displayCurrency + + if (!displayCurrency) return null return (
diff --git a/src/components/common/Header/ConnectedButton.module.scss b/src/components/common/Header/ConnectedButton.module.scss index 37a86aa..aefb8f7 100644 --- a/src/components/common/Header/ConnectedButton.module.scss +++ b/src/components/common/Header/ConnectedButton.module.scss @@ -47,9 +47,9 @@ top: rem-calc(38); @include padding(6, 6, 5.5); @include layoutPopover; - width: rem-calc(420); + width: rem-calc(380); max-width: calc(100vw - 24px); - right: 0; + right: -25%; z-index: 100; } @@ -191,6 +191,8 @@ @media only screen and (min-width: $bpMediumLow) { .details { transform: none; + width: rem-calc(420); + right: 0; } .detailsBalance { diff --git a/src/components/common/Header/ConnectedButton.tsx b/src/components/common/Header/ConnectedButton.tsx index 242f6eb..a99b713 100644 --- a/src/components/common/Header/ConnectedButton.tsx +++ b/src/components/common/Header/ConnectedButton.tsx @@ -46,7 +46,7 @@ export const ConnectedButton = () => { const viewOnFinder = useCallback(() => { const explorerUrl = chainInfo ? chainInfo.explorer : '' - window.open(`${explorerUrl}account/${userWalletAddress}`, '_blank') + window.open(`${explorerUrl}/account/${userWalletAddress}`, '_blank') }, [chainInfo, userWalletAddress]) const onClickAway = useCallback(() => { @@ -103,7 +103,7 @@ export const ConnectedButton = () => { className='s faded' coin={{ amount: baseCurrencyBalance.toString(), - denom: baseCurrency.symbol, + denom: baseCurrency.denom, }} />
diff --git a/src/components/common/Header/Header.tsx b/src/components/common/Header/Header.tsx index 4e12d88..2b0d598 100644 --- a/src/components/common/Header/Header.tsx +++ b/src/components/common/Header/Header.tsx @@ -31,18 +31,19 @@ export const Header = () => { > {t('global.redBank')} - - {t('global.fields')} - + {FIELDS_FEATURE && ( + + {t('global.fields')} + + )} {t('global.council')} diff --git a/src/components/common/Header/IncentivesButton.tsx b/src/components/common/Header/IncentivesButton.tsx index bfc108c..dc55f94 100644 --- a/src/components/common/Header/IncentivesButton.tsx +++ b/src/components/common/Header/IncentivesButton.tsx @@ -156,7 +156,7 @@ export const IncentivesButton = () => {

{t('incentives.successfullyClaimed')}

) : ( diff --git a/src/components/common/Header/Settings.tsx b/src/components/common/Header/Settings.tsx index b2565ac..b280da9 100644 --- a/src/components/common/Header/Settings.tsx +++ b/src/components/common/Header/Settings.tsx @@ -2,6 +2,7 @@ import { useWalletManager, WalletConnectionStatus } from '@marsprotocol/wallet-c import BigNumber from 'bignumber.js' import classNames from 'classnames' import { Button, NumberInput, SVG, Toggle, Tooltip } from 'components/common' +import { FIELDS_FEATURE } from 'constants/appConstants' import React, { useState } from 'react' import { useTranslation } from 'react-i18next' import useStore from 'store' @@ -88,54 +89,57 @@ export const Settings = () => {
- -
-

{t('fields.settings')}

-
-
-
-
- {t('common.slippage')} - + {FIELDS_FEATURE && ( + <> +
+

{t('fields.settings')}

-
- {slippages.map((value) => ( - - ))} - +
+
+
+ {t('common.slippage')} + +
+
+ {slippages.map((value) => ( + + ))} + +
+
-
-
+ + )}
setShowDetails(false)} role='button' /> diff --git a/src/components/common/Layout/Layout.tsx b/src/components/common/Layout/Layout.tsx index 5408bc5..d67f27e 100644 --- a/src/components/common/Layout/Layout.tsx +++ b/src/components/common/Layout/Layout.tsx @@ -15,23 +15,23 @@ type Props = { export const Layout = ({ children }: Props) => { const router = useRouter() + const { status } = useWalletManager() useAnimations() - const userWalletAddress = useStore((s) => s.userWalletAddress) const enableAnimations = useStore((s) => s.enableAnimations) - const backgroundClasses = classNames('background', !userWalletAddress && 'night') - const vaultConfigs = useStore((s) => s.vaultConfigs) - const { status } = useWalletManager() const isConnected = status === WalletConnectionStatus.Connected + const backgroundClasses = classNames('background', !isConnected && 'night') + const vaultConfigs = useStore((s) => s.vaultConfigs) const wasConnectedBefore = - localStorage.getItem(SESSION_WALLET_KEY) !== null && - localStorage.getItem(SESSION_WALLET_KEY) !== '[]' + localStorage.getItem(SESSION_WALLET_KEY) && + localStorage.getItem(SESSION_WALLET_KEY) !== '[]' && + status !== WalletConnectionStatus.Errored useEffect(() => { - if (!userWalletAddress) { + if (!isConnected) { useStore.setState({ availableVaults: vaultConfigs, activeVaults: [] }) } - }, [userWalletAddress, vaultConfigs]) + }, [isConnected, vaultConfigs]) return (
diff --git a/src/components/common/MobileNav/MobileNav.tsx b/src/components/common/MobileNav/MobileNav.tsx index b8a2772..45d8f0e 100644 --- a/src/components/common/MobileNav/MobileNav.tsx +++ b/src/components/common/MobileNav/MobileNav.tsx @@ -1,5 +1,6 @@ import classNames from 'classnames' import { SVG } from 'components/common' +import { FIELDS_FEATURE } from 'constants/appConstants' import Link from 'next/link' import { useRouter } from 'next/router' import { useTranslation } from 'react-i18next' @@ -26,14 +27,16 @@ export const MobileNav = () => { {t('global.council')} - - - {t('global.fields')} - + {FIELDS_FEATURE && ( + + + {t('global.fields')} + + )} ) } diff --git a/src/components/common/TextTooltip/TextTooltip.module.scss b/src/components/common/TextTooltip/TextTooltip.module.scss new file mode 100644 index 0000000..d165d47 --- /dev/null +++ b/src/components/common/TextTooltip/TextTooltip.module.scss @@ -0,0 +1,16 @@ +@import 'src/styles/master'; + +.pointer { + cursor: pointer; +} + +.tooltip { + border-bottom: 1px dashed $alphaWhite40; + transition: border 0.2s; + cursor: pointer; + + &:hover, + &:focus { + border-bottom-color: transparent; + } +} diff --git a/src/components/common/TextTooltip/TextTooltip.tsx b/src/components/common/TextTooltip/TextTooltip.tsx index 517f73f..e2b641e 100644 --- a/src/components/common/TextTooltip/TextTooltip.tsx +++ b/src/components/common/TextTooltip/TextTooltip.tsx @@ -1,23 +1,31 @@ import Tippy from '@tippyjs/react' +import styles from './TextTooltip.module.scss' + interface Props { - text: string - tooltip: string + text: string | React.ReactNode + tooltip: string | React.ReactNode + hideUnderline?: boolean + hideStyling?: boolean } export const TextTooltip = (props: Props) => { return ( document.body} animation={false} + delay={[400, 0]} render={(attrs) => { + if (!props.tooltip) return null return ( -
+
{props.tooltip}
) }} > -
{props.text}
+ + {props.text} + ) } diff --git a/src/components/common/TxModal/Action.tsx b/src/components/common/TxModal/Action.tsx index 1e1dfbd..9a48ed4 100644 --- a/src/components/common/TxModal/Action.tsx +++ b/src/components/common/TxModal/Action.tsx @@ -447,13 +447,13 @@ export const Action = ({ const getTooltip = (): string | undefined => { switch (activeView) { case ViewType.Borrow: - return t('redbank.redbankActionBorrowTooltip') + return t('redbank.tooltips.borrow.action') case ViewType.Deposit: - return t('redbank.redbankActionDepositTooltip') + return t('redbank.tooltips.deposit.action') case ViewType.Withdraw: - return t('redbank.redbankActionWithdrawTooltip') + return t('redbank.tooltips.withdraw.action') case ViewType.Repay: - return t('redbank.redbankActionRepayTooltip') + return t('redbank.tooltips.repay.action') } } diff --git a/src/components/common/TxModal/TxFailedContent.tsx b/src/components/common/TxModal/TxFailedContent.tsx index 1954795..d1c3fc9 100644 --- a/src/components/common/TxModal/TxFailedContent.tsx +++ b/src/components/common/TxModal/TxFailedContent.tsx @@ -24,7 +24,7 @@ export const TxFailedContent = ({ message, hash, handleClose }: Props) => {
{message}
- {hash ? : null} + {hash ? : null}
{t('common.txHash')}
diff --git a/src/components/fields/ActiveVaultsTable/ActiveVaultsTableMobile.tsx b/src/components/fields/ActiveVaultsTable/ActiveVaultsTableMobile.tsx index 3dc6317..fb41fd4 100644 --- a/src/components/fields/ActiveVaultsTable/ActiveVaultsTableMobile.tsx +++ b/src/components/fields/ActiveVaultsTable/ActiveVaultsTableMobile.tsx @@ -1,6 +1,12 @@ -import Tippy from '@tippyjs/react' import BigNumber from 'bignumber.js' -import { AnimatedNumber, Apy, BorrowCapacity, Card, DisplayCurrency } from 'components/common' +import { + AnimatedNumber, + Apy, + BorrowCapacity, + Card, + DisplayCurrency, + TextTooltip, +} from 'components/common' import { VaultLogo, VaultName } from 'components/fields' import { FIELDS_TUTORIAL_KEY } from 'constants/appConstants' import Link from 'next/link' @@ -60,8 +66,18 @@ export const ActiveVaultsTableMobile = () => {
e.preventDefault()}> {t('common.apy')} - + + + } + tooltip={ { leverage={vault.position.currentLeverage} /> } - > - - - - + />
diff --git a/src/components/fields/ActiveVaultsTable/useActiveVaultsColumns.tsx b/src/components/fields/ActiveVaultsTable/useActiveVaultsColumns.tsx index a0bb71a..2537157 100644 --- a/src/components/fields/ActiveVaultsTable/useActiveVaultsColumns.tsx +++ b/src/components/fields/ActiveVaultsTable/useActiveVaultsColumns.tsx @@ -1,5 +1,4 @@ import { ColumnDef, createColumnHelper } from '@tanstack/react-table' -import Tippy from '@tippyjs/react' import BigNumber from 'bignumber.js' import classNames from 'classnames' import { @@ -53,25 +52,14 @@ export const useActiveVaultsColumns = () => { header: t('fields.position'), cell: ({ row }) => { return ( - document.body} - animation={false} - render={(attrs) => { - return ( -
- {t('fields.tooltips.name', { - asset1: row.original.symbols.primary, - asset2: row.original.symbols.secondary, - ...getTimeAndUnit(row.original.lockup), - })} -
- ) - }} - > -
- -
-
+ } + tooltip={t('fields.tooltips.name', { + asset1: row.original.symbols.primary, + asset2: row.original.symbols.secondary, + ...getTimeAndUnit(row.original.lockup), + })} + /> ) }, }), @@ -97,28 +85,23 @@ export const useActiveVaultsColumns = () => { } return ( - document.body} - animation={false} - render={(attrs) => { - return ( -
- -
- -
- ) - }} - > -
+ -
-
+ } + tooltip={ + <> + +
+ + + } + /> ) }, }), @@ -142,25 +125,20 @@ export const useActiveVaultsColumns = () => { ] return ( - document.body} - animation={false} - render={(attrs) => { - return ( -
- -
- -
- ) - }} - > -
+ -
-
+ } + tooltip={ + <> + +
+ + + } + /> ) }, }), @@ -176,33 +154,26 @@ export const useActiveVaultsColumns = () => { if (!borrowAsset) return return ( - document.body} - animation={false} - render={(attrs) => { - return ( -
- -
- ) - }} - > -
+ -
-
+ } + tooltip={ + + } + /> ) }, }), @@ -223,35 +194,30 @@ export const useActiveVaultsColumns = () => { const vaultCap = row.original.vaultCap return ( - document.body} - animation={false} - render={(attrs) => { - return ( -
- -
- ) - }} - > -
- + +

+ {percent}% {t('common.used')} +

+ + } + tooltip={ + -

- {percent}% {t('common.used')} -

-
-
+ } + /> ) }, }), @@ -279,20 +245,20 @@ export const useActiveVaultsColumns = () => { } return ( <> - document.body} - animation={false} - content={ + + +

+ {convertApyToDailyApy(row.original.position.apy.net)}%/{t('common.day')} +

+ + } + tooltip={ } - > - - -

- {convertApyToDailyApy(row.original.position.apy.net)}%/{t('common.day')} -

-
-
+ /> ) case 'unlocking': diff --git a/src/components/fields/AvailableVaultsTable/AvailableVaultsTableMobile.tsx b/src/components/fields/AvailableVaultsTable/AvailableVaultsTableMobile.tsx index 88d3f5d..cd7b95f 100644 --- a/src/components/fields/AvailableVaultsTable/AvailableVaultsTableMobile.tsx +++ b/src/components/fields/AvailableVaultsTable/AvailableVaultsTableMobile.tsx @@ -1,6 +1,5 @@ -import Tippy from '@tippyjs/react' import BigNumber from 'bignumber.js' -import { AnimatedNumber, Apy, Card, DisplayCurrency } from 'components/common' +import { AnimatedNumber, Apy, Card, DisplayCurrency, TextTooltip } from 'components/common' import { VaultLogo, VaultName } from 'components/fields' import { getTimeAndUnit, ltvToLeverage } from 'libs/parse' import Link from 'next/link' @@ -52,20 +51,18 @@ export const AvailableVaultsTableMobile = () => {
e.preventDefault()} className='xl'> {t('common.apy')} - }> - - - - - } + tooltip={} + /> + } + tooltip={ } - > - - - - + />
diff --git a/src/components/fields/AvailableVaultsTable/useAvailableVaultsColumns.tsx b/src/components/fields/AvailableVaultsTable/useAvailableVaultsColumns.tsx index 4253673..8fd9f8e 100644 --- a/src/components/fields/AvailableVaultsTable/useAvailableVaultsColumns.tsx +++ b/src/components/fields/AvailableVaultsTable/useAvailableVaultsColumns.tsx @@ -1,5 +1,4 @@ import { ColumnDef, createColumnHelper } from '@tanstack/react-table' -import Tippy from '@tippyjs/react' import BigNumber from 'bignumber.js' import classNames from 'classnames' import { @@ -46,25 +45,14 @@ export const useAvailableVaultsColumns = () => { header: t('fields.name'), cell: ({ row }) => { return ( - document.body} - animation={false} - render={(attrs) => { - return ( -
- {t('fields.tooltips.name', { - asset1: row.original.symbols.primary, - asset2: row.original.symbols.secondary, - ...getTimeAndUnit(row.original.lockup), - })} -
- ) - }} - > -
- -
-
+ } + tooltip={t('fields.tooltips.name', { + asset1: row.original.symbols.primary, + asset2: row.original.symbols.secondary, + ...getTimeAndUnit(row.original.lockup), + })} + /> ) }, }), @@ -118,21 +106,19 @@ export const useAvailableVaultsColumns = () => { return ( <> - }> - - - - + } + tooltip={} + /> - - } + tooltip={ } - > - - - - + />

{minDailyAPY}-{maxDailyAPY}%/ @@ -159,35 +145,30 @@ export const useAvailableVaultsColumns = () => { const vaultCap = row.original.vaultCap return ( - document.body} - animation={false} - render={(attrs) => { - return ( -

- -
- ) - }} - > -
- + +

+ {percent}% {t('common.used')} +

+ + } + tooltip={ + -

- {percent}% {t('common.used')} -

-
- + } + /> ) }, }), @@ -200,23 +181,15 @@ export const useAvailableVaultsColumns = () => { enableSorting: true, header: t('common.description'), cell: ({ row }) => ( - document.body} - animation={false} - render={(attrs) => { - return ( -
- {t('fields.tooltips.name', { - asset1: row.original.symbols.primary, - asset2: row.original.symbols.secondary, - ...getTimeAndUnit(row.original.lockup), - })} -
- ) - }} - > -

{row.original.description}

-
+ ), }), columnHelper.display({ diff --git a/src/components/fields/Breakdown/BreakdownTable/BreakdownTable.tsx b/src/components/fields/Breakdown/BreakdownTable/BreakdownTable.tsx index ad3001e..9d6cad8 100644 --- a/src/components/fields/Breakdown/BreakdownTable/BreakdownTable.tsx +++ b/src/components/fields/Breakdown/BreakdownTable/BreakdownTable.tsx @@ -1,10 +1,10 @@ -import Tippy from '@tippyjs/react' import classNames from 'classnames' import { AnimatedNumber, Apy, BorrowCapacity, DisplayCurrency, + TextTooltip, TokenBalance, } from 'components/common' import { MARS_DECIMALS, MARS_SYMBOL, VAULT_DEPOSIT_BUFFER } from 'constants/appConstants' @@ -214,11 +214,11 @@ export const BreakdownTable = (props: Props) => {
{t('common.apy')}: - }> - - - - + } + tooltip={} + />
{formatValue(1, 0, 0, false, false, ' OSMO ≈ ')} diff --git a/src/components/redbank/AssetTable/ActionsRow.module.scss b/src/components/redbank/AssetTable/ActionsRow.module.scss index 13019d8..ee56803 100644 --- a/src/components/redbank/AssetTable/ActionsRow.module.scss +++ b/src/components/redbank/AssetTable/ActionsRow.module.scss @@ -12,7 +12,7 @@ .td { .wrapper { - @include padding(6, 0, 0); + @include padding(3, 0, 0); display: flex; flex-wrap: wrap; justify-content: center; diff --git a/src/components/redbank/AssetTable/ActionsRow.tsx b/src/components/redbank/AssetTable/ActionsRow.tsx index e0ec14a..dc25377 100644 --- a/src/components/redbank/AssetTable/ActionsRow.tsx +++ b/src/components/redbank/AssetTable/ActionsRow.tsx @@ -1,10 +1,9 @@ import { Row } from '@tanstack/react-table' -import Tippy from '@tippyjs/react/headless' import classNames from 'classnames/bind' -import { Button, SVG } from 'components/common' +import { Button, SVG, TextTooltip } from 'components/common' import { getSwapUrl } from 'functions' import { balanceSum } from 'libs/assetInfo' -import Link from 'next/link' +import { useRouter } from 'next/router' import { useTranslation } from 'react-i18next' import useStore from 'store' @@ -17,9 +16,11 @@ interface Props { export const ActionsRow = ({ row, type }: Props) => { const { t } = useTranslation() + const router = useRouter() const chainInfo = useStore((s) => s.chainInfo) const redBankAssets = useStore((s) => s.redBankAssets) const hasBalance = Number(row.original.walletBalance ?? 0) > 0 + const hasDeposits = Number(row.original.depositBalance ?? 0) > 0 const hasNeverDeposited = Number(balanceSum(redBankAssets, 'depositBalanceBaseCurrency')) === 0 const appUrl = useStore((s) => s.networkConfig?.appUrl) || '' @@ -32,7 +33,7 @@ export const ActionsRow = ({ row, type }: Props) => { return ( row.toggleExpanded()}> - +
{type === 'deposit' && ( <> @@ -50,41 +51,35 @@ export const ActionsRow = ({ row, type }: Props) => { size='small' text={t('common.buy')} /> - document.body} - interactive={false} - render={(attrs) => { - return hasBalance ? null : ( -
- {t('redbank.toDepositAssetOnChain', { - asset: assetSymbol, - chain: chainInfo?.name, - })} -
- ) - }} - > -
- -
-
- {hasDeposits && ( - + } + disabled={!hasBalance} + prefix={} size='small' - text={t('redbank.withdraw')} + text={t('redbank.deposit')} + onClick={() => router.push(`/redbank/deposit/${assetSymbol}`)} /> - + } + tooltip={ + hasBalance + ? null + : t('redbank.toDepositAssetOnChain', { + asset: assetSymbol, + chain: chainInfo?.name, + }) + } + /> + {hasDeposits && ( +
- + } + size='small' + text={t('common.repay')} + onClick={() => router.push(`/redbank/repay/${assetSymbol}`)} + /> + } + tooltip={ + !hasBalance + ? t('redbank.noFundsForRepay', { + symbol: assetSymbol, + }) + : null + } + /> )} - document.body} - interactive={false} - render={(attrs) => { - return row.original.marketLiquidity === '0' || hasNeverDeposited ? ( -
- {hasNeverDeposited - ? t('redbank.warning.borrow') - : t('redbank.notEnoughMarketLiquidity')} -
- ) : null - }} - > -
- -
-
+ } + disabled={row.original.marketLiquidity === '0' || hasNeverDeposited} + size='small' + text={t('common.borrow')} + onClick={() => router.push(`/redbank/borrow/${assetSymbol}`)} + /> + } + tooltip={ + row.original.marketLiquidity === '0' || hasNeverDeposited + ? hasNeverDeposited + ? t('redbank.warning.borrow') + : t('redbank.notEnoughMarketLiquidity') + : null + } + /> )}
diff --git a/src/components/redbank/AssetTable/AssetRow.module.scss b/src/components/redbank/AssetTable/AssetRow.module.scss index da70b83..3687118 100644 --- a/src/components/redbank/AssetTable/AssetRow.module.scss +++ b/src/components/redbank/AssetTable/AssetRow.module.scss @@ -30,14 +30,6 @@ @include bgTableHover; } } - - > .td { - border-bottom: 1px solid $alphaWhite20; - &:nth-child(1), - &:nth-child(2) { - border-bottom: none; - } - } } .td { diff --git a/src/components/redbank/AssetTable/AssetTable.module.scss b/src/components/redbank/AssetTable/AssetTable.module.scss index f5f0597..26af9f5 100644 --- a/src/components/redbank/AssetTable/AssetTable.module.scss +++ b/src/components/redbank/AssetTable/AssetTable.module.scss @@ -14,6 +14,7 @@ @include padding(4, 0); font-weight: $fontWeightRegular; opacity: 0.6; + white-space: nowrap; &:not(.disabled) { &.canSort { @@ -24,7 +25,11 @@ .wrapper { display: flex; align-items: center; - justify-content: center; + justify-content: flex-end; + + &.left { + justify-content: center; + } svg { display: none; @@ -52,14 +57,13 @@ } .wrapper { - justify-content: flex-end; - svg { display: block; } &.left { flex-direction: row-reverse; + justify-content: flex-end; } } } diff --git a/src/components/redbank/AssetTable/MetricsRow.tsx b/src/components/redbank/AssetTable/MetricsRow.tsx index 461a185..b097dc6 100644 --- a/src/components/redbank/AssetTable/MetricsRow.tsx +++ b/src/components/redbank/AssetTable/MetricsRow.tsx @@ -37,7 +37,7 @@ export const MetricsRow = ({ row, type }: Props) => { return ( row.toggleExpanded()}> - +
{ const { t } = useTranslation() const columnHelper = createColumnHelper() + const enableSorting = !isMobile && !isTablet + const defaultBorrowColumns: ColumnDef[] = useMemo( () => [ columnHelper.accessor('color', { @@ -32,7 +35,10 @@ export const useBorrowColumns = () => { ), }), columnHelper.accessor('name', { - header: t('common.asset'), + enableSorting: enableSorting, + header: () => ( + + ), id: 'name', cell: (info) => ( <> @@ -42,7 +48,13 @@ export const useBorrowColumns = () => { ), }), columnHelper.accessor('borrowBalance', { - header: t('common.borrowed'), + enableSorting: enableSorting, + header: () => ( + + ), cell: (info) => ( { ), }), columnHelper.accessor('borrowRate', { - header: t('common.rate'), + enableSorting: enableSorting, + + header: () => ( + + ), cell: (info) => { return ( { }, }), columnHelper.accessor('marketLiquidity', { - header: t('common.marketLiquidityShort'), + enableSorting: enableSorting, + header: () => ( + + ), cell: (info) => ( { const { t } = useTranslation() const columnHelper = createColumnHelper() + const enableSorting = !isMobile && !isTablet + const defaultDepositColumns: ColumnDef[] = useMemo(() => { return [ columnHelper.accessor('color', { @@ -37,7 +39,10 @@ export const useDepositColumns = () => { ), }), columnHelper.accessor('name', { - header: t('common.asset'), + enableSorting: enableSorting, + header: () => ( + + ), id: 'name', cell: (info) => ( <> @@ -47,7 +52,13 @@ export const useDepositColumns = () => { ), }), columnHelper.accessor('depositBalance', { - header: t('common.deposited'), + enableSorting: enableSorting, + header: () => ( + + ), cell: (info) => { return ( { }, }), columnHelper.accessor('apy', { - header: t('common.apy'), + enableSorting: enableSorting, + header: () => ( + + ), cell: (info) => ( - }> -
+ { rounded={false} className='m' /> -
-
+ } + tooltip={} + /> ), }), columnHelper.accessor('depositCap', { - enableSorting: true, - header: t('redbank.depositCap'), + enableSorting: enableSorting, + header: () => ( + + ), cell: ({ row }) => { const depositLiquidity = Number(row.original.depositLiquidity) const percent = convertPercentage((depositLiquidity / row.original.depositCap) * 100) diff --git a/src/components/redbank/RedbankNotConnected/RedbankNotConnected.module.scss b/src/components/redbank/RedbankNotConnected/RedbankNotConnected.module.scss index 44fa1c4..9f7bb19 100644 --- a/src/components/redbank/RedbankNotConnected/RedbankNotConnected.module.scss +++ b/src/components/redbank/RedbankNotConnected/RedbankNotConnected.module.scss @@ -84,6 +84,9 @@ td { display: table-cell; } + td { + pointer-events: none; + } } } } diff --git a/src/components/redbank/RedbankNotConnected/RedbankNotConnected.tsx b/src/components/redbank/RedbankNotConnected/RedbankNotConnected.tsx index c264ffc..1d90f9e 100644 --- a/src/components/redbank/RedbankNotConnected/RedbankNotConnected.tsx +++ b/src/components/redbank/RedbankNotConnected/RedbankNotConnected.tsx @@ -1,7 +1,5 @@ -import { Coin } from '@cosmjs/stargate' import { Card, ConnectButton, SVG, Title } from 'components/common' import { AssetTable, useBorrowColumns, useDepositColumns } from 'components/redbank' -import { findByDenom } from 'functions' import { useEffect, useState } from 'react' import { Trans, useTranslation } from 'react-i18next' import useStore from 'store' @@ -21,10 +19,7 @@ export const RedbankNotConnected = () => { // STORE STATE // ------------------ const whitelistedAssets = useStore((s) => s.whitelistedAssets) - const marketAssetLiquidity = useStore((s) => s.marketAssetLiquidity) - const marketInfo = useStore((s) => s.marketInfo) const convertToBaseCurrency = useStore((s) => s.convertToBaseCurrency) - // ------------------ // LOCAL STATE // ------------------ @@ -34,29 +29,24 @@ export const RedbankNotConnected = () => { const dummyData: RedBankAsset[] = [] if (!whitelistedAssets?.length) return whitelistedAssets.forEach((asset) => { - const reserveInfo = findByDenom(marketInfo, asset.denom) - const depositApy = reserveInfo?.liquidity_rate || 0 - const borrowApy = reserveInfo?.borrow_rate || 0 - const liquidity = findByDenom(marketAssetLiquidity, asset.denom) as Coin - dummyData.push({ ...asset, - apy: depositApy * 100, - borrowRate: borrowApy * 100, - marketLiquidity: liquidity?.amount.toString() || '0', + apy: 0, + borrowRate: 0, + marketLiquidity: '0', walletBalance: '0', borrowBalance: '0', depositBalance: '0', isCollateral: true, borrowBalanceBaseCurrency: 0, depositBalanceBaseCurrency: 0, - depositCap: 100000000, - depositLiquidity: 1000000, + depositCap: 0, + depositLiquidity: 0, }) }) setDummyData(dummyData) - }, [marketAssetLiquidity, marketInfo, convertToBaseCurrency, whitelistedAssets]) + }, [convertToBaseCurrency, whitelistedAssets]) return (
@@ -86,14 +76,14 @@ export const RedbankNotConnected = () => {
diff --git a/src/configs/osmo-test-4.ts b/src/configs/osmo-test-4.ts index 861bcfa..6b9b727 100644 --- a/src/configs/osmo-test-4.ts +++ b/src/configs/osmo-test-4.ts @@ -63,9 +63,9 @@ const OTHER_ASSETS: { [denom: string]: OtherAsset } = { export const NETWORK_CONFIG: NetworkConfig = { name: ChainInfoID.OsmosisTestnet, - hiveUrl: 'https://osmosis-delphi-testnet-1.simply-vc.com.mt/XF32UOOU55CX/osmosis-hive/graphql/', - rpcUrl: 'https://osmosis-delphi-testnet-1.simply-vc.com.mt/XF32UOOU55CX/osmosis-rpc/', - restUrl: 'https://osmosis-delphi-testnet-1.simply-vc.com.mt/XF32UOOU55CX/osmosis-lcd/', + hiveUrl: 'https://testnet-osmosis-node.marsprotocol.io/XF32UOOU55CX/osmosis-hive-front/graphql', + rpcUrl: 'https://rpc-test.osmosis.zone/', + restUrl: 'https://lcd-test.osmosis.zone/', apolloAprUrl: 'https://stats.apollo.farm/api/apr/v1/all', contracts: { addressProvider: 'osmo17dyy6hyzzy6u5khy5lau7afa2y9kwknu0aprwqn8twndw2qhv8ls6msnjr', @@ -84,6 +84,12 @@ export const NETWORK_CONFIG: NetworkConfig = { whitelist: [ASSETS.osmo, ASSETS.atom, ASSETS.juno], other: [OTHER_ASSETS.mars, OTHER_ASSETS.axlusdc], }, + displayCurrency: { + denom: 'ibc/88D70440A05BFB25C7FF0BA62DA357EAA993CB1B036077CF1DAAEFB28721D935', + prefix: '$', + suffix: '', + decimals: 2, + }, appUrl: 'https://testnet.osmosis.zone', councilUrl: 'https://testnet.keplr.app/chains/mars-hub-testnet', wallets: [WalletID.Keplr, WalletID.Leap, WalletID.Cosmostation], diff --git a/src/configs/osmosis-1.ts b/src/configs/osmosis-1.ts index a2679dc..e340c3d 100644 --- a/src/configs/osmosis-1.ts +++ b/src/configs/osmosis-1.ts @@ -25,13 +25,14 @@ export const ASSETS: { [denom: string]: Asset } = { hasOraclePrice: true, }, axlusdc: { - symbol: 'JUNO', - name: 'Juno', - denom: 'ibc/46B44899322F3CD854D2D46DEEF881958467CDD4B3B10086DA49296BBED94BED', - color: colors.juno, + symbol: 'axlUSDC', + name: 'Axelar USDC', + denom: 'ibc/D189335C6E4A68B513C10AB227BF1C1D38C746766278BA3EEB4FB14124F1D858', + color: colors.axlUSDC, logo: axlusdc, decimals: 6, hasOraclePrice: true, + poolId: 678, }, } @@ -39,27 +40,27 @@ const OTHER_ASSETS: { [denom: string]: OtherAsset } = { mars: { symbol: 'MARS', name: 'Mars', - denom: 'ibc/ACA4C8A815A053CC027DB90D15915ADA31939FA331CE745862CDD00A2904FA17', + denom: 'ibc/573FCD90FACEE750F55A8864EF7D38265F07E5A9273FA0E8DAFD39951332B580', color: colors.mars, logo: mars, decimals: 6, hasOraclePrice: true, - poolId: 768, + poolId: 907, }, } export const NETWORK_CONFIG: NetworkConfig = { - name: ChainInfoID.OsmosisTestnet, - hiveUrl: 'https://osmosis-delphi-testnet-1.simply-vc.com.mt/XF32UOOU55CX/osmosis-hive/graphql/', - rpcUrl: 'https://osmosis-delphi-testnet-1.simply-vc.com.mt/XF32UOOU55CX/osmosis-rpc/', - restUrl: 'https://osmosis-delphi-testnet-1.simply-vc.com.mt/XF32UOOU55CX/osmosis-lcd/', + name: ChainInfoID.Osmosis1, + hiveUrl: 'https://osmosis-node.marsprotocol.io/GGSFGSFGFG34/osmosis-hive-front/graphql', + rpcUrl: 'https://rpc-osmosis.blockapsis.com/', + restUrl: 'https://lcd-osmosis.blockapsis.com/', apolloAprUrl: 'https://stats.apollo.farm/api/apr/v1/all', contracts: { - addressProvider: 'osmo17dyy6hyzzy6u5khy5lau7afa2y9kwknu0aprwqn8twndw2qhv8ls6msnjr', - redBank: 'osmo1t0dl6r27phqetfu0geaxrng0u9zn8qgrdwztapt5xr32adtwptaq6vwg36', - incentives: 'osmo1zxs8fry3m8j94pqg7h4muunyx86en27cl0xgk76fc839xg2qnn6qtpjs48', - oracle: 'osmo1dqz2u3c8rs5e7w5fnchsr2mpzzsxew69wtdy0aq4jsd76w7upmsstqe0s8', - rewardsCollector: 'osmo14kzsqw5tatdvwlkj383lgkh6gcdetwn7kfqm7488uargyy2lpucqsyv53j', + addressProvider: 'osmo1g677w7mfvn78eeudzwylxzlyz69fsgumqrscj6tekhdvs8fye3asufmvxr', + redBank: 'osmo1c3ljch9dfw5kf52nfwpxd2zmj2ese7agnx0p9tenkrryasrle5sqf3ftpg', + incentives: 'osmo1nkahswfr8shg8rlxqwup0vgahp0dk4x8w6tkv3rra8rratnut36sk22vrm', + oracle: 'osmo1mhznfr60vjdp2gejhyv2gax9nvyyzhd3z0qcwseyetkfustjauzqycsy2g', + rewardsCollector: 'osmo1urvqe5mw00ws25yqdd4c4hlh8kdyf567mpcml7cdve9w08z0ydcqvsrgdy', treasury: 'osmo1qv74pu0gjc9vuvkhayuj5j3q8fzmf4pnl643djqpv7enxr925g5q0wf7p3', safetyFund: 'osmo1j2mnzs7eqld4umtwky4hyf6f7kqcsg7ragh2l76ev7ucxcjvdjrs3tdezf', protocolRewardsCollector: 'osmo1xl7jguvkg807ya00s0l722nwcappfzyzrac3ug5tnjassnrmnfrs47wguz', @@ -71,54 +72,21 @@ export const NETWORK_CONFIG: NetworkConfig = { whitelist: [ASSETS.osmo, ASSETS.atom, ASSETS.axlusdc], other: [OTHER_ASSETS.mars], }, - appUrl: 'https://testnet.osmosis.zone', + displayCurrency: { + denom: 'ibc/D189335C6E4A68B513C10AB227BF1C1D38C746766278BA3EEB4FB14124F1D858', + prefix: '$', + suffix: '', + decimals: 2, + }, + appUrl: 'https://app.osmosis.zone', councilUrl: 'https://council.marsprotocol.io', - wallets: [WalletID.Keplr, WalletID.Leap, WalletID.Cosmostation, WalletID.Falcon], + wallets: [ + WalletID.Keplr, + WalletID.Leap, + WalletID.Cosmostation, + WalletID.Falcon, + WalletID.KeplrMobile, + ], } -export const VAULT_CONFIGS: Vault[] = [ - { - address: '', - name: 'OSMO-ATOM LP (14 day)', - denoms: { - primary: 'uosmo', - secondary: 'ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2', - lpToken: 'gamm/pool/1', - }, - symbols: { - primary: 'OSMO', - secondary: 'ATOM', - }, - color: '#DD5B65', - lockup: 86400 * 14, - provider: 'Apollo vault', - description: 'Up to 2× Leveraged Yield Farming with auto compounding of the LP tokens.', - ltv: { - max: 0.625, - contract: 0.63, - liq: 0.65, - }, - }, - { - address: '', - name: 'OSMO-axlUSDC LP (14 day)', - denoms: { - primary: 'uosmo', - secondary: 'ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2', - lpToken: 'gamm/pool/1', - }, - symbols: { - primary: 'OSMO', - secondary: 'ATOM', - }, - color: '#DD5B65', - lockup: 86400 * 14, - provider: 'Apollo vault', - description: 'Up to 2× Leveraged Yield Farming with auto compounding of the LP tokens.', - ltv: { - max: 0.666, - contract: 0.67, - liq: 0.69, - }, - }, -] +export const VAULT_CONFIGS: Vault[] = [] diff --git a/src/constants/appConstants.ts b/src/constants/appConstants.ts index fd229ee..1470996 100644 --- a/src/constants/appConstants.ts +++ b/src/constants/appConstants.ts @@ -18,7 +18,7 @@ export const GAS_ADJUSTMENT = 1.3 export const GAS_PRICE = '0.025uosmo' /* feature flags */ -export const FIELDS_FEATURE = true +export const FIELDS_FEATURE = false export const PROPOSAL_ACTION_BUTTONS_FEATURE = false /* fields query keys */ diff --git a/src/functions/getSwapUrl.ts b/src/functions/getSwapUrl.ts index 3df7c20..33e36fd 100644 --- a/src/functions/getSwapUrl.ts +++ b/src/functions/getSwapUrl.ts @@ -7,9 +7,11 @@ type Options = { export const getSwapUrl = (options: Options) => { const { from, to, baseUrl } = options let fromName = from + let toName = to if (!fromName) fromName = 'ATOM' if (fromName === to) fromName = 'OSMO' + if (to === 'axlUSDC') toName = 'USDC' - return `${baseUrl}?from=${fromName}&to=${to}` + return `${baseUrl}?from=${fromName}&to=${toName}` } diff --git a/src/functions/queries/getBankQuery.ts b/src/functions/queries/getBankQuery.ts deleted file mode 100644 index 9d5bfa0..0000000 --- a/src/functions/queries/getBankQuery.ts +++ /dev/null @@ -1,10 +0,0 @@ -export const getBankQuery = (address: string) => { - return ` - balance: bank { - balance(address: "${address}") { - amount - denom - } - } - ` -} diff --git a/src/functions/queries/getMarketDepositsQuery.ts b/src/functions/queries/getDepositDebtQuery.ts similarity index 51% rename from src/functions/queries/getMarketDepositsQuery.ts rename to src/functions/queries/getDepositDebtQuery.ts index d9adc9e..3fdaf79 100644 --- a/src/functions/queries/getMarketDepositsQuery.ts +++ b/src/functions/queries/getDepositDebtQuery.ts @@ -1,6 +1,6 @@ import { getContractQuery } from './getContractQuery' -export const getMarketDepositsQuery = ( +export const getDepositDebtQuery = ( redBankAddress: string, whitelistedAssets: Asset[], marketInfo: Market[], @@ -15,24 +15,42 @@ export const getMarketDepositsQuery = ( const totalCollateralScaled = marketInfo.find((market) => market.denom === asset.denom)?.collateral_total_scaled || '0' - const marketKey = `${symbol}Deposits` + const depositMarketKey = `${symbol}Deposits` query = query + getContractQuery( - marketKey, + depositMarketKey, redBankAddress || '', ` { - underlying_liquidity_amount: { + underlying_liquidity_amount: { + denom: "${denom}" + amount_scaled: "${totalCollateralScaled}" + } + }`, + ) + + const totalDebtScaled = + marketInfo.find((market) => market.denom === asset.denom)?.debt_total_scaled || '0' + const debtMarketKey = `${symbol}Debt` + query = + query + + getContractQuery( + debtMarketKey, + redBankAddress || '', + ` + { + underlying_debt_amount: { denom: "${denom}" - amount_scaled: "${totalCollateralScaled}" + amount_scaled: "${totalDebtScaled}" } }`, ) + return query }) - return `query MarketDepositsQuery { + return `query DepositDebtQuery { mdwasmkey: wasm { ${wasmQueries} } diff --git a/src/functions/queries/getRedbankQuery.ts b/src/functions/queries/getRedbankQuery.ts index 4039b34..fce174f 100644 --- a/src/functions/queries/getRedbankQuery.ts +++ b/src/functions/queries/getRedbankQuery.ts @@ -1,6 +1,5 @@ import { getBalanceQuery, - getBankQuery, getContractQuery, getIncentiveQuery, getMarketQuery, @@ -46,7 +45,6 @@ export const getRedbankQuery = ( }) return `query RedbankQuery { - ${getBankQuery(redBankContractAddress)} ${REDBANK_WASM_KEY}: wasm { ${wasmQueries} ${ diff --git a/src/functions/queries/index.ts b/src/functions/queries/index.ts index dd864a4..bd6b37d 100644 --- a/src/functions/queries/index.ts +++ b/src/functions/queries/index.ts @@ -1,14 +1,13 @@ // @index(['./*.ts'], f => `export { ${f.name} } from '${f.path}'`) export { getBalanceQuery } from './getBalanceQuery' -export { getBankQuery } from './getBankQuery' export { getConfigQuery } from './getConfigQuery' export { getContractQuery } from './getContractQuery' export { getDebtQuery } from './getDebtQuery' +export { getDepositDebtQuery } from './getDepositDebtQuery' export { getDepositsQuery } from './getDepositsQuery' export { getGlobalStateQuery } from './getGlobalStateQuery' export { getIncentiveQuery } from './getIncentiveQuery' export { getInfoQuery } from './getInfoQuery' -export { getMarketDepositsQuery } from './getMarketDepositsQuery' export { getMarketQuery } from './getMarketQuery' export { getRedbankQuery } from './getRedbankQuery' export { getSnapshotQuery } from './getSnapshotQuery' diff --git a/src/hooks/queries/index.ts b/src/hooks/queries/index.ts index 96fb1cf..048252a 100644 --- a/src/hooks/queries/index.ts +++ b/src/hooks/queries/index.ts @@ -1,6 +1,7 @@ // @index(['./*.tsx'], f => `export { ${f.name} } from '${f.path}'`) export { useBlockHeight } from './useBlockHeight' export { useClosePosition } from './useClosePosition' +export { useDepositAndDebt } from './useDepositAndDebt' export { useEditPosition } from './useEditPosition' export { useEstimateFarmFee } from './useEstimateFarmFee' export { useEstimateFee } from './useEstimateFee' diff --git a/src/hooks/queries/useDepositAndDebt.tsx b/src/hooks/queries/useDepositAndDebt.tsx new file mode 100644 index 0000000..7392b48 --- /dev/null +++ b/src/hooks/queries/useDepositAndDebt.tsx @@ -0,0 +1,53 @@ +import { useQuery } from '@tanstack/react-query' +import { getDepositDebtQuery } from 'functions/queries' +import { gql, request } from 'graphql-request' +import { useEffect } from 'react' +import useStore from 'store' +import { QUERY_KEYS } from 'types/enums/queryKeys' + +export interface DepositAndDebtData { + mdwasmkey: { + OSMODeposits: string + OSMODebt: string + ATOMDeposits: string + ATOMDebt: string + JUNODeposits: string + JUNODebt: string + axlUSDCDeposits: string + axlUSDCDebt: string + } +} + +export const useDepositAndDebt = () => { + const hiveUrl = useStore((s) => s.networkConfig?.hiveUrl) + const whitelistedAssets = useStore((s) => s.whitelistedAssets) + const redBankAddress = useStore((s) => s.networkConfig?.contracts.redBank) || '' + const marketInfo = useStore((s) => s.marketInfo) + const processDepositAndDebtQuery = useStore((s) => s.processDepositAndDebtQuery) + + const { refetch } = useQuery( + [QUERY_KEYS.MARKET_DEPOSITS], + async () => { + return await request( + hiveUrl!, + gql` + ${getDepositDebtQuery(redBankAddress, whitelistedAssets, marketInfo)} + `, + ) + }, + { + enabled: !!hiveUrl && !!whitelistedAssets.length && !!redBankAddress && !!marketInfo.length, + refetchInterval: 120000, + onSuccess: processDepositAndDebtQuery, + }, + ) + + // ! Workaround: + // Invalidating this query in RB action somehow resolves to Zustand with outdated marketInfo data + // It does not retrigger, and therefore a useEffect is placed here to manually rerun when the + // marketInfo actually updates. + useEffect(() => { + if (!marketInfo.length) return + refetch() + }, [marketInfo, refetch]) +} diff --git a/src/hooks/queries/useMarketDeposits.tsx b/src/hooks/queries/useMarketDeposits.tsx index 4572368..4c80cc8 100644 --- a/src/hooks/queries/useMarketDeposits.tsx +++ b/src/hooks/queries/useMarketDeposits.tsx @@ -10,6 +10,7 @@ export interface MarketDepositsData { OSMODeposits: string ATOMDeposits: string JUNODeposits: string + axlUSDCDeposits: string } } diff --git a/src/hooks/queries/useSpotPrice.tsx b/src/hooks/queries/useSpotPrice.tsx index 68569d9..9eeb885 100644 --- a/src/hooks/queries/useSpotPrice.tsx +++ b/src/hooks/queries/useSpotPrice.tsx @@ -8,12 +8,14 @@ import { QUERY_KEYS } from 'types/enums/queryKeys' const poolsEndpoint = 'osmosis/gamm/v1beta1/pools/' export const useSpotPrice = (symbol: string) => { - const displayCurrency = useStore((s) => s.displayCurrency) + const networkConfig = useStore((s) => s.networkConfig) const lcd = useStore((s) => s.chainInfo?.rest) const exchangeRates = useStore((s) => s.exchangeRates) const asset = useAsset({ symbol }) + const displayCurrency = networkConfig?.displayCurrency + useQuery( [QUERY_KEYS.MARS_PRICE, asset?.poolId], async () => { @@ -27,7 +29,7 @@ export const useSpotPrice = (symbol: string) => { staleTime: 30000, refetchInterval: 30000, onSuccess: (data) => { - if (!asset) return + if (!asset || !displayCurrency) return const poolDataAssets = data.pool.pool_assets const assetFirst = poolDataAssets[0].token.denom === asset.denom const targetAsset = poolDataAssets[assetFirst ? 0 : 1] diff --git a/src/hooks/queries/useUserIcns.tsx b/src/hooks/queries/useUserIcns.tsx index 7d98c77..9351a93 100644 --- a/src/hooks/queries/useUserIcns.tsx +++ b/src/hooks/queries/useUserIcns.tsx @@ -1,4 +1,5 @@ import { useQuery } from '@tanstack/react-query' +import { NETWORK_CONFIG } from 'configs/osmosis-1' import { gql, request } from 'graphql-request' import { useMemo } from 'react' import useStore from 'store' @@ -15,7 +16,7 @@ export interface UserIcnsData { export const useUserIcns = () => { /* only possible to query on mainnet */ - const hiveUrl = 'https://osmosis-mars-frontend.simply-vc.com.mt/GGSFGSFGFG34/osmosis-hive/graphql' + const hiveUrl = NETWORK_CONFIG.hiveUrl const resolverContract = 'osmo1xk0s8xgktn9x5vwcgtjdxqzadg88fgn33p8u9cnpdxwemvxscvast52cdd' const userWalletAddress = useStore((s) => s.userWalletAddress) diff --git a/src/pages/_error.js b/src/pages/_error.js deleted file mode 100644 index 1125a77..0000000 --- a/src/pages/_error.js +++ /dev/null @@ -1,62 +0,0 @@ -import * as Sentry from '@sentry/nextjs' -import NextErrorComponent from 'next/error' - -const CustomErrorComponent = ({ statusCode, hasGetInitialPropsRun, err }) => { - if (!hasGetInitialPropsRun && err) { - // getInitialProps is not called in case of - // https://github.com/vercel/next.js/issues/8592. As a workaround, we pass - // err via _app.js so it can be captured - Sentry.captureException(err) - // Flushing is not required in this case as it only happens on the client - } - - return -} - -CustomErrorComponent.getInitialProps = async (context) => { - const errorInitialProps = await NextErrorComponent.getInitialProps(context) - - const { res, err, asPath } = context - - // Workaround for https://github.com/vercel/next.js/issues/8592, mark when - // getInitialProps has run - errorInitialProps.hasGetInitialPropsRun = true - - // Returning early because we don't want to log 404 errors to Sentry. - if (res?.statusCode === 404) { - return errorInitialProps - } - - // Running on the server, the response object (`res`) is available. - // - // Next.js will pass an err on the server if a page's data fetching methods - // threw or returned a Promise that rejected - // - // Running on the client (browser), Next.js will provide an err if: - // - // - a page's `getInitialProps` threw or returned a Promise that rejected - // - an exception was thrown somewhere in the React lifecycle (render, - // componentDidMount, etc) that was caught by Next.js's React Error - // Boundary. Read more about what types of exceptions are caught by Error - // Boundaries: https://reactjs.org/docs/error-boundaries.html - - if (err) { - Sentry.captureException(err) - - // Flushing before returning is necessary if deploying to Vercel, see - // https://vercel.com/docs/platform/limits#streaming-responses - await Sentry.flush(2000) - - return errorInitialProps - } - - // If this point is reached, getInitialProps was called without any - // information about what the error might be. This is unexpected and may - // indicate a bug introduced in Next.js, so record it in Sentry - Sentry.captureException(new Error(`_error.js getInitialProps missing data at path: ${asPath}`)) - await Sentry.flush(2000) - - return errorInitialProps -} - -export default CustomErrorComponent diff --git a/src/pages/redbank/index.tsx b/src/pages/redbank/index.tsx index 64a13c3..f303425 100644 --- a/src/pages/redbank/index.tsx +++ b/src/pages/redbank/index.tsx @@ -75,7 +75,7 @@ const RedBank = () => { } > @@ -85,7 +85,7 @@ const RedBank = () => { } > @@ -107,7 +107,7 @@ const RedBank = () => { />
- +
diff --git a/src/reportWebVitals.ts b/src/reportWebVitals.ts deleted file mode 100644 index 57a24a2..0000000 --- a/src/reportWebVitals.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { ReportHandler } from 'web-vitals' - -const reportWebVitals = (onPerfEntry?: ReportHandler) => { - if (onPerfEntry && onPerfEntry instanceof Function) { - import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { - getCLS(onPerfEntry) - getFID(onPerfEntry) - getFCP(onPerfEntry) - getLCP(onPerfEntry) - getTTFB(onPerfEntry) - }) - } -} - -export default reportWebVitals diff --git a/src/store/index.ts b/src/store/index.ts index 93d9c2c..0936472 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -1,4 +1,4 @@ -import create, { StoreApi, UseBoundStore } from 'zustand' +import { create, StoreApi, UseBoundStore } from 'zustand' import { devtools } from 'zustand/middleware' import { Store } from './interfaces/store.interface' diff --git a/src/store/interfaces/common.interface.ts b/src/store/interfaces/common.interface.ts index c246b34..86eeb1a 100644 --- a/src/store/interfaces/common.interface.ts +++ b/src/store/interfaces/common.interface.ts @@ -6,7 +6,7 @@ import { WalletClient, } from '@marsprotocol/wallet-connector' import { BlockHeightData } from 'hooks/queries/useBlockHeight' -import { MarketDepositsData } from 'hooks/queries/useMarketDeposits' +import { DepositAndDebtData } from 'hooks/queries/useDepositAndDebt' import { SafetyFundBalanceData } from 'hooks/queries/useSafetyFundBalance' import { UserBalanceData } from 'hooks/queries/useUserBalance' import { UserIcnsData } from 'hooks/queries/useUserIcns' @@ -29,12 +29,7 @@ export interface CommonSlice { chainInfo?: SimplifiedChainInfo client?: WalletClient currentNetwork: Network - displayCurrency: { - denom: string - prefix: string - suffix: string - decimals: number - } + marketDebts: Coin[] enableAnimations?: boolean errors: { network: boolean @@ -98,7 +93,7 @@ export interface CommonSlice { previousUserBalanceQueryData?: UserBalanceData previousUserIcnsQueryData?: UserIcnsData previousUserUnclaimedBalanceQueryData?: number - processMarketDepositsQuery: (data: MarketDepositsData) => void + processDepositAndDebtQuery: (data: DepositAndDebtData) => void processUserBalanceQuery: (data: UserBalanceData) => void processBlockHeightQuery: (data: BlockHeightData) => void processSafetyFundQuery: (data: SafetyFundBalanceData) => void diff --git a/src/store/slices/common.ts b/src/store/slices/common.ts index bf77e44..d70f4e7 100644 --- a/src/store/slices/common.ts +++ b/src/store/slices/common.ts @@ -8,7 +8,7 @@ import { } from '@marsprotocol/wallet-connector' import BigNumber from 'bignumber.js' import { BlockHeightData } from 'hooks/queries/useBlockHeight' -import { MarketDepositsData } from 'hooks/queries/useMarketDeposits' +import { DepositAndDebtData } from 'hooks/queries/useDepositAndDebt' import { SafetyFundBalanceData } from 'hooks/queries/useSafetyFundBalance' import { UserBalanceData } from 'hooks/queries/useUserBalance' import isEqual from 'lodash.isequal' @@ -30,13 +30,6 @@ const commonSlice = ( symbol: 'OSMO', decimals: 6, }, - displayCurrency: { - // The denom of DAI, not USDC - denom: 'ibc/88D70440A05BFB25C7FF0BA62DA357EAA993CB1B036077CF1DAAEFB28721D935', - prefix: '$', - suffix: '', - decimals: 2, - }, currentNetwork: Network.TESTNET, errors: { network: false, @@ -46,6 +39,7 @@ const commonSlice = ( isNetworkLoaded: false, latestBlockHeight: 0, marketDeposits: [], + marketDebts: [], otherAssets: [], queryErrors: [], slippage: 0.02, @@ -196,16 +190,21 @@ const commonSlice = ( if (blockFetched !== -1) set({ latestBlockHeight: blockFetched }) set({ previousBlockHeightQueryData: data }) }, - processMarketDepositsQuery: (data: MarketDepositsData) => { + processDepositAndDebtQuery: (data: DepositAndDebtData) => { const whitelistedAssets = get().whitelistedAssets if (!whitelistedAssets.length) return - const coins: Coin[] = whitelistedAssets.map((asset) => ({ + const depositCoins: Coin[] = whitelistedAssets.map((asset) => ({ amount: data.mdwasmkey[`${asset.symbol}Deposits`], denom: asset.denom, })) - set({ marketDeposits: coins }) + const debtCoins: Coin[] = whitelistedAssets.map((asset) => ({ + amount: data.mdwasmkey[`${asset.symbol}Debt`], + denom: asset.denom, + })) + + set({ marketDeposits: depositCoins, marketDebts: debtCoins }) }, processSafetyFundQuery: (data: SafetyFundBalanceData) => { if (isEqual(data, get().previousSafetyFundBalanceQueryData)) return diff --git a/src/store/slices/oracles.ts b/src/store/slices/oracles.ts index 8e56657..0cd70ff 100644 --- a/src/store/slices/oracles.ts +++ b/src/store/slices/oracles.ts @@ -2,6 +2,7 @@ import { Coin } from '@cosmjs/stargate' import BigNumber from 'bignumber.js' import { updateExchangeRate } from 'functions/updateExchangeRate' import { MarsOracleData } from 'hooks/queries/useMarsOracle' +import { findAssetByDenom, lookup } from 'libs/parse' import isEqual from 'lodash.isequal' import { OraclesSlice } from 'store/interfaces/oracles.interface' import { Store } from 'store/interfaces/store.interface' @@ -22,15 +23,18 @@ const oraclesSlice = (set: NamedSet, get: GetState): OraclesSlice const exchangeRates = get().exchangeRates const otherAssets = get().otherAssets const baseCurrency = get().baseCurrency - const displayCurrency = get().displayCurrency + const networkConfig = get().networkConfig + const displayCurrency = networkConfig?.displayCurrency const assets = [...whitelistedAssets, ...otherAssets] - if (!coin || !exchangeRates || !assets.length) { + if (!coin || !exchangeRates || !assets.length || !displayCurrency) { return 0 } - if (coin.denom === displayCurrency.denom) { - return Number(coin.amount) + if (coin.denom.toLowerCase() === displayCurrency.denom.toLowerCase()) { + const displayAsset = findAssetByDenom(displayCurrency.denom, assets) + if (!displayAsset) return 0 + return lookup(Number(coin.amount), displayAsset.symbol, displayAsset.decimals) } const assetToBaseRatio = Number( diff --git a/src/store/slices/redBank.ts b/src/store/slices/redBank.ts index 6859eb1..39d975f 100644 --- a/src/store/slices/redBank.ts +++ b/src/store/slices/redBank.ts @@ -75,6 +75,7 @@ const redBankSlice = (set: NamedSet, get: GetState): RedBankSlice ) return const redBankAssets: RedBankAsset[] = [] + const marketAssetLiquidity: Coin[] = [] const whitelistedAssets = get().whitelistedAssets if (!whitelistedAssets?.length) return @@ -84,7 +85,6 @@ const redBankSlice = (set: NamedSet, get: GetState): RedBankSlice const convertToBaseCurrency = get().convertToBaseCurrency const reserveInfo = findByDenom(get().marketInfo, asset.denom) const depositApy = reserveInfo?.liquidity_rate || 0 - const liquidity = findByDenom(get().marketAssetLiquidity, asset.denom) as Coin const incentiveInfo = get().calculateIncentiveAssetInfo( findByDenom(get().marketIncentiveInfo, asset.denom), { denom: asset.denom, amount: get().computeMarketLiquidity(asset.denom).toString() }, @@ -96,6 +96,11 @@ const redBankSlice = (set: NamedSet, get: GetState): RedBankSlice const depositCap = Number(marketInfo?.deposit_cap) || 0 const depositLiquidity = Number(get().marketDeposits.find((coin) => coin.denom === asset.denom)?.amount) || 0 + const debtLiquidity = + Number(get().marketDebts.find((coin) => coin.denom === asset.denom)?.amount) || 0 + + const marketLiquidity = (depositLiquidity - debtLiquidity).toString() + marketAssetLiquidity.push({ denom: asset.denom, amount: marketLiquidity }) const redBankAsset: RedBankAsset = { ...asset, walletBalance: assetWallet?.amount.toString(), @@ -112,7 +117,7 @@ const redBankSlice = (set: NamedSet, get: GetState): RedBankSlice borrowRate: borrowApy * 100 >= 0.01 ? borrowApy * 100 : 0.0, apy: depositApy * 100 >= 0.01 ? depositApy * 100 : 0.0, depositLiquidity: depositLiquidity, - marketLiquidity: liquidity?.amount.toString() || '0', + marketLiquidity: marketLiquidity, incentiveInfo, isCollateral: true, depositCap: depositCap, @@ -123,6 +128,7 @@ const redBankSlice = (set: NamedSet, get: GetState): RedBankSlice set({ redBankAssets, + marketAssetLiquidity, }) }, setUserBalancesState: (userBalancesState: State) => set({ userBalancesState }), @@ -135,11 +141,7 @@ const redBankSlice = (set: NamedSet, get: GetState): RedBankSlice processRedBankQuery: (data: RedBankData, whitelistedAssets: Asset[]) => { if (isEqual(data, get().previousRedBankQueryData)) return - const rawBalances: Coin[] = data.balance.balance const userUnclaimedRewards = data.rbwasmkey.unclaimedRewards - const marketAssetLiquidity: Coin[] = rawBalances.map((coin) => { - return { denom: coin.denom, amount: coin.amount } - }) const marketInfo: Market[] = [] const marketIncentiveInfo: MarketIncentive[] = [] @@ -160,7 +162,6 @@ const redBankSlice = (set: NamedSet, get: GetState): RedBankSlice marketIncentiveInfo.push(marketIncentiveData) }) set({ - marketAssetLiquidity, marketInfo, marketIncentiveInfo, previousRedBankQueryData: data, @@ -188,6 +189,8 @@ const redBankSlice = (set: NamedSet, get: GetState): RedBankSlice const deposits = data.deposits.deposits + if (!deposits) return + const userDeposits = deposits.map((deposit) => ({ denom: deposit.denom, amount: deposit.amount, diff --git a/src/styles/App.scss b/src/styles/App.scss index 8f7feb0..2b1d8a2 100644 --- a/src/styles/App.scss +++ b/src/styles/App.scss @@ -27,7 +27,6 @@ > .widthBox { width: 100%; - overflow-x: hidden; > .body { min-height: calc(100vh - #{$headerHeight}); diff --git a/src/types/interfaces/asset.d.ts b/src/types/interfaces/asset.d.ts index ee53aaf..6b405d0 100644 --- a/src/types/interfaces/asset.d.ts +++ b/src/types/interfaces/asset.d.ts @@ -2,7 +2,7 @@ interface Asset { color: string name: string denom: string - symbol: 'OSMO' | 'ATOM' | 'JUNO' + symbol: 'OSMO' | 'ATOM' | 'JUNO' | 'axlUSDC' contract_addr?: string logo: string decimals: number diff --git a/src/types/interfaces/networkConfig.d.ts b/src/types/interfaces/networkConfig.d.ts index 1f8fb91..187388e 100644 --- a/src/types/interfaces/networkConfig.d.ts +++ b/src/types/interfaces/networkConfig.d.ts @@ -21,6 +21,12 @@ interface NetworkConfig { whitelist: Asset[] other: OtherAsset[] } + displayCurrency: { + denom: string + prefix: string + suffix: string + decimals: number + } appUrl: string councilUrl: string wallets: import('@marsprotocol/wallet-connector').WalletID[] diff --git a/src/types/interfaces/redbank.d.ts b/src/types/interfaces/redbank.d.ts index fa75d04..fa10c44 100644 --- a/src/types/interfaces/redbank.d.ts +++ b/src/types/interfaces/redbank.d.ts @@ -9,6 +9,8 @@ interface RedBankData { ATOMMarketIncentive: MarketIncentive JUNOMarket: Market JUNOMarketIncentive: MarketIncentive + axlUSDCMarket: Market + axlUSDCMarketIncentive: MarketIncentive collateral: UserCollateral[] unclaimedRewards: string } diff --git a/yarn.lock b/yarn.lock index 6e684c9..17114a5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -537,10 +537,10 @@ resolved "https://registry.yarnpkg.com/@cosmjs/utils/-/utils-0.29.5.tgz#3fed1b3528ae8c5f1eb5d29b68755bebfd3294ee" integrity sha512-m7h+RXDUxOzEOGt4P+3OVPX7PuakZT3GBmaM/Y2u+abN3xZkziykD/NvedYFvvCCdQo714XcGl33bwifS9FZPQ== -"@delphi-labs/shuttle@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@delphi-labs/shuttle/-/shuttle-2.1.2.tgz#1db50e81ccf2f72b00282416b05b2007591b6a58" - integrity sha512-V0aMimsraWxqf+RKFkwvCokWCNU0sGbw58hXyo92abBeKvIkN7GkrT2R+pEM37S0/uJ4VyRTT9ly/ky6/435Ug== +"@delphi-labs/shuttle@^2.3.2": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@delphi-labs/shuttle/-/shuttle-2.3.2.tgz#d05890bca91b3b18fc451bde3cb03d83072c1c42" + integrity sha512-xgebNiS761IPiqQ5q3no1CBNGD/Q5vznV7ydUqismzR/Vw4GIEAqJv6QFIe7HbjHPXkIPeL/enimEGwAnNB1Ag== dependencies: "@cosmjs/amino" "^0.29.5" "@cosmjs/cosmwasm-stargate" "^0.29.2" @@ -551,6 +551,8 @@ "@injectivelabs/sdk-ts" "^1.0.360" "@injectivelabs/ts-types" "^1.0.28" "@injectivelabs/utils" "^1.0.60" + "@keplr-wallet/cosmos" "^0.11.34" + "@keplr-wallet/proto-types" "^0.11.38" "@metamask/eth-sig-util" "^5.0.2" "@walletconnect/client" "^1.8.0" "@walletconnect/core" "^1.8.0" @@ -558,6 +560,7 @@ "@walletconnect/utils" "^1.8.0" cosmjs-types "^0.6.1" ethereumjs-util "^7.1.5" + long "^5.2.1" secp256k1 "^5.0.0" tslib "^2.4.0" zustand "^4.3.1" @@ -1409,7 +1412,7 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13": +"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.14" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== @@ -1431,7 +1434,7 @@ buffer "^6.0.3" delay "^4.4.0" -"@keplr-wallet/cosmos@^0.11.38": +"@keplr-wallet/cosmos@^0.11.34", "@keplr-wallet/cosmos@^0.11.38": version "0.11.38" resolved "https://registry.yarnpkg.com/@keplr-wallet/cosmos/-/cosmos-0.11.38.tgz#5657e3fed10c9a9f75d29f01a137913403196348" integrity sha512-0N7pf77cSPp/tNzsCp9dhbmEStXZJv+7KZv3FICRpgSp2w6vKwMPwJ5GIt0T0X4RuiQfgkabnDX77DkBSHo9ng== @@ -1462,7 +1465,7 @@ elliptic "^6.5.3" sha.js "^2.4.11" -"@keplr-wallet/proto-types@0.11.38": +"@keplr-wallet/proto-types@0.11.38", "@keplr-wallet/proto-types@^0.11.38": version "0.11.38" resolved "https://registry.yarnpkg.com/@keplr-wallet/proto-types/-/proto-types-0.11.38.tgz#b31152b06e1f7a9d7c5768767a22d79dbf4c9161" integrity sha512-fMiINr1Y59GfIID1oeCuPkGuBm2WTBjQ/qekDHvwM0aBEB0Ca0J9chhyqwziHvmKAShVmZVyb9P2r/1ZqKV21g== @@ -1492,16 +1495,18 @@ resolved "https://registry.yarnpkg.com/@kurkle/color/-/color-0.3.2.tgz#5acd38242e8bde4f9986e7913c8fdf49d3aa199f" integrity sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw== -"@marsprotocol/wallet-connector@^1.2.3": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@marsprotocol/wallet-connector/-/wallet-connector-1.2.3.tgz#caa0612e914ba42319a49a9372bc0ce26603a9bf" - integrity sha512-Xx2gw9FYF7DAfSFsDPsvuVf8IvtgQ1Scm10qHx69dC6KtNzMdOFh4rzzl/RSYiijaDBh1ItiNMqOpJemzQUujQ== +"@marsprotocol/wallet-connector@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@marsprotocol/wallet-connector/-/wallet-connector-1.3.0.tgz#1d7a47c5a2ee94e23f7b3703638a7526b35fd8ba" + integrity sha512-O9zyUtWNrggRE1LeilofR8BunhwP6lCY5g5+WU1BDI/V2AqzV9tdNdjYg5CGEO2Z8iXb21Y+o4RoiZ7mknezzQ== dependencies: "@cosmjs/cosmwasm-stargate" "^0.29.5" - "@delphi-labs/shuttle" "^2.1.2" + "@delphi-labs/shuttle" "^2.3.2" "@keplr-wallet/cosmos" "^0.11.38" - axios "^1.3.1" + axios "^1.3.2" + react-device-detect "^2.2.2" react-modal "^3.16.1" + react-qr-code "^2.0.11" webpack "^5.75.0" webpack-cli "^5.0.1" webpack-node-externals "^3.0.0" @@ -1874,27 +1879,6 @@ "@react-spring/shared" "~9.6.1" "@react-spring/types" "~9.6.1" -"@rollup/plugin-commonjs@24.0.0": - version "24.0.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-24.0.0.tgz#fb7cf4a6029f07ec42b25daa535c75b05a43f75c" - integrity sha512-0w0wyykzdyRRPHOb0cQt14mIBLujfAv6GgP6g8nvg/iBxEm112t3YPPq+Buqe2+imvElTka+bjNlJ/gB56TD8g== - dependencies: - "@rollup/pluginutils" "^5.0.1" - commondir "^1.0.1" - estree-walker "^2.0.2" - glob "^8.0.3" - is-reference "1.2.1" - magic-string "^0.27.0" - -"@rollup/pluginutils@^5.0.1": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.2.tgz#012b8f53c71e4f6f9cb317e311df1404f56e7a33" - integrity sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA== - dependencies: - "@types/estree" "^1.0.0" - estree-walker "^2.0.2" - picomatch "^2.3.1" - "@rushstack/eslint-patch@^1.1.3": version "1.2.0" resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728" @@ -1922,131 +1906,6 @@ "@noble/hashes" "~1.1.1" "@scure/base" "~1.1.0" -"@sentry/browser@7.34.0": - version "7.34.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.34.0.tgz#6a521c5d95d535e6e89cf4eae85153f90c37d17a" - integrity sha512-5Jmjj0DLxx+31o12T+VH4U+gO7wz3L+ftjuTxcQaC8GeFVe5qCyXZoDmWKNV9NEyREiZ3azV62bJc5wojZrIIg== - dependencies: - "@sentry/core" "7.34.0" - "@sentry/replay" "7.34.0" - "@sentry/types" "7.34.0" - "@sentry/utils" "7.34.0" - tslib "^1.9.3" - -"@sentry/cli@^1.74.6": - version "1.74.6" - resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-1.74.6.tgz#c4f276e52c6f5e8c8d692845a965988068ebc6f5" - integrity sha512-pJ7JJgozyjKZSTjOGi86chIngZMLUlYt2HOog+OJn+WGvqEkVymu8m462j1DiXAnex9NspB4zLLNuZ/R6rTQHg== - dependencies: - https-proxy-agent "^5.0.0" - mkdirp "^0.5.5" - node-fetch "^2.6.7" - npmlog "^4.1.2" - progress "^2.0.3" - proxy-from-env "^1.1.0" - which "^2.0.2" - -"@sentry/core@7.34.0": - version "7.34.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.34.0.tgz#bfda8d386cf7343200aa9fb7a7a26e99b839fc0c" - integrity sha512-J1oxsYZX1N0tkEcaHt/uuDqk6zOnaivyampp+EvBsUMCdemjg7rwKvawlRB0ZtBEQu3HAhi8zecm03mlpWfCDw== - dependencies: - "@sentry/types" "7.34.0" - "@sentry/utils" "7.34.0" - tslib "^1.9.3" - -"@sentry/integrations@7.34.0": - version "7.34.0" - resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-7.34.0.tgz#891dd31a7c021cd1b78b3a05dff80deddfbca71b" - integrity sha512-xbWnTvG4gkKeCVpmhhdPtMbQkPO0RAfEJ8VPO5TWmUMT23ZWy2kE0gTZHtnBopy7AXxg231XxTi4fxnwgQGxEQ== - dependencies: - "@sentry/types" "7.34.0" - "@sentry/utils" "7.34.0" - localforage "^1.8.1" - tslib "^1.9.3" - -"@sentry/nextjs@^7.34.0": - version "7.34.0" - resolved "https://registry.yarnpkg.com/@sentry/nextjs/-/nextjs-7.34.0.tgz#5c649c9cf02db171bce1f0b351e2aef9af37f97d" - integrity sha512-vXtlpONIDU2kT2eA5STLBuGvw5njM7K/7IqjvvkwTwYUpKWs7xZvp7NeHAHpH6LkDSBljokS45fnvfMijEqN7A== - dependencies: - "@rollup/plugin-commonjs" "24.0.0" - "@sentry/core" "7.34.0" - "@sentry/integrations" "7.34.0" - "@sentry/node" "7.34.0" - "@sentry/react" "7.34.0" - "@sentry/tracing" "7.34.0" - "@sentry/types" "7.34.0" - "@sentry/utils" "7.34.0" - "@sentry/webpack-plugin" "1.20.0" - chalk "3.0.0" - rollup "2.78.0" - tslib "^1.9.3" - -"@sentry/node@7.34.0": - version "7.34.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.34.0.tgz#acf51e40b1ecbd91d7bf2df55c47ae1b30c39b40" - integrity sha512-VM4XeydRdgeaNTRe8kwqYg2oNPddVyY74PlCFEFnPEN1NccycNuwiFno68kNrApeqxxLlTTmzkJy0BWo16x2Yg== - dependencies: - "@sentry/core" "7.34.0" - "@sentry/types" "7.34.0" - "@sentry/utils" "7.34.0" - cookie "^0.4.1" - https-proxy-agent "^5.0.0" - lru_map "^0.3.3" - tslib "^1.9.3" - -"@sentry/react@7.34.0": - version "7.34.0" - resolved "https://registry.yarnpkg.com/@sentry/react/-/react-7.34.0.tgz#8d69d3957736fe2692cd5547ad2d2f6f307e5590" - integrity sha512-vdonnZK9R8xyEBDaXNofHyoqy9biNRvlKrQXZp4x8WlYcBCwbU46qxZlSVsxa89pm7yUYS+KHq8cYL801+weqg== - dependencies: - "@sentry/browser" "7.34.0" - "@sentry/types" "7.34.0" - "@sentry/utils" "7.34.0" - hoist-non-react-statics "^3.3.2" - tslib "^1.9.3" - -"@sentry/replay@7.34.0": - version "7.34.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.34.0.tgz#66d63b1e04d7e8068cac0c623a607f470d000751" - integrity sha512-4L4YZfWt8mcVNcI99RxHORPb308URI1R9xsFj97fagk0ATjexLKr5QCA2ApnKaSn8Q0q1Zdzd4XmFtW9anU45Q== - dependencies: - "@sentry/core" "7.34.0" - "@sentry/types" "7.34.0" - "@sentry/utils" "7.34.0" - -"@sentry/tracing@7.34.0": - version "7.34.0" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.34.0.tgz#bc084389cad4f1e8520311ac195b070eced72b40" - integrity sha512-JtfSWBfcWslfIujcpGEPF5oOiAOCd5shMoWYrdTvCfruHhYjp4w5kv/ndkvq2EpFkcQYhdmtQEytXEO8IJIqRw== - dependencies: - "@sentry/core" "7.34.0" - "@sentry/types" "7.34.0" - "@sentry/utils" "7.34.0" - tslib "^1.9.3" - -"@sentry/types@7.34.0": - version "7.34.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.34.0.tgz#e0dc6a927dd13e4cacbca7bfee67a088885e8309" - integrity sha512-K+OeHIrl35PSYn6Zwqe4b8WWyAJQoI5NeWxHVkM7oQTGJ1YLG4BvLsR+UiUXnKdR5krE4EDtEA5jLsDlBEyPvw== - -"@sentry/utils@7.34.0": - version "7.34.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.34.0.tgz#32fb6db8b352477d219ddff8200372959c68b445" - integrity sha512-VIHHXEBw0htzqxnU8A7WkXKvmsG2pZVqHlAn0H9W/yyFQtXMuP1j1i0NsjADB/3JXUKK83kTNWGzScXvp0o+Jg== - dependencies: - "@sentry/types" "7.34.0" - tslib "^1.9.3" - -"@sentry/webpack-plugin@1.20.0": - version "1.20.0" - resolved "https://registry.yarnpkg.com/@sentry/webpack-plugin/-/webpack-plugin-1.20.0.tgz#e7add76122708fb6b4ee7951294b521019720e58" - integrity sha512-Ssj1mJVFsfU6vMCOM2d+h+KQR7QHSfeIP16t4l20Uq/neqWXZUQ2yvQfe4S3BjdbJXz/X4Rw8Hfy1Sd0ocunYw== - dependencies: - "@sentry/cli" "^1.74.6" - webpack-sources "^2.0.0 || ^3.0.0" - "@sinclair/typebox@^0.24.1": version "0.24.51" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f" @@ -2240,7 +2099,7 @@ "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*", "@types/estree@^1.0.0": +"@types/estree@*": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== @@ -2907,11 +2766,6 @@ ansi-escapes@^4.2.1: dependencies: type-fest "^0.21.3" -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== - ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -2944,19 +2798,6 @@ anymatch@^3.0.3, anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -are-we-there-yet@~1.1.2: - version "1.1.7" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" - integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -3073,10 +2914,10 @@ axios@^0.27.2: follow-redirects "^1.14.9" form-data "^4.0.0" -axios@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.3.1.tgz#80bf6c8dbb46e6db1fa8fe9ab114c1ca7405c2ee" - integrity sha512-78pWJsQTceInlyaeBQeYZ/QgZeWS8hGeKiIJiDKQe3hEyBb7sEMq0K4gjx+Va6WHTYO4zI/RRl8qGRzn0YMadA== +axios@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.3.2.tgz#7ac517f0fa3ec46e0e636223fd973713a09c72b3" + integrity sha512-1M3O703bYqYuPhbHeya5bnhpYVsDDRyQSabNja04mZtboLNSuZ4YrltestrLXfHgmzua4TpUqRiVKbiQuo2epw== dependencies: follow-redirects "^1.15.0" form-data "^4.0.0" @@ -3256,13 +3097,6 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -3371,14 +3205,6 @@ caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001406: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001447.tgz#ef1f39ae38d839d7176713735a8e467a0a2523bd" integrity sha512-bdKU1BQDPeEXe9A39xJnGtY0uRq/z5osrnXUw0TcK+EYno45Y+U7QU9HhHEyzvMDffpYadFXi3idnSNkcwLkTw== -chalk@3.0.0, chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - chalk@^2.0.0, chalk@^2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -3388,6 +3214,14 @@ chalk@^2.0.0, chalk@^2.4.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -3493,11 +3327,6 @@ co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== - collect-v8-coverage@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" @@ -3549,21 +3378,11 @@ commander@^9.4.1: resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.9.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" @@ -3574,11 +3393,6 @@ convert-source-map@^2.0.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -cookie@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - copy-to-clipboard@^3.3.1: version "3.3.3" resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0" @@ -3813,11 +3627,6 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - detect-browser@5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/detect-browser/-/detect-browser-5.2.0.tgz#c9cd5afa96a6a19fda0bbe9e9be48a6b6e1e9c97" @@ -4335,11 +4144,6 @@ estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== -estree-walker@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -4698,20 +4502,6 @@ functions-have-names@^1.2.2: resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg== - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -4804,17 +4594,6 @@ glob@^7.0.0, glob@^7.0.5, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.3: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -4950,11 +4729,6 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -5028,7 +4802,7 @@ http-status-codes@^2.2.0: resolved "https://registry.yarnpkg.com/http-status-codes/-/http-status-codes-2.2.0.tgz#bb2efe63d941dfc2be18e15f703da525169622be" integrity sha512-feERVo9iWxvnejp3SEfm/+oNG517npqL2/PIA8ORjyOZjGC7TwCRQsZylciLS64i6pJ0wRYz3rkXLRwbtFa8Ng== -https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: +https-proxy-agent@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== @@ -5089,11 +4863,6 @@ ignore@^5.1.4, ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== -immediate@~3.0.5: - version "3.0.6" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" - integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== - immutable@^4.0.0: version "4.2.2" resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.2.2.tgz#2da9ff4384a4330c36d4d1bc88e90f9e0b0ccd16" @@ -5230,13 +4999,6 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== - dependencies: - number-is-nan "^1.0.0" - is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -5303,13 +5065,6 @@ is-potential-custom-element-name@^1.0.1: resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== -is-reference@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" - integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== - dependencies: - "@types/estree" "*" - is-regex@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" @@ -6156,13 +5911,6 @@ libsodium@^0.7.0: resolved "https://registry.yarnpkg.com/libsodium/-/libsodium-0.7.10.tgz#c2429a7e4c0836f879d701fec2c8a208af024159" integrity sha512-eY+z7hDrDKxkAK+QKZVNv92A5KYkxfvIshtBJkmg5TSiCnYqZP3i9OO9whE79Pwgm4jGaoHgkM4ao/b9Cyu4zQ== -lie@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e" - integrity sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw== - dependencies: - immediate "~3.0.5" - lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" @@ -6180,13 +5928,6 @@ loader-runner@^4.2.0: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== -localforage@^1.8.1: - version "1.10.0" - resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.10.0.tgz#5c465dc5f62b2807c3a84c0c6a1b1b3212781dd4" - integrity sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg== - dependencies: - lie "3.1.1" - locate-path@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" @@ -6236,6 +5977,11 @@ long@^4.0.0: resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== +long@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/long/-/long-5.2.1.tgz#e27595d0083d103d2fa2c20c7699f8e0c92b897f" + integrity sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A== + loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -6264,23 +6010,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lru_map@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" - integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== - lz-string@^1.4.4: version "1.4.4" resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" integrity sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ== -magic-string@^0.27.0: - version "0.27.0" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" - integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.13" - make-dir@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" @@ -6366,25 +6100,11 @@ minimatch@^3.0.3, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatc dependencies: brace-expansion "^1.1.7" -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: version "1.2.7" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== -mkdirp@^0.5.5: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" @@ -6501,13 +6221,6 @@ node-fetch@2.6.7: dependencies: whatwg-url "^5.0.0" -node-fetch@^2.6.7: - version "2.6.8" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.8.tgz#a68d30b162bc1d8fd71a367e81b997e1f4d4937e" - integrity sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg== - dependencies: - whatwg-url "^5.0.0" - node-gyp-build@^4.2.0: version "4.6.0" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" @@ -6543,21 +6256,6 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npmlog@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== - numeral@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/numeral/-/numeral-2.0.6.tgz#4ad080936d443c2561aed9f2197efffe25f4e506" @@ -6568,7 +6266,7 @@ nwsapi@^2.2.2: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0" integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw== -object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== @@ -6884,11 +6582,6 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -progress@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - prompts@^2.0.1: version "2.4.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" @@ -6948,6 +6641,11 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +qr.js@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/qr.js/-/qr.js-0.0.0.tgz#cace86386f59a0db8050fa90d9b6b0e88a1e364f" + integrity sha512-c4iYnWb+k2E+vYpRimHqSu575b1/wKl4XFeJGpFmrJQz5I88v9aY2czh7s0w36srfCM1sXgC/xpoJz5dJfq+OQ== + query-string@6.13.5: version "6.13.5" resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.13.5.tgz#99e95e2fb7021db90a6f373f990c0c814b3812d8" @@ -6984,10 +6682,10 @@ react-chartjs-2@^5.2.0: resolved "https://registry.yarnpkg.com/react-chartjs-2/-/react-chartjs-2-5.2.0.tgz#43c1e3549071c00a1a083ecbd26c1ad34d385f5d" integrity sha512-98iN5aguJyVSxp5U3CblRLH67J8gkfyGNbiK3c+l1QI/G4irHMPQw44aEPmjVag+YKTyQ260NcF82GTQ3bdscA== -react-currency-input-field@^3.6.9: - version "3.6.9" - resolved "https://registry.yarnpkg.com/react-currency-input-field/-/react-currency-input-field-3.6.9.tgz#5eaa1190512d1de214863032045b67dd0582c87a" - integrity sha512-GNqG1Np+dz3VfBhDc9pFPIyar9SgB/fRjIofFSXOoyFNffda5r24n6LSoXfqQ9L7IKRDoUwveMMJV5GCM2eByw== +react-currency-input-field@^3.6.10: + version "3.6.10" + resolved "https://registry.yarnpkg.com/react-currency-input-field/-/react-currency-input-field-3.6.10.tgz#f04663a2074b894735edb6d9fae95499727596b1" + integrity sha512-KRAJJaLujarBTLlEVbznsUxQ56+Qyqwoe5w9DnGxmsGnHv4ycQRpRkuuCDfF9BcXHmegzsOXesfIGpW7Cw9mTQ== react-device-detect@^2.2.2: version "2.2.2" @@ -7004,10 +6702,10 @@ react-dom@^18.2.0: loose-envify "^1.1.0" scheduler "^0.23.0" -react-i18next@^12.1.4: - version "12.1.4" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-12.1.4.tgz#be0a60d3a45acc4321909f8a4b8cde16518a2926" - integrity sha512-XQND7jYtgM7ht5PH3yIZljCRpAMTlH/zmngM9ZjToqa+0BR6xuu8c7QF0WIIOEjcMTB2S3iOfpN/xG/ZrAnO6g== +react-i18next@^12.1.5: + version "12.1.5" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-12.1.5.tgz#b65f5733dd2f96188a9359c009b7dbe27443f009" + integrity sha512-7PQAv6DA0TcStG96fle+8RfTwxVbHVlZZJPoEszwUNvDuWpGldJmNWa3ZPesEsZQZGF6GkzwvEh6p57qpFD2gQ== dependencies: "@babel/runtime" "^7.20.6" html-parse-stringify "^3.0.1" @@ -7042,6 +6740,14 @@ react-modal@^3.16.1: react-lifecycles-compat "^3.0.0" warning "^4.0.3" +react-qr-code@^2.0.11: + version "2.0.11" + resolved "https://registry.yarnpkg.com/react-qr-code/-/react-qr-code-2.0.11.tgz#444c759a2100424972e17135fbe0e32eaffa19e8" + integrity sha512-P7mvVM5vk9NjGdHMt4Z0KWeeJYwRAtonHTghZT2r+AASinLUUKQ9wfsGH2lPKsT++gps7hXmaiMGRvwTDEL9OA== + dependencies: + prop-types "^15.8.1" + qr.js "0.0.0" + react-spring@^9.6.1: version "9.6.1" resolved "https://registry.yarnpkg.com/react-spring/-/react-spring-9.6.1.tgz#e715b2fa523c1a3acfdcf1aaa93e081620b8cc8e" @@ -7083,19 +6789,6 @@ react@^18.2.0: dependencies: loose-envify "^1.1.0" -readable-stream@^2.0.6, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" @@ -7115,6 +6808,19 @@ readable-stream@~1.0.31: isarray "0.0.1" string_decoder "~0.10.x" +readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -7250,13 +6956,6 @@ rlp@^2.2.3, rlp@^2.2.4: dependencies: bn.js "^5.2.0" -rollup@2.78.0: - version "2.78.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.78.0.tgz#00995deae70c0f712ea79ad904d5f6b033209d9e" - integrity sha512-4+YfbQC9QEVvKTanHhIAFVUFSRsezvQF8vFOJwtGfb9Bb+r014S+qryr9PSmw8x6sMnPkmFBGAvIFVQxvJxjtg== - optionalDependencies: - fsevents "~2.3.2" - run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -7288,10 +6987,10 @@ safe-regex-test@^1.0.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sass@^1.57.1: - version "1.57.1" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.57.1.tgz#dfafd46eb3ab94817145e8825208ecf7281119b5" - integrity sha512-O2+LwLS79op7GI0xZ8fqzF7X2m/m8WFfI02dHOdsK5R2ECeS5F62zrwg/relM1rjSLy7Vd/DiMNIvPrQGsA0jw== +sass@^1.58.0: + version "1.58.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.58.0.tgz#ee8aea3ad5ea5c485c26b3096e2df6087d0bb1cc" + integrity sha512-PiMJcP33DdKtZ/1jSjjqVIKihoDc6yWmYr9K/4r3fVVIEDAluD0q7XZiRKrNJcPK3qkLRF/79DND1H5q1LBjgg== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" @@ -7376,11 +7075,6 @@ serialize-javascript@^6.0.0: dependencies: randombytes "^2.1.0" -set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -7439,7 +7133,7 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: +signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -7544,16 +7238,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -7613,13 +7298,6 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== - dependencies: - ansi-regex "^2.0.0" - strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -7862,7 +7540,7 @@ tsconfig-paths@^3.14.1: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@1.14.1, tslib@^1.8.1, tslib@^1.9.3: +tslib@1.14.1, tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -8109,7 +7787,7 @@ webpack-node-externals@^3.0.0: resolved "https://registry.yarnpkg.com/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz#1a3407c158d547a9feb4229a9e3385b7b60c9917" integrity sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ== -"webpack-sources@^2.0.0 || ^3.0.0", webpack-sources@^3.2.3: +webpack-sources@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== @@ -8205,20 +7883,13 @@ which-typed-array@^1.1.9: has-tostringtag "^1.0.0" is-typed-array "^1.1.10" -which@^2.0.1, which@^2.0.2: +which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" -wide-align@^1.1.0: - version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - wif@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/wif/-/wif-2.0.6.tgz#08d3f52056c66679299726fade0d432ae74b4704"