diff --git a/packages/smart-router/evm/v3-router/functions/getPairCombinations.ts b/packages/smart-router/evm/v3-router/functions/getPairCombinations.ts index 5ffe7f3a6a04f..52c5198015f73 100644 --- a/packages/smart-router/evm/v3-router/functions/getPairCombinations.ts +++ b/packages/smart-router/evm/v3-router/functions/getPairCombinations.ts @@ -1,12 +1,87 @@ import { ChainId } from '@pancakeswap/chains' import { Currency, Token } from '@pancakeswap/sdk' +import { getTokensByChain } from '@pancakeswap/tokens' +import type { Address } from 'viem' +import { GAUGES_CONFIG, GaugeConfig, GaugeType } from '@pancakeswap/gauges' import flatMap from 'lodash/flatMap.js' import memoize from 'lodash/memoize.js' +import uniqBy from 'lodash/uniqBy.js' import { ADDITIONAL_BASES, BASES_TO_CHECK_TRADES_AGAINST, CUSTOM_BASES } from '../../constants' import { wrappedCurrency } from '../../utils/currency' import { isCurrenciesSameChain } from '../utils' +const allGuages = GAUGES_CONFIG[ChainId.BSC] + +const getToken = memoize( + (chainId?: ChainId, address?: Address): Token | undefined => { + if (!chainId || !address) { + return undefined + } + const tokens = getTokensByChain(chainId) + for (const token of tokens) { + if (token.address.toLowerCase() === address.toLowerCase()) { + return token + } + } + return undefined + }, + (chainId, address) => `${chainId}_${address}`, +) + +// TODO: move to gauges +const getGaugesByChain = memoize( + (chainId?: ChainId): GaugeConfig[] => allGuages.filter((gauge) => gauge.chainId === chainId), + (chainId) => chainId, +) + +function isTokenInCommonBases(token?: Token) { + return Boolean(token && BASES_TO_CHECK_TRADES_AGAINST[token.chainId as ChainId].find((t) => t.equals(token))) +} + +const getTokenBasesFromGauges = memoize( + (currency?: Currency): Token[] => { + const chainId: ChainId | undefined = currency?.chainId + const address = currency?.wrapped.address + const gauges = getGaugesByChain(currency?.chainId) + const bases = new Set() + const addTokenToBases = (token?: Token) => token && !isTokenInCommonBases(token) && bases.add(token) + const addTokensToBases = (tokens: Token[]) => tokens.forEach(addTokenToBases) + const isCurrentToken = (addr: Address) => addr.toLowerCase() === address?.toLowerCase() + + if (currency && chainId && isTokenInCommonBases(currency.wrapped)) { + return [] + } + for (const gauge of gauges) { + const { type } = gauge + if (type === GaugeType.V2 || type === GaugeType.V3) { + const { token0Address, token1Address } = gauge + if (isCurrentToken(token0Address)) { + addTokenToBases(getToken(chainId, token1Address)) + } + if (isCurrentToken(token1Address)) { + addTokenToBases(getToken(chainId, token0Address)) + } + continue + } + if (type === GaugeType.StableSwap) { + const { tokenAddresses } = gauge + const index = tokenAddresses.findIndex(isCurrentToken) + if (index < 0) { + continue + } + addTokensToBases( + [...tokenAddresses.slice(0, index), ...tokenAddresses.slice(index + 1)] + .map((addr) => getToken(chainId, addr)) + .filter((token?: Token): token is Token => Boolean(token)), + ) + } + } + return Array.from(bases) + }, + (c) => `${c?.chainId}_${c?.wrapped.address}`, +) + const resolver = (currencyA?: Currency, currencyB?: Currency) => { if (!currencyA || !currencyB || currencyA.wrapped.equals(currencyB.wrapped)) { return `${currencyA?.chainId}_${currencyA?.wrapped?.address}_${currencyB?.wrapped?.address}` @@ -17,6 +92,28 @@ const resolver = (currencyA?: Currency, currencyB?: Currency) => { return `${token0.chainId}_${token0.address}_${token1.address}` } +type TokenBases = { + [tokenAddress: Address]: Token[] +} + +function getAdditionalCheckAgainstBaseTokens(currencyA?: Currency, currencyB?: Currency) { + const chainId: ChainId | undefined = currencyA?.chainId + const additionalBases: TokenBases = { + ...(chainId ? ADDITIONAL_BASES[chainId] ?? {} : {}), + } + const uniq = (tokens: Token[]) => uniqBy(tokens, (t) => t.address) + const additionalA = + currencyA && chainId + ? uniq([...(additionalBases[currencyA.wrapped.address] || []), ...getTokenBasesFromGauges(currencyA)]) ?? [] + : [] + const additionalB = + currencyB && chainId + ? uniq([...(additionalBases[currencyB.wrapped.address] || []), ...getTokenBasesFromGauges(currencyB)]) ?? [] + : [] + + return [...additionalA, ...additionalB] +} + export const getCheckAgainstBaseTokens = memoize((currencyA?: Currency, currencyB?: Currency): Token[] => { // eslint-disable-next-line prefer-destructuring const chainId: ChainId | undefined = currencyA?.chainId @@ -33,10 +130,8 @@ export const getCheckAgainstBaseTokens = memoize((currencyA?: Currency, currency } const common = BASES_TO_CHECK_TRADES_AGAINST[chainId] ?? [] - const additionalA = tokenA ? ADDITIONAL_BASES[chainId]?.[tokenA.address] ?? [] : [] - const additionalB = tokenB ? ADDITIONAL_BASES[chainId]?.[tokenB.address] ?? [] : [] - return [...common, ...additionalA, ...additionalB] + return [...common, ...getAdditionalCheckAgainstBaseTokens(currencyA, currencyB)] }, resolver) export const getPairCombinations = memoize((currencyA?: Currency, currencyB?: Currency): [Currency, Currency][] => { diff --git a/packages/smart-router/package.json b/packages/smart-router/package.json index 6b7bdb0f1c723..623341ab54fc5 100644 --- a/packages/smart-router/package.json +++ b/packages/smart-router/package.json @@ -24,6 +24,7 @@ ], "dependencies": { "@pancakeswap/chains": "workspace:*", + "@pancakeswap/gauges": "workspace:*", "@pancakeswap/multicall": "workspace:*", "@pancakeswap/sdk": "workspace:*", "@pancakeswap/swap-sdk-core": "workspace:*", diff --git a/packages/tokens/src/allTokens.ts b/packages/tokens/src/allTokens.ts new file mode 100644 index 0000000000000..5e187cbab8836 --- /dev/null +++ b/packages/tokens/src/allTokens.ts @@ -0,0 +1,39 @@ +import { ChainId } from '@pancakeswap/chains' + +import { bscTokens } from './constants/bsc' +import { goerliTestnetTokens } from './constants/goerli' +import { bscTestnetTokens } from './constants/bscTestnet' +import { ethereumTokens } from './constants/eth' +import { arbitrumTokens } from './constants/arb' +import { polygonZkEvmTokens } from './constants/polygonZkEVM' +import { polygonZkEvmTestnetTokens } from './constants/polygonZkEVMTestnet' +import { zksyncTokens } from './constants/zkSync' +import { zkSyncTestnetTokens } from './constants/zkSyncTestnet' +import { lineaTestnetTokens } from './constants/lineaTestnet' +import { lineaTokens } from './constants/linea' +import { arbitrumGoerliTokens } from './constants/arbGoerli' +import { opBnbTokens } from './constants/opBNB' +import { opBnbTestnetTokens } from './constants/opBnbTestnet' +import { baseTokens } from './constants/base' +import { baseTestnetTokens } from './constants/baseTestnet' +import { scrollSepoliaTokens } from './constants/scrollSepolia' + +export const allTokens = { + [ChainId.GOERLI]: goerliTestnetTokens, + [ChainId.BSC]: bscTokens, + [ChainId.BSC_TESTNET]: bscTestnetTokens, + [ChainId.ETHEREUM]: ethereumTokens, + [ChainId.ARBITRUM_ONE]: arbitrumTokens, + [ChainId.POLYGON_ZKEVM]: polygonZkEvmTokens, + [ChainId.POLYGON_ZKEVM_TESTNET]: polygonZkEvmTestnetTokens, + [ChainId.ZKSYNC]: zksyncTokens, + [ChainId.ZKSYNC_TESTNET]: zkSyncTestnetTokens, + [ChainId.LINEA_TESTNET]: lineaTestnetTokens, + [ChainId.LINEA]: lineaTokens, + [ChainId.ARBITRUM_GOERLI]: arbitrumGoerliTokens, + [ChainId.OPBNB]: opBnbTokens, + [ChainId.OPBNB_TESTNET]: opBnbTestnetTokens, + [ChainId.BASE]: baseTokens, + [ChainId.BASE_TESTNET]: baseTestnetTokens, + [ChainId.SCROLL_SEPOLIA]: scrollSepoliaTokens, +} diff --git a/packages/tokens/src/arb.ts b/packages/tokens/src/constants/arb.ts similarity index 100% rename from packages/tokens/src/arb.ts rename to packages/tokens/src/constants/arb.ts diff --git a/packages/tokens/src/arbGoerli.ts b/packages/tokens/src/constants/arbGoerli.ts similarity index 100% rename from packages/tokens/src/arbGoerli.ts rename to packages/tokens/src/constants/arbGoerli.ts diff --git a/packages/tokens/src/base.ts b/packages/tokens/src/constants/base.ts similarity index 100% rename from packages/tokens/src/base.ts rename to packages/tokens/src/constants/base.ts diff --git a/packages/tokens/src/baseTestnet.ts b/packages/tokens/src/constants/baseTestnet.ts similarity index 100% rename from packages/tokens/src/baseTestnet.ts rename to packages/tokens/src/constants/baseTestnet.ts diff --git a/packages/tokens/src/bsc.ts b/packages/tokens/src/constants/bsc.ts similarity index 100% rename from packages/tokens/src/bsc.ts rename to packages/tokens/src/constants/bsc.ts diff --git a/packages/tokens/src/bscTestnet.ts b/packages/tokens/src/constants/bscTestnet.ts similarity index 100% rename from packages/tokens/src/bscTestnet.ts rename to packages/tokens/src/constants/bscTestnet.ts diff --git a/packages/tokens/src/common.ts b/packages/tokens/src/constants/common.ts similarity index 100% rename from packages/tokens/src/common.ts rename to packages/tokens/src/constants/common.ts diff --git a/packages/tokens/src/eth.ts b/packages/tokens/src/constants/eth.ts similarity index 100% rename from packages/tokens/src/eth.ts rename to packages/tokens/src/constants/eth.ts diff --git a/packages/tokens/src/goerli.ts b/packages/tokens/src/constants/goerli.ts similarity index 100% rename from packages/tokens/src/goerli.ts rename to packages/tokens/src/constants/goerli.ts diff --git a/packages/tokens/src/linea.ts b/packages/tokens/src/constants/linea.ts similarity index 100% rename from packages/tokens/src/linea.ts rename to packages/tokens/src/constants/linea.ts diff --git a/packages/tokens/src/lineaTestnet.ts b/packages/tokens/src/constants/lineaTestnet.ts similarity index 100% rename from packages/tokens/src/lineaTestnet.ts rename to packages/tokens/src/constants/lineaTestnet.ts diff --git a/packages/tokens/src/opBNB.ts b/packages/tokens/src/constants/opBNB.ts similarity index 100% rename from packages/tokens/src/opBNB.ts rename to packages/tokens/src/constants/opBNB.ts diff --git a/packages/tokens/src/opBnbTestnet.ts b/packages/tokens/src/constants/opBnbTestnet.ts similarity index 100% rename from packages/tokens/src/opBnbTestnet.ts rename to packages/tokens/src/constants/opBnbTestnet.ts diff --git a/packages/tokens/src/polygonZkEVM.ts b/packages/tokens/src/constants/polygonZkEVM.ts similarity index 100% rename from packages/tokens/src/polygonZkEVM.ts rename to packages/tokens/src/constants/polygonZkEVM.ts diff --git a/packages/tokens/src/polygonZkEVMTestnet.ts b/packages/tokens/src/constants/polygonZkEVMTestnet.ts similarity index 100% rename from packages/tokens/src/polygonZkEVMTestnet.ts rename to packages/tokens/src/constants/polygonZkEVMTestnet.ts diff --git a/packages/tokens/src/scrollSepolia.ts b/packages/tokens/src/constants/scrollSepolia.ts similarity index 100% rename from packages/tokens/src/scrollSepolia.ts rename to packages/tokens/src/constants/scrollSepolia.ts diff --git a/packages/tokens/src/zkSync.ts b/packages/tokens/src/constants/zkSync.ts similarity index 100% rename from packages/tokens/src/zkSync.ts rename to packages/tokens/src/constants/zkSync.ts diff --git a/packages/tokens/src/zkSyncTestnet.ts b/packages/tokens/src/constants/zkSyncTestnet.ts similarity index 100% rename from packages/tokens/src/zkSyncTestnet.ts rename to packages/tokens/src/constants/zkSyncTestnet.ts diff --git a/packages/tokens/src/helpers/getTokensByChain.ts b/packages/tokens/src/helpers/getTokensByChain.ts new file mode 100644 index 0000000000000..0a3af747ce312 --- /dev/null +++ b/packages/tokens/src/helpers/getTokensByChain.ts @@ -0,0 +1,13 @@ +import { ChainId } from '@pancakeswap/chains' +import { Token } from '@pancakeswap/sdk' + +import { allTokens } from '../allTokens' + +export function getTokensByChain(chainId?: ChainId): Token[] { + if (!chainId) { + return [] + } + + const tokenMap = allTokens[chainId] + return Object.values(tokenMap) +} diff --git a/packages/tokens/src/helpers.ts b/packages/tokens/src/helpers/index.ts similarity index 96% rename from packages/tokens/src/helpers.ts rename to packages/tokens/src/helpers/index.ts index 616d84192e483..6fd32036505ba 100644 --- a/packages/tokens/src/helpers.ts +++ b/packages/tokens/src/helpers/index.ts @@ -3,6 +3,8 @@ import { ChainId } from '@pancakeswap/chains' import { enumValues } from '@pancakeswap/utils/enumValues' import { TokenAddressMap } from '@pancakeswap/token-lists' +export * from './getTokensByChain' + const createEmptyList = () => { const list = {} as Record[ChainId]> for (const chainId of enumValues(ChainId)) { diff --git a/packages/tokens/src/index.ts b/packages/tokens/src/index.ts index 267e7450b5783..ced2a1351468a 100644 --- a/packages/tokens/src/index.ts +++ b/packages/tokens/src/index.ts @@ -1,19 +1,19 @@ -export * from './common' +export * from './constants/common' export * from './helpers' -export * from './goerli' -export * from './bsc' -export * from './bscTestnet' -export * from './eth' -export * from './arb' -export * from './polygonZkEVM' -export * from './polygonZkEVMTestnet' -export * from './zkSync' -export * from './zkSyncTestnet' -export * from './lineaTestnet' -export * from './linea' -export * from './arbGoerli' -export * from './opBnbTestnet' -export * from './opBNB' -export * from './base' -export * from './baseTestnet' -export * from './scrollSepolia' +export * from './constants/goerli' +export * from './constants/bsc' +export * from './constants/bscTestnet' +export * from './constants/eth' +export * from './constants/arb' +export * from './constants/polygonZkEVM' +export * from './constants/polygonZkEVMTestnet' +export * from './constants/zkSync' +export * from './constants/zkSyncTestnet' +export * from './constants/lineaTestnet' +export * from './constants/linea' +export * from './constants/arbGoerli' +export * from './constants/opBnbTestnet' +export * from './constants/opBNB' +export * from './constants/base' +export * from './constants/baseTestnet' +export * from './constants/scrollSepolia' diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 445fb770efb02..851ae31463874 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -31,7 +31,7 @@ importers: version: link:packages/tsconfig '@stylelint/postcss-css-in-js': specifier: ^0.37.2 - version: 0.37.3(postcss-syntax@0.36.2)(postcss@8.4.31) + version: 0.37.3(postcss-syntax@0.36.2)(postcss@8.4.33) '@types/node': specifier: ^18.16.2 version: 18.18.9 @@ -298,7 +298,7 @@ importers: version: 4.17.21 next: specifier: 13.5.6 - version: 13.5.6(@babel/core@7.23.3)(react-dom@18.2.0)(react@18.2.0) + version: 13.5.6(@babel/core@7.23.9)(react-dom@18.2.0)(react@18.2.0) next-seo: specifier: ^5.15.0 version: 5.15.0(next@13.5.6)(react-dom@18.2.0)(react@18.2.0) @@ -386,7 +386,7 @@ importers: version: 2.3.2(@types/node@18.0.4)(next@13.5.6)(webpack@5.89.0) next: specifier: 13.5.6 - version: 13.5.6(@babel/core@7.23.3)(react-dom@18.2.0)(react@18.2.0) + version: 13.5.6(@babel/core@7.23.9)(react-dom@18.2.0)(react@18.2.0) next-seo: specifier: ^5.15.0 version: 5.15.0(next@13.5.6)(react-dom@18.2.0)(react@18.2.0) @@ -471,7 +471,7 @@ importers: version: 5.7.2 next: specifier: 13.5.6 - version: 13.5.6(@babel/core@7.23.3)(react-dom@18.2.0)(react@18.2.0) + version: 13.5.6(@babel/core@7.23.9)(react-dom@18.2.0)(react@18.2.0) next-themes: specifier: ^0.2.1 version: 0.2.1(next@13.5.6)(react-dom@18.2.0)(react@18.2.0) @@ -486,7 +486,7 @@ importers: version: 6.0.7(babel-plugin-styled-components@1.13.3)(react-dom@18.2.0)(react@18.2.0) styled-jsx: specifier: ^5.1.2 - version: 5.1.2(@babel/core@7.23.3)(react@18.2.0) + version: 5.1.2(@babel/core@7.23.9)(react@18.2.0) viem: specifier: 1.19.11 version: 1.19.11(typescript@5.2.2)(zod@3.22.4) @@ -560,7 +560,7 @@ importers: version: 4.17.21 next: specifier: 13.5.6 - version: 13.5.6(@babel/core@7.23.3)(react-dom@18.2.0)(react@18.2.0) + version: 13.5.6(@babel/core@7.23.9)(react-dom@18.2.0)(react@18.2.0) next-seo: specifier: ^5.15.0 version: 5.15.0(next@13.5.6)(react-dom@18.2.0)(react@18.2.0) @@ -813,7 +813,7 @@ importers: version: 4.17.21 next: specifier: 13.5.6 - version: 13.5.6(@babel/core@7.23.3)(react-dom@18.2.0)(react@18.2.0) + version: 13.5.6(@babel/core@7.23.9)(react-dom@18.2.0)(react@18.2.0) next-seo: specifier: ^5.15.0 version: 5.15.0(next@13.5.6)(react-dom@18.2.0)(react@18.2.0) @@ -913,7 +913,7 @@ importers: version: link:../../packages/tsconfig '@stylelint/postcss-css-in-js': specifier: ^0.37.2 - version: 0.37.3(postcss-syntax@0.36.2)(postcss@8.4.31) + version: 0.37.3(postcss-syntax@0.36.2)(postcss@8.4.33) '@testing-library/jest-dom': specifier: ^5.16.2 version: 5.17.0 @@ -994,10 +994,10 @@ importers: version: 12.5.0 postcss-scss: specifier: ^4.0.3 - version: 4.0.9(postcss@8.4.31) + version: 4.0.9(postcss@8.4.33) postcss-syntax: specifier: ^0.36.2 - version: 0.36.2(postcss-scss@4.0.9)(postcss@8.4.31) + version: 0.36.2(postcss-scss@4.0.9)(postcss@8.4.33) prettier: specifier: ^2.8.3 version: 2.8.8 @@ -1085,7 +1085,7 @@ importers: version: 4.0.5 tsup: specifier: ^6.7.0 - version: 6.7.0(postcss@8.4.31)(typescript@5.2.2) + version: 6.7.0(postcss@8.4.33)(typescript@5.2.2) packages/awgmi: dependencies: @@ -1134,7 +1134,7 @@ importers: version: 13.3.8 tsup: specifier: ^6.7.0 - version: 6.7.0(postcss@8.4.31)(typescript@5.2.2) + version: 6.7.0(postcss@8.4.33)(typescript@5.2.2) packages/blog: dependencies: @@ -1159,7 +1159,7 @@ importers: devDependencies: tsup: specifier: ^6.7.0 - version: 6.7.0(postcss@8.4.31)(typescript@5.2.2) + version: 6.7.0(postcss@8.4.33)(typescript@5.2.2) packages/eslint-config: dependencies: @@ -1282,7 +1282,7 @@ importers: version: 4.17.21 tsup: specifier: ^6.7.0 - version: 6.7.0(postcss@8.4.31)(typescript@5.2.2) + version: 6.7.0(postcss@8.4.33)(typescript@5.2.2) packages/hooks: dependencies: @@ -1391,7 +1391,7 @@ importers: version: link:../utils tsup: specifier: ^6.7.0 - version: 6.7.0(postcss@8.4.31)(typescript@5.2.2) + version: 6.7.0(postcss@8.4.33)(typescript@5.2.2) packages/next-config: devDependencies: @@ -1434,7 +1434,7 @@ importers: version: 4.14.201 tsup: specifier: ^6.7.0 - version: 6.7.0(postcss@8.4.31)(typescript@5.2.2) + version: 6.7.0(postcss@8.4.33)(typescript@5.2.2) packages/position-managers: dependencies: @@ -1506,6 +1506,9 @@ importers: '@pancakeswap/chains': specifier: workspace:* version: link:../chains + '@pancakeswap/gauges': + specifier: workspace:* + version: link:../gauges '@pancakeswap/multicall': specifier: workspace:* version: link:../multicall @@ -1575,7 +1578,7 @@ importers: version: 2.2.2 tsup: specifier: ^6.7.0 - version: 6.7.0(postcss@8.4.31)(typescript@5.2.2) + version: 6.7.0(postcss@8.4.33)(typescript@5.2.2) packages/swap-sdk: dependencies: @@ -1609,7 +1612,7 @@ importers: version: 4.0.5 tsup: specifier: ^6.7.0 - version: 6.7.0(postcss@8.4.31)(typescript@5.2.2) + version: 6.7.0(postcss@8.4.33)(typescript@5.2.2) packages/swap-sdk-core: dependencies: @@ -1634,7 +1637,7 @@ importers: version: 4.0.5 tsup: specifier: ^6.7.0 - version: 6.7.0(postcss@8.4.31)(typescript@5.2.2) + version: 6.7.0(postcss@8.4.33)(typescript@5.2.2) packages/token-lists: dependencies: @@ -1668,7 +1671,7 @@ importers: version: 18.2.0 tsup: specifier: ^6.7.0 - version: 6.7.0(postcss@8.4.31)(typescript@5.2.2) + version: 6.7.0(postcss@8.4.33)(typescript@5.2.2) packages/tokens: dependencies: @@ -1687,7 +1690,7 @@ importers: version: link:../utils tsup: specifier: ^6.7.0 - version: 6.7.0(postcss@8.4.31)(typescript@5.2.2) + version: 6.7.0(postcss@8.4.33)(typescript@5.2.2) packages/tsconfig: {} @@ -2034,7 +2037,7 @@ importers: version: link:../utils tsup: specifier: ^6.7.0 - version: 6.7.0(postcss@8.4.31)(typescript@5.2.2) + version: 6.7.0(postcss@8.4.33)(typescript@5.2.2) packages/wagmi: devDependencies: @@ -2055,7 +2058,7 @@ importers: version: 18.2.0(react@18.2.0) tsup: specifier: ^6.7.0 - version: 6.7.0(postcss@8.4.31)(typescript@5.2.2) + version: 6.7.0(postcss@8.4.33)(typescript@5.2.2) viem: specifier: 1.19.11 version: 1.19.11(typescript@5.2.2)(zod@3.22.4) @@ -2122,7 +2125,7 @@ importers: devDependencies: '@sentry/nextjs': specifier: ^7.0.0 - version: 7.80.0(encoding@0.1.13)(next@13.5.6)(react@18.2.0)(webpack@5.89.0) + version: 7.80.0(encoding@0.1.13)(next@13.5.6)(react@18.2.0) '@types/lodash': specifier: ^4.14.168 version: 4.14.201 @@ -2336,7 +2339,6 @@ packages: dependencies: '@babel/highlight': 7.23.4 chalk: 2.4.2 - dev: true /@babel/compat-data@7.23.3: resolution: {integrity: sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==} @@ -2345,7 +2347,6 @@ packages: /@babel/compat-data@7.23.5: resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} engines: {node: '>=6.9.0'} - dev: true /@babel/core@7.23.3: resolution: {integrity: sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==} @@ -2390,7 +2391,6 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true /@babel/generator@7.23.3: resolution: {integrity: sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==} @@ -2409,7 +2409,6 @@ packages: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.20 jsesc: 2.5.2 - dev: true /@babel/helper-annotate-as-pure@7.22.5: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} @@ -2442,7 +2441,6 @@ packages: browserslist: 4.22.3 lru-cache: 5.1.1 semver: 6.3.1 - dev: true /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.23.3): resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} @@ -2540,7 +2538,6 @@ packages: '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 - dev: true /@babel/helper-optimise-call-expression@7.22.5: resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} @@ -2599,7 +2596,6 @@ packages: /@babel/helper-string-parser@7.23.4: resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-validator-identifier@7.22.20: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} @@ -2612,7 +2608,6 @@ packages: /@babel/helper-validator-option@7.23.5: resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-wrap-function@7.22.20: resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} @@ -2641,7 +2636,6 @@ packages: '@babel/types': 7.23.9 transitivePeerDependencies: - supports-color - dev: true /@babel/highlight@7.22.20: resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} @@ -2658,7 +2652,6 @@ packages: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 - dev: true /@babel/parser@7.23.3: resolution: {integrity: sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==} @@ -2673,7 +2666,6 @@ packages: hasBin: true dependencies: '@babel/types': 7.23.9 - dev: true /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.3): resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} @@ -3716,7 +3708,6 @@ packages: '@babel/code-frame': 7.23.5 '@babel/parser': 7.23.9 '@babel/types': 7.23.9 - dev: true /@babel/traverse@7.23.3: resolution: {integrity: sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==} @@ -3751,7 +3742,6 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color - dev: true /@babel/types@7.23.3: resolution: {integrity: sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==} @@ -3768,7 +3758,6 @@ packages: '@babel/helper-string-parser': 7.23.4 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 - dev: true /@base2/pretty-print-object@1.0.1: resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} @@ -7909,7 +7898,7 @@ packages: '@sentry/utils': 7.80.0 localforage: 1.10.0 - /@sentry/nextjs@7.80.0(encoding@0.1.13)(next@13.5.6)(react@18.2.0)(webpack@5.89.0): + /@sentry/nextjs@7.80.0(encoding@0.1.13)(next@13.5.6)(react@18.2.0): resolution: {integrity: sha512-4KZVZV1U/1ldmVKS85n31MSKIWJElcy9gZW+PTyQnrlCxbQnnhXBde95+TXmvO1DKTNhVphv/2DXq7bmxBW9bA==} engines: {node: '>=8'} peerDependencies: @@ -7935,10 +7924,42 @@ packages: resolve: 1.22.8 rollup: 2.78.0 stacktrace-parser: 0.1.10 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@sentry/nextjs@7.80.0(encoding@0.1.13)(next@13.5.6)(react@18.2.0)(webpack@5.89.0): + resolution: {integrity: sha512-4KZVZV1U/1ldmVKS85n31MSKIWJElcy9gZW+PTyQnrlCxbQnnhXBde95+TXmvO1DKTNhVphv/2DXq7bmxBW9bA==} + engines: {node: '>=8'} + 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 + dependencies: + '@rollup/plugin-commonjs': 24.0.0(rollup@2.78.0) + '@sentry/core': 7.80.0 + '@sentry/integrations': 7.80.0 + '@sentry/node': 7.80.0 + '@sentry/react': 7.80.0(react@18.2.0) + '@sentry/types': 7.80.0 + '@sentry/utils': 7.80.0 + '@sentry/vercel-edge': 7.80.0 + '@sentry/webpack-plugin': 1.20.0(encoding@0.1.13) + chalk: 3.0.0 + next: 13.5.6(@babel/core@7.23.9)(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + resolve: 1.22.8 + rollup: 2.78.0 + stacktrace-parser: 0.1.10 webpack: 5.89.0(esbuild@0.19.8) transitivePeerDependencies: - encoding - supports-color + dev: false /@sentry/node@7.80.0: resolution: {integrity: sha512-J35fqe8J5ac/17ZXT0ML3opYGTOclqYNE9Sybs1y9n6BqacHyzH8By72YrdI03F7JJDHwrcGw+/H8hGpkCwi0Q==} @@ -9142,7 +9163,7 @@ packages: '@styled-system/css': 5.1.5 dev: false - /@stylelint/postcss-css-in-js@0.37.3(postcss-syntax@0.36.2)(postcss@8.4.31): + /@stylelint/postcss-css-in-js@0.37.3(postcss-syntax@0.36.2)(postcss@8.4.33): resolution: {integrity: sha512-scLk3cSH1H9KggSniseb2KNAU5D9FWc3H7BxCSAIdtU9OWIyw0zkEZ9qEKHryRM+SExYXRKNb7tOOVNAsQ3iwg==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: @@ -9150,8 +9171,8 @@ packages: postcss-syntax: '>=0.36.2' dependencies: '@babel/core': 7.23.3 - postcss: 8.4.31 - postcss-syntax: 0.36.2(postcss-scss@4.0.9)(postcss@8.4.31) + postcss: 8.4.33 + postcss-syntax: 0.36.2(postcss-scss@4.0.9)(postcss@8.4.33) transitivePeerDependencies: - supports-color dev: true @@ -10437,7 +10458,7 @@ packages: next: '>=12.1.7' dependencies: '@vanilla-extract/webpack-plugin': 2.3.1(@types/node@13.13.52)(webpack@5.89.0) - next: 13.5.6(@babel/core@7.23.3)(react-dom@18.2.0)(react@18.2.0) + next: 13.5.6(@babel/core@7.23.9)(react-dom@18.2.0)(react@18.2.0) transitivePeerDependencies: - '@types/node' - less @@ -10455,7 +10476,7 @@ packages: next: '>=12.1.7' dependencies: '@vanilla-extract/webpack-plugin': 2.3.1(@types/node@18.0.4)(webpack@5.89.0) - next: 13.5.6(@babel/core@7.23.3)(react-dom@18.2.0)(react@18.2.0) + next: 13.5.6(@babel/core@7.23.9)(react-dom@18.2.0)(react@18.2.0) transitivePeerDependencies: - '@types/node' - less @@ -13135,7 +13156,6 @@ packages: electron-to-chromium: 1.4.655 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.3) - dev: true /bs58@4.0.1: resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} @@ -13301,7 +13321,6 @@ packages: /caniuse-lite@1.0.30001582: resolution: {integrity: sha512-vsJG3V5vgfduaQGVxL53uSX/HUzxyr2eA8xCo36OLal7sRcSZbibJtLeh0qja4sFOr/QQGt4opB4tOy+eOgAxg==} - dev: true /canvas-confetti@1.9.0: resolution: {integrity: sha512-0UGU/T5Un/Cd4Aj4fu/p/oVQm8Il+brK5xcmY+y77u7PXuyNJD4ODUWe01A5o3GUI9Bb8lOBlQ10VdaDsY1FBA==} @@ -14739,7 +14758,6 @@ packages: /electron-to-chromium@1.4.655: resolution: {integrity: sha512-2yszojF7vIZ68adIOvzV4bku8OZad9w5H9xF3ZAMZjPuOjBarlflUkjN6DggdV+L71WZuKUfKUhov/34+G5QHg==} - dev: true /elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} @@ -18795,7 +18813,7 @@ packages: react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - next: 13.5.6(@babel/core@7.23.3)(react-dom@18.2.0)(react@18.2.0) + next: 13.5.6(@babel/core@7.23.9)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -18807,7 +18825,7 @@ packages: react: '*' react-dom: '*' dependencies: - next: 13.5.6(@babel/core@7.23.3)(react-dom@18.2.0)(react@18.2.0) + next: 13.5.6(@babel/core@7.23.9)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -18849,6 +18867,44 @@ packages: - '@babel/core' - babel-plugin-macros + /next@13.5.6(@babel/core@7.23.9)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Y2wTcTbO4WwEsVb4A8VSnOsG1I9ok+h74q0ZdxkwM3EODqrs4pasq7O0iUxbcS9VtWMicG7f3+HAj0r1+NtKSw==} + engines: {node: '>=16.14.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + sass: + optional: true + dependencies: + '@next/env': 13.5.6 + '@swc/helpers': 0.5.2 + busboy: 1.6.0 + caniuse-lite: 1.0.30001561 + postcss: 8.4.31 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + styled-jsx: 5.1.1(@babel/core@7.23.9)(react@18.2.0) + watchpack: 2.4.0 + optionalDependencies: + '@next/swc-darwin-arm64': 13.5.6 + '@next/swc-darwin-x64': 13.5.6 + '@next/swc-linux-arm64-gnu': 13.5.6 + '@next/swc-linux-arm64-musl': 13.5.6 + '@next/swc-linux-x64-gnu': 13.5.6 + '@next/swc-linux-x64-musl': 13.5.6 + '@next/swc-win32-arm64-msvc': 13.5.6 + '@next/swc-win32-ia32-msvc': 13.5.6 + '@next/swc-win32-x64-msvc': 13.5.6 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + /nice-try@1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} dev: true @@ -18911,7 +18967,6 @@ packages: /node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - dev: true /normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} @@ -19567,6 +19622,23 @@ packages: yaml: 1.10.2 dev: true + /postcss-load-config@3.1.4(postcss@8.4.33): + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.1.0 + postcss: 8.4.33 + yaml: 1.10.2 + dev: true + /postcss-load-config@4.0.2(postcss@8.4.31): resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} engines: {node: '>= 14'} @@ -19611,13 +19683,13 @@ packages: postcss: 8.4.31 dev: true - /postcss-scss@4.0.9(postcss@8.4.31): + /postcss-scss@4.0.9(postcss@8.4.33): resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.4.29 dependencies: - postcss: 8.4.31 + postcss: 8.4.33 dev: true /postcss-selector-parser@6.0.13: @@ -19627,7 +19699,7 @@ packages: cssesc: 3.0.0 util-deprecate: 1.0.2 - /postcss-syntax@0.36.2(postcss-scss@4.0.9)(postcss@8.4.31): + /postcss-syntax@0.36.2(postcss-scss@4.0.9)(postcss@8.4.33): resolution: {integrity: sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==} peerDependencies: postcss: '>=5.0.0' @@ -19648,8 +19720,8 @@ packages: postcss-scss: optional: true dependencies: - postcss: 8.4.31 - postcss-scss: 4.0.9(postcss@8.4.31) + postcss: 8.4.33 + postcss-scss: 4.0.9(postcss@8.4.33) dev: true /postcss-value-parser@3.3.1: @@ -21882,7 +21954,24 @@ packages: client-only: 0.0.1 react: 18.2.0 - /styled-jsx@5.1.2(@babel/core@7.23.3)(react@18.2.0): + /styled-jsx@5.1.1(@babel/core@7.23.9)(react@18.2.0): + resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + dependencies: + '@babel/core': 7.23.9 + client-only: 0.0.1 + react: 18.2.0 + + /styled-jsx@5.1.2(@babel/core@7.23.9)(react@18.2.0): resolution: {integrity: sha512-FI5r0a5ED2/+DSdG2ZRz3a4FtNQnKPLadauU5v76a9QsscwZrWggQKOmyxGGP5EWKbyY3bsuWAJYzyKaDAVAcw==} engines: {node: '>= 12.0.0'} peerDependencies: @@ -21895,7 +21984,7 @@ packages: babel-plugin-macros: optional: true dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.9 client-only: 0.0.1 react: 18.2.0 dev: false @@ -22293,6 +22382,7 @@ packages: serialize-javascript: 6.0.1 terser: 5.24.0 webpack: 5.89.0(esbuild@0.19.8) + dev: false /terser@5.24.0: resolution: {integrity: sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==} @@ -22550,7 +22640,7 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - /tsup@6.7.0(postcss@8.4.31)(typescript@5.2.2): + /tsup@6.7.0(postcss@8.4.33)(typescript@5.2.2): resolution: {integrity: sha512-L3o8hGkaHnu5TdJns+mCqFsDBo83bJ44rlK7e6VdanIvpea4ArPcU3swWGsLVbXak1PqQx/V+SSmFPujBK+zEQ==} engines: {node: '>=14.18'} hasBin: true @@ -22574,8 +22664,8 @@ packages: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss: 8.4.31 - postcss-load-config: 3.1.4(postcss@8.4.31) + postcss: 8.4.33 + postcss-load-config: 3.1.4(postcss@8.4.33) resolve-from: 5.0.0 rollup: 3.29.4 source-map: 0.8.0-beta.0 @@ -23053,7 +23143,6 @@ packages: browserslist: 4.22.3 escalade: 3.1.1 picocolors: 1.0.0 - dev: true /update-check@1.5.2: resolution: {integrity: sha512-1TrmYLuLj/5ZovwUS7fFd1jMH3NnFDN1y1A8dboedIDt7zs/zJMo6TwwlhYKkSeEwzleeiSBV5/3c9ufAQWDaQ==} @@ -23873,7 +23962,7 @@ packages: '@webassemblyjs/wasm-parser': 1.11.6 acorn: 8.11.2 acorn-import-assertions: 1.9.0(acorn@8.11.2) - browserslist: 4.22.1 + browserslist: 4.22.3 chrome-trace-event: 1.0.3 enhanced-resolve: 5.15.0 es-module-lexer: 1.4.1 @@ -23913,7 +24002,7 @@ packages: '@webassemblyjs/wasm-parser': 1.11.6 acorn: 8.11.2 acorn-import-assertions: 1.9.0(acorn@8.11.2) - browserslist: 4.22.1 + browserslist: 4.22.3 chrome-trace-event: 1.0.3 enhanced-resolve: 5.15.0 es-module-lexer: 1.4.1 @@ -23953,7 +24042,7 @@ packages: '@webassemblyjs/wasm-parser': 1.11.6 acorn: 8.11.2 acorn-import-assertions: 1.9.0(acorn@8.11.2) - browserslist: 4.22.1 + browserslist: 4.22.3 chrome-trace-event: 1.0.3 enhanced-resolve: 5.15.0 es-module-lexer: 1.4.1 @@ -23974,6 +24063,7 @@ packages: - '@swc/core' - esbuild - uglify-js + dev: false /whatwg-mimetype@3.0.0: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==}