diff --git a/Assets/graphQl-client/Scripts/Core/HttpHandler.cs b/Assets/graphQl-client/Scripts/Core/HttpHandler.cs index d468af8..f1945f3 100644 --- a/Assets/graphQl-client/Scripts/Core/HttpHandler.cs +++ b/Assets/graphQl-client/Scripts/Core/HttpHandler.cs @@ -14,33 +14,100 @@ namespace GraphQlClient.Core public class HttpHandler { + public static async Task PostAsync(string url, string details, string authToken = null, object variables = null, string operationName = null) + { + // 1. Check if the query is anonymous and name it + // This looks for 'query {', 'mutation {', or just '{' + string processedQuery = details.Trim(); - public static async Task PostAsync(string url, string details, string authToken = null){ - string jsonData = JsonConvert.SerializeObject(new{query = details}); - byte[] postData = Encoding.ASCII.GetBytes(jsonData); - UnityWebRequest request = UnityWebRequest.Post(url, UnityWebRequest.kHttpVerbPOST); - request.uploadHandler = new UploadHandlerRaw(postData); - request.SetRequestHeader("Content-Type", "application/json"); - if (!String.IsNullOrEmpty(authToken)) - request.SetRequestHeader("Authorization", "Bearer " + authToken); + // Try to find an existing name first (for your new Login API) + Match nameMatch = Regex.Match(processedQuery, @"\b(?:query|mutation)\s+([a-zA-Z0-9_]+)"); + + if (nameMatch.Success) + { + operationName = nameMatch.Groups[1].Value; + } + else + { + // No name found? It's anonymous. Let's inject "EduzoOp" + operationName = "EduzoOp"; + + if (processedQuery.StartsWith("query")) + processedQuery = Regex.Replace(processedQuery, @"^query\s*\{", "query EduzoOp {"); + else if (processedQuery.StartsWith("mutation")) + processedQuery = Regex.Replace(processedQuery, @"^mutation\s*\{", "mutation EduzoOp {"); + else if (processedQuery.StartsWith("{")) + processedQuery = "query EduzoOp " + processedQuery; + } + + // 2. Build the payload with the now-mandatory operationName + var payload = new Dictionary + { + { "query", processedQuery }, + { "operationName", operationName } + }; + + if (variables != null) + payload.Add("variables", variables); + + // 3. Serialize and continue with your original logic + string jsonData = JsonConvert.SerializeObject(payload); + byte[] postData = Encoding.UTF8.GetBytes(jsonData); + + UnityWebRequest request = UnityWebRequest.PostWwwForm(url, UnityWebRequest.kHttpVerbPOST); + request.uploadHandler = new UploadHandlerRaw(postData); + request.SetRequestHeader("Content-Type", "application/json"); + + if (!String.IsNullOrEmpty(authToken)) + request.SetRequestHeader("Authorization", "Bearer " + authToken); + + OnRequestBegin requestBegin = new OnRequestBegin(); + requestBegin.FireEvent(); + + try + { + await request.SendWebRequest(); + } + catch (Exception e) + { + Debug.Log("Testing exceptions"); + OnRequestEnded requestFailed = new OnRequestEnded(e); + requestFailed.FireEvent(); + } + + Debug.Log(request.downloadHandler.text); + + OnRequestEnded requestSucceeded = new OnRequestEnded(request.downloadHandler.text); + requestSucceeded.FireEvent(); + + return request; + } + // public static async Task PostAsync(string url, string details, string authToken = null){ + // string jsonData = JsonConvert.SerializeObject(new{query = details}); + // byte[] postData = Encoding.ASCII.GetBytes(jsonData); + // UnityWebRequest request = UnityWebRequest.Post(url, UnityWebRequest.kHttpVerbPOST); + // request.uploadHandler = new UploadHandlerRaw(postData); + // request.SetRequestHeader("Content-Type", "application/json"); + // if (!String.IsNullOrEmpty(authToken)) + // request.SetRequestHeader("Authorization", "Bearer " + authToken); - OnRequestBegin requestBegin = new OnRequestBegin(); - requestBegin.FireEvent(); + // OnRequestBegin requestBegin = new OnRequestBegin(); + // requestBegin.FireEvent(); - try{ - await request.SendWebRequest(); - } - catch(Exception e){ - Debug.Log("Testing exceptions"); - OnRequestEnded requestFailed = new OnRequestEnded(e); - requestFailed.FireEvent(); - } - Debug.Log(request.downloadHandler.text); + // try{ + // await request.SendWebRequest(); + // } + // catch(Exception e){ + // Debug.Log("Testing exceptions"); + // OnRequestEnded requestFailed = new OnRequestEnded(e); + // requestFailed.FireEvent(); + // } + // Debug.Log(request.downloadHandler.text); - OnRequestEnded requestSucceeded = new OnRequestEnded(request.downloadHandler.text); - requestSucceeded.FireEvent(); - return request; - } + // OnRequestEnded requestSucceeded = new OnRequestEnded(request.downloadHandler.text); + // requestSucceeded.FireEvent(); + // return request; + // } public static async Task PostAsync(UnityWebRequest request, string details){ string jsonData = JsonConvert.SerializeObject(new{query = details});