import { IncomingHttpHeaders } from "http";
import { CurlOption, Easy, HttpPostField, HttpPostField as HttpPostField$1 } from "node-libcurl";

//#region src/types.d.ts
type CustomJsonType = any;
type HttpVerb = "GET" | "HEAD" | "POST" | "PUT" | "DELETE" | "CONNECT" | "OPTIONS" | "TRACE" | "PATCH";
type BufferEncoding = "ascii" | "utf8" | "utf-8" | "utf16le" | "ucs2" | "ucs-2" | "base64" | "base64url" | "latin1" | "binary" | "hex";
type SetEasyOptionCallback = (curl: Easy, curlOption: CurlOption) => void;
interface Options {
  headers?: IncomingHttpHeaders;
  qs?: {
    [key: string]: CustomJsonType;
  };
  json?: CustomJsonType;
  body?: string | Buffer;
  formData?: HttpPostField$1[];
  timeout?: number;
  followRedirects?: boolean;
  maxRedirects?: number;
  insecure?: boolean;
  setEasyOptions?: SetEasyOptionCallback;
}
type GetBody = {
  <Encoding extends BufferEncoding>(encoding: Encoding): string;
  (encoding?: undefined): Buffer;
};
type GetJSON = <T = CustomJsonType>(encoding?: BufferEncoding) => T;
interface Response {
  statusCode: number;
  headers: IncomingHttpHeaders;
  url: string;
  body: string | Buffer;
  getBody: GetBody;
  getJSON: GetJSON;
}
//#endregion
//#region src/request.d.ts
/**
 * Performs an HTTP request using cURL with the specified parameters.
 *
 * @param {HttpVerb} method - The HTTP method for the request (e.g., 'GET', 'POST')
 * @param {string} url - The URL to make the request to
 * @param {Options} [options={}] - An object to configure the request
 * @returns {Response} - HTTP response consisting of status code, headers, and body
 */
declare const request: (method: HttpVerb, url: string, options?: Options) => Response;
//#endregion
export { type BufferEncoding, type HttpPostField, type HttpVerb, type Options, type Response, type SetEasyOptionCallback, request as default };
//# sourceMappingURL=index.d.cts.map