using System; using System.Net; using System.Net.Http; using System.Net.Http.Headers; using System.Net.Security; using System.Security.Cryptography.X509Certificates; using System.Threading.Tasks; namespace BackupPipefy.Infrastructure.Services { public class PipefyClient { private readonly HttpClient _httpClient; private readonly PipefyTokenService _tokenService; public PipefyClient(PipefyTokenService tokenService, bool useProxy = false) { if (useProxy) { var handler = new HttpClientHandler { Proxy = new WebProxy("127.0.0.1", 8888), UseProxy = true, ServerCertificateCustomValidationCallback = (HttpRequestMessage req, X509Certificate2? cert, X509Chain? chain, SslPolicyErrors errors) => true }; _httpClient = new HttpClient(handler); } else { _httpClient = new HttpClient(); } _tokenService = tokenService; } public async Task GetCardsAsync(int pipeId, DateTime lastUpdated) { var token = await _tokenService.GetTokenAsync(); _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); // Montar GraphQL e enviar request // Exemplo simplificado: var query = new { query = @"{ allCards(pipeId: 303718996, after: \""WyIxLjAiLCI1MC4wIiw4MTgzNjgwNzhd\""){ edges{ node{ id title emailMessagingAddress } } pageInfo{ endCursor hasNextPage } }}" }; var content = new StringContent(System.Text.Json.JsonSerializer.Serialize(query)); content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); var response = await _httpClient.PostAsync("https://api.pipefy.com/graphql", content); response.EnsureSuccessStatusCode(); return await response.Content.ReadAsStringAsync(); } } }