app->singleton(CheckoutSessionService::class); $this->app->singleton(CheckoutAssignmentService::class); $this->app->singleton(CheckoutPaymentService::class); $this->app->singleton(EventStorageManager::class); $this->app->singleton(StorageHealthService::class); } /** * Bootstrap any application services. */ public function boot(): void { $this->app->make(EventStorageManager::class)->registerDynamicDisks(); RateLimiter::for('tenant-api', function (Request $request) { $tenantId = $request->attributes->get('tenant_id') ?? $request->user()?->tenant_id ?? $request->user()?->tenant?->id; $key = $tenantId ? 'tenant:' . $tenantId : ('ip:' . ($request->ip() ?? 'unknown')); return Limit::perMinute(100)->by($key); }); RateLimiter::for('oauth', function (Request $request) { return Limit::perMinute(10)->by('oauth:' . ($request->ip() ?? 'unknown')); }); Inertia::share('locale', fn () => app()->getLocale()); if (config('storage-monitor.queue_failure_alerts')) { Queue::failing(function (JobFailed $event) { $context = [ 'queue' => $event->job->getQueue(), 'job' => $event->job->resolveName(), 'exception' => $event->exception->getMessage(), ]; $command = data_get($event->job->payload(), 'data.command'); if (is_string($command)) { try { $instance = @unserialize($command, ['allowed_classes' => true]); if (is_object($instance)) { foreach (['eventId' => 'event_id', 'photoId' => 'photo_id'] as $property => $label) { if (isset($instance->{$property})) { $context[$label] = $instance->{$property}; } } } } catch (\Throwable $e) { $context['unserialize_error'] = $e->getMessage(); } } if ($mail = config('storage-monitor.alert_recipients.mail')) { Notification::route('mail', $mail)->notify(new UploadPipelineFailed($context)); } }); } if ($this->app->runningInConsole()) { $this->app->register(\App\Providers\Filament\AdminPanelProvider::class); } } }