From 5c4260f3ac6f967fe380aec2867e2eff84660709 Mon Sep 17 00:00:00 2001 From: boatbomber Date: Thu, 1 Feb 2024 13:29:36 -0800 Subject: [PATCH] Catch failed http requests that didn't error so we can handle them correctly (#847) --- CHANGELOG.md | 3 +++ plugin/http/Error.lua | 17 +++++++++++++---- plugin/http/init.lua | 11 ++++++++--- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a18a3ab9f..4aef0cc15 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ * Added popout diff visualizer for table properties like Attributes and Tags ([#834]) * Updated Theme to use Studio colors ([#838]) * Added experimental setting for Auto Connect in playtests ([#840]) +* Fixed http error handling so Rojo can be used in Github Codespaces ([#847]) * Projects may now specify rules for syncing files as if they had a different file extension. ([#813]) This is specified via a new field on project files, `syncRules`: @@ -56,8 +57,10 @@ [#834]: https://github.com/rojo-rbx/rojo/pull/834 [#838]: https://github.com/rojo-rbx/rojo/pull/838 [#840]: https://github.com/rojo-rbx/rojo/pull/840 +[#847]: https://github.com/rojo-rbx/rojo/pull/847 [#848]: https://github.com/rojo-rbx/rojo/pull/848 + ## [7.4.0] - January 16, 2024 * Improved the visualization for array properties like Tags ([#829]) * Significantly improved performance of `rojo serve`, `rojo build --watch`, and `rojo sourcemap --watch` on macOS. ([#830]) diff --git a/plugin/http/Error.lua b/plugin/http/Error.lua index ed85fc674..f9e46b38e 100644 --- a/plugin/http/Error.lua +++ b/plugin/http/Error.lua @@ -3,12 +3,12 @@ Error.__index = Error Error.Kind = { HttpNotEnabled = { - message = "Rojo requires HTTP access, which is not enabled.\n" .. - "Check your game settings, located in the 'Home' tab of Studio.", + message = "Rojo requires HTTP access, which is not enabled.\n" + .. "Check your game settings, located in the 'Home' tab of Studio.", }, ConnectFailed = { - message = "Couldn't connect to the Rojo server.\n" .. - "Make sure the server is running — use 'rojo serve' to run it!", + message = "Couldn't connect to the Rojo server.\n" + .. "Make sure the server is running — use 'rojo serve' to run it!", }, Timeout = { message = "HTTP request timed out.", @@ -63,4 +63,13 @@ function Error.fromRobloxErrorString(message) return Error.new(Error.Kind.Unknown, message) end +function Error.fromResponse(response) + local lower = (response.body or ""):lower() + if response.code == 408 or response.code == 504 or lower:find("timed? ?out") then + return Error.new(Error.Kind.Timeout) + end + + return Error.new(Error.Kind.Unknown, string.format("%s: %s", tostring(response.code), tostring(response.body))) +end + return Error diff --git a/plugin/http/init.lua b/plugin/http/init.lua index 686130ef6..cac0ebc4a 100644 --- a/plugin/http/init.lua +++ b/plugin/http/init.lua @@ -30,8 +30,13 @@ local function performRequest(requestParams) end) if success then - Log.trace("Request {} success, status code {}", requestId, response.StatusCode) - resolve(HttpResponse.fromRobloxResponse(response)) + Log.trace("Request {} success, response {:#?}", requestId, response) + local httpResponse = HttpResponse.fromRobloxResponse(response) + if httpResponse:isSuccess() then + resolve(httpResponse) + else + reject(HttpError.fromResponse(httpResponse)) + end else Log.trace("Request {} failure: {:?}", requestId, response) reject(HttpError.fromRobloxErrorString(response)) @@ -63,4 +68,4 @@ function Http.jsonDecode(source) return HttpService:JSONDecode(source) end -return Http \ No newline at end of file +return Http