import { DbContext } from "@webiny/handler-db/types.js"; import { Context as BaseContext } from "@webiny/handler/types.js"; import { WcpContext } from "../features/wcp/WcpContext/index.js"; export type TenantSettings = Record; export type TenantStatus = "enabled" | "disabled"; export interface Tenant { id: string; name: string; description: string; status: TenantStatus; isInstalled: boolean; settings: TenantSettings; tags: string[]; parent: string | null; createdOn: string; savedOn: string; } export interface CreateTenantInput { id?: string; name: string; description: string; tags: string[]; settings?: TenantSettings; parent: string; } export interface ListTenantsParams { parent?: string; } export interface TenancyStorageOperations { getTenantsByIds(ids: readonly string[]): Promise; listTenants(params?: ListTenantsParams): Promise; createTenant(data: Tenant): Promise; updateTenant(data: Tenant): Promise; deleteTenant(id: string): Promise; } export interface TenancyContext extends BaseContext, DbContext, WcpContext.Interface { tenancy: Tenancy; } export interface Tenancy { getCurrentTenant(): Tenant; setCurrentTenant(tenant: Tenant): void; getRootTenant(): Promise; getTenantById(id: string): Promise; listTenants(params?: ListTenantsParams): Promise; createTenant(data: CreateTenantInput): Promise; withRootTenant(cb: () => T): Promise; withEachTenant(tenants: Tenant[], cb: (tenant: Tenant) => Promise): Promise; withTenant(tenant: Tenant, cb: (tenant: Tenant) => Promise): Promise; }