export declare const asDatasource: (s: any) => IDatasource;
export type IDatasourceVariant = 'athena' | 'bigquery' | 'mssentinel' | 'splunk';
export type IDatasource = {
    id: string;
    variant: IDatasourceVariant;
    name: string;
    description: string;
    database: string;
    outputBucket: string;
};
export default IDatasource;
import type { DatalayerClient } from '../client';
/**
 * Datasource type matching UI and API.
 */
export type DatasourceType = 'Amazon Athena' | 'Google BigQuery' | 'Microsoft Sentinel' | 'Splunk';
/**
 * Raw datasource data from API (snake_case with suffixes).
 */
export interface DatasourceData {
    /** Unique identifier (ULID) */
    uid: string;
    /** Datasource type */
    type_s: DatasourceType;
    /** Datasource name */
    name_s: string;
    /** Datasource description */
    description_t: string;
    /** Datasource variant (athena, bigquery, mssentinel, splunk) */
    variant_s?: string;
    /** Optional: Database name (required for Amazon Athena) */
    database_s?: string;
    /** Optional: S3 output bucket (required for Amazon Athena) */
    output_bucket_s?: string;
    /** Creation timestamp */
    created_at?: string;
    /** Last update timestamp */
    updated_at?: string;
}
/**
 * Public JSON interface for Datasource (camelCase).
 */
export interface DatasourceJSON {
    /** Unique identifier */
    uid: string;
    /** Datasource type */
    type: DatasourceType;
    /** Datasource name */
    name: string;
    /** Datasource description */
    description: string;
    /** Optional: Database name */
    database?: string;
    /** Optional: S3 output bucket */
    outputBucket?: string;
    /** Creation timestamp */
    createdAt?: Date;
    /** Last update timestamp */
    updatedAt?: Date;
}
/**
 * Request data for creating a new datasource.
 */
export interface CreateDatasourceRequest {
    /** Datasource type */
    type: DatasourceType;
    /** Datasource name (unique identifier) */
    name: string;
    /** Human-readable description */
    description?: string;
    /** Optional: Database name (required for Amazon Athena) */
    database?: string;
    /** Optional: S3 output bucket (required for Amazon Athena) */
    output_bucket?: string;
}
/**
 * Request data for updating a datasource.
 */
export interface UpdateDatasourceRequest {
    /** Optional: update type */
    type?: DatasourceType;
    /** Optional: update name */
    name?: string;
    /** Optional: update description */
    description?: string;
    /** Optional: update database */
    database?: string;
    /** Optional: update output bucket */
    output_bucket?: string;
}
/**
 * Response from creating a datasource.
 */
export interface CreateDatasourceResponse {
    success: boolean;
    message: string;
    datasource: DatasourceData;
}
/**
 * Response from getting a datasource.
 */
export interface GetDatasourceResponse {
    success: boolean;
    message: string;
    datasource: DatasourceData;
}
/**
 * Response from listing datasources.
 */
export interface ListDatasourcesResponse {
    success: boolean;
    message: string;
    datasources: DatasourceData[];
}
/**
 * Response from updating a datasource.
 */
export interface UpdateDatasourceResponse {
    success: boolean;
    message: string;
    datasource: DatasourceData;
}
/**
 * Datasource domain model for the Datalayer Client.
 * Provides state management and operations for datasources.
 *
 * @example
 * ```typescript
 * const datasource = await client.createDatasource({
 *   type: 'Amazon Athena',
 *   name: 'my-athena-datasource',
 *   description: 'Production Athena datasource',
 *   database: 'my_database',
 *   output_bucket: 's3://my-bucket/output/'
 * });
 *
 * await datasource.update({ description: 'Updated description' });
 * await datasource.delete();
 * ```
 */
export declare class DatasourceDTO {
    /** @internal */
    _data: DatasourceData;
    private _client;
    private _deleted;
    /**
     * Create a Datasource instance.
     * @param data - Datasource data from API
     * @param client - Client instance
     */
    constructor(data: DatasourceData, client: DatalayerClient);
    private _checkDeleted;
    get uid(): string;
    get type(): DatasourceType;
    get variant(): string | undefined;
    get name(): string;
    get description(): string;
    get database(): string | undefined;
    get outputBucket(): string | undefined;
    get createdAt(): Date | undefined;
    get updatedAt(): Date | undefined;
    /**
     * Update this datasource.
     * @param updates - Fields to update
     * @returns Updated Datasource instance
     */
    update(updates: UpdateDatasourceRequest): Promise<DatasourceDTO>;
    /**
     * Delete this datasource permanently.
     */
    delete(): Promise<void>;
    /**
     * Get datasource data in camelCase format.
     */
    toJSON(): DatasourceJSON;
    /**
     * Get raw datasource data exactly as received from API.
     */
    rawData(): DatasourceData;
    toString(): string;
}
