دستگاهها
اگر هنگام ورود شیء 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.