mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-04-20 12:45:05 +00:00
66 lines
1.4 KiB
Lua
66 lines
1.4 KiB
Lua
local HttpService = game:GetService("HttpService")
|
|
|
|
local Promise = require(script.Parent.Promise)
|
|
local Log = require(script.Parent.Log)
|
|
|
|
local HttpError = require(script.Error)
|
|
local HttpResponse = require(script.Response)
|
|
|
|
local lastRequestId = 0
|
|
|
|
local Http = {}
|
|
|
|
Http.Error = HttpError
|
|
Http.Response = HttpResponse
|
|
|
|
local function performRequest(requestParams)
|
|
local requestId = lastRequestId + 1
|
|
lastRequestId = requestId
|
|
|
|
Log.trace("HTTP {}({}) {}", requestParams.Method, requestId, requestParams.Url)
|
|
|
|
if requestParams.Body ~= nil then
|
|
Log.trace("{}", requestParams.Body)
|
|
end
|
|
|
|
return Promise.new(function(resolve, reject)
|
|
coroutine.wrap(function()
|
|
local success, response = pcall(function()
|
|
return HttpService:RequestAsync(requestParams)
|
|
end)
|
|
|
|
if success then
|
|
Log.trace("Request {} success, status code {}", requestId, response.StatusCode)
|
|
resolve(HttpResponse.fromRobloxResponse(response))
|
|
else
|
|
Log.trace("Request {} failure: {:?}", requestId, response)
|
|
reject(HttpError.fromRobloxErrorString(response))
|
|
end
|
|
end)()
|
|
end)
|
|
end
|
|
|
|
function Http.get(url)
|
|
return performRequest({
|
|
Url = url,
|
|
Method = "GET",
|
|
})
|
|
end
|
|
|
|
function Http.post(url, body)
|
|
return performRequest({
|
|
Url = url,
|
|
Method = "POST",
|
|
Body = body,
|
|
})
|
|
end
|
|
|
|
function Http.jsonEncode(object)
|
|
return HttpService:JSONEncode(object)
|
|
end
|
|
|
|
function Http.jsonDecode(source)
|
|
return HttpService:JSONDecode(source)
|
|
end
|
|
|
|
return Http |