import type superagent from 'superagent' import type http from 'http' import { Response as SuperAgentResponse } from 'superagent' import { ErrorHandler, ErrorLogger } from './Errors' import { type ApiConfig } from './ApiConfig' export interface Request { path: string query?: object | string headers?: Record responseType?: string retries?: number timeout?: ApiConfig['timeout'] raw?: boolean errorHandler?: ErrorHandler retryHandler?: (retry?: boolean) => (err: Error, res: SuperAgentResponse) => boolean | undefined } type JsonBody = { data?: Record | string | Array | undefined multipartData?: never files?: never } type MultipartBody = | { data?: never multipartData: object | string[] files: { [key: string]: { buffer: Buffer; originalname: string } } } | { data?: never multipartData?: never files: { [key: string]: { buffer: Buffer; originalname: string } } } | { data?: never multipartData: object | string[] files?: never } export type RequestWithBody = Request & { retry?: boolean } & ( | JsonBody | MultipartBody ) export interface StreamRequest { path: string headers?: Record errorLogger?: ErrorLogger timeout?: ApiConfig['timeout'] } export interface CallContext { superagent: superagent.SuperAgent token: string | undefined agent: http.Agent } export interface Call { (callContex: CallContext): Promise }