dengun_ai-admin-client
Version:
Cliente simples para integração com o AI Admin Dashboard - Plug and Play
813 lines (699 loc) • 26 kB
JavaScript
#!/usr/bin/env node
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
/**
* Script de inicialização completa - Setup para integração com AI Admin Dashboard
* Cria toda a estrutura necessária para conectar app externa ao dashboard
*/
const CONFIG_DIR = 'ai-admin-config';
// Detectar se é projeto Next.js
function isNextJsProject() {
var _a, _b;
const packageJsonPath = path_1.default.join(process.cwd(), 'package.json');
if (fs_1.default.existsSync(packageJsonPath)) {
const packageJson = JSON.parse(fs_1.default.readFileSync(packageJsonPath, 'utf-8'));
return !!(((_a = packageJson.dependencies) === null || _a === void 0 ? void 0 : _a.next) || ((_b = packageJson.devDependencies) === null || _b === void 0 ? void 0 : _b.next));
}
return false;
}
// Detectar se é projeto Express
function isExpressProject() {
var _a, _b;
const packageJsonPath = path_1.default.join(process.cwd(), 'package.json');
if (fs_1.default.existsSync(packageJsonPath)) {
const packageJson = JSON.parse(fs_1.default.readFileSync(packageJsonPath, 'utf-8'));
return !!(((_a = packageJson.dependencies) === null || _a === void 0 ? void 0 : _a.express) || ((_b = packageJson.devDependencies) === null || _b === void 0 ? void 0 : _b.express));
}
return false;
}
function createEnvFile() {
const envContent = `# ========================================
# AI ADMIN DASHBOARD - CONFIGURAÇÃO
# ========================================
# 🔗 CONEXÃO COM DASHBOARD (Obrigatório)
DASHBOARD_URL=http://localhost:3000
BOT_ID=seu-bot-id
BOT_SECRET=seu-bot-secret
# ⚙️ CONFIGURAÇÕES AUTOMÁTICAS (Opcional)
AUTO_REPORT_USAGE=true
AUTO_REPORT_ERRORS=true
REPORT_INTERVAL=30000
DEBUG=false
# 🔐 CONFIGURAÇÕES DE SEGURANÇA
JWT_SECRET=your-jwt-secret-here
API_TIMEOUT=10000
MAX_RETRIES=3
# 📊 CONFIGURAÇÕES DE TELEMETRIA
TELEMETRY_ENABLED=true
ERROR_REPORTING=true
ANALYTICS_ENABLED=true
# 🌐 CONFIGURAÇÕES DA APLICAÇÃO
NODE_ENV=development
PORT=3001
`;
const envPath = path_1.default.join(process.cwd(), CONFIG_DIR, '.env');
const envExamplePath = path_1.default.join(process.cwd(), CONFIG_DIR, '.env.example');
fs_1.default.writeFileSync(envPath, envContent);
fs_1.default.writeFileSync(envExamplePath, envContent);
console.log('✅ Arquivos de ambiente criados:');
console.log(' - ai-admin-config/.env');
console.log(' - ai-admin-config/.env.example');
}
function createClientSetup() {
const clientContent = `import { AiAdminClient } from 'dengun_ai-admin-client';
import dotenv from 'dotenv';
// Carregar variáveis de ambiente
dotenv.config();
// Configuração do cliente AI Admin
export const aiAdminClient = new AiAdminClient({
dashboardUrl: process.env.DASHBOARD_URL!,
botId: process.env.BOT_ID!,
botSecret: process.env.BOT_SECRET!,
options: {
autoReportUsage: process.env.AUTO_REPORT_USAGE === 'true',
autoReportErrors: process.env.AUTO_REPORT_ERRORS === 'true',
reportInterval: parseInt(process.env.REPORT_INTERVAL || '30000'),
timeout: parseInt(process.env.API_TIMEOUT || '10000'),
maxRetries: parseInt(process.env.MAX_RETRIES || '3'),
debug: process.env.DEBUG === 'true'
}
});
// Singleton para garantir uma única instância
let isInitialized = false;
export async function initializeAiAdmin(): Promise<AiAdminClient> {
if (!isInitialized) {
try {
await aiAdminClient.initialize();
isInitialized = true;
console.log('🚀 AI Admin Client inicializado com sucesso');
} catch (error) {
console.error('❌ Erro ao inicializar AI Admin Client:', error);
throw error;
}
}
return aiAdminClient;
}
// Função para usar em handlers
export async function withAiAdmin<T>(
handler: (client: AiAdminClient) => Promise<T>
): Promise<T> {
const client = await initializeAiAdmin();
return handler(client);
}
// Eventos de monitoramento
aiAdminClient.on('connected', () => {
console.log('🔗 Conectado ao AI Admin Dashboard');
});
aiAdminClient.on('disconnected', () => {
console.log('🔌 Desconectado do AI Admin Dashboard');
});
aiAdminClient.on('sessionCreated', (session) => {
console.log('👤 Nova sessão criada:', session.sessionId);
});
aiAdminClient.on('usageReported', (usage) => {
console.log('📊 Uso reportado:', usage.tokensUsed, 'tokens');
});
aiAdminClient.on('errorReported', (error) => {
console.log('🐛 Erro reportado:', error.error);
});
// Graceful shutdown
process.on('SIGTERM', async () => {
console.log('🔴 Encerrando AI Admin Client...');
await aiAdminClient.shutdown();
process.exit(0);
});
process.on('SIGINT', async () => {
console.log('🔴 Encerrando AI Admin Client...');
await aiAdminClient.shutdown();
process.exit(0);
});
`;
const clientPath = path_1.default.join(process.cwd(), CONFIG_DIR, 'client.ts');
fs_1.default.writeFileSync(clientPath, clientContent);
console.log('✅ Cliente configurado: ai-admin-config/client.ts');
}
function createExpressIntegration() {
const expressContent = `import express from 'express';
import { aiAdminClient, initializeAiAdmin, withAiAdmin } from './client';
const app = express();
const port = process.env.PORT || 3001;
// Middleware
app.use(express.json());
// Middleware de CORS para dashboard
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', process.env.DASHBOARD_URL);
res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
next();
});
// Endpoint de status para o dashboard
app.get('/api/ai-admin/status', async (req, res) => {
try {
const status = await aiAdminClient.getConnectionStatus();
const stats = await aiAdminClient.getUsageStats();
const sessions = aiAdminClient.getActiveSessions();
res.json({
connected: status.connected,
activeSessions: sessions.length,
tokensUsed: stats.local?.totalTokens || 0,
totalUsage: stats.local?.totalUsage || 0,
lastPing: status.lastPing
});
} catch (error) {
res.status(500).json({ error: 'Erro ao obter status' });
}
});
// Endpoint de chat - Exemplo de integração
app.post('/api/chat', async (req, res) => {
try {
const { message, userId, tenantId } = req.body;
if (!message || !userId || !tenantId) {
return res.status(400).json({
error: 'message, userId e tenantId são obrigatórios'
});
}
await withAiAdmin(async (client) => {
// 1. Criar sessão para o usuário
const session = await client.createUserSession(userId, tenantId, {
userAgent: req.headers['user-agent'],
ip: req.ip
});
try {
// 2. Processar mensagem (SUBSTITUA PELA SUA LÓGICA)
const response = await processMessage(message);
// 3. Reportar uso automaticamente
await client.reportUsage({
sessionId: session.sessionId,
userId,
tenantId,
action: 'chat_message',
tokensUsed: response.tokensUsed,
metadata: {
messageLength: message.length,
responseTime: response.responseTime
}
});
res.json({
response: response.content,
sessionId: session.sessionId,
tokensUsed: response.tokensUsed
});
} finally {
// 4. Encerrar sessão
await client.endUserSession(session.sessionId);
}
});
} catch (error) {
console.error('Erro no chat:', error);
// Reportar erro automaticamente
try {
await aiAdminClient.reportError({
error: error instanceof Error ? error.message : String(error),
errorCode: 'CHAT_ERROR',
context: { endpoint: '/api/chat', body: req.body }
});
} catch (reportError) {
console.error('Erro ao reportar erro:', reportError);
}
res.status(500).json({ error: 'Erro interno' });
}
});
// Webhook para receber comandos do dashboard
app.post('/api/ai-admin/webhook', async (req, res) => {
try {
const { type, data } = req.body;
switch (type) {
case 'ping':
res.json({ status: 'ok', timestamp: Date.now() });
break;
case 'status_check':
const status = await aiAdminClient.getConnectionStatus();
res.json(status);
break;
default:
res.status(400).json({ error: 'Tipo de comando não suportado' });
}
} catch (error) {
console.error('Erro no webhook:', error);
res.status(500).json({ error: 'Erro interno' });
}
});
// Função de exemplo para processar mensagens
async function processMessage(message: string) {
// SUBSTITUA ESTA FUNÇÃO PELA SUA LÓGICA DE IA/CHATBOT
const responseTime = Date.now();
// Simular processamento
await new Promise(resolve => setTimeout(resolve, 500));
return {
content: \`Resposta para: \${message}\`,
tokensUsed: Math.floor(message.length * 0.75), // Exemplo de cálculo
responseTime: Date.now() - responseTime
};
}
// Inicializar servidor
async function startServer() {
try {
// Inicializar cliente AI Admin
await initializeAiAdmin();
app.listen(port, () => {
console.log(\`🚀 Servidor rodando na porta \${port}\`);
console.log(\`📡 Dashboard URL: \${process.env.DASHBOARD_URL}\`);
console.log(\`🤖 Bot ID: \${process.env.BOT_ID}\`);
});
} catch (error) {
console.error('❌ Erro ao iniciar servidor:', error);
process.exit(1);
}
}
startServer();
`;
const expressPath = path_1.default.join(process.cwd(), CONFIG_DIR, 'express-server.ts');
fs_1.default.writeFileSync(expressPath, expressContent);
console.log('✅ Integração Express criada: ai-admin-config/express-server.ts');
}
function createNextJsIntegration() {
// API Route para chat
const chatApiContent = `import { NextRequest, NextResponse } from 'next/server';
import { aiAdminClient, withAiAdmin } from '../../client';
export async function POST(request: NextRequest) {
try {
const { message, userId, tenantId } = await request.json();
if (!message || !userId || !tenantId) {
return NextResponse.json(
{ error: 'message, userId e tenantId são obrigatórios' },
{ status: 400 }
);
}
const result = await withAiAdmin(async (client) => {
// 1. Criar sessão para o usuário
const session = await client.createUserSession(userId, tenantId, {
userAgent: request.headers.get('user-agent'),
ip: request.headers.get('x-forwarded-for') || 'unknown'
});
try {
// 2. Processar mensagem (SUBSTITUA PELA SUA LÓGICA)
const response = await processMessage(message);
// 3. Reportar uso automaticamente
await client.reportUsage({
sessionId: session.sessionId,
userId,
tenantId,
action: 'chat_message',
tokensUsed: response.tokensUsed,
metadata: {
messageLength: message.length,
responseTime: response.responseTime
}
});
return {
response: response.content,
sessionId: session.sessionId,
tokensUsed: response.tokensUsed
};
} finally {
// 4. Encerrar sessão
await client.endUserSession(session.sessionId);
}
});
return NextResponse.json(result);
} catch (error) {
console.error('Erro no chat:', error);
// Reportar erro automaticamente
try {
await aiAdminClient.reportError({
error: error instanceof Error ? error.message : String(error),
errorCode: 'CHAT_ERROR',
context: { endpoint: '/api/chat' }
});
} catch (reportError) {
console.error('Erro ao reportar erro:', reportError);
}
return NextResponse.json(
{ error: 'Erro interno' },
{ status: 500 }
);
}
}
// Função de exemplo para processar mensagens
async function processMessage(message: string) {
// SUBSTITUA ESTA FUNÇÃO PELA SUA LÓGICA DE IA/CHATBOT
const responseTime = Date.now();
// Simular processamento
await new Promise(resolve => setTimeout(resolve, 500));
return {
content: \`Resposta para: \${message}\`,
tokensUsed: Math.floor(message.length * 0.75), // Exemplo de cálculo
responseTime: Date.now() - responseTime
};
}
`;
// API Route para status
const statusApiContent = `import { NextRequest, NextResponse } from 'next/server';
import { aiAdminClient } from '../../client';
export async function GET(request: NextRequest) {
try {
const status = await aiAdminClient.getConnectionStatus();
const stats = await aiAdminClient.getUsageStats();
const sessions = aiAdminClient.getActiveSessions();
return NextResponse.json({
connected: status.connected,
activeSessions: sessions.length,
tokensUsed: stats.local?.totalTokens || 0,
totalUsage: stats.local?.totalUsage || 0,
lastPing: status.lastPing
});
} catch (error) {
return NextResponse.json(
{ error: 'Erro ao obter status' },
{ status: 500 }
);
}
}
`;
// API Route para webhook
const webhookApiContent = `import { NextRequest, NextResponse } from 'next/server';
import { aiAdminClient } from '../../client';
export async function POST(request: NextRequest) {
try {
const { type, data } = await request.json();
switch (type) {
case 'ping':
return NextResponse.json({ status: 'ok', timestamp: Date.now() });
case 'status_check':
const status = await aiAdminClient.getConnectionStatus();
return NextResponse.json(status);
default:
return NextResponse.json(
{ error: 'Tipo de comando não suportado' },
{ status: 400 }
);
}
} catch (error) {
console.error('Erro no webhook:', error);
return NextResponse.json(
{ error: 'Erro interno' },
{ status: 500 }
);
}
}
`;
// Criar diretórios
const apiDir = path_1.default.join(process.cwd(), CONFIG_DIR, 'app', 'api');
const chatDir = path_1.default.join(apiDir, 'chat');
const statusDir = path_1.default.join(apiDir, 'ai-admin', 'status');
const webhookDir = path_1.default.join(apiDir, 'ai-admin', 'webhook');
fs_1.default.mkdirSync(chatDir, { recursive: true });
fs_1.default.mkdirSync(statusDir, { recursive: true });
fs_1.default.mkdirSync(webhookDir, { recursive: true });
// Criar arquivos
fs_1.default.writeFileSync(path_1.default.join(chatDir, 'route.ts'), chatApiContent);
fs_1.default.writeFileSync(path_1.default.join(statusDir, 'route.ts'), statusApiContent);
fs_1.default.writeFileSync(path_1.default.join(webhookDir, 'route.ts'), webhookApiContent);
console.log('✅ Integração Next.js criada:');
console.log(' - ai-admin-config/app/api/chat/route.ts');
console.log(' - ai-admin-config/app/api/ai-admin/status/route.ts');
console.log(' - ai-admin-config/app/api/ai-admin/webhook/route.ts');
}
function createExampleUsage() {
const exampleContent = `import { aiAdminClient, initializeAiAdmin, withAiAdmin } from './client';
/**
* Exemplo completo de uso do AI Admin Client
* Demonstra todas as funcionalidades principais
*/
async function exemploCompleto() {
console.log('🚀 Iniciando exemplo do AI Admin Client v2.0\\n');
try {
// 1. Inicializar cliente
console.log('📡 Conectando ao dashboard...');
await initializeAiAdmin();
console.log('✅ Conectado com sucesso!\\n');
// 2. Criar sessão para usuário
console.log('👤 Criando sessão para usuário...');
const session = await aiAdminClient.createUserSession('user-123', 'tenant-456', {
userAgent: 'ExemploApp/1.0',
ip: '192.168.1.100'
});
console.log(\`✅ Sessão criada: \${session.sessionId}\\n\`);
// 3. Simular uso do bot
console.log('🤖 Simulando interações do bot...');
// Chat
await aiAdminClient.reportUsage({
sessionId: session.sessionId,
userId: 'user-123',
tenantId: 'tenant-456',
action: 'chat_message',
tokensUsed: 50,
metadata: { messageType: 'text', responseTime: 1200 }
});
console.log('📊 Uso reportado: Chat (50 tokens)');
// Geração de imagem
await aiAdminClient.reportUsage({
sessionId: session.sessionId,
userId: 'user-123',
tenantId: 'tenant-456',
action: 'image_generation',
tokensUsed: 100,
metadata: { imageSize: '1024x1024', style: 'realistic' }
});
console.log('📊 Uso reportado: Imagem (100 tokens)');
// 4. Simular um erro
console.log('\\n⚠️ Simulando um erro...');
await aiAdminClient.reportError({
sessionId: session.sessionId,
userId: 'user-123',
tenantId: 'tenant-456',
error: 'Rate limit exceeded',
errorCode: 'RATE_LIMIT_ERROR',
context: {
currentRequests: 100,
limit: 100,
resetTime: Date.now() + 3600000
}
});
console.log('🐛 Erro reportado: Rate limit');
// 5. Verificar status e estatísticas
console.log('\\n📈 Verificando status...');
const status = await aiAdminClient.getConnectionStatus();
console.log('Conexão:', status.connected ? '🟢 Ativa' : '🔴 Inativa');
const stats = await aiAdminClient.getUsageStats();
console.log('Estatísticas:', {
totalTokens: stats.local?.totalTokens || 0,
totalInterações: stats.local?.totalUsage || 0
});
const sessionsAtivas = aiAdminClient.getActiveSessions();
console.log('Sessões ativas:', sessionsAtivas.length);
// 6. Encerrar sessão
console.log('\\n🔚 Encerrando sessão...');
await aiAdminClient.endUserSession(session.sessionId);
console.log('✅ Sessão encerrada');
} catch (error) {
console.error('❌ Erro durante execução:', error);
} finally {
// 7. Sempre encerrar o cliente
console.log('\\n🔌 Desconectando cliente...');
await aiAdminClient.shutdown();
console.log('✅ Cliente desconectado');
}
}
// Exemplo de uso com helper
async function exemploComHelper() {
console.log('\\n🔧 Exemplo usando helper withAiAdmin...');
await withAiAdmin(async (client) => {
const session = await client.createUserSession('user-456', 'tenant-789');
await client.reportUsage({
sessionId: session.sessionId,
userId: 'user-456',
tenantId: 'tenant-789',
action: 'text_completion',
tokensUsed: 75
});
await client.endUserSession(session.sessionId);
console.log('✅ Helper executado com sucesso');
});
}
// Executar exemplos
if (require.main === module) {
exemploCompleto()
.then(() => exemploComHelper())
.then(() => {
console.log('\\n🎉 Exemplos concluídos! Package está pronto para uso.');
})
.catch(console.error);
}
export { exemploCompleto, exemploComHelper };
`;
const examplePath = path_1.default.join(process.cwd(), CONFIG_DIR, 'exemplo.ts');
fs_1.default.writeFileSync(examplePath, exampleContent);
console.log('✅ Exemplo de uso criado: ai-admin-config/exemplo.ts');
}
function createPackageJson() {
const projectType = isNextJsProject() ? 'nextjs' : isExpressProject() ? 'express' : 'standalone';
const packageContent = {
"name": "ai-admin-integration",
"version": "1.0.0",
"description": `Integração com AI Admin Dashboard - ${projectType}`,
"main": projectType === 'express' ? 'express-server.ts' : 'exemplo.ts',
"scripts": {
"start": projectType === 'express' ? "ts-node express-server.ts" : "ts-node exemplo.ts",
"dev": projectType === 'express' ? "ts-node-dev --respawn express-server.ts" : "ts-node-dev --respawn exemplo.ts",
"test": "ts-node exemplo.ts",
"build": "tsc"
},
"dependencies": {
"dengun_ai-admin-client": "^2.0.0",
"dotenv": "^16.5.0",
...(projectType === 'express' ? { "express": "^4.18.2", "@types/express": "^4.17.17" } : {}),
...(projectType === 'nextjs' ? {} : {})
},
"devDependencies": {
"@types/node": "^20.0.0",
"ts-node": "^10.9.1",
"ts-node-dev": "^2.0.0",
"typescript": "^5.0.0"
}
};
const packagePath = path_1.default.join(process.cwd(), CONFIG_DIR, 'package.json');
fs_1.default.writeFileSync(packagePath, JSON.stringify(packageContent, null, 2));
console.log(`✅ Package.json criado para ${projectType}: ai-admin-config/package.json`);
}
function createReadme() {
const projectType = isNextJsProject() ? 'Next.js' : isExpressProject() ? 'Express' : 'Standalone';
const readmeContent = `# AI Admin Client - Integração ${projectType}
## 🚀 Setup Completo Criado!
Este diretório contém toda a configuração necessária para integrar sua aplicação ${projectType} com o AI Admin Dashboard.
### 📁 Arquivos Criados
- \`.env\` - Configurações de ambiente
- \`.env.example\` - Template de configurações
- \`client.ts\` - Cliente configurado do AI Admin
- \`exemplo.ts\` - Exemplo completo de uso
${isExpressProject() ? '- `express-server.ts` - Servidor Express integrado' : ''}
${isNextJsProject() ? '- `app/api/\` - API Routes do Next.js' : ''}
- \`package.json\` - Dependências do projeto
- \`README.md\` - Esta documentação
## ⚙️ Configuração (3 passos)
### 1. Configure as variáveis de ambiente
\`\`\`bash
# Edite o arquivo .env com suas configurações
nano .env
# Principais configurações:
# DASHBOARD_URL=http://localhost:3000
# BOT_ID=seu-bot-id-aqui
# BOT_SECRET=seu-bot-secret-aqui
\`\`\`
### 2. Instale as dependências
\`\`\`bash
npm install
\`\`\`
### 3. Execute
\`\`\`bash
# Executar exemplo
npm run test
# Executar aplicação
npm start
# Modo desenvolvimento
npm run dev
\`\`\`
## 🔗 Solicitação de Conexão
Para solicitar registro no dashboard, use:
\`\`\`bash
npx ai-admin-request \\
--name "Nome do seu Bot" \\
--email "seu@email.com" \\
--website "http://localhost:3001" \\
--description "Descrição do bot"
\`\`\`
## 📊 Funcionalidades Incluídas
### ✅ Conexão Automática
- Autenticação com dashboard
- Reconexão em falhas
- Heartbeat automático
### ✅ Múltiplos Usuários
- Sistema de sessões
- Validação de permissões
- Isolamento de dados
### ✅ Telemetria Automática
- Relatórios de uso de tokens
- Estatísticas em tempo real
- Envio em lotes otimizado
### ✅ Relatório de Erros
- Captura automática de erros
- Categorização por gravidade
- Context detalhado
## 🛠️ Endpoints Disponíveis
${isExpressProject() || isNextJsProject() ? `
### API Endpoints
- \`POST /api/chat\` - Endpoint de chat integrado
- \`GET /api/ai-admin/status\` - Status da conexão
- \`POST /api/ai-admin/webhook\` - Webhook do dashboard
` : ''}
## 🔧 Personalização
### Processamento de Mensagens
Edite a função \`processMessage()\` nos arquivos de API para implementar sua lógica de IA/chatbot.
### Configurações Avançadas
Modifique o arquivo \`client.ts\` para ajustar configurações específicas.
### Eventos de Monitoramento
O cliente emite eventos que você pode ouvir para monitoramento customizado.
## 📚 Documentação Completa
Consulte a documentação completa do package:
- README principal do dengun_ai-admin-client
- Exemplos em \`exemplo.ts\`
- Código comentado nos arquivos de integração
## 🆘 Solução de Problemas
### Erro de Conexão
- Verifique se DASHBOARD_URL está correto
- Confirme se o dashboard está rodando
- Valide BOT_ID e BOT_SECRET
### Erro de Autenticação
- Solicite registro com \`npx ai-admin-request\`
- Aguarde aprovação do administrador
- Verifique logs do dashboard
### Problemas de Tokens
- Confirme se o usuário tem tokens disponíveis
- Verifique limites configurados no dashboard
- Monitore uso através do endpoint de status
---
**🎉 Sua aplicação está pronta para conectar ao AI Admin Dashboard!**
`;
const readmePath = path_1.default.join(process.cwd(), CONFIG_DIR, 'README.md');
fs_1.default.writeFileSync(readmePath, readmeContent);
console.log('✅ Documentação criada: ai-admin-config/README.md');
}
function main() {
console.log('\n🚀 AI Admin Client - Setup Completo para Integração\n');
// Detectar tipo de projeto
const projectType = isNextJsProject() ? 'Next.js' : isExpressProject() ? 'Express' : 'Standalone';
console.log(`📦 Projeto detectado: ${projectType}`);
// Criar diretório
const configDir = path_1.default.join(process.cwd(), CONFIG_DIR);
if (!fs_1.default.existsSync(configDir)) {
fs_1.default.mkdirSync(configDir, { recursive: true });
console.log('📁 Diretório criado: ai-admin-config/');
}
// Criar arquivos essenciais
createEnvFile();
createClientSetup();
createExampleUsage();
createPackageJson();
createReadme();
// Criar integração específica do projeto
if (isExpressProject()) {
createExpressIntegration();
}
else if (isNextJsProject()) {
createNextJsIntegration();
}
console.log('\n✨ Setup completo criado!\n');
console.log('📋 Próximos passos:');
console.log('1. cd ai-admin-config');
console.log('2. Editar .env com suas configurações');
console.log('3. npm install');
console.log('4. npx ai-admin-request --name "Seu Bot" --email "seu@email.com"');
console.log('5. npm start\n');
console.log('💡 Tudo configurado! Sua aplicação está pronta para conectar! 🎉');
}
main();