export type ReadonlyDeep = T extends (infer R)[] ? ReadonlyArray> : T extends (...args: unknown[]) => unknown ? T : T extends object ? { readonly [K in keyof T]: ReadonlyDeep; } : T; export type HttpMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "OPTIONS"; export type QueryParams = Record; export type Headers = Record; export type PaginationLinks = { first?: string; prev?: string; next?: string; last?: string; }; export type PaginationMeta = { currentPage: number; perPage: number; totalPages: number; totalItems: number; links: PaginationLinks; }; export type ErrorResponse = { status: number; message: string; code?: string; details?: unknown; };