requestId function

Middleware requestId({
  1. String headerName = 'x-request-id',
  2. FutureOr<String> generator(
    1. Event event
    )?,
  3. bool trustIncoming = true,
})

Creates middleware that provides a request ID for the current request.

Implementation

Middleware requestId({
  String headerName = 'x-request-id',
  FutureOr<String> Function(Event event)? generator,
  bool trustIncoming = true,
}) {
  return (event, next) async {
    final incomingValue = event.request.headers.get(headerName);
    final selectedId = switch ((trustIncoming, incomingValue)) {
      (true, final String value) when value.isNotEmpty => value,
      _ => await (generator?.call(event) ?? _defaultRequestIdGenerator()),
    };

    event.locals.set(#requestId, selectedId);
    final response = await next();

    if (!response.headers.has(headerName)) {
      response.headers.set(headerName, selectedId);
    }

    return response;
  };
}