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, -});