import { getSessionUser } from "@/lib/session"; import { getTranslations } from "next-intl/server"; import { redirect, notFound } from "next/navigation"; import { getTenant } from "@/lib/k8s"; import { StatusBadge } from "@/components/ui/status-badge"; import { UsageDisplay } from "@/components/dashboard/usage-display"; import { PackageList } from "@/components/packages/package-list"; import { WorkspaceEditor } from "@/components/packages/workspace-editor"; import { ChannelUsers } from "@/components/channel-users/channel-users"; const CHANNEL_PACKAGES = ["telegram", "discord", "email"]; export default async function TenantDetailPage({ params, }: { params: Promise<{ name: string; locale: string }>; }) { const user = await getSessionUser(); if (!user) redirect("/login"); const { name } = await params; const t = await getTranslations("tenantDetail"); const tenant = await getTenant(name); if (!tenant) notFound(); // Scope check if ( !user.isPlatform && tenant.metadata.labels?.["pieced.ch/zitadel-org-id"] !== user.orgId ) { notFound(); } const enabledPackages = tenant.spec.packages || []; const workspaceFiles = tenant.spec.workspaceFiles || {}; const enabledChannels = enabledPackages.filter((pkg) => CHANNEL_PACKAGES.includes(pkg) ); const channelUsers = tenant.spec.channelUsers || {}; // Admins inspecting another tenant's usage: pass teamId explicitly. // Customers viewing their own: no teamId, backend resolves from session. const usageTeamId = user.isPlatform ? tenant.status?.litellmTeamId || undefined : undefined; return (
{t("agent")}: {tenant.spec.agentName}
)}