import { Tenant, tenantRole, User, UserData } from "@kumori/aurora-interfaces"; import { parseKeyPath } from "../utils/utils"; export const handleTenantEvent: ( entityId: string, eventData: any, userData: UserData, ) => Tenant = (entityId: string, eventData: any, userData: User) => { const organizationIds = eventData.spec.organization ? Array.isArray(eventData.spec.organization) ? eventData.spec.organization.map((org: any) => org.name).filter(Boolean) : [eventData.spec.organization.name].filter(Boolean) : []; const tenantUsers: { id: string; status: string; role: tenantRole }[] = []; if (eventData.spec.users) { Object.entries(eventData.spec.users).forEach(([userId, userRole]) => { const userStatus = eventData.status?.users?.[userId] || "unknown"; let role: tenantRole; switch (userRole as string) { case "owner": role = tenantRole.OWNER; break; case "admin": role = tenantRole.ADMIN; break; case "plain": role = tenantRole.PLAIN; break; default: role = tenantRole.PLAIN; } tenantUsers.push({ id: userId, status: userStatus, role: role, }); }); } const newTenant: Tenant = { id: entityId, name: entityId, organizationsIds: organizationIds, services: [], accounts: [], environments: [], marketplaceItems: [], resources: [], role: Object.keys(eventData.spec.users).includes(userData.id) ? eventData.spec.users[userData.id] : "", status: eventData.meta?.deleted ? "deleting" : "", users: tenantUsers, registry: [], created: eventData.meta.created, freemium: eventData.spec.primary === "playground", npmRegistry: { endpoint: "", domain: "", credentials: "", public: false, }, }; if (eventData.spec.plan) { const planParent = eventData.spec.plan.parent ? parseKeyPath(eventData.spec.plan.parent.name) : {}; newTenant.plan = { name: eventData.spec.plan.name, provider: planParent.planprovider || "", }; } const registries = eventData?.spec?.registries?.registries; if ( registries && Object.keys(registries).length > 0 && newTenant.npmRegistry ) { const tenantRegistry = Object.keys(registries)[0]; const tenantOptions = registries[tenantRegistry]?.options; if (tenantOptions?.endpoint) { newTenant.npmRegistry.endpoint = tenantOptions.endpoint; } if (tenantOptions?.credentials) { newTenant.npmRegistry.credentials = tenantOptions.credentials; } if (typeof tenantOptions?.public === "boolean") { newTenant.npmRegistry.public = tenantOptions.public; } if ( eventData?.spec?.domains && Object.keys(eventData.spec.domains).length > 0 ) { newTenant.npmRegistry.domain = Object.keys(eventData.spec.domains)[0]; } } return newTenant; }; export const handleTenantOperationSuccess: ( entityName: string, eventData: any, userData: UserData, ) => Tenant = (entityName: string, eventData: any, userData: UserData) => { const tenantUsers: { id: string; status: string; role: tenantRole; }[] = []; if (eventData.spec.users) { Object.entries(eventData.spec.users).forEach(([userId, userRole]) => { const userStatus = eventData.status?.users?.[userId] || "unknown"; let role: tenantRole; switch (userRole as string) { case "owner": role = tenantRole.OWNER; break; case "admin": role = tenantRole.ADMIN; break; case "plain": role = tenantRole.PLAIN; break; default: role = tenantRole.PLAIN; } tenantUsers.push({ id: userId, status: userStatus, role: role, }); }); } const newTenant: Tenant = { id: entityName, name: entityName, organizationsIds: [], services: [], accounts: [], environments: [], marketplaceItems: [], resources: [], role: Object.keys(eventData.spec.users).includes(userData.id) ? eventData.spec.users[userData.id] : "", status: "active", users: tenantUsers, registry: [], npmRegistry: { endpoint: "", domain: "", credentials: "", public: false, }, }; const registries = eventData?.spec?.registries?.registries; if ( registries && Object.keys(registries).length > 0 && newTenant.npmRegistry ) { const tenantRegistry = Object.keys(registries)[0]; const tenantOptions = registries[tenantRegistry]?.options; if (tenantOptions?.endpoint) { newTenant.npmRegistry.endpoint = tenantOptions.endpoint; } if (tenantOptions?.credentials) { newTenant.npmRegistry.credentials = tenantOptions.credentials; } if (typeof tenantOptions?.public === "boolean") { newTenant.npmRegistry.public = tenantOptions.public; } if ( eventData?.spec?.domains && Object.keys(eventData.spec.domains).length > 0 ) { newTenant.npmRegistry.domain = Object.keys(eventData.spec.domains)[0]; } } return newTenant; };