import { ReactElement } from 'react'; import { AxiosRequestConfig, AxiosResponse } from 'axios'; import { Socket } from 'socket.io-client'; import { FormErrors } from '@cezembre/forms'; import { ManagerOptions } from 'socket.io-client/build/esm/manager'; import { SocketOptions } from 'socket.io-client/build/esm/socket'; import { DurationLike } from 'luxon/src/duration'; import { ModelName } from './utils'; export interface Model { __name__?: N; id: string; creation?: string; last_update?: string; } export type PaginatedList = { [key in N]: D[]; } & { total: number; url?: string; limit?: number; page?: number; next_page?: number; previous_page?: number; }; export interface ApiErrorData { status?: number; code?: string; form_errors?: FE; state?: Record; message?: string; } export declare class ApiError extends Error implements ApiErrorData { readonly __FLAG__ = "ApiError"; status?: number; code?: string; form_errors?: FE; state?: Record; constructor(error: Error | ApiErrorData | string); } export declare function isApiError(error: unknown): boolean; export interface RequestBody { [key: string]: unknown; } export declare function buildRequestBody(body: B): FormData; export interface ApiConfig { host?: string | null; api_key?: string | null; locale?: string | null; bearer_token?: string | null; } export interface RequestQuery { expand?: string; 'expand[]'?: string; required_permissions?: string; required_permissions_mode?: string; } export interface ListRequestQuery extends RequestQuery { order?: string; limit?: number; page?: number; } export declare function buildRequestConfig(apiConfig?: ApiConfig, query?: Q): AxiosRequestConfig; export declare function apiGet(url: string, apiConfig?: ApiConfig, query?: Q): Promise>; export declare function apiPost(url: string, body?: B, apiConfig?: ApiConfig, query?: Q): Promise>; export declare function apiPut(url: string, body?: B, apiConfig?: ApiConfig, query?: Q): Promise>; export declare function apiDelete(url: string, apiConfig?: ApiConfig, query?: Q): Promise>; export interface ApiContext { config?: ApiConfig; setConfig(config: ApiConfig): void; setHost(host?: string | null, duration?: DurationLike): void; setApiKey(apiKey?: string | null, duration?: DurationLike): void; setLocale(locale?: string | null, duration?: DurationLike): void; setBearerToken(bearerToken?: string | null, duration?: DurationLike): void; get(route: string, query?: Q): Promise>; post(route: string, body?: B, query?: Q): Promise>; put(route: string, body?: B, query?: Q): Promise>; delete(route: string, query?: Q): Promise>; createSocket: (namespace?: string, opts?: Partial) => Socket; } export declare function useApi(): ApiContext; export interface ApiProviderProps { children?: ReactElement; config?: ApiConfig; persistConfig?: boolean; } export declare function ApiProvider({ children, config, persistConfig, }: ApiProviderProps): ReactElement;