UNPKG

bling-mcp

Version:

API MCP para integração com Bling

100 lines (92 loc) 3.55 kB
import { blingClient, renovarToken } from '../blingClient.js'; import axios from 'axios'; // Interface baseada no schema FormasPagamentosDadosBaseDTO export interface FormaPagamento { id?: number; descricao: string; tipoPagamento: number; // 1=Dinheiro, 2=Cheque, ... finalidade: number; // 1=Pagamentos, 2=Recebimentos, 3=Ambos situacao?: number; // 0=Inativa, 1=Ativa padrao?: number; // 0=Não, 1=Padrão, 2=Padrão devolução fixa?: boolean; } export interface ListarFormasPagamentosParams { pagina?: number; limite?: number; descricao?: string; situacao?: number; tipoPagamento?: number; finalidade?: number; } /** * Lista as formas de pagamento cadastradas no Bling */ export async function listarFormasPagamentos(params?: ListarFormasPagamentosParams): Promise<FormaPagamento[]> { try { console.log('Listando formas de pagamento', params); const response = await blingClient.get('/formas-pagamentos', { params }); return response.data.data as FormaPagamento[]; } catch (error) { return handleApiError(error, 'listarFormasPagamentos', params); } } /** * Obtém uma forma de pagamento pelo ID */ export async function obterFormaPagamento(id: number | string): Promise<FormaPagamento> { try { console.log('Obtendo forma de pagamento', id); const response = await blingClient.get(`/formas-pagamentos/${id}`); return response.data.data as FormaPagamento; } catch (error) { return handleApiError(error, 'obterFormaPagamento', { id }); } } /** * Cria uma nova forma de pagamento */ export async function criarFormaPagamento(forma: Omit<FormaPagamento, 'id' | 'fixa'>): Promise<FormaPagamento> { try { console.log('Criando forma de pagamento', forma); const response = await blingClient.post('/formas-pagamentos', forma); return response.data.data as FormaPagamento; } catch (error) { return handleApiError(error, 'criarFormaPagamento', forma); } } /** * Atualiza uma forma de pagamento existente */ export async function atualizarFormaPagamento(id: number | string, forma: Partial<FormaPagamento>): Promise<FormaPagamento> { try { console.log('Atualizando forma de pagamento', id, forma); const response = await blingClient.put(`/formas-pagamentos/${id}`, forma); return response.data.data as FormaPagamento; } catch (error) { return handleApiError(error, 'atualizarFormaPagamento', { id, forma }); } } /** * Remove uma forma de pagamento pelo ID */ export async function excluirFormaPagamento(id: number | string): Promise<void> { try { console.log('Excluindo forma de pagamento', id); await blingClient.delete(`/formas-pagamentos/${id}`); console.log('Forma de pagamento excluída com sucesso'); } catch (error) { return handleApiError(error, 'excluirFormaPagamento', { id }); } } // Tratamento centralizado de erro e renovação de token async function handleApiError(error: unknown, funcName: string, params: any): Promise<any> { if (axios.isAxiosError(error) && error.response?.status === 401) { await renovarToken(); if (funcName === 'listarFormasPagamentos') return listarFormasPagamentos(params); if (funcName === 'obterFormaPagamento') return obterFormaPagamento(params.id); if (funcName === 'criarFormaPagamento') return criarFormaPagamento(params); if (funcName === 'atualizarFormaPagamento') return atualizarFormaPagamento(params.id, params.forma); if (funcName === 'excluirFormaPagamento') return excluirFormaPagamento(params.id); } throw error; }