120 lines
6.4 KiB
TypeScript
120 lines
6.4 KiB
TypeScript
/**
|
|
* lib/api.ts — Shim de compatibilidade.
|
|
* Fornece o objeto `api` legado mapeado para os novos endpoints.
|
|
* Migre os consumidores para importar de chatApiService.ts diretamente.
|
|
*/
|
|
export { api as apiInstance, authApi } from '../services/chatApiService'
|
|
import { instanceApi, chatbotApi } from '../services/chatApiService'
|
|
import axios from 'axios'
|
|
|
|
const BASE = process.env.NEXT_PUBLIC_API_URL ?? 'http://localhost:8008'
|
|
|
|
const http = axios.create({ baseURL: BASE })
|
|
http.interceptors.request.use((cfg) => {
|
|
const t = typeof window !== 'undefined' ? localStorage.getItem('token') : null
|
|
if (t) cfg.headers.Authorization = `Bearer ${t}`
|
|
return cfg
|
|
})
|
|
|
|
/** @deprecated Use authApi from chatApiService.ts */
|
|
export const api = {
|
|
// ── Auth ──
|
|
loginUser: async (email: string, password: string) => {
|
|
const { data } = await http.post('/api/auth/login', { email, password })
|
|
return { success: true, token: data.accessToken, refreshToken: data.refreshToken, user: data.user }
|
|
},
|
|
loginAdmin: async (email: string, password: string) => {
|
|
const { data } = await http.post('/api/auth/login', { email, password })
|
|
if (data.user?.role !== 'ADMIN') return { success: false, message: 'Acesso restrito a administradores' }
|
|
return { success: true, token: data.accessToken, refreshToken: data.refreshToken, user: data.user }
|
|
},
|
|
getMe: async () => {
|
|
const { data } = await http.get('/api/auth/me')
|
|
return { success: true, data: { ...data, role: (data.role ?? 'USER').toLowerCase() } }
|
|
},
|
|
register: async (name: string, email: string, password: string) => {
|
|
const { data } = await http.post('/api/auth/register', { name, email, password })
|
|
return { success: true, token: data.accessToken, refreshToken: data.refreshToken, user: data.user }
|
|
},
|
|
|
|
// ── Instances ──
|
|
createWhatsAppInstance: (name: string) => instanceApi.create(name),
|
|
getWhatsAppQr: (id: string, _number?: string) => instanceApi.getQr(id),
|
|
disconnectWhatsAppInstance: (id: string) => instanceApi.disconnect(id),
|
|
updateWhatsAppPhoto: async (_name: string) => ({ ok: true }),
|
|
restartWhatsAppInstance: async (id: string) => instanceApi.connect(id),
|
|
|
|
getWhatsAppInstances: async () => {
|
|
const data = await instanceApi.list()
|
|
const list = Array.isArray(data) ? data : (data.instances ?? [])
|
|
return {
|
|
instances: list.map((i: any) => ({
|
|
id: i.id,
|
|
instance: i.id,
|
|
nome: i.name,
|
|
status: i.status === 'CONNECTED' ? 'connected' : 'disconnected',
|
|
phone: i.phone ?? '',
|
|
})),
|
|
saved: [],
|
|
}
|
|
},
|
|
|
|
// ── Legacy WhatsApp methods (stubs — não existem no novo backend) ──
|
|
getWhatsAppChats: async (instance: string) => {
|
|
const { chatApi } = await import('../services/chatApiService')
|
|
const data = await chatApi.list(instance)
|
|
return { chats: data }
|
|
},
|
|
getWhatsAppContacts: async (_instance: string) => ({ contacts: [] }),
|
|
getWhatsAppHistory: async (phone: string, _limit: number, _skip: number, instance?: string, remoteJid?: string) => {
|
|
const { messageApi } = await import('../services/chatApiService')
|
|
const chatId = remoteJid || phone
|
|
const { messages } = await messageApi.list(chatId)
|
|
return { messages }
|
|
},
|
|
sendWhatsAppText: async (instance: string, to: string, text: string, _leadId?: any, _quotedId?: any, _remoteJid?: any, _quoted?: any) => {
|
|
const { messageApi } = await import('../services/chatApiService')
|
|
return messageApi.send(instance, to, text)
|
|
},
|
|
sendWhatsAppMedia: async (_instance: string, _to: string, _url: string, _type: string, _caption?: string, _leadId?: any) => ({ ok: true }),
|
|
sendWhatsAppAudio: async (_instance: string, _to: string, _url: string, _leadId?: any) => ({ ok: true }),
|
|
editWhatsAppMessage: async (_instance: string, _jid: string, _id: string, _text: string) => ({ ok: true }),
|
|
blockWhatsAppContact: async (_instance: string, _jid: string, _block: boolean) => ({ ok: true }),
|
|
markWhatsAppAsRead: async (_jid: string, _instance: string, _msgId?: string): Promise<void> => {},
|
|
reactWhatsAppMessage: async (_instance: string, _jid: string, _id: string, _emoji: string) => ({ ok: true }),
|
|
deleteWhatsAppMessage: async (_instance: string, _jid: string, _id: string) => ({ ok: true }),
|
|
forwardWhatsAppMessage: async (_instance: string, _to: string, _payload: any) => ({ ok: true }),
|
|
sendWhatsAppPresence: async (_to: string, _presence: string, _instance: string) => ({ ok: true }),
|
|
syncWhatsAppEvents: async (_after?: number) => ({ ok: true, events: [], timestamp: Date.now() }),
|
|
syncWhatsAppAvatar: async (_jid: string, _instance: string) => ({ ok: true }),
|
|
getWhatsAppLabels: async (_instance: string) => ({ labels: [] }),
|
|
pinWhatsAppChat: async (_id: number, _pin: boolean) => ({ ok: true }),
|
|
archiveWhatsAppChat: async (_id: number, _archived: boolean) => ({ ok: true }),
|
|
deleteWhatsAppChat: async (_id: number) => ({ ok: true }),
|
|
uploadFile: async (_file: File) => ({ url: '' }),
|
|
getInstanceErrors: async (_instance: string, _limit: number) => ({ errors: [] }),
|
|
getInstanceConfigs: async (_instance: string) => ({}),
|
|
getInstanceMetrics: async (_instance: string) => ({}),
|
|
updateInstanceConfigs: async (_instance: string, _data: any) => ({ ok: true }),
|
|
|
|
// ── AI Bots ──
|
|
getAICredentials: (instanceId: string) => chatbotApi.getCredentials(instanceId),
|
|
createAICredential: (instanceId: string, name: string, apiKey: string, provider: 'GEMINI' | 'OPENAI' = 'GEMINI') =>
|
|
chatbotApi.createCredential(instanceId, { name, apiKey, provider }),
|
|
deleteAICredential: (instanceId: string, credId: string) =>
|
|
chatbotApi.deleteCredential(instanceId, credId),
|
|
getAIBots: (instanceId: string) => chatbotApi.getBots(instanceId),
|
|
createAIBot: (instanceId: string, data: Record<string, unknown>) =>
|
|
chatbotApi.createBot(instanceId, data),
|
|
updateAIBot: (instanceId: string, botId: string, data: Record<string, unknown>) =>
|
|
chatbotApi.updateBot(instanceId, botId, data),
|
|
deleteAIBot: (instanceId: string, botId: string) =>
|
|
chatbotApi.deleteBot(instanceId, botId),
|
|
|
|
// ── Generic fallbacks ──
|
|
post: async (url: string, data?: any) => { const r = await http.post(url, data); return r.data },
|
|
get: async (url: string, cfg?: any) => { const r = await http.get(url, cfg); return r.data },
|
|
put: async (url: string, data?: any) => { const r = await http.put(url, data); return r.data },
|
|
delete: async (url: string, cfg?: any) => { const r = await http.delete(url, cfg); return r.data },
|
|
}
|