diff --git a/.eslintignore b/.eslintignore index cc71deb1..2eaab392 100644 --- a/.eslintignore +++ b/.eslintignore @@ -5,4 +5,5 @@ coverage postcss.config.js next.config.js tailwind.config.js -jest.config.js \ No newline at end of file +jest.config.js +sentry.* \ No newline at end of file diff --git a/next.config.js b/next.config.js index ed7a4592..fa052448 100755 --- a/next.config.js +++ b/next.config.js @@ -1,9 +1,34 @@ /** @type {import('next').NextConfig} */ const { version } = require('./package.json') +const { withSentryConfig } = require("@sentry/nextjs"); +const withBundleAnalyzer = require('@next/bundle-analyzer')({ + enabled: process.env.ANALYZE === 'true', +}) const isDev = process.env.NODE_ENV !== 'production' +// Sometimes useful to disable this during development +const ENABLE_CSP_HEADER = true; +const FRAME_SRC_HOSTS = ['https://*.walletconnect.com', 'https://*.walletconnect.org','https://*.solflare.com']; +const STYLE_SRC_HOSTS = ['https://*.googleapis.com'] +const IMG_SRC_HOSTS = ['https://*.walletconnect.com']; +const cspHeader = ` + default-src 'self'; + script-src 'self'${isDev ? " 'unsafe-eval'" : ''}; + style-src 'self' 'unsafe-inline' ${STYLE_SRC_HOSTS.join(' ')}; + connect-src *; + img-src 'self' blob: data: ${IMG_SRC_HOSTS.join(' ')}; + font-src 'self' data:; + object-src 'none'; + base-uri 'self'; + form-action 'self'; + frame-src 'self' ${FRAME_SRC_HOSTS.join(' ')}; + frame-ancestors 'none'; + ${!isDev ? 'block-all-mixed-content;' : ''} + ${!isDev ? 'upgrade-insecure-requests;' : ''} +`.replace(/\s{2,}/g, ' ').trim(); + const securityHeaders = [ { key: 'X-XSS-Protection', @@ -22,12 +47,14 @@ const securityHeaders = [ value: 'strict-origin-when-cross-origin', }, // Note, causes a problem for firefox: https://github.com/MetaMask/metamask-extension/issues/3133 - { - key: 'Content-Security-Policy', - value: `default-src 'self'; script-src 'self'${ - isDev ? " 'unsafe-eval'" : '' - }; connect-src *; img-src 'self' data: https://*.walletconnect.com; style-src 'self' 'unsafe-inline' https://*.googleapis.com; font-src 'self' data:; base-uri 'self'; form-action 'self'; frame-src 'self' https://*.solflare.com https://*.walletconnect.com https://*.walletconnect.org;`, - }, + ...(ENABLE_CSP_HEADER + ? [ + { + key: 'Content-Security-Policy', + value: cspHeader, + }, + ] + : []) ] const nextConfig = { @@ -64,6 +91,22 @@ const nextConfig = { reactStrictMode: true, swcMinify: true, + + sentry: { + hideSourceMaps: true, + tunnelRoute: "/monitoring-tunnel", + }, } -module.exports = nextConfig \ No newline at end of file +const sentryWebpackPluginOptions = { + org: "hyperlane", + project: "warp-ui", + authToken: process.env.SENTRY_AUTH_TOKEN, + bundleSizeOptimizations: { + excludeDebugStatements: true, + excludeReplayIframe: true, + excludeReplayShadowDom: true, + }, +}; + +module.exports = withBundleAnalyzer(withSentryConfig(nextConfig, sentryWebpackPluginOptions)); \ No newline at end of file diff --git a/package.json b/package.json index 9a69e5da..64b89156 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "@hyperlane-xyz/widgets": "^3.1.4", "@metamask/jazzicon": "https://github.com/jmrossy/jazzicon#7a8df28974b4e81129bfbe3cab76308b889032a6", "@rainbow-me/rainbowkit": "1.3.0", + "@sentry/nextjs": "^7.93.0", "@solana/spl-token": "^0.3.8", "@solana/wallet-adapter-base": "^0.9.22", "@solana/wallet-adapter-react": "^0.15.32", @@ -28,6 +29,7 @@ "@solana/wallet-adapter-wallets": "^0.19.16", "@solana/web3.js": "^1.77.0", "@tanstack/react-query": "^4.29.7", + "@vercel/analytics": "^1.1.1", "bignumber.js": "^9.1.1", "buffer": "^6.0.3", "cosmjs-types": "^0.9.0", @@ -43,6 +45,7 @@ "zustand": "^4.3.9" }, "devDependencies": { + "@next/bundle-analyzer": "^14.0.4", "@trivago/prettier-plugin-sort-imports": "^4.1.1", "@types/jest": "^29.5.3", "@types/node": "^18.11.18", diff --git a/sentry.client.config.js b/sentry.client.config.js new file mode 100644 index 00000000..e3db49e0 --- /dev/null +++ b/sentry.client.config.js @@ -0,0 +1,22 @@ +import { sentryDefaultConfig } from './sentry.default.config'; +import * as Sentry from '@sentry/nextjs'; + +if (process.env.NEXT_PUBLIC_SENTRY_DSN) { + Sentry.init({ + ...sentryDefaultConfig, + integrations: [ + new Sentry.Integrations.Breadcrumbs({ + console: false, + dom: false, + fetch: false, + history: false, + sentry: false, + xhr: false, + }), + new Sentry.Integrations.Dedupe(), + new Sentry.Integrations.FunctionToString(), + new Sentry.Integrations.GlobalHandlers(), + new Sentry.Integrations.HttpContext(), + ], + }); +} diff --git a/sentry.default.config.js b/sentry.default.config.js new file mode 100644 index 00000000..c04aa5c4 --- /dev/null +++ b/sentry.default.config.js @@ -0,0 +1,13 @@ +export const sentryDefaultConfig = { + dsn: process.env.NEXT_PUBLIC_SENTRY_DSN, + tracesSampleRate: 1.0, + maxBreadcrumbs: 1, + sendClientReports: false, + attachStacktrace: false, + defaultIntegrations: false, + integrations: [], + beforeSend(event) { + delete event.user; + return event; + }, +}; diff --git a/sentry.edge.config.js b/sentry.edge.config.js new file mode 100644 index 00000000..53549b52 --- /dev/null +++ b/sentry.edge.config.js @@ -0,0 +1,6 @@ +import { sentryDefaultConfig } from './sentry.default.config'; +import * as Sentry from '@sentry/nextjs'; + +if (process.env.NEXT_PUBLIC_SENTRY_DSN) { + Sentry.init(sentryDefaultConfig) +} diff --git a/sentry.server.config.js b/sentry.server.config.js new file mode 100644 index 00000000..53549b52 --- /dev/null +++ b/sentry.server.config.js @@ -0,0 +1,6 @@ +import { sentryDefaultConfig } from './sentry.default.config'; +import * as Sentry from '@sentry/nextjs'; + +if (process.env.NEXT_PUBLIC_SENTRY_DSN) { + Sentry.init(sentryDefaultConfig) +} diff --git a/src/components/toast/useToastError.tsx b/src/components/toast/useToastError.tsx new file mode 100644 index 00000000..4bb0bb53 --- /dev/null +++ b/src/components/toast/useToastError.tsx @@ -0,0 +1,15 @@ +import { useEffect } from 'react'; +import { toast } from 'react-toastify'; + +import { errorToString } from '@hyperlane-xyz/utils'; + +import { logger } from '../../utils/logger'; + +export function useToastError(error: any, errorMsg?: string) { + useEffect(() => { + if (!error) return; + const message = errorMsg || errorToString(error, 500); + logger.error(message, error); + toast.error(errorMsg); + }, [error, errorMsg]); +} diff --git a/src/consts/config.ts b/src/consts/config.ts index ad8e7206..a0109728 100644 --- a/src/consts/config.ts +++ b/src/consts/config.ts @@ -1,7 +1,7 @@ import { ADDRESS_BLACKLIST } from './blacklist'; const isDevMode = process?.env?.NODE_ENV === 'development'; -const version = process?.env?.NEXT_PUBLIC_VERSION ?? null; +const version = process?.env?.NEXT_PUBLIC_VERSION || '0.0.0'; const explorerApiKeys = JSON.parse(process?.env?.EXPLORER_API_KEYS || '{}'); const walletConnectProjectId = process?.env?.NEXT_PUBLIC_WALLET_CONNECT_ID || ''; const withdrawalWhitelist = process?.env?.NEXT_PUBLIC_BLOCK_WITHDRAWAL_WHITELIST || ''; @@ -9,7 +9,7 @@ const transferBlacklist = process?.env?.NEXT_PUBLIC_TRANSFER_BLACKLIST || ''; interface Config { debug: boolean; // Enables some debug features in the app - version: string | null; // Matches version number in package.json + version: string; // Matches version number in package.json explorerApiKeys: Record; // Optional map of API keys for block explorer showTipBox: boolean; // Show/Hide the blue tip box above the transfer form showDisabledTokens: boolean; // Show/Hide invalid token options in the selection modal diff --git a/src/features/caip/chains.ts b/src/features/caip/chains.ts index 7bdccd45..04e0627e 100644 --- a/src/features/caip/chains.ts +++ b/src/features/caip/chains.ts @@ -35,7 +35,7 @@ export function tryParseCaip2Id(id?: ChainCaip2Id) { try { return parseCaip2Id(id); } catch (err) { - logger.error('Error parsing caip2 id', err); + logger.error(`Error parsing caip2 id ${id}`, err); return undefined; } } diff --git a/src/features/caip/tokens.ts b/src/features/caip/tokens.ts index 0dc3d119..7b6ce4b2 100644 --- a/src/features/caip/tokens.ts +++ b/src/features/caip/tokens.ts @@ -65,7 +65,7 @@ export function tryParseCaip19Id(id?: TokenCaip19Id) { try { return parseCaip19Id(id); } catch (err) { - logger.error('Error parsing caip2 id', err); + logger.error(`Error parsing caip2 id ${id}`, err); return undefined; } } diff --git a/src/features/tokens/approval.ts b/src/features/tokens/approval.ts index 855f8f41..2628ef9b 100644 --- a/src/features/tokens/approval.ts +++ b/src/features/tokens/approval.ts @@ -2,6 +2,7 @@ import { useQuery } from '@tanstack/react-query'; import { ProtocolType, eqAddress } from '@hyperlane-xyz/utils'; +import { useToastError } from '../../components/toast/useToastError'; import { logger } from '../../utils/logger'; import { getProtocolType } from '../caip/chains'; import { getTokenAddress, isNativeToken, isNonFungibleToken } from '../caip/tokens'; @@ -20,11 +21,7 @@ export function useIsApproveRequired( ) { const owner = useAccountAddressForChain(route?.originCaip2Id); - const { - isLoading, - isError: hasError, - data, - } = useQuery({ + const { isLoading, isError, error, data } = useQuery({ queryKey: ['useIsApproveRequired', route, tokenCaip19Id, owner, amount], queryFn: async () => { if (!route || !tokenCaip19Id || !owner || !amount) return false; @@ -33,7 +30,9 @@ export function useIsApproveRequired( enabled, }); - return { isLoading, hasError, isApproveRequired: !!data }; + useToastError(error, 'Error fetching approval status'); + + return { isLoading, isError, isApproveRequired: !!data }; } export async function isApproveRequired( diff --git a/src/features/tokens/balances.ts b/src/features/tokens/balances.ts index 6654a7bc..d3ed1e88 100644 --- a/src/features/tokens/balances.ts +++ b/src/features/tokens/balances.ts @@ -3,6 +3,7 @@ import { useEffect } from 'react'; import { eqAddress, isValidAddress } from '@hyperlane-xyz/utils'; +import { useToastError } from '../../components/toast/useToastError'; import { logger } from '../../utils/logger'; import { getProtocolType } from '../caip/chains'; import { parseCaip19Id, tryGetChainIdFromToken } from '../caip/tokens'; @@ -23,11 +24,7 @@ export function useOriginBalance( const address = useAccountAddressForChain(originCaip2Id); const setSenderBalances = useStore((state) => state.setSenderBalances); - const { - isLoading, - isError: hasError, - data, - } = useQuery({ + const { isLoading, isError, error, data } = useQuery({ queryKey: [ 'useOriginBalance', address, @@ -58,13 +55,15 @@ export function useOriginBalance( refetchInterval: 5000, }); + useToastError(error, 'Error fetching origin balance'); + useEffect(() => { setSenderBalances(data?.tokenBalance || '0', data?.nativeBalance || '0'); }, [data, setSenderBalances]); return { isLoading, - hasError, + isError, tokenBalance: data?.tokenBalance, tokenDecimals: data?.tokenDecimals, nativeBalance: data?.nativeBalance, @@ -75,11 +74,7 @@ export function useDestinationBalance( { originCaip2Id, destinationCaip2Id, tokenCaip19Id, recipientAddress }: TransferFormValues, tokenRoutes: RoutesMap, ) { - const { - isLoading, - isError: hasError, - data, - } = useQuery({ + const { isLoading, isError, error, data } = useQuery({ queryKey: [ 'useDestinationBalance', recipientAddress, @@ -101,7 +96,9 @@ export function useDestinationBalance( refetchInterval: 5000, }); - return { isLoading, hasError, balance: data?.balance, decimals: data?.decimals }; + useToastError(error, 'Error fetching destination balance'); + + return { isLoading, isError, balance: data?.balance, decimals: data?.decimals }; } // TODO solana support @@ -112,7 +109,8 @@ export function useOriginTokenIdBalance(tokenCaip19Id: TokenCaip19Id) { const { isLoading, - isError: hasError, + isError, + error, data: tokenIds, } = useQuery({ queryKey: ['useOriginTokenIdBalance', tokenCaip19Id, accountAddress], @@ -123,11 +121,13 @@ export function useOriginTokenIdBalance(tokenCaip19Id: TokenCaip19Id) { refetchInterval: 5000, }); + useToastError(error, 'Error fetching origin token IDs'); + useEffect(() => { setSenderNftIds(tokenIds && Array.isArray(tokenIds) ? tokenIds : null); }, [tokenIds, setSenderNftIds]); - return { isLoading, hasError, tokenIds }; + return { isLoading, isError, tokenIds }; } // TODO solana support @@ -159,7 +159,8 @@ export function useContractSupportsTokenByOwner( ) { const { isLoading, - isError: hasError, + isError, + error, data: isContractAllowToGetTokenIds, } = useQuery({ queryKey: ['useContractSupportsTokenByOwner', tokenCaip19Id, accountAddress], @@ -169,7 +170,9 @@ export function useContractSupportsTokenByOwner( }, }); - return { isLoading, hasError, isContractAllowToGetTokenIds }; + useToastError(error, 'Error ERC721 contract details'); + + return { isLoading, isError, isContractAllowToGetTokenIds }; } // TODO solana support @@ -195,7 +198,8 @@ export function useIsSenderNftOwner(tokenCaip19Id: TokenCaip19Id, tokenId: strin const { isLoading, - isError: hasError, + isError, + error, data: owner, } = useQuery({ queryKey: ['useOwnerOfErc721', tokenCaip19Id, tokenId], @@ -205,12 +209,14 @@ export function useIsSenderNftOwner(tokenCaip19Id: TokenCaip19Id, tokenId: strin }, }); + useToastError(error, 'Error ERC721 owner'); + useEffect(() => { if (!senderAddress || !owner) setIsSenderNftOwner(null); else setIsSenderNftOwner(eqAddress(senderAddress, owner)); }, [owner, senderAddress, setIsSenderNftOwner]); - return { isLoading, hasError, owner }; + return { isLoading, isError, owner }; } // TODO solana support diff --git a/src/features/tokens/routes/hooks.ts b/src/features/tokens/routes/hooks.ts index 92f48dd6..2eb084a6 100644 --- a/src/features/tokens/routes/hooks.ts +++ b/src/features/tokens/routes/hooks.ts @@ -1,6 +1,7 @@ import { useQuery } from '@tanstack/react-query'; import { useMemo } from 'react'; +import { useToastError } from '../../../components/toast/useToastError'; import { ibcRoutes } from '../../../consts/ibcRoutes'; import { logger } from '../../../utils/logger'; import { getChainIdFromToken } from '../../caip/tokens'; @@ -41,6 +42,8 @@ export function useTokenRoutes() { { retry: false }, ); + useToastError(error, 'Error fetching token routes'); + return { isLoading, error, tokenRoutes }; } diff --git a/src/features/transfer/TransferTokenCard.tsx b/src/features/transfer/TransferTokenCard.tsx index e33d18f8..9ec64f29 100644 --- a/src/features/transfer/TransferTokenCard.tsx +++ b/src/features/transfer/TransferTokenCard.tsx @@ -33,7 +33,7 @@ export function TransferTokenCard() {

Error searching for token routes.

- Please ensure chain and token configs are valid. + Please ensure token configs are valid and RPCs are healthy.
{routesError.toString()}
diff --git a/src/features/transfer/TransfersDetailsModal.tsx b/src/features/transfer/TransfersDetailsModal.tsx index 661a1d16..629b65e0 100644 --- a/src/features/transfer/TransfersDetailsModal.tsx +++ b/src/features/transfer/TransfersDetailsModal.tsx @@ -54,7 +54,7 @@ export function TransfersDetailsModal({ const { address: tokenAddress, namespace: tokenNamespace } = parseCaip19Id(tokenCaip19Id); const isNative = tokenNamespace === AssetNamespace.native || isZeroishAddress(tokenAddress); - const getFormUrls = useCallback(async () => { + const getMessageUrls = useCallback(async () => { try { if (originTxHash) { const originTxUrl = multiProvider.tryGetExplorerTxUrl(originChain, { hash: originTxHash }); @@ -73,8 +73,10 @@ export function TransfersDetailsModal({ useEffect(() => { if (!transfer) return; - getFormUrls().catch((err) => logger.error(err)); - }, [transfer, getFormUrls]); + getMessageUrls().catch((err) => + logger.error('Error getting message URLs for details modal', err), + ); + }, [transfer, getMessageUrls]); const isAccountReady = !!account?.isReady; const connectorName = account?.connectorName || 'wallet'; diff --git a/src/features/transfer/useIgpQuote.ts b/src/features/transfer/useIgpQuote.ts index 1ad5d48c..1e44a1c9 100644 --- a/src/features/transfer/useIgpQuote.ts +++ b/src/features/transfer/useIgpQuote.ts @@ -4,6 +4,7 @@ import { useEffect } from 'react'; import { IHypTokenAdapter } from '@hyperlane-xyz/sdk'; import { ProtocolType, fromWei } from '@hyperlane-xyz/utils'; +import { useToastError } from '../../components/toast/useToastError'; import { COSM_IGP_QUOTE, SOL_IGP_QUOTE } from '../../consts/values'; import { getChainReference, getProtocolType } from '../caip/chains'; import { AssetNamespace, getCaip19Id, getNativeTokenAddress } from '../caip/tokens'; @@ -29,11 +30,7 @@ const DEFAULT_IGP_QUOTES = { export function useIgpQuote(route?: Route) { const setIgpQuote = useStore((state) => state.setIgpQuote); - const { - isLoading, - isError: hasError, - data, - } = useQuery({ + const { isLoading, isError, error, data } = useQuery({ queryKey: ['useIgpQuote', route], queryFn: () => { if (!route || isIbcOnlyRoute(route)) return null; @@ -45,7 +42,9 @@ export function useIgpQuote(route?: Route) { setIgpQuote(data || null); }, [data, setIgpQuote]); - return { isLoading, hasError, igpQuote: data }; + useToastError(error, 'Error fetching IGP quote'); + + return { isLoading, isError, igpQuote: data }; } export async function fetchIgpQuote(route: Route, adapter?: IHypTokenAdapter): Promise { diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index d13709f0..61f0f5a8 100755 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -1,4 +1,5 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { Analytics } from '@vercel/analytics/react'; import type { AppProps } from 'next/app'; import { ToastContainer, Zoom, toast } from 'react-toastify'; import 'react-toastify/dist/ReactToastify.css'; @@ -38,6 +39,7 @@ export default function App({ Component, pageProps }: AppProps) { + diff --git a/src/styles/globals.css b/src/styles/globals.css index 391c008d..5e431e77 100755 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -43,33 +43,16 @@ Text and shadows text-shadow: 0 0 #010101; } -/* +/* Scrollbar Overrides =================== */ -html { - --scrollbarBG: rgba(255, 255, 255, 0); - --thumbBG: #dddddd; -} body { scroll-behavior: smooth; scrollbar-width: thin; - scrollbar-color: var(--thumbBG) var(--scrollbarBG); -} -::-webkit-scrollbar { - width: 8px; - height: 8px; - background-color: var(--scrollbarBG); -} -::-webkit-scrollbar-track { - background-color: var(--scrollbarBG); -} -::-webkit-scrollbar-thumb { - background-color: var(--thumbBG); - border-radius: 6px; - border: 3px solid var(--scrollbarBG); } + /* phones */ @media only screen and (max-width: 767px) { ::-webkit-scrollbar { diff --git a/src/utils/logger.ts b/src/utils/logger.ts index fa29c378..d159b924 100644 --- a/src/utils/logger.ts +++ b/src/utils/logger.ts @@ -1,8 +1,22 @@ /* eslint-disable no-console */ +import { captureException } from '@sentry/nextjs'; export const logger = { debug: (...args: any[]) => console.debug(...args), info: (...args: any[]) => console.info(...args), warn: (...args: any[]) => console.warn(...args), - error: (...args: any[]) => console.error(...args), + error: (message: string, err: any, ...args: any[]) => { + console.error(...args); + const filteredArgs = args.filter(isSafeSentryArg); + const extra = filteredArgs.reduce((acc, arg, i) => ({ ...acc, [`arg${i}`]: arg }), {}); + extra['message'] = message; + captureException(err, { extra }); + }, }; + +// First line of defense. Scrubbing is also configured in sentry.config.* files +function isSafeSentryArg(arg: any) { + if (typeof arg == 'number') return true; + if (typeof arg == 'string') return arg.length < 1000; + return false; +} diff --git a/yarn.lock b/yarn.lock index 5ec7c19d..de250fd3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3071,7 +3071,9 @@ __metadata: "@hyperlane-xyz/utils": "npm:^3.5.1" "@hyperlane-xyz/widgets": "npm:^3.1.4" "@metamask/jazzicon": "https://github.com/jmrossy/jazzicon#7a8df28974b4e81129bfbe3cab76308b889032a6" + "@next/bundle-analyzer": "npm:^14.0.4" "@rainbow-me/rainbowkit": "npm:1.3.0" + "@sentry/nextjs": "npm:^7.93.0" "@solana/spl-token": "npm:^0.3.8" "@solana/wallet-adapter-base": "npm:^0.9.22" "@solana/wallet-adapter-react": "npm:^0.15.32" @@ -3086,6 +3088,7 @@ __metadata: "@types/react-dom": "npm:^18.2.4" "@typescript-eslint/eslint-plugin": "npm:^6.14.0" "@typescript-eslint/parser": "npm:^6.14.0" + "@vercel/analytics": "npm:^1.1.1" autoprefixer: "npm:^10.4.14" bignumber.js: "npm:^9.1.1" buffer: "npm:^6.0.3" @@ -3460,7 +3463,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.13, @jridgewell/sourcemap-codec@npm:^1.4.14": version: 1.4.15 resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" checksum: 89960ac087781b961ad918978975bcdf2051cd1741880469783c42de64239703eab9db5230d776d8e6a09d73bb5e4cb964e07d93ee6e2e7aea5a7d726e865c09 @@ -3905,6 +3908,15 @@ __metadata: languageName: node linkType: hard +"@next/bundle-analyzer@npm:^14.0.4": + version: 14.0.4 + resolution: "@next/bundle-analyzer@npm:14.0.4" + dependencies: + webpack-bundle-analyzer: "npm:4.7.0" + checksum: 46224e08b20dffd0ff02d210ed527deddc189f054fb1501bca6d861f30c2bbcf5ede50f50c61401e2e865aede6ee736c1ce4ca0094ac14c839c2860cb13251ab + languageName: node + linkType: hard + "@next/env@npm:13.2.4": version: 13.2.4 resolution: "@next/env@npm:13.2.4" @@ -4308,6 +4320,13 @@ __metadata: languageName: node linkType: hard +"@polka/url@npm:^1.0.0-next.20": + version: 1.0.0-next.24 + resolution: "@polka/url@npm:1.0.0-next.24" + checksum: 00baec4458ac86ca27edf7ce807ccfad97cd1d4b67bdedaf3401a9e755757588f3331e891290d1deea52d88df2bf2387caf8d94a6835b614d5b37b638a688273 + languageName: node + linkType: hard + "@popperjs/core@npm:^2.9.3": version: 2.11.8 resolution: "@popperjs/core@npm:2.11.8" @@ -4453,6 +4472,41 @@ __metadata: languageName: node linkType: hard +"@rollup/plugin-commonjs@npm:24.0.0": + version: 24.0.0 + resolution: "@rollup/plugin-commonjs@npm:24.0.0" + dependencies: + "@rollup/pluginutils": "npm:^5.0.1" + commondir: "npm:^1.0.1" + estree-walker: "npm:^2.0.2" + glob: "npm:^8.0.3" + is-reference: "npm:1.2.1" + magic-string: "npm:^0.27.0" + peerDependencies: + rollup: ^2.68.0||^3.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 0e29a5ed5cb7a1af15dad5df64b706168327dda696c072316fdb381ebeaec8aab0a84548c19a3ca39a61bcf2436055ea7f714edbe762f489a8aed4a0551c4bd7 + languageName: node + linkType: hard + +"@rollup/pluginutils@npm:^5.0.1": + version: 5.1.0 + resolution: "@rollup/pluginutils@npm:5.1.0" + dependencies: + "@types/estree": "npm:^1.0.0" + estree-walker: "npm:^2.0.2" + picomatch: "npm:^2.3.1" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: abb15eaec5b36f159ec351b48578401bedcefdfa371d24a914cfdbb1e27d0ebfbf895299ec18ccc343d247e71f2502cba21202bc1362d7ef27d5ded699e5c2b2 + languageName: node + linkType: hard + "@rushstack/eslint-patch@npm:^1.1.3": version: 1.1.4 resolution: "@rushstack/eslint-patch@npm:1.1.4" @@ -4538,6 +4592,186 @@ __metadata: languageName: node linkType: hard +"@sentry-internal/feedback@npm:7.93.0": + version: 7.93.0 + resolution: "@sentry-internal/feedback@npm:7.93.0" + dependencies: + "@sentry/core": "npm:7.93.0" + "@sentry/types": "npm:7.93.0" + "@sentry/utils": "npm:7.93.0" + checksum: f266f8374c7039ddb6fe4d50edaad7e4c27a6004e0ca4df181b9d359b3cb97cea59f8dd097e13eb2228877ef252beccf5d2433cde35f788f637ed074d0f9b5f8 + languageName: node + linkType: hard + +"@sentry-internal/tracing@npm:7.93.0": + version: 7.93.0 + resolution: "@sentry-internal/tracing@npm:7.93.0" + dependencies: + "@sentry/core": "npm:7.93.0" + "@sentry/types": "npm:7.93.0" + "@sentry/utils": "npm:7.93.0" + checksum: 26efc18b072b015fdea6606ad58a657e5dc3cdcc5b18ab320e34844c25d717a69b706a4ed4415373f6b71b22f22a7bf877d607e79836fcc3e115c33d23b50577 + languageName: node + linkType: hard + +"@sentry/browser@npm:7.93.0": + version: 7.93.0 + resolution: "@sentry/browser@npm:7.93.0" + dependencies: + "@sentry-internal/feedback": "npm:7.93.0" + "@sentry-internal/tracing": "npm:7.93.0" + "@sentry/core": "npm:7.93.0" + "@sentry/replay": "npm:7.93.0" + "@sentry/types": "npm:7.93.0" + "@sentry/utils": "npm:7.93.0" + checksum: 8cc27d219ca3ebf5c904535bb2a1b8807f04d99cfb7b8a13bf22930531488b0de66d45ee1dd2772e37112dd5cbc58f099e8334a6ab4712133baaad756c6ae9ce + languageName: node + linkType: hard + +"@sentry/cli@npm:^1.77.1": + version: 1.77.1 + resolution: "@sentry/cli@npm:1.77.1" + dependencies: + https-proxy-agent: "npm:^5.0.0" + mkdirp: "npm:^0.5.5" + node-fetch: "npm:^2.6.7" + progress: "npm:^2.0.3" + proxy-from-env: "npm:^1.1.0" + which: "npm:^2.0.2" + bin: + sentry-cli: bin/sentry-cli + checksum: 1fc951c9c2886f9e359d429c25e9f27eaf9c7df02f1bc9b0cc353dca4158de4832af1bdfc28e31ba69f93adc82d548572aa1b76fbae599df9d7d28cd6205f989 + languageName: node + linkType: hard + +"@sentry/core@npm:7.93.0": + version: 7.93.0 + resolution: "@sentry/core@npm:7.93.0" + dependencies: + "@sentry/types": "npm:7.93.0" + "@sentry/utils": "npm:7.93.0" + checksum: 8604fa49dd3e82f7f40e537c4ea15ecf945efa36ed25cb65ee7868d6c7691b9639c5b76ea90987423ab0ab2ad5baa75397bf434f4a75535a1bd08e0f10442f01 + languageName: node + linkType: hard + +"@sentry/integrations@npm:7.93.0": + version: 7.93.0 + resolution: "@sentry/integrations@npm:7.93.0" + dependencies: + "@sentry/core": "npm:7.93.0" + "@sentry/types": "npm:7.93.0" + "@sentry/utils": "npm:7.93.0" + localforage: "npm:^1.8.1" + checksum: 0ca677fcae67c474f0927eef21950ccb26fc7a5790692acc9963c8eccaa6d464a9c6988bda6602de7739387f78e78ff0d3bcbff3244168578cb7549de6dddcbd + languageName: node + linkType: hard + +"@sentry/nextjs@npm:^7.93.0": + version: 7.93.0 + resolution: "@sentry/nextjs@npm:7.93.0" + dependencies: + "@rollup/plugin-commonjs": "npm:24.0.0" + "@sentry/core": "npm:7.93.0" + "@sentry/integrations": "npm:7.93.0" + "@sentry/node": "npm:7.93.0" + "@sentry/react": "npm:7.93.0" + "@sentry/types": "npm:7.93.0" + "@sentry/utils": "npm:7.93.0" + "@sentry/vercel-edge": "npm:7.93.0" + "@sentry/webpack-plugin": "npm:1.21.0" + chalk: "npm:3.0.0" + resolve: "npm:1.22.8" + rollup: "npm:2.78.0" + stacktrace-parser: "npm:^0.1.10" + peerDependencies: + next: ^10.0.8 || ^11.0 || ^12.0 || ^13.0 || ^14.0 + react: 16.x || 17.x || 18.x + webpack: ">= 4.0.0" + peerDependenciesMeta: + webpack: + optional: true + checksum: f2ea02cee84058f9c617ca0fda5645e925a77591b7343ab9b2f11164719eb871657ce19d9060879e1a7c303ecc5fa3b72c2587ae6a656500038f307e0041c91d + languageName: node + linkType: hard + +"@sentry/node@npm:7.93.0": + version: 7.93.0 + resolution: "@sentry/node@npm:7.93.0" + dependencies: + "@sentry-internal/tracing": "npm:7.93.0" + "@sentry/core": "npm:7.93.0" + "@sentry/types": "npm:7.93.0" + "@sentry/utils": "npm:7.93.0" + https-proxy-agent: "npm:^5.0.0" + checksum: a777838e5e6bdaadd6c00ec3964190349d9040fb4b5bffc95c1f7214a959c2972bbb4c3951f903df28ec26198a7fcb308fcaf13c4201d20b843c956133635017 + languageName: node + linkType: hard + +"@sentry/react@npm:7.93.0": + version: 7.93.0 + resolution: "@sentry/react@npm:7.93.0" + dependencies: + "@sentry/browser": "npm:7.93.0" + "@sentry/core": "npm:7.93.0" + "@sentry/types": "npm:7.93.0" + "@sentry/utils": "npm:7.93.0" + hoist-non-react-statics: "npm:^3.3.2" + peerDependencies: + react: 15.x || 16.x || 17.x || 18.x + checksum: 9a371b2ec980b60dce5ad9fdba8978cadd4b982ac7d39e9c60b91d074996f2e08567fe6f0dcce6ba59f6712f0e6b905d83279b31501f932e38ac7747f465cc98 + languageName: node + linkType: hard + +"@sentry/replay@npm:7.93.0": + version: 7.93.0 + resolution: "@sentry/replay@npm:7.93.0" + dependencies: + "@sentry-internal/tracing": "npm:7.93.0" + "@sentry/core": "npm:7.93.0" + "@sentry/types": "npm:7.93.0" + "@sentry/utils": "npm:7.93.0" + checksum: 54700f3ae869fca65610fea4752fced09cf76e63eb836f8291ad66dae2ca70b762d7c1ff584028606c8a7dea2edbe0c88c0fca04b74eaebc7357b3e966cfcff6 + languageName: node + linkType: hard + +"@sentry/types@npm:7.93.0": + version: 7.93.0 + resolution: "@sentry/types@npm:7.93.0" + checksum: 851480468ebe35f05b402fa954040bdc12f08bb5f820c149988c9108328c54a43e685bf85e8f94fc3a2c729ce41079bb3d7a78e757586b2cf2ac49e727b89669 + languageName: node + linkType: hard + +"@sentry/utils@npm:7.93.0": + version: 7.93.0 + resolution: "@sentry/utils@npm:7.93.0" + dependencies: + "@sentry/types": "npm:7.93.0" + checksum: 12442644235c797d787b28c2b8fbfa907806bbf31b42e50214d44d055fbbd218562f1bf12ac520eaea609c30594764860e2c117cbd9a5f2e2d03f0a74e4b9cda + languageName: node + linkType: hard + +"@sentry/vercel-edge@npm:7.93.0": + version: 7.93.0 + resolution: "@sentry/vercel-edge@npm:7.93.0" + dependencies: + "@sentry-internal/tracing": "npm:7.93.0" + "@sentry/core": "npm:7.93.0" + "@sentry/types": "npm:7.93.0" + "@sentry/utils": "npm:7.93.0" + checksum: a575423d586e79ff5432a9c522342d66da25fc1ec975497f28dfcb4f75c8b2b43b50d3cd2d53bcf823065c9cbe7d1e66799485ae77b67e270ed931400527e7a0 + languageName: node + linkType: hard + +"@sentry/webpack-plugin@npm:1.21.0": + version: 1.21.0 + resolution: "@sentry/webpack-plugin@npm:1.21.0" + dependencies: + "@sentry/cli": "npm:^1.77.1" + webpack-sources: "npm:^2.0.0 || ^3.0.0" + checksum: fc28506d72ae6eeddd9b2e1eb3e79fc7d186d902c0193cdab3367c8f10bd29ff23a50c6117d34652eb6bd35812469f2a5a2ba5180c62a4ea9b9e36f3075b3ee1 + languageName: node + linkType: hard + "@sinclair/typebox@npm:^0.27.8": version: 0.27.8 resolution: "@sinclair/typebox@npm:0.27.8" @@ -5885,6 +6119,13 @@ __metadata: languageName: node linkType: hard +"@types/estree@npm:*, @types/estree@npm:^1.0.0": + version: 1.0.5 + resolution: "@types/estree@npm:1.0.5" + checksum: 7de6d928dd4010b0e20c6919e1a6c27b61f8d4567befa89252055fad503d587ecb9a1e3eab1b1901f923964d7019796db810b7fd6430acb26c32866d126fd408 + languageName: node + linkType: hard + "@types/graceful-fs@npm:^4.1.3": version: 4.1.6 resolution: "@types/graceful-fs@npm:4.1.6" @@ -6372,6 +6613,15 @@ __metadata: languageName: node linkType: hard +"@vercel/analytics@npm:^1.1.1": + version: 1.1.1 + resolution: "@vercel/analytics@npm:1.1.1" + dependencies: + server-only: "npm:^0.0.1" + checksum: fece944678360085a5deaea3afdade16cab67097dca6585e02a1c4c67ac3ba91b8e0bb848b7ec686b87757aad763df5bae41ce103bdc16c6e586b9390d0b4c11 + languageName: node + linkType: hard + "@wagmi/chains@npm:^1.8.0": version: 1.8.0 resolution: "@wagmi/chains@npm:1.8.0" @@ -7316,6 +7566,13 @@ __metadata: languageName: node linkType: hard +"acorn-walk@npm:^8.0.0": + version: 8.3.2 + resolution: "acorn-walk@npm:8.3.2" + checksum: 57dbe2fd8cf744f562431775741c5c087196cd7a65ce4ccb3f3981cdfad25cd24ad2bad404997b88464ac01e789a0a61e5e355b2a84876f13deef39fb39686ca + languageName: node + linkType: hard + "acorn-walk@npm:^8.1.1": version: 8.2.0 resolution: "acorn-walk@npm:8.2.0" @@ -7323,6 +7580,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.0.4": + version: 8.11.3 + resolution: "acorn@npm:8.11.3" + bin: + acorn: bin/acorn + checksum: b688e7e3c64d9bfb17b596e1b35e4da9d50553713b3b3630cf5690f2b023a84eac90c56851e6912b483fe60e8b4ea28b254c07e92f17ef83d72d78745a8352dd + languageName: node + linkType: hard + "acorn@npm:^8.10.0": version: 8.11.2 resolution: "acorn@npm:8.11.2" @@ -8262,6 +8528,16 @@ __metadata: languageName: node linkType: hard +"chalk@npm:3.0.0": + version: 3.0.0 + resolution: "chalk@npm:3.0.0" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 37f90b31fd655fb49c2bd8e2a68aebefddd64522655d001ef417e6f955def0ed9110a867ffc878a533f2dafea5f2032433a37c8a7614969baa7f8a1cd424ddfc + languageName: node + linkType: hard + "chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -8273,7 +8549,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0.0, chalk@npm:^4.1.1": +"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.1": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -8518,6 +8794,20 @@ __metadata: languageName: node linkType: hard +"commander@npm:^7.2.0": + version: 7.2.0 + resolution: "commander@npm:7.2.0" + checksum: 9973af10727ad4b44f26703bf3e9fdc323528660a7590efe3aa9ad5042b4584c0deed84ba443f61c9d6f02dade54a5a5d3c95e306a1e1630f8374ae6db16c06d + languageName: node + linkType: hard + +"commondir@npm:^1.0.1": + version: 1.0.1 + resolution: "commondir@npm:1.0.1" + checksum: 4620bc4936a4ef12ce7dfcd272bb23a99f2ad68889a4e4ad766c9f8ad21af982511934d6f7050d4a8bde90011b1c15d56e61a1b4576d9913efbf697a20172d6c + languageName: node + linkType: hard + "compute-scroll-into-view@npm:3.0.3": version: 3.0.3 resolution: "compute-scroll-into-view@npm:3.0.3" @@ -9037,6 +9327,13 @@ __metadata: languageName: node linkType: hard +"duplexer@npm:^0.1.2": + version: 0.1.2 + resolution: "duplexer@npm:0.1.2" + checksum: 62ba61a830c56801db28ff6305c7d289b6dc9f859054e8c982abd8ee0b0a14d2e9a8e7d086ffee12e868d43e2bbe8a964be55ddbd8c8957714c87373c7a4f9b0 + languageName: node + linkType: hard + "duplexify@npm:^4.1.2": version: 4.1.2 resolution: "duplexify@npm:4.1.2" @@ -9558,6 +9855,13 @@ __metadata: languageName: node linkType: hard +"estree-walker@npm:^2.0.2": + version: 2.0.2 + resolution: "estree-walker@npm:2.0.2" + checksum: b02109c5d46bc2ed47de4990eef770f7457b1159a229f0999a09224d2b85ffeed2d7679cffcff90aeb4448e94b0168feb5265b209cdec29aad50a3d6e93d21e2 + languageName: node + linkType: hard + "esutils@npm:^2.0.2": version: 2.0.3 resolution: "esutils@npm:2.0.3" @@ -10237,6 +10541,19 @@ __metadata: languageName: node linkType: hard +"glob@npm:^8.0.3": + version: 8.1.0 + resolution: "glob@npm:8.1.0" + dependencies: + fs.realpath: "npm:^1.0.0" + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:^5.0.1" + once: "npm:^1.3.0" + checksum: 9aab1c75eb087c35dbc41d1f742e51d0507aa2b14c910d96fb8287107a10a22f4bbdce26fc0a3da4c69a20f7b26d62f1640b346a4f6e6becfff47f335bb1dc5e + languageName: node + linkType: hard + "globals@npm:^11.1.0": version: 11.12.0 resolution: "globals@npm:11.12.0" @@ -10317,6 +10634,15 @@ __metadata: languageName: node linkType: hard +"gzip-size@npm:^6.0.0": + version: 6.0.0 + resolution: "gzip-size@npm:6.0.0" + dependencies: + duplexer: "npm:^0.1.2" + checksum: 2df97f359696ad154fc171dcb55bc883fe6e833bca7a65e457b9358f3cb6312405ed70a8da24a77c1baac0639906cd52358dc0ce2ec1a937eaa631b934c94194 + languageName: node + linkType: hard + "h3@npm:^1.8.1, h3@npm:^1.8.2": version: 1.9.0 resolution: "h3@npm:1.9.0" @@ -10443,7 +10769,7 @@ __metadata: languageName: node linkType: hard -"hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.1": +"hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2": version: 3.3.2 resolution: "hoist-non-react-statics@npm:3.3.2" dependencies: @@ -10558,6 +10884,13 @@ __metadata: languageName: node linkType: hard +"immediate@npm:~3.0.5": + version: 3.0.6 + resolution: "immediate@npm:3.0.6" + checksum: f9b3486477555997657f70318cc8d3416159f208bec4cca3ff3442fd266bc23f50f0c9bd8547e1371a6b5e82b821ec9a7044a4f7b944798b25aa3cc6d5e63e62 + languageName: node + linkType: hard + "immer@npm:^9.0.19": version: 9.0.21 resolution: "immer@npm:9.0.21" @@ -10855,6 +11188,15 @@ __metadata: languageName: node linkType: hard +"is-reference@npm:1.2.1": + version: 1.2.1 + resolution: "is-reference@npm:1.2.1" + dependencies: + "@types/estree": "npm:*" + checksum: e7b48149f8abda2c10849ea51965904d6a714193d68942ad74e30522231045acf06cbfae5a4be2702fede5d232e61bf50b3183acdc056e6e3afe07fcf4f4b2bc + languageName: node + linkType: hard + "is-regex@npm:^1.1.4": version: 1.1.4 resolution: "is-regex@npm:1.1.4" @@ -11809,6 +12151,15 @@ __metadata: languageName: node linkType: hard +"lie@npm:3.1.1": + version: 3.1.1 + resolution: "lie@npm:3.1.1" + dependencies: + immediate: "npm:~3.0.5" + checksum: c2c7d9dcc3a9aae641f41cde4e2e2cd571e4426b1f5915862781d77776672dcbca43461e16f4d382c9a300825c15e1a4923f1def3a5568d97577e077a3cecb44 + languageName: node + linkType: hard + "lilconfig@npm:^2.0.5, lilconfig@npm:^2.1.0": version: 2.1.0 resolution: "lilconfig@npm:2.1.0" @@ -11893,6 +12244,15 @@ __metadata: languageName: node linkType: hard +"localforage@npm:^1.8.1": + version: 1.10.0 + resolution: "localforage@npm:1.10.0" + dependencies: + lie: "npm:3.1.1" + checksum: d5c44be3a09169b013a3ebe252e678aaeb6938ffe72e9e12c199fd4307c1ec9d1a057ac2dfdfbb1379dfeec467a34ad0fc3ecd27489a2c43a154fb72b2822542 + languageName: node + linkType: hard + "locate-path@npm:^2.0.0": version: 2.0.0 resolution: "locate-path@npm:2.0.0" @@ -11973,7 +12333,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:*, lodash@npm:^4.17.21": +"lodash@npm:*, lodash@npm:^4.17.20, lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: c08619c038846ea6ac754abd6dd29d2568aa705feb69339e836dfa8d8b09abbb2f859371e86863eda41848221f9af43714491467b5b0299122431e202bb0c532 @@ -12053,6 +12413,15 @@ __metadata: languageName: node linkType: hard +"magic-string@npm:^0.27.0": + version: 0.27.0 + resolution: "magic-string@npm:0.27.0" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.4.13" + checksum: 10a18a48d22fb14467d6cb4204aba58d6790ae7ba023835dc7a65e310cf216f042a17fab1155ba43e47117310a9b7c3fd3bb79f40be40f5124d6b1af9e96399b + languageName: node + linkType: hard + "make-dir@npm:^4.0.0": version: 4.0.0 resolution: "make-dir@npm:4.0.0" @@ -12313,6 +12682,17 @@ __metadata: languageName: node linkType: hard +"mkdirp@npm:^0.5.5": + version: 0.5.6 + resolution: "mkdirp@npm:0.5.6" + dependencies: + minimist: "npm:^1.2.6" + bin: + mkdirp: bin/cmd.js + checksum: 0c91b721bb12c3f9af4b77ebf73604baf350e64d80df91754dc509491ae93bf238581e59c7188360cec7cb62fc4100959245a42cfe01834efedc5e9d068376c2 + languageName: node + linkType: hard + "mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": version: 1.0.4 resolution: "mkdirp@npm:1.0.4" @@ -12362,6 +12742,13 @@ __metadata: languageName: node linkType: hard +"mrmime@npm:^1.0.0": + version: 1.0.1 + resolution: "mrmime@npm:1.0.1" + checksum: a157e833ffe76648ab2107319deeff024b80b136ec66c60fae9d339009a1bb72c57ec1feecfd6a905dfd3df29e2299e850bff84b69cad790cc9bd9ab075834d1 + languageName: node + linkType: hard + "ms@npm:2.0.0": version: 2.0.0 resolution: "ms@npm:2.0.0" @@ -12550,7 +12937,7 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.6.12": +"node-fetch@npm:^2.6.12, node-fetch@npm:^2.6.7": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" dependencies: @@ -12809,6 +13196,15 @@ __metadata: languageName: node linkType: hard +"opener@npm:^1.5.2": + version: 1.5.2 + resolution: "opener@npm:1.5.2" + bin: + opener: bin/opener-bin.js + checksum: 0504efcd6546e14c016a261f58a68acf9f2e5c23d84865d7d5470d5169788327ceaa5386253682f533b3fba4821748aa37ecb395f3dae7acb3261b9b22e36814 + languageName: node + linkType: hard + "optionator@npm:^0.9.1": version: 0.9.1 resolution: "optionator@npm:0.9.1" @@ -13294,6 +13690,13 @@ __metadata: languageName: node linkType: hard +"progress@npm:^2.0.3": + version: 2.0.3 + resolution: "progress@npm:2.0.3" + checksum: e6f0bcb71f716eee9dfac0fe8a2606e3704d6a64dd93baaf49fbadbc8499989a610fe14cf1bc6f61b6d6653c49408d94f4a94e124538084efd8e4cf525e0293d + languageName: node + linkType: hard + "promise-inflight@npm:^1.0.1": version: 1.0.1 resolution: "promise-inflight@npm:1.0.1" @@ -13363,6 +13766,13 @@ __metadata: languageName: node linkType: hard +"proxy-from-env@npm:^1.1.0": + version: 1.1.0 + resolution: "proxy-from-env@npm:1.1.0" + checksum: f0bb4a87cfd18f77bc2fba23ae49c3b378fb35143af16cc478171c623eebe181678f09439707ad80081d340d1593cd54a33a0113f3ccb3f4bc9451488780ee23 + languageName: node + linkType: hard + "public-encrypt@npm:^4.0.0": version: 4.0.3 resolution: "public-encrypt@npm:4.0.3" @@ -13928,7 +14338,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.7, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.0, resolve@npm:^1.22.2": +"resolve@npm:1.22.8, resolve@npm:^1.1.7, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.0, resolve@npm:^1.22.2": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -13954,7 +14364,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.1.7#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.2#optional!builtin": +"resolve@patch:resolve@npm%3A1.22.8#optional!builtin, resolve@patch:resolve@npm%3A^1.1.7#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.2#optional!builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" dependencies: @@ -14015,6 +14425,20 @@ __metadata: languageName: node linkType: hard +"rollup@npm:2.78.0": + version: 2.78.0 + resolution: "rollup@npm:2.78.0" + dependencies: + fsevents: "npm:~2.3.2" + dependenciesMeta: + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 04034ced9df4681649302487bdafc2cac1391ccb38cdd42aa610508840762730d3fdcefddb333c3babe2dc70668392800b7493c282656b1fe883ba9137907930 + languageName: node + linkType: hard + "rpc-websockets@npm:^7.5.1": version: 7.5.1 resolution: "rpc-websockets@npm:7.5.1" @@ -14161,6 +14585,13 @@ __metadata: languageName: node linkType: hard +"server-only@npm:^0.0.1": + version: 0.0.1 + resolution: "server-only@npm:0.0.1" + checksum: c432348956641ea3f460af8dc3765f3a1bdbcf7a1e0205b0756d868e6e6fe8934cdee6bff68401a1dd49ba4a831c75916517a877446d54b334f7de36fa273e53 + languageName: node + linkType: hard + "set-blocking@npm:^2.0.0": version: 2.0.0 resolution: "set-blocking@npm:2.0.0" @@ -14214,6 +14645,17 @@ __metadata: languageName: node linkType: hard +"sirv@npm:^1.0.7": + version: 1.0.19 + resolution: "sirv@npm:1.0.19" + dependencies: + "@polka/url": "npm:^1.0.0-next.20" + mrmime: "npm:^1.0.0" + totalist: "npm:^1.0.0" + checksum: b6833ab4d41f5e449ffcb4d89caac45d97de4b246f984f9b9fa86a0107689562c22d24788b533a58a10cf2cfcebb7e6c678ffa84ac7d3392fca9d18b1bd7ee05 + languageName: node + linkType: hard + "sisteransi@npm:^1.0.5": version: 1.0.5 resolution: "sisteransi@npm:1.0.5" @@ -14364,6 +14806,15 @@ __metadata: languageName: node linkType: hard +"stacktrace-parser@npm:^0.1.10": + version: 0.1.10 + resolution: "stacktrace-parser@npm:0.1.10" + dependencies: + type-fest: "npm:^0.7.1" + checksum: f4fbddfc09121d91e587b60de4beb4941108e967d71ad3a171812dc839b010ca374d064ad0a296295fed13acd103609d99a4224a25b4e67de13cae131f1901ee + languageName: node + linkType: hard + "standard-as-callback@npm:^2.1.0": version: 2.1.0 resolution: "standard-as-callback@npm:2.1.0" @@ -14831,6 +15282,13 @@ __metadata: languageName: node linkType: hard +"totalist@npm:^1.0.0": + version: 1.1.0 + resolution: "totalist@npm:1.1.0" + checksum: dfab80c7104a1d170adc8c18782d6c04b7df08352dec452191208c66395f7ef2af7537ddfa2cf1decbdcfab1a47afbbf0dec6543ea191da98c1c6e1599f86adc + languageName: node + linkType: hard + "tr46@npm:~0.0.3": version: 0.0.3 resolution: "tr46@npm:0.0.3" @@ -14966,6 +15424,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^0.7.1": + version: 0.7.1 + resolution: "type-fest@npm:0.7.1" + checksum: 0699b6011bb3f7fac5fd5385e2e09432cde08fa89283f24084f29db00ec69a5445cd3aa976438ec74fc552a9a96f4a04ed390b5cb62eb7483aa4b6e5b935e059 + languageName: node + linkType: hard + "typedarray-to-buffer@npm:3.1.5": version: 3.1.5 resolution: "typedarray-to-buffer@npm:3.1.5" @@ -15414,6 +15879,32 @@ __metadata: languageName: node linkType: hard +"webpack-bundle-analyzer@npm:4.7.0": + version: 4.7.0 + resolution: "webpack-bundle-analyzer@npm:4.7.0" + dependencies: + acorn: "npm:^8.0.4" + acorn-walk: "npm:^8.0.0" + chalk: "npm:^4.1.0" + commander: "npm:^7.2.0" + gzip-size: "npm:^6.0.0" + lodash: "npm:^4.17.20" + opener: "npm:^1.5.2" + sirv: "npm:^1.0.7" + ws: "npm:^7.3.1" + bin: + webpack-bundle-analyzer: lib/bin/analyzer.js + checksum: 761ffbe721be89f4c2951b04b5d8634cf2bea6edfed6d81d801f4fdbb60dfd271d9d2ba6781ea01697d4e6f4054e3d0a0a940eee947ffba22c69d180f16fb118 + languageName: node + linkType: hard + +"webpack-sources@npm:^2.0.0 || ^3.0.0": + version: 3.2.3 + resolution: "webpack-sources@npm:3.2.3" + checksum: a661f41795d678b7526ae8a88cd1b3d8ce71a7d19b6503da8149b2e667fc7a12f9b899041c1665d39e38245ed3a59ab68de648ea31040c3829aa695a5a45211d + languageName: node + linkType: hard + "webrtc-adapter@npm:^7.2.1": version: 7.7.1 resolution: "webrtc-adapter@npm:7.7.1" @@ -15584,7 +16075,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^7, ws@npm:^7.4.0, ws@npm:^7.4.5, ws@npm:^7.5.1": +"ws@npm:^7, ws@npm:^7.3.1, ws@npm:^7.4.0, ws@npm:^7.4.5, ws@npm:^7.5.1": version: 7.5.9 resolution: "ws@npm:7.5.9" peerDependencies: