From 1cb4faa93daa01ee0d7306e5c7b4ea877c7321a6 Mon Sep 17 00:00:00 2001 From: Steven Luscher Date: Fri, 15 Sep 2023 19:35:30 +0000 Subject: [PATCH] chore: delete Sentry # Summary One of the central tenets of measurement is this question: are you prepared to change what you work on based on the outcome of the data. Explorer is not under the kind of active development that requires deep insights into runtime data at this time. Put another way, I personally have never performed work on the Explorer based on a result that I observed in Sentry. Until this changes, let's get rid of it. --- .gitignore | 3 - .../account/FeatureAccountSection.tsx | 2 +- .../account/TokenAccountSection.tsx | 3 +- app/components/account/TokenHistoryCard.tsx | 9 +- .../account/history/TokenTransfersCard.tsx | 3 +- .../AddressLookupTableDetailsCard.tsx | 3 +- .../instruction/ComputeBudgetDetailsCard.tsx | 3 +- app/components/instruction/MangoDetails.tsx | 3 +- .../instruction/SerumDetailsCard.tsx | 3 +- .../instruction/TokenLendingDetailsCard.tsx | 3 +- .../instruction/TokenSwapDetailsCard.tsx | 3 +- .../instruction/WormholeDetailsCard.tsx | 3 +- .../AssociatedTokenDetailsCard.tsx | 3 +- .../bpf-loader/BpfLoaderDetailsCard.tsx | 3 +- .../BpfUpgradeableLoaderDetailsCard.tsx | 3 +- .../instruction/pyth/PythDetailsCard.tsx | 3 +- .../instruction/stake/StakeDetailsCard.tsx | 3 +- .../instruction/system/SystemDetailsCard.tsx | 3 +- .../instruction/vote/VoteDetailsCard.tsx | 3 +- .../transaction/InstructionsSection.tsx | 2 +- app/providers/accounts/history.tsx | 5 +- app/providers/accounts/index.tsx | 9 +- app/providers/accounts/rewards.tsx | 5 +- app/providers/accounts/tokens.tsx | 3 +- app/providers/accounts/vote-accounts.tsx | 3 +- app/providers/block.tsx | 3 +- app/providers/cluster.tsx | 3 +- app/providers/epoch.tsx | 3 +- app/providers/richList.tsx | 3 +- app/providers/stats/solanaClusterStats.tsx | 7 +- app/providers/supply.tsx | 3 +- app/providers/transactions/index.tsx | 5 +- app/providers/transactions/parsed.tsx | 3 +- app/providers/transactions/raw.tsx | 3 +- app/utils/instruction.ts | 5 +- app/utils/sentry.ts | 22 -- app/utils/token-info.ts | 2 +- app/utils/token-search.ts | 5 +- next.config.mjs | 30 +- package.json | 5 +- pnpm-lock.yaml | 321 ++---------------- sentry.client.config.ts | 15 - sentry.edge.config.ts | 16 - sentry.server.config.ts | 15 - 44 files changed, 78 insertions(+), 480 deletions(-) delete mode 100644 app/utils/sentry.ts delete mode 100644 sentry.client.config.ts delete mode 100644 sentry.edge.config.ts delete mode 100644 sentry.server.config.ts diff --git a/.gitignore b/.gitignore index e23e969e..46b944d5 100644 --- a/.gitignore +++ b/.gitignore @@ -34,8 +34,5 @@ yarn-error.log* *.tsbuildinfo next-env.d.ts -# Sentry Auth Token -.sentryclirc - # Speedy Web Compiler .swc/ \ No newline at end of file diff --git a/app/components/account/FeatureAccountSection.tsx b/app/components/account/FeatureAccountSection.tsx index 393b653f..441af8b3 100644 --- a/app/components/account/FeatureAccountSection.tsx +++ b/app/components/account/FeatureAccountSection.tsx @@ -1,9 +1,9 @@ import { Address } from '@components/common/Address'; import { TableCardBody } from '@components/common/TableCardBody'; import { Account } from '@providers/accounts'; -import { ErrorBoundary } from '@sentry/nextjs'; import { PublicKey } from '@solana/web3.js'; import { parseFeatureAccount } from '@utils/parseFeatureAccount'; +import { ErrorBoundary } from 'react-error-boundary'; import { UnknownAccountCard } from './UnknownAccountCard'; diff --git a/app/components/account/TokenAccountSection.tsx b/app/components/account/TokenAccountSection.tsx index 8df43f6a..a80f6a73 100644 --- a/app/components/account/TokenAccountSection.tsx +++ b/app/components/account/TokenAccountSection.tsx @@ -10,7 +10,6 @@ import { Cluster } from '@utils/cluster'; import { CoingeckoStatus, useCoinGecko } from '@utils/coingecko'; import { displayTimestampWithoutDate } from '@utils/date'; import { abbreviatedNumber, normalizeTokenAmount } from '@utils/index'; -import { reportError } from '@utils/sentry'; import { addressLabel } from '@utils/tx'; import { MintAccountInfo, MultisigAccountInfo, TokenAccount, TokenAccountInfo } from '@validators/accounts/token'; import { BigNumber } from 'bignumber.js'; @@ -67,7 +66,7 @@ export function TokenAccountSection({ account, tokenAccount, tokenInfo }: { acco } } catch (err) { if (cluster !== Cluster.Custom) { - reportError(err, { + console.error(err, { address: account.pubkey.toBase58(), }); } diff --git a/app/components/account/TokenHistoryCard.tsx b/app/components/account/TokenHistoryCard.tsx index 1bb127bd..85c4e290 100644 --- a/app/components/account/TokenHistoryCard.tsx +++ b/app/components/account/TokenHistoryCard.tsx @@ -21,7 +21,6 @@ import { ConfirmedSignatureInfo, ParsedInstruction, PartiallyDecodedInstruction, import { Cluster } from '@utils/cluster'; import { INNER_INSTRUCTIONS_START_SLOT } from '@utils/index'; import { getTokenProgramInstructionName } from '@utils/instruction'; -import { reportError } from '@utils/sentry'; import { displayAddress, intoTransactionInstruction } from '@utils/tx'; import Link from 'next/link'; import { usePathname, useSearchParams } from 'next/navigation'; @@ -401,28 +400,28 @@ const TokenTransactionRow = React.memo(function TokenTransactionRow({ try { name = parseSerumInstructionTitle(transactionInstruction); } catch (error) { - reportError(error, { signature: tx.signature }); + console.error(error, { signature: tx.signature }); return undefined; } } else if (transactionInstruction && isTokenSwapInstruction(transactionInstruction)) { try { name = parseTokenSwapInstructionTitle(transactionInstruction); } catch (error) { - reportError(error, { signature: tx.signature }); + console.error(error, { signature: tx.signature }); return undefined; } } else if (transactionInstruction && isTokenLendingInstruction(transactionInstruction)) { try { name = parseTokenLendingInstructionTitle(transactionInstruction); } catch (error) { - reportError(error, { signature: tx.signature }); + console.error(error, { signature: tx.signature }); return undefined; } } else if (transactionInstruction && isMangoInstruction(transactionInstruction)) { try { name = parseMangoInstructionTitle(transactionInstruction); } catch (error) { - reportError(error, { signature: tx.signature }); + console.error(error, { signature: tx.signature }); return undefined; } } else { diff --git a/app/components/account/history/TokenTransfersCard.tsx b/app/components/account/history/TokenTransfersCard.tsx index edfa0835..714135ee 100644 --- a/app/components/account/history/TokenTransfersCard.tsx +++ b/app/components/account/history/TokenTransfersCard.tsx @@ -13,7 +13,6 @@ import { ParsedInstruction, ParsedTransactionWithMeta, PartiallyDecodedInstructi import { Cluster } from '@utils/cluster'; import { normalizeTokenAmount } from '@utils/index'; import { InstructionContainer } from '@utils/instruction'; -import { reportError } from '@utils/sentry'; import React, { useMemo } from 'react'; import Moment from 'react-moment'; import { create } from 'superstruct'; @@ -231,7 +230,7 @@ function getTransfer( } } catch (error) { if (cluster === Cluster.MainnetBeta) { - reportError(error, { + console.error(error, { signature, }); } diff --git a/app/components/instruction/AddressLookupTableDetailsCard.tsx b/app/components/instruction/AddressLookupTableDetailsCard.tsx index 67aee57a..f514be54 100644 --- a/app/components/instruction/AddressLookupTableDetailsCard.tsx +++ b/app/components/instruction/AddressLookupTableDetailsCard.tsx @@ -1,6 +1,5 @@ import { useCluster } from '@providers/cluster'; import { SignatureResult, TransactionInstruction } from '@solana/web3.js'; -import { reportError } from '@utils/sentry'; import React from 'react'; import { parseAddressLookupTableInstructionTitle } from './address-lookup-table/types'; @@ -27,7 +26,7 @@ export function AddressLookupTableDetailsCard({ try { title = parseAddressLookupTableInstructionTitle(ix); } catch (error) { - reportError(error, { + console.error(error, { signature: signature, url: url, }); diff --git a/app/components/instruction/ComputeBudgetDetailsCard.tsx b/app/components/instruction/ComputeBudgetDetailsCard.tsx index 100b86d1..97cb099c 100644 --- a/app/components/instruction/ComputeBudgetDetailsCard.tsx +++ b/app/components/instruction/ComputeBudgetDetailsCard.tsx @@ -3,7 +3,6 @@ import { SolBalance } from '@components/common/SolBalance'; import { useCluster } from '@providers/cluster'; import { ComputeBudgetInstruction, SignatureResult, TransactionInstruction } from '@solana/web3.js'; import { microLamportsToLamportsString } from '@utils/index'; -import { reportError } from '@utils/sentry'; import React from 'react'; import { InstructionCard } from './InstructionCard'; @@ -144,7 +143,7 @@ export function ComputeBudgetDetailsCard({ } } } catch (error) { - reportError(error, { + console.error(error, { signature: signature, url: url, }); diff --git a/app/components/instruction/MangoDetails.tsx b/app/components/instruction/MangoDetails.tsx index 8db68473..976d945f 100644 --- a/app/components/instruction/MangoDetails.tsx +++ b/app/components/instruction/MangoDetails.tsx @@ -1,6 +1,5 @@ import { useCluster } from '@providers/cluster'; import { SignatureResult, TransactionInstruction } from '@solana/web3.js'; -import { reportError } from '@utils/sentry'; import { InstructionCard } from './InstructionCard'; import { AddOracleDetailsCard } from './mango/AddOracleDetailsCard'; @@ -93,7 +92,7 @@ export function MangoDetailsCard(props: { return ; } } catch (error) { - reportError(error, { + console.error(error, { signature: signature, url: url, }); diff --git a/app/components/instruction/SerumDetailsCard.tsx b/app/components/instruction/SerumDetailsCard.tsx index 37d01c0b..b87dcb59 100644 --- a/app/components/instruction/SerumDetailsCard.tsx +++ b/app/components/instruction/SerumDetailsCard.tsx @@ -1,6 +1,5 @@ import { useCluster } from '@providers/cluster'; import { SignatureResult, TransactionInstruction } from '@solana/web3.js'; -import { reportError } from '@utils/sentry'; import React from 'react'; import { InstructionCard } from './InstructionCard'; @@ -97,7 +96,7 @@ export function SerumDetailsCard(initialProps: { return ; } } catch (error) { - reportError(error, { + console.error(error, { signature: signature, url: url, }); diff --git a/app/components/instruction/TokenLendingDetailsCard.tsx b/app/components/instruction/TokenLendingDetailsCard.tsx index a82c0f25..d61c18a9 100644 --- a/app/components/instruction/TokenLendingDetailsCard.tsx +++ b/app/components/instruction/TokenLendingDetailsCard.tsx @@ -1,6 +1,5 @@ import { useCluster } from '@providers/cluster'; import { SignatureResult, TransactionInstruction } from '@solana/web3.js'; -import { reportError } from '@utils/sentry'; import React from 'react'; import { InstructionCard } from './InstructionCard'; @@ -27,7 +26,7 @@ export function TokenLendingDetailsCard({ try { title = parseTokenLendingInstructionTitle(ix); } catch (error) { - reportError(error, { + console.error(error, { signature: signature, url: url, }); diff --git a/app/components/instruction/TokenSwapDetailsCard.tsx b/app/components/instruction/TokenSwapDetailsCard.tsx index 1d99d7f2..8ac5ae96 100644 --- a/app/components/instruction/TokenSwapDetailsCard.tsx +++ b/app/components/instruction/TokenSwapDetailsCard.tsx @@ -1,6 +1,5 @@ import { useCluster } from '@providers/cluster'; import { SignatureResult, TransactionInstruction } from '@solana/web3.js'; -import { reportError } from '@utils/sentry'; import React from 'react'; import { InstructionCard } from './InstructionCard'; @@ -27,7 +26,7 @@ export function TokenSwapDetailsCard({ try { title = parseTokenSwapInstructionTitle(ix); } catch (error) { - reportError(error, { + console.error(error, { signature: signature, url: url, }); diff --git a/app/components/instruction/WormholeDetailsCard.tsx b/app/components/instruction/WormholeDetailsCard.tsx index 6463daba..cad22f76 100644 --- a/app/components/instruction/WormholeDetailsCard.tsx +++ b/app/components/instruction/WormholeDetailsCard.tsx @@ -1,6 +1,5 @@ import { useCluster } from '@providers/cluster'; import { SignatureResult, TransactionInstruction } from '@solana/web3.js'; -import { reportError } from '@utils/sentry'; import React from 'react'; import { InstructionCard } from './InstructionCard'; @@ -27,7 +26,7 @@ export function WormholeDetailsCard({ try { title = parsWormholeInstructionTitle(ix); } catch (error) { - reportError(error, { + console.error(error, { signature: signature, url: url, }); diff --git a/app/components/instruction/associated-token/AssociatedTokenDetailsCard.tsx b/app/components/instruction/associated-token/AssociatedTokenDetailsCard.tsx index f0171697..afe2f132 100644 --- a/app/components/instruction/associated-token/AssociatedTokenDetailsCard.tsx +++ b/app/components/instruction/associated-token/AssociatedTokenDetailsCard.tsx @@ -1,5 +1,4 @@ import { ParsedInstruction, ParsedTransaction, SignatureResult } from '@solana/web3.js'; -import { reportError } from '@utils/sentry'; import { ParsedInfo } from '@validators/index'; import React from 'react'; import { create } from 'superstruct'; @@ -38,7 +37,7 @@ export function AssociatedTokenDetailsCard(props: DetailsProps) { return ; } } catch (error) { - reportError(error, { + console.error(error, { signature: props.tx.signatures[0], }); return ; diff --git a/app/components/instruction/bpf-loader/BpfLoaderDetailsCard.tsx b/app/components/instruction/bpf-loader/BpfLoaderDetailsCard.tsx index 520560c8..2184fafe 100644 --- a/app/components/instruction/bpf-loader/BpfLoaderDetailsCard.tsx +++ b/app/components/instruction/bpf-loader/BpfLoaderDetailsCard.tsx @@ -1,7 +1,6 @@ import { Address } from '@components/common/Address'; import { BPF_LOADER_PROGRAM_ID, ParsedInstruction, ParsedTransaction, SignatureResult } from '@solana/web3.js'; import { wrap } from '@utils/index'; -import { reportError } from '@utils/sentry'; import { ParsedInfo } from '@validators/index'; import React from 'react'; import { create } from 'superstruct'; @@ -36,7 +35,7 @@ export function BpfLoaderDetailsCard(props: DetailsProps) { return ; } } catch (error) { - reportError(error, { + console.error(error, { signature: props.tx.signatures[0], }); return ; diff --git a/app/components/instruction/bpf-upgradeable-loader/BpfUpgradeableLoaderDetailsCard.tsx b/app/components/instruction/bpf-upgradeable-loader/BpfUpgradeableLoaderDetailsCard.tsx index c43b8852..40d6c72a 100644 --- a/app/components/instruction/bpf-upgradeable-loader/BpfUpgradeableLoaderDetailsCard.tsx +++ b/app/components/instruction/bpf-upgradeable-loader/BpfUpgradeableLoaderDetailsCard.tsx @@ -1,7 +1,6 @@ import { Address } from '@components/common/Address'; import { ParsedInstruction, ParsedTransaction, PublicKey, SignatureResult } from '@solana/web3.js'; import { camelToTitleCase } from '@utils/index'; -import { reportError } from '@utils/sentry'; import { ParsedInfo } from '@validators/index'; import React from 'react'; import { create, Struct } from 'superstruct'; @@ -56,7 +55,7 @@ export function BpfUpgradeableLoaderDetailsCard(props: DetailsProps) { return ; } } catch (error) { - reportError(error, { + console.error(error, { signature: props.tx.signatures[0], }); return ; diff --git a/app/components/instruction/pyth/PythDetailsCard.tsx b/app/components/instruction/pyth/PythDetailsCard.tsx index 19629912..eed97552 100644 --- a/app/components/instruction/pyth/PythDetailsCard.tsx +++ b/app/components/instruction/pyth/PythDetailsCard.tsx @@ -1,6 +1,5 @@ import { useCluster } from '@providers/cluster'; import { SignatureResult, TransactionInstruction } from '@solana/web3.js'; -import { reportError } from '@utils/sentry'; import React from 'react'; import { InstructionCard } from '../InstructionCard'; @@ -70,7 +69,7 @@ export function PythDetailsCard(props: { return ; } } catch (error) { - reportError(error, { + console.error(error, { signature: signature, url: url, }); diff --git a/app/components/instruction/stake/StakeDetailsCard.tsx b/app/components/instruction/stake/StakeDetailsCard.tsx index f67d89d0..d1fec9d9 100644 --- a/app/components/instruction/stake/StakeDetailsCard.tsx +++ b/app/components/instruction/stake/StakeDetailsCard.tsx @@ -1,5 +1,4 @@ import { ParsedInstruction, ParsedTransaction, SignatureResult } from '@solana/web3.js'; -import { reportError } from '@utils/sentry'; import { ParsedInfo } from '@validators/index'; import React from 'react'; import { create } from 'superstruct'; @@ -68,7 +67,7 @@ export function StakeDetailsCard(props: DetailsProps) { return ; } } catch (error) { - reportError(error, { + console.error(error, { signature: props.tx.signatures[0], }); return ; diff --git a/app/components/instruction/system/SystemDetailsCard.tsx b/app/components/instruction/system/SystemDetailsCard.tsx index 3ec8356b..6cb1e836 100644 --- a/app/components/instruction/system/SystemDetailsCard.tsx +++ b/app/components/instruction/system/SystemDetailsCard.tsx @@ -1,5 +1,4 @@ import { ParsedInstruction, ParsedTransaction, SignatureResult } from '@solana/web3.js'; -import { reportError } from '@utils/sentry'; import { ParsedInfo } from '@validators/index'; import React from 'react'; import { create } from 'superstruct'; @@ -103,7 +102,7 @@ export function SystemDetailsCard(props: DetailsProps) { return ; } } catch (error) { - reportError(error, { + console.error(error, { signature: props.tx.signatures[0], }); return ; diff --git a/app/components/instruction/vote/VoteDetailsCard.tsx b/app/components/instruction/vote/VoteDetailsCard.tsx index e902f26f..0fdd6595 100644 --- a/app/components/instruction/vote/VoteDetailsCard.tsx +++ b/app/components/instruction/vote/VoteDetailsCard.tsx @@ -4,7 +4,6 @@ import { useCluster } from '@providers/cluster'; import { PublicKey } from '@solana/web3.js'; import { displayTimestamp } from '@utils/date'; import { camelToTitleCase } from '@utils/index'; -import { reportError } from '@utils/sentry'; import { ParsedInfo } from '@validators/index'; import React from 'react'; import { create, Struct } from 'superstruct'; @@ -41,7 +40,7 @@ export function VoteDetailsCard(props: InstructionDetailsProps) { return renderDetails(props, parsed, VoteSwitchInfo); } } catch (error) { - reportError(error, { + console.error(error, { url, }); } diff --git a/app/components/transaction/InstructionsSection.tsx b/app/components/transaction/InstructionsSection.tsx index b675632d..680f69c0 100644 --- a/app/components/transaction/InstructionsSection.tsx +++ b/app/components/transaction/InstructionsSection.tsx @@ -27,7 +27,6 @@ import { useAnchorProgram } from '@providers/anchor'; import { useCluster } from '@providers/cluster'; import { useTransactionDetails, useTransactionStatus } from '@providers/transactions'; import { useFetchTransactionDetails } from '@providers/transactions/parsed'; -import { ErrorBoundary } from '@sentry/nextjs'; import { ComputeBudgetProgram, ParsedInnerInstruction, @@ -41,6 +40,7 @@ import { Cluster } from '@utils/cluster'; import { INNER_INSTRUCTIONS_START_SLOT, SignatureProps } from '@utils/index'; import { intoTransactionInstruction } from '@utils/tx'; import React from 'react'; +import { ErrorBoundary } from 'react-error-boundary'; import AnchorDetailsCard from '../instruction/AnchorDetailsCard'; import { isMangoInstruction } from '../instruction/mango/types'; diff --git a/app/providers/accounts/history.tsx b/app/providers/accounts/history.tsx index 604c9593..897e17b4 100644 --- a/app/providers/accounts/history.tsx +++ b/app/providers/accounts/history.tsx @@ -11,7 +11,6 @@ import { TransactionSignature, } from '@solana/web3.js'; import { Cluster } from '@utils/cluster'; -import { reportError } from '@utils/sentry'; import React from 'react'; const MAX_TRANSACTION_BATCH_SIZE = 10; @@ -141,7 +140,7 @@ async function fetchAccountHistory( status = FetchStatus.Fetched; } catch (error) { if (cluster !== Cluster.Custom) { - reportError(error, { url }); + console.error(error, { url }); } status = FetchStatus.FetchFailed; } @@ -153,7 +152,7 @@ async function fetchAccountHistory( transactionMap = await fetchParsedTransactions(url, signatures); } catch (error) { if (cluster !== Cluster.Custom) { - reportError(error, { url }); + console.error(error, { url }); } status = FetchStatus.FetchFailed; } diff --git a/app/providers/accounts/index.tsx b/app/providers/accounts/index.tsx index d082e9b5..41cf3e6e 100644 --- a/app/providers/accounts/index.tsx +++ b/app/providers/accounts/index.tsx @@ -16,7 +16,6 @@ import { } from '@solana/web3.js'; import { Cluster } from '@utils/cluster'; import { pubkeyToString } from '@utils/index'; -import { reportError } from '@utils/sentry'; import { ParsedAddressLookupTableAccount } from '@validators/accounts/address-lookup-table'; import { ConfigAccount } from '@validators/accounts/config'; import { NonceAccount } from '@validators/accounts/nonce'; @@ -250,7 +249,7 @@ async function fetchMultipleAccounts({ try { parsedData = await handleParsedAccountData(connection, pubkey, accountData); } catch (error) { - reportError(error, { address: pubkey.toBase58(), url }); + console.error(error, { address: pubkey.toBase58(), url }); } } @@ -285,7 +284,7 @@ async function fetchMultipleAccounts({ } } catch (error) { if (cluster !== Cluster.Custom) { - reportError(error, { url }); + console.error(error, { url }); } for (const pubkey of batch) { @@ -491,7 +490,7 @@ export function useMintAccountInfo(address: string | undefined): MintAccountInfo return create(parsedData.parsed.info, MintAccountInfo); } catch (err) { - reportError(err, { address }); + console.error(err, { address }); } }, [address, accountInfo]); } @@ -511,7 +510,7 @@ export function useTokenAccountInfo(address: string | undefined): TokenAccountIn return create(parsedData.parsed.info, TokenAccountInfo); } catch (err) { - reportError(err, { address }); + console.error(err, { address }); } }, [address, accountInfo]); } diff --git a/app/providers/accounts/rewards.tsx b/app/providers/accounts/rewards.tsx index 3c45127e..c4ac918a 100644 --- a/app/providers/accounts/rewards.tsx +++ b/app/providers/accounts/rewards.tsx @@ -6,7 +6,6 @@ import { FetchStatus } from '@providers/cache'; import { useCluster } from '@providers/cluster'; import { Connection, InflationReward, PublicKey } from '@solana/web3.js'; import { Cluster } from '@utils/cluster'; -import { reportError } from '@utils/sentry'; import React from 'react'; const REWARDS_AVAILABLE_EPOCH = new Map([ @@ -94,7 +93,7 @@ async function fetchRewards( fromEpoch = epochInfo.epoch - 1; } catch (error) { if (cluster !== Cluster.Custom) { - reportError(error, { url }); + console.error(error, { url }); } return dispatch({ @@ -116,7 +115,7 @@ async function fetchRewards( return result[0]; } catch (error) { if (cluster !== Cluster.Custom) { - reportError(error, { url }); + console.error(error, { url }); } } return null; diff --git a/app/providers/accounts/tokens.tsx b/app/providers/accounts/tokens.tsx index f7fed404..227bd7dc 100644 --- a/app/providers/accounts/tokens.tsx +++ b/app/providers/accounts/tokens.tsx @@ -5,7 +5,6 @@ import { ActionType, FetchStatus } from '@providers/cache'; import { useCluster } from '@providers/cluster'; import { Connection, PublicKey } from '@solana/web3.js'; import { Cluster } from '@utils/cluster'; -import { reportError } from '@utils/sentry'; import { TokenAccountInfo } from '@validators/accounts/token'; import React from 'react'; import { create } from 'superstruct'; @@ -94,7 +93,7 @@ async function fetchAccountTokens(dispatch: Dispatch, pubkey: PublicKey, cluster status = FetchStatus.Fetched; } catch (error) { if (cluster !== Cluster.Custom) { - reportError(error, { url }); + console.error(error, { url }); } status = FetchStatus.FetchFailed; } diff --git a/app/providers/accounts/vote-accounts.tsx b/app/providers/accounts/vote-accounts.tsx index 618610c8..f3ddfe3a 100644 --- a/app/providers/accounts/vote-accounts.tsx +++ b/app/providers/accounts/vote-accounts.tsx @@ -1,6 +1,5 @@ import { useCluster } from '@providers/cluster'; import { Cluster } from '@utils/cluster'; -import { reportError } from '@utils/sentry'; import React from 'react'; import { createDefaultRpcTransport, createSolanaRpc } from 'web3js-experimental'; @@ -31,7 +30,7 @@ async function fetchVoteAccounts( setVoteAccounts(voteAccounts); } catch (error) { if (cluster !== Cluster.Custom) { - reportError(error, { url }); + console.error(error, { url }); } } } diff --git a/app/providers/block.tsx b/app/providers/block.tsx index 3cc08641..212d521e 100644 --- a/app/providers/block.tsx +++ b/app/providers/block.tsx @@ -2,7 +2,6 @@ import * as Cache from '@providers/cache'; import { useCluster } from '@providers/cluster'; -import * as Sentry from '@sentry/nextjs'; import { Connection, PublicKey, VersionedBlockResponse } from '@solana/web3.js'; import { Cluster } from '@utils/cluster'; import React from 'react'; @@ -107,7 +106,7 @@ export async function fetchBlock(dispatch: Dispatch, url: string, cluster: Clust } catch (err) { status = FetchStatus.FetchFailed; if (cluster !== Cluster.Custom) { - Sentry.captureException(err, { tags: { url } }); + console.error(err, { tags: { url } }); } } diff --git a/app/providers/cluster.tsx b/app/providers/cluster.tsx index d58a853c..deef8a2b 100644 --- a/app/providers/cluster.tsx +++ b/app/providers/cluster.tsx @@ -2,7 +2,6 @@ import { Cluster, clusterName, ClusterStatus, clusterUrl, DEFAULT_CLUSTER } from '@utils/cluster'; import { localStorageIsAvailable } from '@utils/local-storage'; -import { reportError } from '@utils/sentry'; import { ReadonlyURLSearchParams, usePathname, useRouter, useSearchParams } from 'next/navigation'; import React, { createContext, useContext, useEffect, useReducer, useState } from 'react'; import { createDefaultRpcTransport, createSolanaRpc } from 'web3js-experimental'; @@ -149,7 +148,7 @@ async function updateCluster(dispatch: Dispatch, cluster: Cluster, customUrl: st }); } catch (error) { if (cluster !== Cluster.Custom) { - reportError(error, { clusterUrl: clusterUrl(cluster, customUrl) }); + console.error(error, { clusterUrl: clusterUrl(cluster, customUrl) }); } dispatch({ cluster, diff --git a/app/providers/epoch.tsx b/app/providers/epoch.tsx index 1f82b338..15ade1e1 100644 --- a/app/providers/epoch.tsx +++ b/app/providers/epoch.tsx @@ -4,7 +4,6 @@ import * as Cache from '@providers/cache'; import { useCluster } from '@providers/cluster'; import { Connection } from '@solana/web3.js'; import { Cluster } from '@utils/cluster'; -import { reportError } from '@utils/sentry'; import React from 'react'; import { EpochSchedule, getFirstSlotInEpoch, getLastSlotInEpoch } from '../utils/epoch-schedule'; @@ -114,7 +113,7 @@ export async function fetchEpoch( } catch (err) { status = FetchStatus.FetchFailed; if (cluster !== Cluster.Custom) { - reportError(err, { epoch: epoch.toString() }); + console.error(err, { epoch: epoch.toString() }); } } diff --git a/app/providers/richList.tsx b/app/providers/richList.tsx index 4b2e48d8..8a44d442 100644 --- a/app/providers/richList.tsx +++ b/app/providers/richList.tsx @@ -3,7 +3,6 @@ import { useCluster } from '@providers/cluster'; import { AccountBalancePair, Connection } from '@solana/web3.js'; import { Cluster, ClusterStatus } from '@utils/cluster'; -import { reportError } from '@utils/sentry'; import React from 'react'; export enum Status { @@ -72,7 +71,7 @@ async function fetch(dispatch: Dispatch, cluster: Cluster, url: string) { }); } catch (err) { if (cluster !== Cluster.Custom) { - reportError(err, { url }); + console.error(err, { url }); } dispatch('Failed to fetch top accounts'); } diff --git a/app/providers/stats/solanaClusterStats.tsx b/app/providers/stats/solanaClusterStats.tsx index 57fd038d..2954c6b8 100644 --- a/app/providers/stats/solanaClusterStats.tsx +++ b/app/providers/stats/solanaClusterStats.tsx @@ -2,7 +2,6 @@ import { useCluster } from '@providers/cluster'; import { Cluster } from '@utils/cluster'; -import { reportError } from '@utils/sentry'; import React from 'react'; import useTabVisibility from 'use-tab-visibility'; import { createDefaultRpcTransport, createSolanaRpc } from 'web3js-experimental'; @@ -111,7 +110,7 @@ export function SolanaClusterStatsProvider({ children }: Props) { }); } catch (error) { if (cluster !== Cluster.Custom) { - reportError(error, { url }); + console.error(error, { url }); } if (error instanceof Error) { dispatchPerformanceInfo({ @@ -139,7 +138,7 @@ export function SolanaClusterStatsProvider({ children }: Props) { }); } catch (error) { if (cluster !== Cluster.Custom) { - reportError(error, { url }); + console.error(error, { url }); } if (error instanceof Error) { dispatchPerformanceInfo({ @@ -173,7 +172,7 @@ export function SolanaClusterStatsProvider({ children }: Props) { }); } catch (error) { if (cluster !== Cluster.Custom) { - reportError(error, { url }); + console.error(error, { url }); } if (error instanceof Error) { dispatchDashboardInfo({ diff --git a/app/providers/supply.tsx b/app/providers/supply.tsx index 34084f1c..ee6e4360 100644 --- a/app/providers/supply.tsx +++ b/app/providers/supply.tsx @@ -2,7 +2,6 @@ import { useCluster } from '@providers/cluster'; import { Cluster, ClusterStatus } from '@utils/cluster'; -import { reportError } from '@utils/sentry'; import React from 'react'; import { createDefaultRpcTransport, createSolanaRpc } from 'web3js-experimental'; @@ -68,7 +67,7 @@ async function fetch(dispatch: Dispatch, cluster: Cluster, url: string) { }); } catch (err) { if (cluster !== Cluster.Custom) { - reportError(err, { url }); + console.error(err, { url }); } dispatch('Failed to fetch supply'); } diff --git a/app/providers/transactions/index.tsx b/app/providers/transactions/index.tsx index 532e73d7..d5c92690 100644 --- a/app/providers/transactions/index.tsx +++ b/app/providers/transactions/index.tsx @@ -5,7 +5,6 @@ import { ActionType, FetchStatus } from '@providers/cache'; import { useCluster } from '@providers/cluster'; import { Connection, SignatureResult, TransactionConfirmationStatus, TransactionSignature } from '@solana/web3.js'; import { Cluster } from '@utils/cluster'; -import { reportError } from '@utils/sentry'; import React from 'react'; import { DetailsProvider } from './parsed'; @@ -92,7 +91,7 @@ export async function fetchTransactionStatus( blockTime = await connection.getBlockTime(value.slot); } catch (error) { if (cluster === Cluster.MainnetBeta && confirmations === 'max') { - reportError(error, { slot: `${value.slot}` }); + console.error(error, { slot: `${value.slot}` }); } } const timestamp: Timestamp = blockTime !== null ? blockTime : 'unavailable'; @@ -109,7 +108,7 @@ export async function fetchTransactionStatus( fetchStatus = FetchStatus.Fetched; } catch (error) { if (cluster !== Cluster.Custom) { - reportError(error, { url }); + console.error(error, { url }); } fetchStatus = FetchStatus.FetchFailed; } diff --git a/app/providers/transactions/parsed.tsx b/app/providers/transactions/parsed.tsx index 29703108..13b93de2 100644 --- a/app/providers/transactions/parsed.tsx +++ b/app/providers/transactions/parsed.tsx @@ -5,7 +5,6 @@ import { ActionType, FetchStatus } from '@providers/cache'; import { useCluster } from '@providers/cluster'; import { Connection, ParsedTransactionWithMeta, TransactionSignature } from '@solana/web3.js'; import { Cluster } from '@utils/cluster'; -import { reportError } from '@utils/sentry'; import React from 'react'; export interface Details { @@ -52,7 +51,7 @@ async function fetchDetails(dispatch: Dispatch, signature: TransactionSignature, fetchStatus = FetchStatus.Fetched; } catch (error) { if (cluster !== Cluster.Custom) { - reportError(error, { url }); + console.error(error, { url }); } fetchStatus = FetchStatus.FetchFailed; } diff --git a/app/providers/transactions/raw.tsx b/app/providers/transactions/raw.tsx index 87249903..f3d31e71 100644 --- a/app/providers/transactions/raw.tsx +++ b/app/providers/transactions/raw.tsx @@ -5,7 +5,6 @@ import { ActionType, FetchStatus } from '@providers/cache'; import { useCluster } from '@providers/cluster'; import { Connection, DecompileArgs, TransactionMessage, TransactionSignature, VersionedMessage } from '@solana/web3.js'; import { Cluster } from '@utils/cluster'; -import { reportError } from '@utils/sentry'; import React from 'react'; export interface Details { @@ -79,7 +78,7 @@ async function fetchRawTransaction(dispatch: Dispatch, signature: TransactionSig }); } catch (error) { if (cluster !== Cluster.Custom) { - reportError(error, { url }); + console.error(error, { url }); } } } diff --git a/app/utils/instruction.ts b/app/utils/instruction.ts index d4b9bf3e..c4cb5ea8 100644 --- a/app/utils/instruction.ts +++ b/app/utils/instruction.ts @@ -12,7 +12,6 @@ import { ParsedTransactionWithMeta, PartiallyDecodedInstruction, } from '@solana/web3.js'; -import { reportError } from '@utils/sentry'; import { intoTransactionInstruction } from '@utils/tx'; import { ParsedInfo } from '@validators/index'; import { create } from 'superstruct'; @@ -65,7 +64,7 @@ export function getTokenProgramInstructionName(ix: ParsedInstruction, signatureI const type = create(rawType, TokenInstructionType); return IX_TITLES[type]; } catch (err) { - reportError(err, { signature: signatureInfo.signature }); + console.error(err, { signature: signatureInfo.signature }); return 'Unknown'; } } @@ -100,7 +99,7 @@ export function getTokenInstructionName( return parseTokenLendingInstructionTitle(transactionInstruction); } } catch (error) { - reportError(error, { signature: signatureInfo.signature }); + console.error(error, { signature: signatureInfo.signature }); return undefined; } } diff --git a/app/utils/sentry.ts b/app/utils/sentry.ts deleted file mode 100644 index 2859cde1..00000000 --- a/app/utils/sentry.ts +++ /dev/null @@ -1,22 +0,0 @@ -'use client'; - -import * as Sentry from '@sentry/nextjs'; - -type Tags = - | { - [key: string]: string; - } - | undefined; - -export function reportError(err: unknown, tags: Tags) { - if (err instanceof Error) { - console.error(err, err.message); - try { - Sentry.captureException(err, { - tags, - }); - } catch (err) { - // Sentry can fail if error rate limit is reached - } - } -} diff --git a/app/utils/token-info.ts b/app/utils/token-info.ts index f03fa137..c1543fb6 100644 --- a/app/utils/token-info.ts +++ b/app/utils/token-info.ts @@ -81,7 +81,7 @@ async function getFullLegacyTokenInfoUsingCdn( 'https://cdn.jsdelivr.net/gh/solana-labs/token-list@latest/src/tokens/solana.tokenlist.json' ); if (tokenListResponse.status >= 400) { - reportError(new Error('Error fetching token list from CDN')); + console.error(new Error('Error fetching token list from CDN')); return undefined; } const { tokens } = (await tokenListResponse.json()) as FullLegacyTokenInfoList; diff --git a/app/utils/token-search.ts b/app/utils/token-search.ts index 23b3c874..bb2c123d 100644 --- a/app/utils/token-search.ts +++ b/app/utils/token-search.ts @@ -9,7 +9,6 @@ import { Base58EncodedAddress } from 'web3js-experimental'; import { Cluster } from './cluster'; -import { reportError } from './sentry'; type TokenSearchApiResponseToken = { address: Base58EncodedAddress; @@ -55,14 +54,14 @@ export async function searchTokens(search: string, cluster: Cluster): Promise= 400) { try { const errorJsonBody = await apiResponse.json(); - reportError(new Error('Error calling token search API'), { + console.error(new Error('Error calling token search API'), { chainId: chainId.toString(), errorJsonBody, search, }); } catch { // no JSON body for error - reportError(new Error('Error calling token search API'), { chainId: chainId.toString(), search }); + console.error(new Error('Error calling token search API'), { chainId: chainId.toString(), search }); } } diff --git a/next.config.mjs b/next.config.mjs index 3df8f234..4e32ff70 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -1,5 +1,3 @@ -import { withSentryConfig } from "@sentry/nextjs"; - const ADDRESS_ALIASES = ["account", "accounts", "addresses"]; const TX_ALIASES = ["txs", "txn", "txns", "transaction", "transactions"]; const SUPPLY_ALIASES = ['accounts', 'accounts/top']; @@ -57,30 +55,4 @@ const nextConfig = { }; -export default withSentryConfig(nextConfig, - // Sentry Webpack options - { - // For all available options, see: - // https://github.com/getsentry/sentry-webpack-plugin#options - org: "solana", - project: "explorer", - silent: true, // Suppresses source map uploading logs during build - - }, - // Sentry config options - { - // For all available options, see: - // https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/ - - // Automatically tree-shake Sentry logger statements to reduce bundle size - disableLogger: true, - - // Hides source maps from generated client bundles - hideSourceMaps: true, - - // Transpiles SDK to be compatible with IE11 (increases bundle size) - transpileClientSDK: true, - - // Upload a larger set of source maps for prettier stack traces (increases build time) - widenClientFileUpload: true, - }); +export default nextConfig; diff --git a/package.json b/package.json index 483f9336..9d352d7e 100644 --- a/package.json +++ b/package.json @@ -21,8 +21,6 @@ "@project-serum/serum": "^0.13.61", "@react-hook/debounce": "^4.0.0", "@react-hook/previous": "^1.0.1", - "@sentry/nextjs": "^7.51.0", - "@sentry/react": "^7.51.0", "@solana/buffer-layout": "^3.0.0", "@solana/spl-account-compression": "^0.1.8", "@solana/spl-token": "^0.1.8", @@ -47,6 +45,7 @@ "react-content-loader": "^6.1.0", "react-countup": "^6.4.0", "react-dom": "18.2.0", + "react-error-boundary": "^4.0.11", "react-feather": "^2.0.10", "react-json-view": "^1.21.3", "react-moment": "^1.1.3", @@ -99,4 +98,4 @@ "uuid": "^9.0.0" } } -} \ No newline at end of file +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e512c3a8..70aaab77 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -40,12 +40,6 @@ dependencies: '@react-hook/previous': specifier: ^1.0.1 version: 1.0.1(react@18.2.0) - '@sentry/nextjs': - specifier: ^7.51.0 - version: 7.51.0(next@13.4.0)(react@18.2.0) - '@sentry/react': - specifier: ^7.51.0 - version: 7.51.0(react@18.2.0) '@solana/buffer-layout': specifier: ^3.0.0 version: 3.0.0 @@ -118,6 +112,9 @@ dependencies: react-dom: specifier: 18.2.0 version: 18.2.0(react@18.2.0) + react-error-boundary: + specifier: ^4.0.11 + version: 4.0.11(react@18.2.0) react-feather: specifier: ^2.0.10 version: 2.0.10(react@18.2.0) @@ -1079,7 +1076,6 @@ packages: engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.13.11 - dev: false /@babel/template@7.20.7: resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} @@ -1202,7 +1198,7 @@ packages: resolution: {integrity: sha512-gxNky50AJL3AlkbjvTARiwAqei6/tNUxDZPSKd+3jqWVM3AmdVTTdpjHorR/an/M0VJqdsuq5oGcFH+rjtyujQ==} dependencies: '@babel/helper-module-imports': 7.21.4 - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.22.6 '@emotion/hash': 0.9.0 '@emotion/memoize': 0.8.0 '@emotion/serialize': 1.1.1 @@ -1241,7 +1237,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.22.6 '@emotion/babel-plugin': 11.10.8 '@emotion/cache': 11.10.8 '@emotion/serialize': 1.1.1 @@ -2577,28 +2573,10 @@ packages: dependencies: '@babel/core': 7.21.8 '@babel/helper-module-imports': 7.21.4 - '@rollup/pluginutils': 5.0.2(rollup@2.78.0) + '@rollup/pluginutils': 5.0.2 dev: false - /@rollup/plugin-commonjs@24.0.0(rollup@2.78.0): - resolution: {integrity: sha512-0w0wyykzdyRRPHOb0cQt14mIBLujfAv6GgP6g8nvg/iBxEm112t3YPPq+Buqe2+imvElTka+bjNlJ/gB56TD8g==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.68.0||^3.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@rollup/pluginutils': 5.0.2(rollup@2.78.0) - commondir: 1.0.1 - estree-walker: 2.0.2 - glob: 8.1.0 - is-reference: 1.2.1 - magic-string: 0.27.0 - rollup: 2.78.0 - dev: false - - /@rollup/pluginutils@5.0.2(rollup@2.78.0): + /@rollup/pluginutils@5.0.2: resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2610,164 +2588,12 @@ packages: '@types/estree': 1.0.1 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 2.78.0 dev: false /@rushstack/eslint-patch@1.2.0: resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==} dev: false - /@sentry-internal/tracing@7.51.0: - resolution: {integrity: sha512-mhXl4B02OQq6/vevjX04OchmQbxPRaLci9vTTPcPcIz/n+wkum29ze35gHcJsPJUesScjd0m19Xou3C8fNnZRA==} - engines: {node: '>=8'} - dependencies: - '@sentry/core': 7.51.0 - '@sentry/types': 7.51.0 - '@sentry/utils': 7.51.0 - tslib: 1.14.1 - dev: false - - /@sentry/browser@7.51.0: - resolution: {integrity: sha512-SqaXM9qhGnSqEcdWEnzHKKkCLcMzE0cAc/Y6VQOttGjkP3KRW8INdWrN7F0ySBdy6BMar6ViDJKhB6cMKsuCIg==} - engines: {node: '>=8'} - dependencies: - '@sentry-internal/tracing': 7.51.0 - '@sentry/core': 7.51.0 - '@sentry/replay': 7.51.0 - '@sentry/types': 7.51.0 - '@sentry/utils': 7.51.0 - tslib: 1.14.1 - dev: false - - /@sentry/cli@1.75.2: - resolution: {integrity: sha512-CG0CKH4VCKWzEaegouWfCLQt9SFN+AieFESCatJ7zSuJmzF05ywpMusjxqRul6lMwfUhRKjGKOzcRJ1jLsfTBw==} - engines: {node: '>= 8'} - hasBin: true - requiresBuild: true - dependencies: - https-proxy-agent: 5.0.1 - mkdirp: 0.5.6 - node-fetch: 2.6.9 - progress: 2.0.3 - proxy-from-env: 1.1.0 - which: 2.0.2 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - - /@sentry/core@7.51.0: - resolution: {integrity: sha512-GgYwlXU8Y1kDEHsJO1Bmr2CNan5BzoNRR0TDBmxRgI/DgTNNSYrXeFDELgPi9/p/0XENeuttzDZ3iYd1nF7meA==} - engines: {node: '>=8'} - dependencies: - '@sentry/types': 7.51.0 - '@sentry/utils': 7.51.0 - tslib: 1.14.1 - dev: false - - /@sentry/integrations@7.51.0: - resolution: {integrity: sha512-xmWUKZyRDfl8tRsZWDRwxeXGwsvlJytQSYnJMPwohUq+VKs1KAarsuIxWQQMosNOvCYaio8VLfMxureqk2Wb/w==} - engines: {node: '>=8'} - dependencies: - '@sentry/types': 7.51.0 - '@sentry/utils': 7.51.0 - localforage: 1.10.0 - tslib: 1.14.1 - dev: false - - /@sentry/nextjs@7.51.0(next@13.4.0)(react@18.2.0): - resolution: {integrity: sha512-ZeZvXjfI/7Ik/w2joGWFBll6klEciKiFDNrwq5hqA3e1/xDV9rJNAF9DkKAVzA6wy0DP7o2npaKKAhC6iejzCw==} - engines: {node: '>=8'} - peerDependencies: - next: ^10.0.8 || ^11.0 || ^12.0 || ^13.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.51.0 - '@sentry/integrations': 7.51.0 - '@sentry/node': 7.51.0 - '@sentry/react': 7.51.0(react@18.2.0) - '@sentry/types': 7.51.0 - '@sentry/utils': 7.51.0 - '@sentry/webpack-plugin': 1.20.0 - chalk: 3.0.0 - next: 13.4.0(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0)(sass@1.53.0) - react: 18.2.0 - rollup: 2.78.0 - stacktrace-parser: 0.1.10 - tslib: 1.14.1 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - - /@sentry/node@7.51.0: - resolution: {integrity: sha512-UHJ0yN3I8hSrythr3/KPewh+xLIdjF6AU+BW3bgsP0ZtztrftrQk9+XnWRIX0p6ZstzoP4F3arkJIXkWfOk5Pg==} - engines: {node: '>=8'} - dependencies: - '@sentry-internal/tracing': 7.51.0 - '@sentry/core': 7.51.0 - '@sentry/types': 7.51.0 - '@sentry/utils': 7.51.0 - cookie: 0.4.2 - https-proxy-agent: 5.0.1 - lru_map: 0.3.3 - tslib: 1.14.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@sentry/react@7.51.0(react@18.2.0): - resolution: {integrity: sha512-w9fHVBbv4l3tGFa9YCV1m2ngUTnYxM/r6pO2Q8N9sjeWAk74sREm7fUjBJI24sdJFQJj0KhHNg0I1ZOA+uITyQ==} - engines: {node: '>=8'} - peerDependencies: - react: 15.x || 16.x || 17.x || 18.x - dependencies: - '@sentry/browser': 7.51.0 - '@sentry/types': 7.51.0 - '@sentry/utils': 7.51.0 - hoist-non-react-statics: 3.3.2 - react: 18.2.0 - tslib: 1.14.1 - dev: false - - /@sentry/replay@7.51.0: - resolution: {integrity: sha512-3jv+chhhlOVFjPKYJOEJy+J+9yTUEHxybZ0tTwGZYOJp9T8HdO21L6NjYk5b9wEqJonhZHp1BiQnzG82NLDkSQ==} - engines: {node: '>=12'} - dependencies: - '@sentry/core': 7.51.0 - '@sentry/types': 7.51.0 - '@sentry/utils': 7.51.0 - dev: false - - /@sentry/types@7.51.0: - resolution: {integrity: sha512-8REzzY0DslDryp6Yxj+tJ4NkXFHulLW9k8dgZV2Qo/0rBDMKir8g0IHYeN8ZBcnWrx2F+6rQb6uN6BjyLZY7Dg==} - engines: {node: '>=8'} - dev: false - - /@sentry/utils@7.51.0: - resolution: {integrity: sha512-y5zq4IfZDCm6cg0EQJMghUM4YjZToFni7J5OKopLXKVtc9YtRtkYoFuFqEWm4HBuBwplreiS/KkDQgWn3FVn7A==} - engines: {node: '>=8'} - dependencies: - '@sentry/types': 7.51.0 - tslib: 1.14.1 - dev: false - - /@sentry/webpack-plugin@1.20.0: - resolution: {integrity: sha512-Ssj1mJVFsfU6vMCOM2d+h+KQR7QHSfeIP16t4l20Uq/neqWXZUQ2yvQfe4S3BjdbJXz/X4Rw8Hfy1Sd0ocunYw==} - engines: {node: '>= 8'} - dependencies: - '@sentry/cli': 1.75.2 - webpack-sources: 3.2.3 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - /@sideway/address@4.1.4: resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==} dependencies: @@ -3495,7 +3321,7 @@ packages: engines: {node: '>=14'} dependencies: '@babel/code-frame': 7.21.4 - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.22.6 '@types/aria-query': 5.0.1 aria-query: 5.1.3 chalk: 4.1.2 @@ -3955,6 +3781,7 @@ packages: debug: 4.3.4 transitivePeerDependencies: - supports-color + dev: true /agentkeepalive@4.3.0: resolution: {integrity: sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==} @@ -4274,7 +4101,7 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.22.6 cosmiconfig: 7.1.0 resolve: 1.22.2 dev: false @@ -4448,12 +4275,6 @@ packages: balanced-match: 1.0.2 concat-map: 0.0.1 - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - dependencies: - balanced-match: 1.0.2 - dev: false - /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} @@ -4576,6 +4397,7 @@ packages: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 + dev: true /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -4728,10 +4550,6 @@ packages: engines: {node: '>= 12'} dev: false - /commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - dev: false - /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -4742,11 +4560,6 @@ packages: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true - /cookie@0.4.2: - resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} - engines: {node: '>= 0.6'} - dev: false - /cosmiconfig@7.1.0: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} @@ -5007,7 +4820,7 @@ packages: /dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dependencies: - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.22.6 csstype: 3.1.2 dev: false @@ -5354,7 +5167,7 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.22.6 aria-query: 5.1.3 array-includes: 3.1.6 array.prototype.flatmap: 1.3.1 @@ -5932,17 +5745,6 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 - /glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.1.6 - once: 1.4.0 - dev: false - /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -6113,6 +5915,7 @@ packages: debug: 4.3.4 transitivePeerDependencies: - supports-color + dev: true /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} @@ -6150,10 +5953,6 @@ packages: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} - /immediate@3.0.6: - resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - dev: false - /immutable@4.3.0: resolution: {integrity: sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==} @@ -6326,12 +6125,6 @@ packages: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} dev: true - /is-reference@1.2.1: - resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} - dependencies: - '@types/estree': 1.0.1 - dev: false - /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -7119,21 +6912,9 @@ packages: prelude-ls: 1.2.1 type-check: 0.4.0 - /lie@3.1.1: - resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} - dependencies: - immediate: 3.0.6 - dev: false - /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - /localforage@1.10.0: - resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} - dependencies: - lie: 3.1.1 - dev: false - /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -7196,22 +6977,11 @@ packages: dependencies: yallist: 4.0.0 - /lru_map@0.3.3: - resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} - dev: false - /lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true dev: true - /magic-string@0.27.0: - resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - dev: false - /make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} @@ -7297,24 +7067,10 @@ packages: dependencies: brace-expansion: 1.1.11 - /minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - dev: false - /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: false - /mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true - dependencies: - minimist: 1.2.8 - dev: false - /moment@2.29.4: resolution: {integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==} @@ -7772,11 +7528,6 @@ packages: engines: {node: '>= 0.6.0'} dev: false - /progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} - dev: false - /promise@7.3.1: resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} dependencies: @@ -7799,10 +7550,6 @@ packages: react-is: 16.13.1 dev: false - /proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: false - /ps-tree@1.2.0: resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} engines: {node: '>= 0.10'} @@ -7891,6 +7638,15 @@ packages: react: 18.2.0 scheduler: 0.23.0 + /react-error-boundary@4.0.11(react@18.2.0): + resolution: {integrity: sha512-U13ul67aP5DOSPNSCWQ/eO0AQEYzEFkVljULQIjMV0KlffTAhxuDoBKdO0pb/JZ8mDhMKFZ9NZi0BmLGUiNphw==} + peerDependencies: + react: '>=16.13.1' + dependencies: + '@babel/runtime': 7.22.6 + react: 18.2.0 + dev: false + /react-feather@2.0.10(react@18.2.0): resolution: {integrity: sha512-BLhukwJ+Z92Nmdcs+EMw6dy1Z/VLiJTzEQACDUEnWMClhYnFykJCGWQx+NmwP/qQHGX/5CzQ+TGi8ofg2+HzVQ==} peerDependencies: @@ -7979,7 +7735,7 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.22.6 react: 18.2.0 use-composed-ref: 1.3.0(react@18.2.0) use-latest: 1.2.1(@types/react@18.2.0)(react@18.2.0) @@ -7993,7 +7749,7 @@ packages: react: '>=16.6.0' react-dom: '>=16.6.0' dependencies: - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.22.6 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -8122,18 +7878,10 @@ packages: inherits: 2.0.4 dev: false - /rollup@2.78.0: - resolution: {integrity: sha512-4+YfbQC9QEVvKTanHhIAFVUFSRsezvQF8vFOJwtGfb9Bb+r014S+qryr9PSmw8x6sMnPkmFBGAvIFVQxvJxjtg==} - engines: {node: '>=10.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.2 - dev: false - /rpc-websockets@7.5.1: resolution: {integrity: sha512-kGFkeTsmd37pHPMaHIgN1LVKXMi0JD782v4Ds9ZKtLlwdTKjn+CxM9A9/gLT2LaOuEcEFGL98h1QWQtlOIdW0w==} dependencies: - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.22.6 eventemitter3: 4.0.7 uuid: 9.0.0 ws: 8.13.0(bufferutil@4.0.7)(utf-8-validate@5.0.10) @@ -8320,13 +8068,6 @@ packages: escape-string-regexp: 2.0.0 dev: true - /stacktrace-parser@0.1.10: - resolution: {integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==} - engines: {node: '>=6'} - dependencies: - type-fest: 0.7.1 - dev: false - /start-server-and-test@1.15.4: resolution: {integrity: sha512-ucQtp5+UCr0m4aHlY+aEV2JSYNTiMZKdSKK/bsIr6AlmwAWDYDnV7uGlWWEtWa7T4XvRI5cPYcPcQgeLqpz+Tg==} engines: {node: '>=6'} @@ -8698,11 +8439,6 @@ packages: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - /type-fest@0.7.1: - resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} - engines: {node: '>=8'} - dev: false - /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: @@ -8894,11 +8630,6 @@ packages: engines: {node: '>=12'} dev: true - /webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - dev: false - /whatwg-encoding@2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} diff --git a/sentry.client.config.ts b/sentry.client.config.ts deleted file mode 100644 index 67bc55a3..00000000 --- a/sentry.client.config.ts +++ /dev/null @@ -1,15 +0,0 @@ -// This file configures the initialization of Sentry on the client. -// The config you add here will be used whenever a users loads a page in their browser. -// https://docs.sentry.io/platforms/javascript/guides/nextjs/ - -import * as Sentry from '@sentry/nextjs'; - -Sentry.init({ - // Setting this option to true will print useful information to the console while you're setting up Sentry. - debug: false, - - dsn: 'https://5efdc15b4828434fbe949b5daed472be@o434108.ingest.sentry.io/5390542', - - // Adjust this value in production, or use tracesSampler for greater control - tracesSampleRate: 1, -}); diff --git a/sentry.edge.config.ts b/sentry.edge.config.ts deleted file mode 100644 index 14e010d2..00000000 --- a/sentry.edge.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -// This file configures the initialization of Sentry for edge features (middleware, edge routes, and so on). -// The config you add here will be used whenever one of the edge features is loaded. -// Note that this config is unrelated to the Vercel Edge Runtime and is also required when running locally. -// https://docs.sentry.io/platforms/javascript/guides/nextjs/ - -import * as Sentry from '@sentry/nextjs'; - -Sentry.init({ - // Setting this option to true will print useful information to the console while you're setting up Sentry. - debug: false, - - dsn: 'https://5efdc15b4828434fbe949b5daed472be@o434108.ingest.sentry.io/5390542', - - // Adjust this value in production, or use tracesSampler for greater control - tracesSampleRate: 1, -}); diff --git a/sentry.server.config.ts b/sentry.server.config.ts deleted file mode 100644 index b078a488..00000000 --- a/sentry.server.config.ts +++ /dev/null @@ -1,15 +0,0 @@ -// This file configures the initialization of Sentry on the server. -// The config you add here will be used whenever the server handles a request. -// https://docs.sentry.io/platforms/javascript/guides/nextjs/ - -import * as Sentry from '@sentry/nextjs'; - -Sentry.init({ - // Setting this option to true will print useful information to the console while you're setting up Sentry. - debug: false, - - dsn: 'https://5efdc15b4828434fbe949b5daed472be@o434108.ingest.sentry.io/5390542', - - // Adjust this value in production, or use tracesSampler for greater control - tracesSampleRate: 1, -});