Skip to main content
@acedatacloud/sdk é o SDK oficial TypeScript / JavaScript da Ace Data Cloud, que encapsula todos os serviços em api.acedata.cloud em métodos tipados como client.openai.chat.completions.create(...), client.images.generate(...), client.search.google(...), etc., com suporte a fluxo SSE, retry backoff e exceções tipadas. Pode ser usado em Node.js, Deno, Bun e navegadores modernos (com bundler). Endereço do código-fonte e do pacote:

Instalação

Se precisar de pagamento na blockchain X402 (sem caminho de API Token), instale mais um:
Saída da verificação de versão de um projeto npm limpo:
Explicação dos resultados:
  • A versão do pacote é 2026.504.2 (CalVer, 2ª revisão da 504ª semana ISO de 2026).
  • AceDataCloud é a classe principal usada para construir o cliente, acessível a partir da exportação padrão.

Preparar o Token da API

Consulte Visão Geral do SDK - Solicitar Token da API para obter o token e, em seguida, export no shell:
Ao construir o cliente, não passe apiToken, o SDK irá ler automaticamente a variável de ambiente ACEDATACLOUD_API_TOKEN. Se sua variável de ambiente já tiver ACEDATACLOUD_API_KEY (convenção do repositório do projeto), você pode passá-la explicitamente: new AceDataCloud({ apiToken: process.env.ACEDATACLOUD_API_KEY }).

Exemplo 1: chat.completions (não em fluxo)

Resultado da execução do programa:
Explicação dos resultados:
  • id chatcmpl-DldCcLvkTFaioST8e6SjOl0wJScQA é o ID de resposta compatível com OpenAI, que pode ser encontrado no console Histórico de Uso.
  • content ADC_TS_SDK_OK é o identificador fixo retornado pelo modelo, provando que a resposta não foi alterada pelo SDK.
  • Uma conclusão de chat consome cerca de 22 tokens, cobrados de acordo com o preço do gpt-4o-mini.
  • O SDK declara a resposta como Record<string, unknown>, que em tempo de execução é um objeto JSON; acessos por ponto como .id / .choices[0].message.content funcionam em .mjs, Node REPL, Bun; em projetos TypeScript estritos, pode ser necessário usar (res as any).id ou desativar noImplicitAny no tsconfig.

Exemplo 2: chat.completions (fluxo SSE)

Ao ativar stream: true, create retorna um iterador assíncrono, onde cada quadro é um ChatCompletionChunk.
Resultado da execução do programa:
Explicação dos resultados:
  • O atraso do primeiro quadro de 2481 ms é o tempo que o modelo levou para gerar o primeiro token; os 12 quadros subsequentes chegaram todos em 135 ms.
  • Os 13 quadros juntos formam "1 2 3 4 5", cada token em um quadro separado + o último quadro com finish_reason.
  • O fluxo não consome menos tokens do que o não fluxo, mas o atraso do primeiro token é significativamente reduzido, adequado para interfaces de usuário em tempo real.

Exemplo 3: images.generate (NanoBanana)

client.images.generate({ provider: 'nano-banana', ... }) retorna diretamente de forma síncrona, não é necessário passar o parâmetro wait — a API NanoBanana gera de forma síncrona.
Resultado da execução do programa:
Explicação dos resultados:
  • image_url é um endereço estável no CDN, que pode ser usado diretamente em <img src /> ou para download.
  • A maior parte do tempo de 16,6 segundos é gasto na inferência do modelo, o custo do SDK local é desprezível.
  • trace_id é o ID de solicitação atribuído pela plataforma; se houver problemas, forneça esse ID ao suporte para localização rápida.
  • Para serviços assíncronos (Midjourney, Sora, Veo, etc.), é necessário fazer polling com TaskHandle, consulte Polling de Tarefas do SDK e Respostas em Fluxo.

Exemplo 4: Tratamento de Erros Tipados

O SDK lançará erros como subclasses específicas (como AuthenticationError, BadRequestError, RateLimitError, InternalServerError, APIConnectionError, etc.) com base no status HTTP, permitindo ramificações precisas com instanceof.
Resultado do programa:
Descrição do resultado:
  • 401 mapeado automaticamente para AuthenticationError, o código de negócios pode usar instanceof para ramificações precisas.
  • code: invalid_token vem do PlatformGateway, facilitando a comparação com os logs do backend.
  • Da mesma forma, 429 → RateLimitError, 400 → BadRequestError, 5xx → InternalServerError.

Exemplo 5: Roteamento de múltiplos modelos

O mesmo cliente pode alternar livremente entre vários serviços, desde que o nome do modelo seja o mesmo.
Resultado do programa:
Descrição do resultado:
  • Um código, um token, cobre quatro tipos de serviços de modelos: OpenAI / Google / DeepSeek / xAI.
  • gemini-2.5-flash desta vez não retornou ADC_OK, é uma diferença no estilo de saída do modelo — o SDK não silenciou nada, transmitindo fielmente as palavras do modelo para o negócio.
  • O preço é cobrado de acordo com o preço real do token de cada um, o caminho passa apenas uma vez pelo PlatformGateway.

Exemplo 6: Pesquisa no Google

Resultado do programa:
Descrição do resultado:
  • Uma única solicitação obteve 10 resultados orgânicos, o nome do campo é organic (não organic_results).
  • A pesquisa foi realizada através do Serviço Serp, cobrada por solicitação.
  • A mesma instância do cliente pode tanto fazer chat quanto pesquisar, um único token é suficiente.

Opções de configuração

Uso no navegador

@acedatacloud/sdk é um pacote ESM + ISO (homogêneo), que pode ser importado diretamente em navegadores modernos com bundler. Atenção: não codifique o token da API diretamente no código do frontend. Recomenda-se no frontend:
  1. Usar X402 paymentHandler — a carteira do usuário paga por USDC por solicitação, sem necessidade de token.
  2. Ou usar o SDK no seu próprio servidor, o navegador apenas chama seu backend.

Avançado: Polling de tarefas e resposta em streaming

  • Serviços de tarefas (Midjourney, Sora, Veo, Suno): use TaskHandle para polling, detalhes de unidade, tempo limite e repetição veja SDK Polling de Tarefas e Streaming.
  • Chat em streaming: o exemplo 2 desta página já demonstrou; áudio / vídeo em streaming também é suportado.

Avançado: Ganchos de pagamento X402

Se você não quiser solicitar um token de API e quiser pagar por solicitação na blockchain, pode usar paymentHandler:
createX402PaymentHandler no lado TypeScript aceita { network, evmProvider, evmAddress, preferScheme? } (rede EVM) ou { network: 'solana', solanaWallet } (Solana). No servidor Node, quando não há window.ethereum, use o createWalletClient do viem (baseado em chave privada) para encapsular um provedor compatível com EIP-1193 e passe-o; detalhes e resultados reais na blockchain veja SDK + Ganchos de Pagamento X402.

Como verificar o saldo restante

Através do Console Ace Data Cloud - Lista de Aplicativos, você pode verificar o saldo restante da conta atual. Através do Console Ace Data Cloud - Histórico de Uso você pode verificar todo o histórico de uso e detalhes de cobrança.

Saiba mais