Skip to content

Latest commit

 

History

History
97 lines (91 loc) · 5.81 KB

File metadata and controls

97 lines (91 loc) · 5.81 KB

Changelog

0.0.1 — 2026-07-28

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.

Novidades

  • 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_limit e client.reports.
  • Contrato uniforme: todo método devolve resultado ou nil, erro e aceita uma tabela final de opções. client:with_strict() devolve um cliente que levanta a falha em vez de devolvê-la, e apibrasil.unwrap faz 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 sentinela apibrasil.null, apibrasil.array para listas vazias, chaves ordenadas (corpo determinístico) e suporte a pares substitutos em \uXXXX. Pode ser trocado por cjson/dkjson com json.use.
  • Transporte plugável com autodetecção (apibrasil.core.transport): resty.http (OpenResty), lua-http, LuaSocket/LuaSec e curl. Um transporte é uma função f(request) -> response, err ou uma tabela com request — 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 (e SSL_CERT_FILE); sem ele, a autodetecção prefere o curl a abrir mão da verificação. O transporte curl passa 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 a Retry-After em segundos ou data HTTP. O jitter usa um gerador próprio, sem mexer no estado global de math.random.
  • Hooks de observabilidade (apibrasil.core.hooks): request, response e retry, via tabela de funções ou objeto com on_* — 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, timeout e api, com predicados (is_insufficient_balance, is_rate_limit, is_network...), status, code, response, retry_after e reason preservando a causa.
  • Envelopes que continuam sendo o JSON: apibrasil.core.device_response e apibrasil.core.credit_response expõem envelope.response, envelope.balance, envelope.data direto, mais is_error(), get(path), raw() e pairs() — nomes escolhidos para não colidir com chaves da API.
  • Body flexível: tabelas, nil e o builder apibrasil.Consulta (com tipo, homolog, lite, agrupados, extra e os campos do produto) são aceitos por qualquer método de serviço.
  • Opções por escopo: client:with_options fixa opções no cliente e toda chamada aceita query, headers, bearer_token, device_token, secret_key, timeout e response_type.
  • Configuração por apibrasil.configure, pelas variáveis de ambiente APIBRASIL_BEARER_TOKEN, APIBRASIL_DEVICE_TOKEN, APIBRASIL_SECRET_KEY e APIBRASIL_BASE_URL, e por apibrasil.new — nessa ordem de prioridade. Credenciais vazias contam como ausentes.
  • Catálogo gerado (lua scripts/codegen.lua) em apibrasil.generated.catalog: actions de WhatsApp/Evolution/WhatsMeow e os tipo de consulta com seus campos, por service_actions, has_action, evolution_paths, consulta_servicos e consulta_tipo.
  • Interface legada em apibrasil.legacy (new, request, whatsapp, sms, cpf, cnpj), mantendo o contrato das primeiras SDKs (credentials/body/action em uma string JSON) — inclusive devolver erros da API decodificados como resultado em vez de nil, 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, luacheck e validação do rockspec (luarocks lint + conferência do mapa de módulos contra src/).
  • Publicação automática: a tag v* empacota o .src.rock, anexa ao release do GitHub e sobe para o luarocks.org (com o secret LUAROCKS_API_KEY).

Requisitos

  • Lua >= 5.1, LuaJIT ou OpenResty.
  • Para o HTTP fora do OpenResty, o rockspec instala luasocket e luasec; a SDK também funciona com lua-http ou com o curl da máquina.