namespace Duende.Bff.Yarp
{
    public static class BffBuilderExtensions
    {
        public static T AddRemoteApis<T>(this T builder)
            where T : Duende.Bff.Builder.IBffServicesBuilder { }
        public static Microsoft.Extensions.DependencyInjection.IReverseProxyBuilder AddYarpConfig(this Duende.Bff.Builder.IBffServicesBuilder builder, Microsoft.Extensions.Configuration.IConfiguration config) { }
        public static Microsoft.Extensions.DependencyInjection.IReverseProxyBuilder AddYarpConfig(this Duende.Bff.Builder.IBffServicesBuilder builder, Yarp.ReverseProxy.Configuration.RouteConfig[] routes, Yarp.ReverseProxy.Configuration.ClusterConfig[] clusters) { }
        public static Microsoft.AspNetCore.Builder.IApplicationBuilder UseBffRemoteRoutes(this Microsoft.AspNetCore.Builder.IApplicationBuilder app) { }
    }
    public delegate void BffYarpTransformBuilder(string pathMatch, Yarp.ReverseProxy.Transforms.Builder.TransformBuilderContext context);
    public static class DefaultBffYarpTransformerBuilders
    {
        public static readonly Duende.Bff.Yarp.BffYarpTransformBuilder DirectProxyWithAccessToken;
    }
    public static class ProxyAppBuilderExtensions
    {
        public static Microsoft.AspNetCore.Builder.IApplicationBuilder UseAntiforgeryCheck(this Microsoft.AspNetCore.Builder.IApplicationBuilder yarpApp) { }
    }
    public static class ProxyConfigExtensions
    {
        public static Yarp.ReverseProxy.Configuration.ClusterConfig WithAccessToken(this Yarp.ReverseProxy.Configuration.ClusterConfig config, Duende.Bff.AccessTokenManagement.RequiredTokenType requiredTokenType) { }
        public static Yarp.ReverseProxy.Configuration.RouteConfig WithAccessToken(this Yarp.ReverseProxy.Configuration.RouteConfig config, Duende.Bff.AccessTokenManagement.RequiredTokenType requiredTokenType) { }
        public static Yarp.ReverseProxy.Configuration.RouteConfig WithAntiforgeryCheck(this Yarp.ReverseProxy.Configuration.RouteConfig config) { }
        [System.Obsolete("Use TokenRequirement.OptionalUserOrNone")]
        public static Yarp.ReverseProxy.Configuration.RouteConfig WithOptionalUserAccessToken(this Yarp.ReverseProxy.Configuration.RouteConfig config) { }
    }
    public static class ProxyFrontendExtensionExtensions
    {
        public static Duende.Bff.Yarp.RemoteApi[] GetRemoteApis(this Duende.Bff.DynamicFrontends.BffFrontend frontend) { }
        public static Duende.Bff.DynamicFrontends.BffFrontend WithRemoteApis(this Duende.Bff.DynamicFrontends.BffFrontend frontend, params Duende.Bff.Yarp.RemoteApi[] config) { }
    }
    public sealed class RemoteApi : System.IEquatable<Duende.Bff.Yarp.RemoteApi>
    {
        public RemoteApi() { }
        [System.Diagnostics.CodeAnalysis.SetsRequiredMembers]
        public RemoteApi(Microsoft.AspNetCore.Http.PathString pathMatch, System.Uri targetUri) { }
        public System.Type? AccessTokenRetrieverType { get; init; }
        public System.TimeSpan? ActivityTimeout { get; init; }
        public bool? AllowResponseBuffering { get; init; }
        public Duende.Bff.Configuration.BffUserAccessTokenParameters? Parameters { get; init; }
        public required Microsoft.AspNetCore.Http.PathString PathMatch { get; init; }
        public required Duende.Bff.AccessTokenManagement.RequiredTokenType RequiredTokenType { get; init; }
        public required System.Uri TargetUri { get; init; }
        public bool Equals(Duende.Bff.Yarp.RemoteApi? other) { }
        public override int GetHashCode() { }
        public Duende.Bff.Yarp.RemoteApi WithAccessToken(Duende.Bff.AccessTokenManagement.RequiredTokenType type) { }
        public Duende.Bff.Yarp.RemoteApi WithAccessTokenRetriever<TRetriever>()
            where TRetriever : Duende.Bff.AccessTokenManagement.IAccessTokenRetriever { }
        public Duende.Bff.Yarp.RemoteApi WithActivityTimeout(System.TimeSpan timeout) { }
        public Duende.Bff.Yarp.RemoteApi WithResponseBufferingAllowed(bool allow) { }
        public Duende.Bff.Yarp.RemoteApi WithUserAccessTokenParameters(Duende.Bff.Configuration.BffUserAccessTokenParameters parameters) { }
    }
    public static class ReverseProxyBuilderExtensions
    {
        public static Microsoft.Extensions.DependencyInjection.IReverseProxyBuilder AddBffExtensions(this Microsoft.Extensions.DependencyInjection.IReverseProxyBuilder builder) { }
    }
    public static class ReverseProxyEndpointConventionBuilderExtensions
    {
        public static Microsoft.AspNetCore.Builder.ReverseProxyConventionBuilder AsBffApiEndpoint(this Microsoft.AspNetCore.Builder.ReverseProxyConventionBuilder builder) { }
        public static Microsoft.AspNetCore.Builder.ReverseProxyConventionBuilder MapBffReverseProxy(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints) { }
        public static Microsoft.AspNetCore.Builder.ReverseProxyConventionBuilder MapBffReverseProxy(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, System.Action<Microsoft.AspNetCore.Builder.IReverseProxyApplicationBuilder> configureAction) { }
    }
    public static class RouteBuilderExtensions
    {
        public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder MapRemoteBffApiEndpoint(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints, Microsoft.AspNetCore.Http.PathString pathMatch, System.Uri apiAddress, System.Action<Yarp.ReverseProxy.Transforms.Builder.TransformBuilderContext>? yarpTransformBuilder = null, Yarp.ReverseProxy.Forwarder.ForwarderRequestConfig? requestConfig = null) { }
    }
    public sealed class UserAccessTokenParameters : System.IEquatable<Duende.Bff.Yarp.UserAccessTokenParameters>
    {
        public UserAccessTokenParameters() { }
        public Duende.Bff.AccessTokenManagement.Scheme? ChallengeScheme { get; init; }
        public bool ForceRenewal { get; init; }
        public Duende.Bff.AccessTokenManagement.Resource? Resource { get; init; }
        public Duende.Bff.AccessTokenManagement.Scheme? SignInScheme { get; init; }
    }
    public static class YarpTransformExtensions
    {
        public static Yarp.ReverseProxy.Transforms.Builder.TransformBuilderContext AddBffAccessToken(this Yarp.ReverseProxy.Transforms.Builder.TransformBuilderContext context, Microsoft.AspNetCore.Http.PathString pathMatch) { }
    }
}