mirror of
https://github.com/MetaFam/TheGame.git
synced 2026-04-24 03:00:09 -04:00
addressing feedback from @alalonde
- Moved `Honeybadger.notify()` to `errorHandler.ts` and replaced instances. - Removed module definitions from `env.d.ts`
This commit is contained in:
@@ -39,6 +39,8 @@ ENV NEXT_PUBLIC_GRAPHQL_URL $GRAPHQL_URL
|
||||
ARG NEXT_PUBLIC_FRONTEND_URL
|
||||
ARG NEXT_PUBLIC_YOUTUBE_API_KEY
|
||||
ARG NEXT_PUBLIC_GA4_ID
|
||||
ARG NEXT_PUBLIC_HONEYBADGER_API_KEY
|
||||
ARG NEXT_PUBLIC_USERBACK_TOKEN
|
||||
|
||||
# Build
|
||||
RUN yarn web:build
|
||||
|
||||
@@ -177,6 +177,32 @@ export const theme = extendTheme(
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
// 'ubdiv#userback_button_container': {
|
||||
// '.userback-controls[wstyle]': {
|
||||
// background: 'var(--chakra-colors-whiteAlpha-200)',
|
||||
// backdropFilter: 'blur(7px)',
|
||||
// color: 'white !important',
|
||||
|
||||
// '.userback-controls-step': {
|
||||
|
||||
// '.userback-controls-options': {
|
||||
// 'ubroutemenu.userback-feedback-type-form': {
|
||||
// color: 'white !important',
|
||||
// transition: 'all 0.3s ease',
|
||||
// '&:hover': {
|
||||
// background: 'var(--chakra-colors-whiteAlpha-600) !important',
|
||||
// },
|
||||
// 'ubdiv': {
|
||||
// color: 'white !important',
|
||||
// }
|
||||
// },
|
||||
// '.userback-controls-form': {
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
},
|
||||
'::-webkit-scrollbar': {
|
||||
width: { base: '5px', lg: '12px' },
|
||||
|
||||
@@ -2,6 +2,7 @@ import Honeybadger from '@honeybadger-io/js';
|
||||
import { Center, Link, MetaButton, Spinner, Stack, Text } from '@metafam/ds';
|
||||
import { Player } from 'graphql/autogen/types';
|
||||
import { useMounted, useUser, useWeb3 } from 'lib/hooks';
|
||||
import { errorHandler } from 'utils/errorHandler';
|
||||
|
||||
type PlayerPageType = React.FC<{ player: Player }>;
|
||||
|
||||
@@ -40,7 +41,7 @@ export const ConnectedPage: React.FC<{
|
||||
}
|
||||
|
||||
if (error) {
|
||||
Honeybadger.notify(error);
|
||||
errorHandler(error);
|
||||
return (
|
||||
<Center h="100vh">
|
||||
<Stack align="center">
|
||||
|
||||
@@ -31,6 +31,7 @@ import {
|
||||
volIncreased,
|
||||
volumeChange,
|
||||
} from 'utils/dashboardHelpers';
|
||||
import { errorHandler } from 'utils/errorHandler';
|
||||
|
||||
const SEED_TOKEN_ID = 'metagame';
|
||||
const COINGECKO_API_URL = 'https://api.coingecko.com/api/v3/coins/';
|
||||
@@ -103,7 +104,7 @@ export const Seed = (): ReactElement => {
|
||||
return setToken(tokenData);
|
||||
} catch (error) {
|
||||
console.error('error fetching tokenData', error);
|
||||
Honeybadger.notify(error as Error);
|
||||
errorHandler(error as Error);
|
||||
return null;
|
||||
}
|
||||
})();
|
||||
|
||||
@@ -67,6 +67,7 @@ import React, {
|
||||
useState,
|
||||
} from 'react';
|
||||
import { Controller, useForm } from 'react-hook-form';
|
||||
import { errorHandler } from 'utils/errorHandler';
|
||||
import { optimizedImage } from 'utils/imageHelpers';
|
||||
import { isEmpty } from 'utils/objectHelpers';
|
||||
|
||||
@@ -309,7 +310,6 @@ export const EditProfileModal: React.FC<ProfileEditorProps> = ({
|
||||
error ?? result.statusText
|
||||
}"`,
|
||||
);
|
||||
Honeybadger.notify(error);
|
||||
}
|
||||
|
||||
Object.keys(files).forEach((key: string) => {
|
||||
@@ -394,7 +394,7 @@ export const EditProfileModal: React.FC<ProfileEditorProps> = ({
|
||||
isClosable: true,
|
||||
duration: 15000,
|
||||
});
|
||||
Honeybadger.notify(err as Error);
|
||||
errorHandler(err as Error);
|
||||
return null;
|
||||
} finally {
|
||||
setStatus(null);
|
||||
|
||||
@@ -38,6 +38,7 @@ import {
|
||||
gridSX,
|
||||
LayoutData,
|
||||
} from 'utils/boxTypes';
|
||||
import { errorHandler } from 'utils/errorHandler';
|
||||
import {
|
||||
addBoxToLayouts,
|
||||
disableAddBox,
|
||||
@@ -150,7 +151,7 @@ export const EditableGridLayout: React.FC<Props> = ({
|
||||
status: 'error',
|
||||
isClosable: true,
|
||||
});
|
||||
Honeybadger.notify(err as Error);
|
||||
errorHandler(err as Error);
|
||||
} finally {
|
||||
setSaving(false);
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ import {
|
||||
useEffect,
|
||||
useState,
|
||||
} from 'react';
|
||||
import { errorHandler } from 'utils/errorHandler';
|
||||
import { POLYGON } from 'utils/networks';
|
||||
import { formatAddress } from 'utils/playerHelpers';
|
||||
|
||||
@@ -81,7 +82,7 @@ export const Chiev = ({
|
||||
setClaiming(true);
|
||||
await mintChiev(chievId);
|
||||
} catch (error) {
|
||||
Honeybadger.notify(error as Error);
|
||||
errorHandler(error as Error);
|
||||
console.error('handleMintingError', error);
|
||||
} finally {
|
||||
setClaiming(false);
|
||||
|
||||
@@ -17,6 +17,7 @@ import { useOnScreen } from 'lib/hooks/useOnScreen';
|
||||
import { get } from 'lib/store';
|
||||
import { ReactElement, useCallback, useEffect, useRef, useState } from 'react';
|
||||
import { MdDownloading, MdRestartAlt, MdWarning } from 'react-icons/md';
|
||||
import { errorHandler } from 'utils/errorHandler';
|
||||
import {
|
||||
safelyParseContent,
|
||||
safelyParseTextForTyping,
|
||||
@@ -129,7 +130,7 @@ export const OnboardingGame: React.FC = (): JSX.Element => {
|
||||
};
|
||||
} catch (error) {
|
||||
console.error('makeCurrentSectionDialogue error', error);
|
||||
Honeybadger.notify(error as Error);
|
||||
errorHandler(error as Error);
|
||||
return {
|
||||
currentDialogue: [],
|
||||
currentChoices: [],
|
||||
@@ -219,7 +220,7 @@ export const OnboardingGame: React.FC = (): JSX.Element => {
|
||||
throw new Error('No connections found');
|
||||
} catch (error) {
|
||||
setCurrentConnections([]);
|
||||
Honeybadger.notify(error as Error);
|
||||
errorHandler(error as Error);
|
||||
return undefined;
|
||||
}
|
||||
};
|
||||
@@ -249,7 +250,7 @@ export const OnboardingGame: React.FC = (): JSX.Element => {
|
||||
}
|
||||
throw new Error('No jumpers found');
|
||||
} catch (error) {
|
||||
Honeybadger.notify(error as Error);
|
||||
errorHandler(error as Error);
|
||||
return undefined;
|
||||
}
|
||||
};
|
||||
@@ -386,7 +387,7 @@ export const OnboardingGame: React.FC = (): JSX.Element => {
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error('handleProgress error', err);
|
||||
Honeybadger.notify(err as Error);
|
||||
errorHandler(err as Error);
|
||||
setIsLoading(false);
|
||||
});
|
||||
};
|
||||
|
||||
@@ -2,6 +2,7 @@ import Honeybadger from '@honeybadger-io/js';
|
||||
import { httpLink } from '@metafam/utils';
|
||||
import { CONFIG } from 'config';
|
||||
import { Contract, providers } from 'ethers';
|
||||
import { errorHandler } from 'utils/errorHandler';
|
||||
|
||||
import ABI from '../../../contracts/BulkDisbursableNFTs.abi';
|
||||
|
||||
@@ -36,7 +37,7 @@ export const getTokenImage = async (): Promise<IChievMetadata | void> => {
|
||||
return metadata as IChievMetadata;
|
||||
}
|
||||
} catch (error) {
|
||||
Honeybadger.notify(error as Error);
|
||||
errorHandler(error as Error);
|
||||
console.error('getTokenImageError', error);
|
||||
}
|
||||
return undefined;
|
||||
|
||||
@@ -8,6 +8,7 @@ import {
|
||||
MenuButton,
|
||||
MenuItem,
|
||||
MenuList,
|
||||
MetaButton,
|
||||
Profile,
|
||||
} from '@metafam/ds';
|
||||
import { MetaLink } from 'components/Link';
|
||||
@@ -16,6 +17,7 @@ import { PlayerAvatar } from 'components/Player/PlayerAvatar';
|
||||
import { Player } from 'graphql/autogen/types';
|
||||
import { useWeb3 } from 'lib/hooks';
|
||||
import React from 'react';
|
||||
import { errorHandler } from 'utils/errorHandler';
|
||||
import { getPlayerURL } from 'utils/playerHelpers';
|
||||
|
||||
type PlayerStatsProps = {
|
||||
@@ -44,6 +46,15 @@ export const DesktopPlayerStats: React.FC<PlayerStatsProps> = ({ player }) => {
|
||||
_hover={{ transform: 'scale(0.9)' }}
|
||||
/>
|
||||
</MenuButton>
|
||||
|
||||
<MetaButton
|
||||
onClick={(): void => {
|
||||
throw new Error('Honeybadger test from dev');
|
||||
}}
|
||||
>
|
||||
Test error
|
||||
</MetaButton>
|
||||
|
||||
<MenuList
|
||||
mt="8px"
|
||||
color="white"
|
||||
|
||||
@@ -5,6 +5,7 @@ import { Player } from 'graphql/autogen/types';
|
||||
import { useProfileField, useWeb3 } from 'lib/hooks';
|
||||
import React, { useEffect, useMemo, useState } from 'react';
|
||||
import { FieldValues, UseFormSetValue } from 'react-hook-form';
|
||||
import { errorHandler } from 'utils/errorHandler';
|
||||
import { getPlayerMeetwithWalletCalendarUrl } from 'utils/playerHelpers';
|
||||
|
||||
interface MeetWithWalletProps {
|
||||
@@ -69,7 +70,7 @@ const MeetWithWalletProfileEdition: React.FC<MeetWithWalletProps> = ({
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('Failed to verify Meet with wallet account', e);
|
||||
Honeybadger.notify(e as Error);
|
||||
errorHandler(e as Error);
|
||||
}
|
||||
setLoading(false);
|
||||
};
|
||||
@@ -113,7 +114,7 @@ const MeetWithWalletProfileEdition: React.FC<MeetWithWalletProps> = ({
|
||||
).calendar_url;
|
||||
} catch (e) {
|
||||
console.error('Meet with wallet account creation failed', e);
|
||||
Honeybadger.notify(e as Error);
|
||||
errorHandler(e as Error);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ import {
|
||||
import { getCompletedQuestsByPlayerQuery } from 'graphql/getQuests';
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { BoxTypes } from 'utils/boxTypes';
|
||||
import { errorHandler } from 'utils/errorHandler';
|
||||
|
||||
type Props = {
|
||||
player: Player;
|
||||
@@ -44,7 +45,7 @@ export const PlayerCompletedQuests: React.FC<Props> = ({
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("Couldn't fetch quests", error);
|
||||
Honeybadger.notify(error as Error);
|
||||
errorHandler(error as Error);
|
||||
}
|
||||
};
|
||||
loadQuests();
|
||||
|
||||
@@ -11,6 +11,7 @@ import {
|
||||
import { contracts, graphql, helpers } from '@quest-chains/sdk';
|
||||
import { useWeb3 } from 'lib/hooks';
|
||||
import { useCallback, useRef, useState } from 'react';
|
||||
import { errorHandler } from 'utils/errorHandler';
|
||||
import {
|
||||
getQuestChainContract,
|
||||
QuestChainDetails,
|
||||
@@ -93,7 +94,7 @@ export const MintNFTTile: React.FC<MintNFTTileProps> = ({
|
||||
duration: 2000,
|
||||
isClosable: true,
|
||||
});
|
||||
Honeybadger.notify(error as Error);
|
||||
errorHandler(error as Error);
|
||||
} finally {
|
||||
setMinting(false);
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ import { useWeb3 } from 'lib/hooks';
|
||||
import { useDropFiles, useDropImage } from 'lib/hooks/useDropFiles';
|
||||
import { useInputText } from 'lib/hooks/useInputText';
|
||||
import { useCallback, useRef, useState } from 'react';
|
||||
import { errorHandler } from 'utils/errorHandler';
|
||||
import { NETWORK_INFO } from 'utils/networks';
|
||||
import {
|
||||
getQuestChainContract,
|
||||
@@ -152,7 +153,7 @@ export const UploadProof: React.FC<{
|
||||
duration: 2000,
|
||||
isClosable: true,
|
||||
});
|
||||
Honeybadger.notify(error as Error);
|
||||
errorHandler(error as Error);
|
||||
}
|
||||
|
||||
setSubmitting(false);
|
||||
|
||||
@@ -13,6 +13,7 @@ import { Maybe } from 'graphql/autogen/types';
|
||||
import { useDelay } from 'lib/hooks/useDelay';
|
||||
import React, { useCallback, useEffect, useState } from 'react';
|
||||
import { BoxMetadata } from 'utils/boxTypes';
|
||||
import { errorHandler } from 'utils/errorHandler';
|
||||
|
||||
const metadataLink = '/api/metadata?url=';
|
||||
|
||||
@@ -45,7 +46,7 @@ export const EmbeddedUrl: React.FC<EmbeddedUrlProps> = ({
|
||||
setMetadata(response.og as unknown as URIMetadata);
|
||||
} catch (err) {
|
||||
console.error(`No metadata found for the URL "${uri}"`, err);
|
||||
Honeybadger.notify(err as Error);
|
||||
errorHandler(err as Error);
|
||||
setMetadata(null);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
|
||||
@@ -27,6 +27,7 @@ import {
|
||||
useState,
|
||||
} from 'react';
|
||||
import { Control, useForm, UseFormRegisterReturn } from 'react-hook-form';
|
||||
import { errorHandler } from 'utils/errorHandler';
|
||||
|
||||
export type MaybeModalProps = {
|
||||
buttonLabel?: string | ReactElement;
|
||||
@@ -121,7 +122,7 @@ export const WizardPane = <T,>({
|
||||
isClosable: true,
|
||||
duration: 12000,
|
||||
});
|
||||
Honeybadger.notify(err as Error);
|
||||
errorHandler(err as Error);
|
||||
setStatus(null);
|
||||
}
|
||||
},
|
||||
|
||||
@@ -18,6 +18,7 @@ import React, {
|
||||
useMemo,
|
||||
useState,
|
||||
} from 'react';
|
||||
import { errorHandler } from 'utils/errorHandler';
|
||||
import { NETWORK_INFO, POLYGON } from 'utils/networks';
|
||||
|
||||
import gameJson from '../components/Landing/OnboardingGame/metagame-onboarding-game.json';
|
||||
@@ -120,7 +121,7 @@ export const GameContextProvider: React.FC = ({ children }) => {
|
||||
throw new Error('Game progression failed');
|
||||
} catch (error) {
|
||||
// eslint-disable-next-line no-console
|
||||
Honeybadger.notify(error as Error);
|
||||
errorHandler(error as Error);
|
||||
console.error(error);
|
||||
return undefined;
|
||||
}
|
||||
@@ -244,7 +245,7 @@ export const GameContextProvider: React.FC = ({ children }) => {
|
||||
isClosable: true,
|
||||
duration: 5000,
|
||||
});
|
||||
Honeybadger.notify(error as Error);
|
||||
errorHandler(error as Error);
|
||||
return msg;
|
||||
} finally {
|
||||
setTxLoading(false);
|
||||
|
||||
@@ -21,6 +21,7 @@ import React, {
|
||||
useMemo,
|
||||
useState,
|
||||
} from 'react';
|
||||
import { errorHandler } from 'utils/errorHandler';
|
||||
import { providerOptions } from 'utils/walletOptions';
|
||||
import Web3Modal from 'web3modal';
|
||||
|
||||
@@ -74,7 +75,7 @@ export async function getExistingAuth(
|
||||
await did.verifyToken(token, ethersProvider, connectedAddress);
|
||||
return token;
|
||||
} catch (e) {
|
||||
Honeybadger.notify(e as Error);
|
||||
errorHandler(e as Error);
|
||||
clearToken();
|
||||
return null;
|
||||
}
|
||||
@@ -198,7 +199,7 @@ export const Web3ContextProvider: React.FC<Web3ContextProviderOptions> = ({
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('`connect` Error', error); // eslint-disable-line no-console
|
||||
Honeybadger.notify(error as Error);
|
||||
errorHandler(error as Error);
|
||||
disconnect();
|
||||
} finally {
|
||||
setConnecting(false);
|
||||
|
||||
@@ -3,6 +3,7 @@ import { Optional } from '@metafam/utils';
|
||||
import { CONFIG } from 'config';
|
||||
import { Player } from 'graphql/autogen/types';
|
||||
import { useEffect, useMemo } from 'react';
|
||||
import { errorHandler } from 'utils/errorHandler';
|
||||
|
||||
const BRIGHTID_CONTEXT = 'MetaGame';
|
||||
const DEEPLINK_ENDPOINT = `brightid://link-verification/${CONFIG.brightIdNodeURL}/${BRIGHTID_CONTEXT}`;
|
||||
@@ -55,7 +56,7 @@ const fetchVerificationData = async (
|
||||
const responseData = await response.json();
|
||||
return responseData.data;
|
||||
} catch (err) {
|
||||
Honeybadger.notify(err as Error);
|
||||
errorHandler(err as Error);
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -2,6 +2,7 @@ import Honeybadger from '@honeybadger-io/js';
|
||||
import { Maybe } from '@metafam/utils';
|
||||
import { Player } from 'graphql/autogen/types';
|
||||
import { useEffect, useState } from 'react';
|
||||
import { errorHandler } from 'utils/errorHandler';
|
||||
import { Collectible } from 'utils/openseaHelpers';
|
||||
|
||||
export const useOpenSeaCollectibles = ({
|
||||
@@ -28,7 +29,7 @@ export const useOpenSeaCollectibles = ({
|
||||
setData(allData);
|
||||
setFavorites(allData.slice(0, 3));
|
||||
} catch (err) {
|
||||
Honeybadger.notify(err as Error);
|
||||
errorHandler(err as Error);
|
||||
setError((err as Error).message);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import Honeybadger from '@honeybadger-io/js';
|
||||
import { graphql } from '@quest-chains/sdk';
|
||||
import { useEffect, useState } from 'react';
|
||||
import { errorHandler } from 'utils/errorHandler';
|
||||
|
||||
import { useRefresh } from '../useRefresh';
|
||||
|
||||
@@ -34,7 +35,7 @@ export const useLatestQuestChainData = (
|
||||
} catch (err) {
|
||||
setError(err);
|
||||
setQuestChain(inputQuestChain);
|
||||
Honeybadger.notify(err as Error);
|
||||
errorHandler(err as Error);
|
||||
} finally {
|
||||
setFetching(false);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import Honeybadger from '@honeybadger-io/js';
|
||||
import { graphql } from '@quest-chains/sdk';
|
||||
import { useEffect, useState } from 'react';
|
||||
import { errorHandler } from 'utils/errorHandler';
|
||||
|
||||
import { useRefresh } from '../useRefresh';
|
||||
|
||||
@@ -38,7 +39,7 @@ export const useLatestQuestStatusesForUserAndChainData = (
|
||||
} catch (err) {
|
||||
setError(err);
|
||||
setQuestStatuses([]);
|
||||
Honeybadger.notify(err as Error);
|
||||
errorHandler(err as Error);
|
||||
} finally {
|
||||
setFetching(false);
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ import { useUser } from 'lib/hooks/useUser';
|
||||
import { useWeb3 } from 'lib/hooks/useWeb3';
|
||||
import { useRouter } from 'next/router';
|
||||
import { ReactElement, useCallback } from 'react';
|
||||
import { errorHandler } from 'utils/errorHandler';
|
||||
import { isEmpty } from 'utils/objectHelpers';
|
||||
import { dispositionFor } from 'utils/playerHelpers';
|
||||
|
||||
@@ -93,7 +94,7 @@ export const useSaveCeramicProfile = ({
|
||||
if ((err as Error).message === '"undefined" is not valid JSON') {
|
||||
throw new CeramicError('Could not authenticate with Ceramic API');
|
||||
}
|
||||
Honeybadger.notify(err as Error);
|
||||
errorHandler(err as Error);
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ import Honeybadger from '@honeybadger-io/js';
|
||||
import { Constants } from '@metafam/utils';
|
||||
import { useEffect, useState } from 'react';
|
||||
import { SCAccount, SCAccountsData } from 'sourcecred';
|
||||
import { errorHandler } from 'utils/errorHandler';
|
||||
|
||||
interface XPProps {
|
||||
userTotalXP: number;
|
||||
@@ -63,8 +64,7 @@ const getXP = async (userAddress: string): Promise<XPProps | null> => {
|
||||
userWeeklyCred,
|
||||
};
|
||||
} catch (err: unknown) {
|
||||
// throw new Error(err);
|
||||
Honeybadger.notify(err as Error);
|
||||
errorHandler(err as Error);
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
2
packages/web/next-env.d.ts
vendored
2
packages/web/next-env.d.ts
vendored
@@ -4,5 +4,3 @@ declare module '*.png';
|
||||
declare module '*.jpg';
|
||||
declare module '*.jpeg';
|
||||
declare module '*.svg';
|
||||
declare module '@honeybadger-io/webpack';
|
||||
declare module '@honeybadger-io/js';
|
||||
|
||||
@@ -13,6 +13,7 @@ import { useRouter } from 'next/router';
|
||||
import Page404 from 'pages/404';
|
||||
import React, { useCallback, useEffect, useState } from 'react';
|
||||
import useSWR from 'swr';
|
||||
import { errorHandler } from 'utils/errorHandler';
|
||||
import { uploadFile } from 'utils/uploadHelpers';
|
||||
|
||||
const EditGuild: React.FC = () => {
|
||||
@@ -59,7 +60,7 @@ const EditGuild: React.FC = () => {
|
||||
isClosable: true,
|
||||
duration: 8000,
|
||||
});
|
||||
Honeybadger.notify(error as Error);
|
||||
errorHandler(error as Error);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ import { useRouter } from 'next/router';
|
||||
import Page404 from 'pages/404';
|
||||
import React, { useCallback, useEffect, useState } from 'react';
|
||||
import useSWR from 'swr';
|
||||
import { errorHandler } from 'utils/errorHandler';
|
||||
import { uploadFile } from 'utils/uploadHelpers';
|
||||
|
||||
const SetupGuild: React.FC = () => {
|
||||
@@ -59,7 +60,7 @@ const SetupGuild: React.FC = () => {
|
||||
isClosable: true,
|
||||
duration: 8000,
|
||||
});
|
||||
Honeybadger.notify(error as Error);
|
||||
errorHandler(error as Error);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ import {
|
||||
import { GetStaticPaths, GetStaticPropsContext } from 'next';
|
||||
import React, { useCallback } from 'react';
|
||||
import { FaArrowLeft } from 'react-icons/fa';
|
||||
import { errorHandler } from 'utils/errorHandler';
|
||||
import {
|
||||
QuestChainDetails,
|
||||
QuestChains,
|
||||
@@ -151,7 +152,7 @@ export const getStaticProps = async (
|
||||
} catch (error) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.error('error', error);
|
||||
Honeybadger.notify(error as Error);
|
||||
errorHandler(error as Error);
|
||||
}
|
||||
|
||||
return {
|
||||
|
||||
7
packages/web/utils/errorHandler.ts
Normal file
7
packages/web/utils/errorHandler.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
import Honeybadger from '@honeybadger-io/js';
|
||||
import { CombinedError } from 'urql';
|
||||
|
||||
export const errorHandler = (error: Error | CombinedError): void => {
|
||||
console.error(error);
|
||||
Honeybadger.notify(error);
|
||||
};
|
||||
@@ -1,6 +1,8 @@
|
||||
import Honeybadger from '@honeybadger-io/js';
|
||||
import { NETWORK_INFO } from 'utils/networks';
|
||||
|
||||
import { errorHandler } from './errorHandler';
|
||||
|
||||
export const switchChainOnMetaMask = async (
|
||||
chainId: string,
|
||||
): Promise<boolean> => {
|
||||
@@ -48,7 +50,7 @@ export const switchChainOnMetaMask = async (
|
||||
} catch (addError) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.error(`Unable to add chainId ${chainId} to MetaMask`, addError);
|
||||
Honeybadger.notify(addError as Error);
|
||||
errorHandler(addError as Error);
|
||||
}
|
||||
} else {
|
||||
// eslint-disable-next-line no-console
|
||||
@@ -56,7 +58,7 @@ export const switchChainOnMetaMask = async (
|
||||
`Unable to switch to chainId ${chainId} on MetaMask`,
|
||||
switchError,
|
||||
);
|
||||
Honeybadger.notify(switchError as Error);
|
||||
errorHandler(switchError as Error);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
@@ -88,7 +90,7 @@ export const addTokenToMetamask = async ({
|
||||
} catch (addError) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.error(`Unable to add token ${symbol} to MetaMask`, addError);
|
||||
Honeybadger.notify(addError as Error);
|
||||
errorHandler(addError as Error);
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user