import { DbContext } from "@webiny/handler-db/types"; import { Topic } from "@webiny/pubsub/types"; import { WcpContext } from "@webiny/api-wcp/types"; import { Context as BaseContext } from "@webiny/handler/types"; export interface TenantDomain { fqdn: string; } export interface TenantSettings { domains: TenantDomain[]; } export interface Tenant { id: string; name: string; description: string; tags: string[]; status: string; settings: TenantSettings; parent: string | null; webinyVersion?: string; createdOn: string; savedOn: string; } export interface Tenancy { onTenantBeforeCreate: Topic; onTenantAfterCreate: Topic; onTenantBeforeUpdate: Topic; onTenantAfterUpdate: Topic; onTenantBeforeDelete: Topic; onTenantAfterDelete: Topic; onTenantAfterInstall: Topic; isMultiTenant(): boolean; getStorageOperations(): TenancyStorageOperations; getCurrentTenant(): TTenant; setCurrentTenant(tenant: Tenant): void; getVersion(): Promise; setVersion(version: string): Promise; install(): Promise; getRootTenant(): Promise; getTenantById(id: string): Promise; listTenants(params?: ListTenantsParams): Promise; createTenant(data: CreateTenantInput): Promise; updateTenant(id: string, data: Partial): Promise; deleteTenant(id: string): Promise; withRootTenant(cb: () => T): Promise; withEachTenant(tenants: TTenant[], cb: (tenant: TTenant) => Promise): Promise; withTenant(tenant: TTenant, cb: (tenant: TTenant) => Promise): Promise; } export interface TenancyContext extends BaseContext, DbContext, WcpContext { tenancy: Tenancy; } export interface CreateTenantInput { id?: string; name: string; description: string; tags: string[]; status?: string; settings?: TenantSettings; parent: string; } export interface ListTenantsParams { parent?: string; } export interface TenancyStorageOperations { getTenantsByIds(ids: readonly string[]): Promise; listTenants(params?: ListTenantsParams): Promise; createTenant(data: TTenant): Promise; updateTenant(data: TTenant): Promise; deleteTenant(id: string): Promise; getSystemData(): Promise; createSystemData(data: System): Promise; updateSystemData(data: System): Promise; } export interface System { version?: string; } export interface TenantBeforeCreateEvent { tenant: Tenant; input: CreateTenantInput & Record; } export interface TenantAfterCreateEvent { tenant: Tenant; input: CreateTenantInput & Record; } export interface TenantBeforeUpdateEvent { tenant: Tenant; inputData: Record; updateData: Partial; } export interface TenantAfterUpdateEvent { tenant: Tenant; inputData: Record; } export interface TenantBeforeDeleteEvent { tenant: Tenant; } export interface TenantAfterDeleteEvent { tenant: Tenant; }