timeout function

Middleware timeout({
  1. Duration duration = const Duration(seconds: 30),
})

Request timeout middleware

Returns 504 Gateway Timeout if the handler takes longer than duration.

Implementation

Middleware timeout({Duration duration = const Duration(seconds: 30)}) {
  return (Handler innerHandler) {
    return (Request request) async {
      try {
        return await Future.any<Response>([
          Future(() async => await innerHandler(request)),
          Future.delayed(duration, () => Response(
            504,
            body: jsonEncode({'error': 'Request timeout'}),
            headers: {'Content-Type': 'application/json'},
          )),
        ]);
      } catch (e) {
        return Response.internalServerError(
          body: jsonEncode({'error': 'Internal server error'}),
          headers: {'Content-Type': 'application/json'},
        );
      }
    };
  };
}