📄 src/Infrastructure/YouTube/HttpClientInitializer.cs
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using Google.Apis.Http;

namespace Slopper.Infrastructure.YouTube;

internal sealed class HttpClientInitializer(IYouTubeCredentialsProvider youTubeCredentialsProvider)
    : IConfigurableHttpClientInitializer,
        IHttpExecuteInterceptor
{
    public void Initialize(ConfigurableHttpClient httpClient) => httpClient.MessageHandler.Credential = this;

    public async Task InterceptAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        var credentials = await youTubeCredentialsProvider.GetCredentials(cancellationToken);
        var token = await credentials.GetAccessTokenForRequestAsync(request.RequestUri?.ToString(), cancellationToken);
        request.Headers.Authorization = new("Bearer", token);
    }
}