Newer
Older
CrypticOreWallet / src / pages / names / mgmt / handleErrors.ts
@Drew Lemmy Drew Lemmy on 17 Mar 2021 2 KB feat: name purchase modal
// Copyright (c) 2020-2021 Drew Lemmy
// This file is part of KristWeb 2 under GPL-3.0.
// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt
import { notification } from "antd";

import { translateError, TFns } from "@utils/i18n";

import { APIError } from "@api";
import { AuthFailedError, ShowAuthFailedFn } from "@api/AuthFailed";

import { WalletAddressMap, Wallet } from "@wallets";

// Convert API errors to friendlier errors
export async function handleEditError(
  { t, tKey, tStr, tErr }: TFns,
  showAuthFailed: ShowAuthFailedFn,
  walletAddressMap: WalletAddressMap,
  err: Error
): Promise<void> {
  const onError = (err: Error) => notification.error({
    message: tStr("errorNotificationTitle"),
    description: translateError(t, err, tKey("errorUnknown"))
  });

  switch (err.message) {
  case "missing_parameter":
  case "invalid_parameter":
    switch ((err as APIError).parameter) {
    case "name":
      return onError(tErr("errorParameterNames"));
    case "address":
      return onError(tErr("errorParameterRecipient"));
    case "a":
      return onError(tErr("errorParameterARecord"));
    }
    break;
  case "name_not_found":
    return onError(tErr("errorNameNotFound"));
  case "not_name_owner":
    return onError(tErr("errorNotNameOwner"));
  case "auth_failed":
    return showAuthFailed(walletAddressMap[(err as AuthFailedError).address!]);
  }

  // Pass through any other unknown errors
  console.error(err);
  onError(err);
}

export async function handlePurchaseError(
  { t, tKey, tStr, tErr }: TFns,
  showAuthFailed: ShowAuthFailedFn,
  wallet: Wallet,
  err: Error
): Promise<void> {
  const onError = (err: Error) => notification.error({
    message: tStr("errorNotificationTitle"),
    description: translateError(t, err, tKey("errorUnknown"))
  });

  switch (err.message) {
  case "missing_parameter":
  case "invalid_parameter":
    return onError(tErr("errorInvalidName"));
  case "name_taken":
    return onError(tErr("errorNameTaken"));
  case "insufficient_funds":
    return onError(tErr("errorInsufficientFunds"));
  case "auth_failed":
    return showAuthFailed(wallet);
  }

  // Pass through any other unknown errors
  console.error(err);
  onError(err);
}