withRouting( web: __DIR__.'/../routes/web.php', api: __DIR__.'/../routes/api.php', commands: __DIR__.'/../routes/console.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware): void { $middleware->redirectGuestsTo(function (Request $request) { if ($request->is('api/*')) { throw new HttpException(Response::HTTP_UNAUTHORIZED); } }); $middleware->throttleApi('api', true); }) ->withExceptions(function (Exceptions $exceptions): void { $exceptions->dontReport(AppException::class); $exceptions->respond(function (Response $response, Throwable $e, Request $request) { if (!$request->is('api/*')) { return $response; } switch ($e) { case $e instanceof AppException: $msg = $e->getMessage(); break; case $e instanceof ValidationException: $msg = $e->validator->errors()->first(); break; case $e instanceof AuthenticationException: $code = Response::HTTP_UNAUTHORIZED; $msg = __("http-statuses.$code"); break; case $e instanceof HttpExceptionInterface: $code = $e->getStatusCode(); $msg = __("http-statuses.$code"); break; default: $code = Response::HTTP_INTERNAL_SERVER_ERROR; if (config('app.debug')) { $msg = $e->getMessage() ?: get_class($e); } else { $msg = __("http-statuses.$code"); } } return error($msg); }); })->create();