@iamnnort/request
Version:
Request handler for Node.js - Fast - Interactive - Simple
165 lines (159 loc) • 5.19 kB
text/typescript
import { AxiosRequestConfig } from 'axios';
type RequestParams = Pick<AxiosRequestConfig, 'params' | 'data'>;
type RequestConfigParams = Pick<AxiosRequestConfig, 'params' | 'data'>;
type RequestConfig = Omit<AxiosRequestConfig, 'baseURL' | 'url'> & {
baseUrl?: string;
baseUrlName?: string;
baseUrlMap?: Record<string, string>;
url?: number | string;
urlParts?: (number | string)[];
bearerToken?: string;
apiKey?: string;
urlencoded?: boolean;
multipart?: boolean;
xml?: boolean;
};
type BaseRequestConfig = Pick<AxiosRequestConfig, 'auth' | 'headers' | 'timeout' | 'responseType'> & {
name?: string;
baseUrl?: string;
baseUrlName?: string;
baseUrlMap?: Record<string, string>;
url?: number | string;
urlParts?: (number | string)[];
bearerToken?: string;
apiKey?: string;
debug?: boolean;
logger?: boolean;
serializer?: {
array?: 'indices' | 'brackets' | 'repeat' | 'comma';
};
};
type ResponseConfig = {
raw?: boolean;
bulkCallback?: (page: number) => Promise<void>;
};
type Response<T = unknown> = {
success: boolean;
data?: T;
errorCode?: string;
};
type RawResponse<T = unknown> = {
success: boolean;
status: HttpStatuses;
method: HttpMethods;
data: T;
};
declare enum HttpMethods {
GET = "get",
POST = "post",
PUT = "put",
DELETE = "delete"
}
declare enum HttpStatuses {
CONTINUE = 100,
SWITCHING_PROTOCOLS = 101,
PROCESSING = 102,
EARLYHINTS = 103,
OK = 200,
CREATED = 201,
ACCEPTED = 202,
NON_AUTHORITATIVE_INFORMATION = 203,
NO_CONTENT = 204,
RESET_CONTENT = 205,
PARTIAL_CONTENT = 206,
AMBIGUOUS = 300,
MOVED_PERMANENTLY = 301,
FOUND = 302,
SEE_OTHER = 303,
NOT_MODIFIED = 304,
TEMPORARY_REDIRECT = 307,
PERMANENT_REDIRECT = 308,
BAD_REQUEST = 400,
UNAUTHORIZED = 401,
PAYMENT_REQUIRED = 402,
FORBIDDEN = 403,
NOT_FOUND = 404,
METHOD_NOT_ALLOWED = 405,
NOT_ACCEPTABLE = 406,
PROXY_AUTHENTICATION_REQUIRED = 407,
REQUEST_TIMEOUT = 408,
CONFLICT = 409,
GONE = 410,
LENGTH_REQUIRED = 411,
PRECONDITION_FAILED = 412,
PAYLOAD_TOO_LARGE = 413,
URI_TOO_LONG = 414,
UNSUPPORTED_MEDIA_TYPE = 415,
REQUESTED_RANGE_NOT_SATISFIABLE = 416,
EXPECTATION_FAILED = 417,
I_AM_A_TEAPOT = 418,
MISDIRECTED = 421,
UNPROCESSABLE_ENTITY = 422,
FAILED_DEPENDENCY = 424,
PRECONDITION_REQUIRED = 428,
TOO_MANY_REQUESTS = 429,
INTERNAL_SERVER_ERROR = 500,
NOT_IMPLEMENTED = 501,
BAD_GATEWAY = 502,
SERVICE_UNAVAILABLE = 503,
GATEWAY_TIMEOUT = 504,
HTTP_VERSION_NOT_SUPPORTED = 505
}
type PaginationDto = {
pagination?: boolean | null;
page?: number | null;
pageSize?: number | null;
bulkSize?: number | null;
};
type Pagination = {
total: number;
currentPage: number;
lastPage: number;
from: number;
to: number;
pageSize: number;
};
type PaginationResponse<T = unknown> = {
data: T[];
pagination: Pagination;
};
declare class RequestBuilder {
baseConfig: BaseRequestConfig;
requestConfig: RequestConfig;
config: AxiosRequestConfig;
constructor(params: {
baseConfig: BaseRequestConfig;
requestConfig: RequestConfig;
});
makeContentType(): this;
makeAuth(): this;
makeUrl(): this;
makeMethod(): this;
makeData(): this;
makeParams(): this;
makeSerializer(): this;
build(): AxiosRequestConfig<any>;
}
declare class RequestDataSource<Entity extends Record<string, any> = any, SearchParams extends RequestConfigParams = any, SearchResponse extends Record<string, any> = any, CreateParams extends RequestConfigParams = any, UpdateParams extends RequestConfigParams = any> {
baseRequestConfig: BaseRequestConfig;
constructor(baseRequestConfig: BaseRequestConfig);
common<T>(requestConfig: RequestConfig): Promise<T>;
common<T>(requestConfig: RequestConfig, responseConfig: ResponseConfig): Promise<RawResponse<T>>;
bulkCommon<T>(requestConfig: RequestConfig, responseConfig?: ResponseConfig): AsyncGenerator<T[]>;
search(config?: SearchParams): Promise<SearchResponse>;
bulkSearch(config?: SearchParams): AsyncGenerator<Entity[], any, unknown>;
get(id: number | string, config?: SearchParams): Promise<Entity>;
create(config: CreateParams): Promise<Entity>;
bulkCreate(config: Omit<CreateParams, 'data'> & {
data: CreateParams['data'][];
}): Promise<Entity[]>;
update(id: number | string, config: UpdateParams): Promise<Entity>;
bulkUpdate(config: Omit<UpdateParams, 'data'> & {
data: UpdateParams['data'][];
}): Promise<Entity[]>;
remove(id: number | string, config?: SearchParams): Promise<void>;
}
declare class RequestHelper {
static sleep(seconds: number): Promise<unknown>;
}
export { type BaseRequestConfig, HttpMethods, HttpStatuses, type Pagination, type PaginationDto, type PaginationResponse, type RawResponse, RequestBuilder, type RequestConfig, type RequestConfigParams, RequestDataSource, RequestHelper, type RequestParams, type Response, type ResponseConfig };