الانتقال إلى المحتوى الرئيسي

رموز حالة HTTP

Statusالمعنىقابل لإعادة المحاولة
200نجاحغير ذي صلة
400طلب سيئ (معاملات غير صالحة أو رمز غير صالح أو برنامج رمز غير مدعوم)لا
401غير مصرح (مفتاح API مفقود أو غير صالح)لا
404سوق غير مدعوم أو رمز لم يُفهرس بعدلا (انظر أدناه)
422غير قابل للمعالجة (طلب صالح لكن لا مسار قابل للتنفيذ)لا
429محدود المعدلنعم
502بوابة سيئة (فشل RPC أو تبادل لامركزي)نعم
503الخدمة غير متاحة (الموجه غير جاهز أو متوقف)نعم
500خطأ خادم داخلينعم

مغلفات الاستجابة

نجاح

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

سوق غير مدعوم

يُعاد عندما لا يوجد مسار قابل للتنفيذ للرمز على أي تبادل لامركزي مدعوم. يوفر حقل 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."
}
ReasonStatusDescription
no_route404لا يوجد تبادل لامركزي مدعوم لديه مجمع لهذا الرمز
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"
}
تحلل حزم التطوير جميع متغيرات الاستجابة وتكشفها عبر نوع ExitApiError.

أنواع ExitApiError

تكشف كل حزمة تطوير ExitApiError (أو ما يعادله) بمميز kind:
Kindالمحفزقابل لإعادة المحاولة
transportفشل شبكة أو خطأ DNS أو مهلةنعم
http_statusاستجابة HTTP غير 2xxنعم إذا الحالة >= 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);
  }
}

سلوك إعادة المحاولة المدمج

تتضمن جميع حزم التطوير إعادة محاولة تلقائية بهذه الافتراضيات:
SettingDefault Value
Max attempts2
Initial backoff25 ms
Max backoff25 ms
Jitter25 ms
Connect timeout200 ms
Attempt timeout900 ms
تنطلق إعادة المحاولة فقط للأخطاء حيث يُعيد 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.