Skip to main content
@acedatacloud/sdk — это официальный TypeScript / JavaScript SDK от Ace Data Cloud, который оборачивает все сервисы на api.acedata.cloud в типизированные методы, такие как client.openai.chat.completions.create(...), client.images.generate(...), client.search.google(...) и т.д., с поддержкой SSE потоковой передачи, повторных попыток с экспоненциальной задержкой и типизированных исключений. Можно использовать в Node.js, Deno, Bun и современных браузерах (с бандлером). Исходный код и адрес пакета:

Установка

Если требуется оплата на цепочке X402 (без пути API Token), установите еще один пакет:
Вывод проверки версии для чистого npm проекта:
Объяснение результатов:
  • Версия пакета — 2026.504.2 (CalVer, 2-е исправление 504-й ISO недели 2026 года).
  • AceDataCloud — это основной класс для построения клиента, доступный из стандартного экспорта.

Подготовка API Token

Согласно Обзору SDK - Запрос API Token получите токен, затем в shell выполните export:
При создании клиента не передавайте apiToken, SDK автоматически прочитает переменную окружения ACEDATACLOUD_API_TOKEN. Если в вашей среде уже сохранен ACEDATACLOUD_API_KEY (по соглашению проекта), вы можете явно передать: new AceDataCloud({ apiToken: process.env.ACEDATACLOUD_API_KEY }).

Пример 1: chat.completions (непотоковый)

Результат выполнения программы:
Объяснение результатов:
  • id chatcmpl-DldCcLvkTFaioST8e6SjOl0wJScQA — это ID ответа, совместимый с OpenAI, который можно найти в истории использования в консоли.
  • content ADC_TS_SDK_OK — это фиксированный идентификатор, который модель возвращает, подтверждающий, что ответ не был изменен SDK.
  • Один chat completion потребляет около 22 токенов, согласно тарифу gpt-4o-mini.
  • SDK объявляет ответ как Record<string, unknown>, во время выполнения это будет JSON-объект, доступ к полям через .id / .choices[0].message.content будет работать в .mjs, Node REPL, Bun; в строгих проектах TypeScript может потребоваться (res as any).id или отключение noImplicitAny в tsconfig.

Пример 2: chat.completions (SSE потоковый)

При включении stream: true метод create возвращает асинхронный итератор, каждая часть которого является ChatCompletionChunk.
Результат выполнения программы:
Объяснение результатов:
  • Задержка первой части 2481 мс — это время, необходимое модели для генерации первого токена; последующие 12 частей пришли за 135 мс.
  • 13 частей в сумме составляют "1 2 3 4 5", каждый токен представлен отдельной частью + последняя часть содержит finish_reason.
  • Потоковая передача не экономит токены по сравнению с непотоковой, но задержка первого токена значительно снижена, что подходит для создания интерфейсов в реальном времени.

Пример 3: images.generate (NanoBanana)

client.images.generate({ provider: 'nano-banana', ... }) возвращает результат синхронно, не требуется передавать параметр wait — API NanoBanana изначально синхронный.
Результат выполнения программы:
Объяснение результатов:
  • image_url — это стабильный адрес на CDN, который можно использовать напрямую в <img src /> или для загрузки.
  • Большая часть времени в 16.6 секунд уходит на вывод модели, затраты на локальный SDK можно игнорировать.
  • trace_id — это ID запроса, назначенный платформой, если возникнут проблемы, предоставьте этот ID службе поддержки для быстрого поиска.
  • Для асинхронных сервисов (Midjourney, Sora, Veo и т.д.) требуется опрос TaskHandle, подробности см. в SDK опрос задач и потоковые ответы.

Пример 4: типизированная обработка ошибок

SDK будет выбрасывать ошибки в зависимости от HTTP статуса в конкретные подклассы (AuthenticationError / BadRequestError / RateLimitError / InternalServerError / APIConnectionError и т.д.), что позволяет использовать instanceof для точной обработки.
Результат выполнения программы:
Описание результата:
  • 401 автоматически отображается как AuthenticationError, бизнес-код может использовать instanceof для точной ветвления.
  • code: invalid_token поступает от PlatformGateway, что удобно для сопоставления с логами на сервере.
  • Аналогично 429 → RateLimitError, 400 → BadRequestError, 5xx → InternalServerError.

Пример 5: маршрутизация нескольких моделей

Один и тот же клиент может свободно переключаться между несколькими сервисами, достаточно, чтобы имена моделей совпадали.
Результат выполнения программы:
Описание результата:
  • Один код, один токен, охватывающий четыре типа сервисов моделей: OpenAI / Google / DeepSeek / xAI.
  • gemini-2.5-flash в этот раз не вернул ADC_OK, это связано с различиями в стиле вывода модели — SDK не скрывает ничего, а точно передает оригинальные слова модели бизнесу.
  • Цены рассчитываются по реальной цене токена, путь проходит только один раз через PlatformGateway.

Пример 6: Поиск в Google

Результат выполнения программы:
Описание результата:
  • Один запрос возвращает 10 органических результатов, имя поля organic (не organic_results).
  • Поиск проходит через Serp сервис, оплата производится за каждую операцию.
  • Один и тот же экземпляр клиента может как общаться, так и искать, одного токена достаточно.

Опции конфигурации

Использование в браузере

@acedatacloud/sdk является ESM + ISO (гомоморфный) пакетом, который можно напрямую import в современных браузерах с бандлером. Обратите внимание: не кодируйте токен API в коде фронтенда. Рекомендуется для фронтенда:
  1. Использовать X402 paymentHandler — пользовательский кошелек оплачивает USDC за каждую операцию, токен не требуется.
  2. Или использовать SDK на своем сервере, браузер только вызывает ваш собственный бэкенд.

Продвинутый: опрос задач и потоковые ответы

  • Сервисы, связанные с задачами (Midjourney, Sora, Veo, Suno): используйте TaskHandle для опроса, детали единиц, тайм-аутов и повторов смотрите в SDK опрос задач и потоковые ответы.
  • Потоковый чат: пример 2 на этой странице уже продемонстрировал; потоковое аудио / видео также поддерживается.

Продвинутый: X402 платежные хуки

Если вы не хотите запрашивать токен API и хотите оплачивать по мере использования, вы можете использовать paymentHandler:
createX402PaymentHandler на стороне TypeScript принимает { network, evmProvider, evmAddress, preferScheme? } (EVM цепь) или { network: 'solana', solanaWallet } (Solana). На серверной стороне Node, если window.ethereum отсутствует, используйте viem’s createWalletClient (на основе приватного ключа), чтобы обернуть совместимый с EIP-1193 провайдер и передать его; подробные методы и реальные результаты на цепи смотрите в SDK + X402 платежные хуки.

Как проверить оставшийся баланс

Через консоль Ace Data Cloud - Список приложений вы можете проверить текущий остаток на счете. Через консоль Ace Data Cloud - История использования вы можете просмотреть всю историю использования и детали списания.

Узнать больше