-- Compiled with roblox-ts v1.2.7 local TS = _G[script] local LogLevel = TS.import(script, TS.getModule(script, "@rbxts", "log").out).LogLevel local ZirconServer = TS.import(script, script.Parent.Parent, "Server").default local ZirconGroupBuilder = TS.import(script, script.Parent, "ZirconGroupBuilder").ZirconGroupBuilder local ExecutionAction do local _inverse = {} ExecutionAction = setmetatable({}, { __index = _inverse, }) ExecutionAction.Execute = 0 _inverse[0] = "Execute" ExecutionAction.Skip = 1 _inverse[1] = "Skip" end local ZirconConfigurationBuilder do ZirconConfigurationBuilder = setmetatable({}, { __tostring = function() return "ZirconConfigurationBuilder" end, }) ZirconConfigurationBuilder.__index = ZirconConfigurationBuilder function ZirconConfigurationBuilder.new(...) local self = setmetatable({}, ZirconConfigurationBuilder) return self:constructor(...) or self end function ZirconConfigurationBuilder:constructor() self.configuration = { Groups = {}, Registry = {}, GroupGlobalsMap = {}, Hooks = { BeforeExecute = {}, AfterExecute = {}, }, } end function ZirconConfigurationBuilder:CreateGroup(rank, id, configurator) local group = ZirconGroupBuilder.new(self, rank, id) configurator(group):Add() return self end function ZirconConfigurationBuilder:CreateDefaultCreatorGroup() return ZirconGroupBuilder.new(self, 255, "creator"):BindToCreator():SetPermissions({ CanAccessFullZirconEditor = true, CanExecuteZirconiumScripts = true, CanRecieveServerLogMessages = true, CanViewLogMetadata = true, }):Add() end function ZirconConfigurationBuilder:CreateDefaultAdminGroup(builderOrOptions) local group = ZirconGroupBuilder.new(self, 254, "admin"):SetPermissions({ CanAccessFullZirconEditor = true, CanExecuteZirconiumScripts = true, CanRecieveServerLogMessages = true, CanViewLogMetadata = true, }) if type(builderOrOptions) == "function" then builderOrOptions(group) else local _condition = builderOrOptions if _condition == nil then _condition = {} end local _binding = _condition local GroupRank = _binding.GroupRank if GroupRank == nil then GroupRank = 254 end local GroupId = _binding.GroupId if GroupId == nil then GroupId = game.CreatorId end if game.CreatorType == Enum.CreatorType.Group or GroupId ~= game.CreatorId then group:BindToGroupRank(GroupId, GroupRank) else ZirconServer.Log.WriteStructured({ Level = LogLevel.Warning, Template = "Implicit administrator groups only work in group places, try explicitly setting the admin group config", Timestamp = DateTime.now():ToIsoDate(), SourceContext = "CreateDefaultAdminGroup", }) end end return group:Add() end function ZirconConfigurationBuilder:CreateDefaultUserGroup(options) local _fn = ZirconGroupBuilder.new(self, 1, "user") local _object = {} local _left = "CanAccessConsole" local _result = options if _result ~= nil then _result = _result.CanAccessConsole end local _condition = _result if _condition == nil then _condition = false end _object[_left] = _condition return _fn:SetPermissions(_object):BindToEveryone():Add() end function ZirconConfigurationBuilder:AddNamespace(namespace, groups) local _array = {} local _length = #_array local _array_1 = self.configuration.Registry local _Length = #_array_1 table.move(_array_1, 1, _Length, _length + 1, _array) _length += _Length _array[_length + 1] = { namespace, groups } self.configuration.Registry = _array return self end function ZirconConfigurationBuilder:AddEnum(enumType, groups) local _array = {} local _length = #_array local _array_1 = self.configuration.Registry local _Length = #_array_1 table.move(_array_1, 1, _Length, _length + 1, _array) _length += _Length _array[_length + 1] = { enumType, groups } self.configuration.Registry = _array return self end function ZirconConfigurationBuilder:AddFunction(functionType, groups) local _array = {} local _length = #_array local _array_1 = self.configuration.Registry local _Length = #_array_1 table.move(_array_1, 1, _Length, _length + 1, _array) _length += _Length _array[_length + 1] = { functionType, groups } self.configuration.Registry = _array return self end function ZirconConfigurationBuilder:AddFunctionsToGroups(functions, groupIds) local _array = {} local _length = #_array local _array_1 = self.configuration.Registry table.move(_array_1, 1, #_array_1, _length + 1, _array) local registry = _array for _, func in ipairs(functions) do local _arg0 = { func, groupIds } -- ▼ Array.push ▼ registry[#registry + 1] = _arg0 -- ▲ Array.push ▲ end self.configuration.Registry = registry return self end function ZirconConfigurationBuilder:AddHook(hookName, hookCallback) local _array = {} local _length = #_array local _array_1 = self.configuration.Hooks[hookName] local _Length = #_array_1 table.move(_array_1, 1, _Length, _length + 1, _array) _length += _Length _array[_length + 1] = hookCallback local hooks = _array self.configuration.Hooks[hookName] = hooks return self end function ZirconConfigurationBuilder:logging() return ZirconConfigurationBuilder.new():CreateGroup(255, "creator", function(group) return group:BindToCreator():SetPermissions({ CanAccessFullZirconEditor = false, CanExecuteZirconiumScripts = false, CanRecieveServerLogMessages = true, }) end):CreateDefaultUserGroup():Build() end function ZirconConfigurationBuilder:default() if game.CreatorType == Enum.CreatorType.Group then return ZirconConfigurationBuilder.new():CreateDefaultCreatorGroup():CreateDefaultAdminGroup():CreateDefaultUserGroup() else return ZirconConfigurationBuilder.new():CreateDefaultCreatorGroup():CreateDefaultUserGroup() end end function ZirconConfigurationBuilder:Build() return self.configuration end end return { ExecutionAction = ExecutionAction, ZirconConfigurationBuilder = ZirconConfigurationBuilder, }