'local']); // ثبت Observer برای اطلاعیه‌های تغییر سفارش Shipment::observe(ShipmentObserver::class); // Explicitly require the IFNEX number helper file so // ifnex_format_number() / ifnex_persian_digits() / ifnex_trend_percent() // are available even before `composer dump-autoload` is re-run. $helperPath = base_path('app/Helpers/number.php'); if (is_file($helperPath)) { require_once $helperPath; } // ─── Rate Limiting برای APIهای حساس ─── RateLimiter::for('auth', function (Request $request) { // لاگین: ۵ درخواست در دقیقه per IP (جلوگیری از brute-force) return Limit::perMinute(5)->by($request->ip()); }); RateLimiter::for('sms', function (Request $request) { // ارسال کد پیامکی: ۱ درخواست در دقیقه per شماره موبایل return Limit::perMinute(1)->by($request->input('phone') ?: $request->ip()); }); RateLimiter::for('public', function (Request $request) { // API عمومی (رهگیری، استعلام قیمت): ۳۰ درخواست در دقیقه per IP return Limit::perMinute(30)->by($request->ip()); }); RateLimiter::for('customer', function (Request $request) { // API مشتری (لاگین‌شده): ۶۰ درخواست در دقیقه per user return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip()); }); RateLimiter::for('wallet', function (Request $request) { // عملیات مالی حساس (پرداخت، شارژ، freeze): ۳۰ درخواست در دقیقه per user return Limit::perMinute(30)->by($request->user()?->id ?: $request->ip()); }); RateLimiter::for('staff', function (Request $request) { // API کارمند: ۶۰ درخواست در دقیقه per user return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip()); }); } }