import { promisified } from './tauri' export enum ResponseType { JSON = 1, Text = 2, Binary = 3 } export enum BodyType { Form = 1, File = 2, Auto = 3 } export type Body = object | string | BinaryType export type HttpVerb = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS' | 'CONNECT' | 'TRACE' export interface HttpOptions { method: HttpVerb url: string headers?: Record params?: Record body?: Body followRedirects: boolean maxRedirections: boolean connectTimeout: number readTimeout: number timeout: number allowCompression: boolean responseType?: ResponseType bodyType: BodyType } export type PartialOptions = Omit /** * makes a HTTP request * * @param options request options * * @return promise resolving to the response */ async function request(options: HttpOptions): Promise { return await promisified({ cmd: 'httpRequest', options: options }) } /** * makes a GET request * * @param url request URL * @param options request options * * @return promise resolving to the response */ async function get(url: string, options: PartialOptions): Promise { return await request({ method: 'GET', url, ...options }) } /** * makes a POST request * * @param url request URL * @param body request body * @param options request options * * @return promise resolving to the response */ async function post(url: string, body: Body, options: PartialOptions): Promise { return await request({ method: 'POST', url, body, ...options }) } /** * makes a PUT request * * @param url request URL * @param body request body * @param options request options * * @return promise resolving to the response */ async function put(url: string, body: Body, options: PartialOptions): Promise { return await request({ method: 'PUT', url, body, ...options }) } /** * makes a PATCH request * * @param url request URL * @param options request options * * @return promise resolving to the response */ async function patch(url: string, options: PartialOptions): Promise { return await request({ method: 'PATCH', url, ...options }) } /** * makes a DELETE request * * @param url request URL * @param options request options * * @return promise resolving to the response */ async function deleteRequest(url: string, options: PartialOptions): Promise { return await request({ method: 'DELETE', url, ...options }) } export default { request, get, post, put, patch, delete: deleteRequest, ResponseType, BodyType }