رفتن به محتوای اصلی

دستگاه‌ها

اگر هنگام ورود شیء device فرستاده شده باشد (توضیح در احراز هویت)، هر نصب یک نشست مستقل دارد که از این صفحه قابل مشاهده و ابطال است.

مشخصات شیء device:

  • uid: هویت پایدار آن نصب — نه شناسهٔ کاربر، نه شناسهٔ سخت‌افزار.
  • platform: یکی از ANDROID/WEB/IOS.
  • نام دستگاه: اختیاری، حداکثر ۱۲۰ نویسه.

دو نکتهٔ مرزی که به‌راحتی اشتباه گرفته می‌شوند:

  • deviceId روی ردیف User، «ثبت دستگاه» نیست؛ فقط یک فیلد متادیتاست.
  • کلاینت اندرویدِ فعلی هنوز شیء device نمی‌فرستد و از همان deviceId و slot قدیمی User استفاده می‌کند؛ به همین دلیل دستگاه اندروید در این فهرست دیده نمی‌شود.
مسیر (هر دو با Bearer token)کار
GET /api/auth/devicesدستگاه‌های همین حساب، مرتب بر اساس lastSeenAt
DELETE /api/auth/devices/:uidحذف دستگاه و ابطال refresh آن

دو محدودیت رفتاری که باید بدانید:

  • access token صادرشده تا پایان عمرش معتبر می‌ماند. ابطال دستگاه، refresh بعدی را می‌بندد؛ access فعلی را فوراً بی‌اعتبار نمی‌کند.
  • lastSeenAt فقط هنگام ثبت دستگاه یا ورود به‌روز می‌شود، نه در هر refresh؛ پس «تازگی» این فیلد به معنی آنلاین‌بودن دستگاه نیست.

گزارش خطا​

POST /api/error-logs با Bearer token، آرایه‌ای به نام logs می‌گیرد و آن را برای کاربرِ همان توکن ذخیره می‌کند.

همهٔ فیلدهای زیر در هر آیتم الزامی‌اند؛ رشتهٔ خالی مجاز است:

فیلدنوع و حد
message / stackTraceرشته؛ حداکثر ۴۰۰۰ / ۱۶۰۰۰ نویسه
tag, exceptionType, exceptionClass, methodName, brand, model, device, flavorرشته؛ هرکدام حداکثر ۵۱۲ نویسه
timestampرشتهٔ قابل parse با Date.parse؛ ISO UTC مثل 2026-10-01T08:00:00.000Z توصیه می‌شود
level, lineNumber, screenWidth, screenHeight, sdkVersion, versionCodeعدد صحیح signed Int32 در بازهٔ -2147483648..2147483647؛ مثبت‌بودن لازم نیست
densityعدد (اعشاری مجاز است)

محدودیت‌های batch:

  • تعداد گزارش‌ها: ۱ تا ۲۰۰ در هر درخواست.
  • کل بدنهٔ JSON: حداکثر ۱MB — توجه کنید که حتی ۲۰۰ گزارش معتبر هم می‌تواند از این حد عبور کند.
  • نرخ: ۶۰ درخواست در ۱۵ دقیقه برای هر کاربر.

رفتار خطا: کل batch قبل از درج اعتبارسنجی می‌شود. یک timestamp غیرقابل parse یا یک عدد خارج از بازهٔ Int32، کل درخواست را با 400 رد می‌کند؛ هیچ آیتمی ذخیره نمی‌شود و این خطا با 500 سرور اشتباه نیست. 401 یعنی توکن نامعتبر و 429 یعنی عبور از سقف نرخ.

پاسخ موفق با کد وضعیت 201 (Created):

{ "success": true, "data": { "accepted": 1 } }

محدودیت‌های طراحی این مسیر که نباید فراموش شوند:

  • این endpoint فقط ذخیرهٔ سمت سرور است؛ هیچ کلاینتی موظف یا مجبور به ارسال خودکار خطا نیست و وجود این مسیر گزارش‌دهی خودکار را ثابت نمی‌کند.
  • API خواندن ندارد؛ بررسی گزارش‌ها مستقیماً از دیتابیس و با دسترسی مجاز انجام می‌شود.
  • رسید و deduplication ندارد؛ retry همان batch ممکن است گزارش تکراری بسازد.

حریم خصوصی: پیش از ارسال، توکن، OTP، شمارهٔ موبایل، متن رویدادها و اطلاعات شخصی را از message و stackTrace حذف کنید. سرور پالایش خودکار این داده‌ها را تضمین نمی‌کند.

مرجع: packages/contracts/src/errors.ts و device.ts؛ apps/api/src/routes/errorLogs.ts و devices.ts؛ محدودیت‌های نرخ در apps/api/src/index.ts.