@wmmz/fn-api-client
Version:
Cliente HTTP para requisições API com tratamento de erros e respostas padronizadas
1 lines • 43.3 kB
Source Map (JSON)
{"version":3,"sources":["../src/utils/graphqlHelpers.ts","../src/services/GraphQLClient.ts","../src/services/CubeGraphQLClient.ts","../src/services/ApiClient.ts"],"sourcesContent":["import { CubeQueryFields, CubeQueryWhere, CubeQueryOptions } from '../types/graphql'\n\n/**\n * Constrói uma string de campos para a query GraphQL.\n * Transforma um objeto de campos selecionados em uma string formatada\n * para ser usada em uma query GraphQL do Cube.\n * \n * @param fields Objeto com os campos a serem selecionados\n * @returns String formatada com os campos no formato GraphQL\n * \n * @example\n * ```typescript\n * const fields = {\n * vendas: {\n * total: true,\n * data: true,\n * status: true\n * },\n * cliente: {\n * nome: true,\n * email: true\n * }\n * }\n * \n * const result = buildFields(fields)\n * // Resultado:\n * // vendas {\n * // total\n * // data\n * // status\n * // }\n * // cliente {\n * // nome\n * // email\n * // }\n * ```\n */\nexport function buildFields(fields: CubeQueryFields = {}): string {\n return Object.entries(fields)\n .map(([entity, entityFields]) => {\n const selectedFields = Object.entries(entityFields || {})\n .filter(([, selected]) => selected)\n .map(([field]) => field)\n .join('\\n ')\n\n return selectedFields\n ? ` ${entity} {\\n ${selectedFields}\\n }`\n : ''\n })\n .filter(Boolean)\n .join('\\n')\n}\n\n/**\n * Constrói uma string de filtros para a query GraphQL.\n * Transforma um objeto de filtros em uma string formatada\n * para ser usada como cláusula WHERE em uma query GraphQL do Cube.\n * \n * @param where Objeto com os filtros a serem aplicados\n * @returns String formatada com os filtros no formato GraphQL\n * \n * @example\n * ```typescript\n * const where = {\n * vendas: {\n * total: { greaterThan: 1000, lessThan: 5000 },\n * status: { in: ['APROVADA', 'CONCLUIDA'] }\n * },\n * cliente: {\n * tipo: { equals: 'PJ' }\n * }\n * }\n * \n * const result = buildWhereClause(where)\n * // Resultado:\n * // where: {\n * // vendas: {\n * // total: { greaterThan: 1000, lessThan: 5000 },\n * // status: { in: [\"APROVADA\", \"CONCLUIDA\"] }\n * // },\n * // cliente: {\n * // tipo: { equals: \"PJ\" }\n * // }\n * // }\n * ```\n */\nexport function buildWhereClause(where: CubeQueryWhere = {}): string {\n const conditions = Object.entries(where)\n .map(([entity, entityFilters]) => {\n const filters = Object.entries(entityFilters || {})\n .map(([field, conditions]) => {\n const filterStr = Object.entries(conditions || {})\n .map(([operator, value]) => {\n if (Array.isArray(value)) {\n return `${operator}: [${value.join(', ')}]`\n }\n return `${operator}: ${JSON.stringify(value)}`\n })\n .join(', ')\n return `${field}: {${filterStr}}`\n })\n .join(', ')\n return filters ? `${entity}: {${filters}}` : ''\n })\n .filter(Boolean)\n .join(', ')\n\n return conditions ? `where: {${conditions}}` : ''\n}\n\n/**\n * Constrói uma query GraphQL completa para o Cube.\n * Combina todas as opções fornecidas (campos, filtros, paginação)\n * em uma única string de query GraphQL formatada.\n * \n * @param options Opções da query\n * @param options.limit Limite de registros por página\n * @param options.offset Número de registros para pular (paginação)\n * @param options.where Filtros a serem aplicados\n * @param options.fields Campos a serem retornados\n * @param options.defaultEntity Entidade padrão para consulta\n * @param options.defaultFields Campos padrão a serem retornados\n * @returns String da query GraphQL formatada\n * \n * @example\n * ```typescript\n * const query = buildCubeQuery({\n * limit: 20,\n * offset: 0,\n * where: {\n * vendas: {\n * total: { greaterThan: 1000 },\n * status: { in: ['APROVADA', 'CONCLUIDA'] }\n * }\n * },\n * fields: {\n * vendas: {\n * id: true,\n * total: true,\n * status: true\n * }\n * },\n * defaultEntity: 'vendas',\n * defaultFields: ['id', 'total', 'status']\n * })\n * \n * // Resultado:\n * // query CubeQuery {\n * // cube(\n * // limit: 20\n * // offset: 0\n * // where: {\n * // vendas: {\n * // total: { greaterThan: 1000 },\n * // status: { in: [\"APROVADA\", \"CONCLUIDA\"] }\n * // }\n * // }\n * // ) {\n * // vendas {\n * // id\n * // total\n * // status\n * // }\n * // }\n * // }\n * ```\n */\nexport function buildCubeQuery(options: CubeQueryOptions = {}): string {\n const { limit, offset, where, fields, defaultEntity, defaultFields } = options\n const whereClause = buildWhereClause(where)\n const selectedFields = buildFields(fields)\n\n const limitClause = limit ? `limit: ${limit}` : ''\n const offsetClause = offset ? `offset: ${offset}` : ''\n const params = [limitClause, offsetClause, whereClause]\n .filter(Boolean)\n .join('\\n ')\n\n const defaultFieldsString = defaultFields\n ? ` ${defaultEntity} {\\n ${defaultFields.join('\\n ')}\\n }`\n : ''\n\n return `\n query CubeQuery {\n cube${params ? `(\\n ${params}\\n )` : ''} {\n${selectedFields || defaultFieldsString}\n }\n }\n `.trim()\n} ","import axios, { AxiosError, AxiosInstance } from 'axios'\nimport { ApiError, ApiResponse, RequestCallbacks } from '../types/types'\n\n/**\n * Interface para configuração do cliente GraphQL\n */\nexport interface GraphQLConfig {\n baseURL: string\n timeout?: number\n headers?: Record<string, string>\n}\n\n/**\n * Interface para variáveis da query GraphQL\n */\nexport interface GraphQLVariables {\n [key: string]: unknown\n}\n\n/**\n * Cliente base para realizar consultas GraphQL.\n * Fornece uma interface simplificada para executar queries e mutations GraphQL\n * com tratamento automático de erros e padronização de respostas.\n * \n * Características principais:\n * - Suporte a queries e mutations\n * - Tratamento automático de erros\n * - Respostas padronizadas\n * - Tipagem forte com TypeScript\n * - Suporte a variáveis dinâmicas\n * \n * @example\n * ```typescript\n * // Configuração do cliente\n * const client = new GraphQLClient({\n * baseURL: 'https://api.exemplo.com/graphql',\n * headers: {\n * 'Authorization': 'Bearer seu-token'\n * }\n * })\n * \n * // Exemplo de query com variáveis\n * const query = `\n * query GetUser($id: ID!) {\n * user(id: $id) {\n * id\n * name\n * email\n * posts {\n * id\n * title\n * }\n * }\n * }\n * `\n * \n * await client.query(query, { id: '123' }, {\n * onSuccess: (response) => {\n * const user = response.data.user\n * console.log('Usuário:', user.name)\n * console.log('Posts:', user.posts.length)\n * },\n * onError: (error) => console.error('Erro:', error.message)\n * })\n * \n * // Exemplo de mutation\n * const mutation = `\n * mutation CreateUser($input: UserInput!) {\n * createUser(input: $input) {\n * id\n * name\n * email\n * }\n * }\n * `\n * \n * const variables = {\n * input: {\n * name: 'João Silva',\n * email: 'joao@exemplo.com',\n * password: 'senha123'\n * }\n * }\n * \n * await client.mutate(mutation, variables, {\n * onSuccess: (response) => console.log('Usuário criado:', response.data.createUser),\n * onError: (error) => console.error('Erro ao criar usuário:', error.message)\n * })\n * ```\n */\nexport class GraphQLClient {\n protected api: AxiosInstance\n\n /**\n * Cria uma nova instância do cliente GraphQL\n * @param config Configurações do cliente\n * @param config.baseURL URL do endpoint GraphQL\n * @param config.timeout Tempo limite em milissegundos (padrão: 30000)\n * @param config.headers Headers customizados para todas as requisições\n */\n constructor(config: GraphQLConfig) {\n this.api = axios.create({\n baseURL: config.baseURL,\n timeout: config.timeout || 30000,\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers,\n },\n })\n }\n\n /**\n * Extrai e padroniza os dados de erro do Axios\n * @param error Erro original do Axios\n * @returns Objeto de erro padronizado com mensagem, status e detalhes\n * @internal\n */\n protected extractErrorData(error: AxiosError): ApiError {\n return {\n message:\n (error.response?.data as { message?: string })?.message ||\n 'Ocorreu um erro na requisição',\n status: error.response?.status || 500,\n code: error.code,\n details: error.response?.data,\n }\n }\n\n /**\n * Extrai e padroniza os dados da resposta do Axios\n * @param response Resposta original do Axios\n * @returns Objeto de resposta padronizado com dados, status e mensagem\n * @internal\n */\n protected extractResponseData<T>(response: any): ApiResponse<T> {\n return {\n data: response.data.data,\n status: response.status,\n message: 'Operação realizada com sucesso',\n }\n }\n\n /**\n * Executa uma query GraphQL\n * @param query String da query GraphQL\n * @param variables Variáveis a serem passadas para a query\n * @param callbacks Objeto com callbacks de sucesso e erro\n * @param callbacks.onSuccess Callback chamado quando a query é bem sucedida\n * @param callbacks.onError Callback chamado quando ocorre um erro\n * \n * @example\n * ```typescript\n * const query = `\n * query GetProducts($category: String!, $limit: Int) {\n * products(category: $category, limit: $limit) {\n * id\n * name\n * price\n * }\n * }\n * `\n * \n * const variables = {\n * category: 'electronics',\n * limit: 10\n * }\n * \n * await client.query(query, variables, {\n * onSuccess: (response) => console.log('Produtos:', response.data.products),\n * onError: (error) => console.error('Erro:', error.message)\n * })\n * ```\n */\n async query<T>(\n query: string,\n variables: GraphQLVariables = {},\n { onSuccess, onError }: RequestCallbacks<T> = {},\n ): Promise<void> {\n try {\n const response = await this.api.post('', {\n query,\n variables,\n })\n const formattedResponse = this.extractResponseData<T>(response)\n onSuccess?.(formattedResponse)\n } catch (error) {\n const formattedError = this.extractErrorData(error as AxiosError)\n onError?.(formattedError)\n }\n }\n\n /**\n * Executa uma mutation GraphQL\n * @param mutation String da mutation GraphQL\n * @param variables Variáveis a serem passadas para a mutation\n * @param callbacks Objeto com callbacks de sucesso e erro\n * @param callbacks.onSuccess Callback chamado quando a mutation é bem sucedida\n * @param callbacks.onError Callback chamado quando ocorre um erro\n * \n * @example\n * ```typescript\n * const mutation = `\n * mutation UpdateProduct($id: ID!, $input: ProductInput!) {\n * updateProduct(id: $id, input: $input) {\n * id\n * name\n * price\n * }\n * }\n * `\n * \n * const variables = {\n * id: '123',\n * input: {\n * name: 'Novo Nome',\n * price: 99.99\n * }\n * }\n * \n * await client.mutate(mutation, variables, {\n * onSuccess: (response) => console.log('Produto atualizado:', response.data.updateProduct),\n * onError: (error) => console.error('Erro ao atualizar:', error.message)\n * })\n * ```\n */\n async mutate<T>(\n mutation: string,\n variables: GraphQLVariables = {},\n { onSuccess, onError }: RequestCallbacks<T> = {},\n ): Promise<void> {\n return this.query<T>(mutation, variables, { onSuccess, onError })\n }\n} ","import { GraphQLClient } from './GraphQLClient'\nimport { CubeQueryOptions } from '../types/graphql'\nimport { buildCubeQuery } from '../utils/graphqlHelpers'\nimport { RequestCallbacks, ApiResponse } from '../types/types'\n\n/**\n * Cliente específico para realizar consultas GraphQL no Cube.\n * Estende o GraphQLClient base adicionando funcionalidades específicas para\n * consultas no Cube, como construção automática de queries e tratamento\n * especializado de respostas.\n * \n * Características principais:\n * - Construção automática de queries Cube\n * - Suporte a filtros complexos\n * - Paginação integrada\n * - Seleção de campos dinâmica\n * - Tratamento especializado de respostas Cube\n * \n * @example\n * ```typescript\n * // Configuração do cliente\n * const client = new CubeGraphQLClient({\n * baseURL: 'http://localhost:4000',\n * timeout: 30000,\n * headers: {\n * 'Authorization': 'Bearer seu-token'\n * }\n * })\n * \n * // Exemplo de consulta simples\n * await client.query('/cubejs-api/graphql', {\n * limit: 10,\n * fields: {\n * vendas: {\n * total: true,\n * data: true,\n * cliente: true\n * }\n * }\n * }, {\n * onSuccess: (response) => console.log('Vendas:', response.data),\n * onError: (error) => console.error('Erro:', error.message)\n * })\n * \n * // Exemplo de consulta com filtros complexos\n * await client.query('/cubejs-api/graphql', {\n * limit: 20,\n * offset: 0,\n * where: {\n * vendas: {\n * total: { greaterThan: 1000 },\n * data: { between: ['2024-01-01', '2024-12-31'] },\n * status: { in: ['APROVADA', 'CONCLUIDA'] }\n * },\n * cliente: {\n * tipo: { equals: 'PJ' },\n * regiao: { in: ['SUDESTE', 'SUL'] }\n * }\n * },\n * fields: {\n * vendas: {\n * id: true,\n * total: true,\n * data: true,\n * status: true\n * },\n * cliente: {\n * nome: true,\n * tipo: true,\n * regiao: true\n * }\n * },\n * defaultEntity: 'vendas',\n * defaultFields: ['id', 'total', 'data', 'status']\n * }, {\n * onSuccess: (response) => {\n * console.log('Total de registros:', response.data.length)\n * console.log('Dados:', response.data)\n * },\n * onError: (error) => {\n * console.error('Erro na consulta:', error.message)\n * console.error('Detalhes:', error.details)\n * }\n * })\n * ```\n */\nexport class CubeGraphQLClient extends GraphQLClient {\n /**\n * Realiza uma consulta GraphQL específica para o Cube\n * @param url Endpoint da API GraphQL do Cube\n * @param options Opções da query do Cube\n * @param options.limit Limite de registros por página\n * @param options.offset Número de registros para pular (paginação)\n * @param options.where Filtros a serem aplicados na consulta\n * @param options.fields Campos a serem retornados na consulta\n * @param options.defaultEntity Entidade padrão para consulta\n * @param options.defaultFields Campos padrão a serem retornados\n * @param callbacks Callbacks para sucesso e erro\n * \n * @example\n * ```typescript\n * // Exemplo de consulta com agregações\n * await client.query('/cubejs-api/graphql', {\n * where: {\n * vendas: {\n * data: { equals: '2024-03-01' }\n * }\n * },\n * fields: {\n * vendas: {\n * total_vendas: true,\n * quantidade_pedidos: true,\n * ticket_medio: true\n * }\n * }\n * }, {\n * onSuccess: (response) => console.log('Métricas:', response.data),\n * onError: (error) => console.error('Erro:', error.message)\n * })\n * ```\n */\n async query<T>(\n url: string,\n options: CubeQueryOptions = {},\n callbacks: RequestCallbacks<T> = {},\n ): Promise<void> {\n const query = buildCubeQuery(options)\n await this.api.post(url, { query })\n return super.query<T>(query, {}, callbacks)\n }\n\n /**\n * Extrai dados da resposta do Axios e padroniza o formato específico do Cube\n * @param response Resposta original do Axios\n * @returns Objeto de resposta padronizado com dados do Cube\n * @internal\n */\n protected extractResponseData<T>(response: any): ApiResponse<T> {\n return {\n data: response.data.data.cube,\n status: response.status,\n message: 'Operação realizada com sucesso',\n }\n }\n} ","import axios, { AxiosError, AxiosInstance, AxiosResponse } from 'axios'\nimport {\n ApiClientConfig,\n ApiError,\n ApiResponse,\n RequestCallbacks,\n RequestConfig,\n RequestInterceptor,\n ResponseInterceptor,\n ErrorInterceptor,\n QueryParams,\n} from '../types/types'\n\n/**\n * Cliente HTTP para requisições API com tratamento de erros e respostas padronizadas.\n * Fornece uma interface simplificada para realizar requisições HTTP com tratamento automático\n * de erros e padronização de respostas, incluindo suporte a interceptadores.\n * \n * @example\n * ```typescript\n * // Criando uma instância do cliente\n * const api = new ApiClient({\n * baseURL: 'https://api.exemplo.com',\n * timeout: 5000,\n * headers: {\n * 'Authorization': 'Bearer seu-token'\n * }\n * })\n * \n * // Adicionando interceptador de requisição para token dinâmico\n * api.addRequestInterceptor((config) => {\n * const token = getToken()\n * if (token) {\n * config.headers = {\n * ...config.headers,\n * Authorization: `Bearer ${token}`\n * }\n * }\n * return config\n * })\n * \n * // Exemplo de GET com callbacks\n * api.get('/usuarios', {\n * onSuccess: (response) => {\n * console.log('Dados:', response.data)\n * console.log('Status:', response.status)\n * console.log('Mensagem:', response.message)\n * },\n * onError: (error) => {\n * console.error('Erro:', error.message)\n * console.error('Status:', error.status)\n * console.error('Detalhes:', error.details)\n * }\n * })\n * \n * // Exemplo de POST com dados\n * const novoUsuario = {\n * nome: 'João Silva',\n * email: 'joao@exemplo.com'\n * }\n * \n * api.post('/usuarios', novoUsuario, {\n * onSuccess: (response) => console.log('Usuário criado:', response.data),\n * onError: (error) => console.error('Erro ao criar usuário:', error.message)\n * })\n * ```\n */\nexport class ApiClient {\n private api: AxiosInstance\n private requestInterceptors: RequestInterceptor[] = []\n private responseInterceptors: ResponseInterceptor[] = []\n private errorInterceptors: ErrorInterceptor[] = []\n\n /**\n * Cria uma nova instância do cliente API\n * @param config Configurações do cliente\n * @param config.baseURL URL base para todas as requisições\n * @param config.timeout Tempo limite em milissegundos (padrão: 10000)\n * @param config.headers Headers customizados para todas as requisições\n */\n constructor(config: ApiClientConfig) {\n this.api = axios.create({\n baseURL: config.baseURL,\n timeout: config.timeout || 10000,\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers,\n },\n })\n }\n\n /**\n * Adiciona um interceptador de requisição.\n * Permite modificar a configuração da requisição antes do envio.\n * \n * @param interceptor Função que recebe e retorna a configuração da requisição\n * \n * @example\n * ```typescript\n * api.addRequestInterceptor((config) => {\n * const token = storage.getToken()\n * if (token) {\n * config.headers = {\n * ...config.headers,\n * Authorization: `Bearer ${token}`\n * }\n * }\n * return config\n * })\n * ```\n */\n addRequestInterceptor(interceptor: RequestInterceptor): void {\n this.requestInterceptors.push(interceptor)\n }\n\n /**\n * Adiciona um interceptador de resposta.\n * Permite processar a resposta antes de retorná-la para o callback.\n * \n * @param interceptor Função que recebe e retorna a resposta processada\n * \n * @example\n * ```typescript\n * api.addResponseInterceptor((response) => {\n * console.log('Resposta interceptada:', response.status)\n * return {\n * ...response,\n * message: `[${new Date().toISOString()}] ${response.message}`\n * }\n * })\n * ```\n */\n addResponseInterceptor(interceptor: ResponseInterceptor): void {\n this.responseInterceptors.push(interceptor)\n }\n\n /**\n * Adiciona um interceptador de erro.\n * Permite processar erros antes de retorná-los para o callback.\n * \n * @param interceptor Função que recebe um erro e retorna erro processado ou nova resposta\n * \n * @example\n * ```typescript\n * api.addErrorInterceptor(async (error) => {\n * if (error.status === 401) {\n * await refreshToken()\n * // Pode retornar um novo ApiResponse ou o erro processado\n * return {\n * ...error,\n * message: 'Token renovado automaticamente'\n * }\n * }\n * return error\n * })\n * ```\n */\n addErrorInterceptor(interceptor: ErrorInterceptor): void {\n this.errorInterceptors.push(interceptor)\n }\n\n /**\n * Remove um interceptador de requisição específico.\n * @param interceptor Interceptador a ser removido\n */\n removeRequestInterceptor(interceptor: RequestInterceptor): void {\n const index = this.requestInterceptors.indexOf(interceptor)\n if (index > -1) {\n this.requestInterceptors.splice(index, 1)\n }\n }\n\n /**\n * Remove um interceptador de resposta específico.\n * @param interceptor Interceptador a ser removido\n */\n removeResponseInterceptor(interceptor: ResponseInterceptor): void {\n const index = this.responseInterceptors.indexOf(interceptor)\n if (index > -1) {\n this.responseInterceptors.splice(index, 1)\n }\n }\n\n /**\n * Remove um interceptador de erro específico.\n * @param interceptor Interceptador a ser removido\n */\n removeErrorInterceptor(interceptor: ErrorInterceptor): void {\n const index = this.errorInterceptors.indexOf(interceptor)\n if (index > -1) {\n this.errorInterceptors.splice(index, 1)\n }\n }\n\n /**\n * Remove todos os interceptadores.\n */\n clearInterceptors(): void {\n this.requestInterceptors = []\n this.responseInterceptors = []\n this.errorInterceptors = []\n }\n\n /**\n * Aplica todos os interceptadores de requisição à configuração.\n * @param config Configuração inicial da requisição\n * @returns Configuração processada pelos interceptadores\n * @internal\n */\n private applyRequestInterceptors(config: RequestConfig): RequestConfig {\n return this.requestInterceptors.reduce(\n (processedConfig, interceptor) => interceptor(processedConfig),\n config\n )\n }\n\n /**\n * Aplica todos os interceptadores de resposta.\n * @param response Resposta original\n * @returns Resposta processada pelos interceptadores\n * @internal\n */\n private applyResponseInterceptors<T>(response: ApiResponse<T>): ApiResponse<T> {\n return this.responseInterceptors.reduce(\n (processedResponse, interceptor) => interceptor(processedResponse),\n response\n )\n }\n\n /**\n * Aplica todos os interceptadores de erro.\n * @param error Erro original\n * @returns Erro processado ou nova resposta\n * @internal\n */\n private async applyErrorInterceptors(error: ApiError): Promise<ApiError | ApiResponse<unknown>> {\n let processedError: ApiError | ApiResponse<unknown> = error\n\n for (const interceptor of this.errorInterceptors) {\n try {\n const result = await interceptor(error)\n processedError = result\n // Se um interceptador retornar uma ApiResponse, para o processamento\n if ('data' in result) {\n break\n }\n } catch (interceptorError) {\n // Se um interceptador falhar, continua com o próximo\n console.warn('Erro no interceptador de erro:', interceptorError)\n }\n }\n\n return processedError\n }\n\n /**\n * Extrai e padroniza os dados de erro do Axios\n * @param error Erro original do Axios\n * @returns Objeto de erro padronizado\n * @internal\n */\n private extractErrorData(error: AxiosError): ApiError {\n return {\n message:\n (error.response?.data as { message?: string })?.message ||\n 'Ocorreu um erro na requisição',\n status: error.response?.status || 500,\n code: error.code,\n details: error.response?.data,\n }\n }\n\n /**\n * Extrai e padroniza os dados da resposta do Axios\n * @param response Resposta original do Axios\n * @returns Objeto de resposta padronizado\n * @internal\n */\n private extractResponseData<T>(response: AxiosResponse<T>): ApiResponse<T> {\n const responseData = response.data as { message?: string }\n return {\n data: response.data,\n status: response.status,\n message: responseData.message || 'Operação realizada com sucesso',\n }\n }\n\n /**\n * Realiza uma requisição GET\n * @param url Caminho da requisição (será concatenado com baseURL)\n * @param paramsOrCallbacks Parâmetros de query string ou objeto com callbacks\n * @param callbacks Objeto com callbacks de sucesso e erro (opcional se parâmetros forem fornecidos)\n * \n * @example\n * ```typescript\n * // GET simples\n * api.get('/usuarios/1', {\n * onSuccess: (response) => console.log('Usuário:', response.data),\n * onError: (error) => console.error('Erro:', error.message)\n * })\n * \n * // GET com parâmetros\n * api.get('/votos', { userId: '123', agendaId: '456' }, {\n * onSuccess: (response) => console.log('Voto:', response.data),\n * onError: (error) => console.error('Erro:', error.message)\n * })\n * ```\n */\n async get<T>(\n url: string,\n paramsOrCallbacks?: QueryParams | RequestCallbacks<T>,\n callbacks?: RequestCallbacks<T>\n ): Promise<void> {\n // Determina se o primeiro parâmetro são parâmetros ou callbacks\n let params: QueryParams | undefined\n let finalCallbacks: RequestCallbacks<T>\n\n if (paramsOrCallbacks && ('onSuccess' in paramsOrCallbacks || 'onError' in paramsOrCallbacks)) {\n // Primeiro parâmetro são callbacks\n params = undefined\n finalCallbacks = paramsOrCallbacks as RequestCallbacks<T>\n } else {\n // Primeiro parâmetro são parâmetros\n params = paramsOrCallbacks as QueryParams\n finalCallbacks = callbacks || {}\n }\n\n const { onSuccess, onError } = finalCallbacks\n\n try {\n // Aplica interceptadores de requisição\n const requestConfig = this.applyRequestInterceptors({\n url,\n method: 'GET',\n headers: {},\n params\n })\n\n const response = await this.api.get<T>(requestConfig.url || url, {\n headers: requestConfig.headers,\n timeout: requestConfig.timeout,\n params: requestConfig.params || params\n })\n\n let formattedResponse = this.extractResponseData<T>(response)\n\n // Aplica interceptadores de resposta\n formattedResponse = this.applyResponseInterceptors(formattedResponse)\n\n onSuccess?.(formattedResponse)\n } catch (error) {\n let formattedError = this.extractErrorData(error as AxiosError)\n\n // Aplica interceptadores de erro\n const processedError = await this.applyErrorInterceptors(formattedError)\n\n // Se o interceptador retornou uma ApiResponse, chama onSuccess\n if ('data' in processedError) {\n onSuccess?.(processedError as ApiResponse<T>)\n } else {\n onError?.(processedError as ApiError)\n }\n }\n }\n\n /**\n * Realiza uma requisição POST\n * @param url Caminho da requisição (será concatenado com baseURL)\n * @param data Dados a serem enviados no corpo da requisição\n * @param callbacks Objeto com callbacks de sucesso e erro\n * @param callbacks.onSuccess Callback chamado em caso de sucesso\n * @param callbacks.onError Callback chamado em caso de erro\n * \n * @example\n * ```typescript\n * const dados = { nome: 'João', idade: 30 }\n * api.post('/usuarios', dados, {\n * onSuccess: (response) => console.log('Criado:', response.data),\n * onError: (error) => console.error('Erro:', error.message)\n * })\n * ```\n */\n async post<T>(\n url: string,\n data: unknown,\n { onSuccess, onError }: RequestCallbacks<T> = {},\n ): Promise<void> {\n try {\n // Aplica interceptadores de requisição\n const requestConfig = this.applyRequestInterceptors({\n url,\n method: 'POST',\n headers: {},\n data\n })\n\n const response = await this.api.post<T>(\n requestConfig.url || url,\n requestConfig.data || data,\n {\n headers: requestConfig.headers,\n timeout: requestConfig.timeout\n }\n )\n\n let formattedResponse = this.extractResponseData<T>(response)\n\n // Aplica interceptadores de resposta\n formattedResponse = this.applyResponseInterceptors(formattedResponse)\n\n onSuccess?.(formattedResponse)\n } catch (error) {\n let formattedError = this.extractErrorData(error as AxiosError)\n\n // Aplica interceptadores de erro\n const processedError = await this.applyErrorInterceptors(formattedError)\n\n // Se o interceptador retornou uma ApiResponse, chama onSuccess\n if ('data' in processedError) {\n onSuccess?.(processedError as ApiResponse<T>)\n } else {\n onError?.(processedError as ApiError)\n }\n }\n }\n\n /**\n * Realiza uma requisição PUT\n * @param url Caminho da requisição (será concatenado com baseURL)\n * @param data Dados a serem enviados no corpo da requisição\n * @param callbacks Objeto com callbacks de sucesso e erro\n * @param callbacks.onSuccess Callback chamado em caso de sucesso\n * @param callbacks.onError Callback chamado em caso de erro\n * \n * @example\n * ```typescript\n * const atualizacao = { idade: 31 }\n * api.put('/usuarios/1', atualizacao, {\n * onSuccess: (response) => console.log('Atualizado:', response.data),\n * onError: (error) => console.error('Erro:', error.message)\n * })\n * ```\n */\n async put<T>(\n url: string,\n data: unknown,\n { onSuccess, onError }: RequestCallbacks<T> = {},\n ): Promise<void> {\n try {\n // Aplica interceptadores de requisição\n const requestConfig = this.applyRequestInterceptors({\n url,\n method: 'PUT',\n headers: {},\n data\n })\n\n const response = await this.api.put<T>(\n requestConfig.url || url,\n requestConfig.data || data,\n {\n headers: requestConfig.headers,\n timeout: requestConfig.timeout\n }\n )\n\n let formattedResponse = this.extractResponseData<T>(response)\n\n // Aplica interceptadores de resposta\n formattedResponse = this.applyResponseInterceptors(formattedResponse)\n\n onSuccess?.(formattedResponse)\n } catch (error) {\n let formattedError = this.extractErrorData(error as AxiosError)\n\n // Aplica interceptadores de erro\n const processedError = await this.applyErrorInterceptors(formattedError)\n\n // Se o interceptador retornou uma ApiResponse, chama onSuccess\n if ('data' in processedError) {\n onSuccess?.(processedError as ApiResponse<T>)\n } else {\n onError?.(processedError as ApiError)\n }\n }\n }\n\n /**\n * Realiza uma requisição DELETE\n * @param url Caminho da requisição (será concatenado com baseURL)\n * @param paramsOrCallbacks Parâmetros de query string ou objeto com callbacks\n * @param callbacks Objeto com callbacks de sucesso e erro (opcional se parâmetros forem fornecidos)\n * \n * @example\n * ```typescript\n * // DELETE simples\n * api.delete('/usuarios/1', {\n * onSuccess: (response) => console.log('Deletado com sucesso'),\n * onError: (error) => console.error('Erro ao deletar:', error.message)\n * })\n * \n * // DELETE com parâmetros\n * api.delete('/votos', { userId: '123', agendaId: '456' }, {\n * onSuccess: (response) => console.log('Voto removido:', response.data),\n * onError: (error) => console.error('Erro:', error.message)\n * })\n * ```\n */\n async delete<T>(\n url: string,\n paramsOrCallbacks?: QueryParams | RequestCallbacks<T>,\n callbacks?: RequestCallbacks<T>\n ): Promise<void> {\n // Determina se o primeiro parâmetro são parâmetros ou callbacks\n let params: QueryParams | undefined\n let finalCallbacks: RequestCallbacks<T>\n\n if (paramsOrCallbacks && ('onSuccess' in paramsOrCallbacks || 'onError' in paramsOrCallbacks)) {\n // Primeiro parâmetro são callbacks\n params = undefined\n finalCallbacks = paramsOrCallbacks as RequestCallbacks<T>\n } else {\n // Primeiro parâmetro são parâmetros\n params = paramsOrCallbacks as QueryParams\n finalCallbacks = callbacks || {}\n }\n\n const { onSuccess, onError } = finalCallbacks\n\n try {\n // Aplica interceptadores de requisição\n const requestConfig = this.applyRequestInterceptors({\n url,\n method: 'DELETE',\n headers: {},\n params\n })\n\n const response = await this.api.delete<T>(requestConfig.url || url, {\n headers: requestConfig.headers,\n timeout: requestConfig.timeout,\n params: requestConfig.params || params\n })\n\n let formattedResponse = this.extractResponseData<T>(response)\n\n // Aplica interceptadores de resposta\n formattedResponse = this.applyResponseInterceptors(formattedResponse)\n\n onSuccess?.(formattedResponse)\n } catch (error) {\n let formattedError = this.extractErrorData(error as AxiosError)\n\n // Aplica interceptadores de erro\n const processedError = await this.applyErrorInterceptors(formattedError)\n\n // Se o interceptador retornou uma ApiResponse, chama onSuccess\n if ('data' in processedError) {\n onSuccess?.(processedError as ApiResponse<T>)\n } else {\n onError?.(processedError as ApiError)\n }\n }\n }\n}\n"],"mappings":"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","names":["conditions","axios"]}