Skip to content

Interfaces

The interfaces used throughout the Httx library.

HttxConfig

typescript
interface HttxConfig {
  verbose?: boolean | string[]
  defaultHeaders?: Record<string, string>
  baseUrl?: string
  timeout?: number
}

Configuration options for the HttxClient.

RequestOptions

typescript
interface RequestOptions {
  method: HttpMethod
  headers?: Record<string, string>
  body?: BodyInit | Record<string, string>
  query?: Record<string, string>
  timeout?: number
  json?: boolean
  form?: boolean
  multipart?: boolean
  verbose?: boolean
}

Options for individual requests.

HttxResponse

typescript
interface HttxResponse<T> {
  data: T
  status: number
  headers: Headers
  timing: {
    start: number
    end: number
    duration: number
  }
}

Response object containing the parsed data and metadata.

Ok

typescript
interface Ok<T> {
  isOk: () => true
  isErr: () => false
  value: T
}

Represents a successful result.

Err

typescript
interface Err<E> {
  isOk: () => false
  isErr: () => true
  error: E
}

Represents an error result.

Examples

Extending HttxConfig

typescript
interface CustomConfig extends HttxConfig {
  retryCount: number
  retryDelay: number
}

class CustomClient extends HttxClient {
  constructor(config: CustomConfig) {
    super(config)
    this.retryCount = config.retryCount
    this.retryDelay = config.retryDelay
  }
}

Custom Request Options

typescript
interface CustomRequestOptions extends RequestOptions {
  retryOnError?: boolean
  cache?: boolean
}

class CustomClient extends HttxClient {
  async request<T>(url: string, options: CustomRequestOptions): Promise<Result<HttxResponse<T>, Error>> {
    if (options.retryOnError) {
      // Implement retry logic
    }
    if (options.cache) {
      // Implement caching logic
    }
    return super.request(url, options)
  }
}

Custom Response Type

typescript
interface CustomResponse<T> extends HttxResponse<T> {
  metadata: {
    cached: boolean
    retryCount: number
  }
}

class CustomClient extends HttxClient {
  async request<T>(url: string, options: RequestOptions): Promise<Result<CustomResponse<T>, Error>> {
    const result = await super.request<T>(url, options)
    if (result.isOk()) {
      return ok({
        ...result.value,
        metadata: {
          cached: false,
          retryCount: 0
        }
      })
    }
    return result
  }
}

Type-Safe Error Handling

typescript
interface ApiError extends Error {
  code: string
  status: number
}

interface CustomErr extends Err<ApiError> {
  isRetryable: () => boolean
}

class CustomClient extends HttxClient {
  async request<T>(url: string, options: RequestOptions): Promise<Result<HttxResponse<T>, ApiError>> {
    const result = await super.request<T>(url, options)
    if (result.isErr()) {
      const error = result.error as ApiError
      error.code = 'API_ERROR'
      error.status = 500
    }
    return result
  }
}

Released under the MIT License.