diff --git a/package.json b/package.json index a20131a1d..3f6ee9fe1 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "@cosmjs/proto-signing": "^0.32.1", "@cosmjs/stargate": "^0.32.1", "@cosmjs/tendermint-rpc": "^0.32.1", - "@dydxprotocol/v4-abacus": "1.8.40", + "@dydxprotocol/v4-abacus": "1.8.41", "@dydxprotocol/v4-client-js": "^1.1.27", "@dydxprotocol/v4-localization": "^1.1.152", "@ethersproject/providers": "^5.7.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cfdd858ec..a6d6379cd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,8 +30,8 @@ dependencies: specifier: ^0.32.1 version: 0.32.2 '@dydxprotocol/v4-abacus': - specifier: 1.8.40 - version: 1.8.40 + specifier: 1.8.41 + version: 1.8.41 '@dydxprotocol/v4-client-js': specifier: ^1.1.27 version: 1.1.27 @@ -3203,8 +3203,8 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@dydxprotocol/v4-abacus@1.8.40: - resolution: {integrity: sha512-YmWm+8xuMx3wsorhg99OsXANL7t7WO4ic9hLG0wZX9bsCq9zsEvfpRVd+2oTZXX6UaP3iln5XLGWevjyH+3Xmw==} + /@dydxprotocol/v4-abacus@1.8.41: + resolution: {integrity: sha512-3Vbjfqg2rBmWn2nkRIpaHODBGxKFDAe8E4r9V3MdBUtvEBApUSGbVVD5TG8YJgjFc4TBCk0I7diXXVG47iwezQ==} dependencies: '@js-joda/core': 3.2.0 format-util: 1.0.5 diff --git a/src/lib/errors.ts b/src/lib/errors.ts index d991d8c28..05fc40715 100644 --- a/src/lib/errors.ts +++ b/src/lib/errors.ts @@ -1,3 +1,5 @@ +import { log } from './telemetry'; + /** * Error thrown if StatefulOrder includes an error code in it's response. */ @@ -13,3 +15,23 @@ export class StatefulOrderError extends Error { this.code = response.code; } } + +type RouteErrorCodes = 5; + +const routeErrorCodesToMessageOverride = { + 5: 'This route is not yet supported, please check back soon as we are adding new routes.', +}; + +export const getRouteErrorMessageOverride = ( + routeErrors: string, + routeErrorMessage: string | null | undefined +) => { + try { + const routeErrorsObj = JSON.parse(routeErrors); + const routeErrorCode = routeErrorsObj?.[0]?.code as RouteErrorCodes; + return routeErrorCodesToMessageOverride[routeErrorCode] ?? routeErrorMessage; + } catch (err) { + log('getRouteErrorMessageOverride', err); + return routeErrorMessage; + } +}; diff --git a/src/views/forms/AccountManagementForms/WithdrawForm.tsx b/src/views/forms/AccountManagementForms/WithdrawForm.tsx index 0bb6b12cd..bdbcba32a 100644 --- a/src/views/forms/AccountManagementForms/WithdrawForm.tsx +++ b/src/views/forms/AccountManagementForms/WithdrawForm.tsx @@ -61,6 +61,7 @@ import { getSelectedLocale } from '@/state/localizationSelectors'; import abacusStateManager from '@/lib/abacus'; import { validateCosmosAddress } from '@/lib/addressUtils'; import { track } from '@/lib/analytics'; +import { getRouteErrorMessageOverride } from '@/lib/errors'; import { MustBigNumber } from '@/lib/numbers'; import { getNobleChainId } from '@/lib/squid'; import { log } from '@/lib/telemetry'; @@ -403,20 +404,25 @@ export const WithdrawForm = () => { }; if (routeErrors) { + const routeErrorMessageOverride = getRouteErrorMessageOverride( + routeErrors, + routeErrorMessage + ); + track( AnalyticsEvents.RouteError({ transferType: TransferType.withdrawal.name, - errorMessage: routeErrorMessage ?? undefined, + errorMessage: routeErrorMessageOverride ?? undefined, amount: debouncedAmount, chainId: chainIdStr ?? undefined, assetId: toToken?.toString(), }) ); return { - errorMessage: routeErrorMessage + errorMessage: routeErrorMessageOverride ? stringGetter({ key: STRING_KEYS.SOMETHING_WENT_WRONG_WITH_MESSAGE, - params: { ERROR_MESSAGE: routeErrorMessage }, + params: { ERROR_MESSAGE: routeErrorMessageOverride }, }) : stringGetter({ key: STRING_KEYS.SOMETHING_WENT_WRONG }), };