import type { Constructor } from '../utils/mixins';
import { UserDTO } from '../../models/UserDTO';
import { CreditsDTO } from '../../models/CreditsDTO';
import { HealthCheck } from '../../models/HealthCheck';
import { SecretDTO } from '../../models/Secret';
import type { CreateSecretRequest, UpdateSecretRequest } from '../../models/Secret';
import { DatasourceDTO } from '../../models/Datasource';
import type { CreateDatasourceRequest, UpdateDatasourceRequest } from '../../models/Datasource';
/** IAM mixin providing authentication and user management. */
export declare function IAMMixin<TBase extends Constructor>(Base: TBase): {
    new (...args: any[]): {
        currentUserCache?: UserDTO;
        /**
         * Get the current user's profile information.
         * @returns User model instance
         */
        whoami(): Promise<UserDTO>;
        /**
         * Authenticate the user with a token.
         * @param token - Authentication token
         * @returns User object on successful login
         * @throws Error if token is invalid
         */
        login(token: string): Promise<UserDTO>;
        /** Log out the current user. */
        logout(): Promise<void>;
        /**
         * Get the current user's available credits and usage information.
         * @returns Credits model instance
         */
        getCredits(): Promise<CreditsDTO>;
        /**
         * Calculate the maximum runtime duration in minutes based on available credits and burning rate.
         * @param availableCredits - The amount of credits available
         * @param burningRate - The burning rate per second for the environment
         * @returns Maximum runtime duration in minutes
         */
        calculateMaxRuntimeMinutes(availableCredits: number, burningRate: number): number;
        /**
         * Calculate the credits required for a given runtime duration.
         * @param minutes - Runtime duration in minutes
         * @param burningRate - The burning rate per second for the environment
         * @returns Credits required (rounded up to nearest integer)
         */
        calculateCreditsRequired(minutes: number, burningRate: number): number;
        /**
         * Calculate the burning rate per minute from the per-second rate.
         * @param burningRatePerSecond - The burning rate per second
         * @returns Burning rate per minute
         */
        calculateBurningRatePerMinute(burningRatePerSecond: number): number;
        /**
         * Check the health status of the IAM service.
         * @returns Health check model instance
         */
        checkIAMHealth(): Promise<HealthCheck>;
        /**
         * Create a new secret.
         * @param data - Secret configuration
         * @returns Created secret instance
         */
        createSecret(data: CreateSecretRequest): Promise<SecretDTO>;
        /**
         * List all secrets.
         * @returns Array of secret instances
         */
        listSecrets(): Promise<SecretDTO[]>;
        /**
         * Get a specific secret by ID.
         * @param secretId - Secret unique identifier
         * @returns Secret instance
         */
        getSecret(secretId: string): Promise<SecretDTO>;
        /**
         * Update a secret.
         * @param secretId - Secret unique identifier
         * @param updates - Fields to update
         * @returns Updated secret instance
         */
        updateSecret(secretId: string, updates: UpdateSecretRequest): Promise<SecretDTO>;
        /**
         * Delete a secret.
         * @param secretId - Secret unique identifier
         */
        deleteSecret(secretId: string): Promise<void>;
        /**
         * Create a new datasource.
         * @param data - Datasource configuration
         * @returns Created datasource instance
         */
        createDatasource(data: CreateDatasourceRequest): Promise<DatasourceDTO>;
        /**
         * List all datasources.
         * @returns Array of datasource instances
         */
        listDatasources(): Promise<DatasourceDTO[]>;
        /**
         * Get a specific datasource by ID.
         * @param datasourceId - Datasource unique identifier
         * @returns Datasource instance
         */
        getDatasource(datasourceId: string): Promise<DatasourceDTO>;
        /**
         * Update a datasource.
         * @param datasourceId - Datasource unique identifier
         * @param updates - Fields to update
         * @returns Updated datasource instance
         */
        updateDatasource(datasourceId: string, updates: UpdateDatasourceRequest): Promise<DatasourceDTO>;
        /**
         * Delete a datasource.
         * @param datasourceId - Datasource unique identifier
         */
        deleteDatasource(datasourceId: string): Promise<void>;
    };
} & TBase;
