
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
evolution-manager-library
Advanced tools
Modern React component library for Evolution API with theming support
Biblioteca React moderna para gerenciar instâncias WhatsApp através da Evolution API com suporte completo ao TypeScript, componentes UI e sistema de temas.
npm install evolution-manager-library
# ou
yarn add evolution-manager-library
Esta biblioteca oferece três formas de uso, cada uma adequada para diferentes cenários:
Componentes React completos e prontos para uso. Recomendado para começar rápido.
<InstanceManager /> - Gerencia múltiplas instâncias<InstanceController /> - Controla uma instância específicauseEvolutionManager (React com Controle)Hook React que oferece gerenciamento de estado integrado. Ideal para integrar em apps React customizados.
EvolutionManager (Máximo Controle)Classe standalone sem dependências do React. Ideal para projetos vanilla JS/TS ou controle total.
Por que existem duas opções (Hook e Classe)?
- A classe é o core da biblioteca - funciona em qualquer lugar (Node.js, vanilla JS, etc)
- O hook adiciona conveniências do React (estado automático, loading, error handling)
- Ambos são necessários: a classe para flexibilidade, o hook para produtividade em React
import React from "react";
import {
InstanceManager,
ThemeProvider,
defaultTheme,
} from "evolution-manager-library";
function App() {
return (
<ThemeProvider theme={defaultTheme} toggleTheme={() => {}}>
<InstanceManager
baseUrl="https://your-evolution-api.com"
apiKey="your-api-key"
refreshInterval={10000}
showCreateButton={true}
maxInstances={5}
autoRefresh={true}
/>
</ThemeProvider>
);
}
import React from "react";
import {
InstanceController,
ThemeProvider,
darkTheme,
} from "evolution-manager-library";
function WhatsAppInstance() {
return (
<ThemeProvider theme={darkTheme} toggleTheme={() => {}}>
<InstanceController
baseUrl="https://your-evolution-api.com"
apiKey="your-api-key"
instanceId="minha-instancia"
showControls={true}
showStatus={true}
showSettings={true}
autoRefresh={true}
onInstanceCreated={(name) => console.log("Instância criada:", name)}
onInstanceConnected={(name) => console.log("Conectado:", name)}
onInstanceDeleted={(name) => console.log("Deletado:", name)}
/>
</ThemeProvider>
);
}
import { EvolutionManager } from "evolution-manager-library";
const manager = new EvolutionManager(
"https://your-evolution-api.com",
"your-api-key"
);
// Criar uma nova instância WhatsApp
const instance = await manager.createInstance("my-whatsapp");
// Conectar e obter QR code
const qrCode = await manager.connectInstance("my-whatsapp");
console.log("QR Code:", qrCode.base64);
// Enviar mensagem
await manager.sendMessage("my-whatsapp", "5511999999999", "Olá Mundo!");
// Listar todas as instâncias
const instances = await manager.listInstances();
console.log("Instâncias ativas:", instances);
import React from "react";
import {
useEvolutionManager,
ThemeProvider,
InstanceCard,
defaultTheme,
} from "evolution-manager-library";
function CustomApp() {
const {
instances,
loading,
error,
createInstance,
connectInstance,
sendMessage,
} = useEvolutionManager({
baseUrl: "https://your-evolution-api.com",
apiKey: "your-api-key",
});
if (loading) return <div>Carregando...</div>;
if (error) return <div>Erro: {error}</div>;
return (
<ThemeProvider theme={defaultTheme} toggleTheme={() => {}}>
<div>
{instances.map((instance) => (
<InstanceCard
key={instance.name}
instance={instance}
onConnect={connectInstance}
onDelete={(name) => console.log("Delete", name)}
/>
))}
</div>
</ThemeProvider>
);
}
// Gerenciador completo de múltiplas instâncias
<InstanceManager
baseUrl="https://api.com"
apiKey="key"
refreshInterval={10000} // Intervalo de atualização (ms)
autoRefresh={true} // Auto-refresh automático
showCreateButton={true} // Mostrar botão de criar
maxInstances={5} // Limite máximo de instâncias
/>
// Controlador de instância específica
<InstanceController
baseUrl="https://api.com"
apiKey="key"
instanceId="minha-instancia"
showControls={true} // Mostrar controles
showStatus={true} // Mostrar status
autoRefresh={true}
onInstanceCreated={(name) => {}}
onInstanceDeleted={(name) => {}}
onInstanceConnected={(name) => {}}
/>
import {
InstanceCard, // Card de gerenciamento de instância
ConnectionStatus, // Status de conexão
QRCodeDisplay, // Exibição de QR Code
MessageList, // Lista de mensagens
ContactList, // Lista de contatos
} from "evolution-manager-library";
import {
Button, // Botão estilizado
Input, // Input com label
Card, // Container estilizado
Badge, // Badge de status
Modal, // Modal responsivo
Loading, // Indicador de carregamento
} from "evolution-manager-library";
// Exemplo de uso
<Button variant="primary" size="md" onClick={handleClick}>
Conectar Instância
</Button>
<Badge variant="success">Conectado</Badge>
<Input
label="Nome da Instância"
placeholder="Digite o nome..."
helperText="Escolha um nome único"
error={hasError}
/>
import {
ThemeProvider,
defaultTheme,
darkTheme,
useTheme,
} from "evolution-manager-library";
function App() {
const [currentTheme, setCurrentTheme] = useState(defaultTheme);
const toggleTheme = () => {
setCurrentTheme((current) =>
current === defaultTheme ? darkTheme : defaultTheme
);
};
return (
<ThemeProvider theme={currentTheme} toggleTheme={toggleTheme}>
<MyComponents />
</ThemeProvider>
);
}
// Criar nova instância
await manager.createInstance("nome-instancia", "WHATSAPP-BAILEYS");
// Conectar instância (retorna QR code)
const qr = await manager.connectInstance("nome-instancia");
// Listar todas as instâncias
const instances = await manager.listInstances();
// Obter instância específica
const instance = await manager.getInstance("nome-instancia");
// Desconectar instância
await manager.disconnectInstance("nome-instancia");
// Deletar instância
await manager.deleteInstance("nome-instancia");
// Status da instância
const status = await manager.getInstanceStatus("nome-instancia");
// Enviar mensagem de texto
await manager.sendMessage("instancia", "5511999999999", "Olá!");
// Enviar mídia
await manager.sendMedia(
"instancia",
"5511999999999",
"https://example.com/image.jpg",
"image",
"Legenda opcional"
);
// Obter mensagens do chat
const messages = await manager.getChatMessages("instancia", "chat-id", 50);
// Marcar como lido
await manager.markAsRead("instancia", "chat-id", false, "msg-id");
// Listar contatos
const contacts = await manager.getContacts("instancia");
// Listar chats
const chats = await manager.getChats("instancia");
// Obter perfil da instância
const profile = await manager.getProfile("instancia");
const settings = {
rejectCall: true, // Auto-rejeitar chamadas
msgCall: "Não aceito chamadas", // Mensagem ao rejeitar
groupsIgnore: false, // Ignorar mensagens de grupo
alwaysOnline: true, // Sempre mostrar como online
readMessages: true, // Auto-ler mensagens
readStatus: true, // Auto-ler status
syncFullHistory: false, // Sincronizar histórico completo
};
await manager.setInstanceSettings("instancia", settings);
await manager.setWebhook("instancia", "https://meu-webhook.com/evolution", [
"messages.upsert",
"connection.update",
]);
Definições TypeScript completas incluídas:
import {
EvolutionManager,
InstanceData,
MessageData,
ContactData,
ApiResponse,
} from "evolution-manager-library";
const manager: EvolutionManager = new EvolutionManager(baseUrl, apiKey);
const instances: InstanceData[] = await manager.listInstances();
interface InstanceData {
name: string;
status: "connected" | "disconnected" | "connecting";
webhook?: string;
integration: string;
connectionState?: string;
}
interface MessageData {
id: string;
from: string;
to: string;
content: string;
type: "text" | "image" | "video" | "audio" | "document";
timestamp: string;
fromMe: boolean;
}
interface ApiResponse<T = any> {
status: string;
message?: string;
data?: T;
}
O projeto possui 16 testes unitários cobrindo todas as funcionalidades principais:
# Executar testes
npm test
# Executar testes com interface
npm run test:ui
# Executar build de produção
npm run build
# Build da biblioteca
npm run build
# Build do Storybook
npm run build-storybook
# Verificação de tipos
npm run type-check
# Lint
npm run lint
git checkout -b feature/nova-featuregit commit -m 'Add nova feature'git push origin feature/nova-featureMIT License - veja o arquivo LICENSE para detalhes.
// Criar instância
createInstance(instanceName: string, integration?: string): Promise<ApiResponse>
// Listar todas as instâncias
listInstances(includeStats?: boolean): Promise<InstanceData[]>
// Obter instância específica
getInstance(instanceName: string): Promise<InstanceData>
// Buscar instância única com detalhes completos
fetchSingleInstance(instanceName: string): Promise<InstanceData | null>
// Conectar instância e obter QR Code
connectInstance(instanceName: string): Promise<ApiResponse>
// Desconectar/logout da instância
disconnectInstance(instanceName: string): Promise<ApiResponse>
// Deletar instância permanentemente
deleteInstance(instanceName: string): Promise<ApiResponse>
// Obter status de conexão
getInstanceStatus(instanceName: string): Promise<ApiResponse>
// Enviar mensagem de texto
sendMessage(instanceName: string, number: string, message: string): Promise<ApiResponse>
// Enviar mídia (image, video, audio, document)
sendMedia(
instanceName: string,
number: string,
mediaUrl: string,
mediaType?: "image" | "video" | "audio" | "document",
caption?: string
): Promise<ApiResponse>
// Marcar mensagem como lida
markAsRead(instanceName: string, remoteJid: string, fromMe: boolean, id: string): Promise<ApiResponse>
// Obter mensagens de um chat
getChatMessages(instanceName: string, remoteJid: string, limit?: number): Promise<MessageData[]>
// Listar todos os chats
getChats(instanceName: string): Promise<ChatData[]>
// Listar todos os contatos
getContacts(instanceName: string): Promise<ContactData[]>
// Obter perfil da instância
getProfile(instanceName: string): Promise<ApiResponse>
// Definir configurações da instância
setInstanceSettings(instanceName: string, settings: InstanceSettings): Promise<ApiResponse>
// Obter configurações da instância
getInstanceSettings(instanceName: string): Promise<InstanceSettings>
// Configurar webhook
setWebhook(instanceName: string, webhookUrl: string, events?: string[]): Promise<ApiResponse>
// Status da API Evolution
getApiStatus(): Promise<ApiResponse>
// Informações do perfil (device info)
getInstanceProfile(instanceName: string): Promise<ApiResponse>
O hook retorna todas as funcionalidades acima mais:
{
// Estado
manager: EvolutionManager | null,
instances: InstanceData[],
messages: MessageData[],
contacts: ContactData[],
chats: ChatData[],
loading: boolean,
error: string | null,
// Métodos de instância (todos com loading/error handling)
createInstance: (name: string, integration?: string) => Promise<ApiResponse>,
deleteInstance: (name: string) => Promise<ApiResponse>,
connectInstance: (name: string) => Promise<ApiResponse>,
disconnectInstance: (name: string) => Promise<ApiResponse>,
getInstanceStatus: (name: string) => Promise<ApiResponse>,
fetchSingleInstance: (name: string) => Promise<InstanceData | null>,
// Métodos de mensagem
sendMessage: (instanceName: string, number: string, message: string) => Promise<ApiResponse>,
sendMedia: (...) => Promise<ApiResponse>,
getChatMessages: (...) => Promise<MessageData[]>,
markAsRead: (...) => Promise<ApiResponse>,
// Data refresh methods
refreshInstances: () => Promise<void>,
refreshContacts: (instanceName: string) => Promise<void>,
refreshChats: (instanceName: string) => Promise<void>,
refreshMessages: (instanceName: string, remoteJid: string, limit?: number) => Promise<void>,
// Utilities
clearError: () => void,
setLoading: (loading: boolean) => void
}
Feito com ❤️ por Leo Zanini
FAQs
Modern React component library for Evolution API with theming support
We found that evolution-manager-library demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.