export interface UploadedTexture { /** Content-addressed name in `data/textures/`: `{sha256}.{png|jpg|webp|gif}` (see `isTextureFile`). */ file: string; /** * The name the file was uploaded under, '' when the server knows none. A picture may be * re-encoded on the way, so this can be a `.png` name on a file stored as `.webp`. */ name: string; width: number; height: number; bytes: number; } /** A file the server holds, whether any project references it or not. */ export interface StoredTexture { file: string; name: string; /** 0 × 0 when the server could not read the header; such a file cannot become an asset. */ width: number; height: number; bytes: number; updatedAt: string; } /** * An upload is raw bytes rather than a multipart form: name, size and format are derived from the * image itself on the server, so there is nothing else to send. */ export interface TextureStore { /** * `type` only fills the Content-Type header – the server trusts the bytes, not the label – and * uploading the same picture twice yields the same file, the hash of its content. `name` is the * caption kept beside it; uploading the same bytes under a new name renames what pickers show. */ upload(bytes: Blob | ArrayBuffer, type: string, name?: string): Promise; list(): Promise; delete(file: string): Promise; }