import { AxiosInstance } from 'axios';
import { PaginatedResponse, PaginationParams } from './instances';
export interface ObjectStorageCluster {
    id: string;
    domain: string;
    region: string;
    status: string;
    static_site_enabled: boolean;
}
export interface ObjectStorageBucket {
    cluster: string;
    created: string;
    label: string;
    hostname: string;
    objects: number;
    size: number;
    region: string;
    cors_enabled: boolean;
    acl: 'private' | 'public-read' | 'authenticated-read' | 'public-read-write' | 'custom';
}
export interface ObjectStorageKey {
    id: number;
    label: string;
    access_key: string;
    secret_key: string;
    limited: boolean;
    bucket_access: BucketAccess[];
    created: string;
}
export interface BucketAccess {
    cluster: string;
    bucket_name: string;
    permissions: 'read_only' | 'read_write';
}
export interface DefaultBucketAccess {
    cluster: string;
    bucket_name: string;
    region: string;
    cors_enabled: boolean;
    acl: 'private' | 'public-read' | 'authenticated-read' | 'public-read-write' | 'custom';
}
export interface ObjectStorageObject {
    name: string;
    etag: string;
    last_modified: string;
    owner: string;
    size: number;
    url: string;
}
export interface BucketCertificate {
    certificate: string;
    expiry: string;
}
export interface CreateBucketRequest {
    label: string;
    cluster: string;
    endpoint_type?: 'E0' | 'E1' | 'E2' | 'E3';
    acl?: 'private' | 'public-read' | 'authenticated-read' | 'public-read-write' | 'custom';
    cors_enabled?: boolean;
}
export interface CreateObjectStorageKeyRequest {
    label: string;
    bucket_access?: BucketAccess[];
}
export interface UpdateObjectStorageKeyRequest {
    label?: string;
    bucket_access?: BucketAccess[];
}
export interface UpdateBucketAccessRequest {
    acl?: 'private' | 'public-read' | 'authenticated-read' | 'public-read-write' | 'custom';
    cors_enabled?: boolean;
}
export interface UploadCertificateRequest {
    certificate: string;
    private_key: string;
}
export interface ObjectACLRequest {
    acl: 'private' | 'public-read' | 'authenticated-read' | 'public-read-write' | 'custom';
}
export interface ObjectURLRequest {
    name: string;
    method?: 'GET' | 'PUT' | 'POST' | 'DELETE';
    expires_in?: number;
    content_type?: string;
}
export interface ObjectURLResponse {
    url: string;
}
export interface TransferStats {
    used: number;
    billable: number;
    quota: number;
    regions: {
        region: string;
        used: number;
        billable: number;
        quota: number;
    }[];
}
export interface ObjectStorageType {
    id: string;
    label: string;
    storage_price: number;
    transfer_price: number;
}
export interface ObjectStorageClient {
    getClusters: () => Promise<ObjectStorageCluster[]>;
    getEndpoints: (params?: PaginationParams) => Promise<PaginatedResponse<{
        region: string;
        endpoint_type: 'E0' | 'E1' | 'E2' | 'E3';
        s3_endpoint: string | null;
    }>>;
    getBuckets: (params?: PaginationParams) => Promise<PaginatedResponse<ObjectStorageBucket>>;
    getBucket: (cluster: string, label: string) => Promise<ObjectStorageBucket>;
    createBucket: (data: CreateBucketRequest) => Promise<ObjectStorageBucket>;
    deleteBucket: (cluster: string, label: string) => Promise<void>;
    getBucketAccess: (cluster: string, label: string) => Promise<{
        acl: string;
        cors_enabled: boolean;
    }>;
    updateBucketAccess: (cluster: string, label: string, data: UpdateBucketAccessRequest) => Promise<{
        acl: string;
        cors_enabled: boolean;
    }>;
    getObjects: (cluster: string, bucket: string, params?: PaginationParams) => Promise<PaginatedResponse<ObjectStorageObject>>;
    updateObjectACL: (cluster: string, bucket: string, name: string, data: ObjectACLRequest) => Promise<void>;
    getObjectURL: (cluster: string, bucket: string, data: ObjectURLRequest) => Promise<ObjectURLResponse>;
    getBucketCertificate: (cluster: string, bucket: string) => Promise<BucketCertificate>;
    uploadBucketCertificate: (cluster: string, bucket: string, data: UploadCertificateRequest) => Promise<BucketCertificate>;
    deleteBucketCertificate: (cluster: string, bucket: string) => Promise<void>;
    getKeys: (params?: PaginationParams) => Promise<PaginatedResponse<ObjectStorageKey>>;
    getKey: (id: number) => Promise<ObjectStorageKey>;
    createKey: (data: CreateObjectStorageKeyRequest) => Promise<ObjectStorageKey>;
    updateKey: (id: number, data: UpdateObjectStorageKeyRequest) => Promise<ObjectStorageKey>;
    deleteKey: (id: number) => Promise<void>;
    getDefaultBucketAccess: () => Promise<DefaultBucketAccess>;
    updateDefaultBucketAccess: (data: UpdateBucketAccessRequest) => Promise<DefaultBucketAccess>;
    getTransferStats: () => Promise<TransferStats>;
    getTypes: () => Promise<ObjectStorageType[]>;
    cancelObjectStorage: () => Promise<void>;
}
export declare function createObjectStorageClient(axios: AxiosInstance): ObjectStorageClient;
