UNPKG

@oxyhq/services

Version:

Reusable OxyHQ module to handle authentication, user management, karma system, device-based session management and more 🚀

88 lines (77 loc) • 2 kB
/** * Utility functions for common API patterns */ /** * Build URL search parameters from an object * @param params Object with parameter key-value pairs * @returns URLSearchParams instance */ export function buildSearchParams(params: Record<string, any>): URLSearchParams { const searchParams = new URLSearchParams(); for (const [key, value] of Object.entries(params)) { if (value !== undefined && value !== null) { searchParams.append(key, value.toString()); } } return searchParams; } /** * Build URL with search parameters * @param baseUrl Base URL * @param params Object with parameter key-value pairs * @returns Complete URL with search parameters */ export function buildUrl(baseUrl: string, params?: Record<string, any>): string { if (!params) return baseUrl; const searchParams = buildSearchParams(params); const queryString = searchParams.toString(); return queryString ? `${baseUrl}?${queryString}` : baseUrl; } /** * Common pagination parameters */ export interface PaginationParams { limit?: number; offset?: number; } /** * Build pagination search parameters * @param params Pagination parameters * @returns URLSearchParams with pagination */ export function buildPaginationParams(params: PaginationParams): URLSearchParams { return buildSearchParams(params); } /** * Common API response wrapper */ export interface ApiResponse<T = any> { data: T; message?: string; success?: boolean; } /** * Common error response wrapper */ export interface ErrorResponse { message: string; code: string; status: number; details?: any; } /** * Safe JSON parsing with error handling * @param data Data to parse * @param fallback Fallback value if parsing fails * @returns Parsed data or fallback */ export function safeJsonParse<T>(data: any, fallback: T): T { if (typeof data === 'string') { try { return JSON.parse(data); } catch { return fallback; } } return data as T; }