add gs
This commit is contained in:
@@ -0,0 +1,181 @@
|
||||
--[[
|
||||
Url Constructor
|
||||
|
||||
Provides a single location for base urls.
|
||||
|
||||
]]--
|
||||
local ContentProvider = game:GetService("ContentProvider")
|
||||
|
||||
local FFlagLuaFixEconomyCreatorStatsUrl = game:DefineFastFlag("LuaFixEconomyCreatorStatsUrl", false)
|
||||
|
||||
-- helper functions
|
||||
local function parseBaseUrlInformation()
|
||||
-- get the current base url from the current configuration
|
||||
local baseUrl = ContentProvider.BaseUrl
|
||||
|
||||
-- keep a copy of the base url (https://www.roblox.com/)
|
||||
-- append a trailing slash if there isn't one
|
||||
if baseUrl:sub(#baseUrl) ~= "/" then
|
||||
baseUrl = baseUrl .. "/"
|
||||
end
|
||||
|
||||
-- parse out scheme (http, https)
|
||||
local _, schemeEnd = baseUrl:find("://")
|
||||
|
||||
-- parse out the prefix (www, kyle, ying, etc.)
|
||||
local prefixIndex, prefixEnd = baseUrl:find("%.", schemeEnd + 1)
|
||||
local basePrefix = baseUrl:sub(schemeEnd + 1, prefixIndex - 1)
|
||||
|
||||
-- parse out the domain (roblox.com/, sitetest1.robloxlabs.com/, etc.)
|
||||
local baseDomain = baseUrl:sub(prefixEnd + 1)
|
||||
|
||||
return baseUrl, basePrefix, baseDomain
|
||||
end
|
||||
local function preventTableModification(aTable, key, value)
|
||||
error("Attempt to modify read-only table")
|
||||
end
|
||||
local function createReadOnlyTable(aTable)
|
||||
return setmetatable({}, {
|
||||
__index = aTable,
|
||||
__newindex = preventTableModification,
|
||||
__metatable = false
|
||||
});
|
||||
end
|
||||
|
||||
|
||||
-- url construction building blocks
|
||||
local _baseUrl, _basePrefix, _baseDomain = parseBaseUrlInformation()
|
||||
|
||||
-- construct urls once
|
||||
local _baseApiUrl = string.format("https://api.%s", _baseDomain)
|
||||
local _baseApisUrl = string.format("https://apis.%s", _baseDomain)
|
||||
local _baseAuthUrl = string.format("https://auth.%s", _baseDomain)
|
||||
local _baseAccountSettingsUrl = string.format("https://accountsettings.%s", _baseDomain)
|
||||
local _baseAvatarUrl = string.format("https://avatar.%s", _baseDomain)
|
||||
local _baseCatalogUrl = string.format("https://catalog.%s", _baseDomain)
|
||||
local _baseInventoryUrl = string.format("https://inventory.%s", _baseDomain)
|
||||
local _baseChatUrl = string.format("https://chat.%sv2", _baseDomain)
|
||||
local _baseFriendUrl = string.format("https://friends.%sv1", _baseDomain)
|
||||
local _baseGameAssetUrl = string.format("https://assetgame.%s", _baseDomain)
|
||||
local _baseGamesUrl = string.format("https://games.%s", _baseDomain)
|
||||
local _baseGroupsUrl = string.format("https://groups.%s", _baseDomain)
|
||||
local _baseNotificationUrl = string.format("https://notifications.%s", _baseDomain)
|
||||
local _basePresenceUrl = string.format("https://presence.%sv1", _baseDomain)
|
||||
local _baseRealtimeUrl = string.format("https://realtime.%s", _baseDomain)
|
||||
local _baseWebUrl = string.format("https://web.%s", _baseDomain)
|
||||
local _baseWwwUrl = string.format("https://www.%s", _baseDomain)
|
||||
local _baseAdsUrl = string.format("https://ads.%s", _baseDomain)
|
||||
local _baseFollowingsUrl = string.format("https://followings.%s", _baseDomain)
|
||||
local _baseEconomyUrl = string.format("https://economy.%s", _baseDomain)
|
||||
local _baseThumbnailsUrl = string.format("https://thumbnails.%s", _baseDomain)
|
||||
local _baseAccountSettings = string.format("https://accountsettings.%s", _baseDomain)
|
||||
local _basePremiumFeatures = string.format("https://premiumfeatures.%s", _baseDomain)
|
||||
local _baseLocale = string.format("https://locale.%s", _baseDomain)
|
||||
local _baseBadgesUrl = string.format("https://badges.%s", _baseDomain)
|
||||
local _baseMetricsUrl = string.format("https://metrics.%sv1", _baseDomain)
|
||||
local _baseApisRcsUrl = string.format("https://apis.rcs.%s", _baseDomain)
|
||||
local _baseDiscussionsUrl = string.format("https://discussions.%s", _baseDomain)
|
||||
local _baseContactsUrl = string.format("https://contacts.%s", _baseDomain)
|
||||
local _baseSearchUrl = string.format("https://search.%s", _baseDomain)
|
||||
local _baseStaticUrl = string.format("https://static.%s", _baseDomain)
|
||||
local _baseGameSearchUITreatments = string.format("https://gamesearchuitreatments.api.%s", _baseDomain)
|
||||
local _baseEconomyCreatorStats = FFlagLuaFixEconomyCreatorStatsUrl
|
||||
and string.format("https://economycreatorstats.%s", _baseDomain)
|
||||
or string.format("https://economycreatorstats.api.%s", _baseDomain)
|
||||
local _baseUrlSecure = string.gsub(_baseUrl, "http://", "https://")
|
||||
|
||||
-- public api
|
||||
local Url = {
|
||||
DOMAIN = _baseDomain,
|
||||
PREFIX = _basePrefix,
|
||||
BASE_URL = _baseUrl,
|
||||
BASE_URL_SECURE = _baseUrlSecure,
|
||||
API_URL = _baseApiUrl,
|
||||
APIS_URL = _baseApisUrl,
|
||||
AUTH_URL = _baseAuthUrl,
|
||||
ACCOUNT_SETTINGS_URL = _baseAccountSettingsUrl,
|
||||
AVATAR_URL = _baseAvatarUrl,
|
||||
CATALOG_URL = _baseCatalogUrl,
|
||||
INVENTORY_URL = _baseInventoryUrl,
|
||||
GAME_URL = _baseGamesUrl,
|
||||
GAME_ASSET_URL = _baseGameAssetUrl,
|
||||
GROUPS_URL = _baseGroupsUrl,
|
||||
CHAT_URL = _baseChatUrl,
|
||||
FRIEND_URL = _baseFriendUrl,
|
||||
PRESENCE_URL = _basePresenceUrl,
|
||||
NOTIFICATION_URL = _baseNotificationUrl,
|
||||
REALTIME_URL = _baseRealtimeUrl,
|
||||
WEB_URL = _baseWebUrl,
|
||||
WWW_URL = _baseWwwUrl,
|
||||
ADS_URL = _baseAdsUrl,
|
||||
SEARCH_URL = _baseSearchUrl,
|
||||
GAME_SEARCH_UI_TREATMENTS = _baseGameSearchUITreatments,
|
||||
FOLLOWINGS_URL = _baseFollowingsUrl,
|
||||
ECONOMY_URL = _baseEconomyUrl,
|
||||
THUMBNAILS_URL = _baseThumbnailsUrl,
|
||||
BADGES_URL = _baseBadgesUrl,
|
||||
ACCOUNT_SETTINGS = _baseAccountSettings,
|
||||
PREMIUM_FEATURES = _basePremiumFeatures,
|
||||
LOCALE = _baseLocale,
|
||||
METRICS_URL = _baseMetricsUrl,
|
||||
APIS_RCS_URL = _baseApisRcsUrl,
|
||||
DISCUSSIONS_URL = _baseDiscussionsUrl,
|
||||
CONTACTS_URL = _baseContactsUrl,
|
||||
STATIC_URL = _baseStaticUrl,
|
||||
BLOG_URL = "https://blog.roblox.com/",
|
||||
CORP_URL = "https://corp.roblox.com/",
|
||||
ECNOMY_CREATOR_STATS = _baseEconomyCreatorStats,
|
||||
}
|
||||
|
||||
function Url:getUserProfileUrl(userId)
|
||||
return string.format("%susers/%s/profile", self.BASE_URL, userId)
|
||||
end
|
||||
|
||||
function Url:getUserFriendsUrl(userId)
|
||||
return string.format("%susers/%s/friends", self.BASE_URL, userId)
|
||||
end
|
||||
|
||||
function Url:getUserInventoryUrl(userId)
|
||||
return string.format("%susers/%s/inventory", self.BASE_URL, userId)
|
||||
end
|
||||
|
||||
function Url:getPlaceDefaultThumbnailUrl(placeId, width, height)
|
||||
return string.format(
|
||||
"%sThumbs/Asset.ashx?width=%d&height=%d&assetId=%s&ignorePlaceMediaItems=true",
|
||||
self.BASE_URL,
|
||||
width,
|
||||
height,
|
||||
tostring(placeId))
|
||||
end
|
||||
|
||||
function Url:isVanitySite()
|
||||
return self.PREFIX ~= "www"
|
||||
end
|
||||
|
||||
-- data - (table<string, string>) a table of key/value pairs to format
|
||||
function Url:makeQueryString(data)
|
||||
--NOTE - This function can be used to create a query string of parameters
|
||||
-- at the end of url query, or create a application/form-url-encoded post body string
|
||||
local params = {}
|
||||
|
||||
-- NOTE - Arrays are handled, but generally data is expected to be flat.
|
||||
for key, value in pairs(data) do
|
||||
if value ~= nil then --for optional params
|
||||
if type(value) == "table" then
|
||||
for i = 1, #value do
|
||||
table.insert(params, key .. "=" .. value[i])
|
||||
end
|
||||
else
|
||||
table.insert(params, key .. "=" .. tostring(value))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return table.concat(params, "&")
|
||||
end
|
||||
|
||||
|
||||
-- prevent anyone from modifying this table:
|
||||
Url = createReadOnlyTable(Url)
|
||||
|
||||
return Url
|
||||
Reference in New Issue
Block a user