import { getStartProfile } from "./serverLauncher.js"; function serializeGroup(group, { includePermissions = true } = {}) { const serialized = { id: group.id, name: group.name, admin: isAdminGroup(group), createdAt: group.createdAt, updatedAt: group.updatedAt, }; if (includePermissions) { serialized.permissions = normalizePermissions(group.permissions); } return serialized; } function serializeSession(group) { if (!isAdminGroup(group)) { return { admin: false }; } return { admin: true, name: group.name, }; } function normalizePermissions(permissions = {}) { return { servers: Array.isArray(permissions.servers) ? permissions.servers : [], }; } function canAccessServer(group, serverId) { if (isAdminGroup(group)) return true; return normalizePermissions(group?.permissions).servers.includes(serverId); } function isAdminGroup(group) { return group?.id === "admin"; } function getPublicSecrets(secrets = {}) { return Object.fromEntries( Object.entries(secrets).filter(([key]) => !key.toLowerCase().startsWith("admin")) ); } function serializeServerForGroup(server, group) { const publicSecrets = getPublicSecrets(server.secrets); const startProfile = getStartProfile(server); const serialized = { id: server.id, game: server.game, address: server.address, port: server.port, heroImage: server.heroImage || null, active: Boolean(server.active), canStart: canAccessServer(group, server.id) && !server.active && Boolean(startProfile), hasSecrets: Object.keys(publicSecrets).length > 0, }; if (canAccessServer(group, server.id)) { serialized.secrets = publicSecrets; } return serialized; } export { canAccessServer, isAdminGroup, normalizePermissions, serializeGroup, serializeSession, serializeServerForGroup, };