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; } export {};