import { ErrorCode, ErrorContextCode } from './codes';
export * from './modules';
export * from './codes';
export declare enum HttpRequestMethod {
    Get = "GET",
    Post = "POST",
    Options = "OPTIONS"
}
export declare enum ErrorType {
    Unspecified = "unspecified",
    ChainError = "chain-error",
    ExecutionError = "execution-error",
    NotFoundError = "not-found-error",
    ValidationError = "validation-error",
    WalletError = "wallet-error",
    WalletNotInstalledError = "wallet-not-installed-error",
    GrpcUnaryRequest = "grpc-unary-request",
    HttpRequest = "http-request",
    Web3 = "web3"
}
export interface ErrorContext {
    code?: ErrorCode;
    type?: ErrorType;
    /**
     * Additional context needed for the exception
     */
    context?: string;
    /**
     * Where is the exception thrown
     */
    contextModule?: string;
    /**
     * Needed when we get a code error from a Http/Grpc Request
     * and we need to specify the error code for the particular message
     * for example why the transaction has failed
     * */
    contextCode?: ErrorContextCode;
}
export interface Exception {
    /**
     * The type of the Error
     */
    type: ErrorType;
    /**
     * Error specific code (HttpStatus, GrpcStatus, etc)
     */
    code: ErrorCode;
    /**
     * The name of the error (the name of the instance of the Exception)
     */
    name: string;
    /**
     * Providing more context as to where the exception was thrown
     * (ex: on-chain module, etc)
     */
    contextModule?: string;
    /**
     * Providing more context as to why the exception was thrown
     * (ex: on-chain error code, etc)
     */
    contextCode?: ErrorContextCode;
    /**
     * Parsed message of the exception
     */
    message: string;
    /**
     * The original stack of the error
     */
    stack?: string;
    /**
     * The original message of the error
     */
    errorMessage: string;
    parse?(): void;
    parseError(error: Error): void;
    parseContext(context?: ErrorContext): void;
    setType(type: ErrorType): void;
    setCode(code: ErrorCode): void;
    setStack(stack: string): void;
    setName(name: string): void;
    setMessage(message: string): void;
    setContextModule(contextModule: string): void;
    toOriginalError(): Error;
    toError(): Error;
    toString(): string;
}
