// Arcadia tenants API helpers. // // Hand-rolled because /api/v1/admin/tenants isn't covered by arcadia's // OpenAPI spec (controller hasn't been wired into OpenApiSpex yet — same // "ok"-placeholder issue as some other admin endpoints). When the spec // gains coverage, switch to `arcadia.typed.GET("/api/v1/admin/tenants", ...)` // and drop these manual types. import type { ArcadiaClient } from "@crema/arcadia-client" export type TenantStatus = "active" | "suspended" | "deactivated" | string export interface TenantPlan { name: string limits: Record } export interface TenantBranding { logo_url: string | null favicon_url: string | null primary_color: string | null secondary_color: string | null accent_color: string | null custom_css: string | null settings: Record } export interface TenantSettings { timezone?: string currency?: string [key: string]: unknown } export interface TenantLocalization { locale: string timezone: string currency: string settings: Record } export interface Tenant { id: string slug: string name: string status: TenantStatus plan: TenantPlan branding: TenantBranding settings: TenantSettings localization: TenantLocalization email_settings: Record notification_settings: Record metadata: Record inserted_at: string updated_at: string } export interface TenantListParams { q?: string status?: TenantStatus page?: number per_page?: number } export async function listTenants( arcadia: ArcadiaClient, params?: TenantListParams, ): Promise { const queryParams: Record | undefined = params ? { q: params.q, status: params.status, page: params.page, per_page: params.per_page } : undefined const res = await arcadia.GET<{ data: Tenant[] }>("/api/v1/admin/tenants", { params: queryParams }) return res.data } export async function getTenant(arcadia: ArcadiaClient, id: string): Promise { const res = await arcadia.GET<{ data: Tenant }>(`/api/v1/admin/tenants/${id}`) return res.data } export async function suspendTenant(arcadia: ArcadiaClient, id: string): Promise { const res = await arcadia.POST<{ data: Tenant }>(`/api/v1/admin/tenants/${id}/suspend`) return res.data } export async function activateTenant(arcadia: ArcadiaClient, id: string): Promise { const res = await arcadia.POST<{ data: Tenant }>(`/api/v1/admin/tenants/${id}/activate`) return res.data } export async function deactivateTenant(arcadia: ArcadiaClient, id: string): Promise { const res = await arcadia.POST<{ data: Tenant }>(`/api/v1/admin/tenants/${id}/deactivate`) return res.data }