Primeira versão da SDK Lua, cobrindo toda a plataforma APIBrasil — mesma arquitetura e paridade de rotas com as SDKs de Go, Node.js, PHP, Ruby, Rust, Elixir e Dart/Flutter.
- Cliente central
apibrasil(new,from_env,login,configure) devolvendo um cliente imutável com um campo por produto, criado sob demanda:client.whatsapp,client.evolution,client.whatsmeow,client.sms,client.dados,client.vehicles,client.fipe,client.correios,client.cep,client.geolocation,client.geomatrix,client.recognize,client.ddd,client.holidays,client.translate,client.weather,client.loterias,client.database_ip,client.consulta(créditos),client.ura,client.chip_virtual,client.bulk,client.auth(login/2FA),client.devices,client.catalog,client.account,client.payments(PIX/boleto/cartão),client.ip_whitelist,client.bearer_rate_limiteclient.reports. - Contrato uniforme: todo método devolve
resultadoounil, erroe aceita uma tabela final de opções.client:with_strict()devolve um cliente que levanta a falha em vez de devolvê-la, eapibrasil.unwrapfaz o mesmo em um trecho isolado. - DSL de serviços (
apibrasil.core.service): as rotas device-based, as consultas por crédito e as rotas da plataforma são declaradas em uma tabela (action,consulta,route_get,route_post,route_put,route_delete,route_empty), que gera os métodos com a documentação junto. Os declaradores ficam na metatabela da classe: as instâncias enxergam só as rotas. - Compatível com Lua 5.1+, LuaJIT e OpenResty, sem depender de sintaxe ou biblioteca exclusiva de uma versão.
- Codec JSON próprio (
apibrasil.core.json), sem dependência externa, com o sentinelaapibrasil.null,apibrasil.arraypara listas vazias, chaves ordenadas (corpo determinístico) e suporte a pares substitutos em\uXXXX. Pode ser trocado porcjson/dkjsoncomjson.use. - Transporte plugável com autodetecção (
apibrasil.core.transport):resty.http(OpenResty),lua-http, LuaSocket/LuaSec ecurl. Um transporte é uma funçãof(request) -> response, errou uma tabela comrequest— o atalho para testes sem rede. - TLS verificado por padrão: o transporte LuaSocket força
verify = "peer"e procura o bundle de CAs do sistema (eSSL_CERT_FILE); sem ele, a autodetecção prefere ocurla abrir mão da verificação. O transportecurlpassa argumentos por arquivo de configuração, então nenhum token aparece na linha de comando. - Retry com backoff exponencial e jitter (
apibrasil.core.retry; padrão: HTTP 429 e falhas de conexão; nunca timeouts nem erros de negócio), com suporte aRetry-Afterem segundos ou data HTTP. O jitter usa um gerador próprio, sem mexer no estado global demath.random. - Hooks de observabilidade (
apibrasil.core.hooks):request,responseeretry, via tabela de funções ou objeto comon_*— falhas dentro de um hook nunca derrubam a requisição. - Erros com categoria (
apibrasil.core.error):validation,authentication,insufficient_balance,permission,not_found,rate_limit,server,network,timeouteapi, com predicados (is_insufficient_balance,is_rate_limit,is_network...),status,code,response,retry_afterereasonpreservando a causa. - Envelopes que continuam sendo o JSON:
apibrasil.core.device_responseeapibrasil.core.credit_responseexpõemenvelope.response,envelope.balance,envelope.datadireto, maisis_error(),get(path),raw()epairs()— nomes escolhidos para não colidir com chaves da API. - Body flexível: tabelas,
nile o builderapibrasil.Consulta(comtipo,homolog,lite,agrupados,extrae os campos do produto) são aceitos por qualquer método de serviço. - Opções por escopo:
client:with_optionsfixa opções no cliente e toda chamada aceitaquery,headers,bearer_token,device_token,secret_key,timeouteresponse_type. - Configuração por
apibrasil.configure, pelas variáveis de ambienteAPIBRASIL_BEARER_TOKEN,APIBRASIL_DEVICE_TOKEN,APIBRASIL_SECRET_KEYeAPIBRASIL_BASE_URL, e porapibrasil.new— nessa ordem de prioridade. Credenciais vazias contam como ausentes. - Catálogo gerado (
lua scripts/codegen.lua) emapibrasil.generated.catalog: actions de WhatsApp/Evolution/WhatsMeow e ostipode consulta com seus campos, porservice_actions,has_action,evolution_paths,consulta_servicoseconsulta_tipo. - Interface legada em
apibrasil.legacy(new,request,whatsapp,sms,cpf,cnpj), mantendo o contrato das primeiras SDKs (credentials/body/actionem uma string JSON) — inclusive devolver erros da API decodificados como resultado em vez denil, erro. - Documentação em português em todos os módulos (formato LDoc) e exemplos
executáveis em
examples/(lua examples/basico.lua). - Testes com transporte falso (rotas, headers, query, envelopes, erros, retry, hooks, transporte, catálogo e interface legada) — a suíte não faz nenhuma chamada de rede.
- CI no GitHub Actions em matriz Lua 5.1/5.2/5.3/5.4/LuaJIT com
busted,luachecke validação do rockspec (luarocks lint+ conferência do mapa de módulos contrasrc/). - Publicação automática: a tag
v*empacota o.src.rock, anexa ao release do GitHub e sobe para o luarocks.org (com o secretLUAROCKS_API_KEY).
- Lua >= 5.1, LuaJIT ou OpenResty.
- Para o HTTP fora do OpenResty, o rockspec instala
luasocketeluasec; a SDK também funciona comlua-httpou com ocurlda máquina.