bling-mcp
Version:
API MCP para integração com Bling
68 lines (58 loc) • 2.49 kB
text/typescript
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;
}
}