import { default as LegacyFormData } from 'form-data';

export type StorageErrorPayload = {
    error: string;
    status: number;
    message: string;
};
export interface StorageActionErrorState {
    /**
     * @return `true` if an error occurred
     * @depreacted use `!isSuccess` or `!!error` instead
     * */
    isError: boolean;
    /** Provides details about the error */
    error: StorageErrorPayload | null;
}
export interface FileUploadConfig {
    accessToken?: string;
    url: string;
    adminSecret?: string;
}
export interface StorageHeadersParam {
    headers?: Record<string, string>;
}
export interface StorageUploadFileParams extends StorageHeadersParam {
    file: File;
    id?: string;
    name?: string;
    bucketId?: string;
}
export interface StorageUploadFormDataParams extends StorageHeadersParam {
    formData: FormData | LegacyFormData;
    bucketId?: string;
}
export type StorageUploadParams = StorageUploadFileParams | StorageUploadFormDataParams;
export type StorageUploadFileResponse = {
    fileMetadata: FileResponse;
    error: null;
} | {
    fileMetadata: null;
    error: StorageErrorPayload;
};
export type StorageUploadFormDataResponse = {
    fileMetadata: {
        processedFiles: FileResponse[];
    };
    error: null;
} | {
    fileMetadata: null;
    error: StorageErrorPayload;
};
export type StorageUploadResponse = StorageUploadFileResponse | StorageUploadFormDataResponse;
export interface StorageDownloadFileParams extends StorageImageTransformationParams, StorageHeadersParam {
    fileId: string;
}
export type StorageDownloadFileResponse = {
    file: Blob;
    error: null;
} | {
    file: null;
    error: Error;
};
export interface StorageImageTransformationParams {
    /** Image width, in pixels */
    width?: number;
    /** Image height, in pixels */
    height?: number;
    /** Image quality, between 1 and 100, 100 being the best quality */
    quality?: number;
    /** Image blur, between 0 and 100 */
    blur?: number;
}
export interface StorageGetUrlParams extends StorageImageTransformationParams {
    fileId: string;
}
export interface StorageGetPresignedUrlParams extends StorageImageTransformationParams, StorageHeadersParam {
    fileId: string;
}
export type StorageGetPresignedUrlResponse = {
    presignedUrl: {
        url: string;
        expiration: number;
    };
    error: null;
} | {
    presignedUrl: null;
    error: Error;
};
export interface StorageDeleteParams {
    fileId: string;
}
export interface StorageDeleteResponse {
    error: Error | null;
}
export interface FileResponse {
    id: string;
    name: string;
    size: number;
    mimeType: string;
    etag: string;
    createdAt: string;
    bucketId: string;
    isUploaded: true;
    updatedAt: string;
    uploadedByUserId: string;
}
export interface ApiGetPresignedUrlParams extends StorageHeadersParam {
    fileId: string;
}
export type ApiGetPresignedUrlResponse = {
    presignedUrl: {
        url: string;
        expiration: number;
    };
    error: null;
} | {
    presignedUrl: null;
    error: Error;
};
export interface ApiDeleteParams extends StorageHeadersParam {
    fileId: string;
}
export interface ApiDeleteResponse {
    error: Error | null;
}
export type UploadHeaders = HeadersInit & {
    'x-nhost-bucket-id'?: string;
    'x-nhost-file-id'?: string;
    'x-nhost-file-name'?: string;
};
//# sourceMappingURL=types.d.ts.map