import type { DbDataSource, LocationUri, StorageAction } from './squared'; import type { ExternalAsset, StreamAction } from './asset'; import type { ExecuteAction } from './db'; export interface UploadAction { cloudUrl?: string; } export interface CloudAsset extends ExternalAsset, UploadAction, StorageAction {} export interface CloudService { service: U; credential?: T; } export interface CloudDatabase extends CloudService, Omit, "credential" | "parallel" | "withCommand" | "usePool">, ExecuteAction { id?: string; } 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; tags?: unknown; website?: BucketWebsiteOptions; retentionPolicy?: W; cors?: X; lifecycle?: Y; }; recursive?: boolean; preservePath?: boolean; } export interface CloudStorageAction extends Partial, StreamAction { active?: boolean; overwrite?: boolean; chunkSize?: NumString; chunkLimit?: number; flags?: number; 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 { keyname?: string; versionId?: string; options?: U; 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 interface UploadAssetOptions { contentType?: string; ignoreProcess?: boolean; preferBuffer?: boolean; } export type UploadContent = [Bufferable, string, string?]; export type CloudSource = "atlas" | "aws" | "aws-v3" | "az" | "azure" | "gcp" | "gcloud" | "ibm" | "oci" | "minio"; export type CloudFeatures = "storage" | "database"; export type CloudFunctions = "upload" | "download";