@jokoor/sdk
Version:
Jokoor SMS API SDK for JavaScript/TypeScript
70 lines • 2.38 kB
TypeScript
/**
* 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