forked from rojo-rbx/rojo
77 lines
1.8 KiB
Lua
77 lines
1.8 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
|
|
|
|
function Http.get(url)
|
|
local requestId = lastRequestId + 1
|
|
lastRequestId = requestId
|
|
|
|
Log.trace("GET(%d) %s", requestId, url)
|
|
|
|
return Promise.new(function(resolve, reject)
|
|
coroutine.wrap(function()
|
|
local success, response = pcall(function()
|
|
return HttpService:RequestAsync({
|
|
Url = url,
|
|
Method = "GET",
|
|
})
|
|
end)
|
|
|
|
if success then
|
|
Log.trace("Request %d success: status code %s", requestId, response.StatusCode)
|
|
resolve(HttpResponse.fromRobloxResponse(response))
|
|
else
|
|
Log.trace("Request %d failure: %s", requestId, response)
|
|
reject(HttpError.fromErrorString(response))
|
|
end
|
|
end)()
|
|
end)
|
|
end
|
|
|
|
function Http.post(url, body)
|
|
local requestId = lastRequestId + 1
|
|
lastRequestId = requestId
|
|
|
|
Log.trace("POST(%d) %s\n%s", requestId, url, body)
|
|
|
|
return Promise.new(function(resolve, reject)
|
|
coroutine.wrap(function()
|
|
local success, response = pcall(function()
|
|
return HttpService:RequestAsync({
|
|
Url = url,
|
|
Method = "POST",
|
|
Body = body,
|
|
})
|
|
end)
|
|
|
|
if success then
|
|
Log.trace("Request %d success: status code %s", requestId, response.StatusCode)
|
|
resolve(HttpResponse.fromRobloxResponse(response))
|
|
else
|
|
Log.trace("Request %d failure: %s", requestId, response)
|
|
reject(HttpError.fromErrorString(response))
|
|
end
|
|
end)()
|
|
end)
|
|
end
|
|
|
|
function Http.jsonEncode(object)
|
|
return HttpService:JSONEncode(object)
|
|
end
|
|
|
|
function Http.jsonDecode(source)
|
|
return HttpService:JSONDecode(source)
|
|
end
|
|
|
|
return Http |