Clients/Client2020/ExtraContent/LuaPackages/UGCValidationImpl/util/getAssetCreationDetails.lua

56 lines
1.5 KiB
Lua

local HttpService = game:GetService("HttpService")
local HttpRbxApiService = game:GetService("HttpRbxApiService")
local ContentProvider = game:GetService("ContentProvider")
local function getBaseDomain()
local baseUrl = ContentProvider.BaseUrl
if string.sub(baseUrl, #baseUrl) ~= "/" then
baseUrl = baseUrl .. "/"
end
local _, schemeEnd = string.find(baseUrl, "://")
local _, prefixEnd = string.find(baseUrl, "%.", schemeEnd + 1)
return string.sub(baseUrl, prefixEnd + 1)
end
local MAX_RETRIES = 5
local function requestAndRetry(apiUrl, data, attempt)
if attempt == nil then
attempt = 0
end
local success, response = pcall(function()
return HttpRbxApiService:PostAsyncFullUrl(apiUrl, data)
end)
if success then
return true, response
elseif attempt >= MAX_RETRIES then
return false, response
else
local timeToWait = 2^(attempt - 1)
wait(timeToWait)
return requestAndRetry(apiUrl, data, attempt + 1)
end
end
local BASE_DOMAIN = getBaseDomain()
local ITEM_CONFIGURATION_URL = string.format("https://itemconfiguration.%s", BASE_DOMAIN)
local GET_ASSET_CREATION_DETAILS_URL = ITEM_CONFIGURATION_URL .. "v1/creations/get-asset-details"
local function getAssetCreationDetails(isAsync, assetIds)
local success, response = requestAndRetry(
GET_ASSET_CREATION_DETAILS_URL,
HttpService:JSONEncode({ assetIds = assetIds })
)
-- TODO: isAsync
if success then
return true, HttpService:JSONDecode(response)
else
return false, response
end
end
return getAssetCreationDetails