From 55dfa9cbf494f2cb3c74b556217959fdbcd37acc Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Tue, 24 Jun 2025 10:52:59 +0200 Subject: [PATCH] Improve fetchV2 header handling in JSContext extension Updated the fetchV2 native function to accept headers as Any type and safely convert them to [String: String]. Added error logging for invalid header formats and non-string header values to improve robustness. --- .../Extensions/JavaScriptCore+Extensions.swift | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/Sora/Utils/Extensions/JavaScriptCore+Extensions.swift b/Sora/Utils/Extensions/JavaScriptCore+Extensions.swift index beb18ec..0f6bd60 100644 --- a/Sora/Utils/Extensions/JavaScriptCore+Extensions.swift +++ b/Sora/Utils/Extensions/JavaScriptCore+Extensions.swift @@ -76,7 +76,7 @@ extension JSContext { } func setupFetchV2() { - let fetchV2NativeFunction: @convention(block) (String, [String: String]?, String?, String?, ObjCBool, String?, JSValue, JSValue) -> Void = { urlString, headers, method, body, redirect, encoding, resolve, reject in + let fetchV2NativeFunction: @convention(block) (String, Any?, String?, String?, ObjCBool, String?, JSValue, JSValue) -> Void = { urlString, headersAny, method, body, redirect, encoding, resolve, reject in guard let url = URL(string: urlString) else { Logger.shared.log("Invalid URL", type: "Error") DispatchQueue.main.async { @@ -85,6 +85,21 @@ extension JSContext { return } + var headers: [String: String]? = nil + if let headersDict = headersAny as? [String: Any] { + var safeHeaders: [String: String] = [:] + for (key, value) in headersDict { + if let valueStr = value as? String { + safeHeaders[key] = valueStr + } else { + Logger.shared.log("Header value is not a String: \(key): \(value)", type: "Error") + } + } + headers = safeHeaders + } else if headersAny != nil { + Logger.shared.log("Headers argument is not a dictionary", type: "Error") + } + let httpMethod = method ?? "GET" var request = URLRequest(url: url) request.httpMethod = httpMethod