export enum ErrorType {
  SkippedSlot,
  NoBlockOrBlockTime,
  Ratelimit,
}

export class SolanaFailure extends Error {
  readonly code?: number | unknown;
  readonly type?: ErrorType;

  constructor(code: number | unknown, message: string, type?: ErrorType) {
    super(message);
    this.code = code;

    if (this.code === -32007 || this.code === -32009) {
      this.type = ErrorType.SkippedSlot;
    }

    if (type) {
      this.type = type;
    }
  }

  public skippedSlot(): boolean {
    return this.type === ErrorType.SkippedSlot;
  }

  public noBlockOrBlockTime(): boolean {
    return this.type === ErrorType.NoBlockOrBlockTime;
  }
}
