diff options
author | Sebastian <sebasjm@gmail.com> | 2023-01-17 15:58:20 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2023-01-17 16:01:26 -0300 |
commit | eeea3e62a01638b37c8bb8d6f8fdeac129a4afae (patch) | |
tree | fd1e97f0c3dda5b4077e7e0b53d8c844a8fc9aa4 /packages/taler-wallet-core/src/errors.ts | |
parent | 5be2d128ed088a77d6448ac1ebf25aba3716bd81 (diff) | |
download | wallet-core-eeea3e62a01638b37c8bb8d6f8fdeac129a4afae.tar.xz |
stronger type check to be sure that ErrorDetails is consistent
Diffstat (limited to 'packages/taler-wallet-core/src/errors.ts')
-rw-r--r-- | packages/taler-wallet-core/src/errors.ts | 66 |
1 files changed, 48 insertions, 18 deletions
diff --git a/packages/taler-wallet-core/src/errors.ts b/packages/taler-wallet-core/src/errors.ts index 7dbba2e2e..038bdbc7c 100644 --- a/packages/taler-wallet-core/src/errors.ts +++ b/packages/taler-wallet-core/src/errors.ts @@ -32,6 +32,8 @@ import { TransactionType, } from "@gnu-taler/taler-util"; +type empty = Record<string, never>; + export interface DetailsMap { [TalerErrorCode.WALLET_PENDING_OPERATION_FAILED]: { innerError: TalerErrorDetail; @@ -44,13 +46,13 @@ export interface DetailsMap { exchangeProtocolVersion: string; walletProtocolVersion: string; }; - [TalerErrorCode.WALLET_WITHDRAWAL_OPERATION_ABORTED_BY_BANK]: {}; - [TalerErrorCode.WALLET_TIPPING_COIN_SIGNATURE_INVALID]: {}; + [TalerErrorCode.WALLET_WITHDRAWAL_OPERATION_ABORTED_BY_BANK]: empty; + [TalerErrorCode.WALLET_TIPPING_COIN_SIGNATURE_INVALID]: empty; [TalerErrorCode.WALLET_ORDER_ALREADY_CLAIMED]: { orderId: string; claimUrl: string; }; - [TalerErrorCode.WALLET_CONTRACT_TERMS_MALFORMED]: {}; + [TalerErrorCode.WALLET_CONTRACT_TERMS_MALFORMED]: empty; [TalerErrorCode.WALLET_CONTRACT_TERMS_SIGNATURE_INVALID]: { merchantPub: string; orderId: string; @@ -62,18 +64,46 @@ export interface DetailsMap { [TalerErrorCode.WALLET_INVALID_TALER_PAY_URI]: { talerPayUri: string; }; - [TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR]: {}; - [TalerErrorCode.WALLET_UNEXPECTED_EXCEPTION]: {}; - [TalerErrorCode.WALLET_BANK_INTEGRATION_PROTOCOL_VERSION_INCOMPATIBLE]: {}; - [TalerErrorCode.WALLET_CORE_API_OPERATION_UNKNOWN]: {}; - [TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED]: {}; - [TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT]: {}; - [TalerErrorCode.WALLET_NETWORK_ERROR]: {}; - [TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE]: {}; - [TalerErrorCode.WALLET_EXCHANGE_COIN_SIGNATURE_INVALID]: {}; - [TalerErrorCode.WALLET_WITHDRAWAL_GROUP_INCOMPLETE]: {}; - [TalerErrorCode.WALLET_CORE_NOT_AVAILABLE]: {}; - [TalerErrorCode.GENERIC_UNEXPECTED_REQUEST_ERROR]: {}; + [TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR]: { + requestUrl: string; + requestMethod: string; + httpStatusCode: number; + errorResponse?: any; + }; + [TalerErrorCode.WALLET_UNEXPECTED_EXCEPTION]: { + stack?: string; + }; + [TalerErrorCode.WALLET_BANK_INTEGRATION_PROTOCOL_VERSION_INCOMPATIBLE]: { + exchangeProtocolVersion: string; + walletProtocolVersion: string; + }; + [TalerErrorCode.WALLET_CORE_API_OPERATION_UNKNOWN]: { + operation: string; + }; + [TalerErrorCode.WALLET_HTTP_REQUEST_THROTTLED]: { + requestUrl: string; + requestMethod: string; + throttleStats: Record<string, unknown>; + }; + [TalerErrorCode.WALLET_HTTP_REQUEST_GENERIC_TIMEOUT]: empty; + [TalerErrorCode.WALLET_NETWORK_ERROR]: { + requestUrl: string; + requestMethod: string; + }; + [TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE]: { + requestUrl: string; + requestMethod: string; + httpStatusCode: number; + validationError?: string; + }; + [TalerErrorCode.WALLET_EXCHANGE_COIN_SIGNATURE_INVALID]: empty; + [TalerErrorCode.WALLET_WITHDRAWAL_GROUP_INCOMPLETE]: { + errorsPerCoin: Record<number, TalerErrorDetail>; + }; + [TalerErrorCode.WALLET_CORE_NOT_AVAILABLE]: empty; + [TalerErrorCode.GENERIC_UNEXPECTED_REQUEST_ERROR]: { + httpStatusCode: number; + }; [TalerErrorCode.WALLET_PAY_MERCHANT_SERVER_ERROR]: { requestError: TalerErrorDetail; }; @@ -84,7 +114,7 @@ export interface DetailsMap { detail: string; }; [TalerErrorCode.WALLET_WITHDRAWAL_KYC_REQUIRED]: { - // FIXME! + kycUrl: string; }; [TalerErrorCode.WALLET_DEPOSIT_GROUP_INSUFFICIENT_BALANCE]: { insufficientBalanceDetails: PayMerchantInsufficientBalanceDetails; @@ -94,7 +124,7 @@ export interface DetailsMap { }; } -type ErrBody<Y> = Y extends keyof DetailsMap ? DetailsMap[Y] : never; +type ErrBody<Y> = Y extends keyof DetailsMap ? DetailsMap[Y] : empty; export function makeErrorDetail<C extends TalerErrorCode>( code: C, @@ -133,7 +163,7 @@ function getDefaultHint(code: number): string { } } -export class TalerProtocolViolationError<T = any> extends Error { +export class TalerProtocolViolationError extends Error { constructor(hint?: string) { let msg: string; if (hint) { |