import { Developer, Database, Credentials } from './types';
export interface Tenant {
    id: string;
    name?: string;
}
export interface CreateTenantRequest {
    name: string;
    id?: string;
}
export interface NileAPIOptions {
    token: string | undefined;
    debug?: boolean;
    controlPlaneUrl?: string;
    dbHost?: string;
}
export interface PostgresConnection {
    host: string;
    database: string;
    user: string;
    password: string;
    port?: number;
}
export interface Workspace {
    id: string;
    slug: string;
    name: string;
    created?: string;
}
export interface CreateUserRequest {
    email: string;
    password: string;
    name?: string;
    givenName?: string;
    familyName?: string;
    picture?: string;
}
export interface User {
    id: string;
    email: string;
    name?: string;
    givenName?: string;
    familyName?: string;
    picture?: string;
    emailVerified?: string;
    created: string;
    updated: string;
    tenants?: string[];
}
export interface UpdateUserRequest {
    name?: string;
    givenName?: string;
    familyName?: string;
    picture?: string;
}
export declare class NileAPI {
    private controlPlaneClient;
    private userClient;
    private static DEFAULT_CONTROL_PLANE_URL;
    private static DEFAULT_USER_URL;
    private debug;
    private token;
    private controlPlaneUrl;
    private userUrl;
    private dbHost?;
    constructor(options: NileAPIOptions);
    private addDebugLogging;
    getDatabaseConnection(workspaceSlug: string, databaseName: string): Promise<PostgresConnection>;
    getDeveloperInfo(): Promise<Developer>;
    listDatabases(workspaceSlug: string): Promise<Database[]>;
    createDatabase(workspaceSlug: string, name: string, region: string): Promise<Database>;
    getDatabase(workspaceSlug: string, databaseName: string): Promise<Database>;
    deleteDatabase(workspaceSlug: string, databaseName: string): Promise<void>;
    listDatabaseCredentials(workspaceSlug: string, databaseName: string): Promise<Credentials[]>;
    createDatabaseCredentials(workspaceSlug: string, databaseName: string): Promise<Credentials>;
    listRegions(workspaceSlug: string): Promise<string[]>;
    listWorkspaces(): Promise<Workspace[]>;
    getWorkspace(workspaceSlug: string): Promise<Workspace>;
    getDatabaseId(workspaceSlug: string, databaseName: string): Promise<string>;
    createUser(databaseId: string, user: CreateUserRequest, options?: {
        tenantId?: string;
        newTenantName?: string;
    }): Promise<User>;
    getUserTenants(databaseId: string, userId: string): Promise<Tenant[]>;
    updateUser(databaseId: string, userId: string, updates: UpdateUserRequest): Promise<User>;
    removeUserFromTenant(databaseId: string, userId: string, tenantId: string): Promise<void>;
}
