UNPKG

@jokoor/sdk

Version:
70 lines 2.38 kB
/** * Base resource class for API wrappers */ import { Configuration } from '../generated/configuration'; import type { KeysToCamelCase, KeysToSnakeCase } from '../types/case-conversion'; import { Result } from '../types/result'; /** * Standard API response format from Jokoor backend * All API responses follow this structure */ export interface ApiResponse<T> { data?: T; error?: string; } export interface PaginatedResponse<T> { items: T[]; count: number; offset: number; limit: number; } export interface ListOptions { offset?: number; limit?: number; } export declare abstract class BaseResource { protected configuration: Configuration; constructor(configuration: Configuration); /** * Convert parameters from camelCase to snake_case for API calls */ protected convertParamsToSnakeCase<T>(params: T): KeysToSnakeCase<T>; /** * Convert snake_case to camelCase */ protected toCamelCase(str: string): string; /** * Type-safe conversion of object keys from snake_case to camelCase */ protected convertKeysToCamelCase<T>(obj: T): KeysToCamelCase<T>; /** * Extract data from response wrapper * The API returns {data?: T, error?: string} format * Returns a Result type instead of throwing */ protected extractData<T>(response: any): Result<T>; /** * Handle API calls with proper error catching * Converts exceptions to Result types */ protected handleApiCall<T>(apiCall: () => Promise<any>): Promise<Result<T>>; /** * Convert offset-based pagination to page number * @param offset The offset (number of records to skip) * @param limit The limit (page size) * @returns The page number (1-based) */ protected offsetToPage(offset?: number, limit?: number): number; /** * Convert API response to SDK paginated response format * The API returns {items: T[], count: number, offset: number, limit: number} * @param response The API response * @returns Result containing SDK paginated response */ protected convertToPaginatedResponse<T>(response: any): Result<PaginatedResponse<T>>; /** * Handle paginated API calls */ protected handlePaginatedApiCall<T>(apiCall: () => Promise<any>): Promise<Result<PaginatedResponse<T>>>; } //# sourceMappingURL=base.d.ts.map