Skip to content

cordiverse/http

Repository files navigation

Undios

Fetch-based axios-style HTTP client.

"und" comes from undici, an HTTP/1.1 client officially supported by Node.js team.

"ios" comes from axios, a popular HTTP client for browser and Node.js.

Features

  • Browser and Node.js support
  • Proxy agents (HTTP / HTTPS / SOCKS)
  • WebSocket

Basic Usage

import Undios from '@cordisjs/plugin-http'

const http = new Undios()

const data = await http.get('https://example.com')
const data = await http.post('https://example.com', body)
const { status, data } = await http('https://example.com', { method: 'GET' })

API

Instance Methods

http(url, config?)

interface HTTP {
  <K extends keyof ResponseTypes>(url: string, config: Config & { responseType: K }): Promise<Response<ResponseTypes[K]>>
  <T = any>(url: string | URL, config?: Config): Promise<Response<T>>
}

Send a request.

http.[get|delete|head](url, config?)

interface HTTP {
  get: Request1
  delete: Request1
  head(url: string, config?: Config): Promise<Headers>
}

interface Request1 {
  <K extends keyof ResponseTypes>(url: string, config: Config & { responseType: K }): Promise<ResponseTypes[K]>
  <T = any>(url: string, config?: Config): Promise<T>
}

Send a GET / DELETE / HEAD request.

http.[post|put|patch](url, data, config?)

interface HTTP {
  patch: Request2
  post: Request2
  put: Request2
}

interface Request2 {
  <K extends keyof ResponseTypes>(url: string, data: any, config: Config & { responseType: K }): Promise<ResponseTypes[K]>
  <T = any>(url: string, data?: any, config?: Config): Promise<T>
}

http.ws(url, config?)

interface HTTP {
  ws(url: string | URL, config?: Config): WebSocket
}

Open a WebSocket connection.

Note

Currently we will use ws package to polyfill WebSocket in Node.js.

Once Node.js has a stable WebSocket API, we will switch to it.

Config

interface Config {
  baseURL?: string
  method?: Method
  headers?: Record<string, string>
  redirect?: RequestRedirect
  keepAlive?: boolean
  params?: Record<string, any>
  data?: any
  responseType?: keyof ResponseTypes
  timeout?: number
}

config.baseURL

The base URL of the request. If it is set, the url will be resolved against it.

See URL#base.

config.method

See fetch#method.

config.headers

See fetch#headers.

config.redirect

See fetch#redirect.

config.keepAlive

See fetch#keepalive.

config.params

Additional query parameters. They will be appended to the URL.

config.data

The request body. Currently support below types:

  • string
  • URLSearchParams
  • ArrayBuffer / ArrayBufferView
  • Blob
  • FormData
  • Object (will be serialized to JSON)

config.responseType

Supported response types:

interface ResponseTypes {
  json: any
  text: string
  stream: ReadableStream<Uint8Array>
  blob: Blob
  formdata: FormData
  arraybuffer: ArrayBuffer
}

config.timeout

The request timeout in milliseconds.

config.proxyAgent

Note

In order to use a proxy agent, you need to install @cordisjs/plugin-proxy-agent.

Response

interface Response<T> {
  status: number
  statusText: string
  headers: Headers
  data: T
}

response.status

See Response#status.

response.statusText

See Response#statusText.

response.headers

See Response#headers.

response.data

The decoded response body.

Static Methods

class Undios {
  constructor(config?: Config)
}

Undios.Error.is(error)

function is(error: any): error is Undios.Error