UNPKG

bling-mcp

Version:

API MCP para integração com Bling

68 lines (58 loc) 2.49 kB
import axios from 'axios'; import { config } from '../config/index.js'; /** * Cliente para acessar a API do Bling */ export const blingClient = axios.create({ baseURL: config.apiUrl, headers: { Authorization: `Bearer ${config.token}`, 'Content-Type': 'application/json' } }); /** * Renova o token de acesso usando o refresh_token * @returns Novo token de acesso */ export async function renovarToken(): Promise<string> { try { if (!config.clientId || !config.clientSecret || !config.refreshToken) { throw new Error('Credenciais para renovação de token não configuradas'); } console.log('Tentando renovar token com as seguintes credenciais:'); console.log(`Client ID: ${config.clientId?.substring(0, 5)}...`); console.log(`Client Secret: ${config.clientSecret?.substring(0, 5)}...`); console.log(`Refresh Token: ${config.refreshToken?.substring(0, 5)}...`); const credenciais = Buffer.from(`${config.clientId}:${config.clientSecret}`).toString('base64'); const params = new URLSearchParams(); params.append('grant_type', 'refresh_token'); params.append('refresh_token', config.refreshToken || ''); console.log('Enviando requisição para renovar token...'); const response = await axios.post('https://www.bling.com.br/Api/v3/oauth/token', params, { headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': `Basic ${credenciais}` } } ); console.log('Resposta da renovação de token:', JSON.stringify(response.data, null, 2)); // Atualizar o token no cliente const novoToken = response.data.access_token; blingClient.defaults.headers.Authorization = `Bearer ${novoToken}`; // Aqui você poderia salvar o novo token em um arquivo .env ou banco de dados // para uso futuro, mas isso depende da implementação específica console.log(`Token renovado com sucesso: ${novoToken.substring(0, 10)}...`); return novoToken; } catch (error) { if (axios.isAxiosError(error)) { console.error('Erro ao renovar token:'); console.error('Status:', error.response?.status); console.error('Headers:', JSON.stringify(error.response?.headers, null, 2)); console.error('Data:', JSON.stringify(error.response?.data, null, 2)); throw new Error(`Erro ao renovar token: ${error.response?.data?.error?.description || error.message}`); } throw error; } }