import type { DbDataSource, LocationUri, StorageAction } from './squared'; import type { ExternalAsset, StreamAction } from './asset'; export interface UploadAction { cloudUrl?: string; } export interface CloudAsset extends ExternalAsset, UploadAction, StorageAction {} export interface CloudService { service: string; credential?: unknown; } export interface CloudDatabase extends CloudService, DbDataSource { id?: string; params?: W; } export interface CloudStorage extends CloudService { bucket?: string; admin?: CloudStorageAdmin; upload?: CloudStorageUpload; download?: CloudStorageDownload; } export interface CloudStorageAdmin extends CloudStorageACL { emptyBucket?: boolean; configBucket?: { create?: T; policy?: V; website?: BucketWebsiteOptions; retentionPolicy?: W; }; recursive?: boolean; preservePath?: boolean; } export interface CloudStorageAction extends Partial, StreamAction { active?: boolean; overwrite?: boolean; admin?: CloudStorageAdmin; } export interface CloudStorageUpload extends CloudStorageACL, CloudStorageAction { buffer?: Null; contentType?: string; metadata?: Record; tags?: Record | false; options?: T; fileGroup?: UploadContent[]; localStorage?: boolean; endpoint?: string; all?: boolean; } export interface CloudStorageACL { publicRead?: boolean | 0; acl?: T; } export interface CloudStorageDownload extends CloudStorageAction { versionId?: string; deleteObject?: T; waitStatus?: boolean; } export interface BucketWebsiteOptions { indexPage?: string; errorPage?: string; indexPath?: string; errorPath?: string; } export interface UploadData extends BucketAction { upload: CloudStorageUpload; localUri: string; buffer: Buffer; } export interface DownloadData extends BucketAction { download: CloudStorageDownload; } export interface BucketAction { bucket: string; } export type UploadContent = [BufferContent, string, string?]; export type CloudFeatures = "storage" | "database"; export type CloudFunctions = "upload" | "download";