1 unstable release
| 0.1.0 | Dec 9, 2025 |
|---|
#1604 in Authentication
43KB
786 lines
Digisac Rust SDK
Crate inspirado na arquitetura do paytour para consumir a API Digisac, incorporando boas práticas de Rust (macros, traits, builders e otimizações de compilação).
🎯 Funcionalidades Principais
A biblioteca oferece suporte para:
- Autenticação: Token de acesso via variáveis de ambiente
- Webhooks: CRUD completo (listar, criar, atualizar, deletar)
- Mensagens: Envio de mensagens com suporte a mídia e respostas
- CLI Completo: Interface de linha de comando para todos os endpoints
- Servidor HTTP: Wrapper que expõe comandos CLI via HTTP para integração com agentes
📊 Estatísticas
- Endpoints Implementados: 5 (webhooks e mensagens)
- Comandos CLI: 5
- Boas Práticas: Traits, builders, zero-cost abstractions, otimizações de compilação
Instalação
cargo add digisac --git https://github.com/nextlw/parrachos --package digisac
Variáveis de ambiente
| Variável | Descrição |
|---|---|
DIGISAC_API_BASE_URL |
URL base (default https://parrachos.digisac.co/api/v1) |
DIGISAC_ACCESS_TOKEN |
Token de autenticação (obrigatório) |
DIGISAC_SERVICE_ID |
ID do serviço (opcional) |
DIGISAC_SERVER_URL |
URL do servidor HTTP (default http://localhost:8082) |
DIGISAC_SERVER_PORT |
Porta do servidor HTTP (default 8082) |
Uso como biblioteca
Exemplo básico: Enviar mensagem
use digisac::{
client::{DigisacClient, SendMessageRequest},
config::EnvManager,
};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
dotenv::dotenv().ok();
let env = EnvManager::load()?;
let token = env.access_token.ok_or("Token não encontrado")?;
let client = DigisacClient::new(env.api_base_url, token);
let request = SendMessageRequest::builder()
.service_id("123".to_string())
.contact_id("456".to_string())
.text("Olá!".to_string())
.build();
let response = client.send_message(&request).await?;
println!("Mensagem enviada: {:?}", response);
Ok(())
}
Exemplo: Gerenciar webhooks
use digisac::client::{DigisacClient, WebhookCreateRequest};
// Criar webhook
let request = WebhookCreateRequest::builder()
.url("https://example.com/webhook".to_string())
.events(vec!["message.received".to_string(), "message.sent".to_string()])
.active(Some(true))
.build();
let webhook = client.create_webhook(&request).await?;
// Listar webhooks
let webhooks = client.list_webhooks().await?;
println!("Total de webhooks: {}", webhooks.data.len());
CLI
Webhooks
# Listar webhooks
cargo run --bin digisac-cli -- webhooks-list --verbose
# Criar webhook
cargo run --bin digisac-cli -- webhook-create \
--url "https://example.com/webhook" \
--events "message.received,message.sent" \
--active true
# Atualizar webhook
cargo run --bin digisac-cli -- webhook-update \
--id "webhook-id" \
--url "https://new-url.com/webhook" \
--active false
# Deletar webhook
cargo run --bin digisac-cli -- webhook-delete --id "webhook-id"
Mensagens
# Enviar mensagem
cargo run --bin digisac-cli -- mensagem-enviar \
--service-id "123" \
--contact-id "456" \
--text "Olá, como vai?" \
--verbose
# Enviar mensagem com mídia
cargo run --bin digisac-cli -- mensagem-enviar \
--service-id "123" \
--contact-id "456" \
--text "Veja esta imagem" \
--media-url "https://example.com/image.jpg"
Servidor HTTP
O servidor HTTP expõe os comandos CLI via HTTP para integração com agentes:
# Iniciar servidor
cargo run --bin digisac-server
# Health check
curl http://localhost:8082/health
# Executar comando via HTTP
curl -X POST http://localhost:8082/cli \
-H "Content-Type: application/json" \
-d '{
"command": "webhooks-list",
"args": ["--verbose"]
}'
Integração com Agente
O agente (agenteS.rs) registra automaticamente as seguintes ferramentas:
digisac_listar_webhooks: Lista webhooks configuradosdigisac_criar_webhook: Cria novo webhookdigisac_enviar_mensagem: Envia mensagem via Digisac
Configure DIGISAC_SERVER_URL no ambiente do agente para apontar para o servidor Digisac.
Boas Práticas Implementadas
Este crate incorpora as seguintes boas práticas de Rust:
- Traits:
DigisacApipara abstração e testes - Builders:
TypedBuilderpara construção type-safe de requests - Zero-cost abstractions: Métodos genéricos com monomorphization
- Error handling:
thiserrorpara erros customizados - Otimizações: LTO, codegen-units=1, strip symbols em release
- Logging:
tracingestruturado com sanitização de tokens
Contribuindo
Contribuições são bem-vindas! Por favor:
- Faça fork do repositório
- Crie uma branch para sua feature (
git checkout -b feature/nova-funcionalidade) - Commit suas mudanças (
git commit -am 'Adiciona nova funcionalidade') - Push para a branch (
git push origin feature/nova-funcionalidade) - Abra um Pull Request
Licença
Este projeto está licenciado sob a Licença Apache 2.0 - veja o arquivo LICENSE para detalhes.
Dependencies
~17–35MB
~401K SLoC