Перейти к основному содержанию

HTTP коды статусов

СтатусЗначениеПовторяемый
200УспехН/Д
400Неверный запрос (невалидные параметры, невалидный минт, неподдерживаемая программа токенов)Нет
401Не авторизован (отсутствующий или неверный API ключ)Нет
404Неподдерживаемый рынок или минт ещё не проиндексированНет (см. ниже)
422Необрабатываемый (валидный запрос, но нет жизнеспособного маршрута)Нет
429Превышен лимит запросовДа
502Bad gateway (сбой вышестоящего RPC или DEX)Да
503Сервис недоступен (маршрутизатор не готов или приостановлен)Да
500Внутренняя ошибка сервераДа

Конверты ответов

Успех

{
  "status": "ok",
  "tx": "base64-encoded unsigned transaction",
  "route": { "market_type": "pumpswap", "pool_id": "..." }
}

Неподдерживаемый рынок

Возвращается, когда у минта нет жизнеспособного маршрута на любом поддерживаемом DEX. Поле message содержит человекочитаемое и ИИ-читаемое объяснение.
{
  "status": "unsupported",
  "reason": "no_route",
  "message": "No supported market found for this mint. Supported DEXs: PumpSwap, Raydium (CPMM, Launchpad), Meteora (DBC, DAMM v2), Pump.fun."
}
ПричинаСтатусОписание
no_route404Ни один поддерживаемый DEX не имеет пула для этого минта
invalid_mint400Адрес минта не существует в блокчейне
unsupported_token_program400Токен использует программу, отличную от SPL Token или Token-2022

Не проиндексирован

Возвращается, когда минт существует, но ещё не разрешён. Повторите запрос после небольшой задержки.
{
  "status": "not_indexed",
  "mint": "So11111111111111111111111111111111111111112",
  "reason": "mint not indexed yet; try again shortly"
}

Ошибка

Общие ответы об ошибках для сбоев валидации, лимитов запросов и серверных ошибок.
{
  "error": "descriptive error message"
}
SDK парсят все варианты ответов и предоставляют их через тип ExitApiError.

Типы ExitApiError

Каждый SDK предоставляет ExitApiError (или эквивалент) с дискриминатором kind:
KindТриггерПовторяемый
transportСбой сети, ошибка DNS, таймаутДа
http_statusНе-2xx HTTP ответДа, если статус >= 500 или 429
envelope_statusСервер вернул { "status": "error" }Нет
parseТело ответа не удалось распарсить как JSONНет

Проверка повторяемости

import { ExitApiError } from "@lasersell/lasersell-sdk";

try {
  const response = await client.buildSellTx(request);
} catch (error) {
  if (error instanceof ExitApiError) {
    console.log("Kind:", error.kind);
    console.log("Retryable:", error.isRetryable());
    console.log("HTTP status:", error.status);
    console.log("Body:", error.body);
  }
}

Встроенное поведение повторных попыток

Все SDK включают автоматические повторные попытки с такими настройками по умолчанию:
НастройкаЗначение по умолчанию
Макс. попыток2
Начальная задержка25 мс
Макс. задержка25 мс
Джиттер25 мс
Таймаут подключения200 мс
Таймаут попытки900 мс
Повторные попытки срабатывают только для ошибок, где isRetryable() возвращает true (сбои транспорта, ответы 5xx и 429).

Настройка политики повторных попыток

const client = ExitApiClient.withOptions("YOUR_API_KEY", {
  attempt_timeout_ms: 2000,
  retry_policy: {
    max_attempts: 3,
    initial_backoff_ms: 50,
    max_backoff_ms: 200,
    jitter_ms: 50,
  },
});

Лучшие практики

  • Не повторяйте ошибки 400, 401 или 422. Они указывают на проблему в запросе или аутентификации, которую нужно исправить в коде.
  • Не повторяйте 404 со "status": "unsupported". У минта нет поддерживаемого рынка.
  • Повторите один раз при 404 со "status": "not_indexed". Минту может потребоваться время для разрешения.
  • Используйте экспоненциальную задержку при ответах 429. Встроенные повторные попытки обрабатывают это автоматически.
  • Повторяйте с задержкой при ошибках 502 и 503. Это временные проблемы инфраструктуры.
  • Логируйте детали ошибок, включая kind, status и body для отладки.
  • Если вы видите постоянные ошибки envelope_status, проверьте корректность вашего адреса mint и user_pubkey.