export type Microseconds = number; export type CollectionType = | "album" | "folder" | "favorites" | "uncategorized" | "unknown"; export interface Collection { id: number; ownerID: number; key: Uint8Array; name: string; type: CollectionType; updationTime: Microseconds; isShared: boolean; magicMetadata?: Record; pubMagicMetadata?: Record; sharedMagicMetadata?: Record; } export type FileType = "image" | "video" | "livePhoto" | "unknown"; export interface FileMetadata { title: string; fileType: FileType; creationTime: Microseconds; modificationTime: Microseconds; latitude?: number; longitude?: number; hash?: string; } export interface FileBlob { decryptionHeader: string; size?: number; } export interface EnteFile { id: number; collectionID: number; ownerID: number; key: Uint8Array; metadata: FileMetadata; magicMetadata?: Record; pubMagicMetadata?: Record; file: FileBlob; thumbnail: FileBlob; updationTime: Microseconds; } // The key material a logged-in client holds, everything needed to decrypt // any collection: the master key (secretbox for owned collection keys) and // the X25519 keypair (sealed box for collection keys shared with us). export interface KeyMaterial { masterKey: Uint8Array; publicKey: Uint8Array; secretKey: Uint8Array; } // Raw shapes as they arrive from the Ente API, before decryption. export interface RawCollection { id: number; owner: { id: number }; encryptedKey: string; // Absent for collections shared with us: their encryptedKey is a // sealed box to our public key, which embeds an ephemeral public key // instead of using a nonce. keyDecryptionNonce?: string; encryptedName?: string; nameDecryptionNonce?: string; type: string; updationTime: number; isDeleted?: boolean; magicMetadata?: RawMagicMetadata; pubMagicMetadata?: RawMagicMetadata; sharedMagicMetadata?: RawMagicMetadata; } export interface RawMagicMetadata { version: number; count: number; data: string; header: string; } export interface RawEnteFile { id: number; collectionID: number; ownerID: number; encryptedKey: string; keyDecryptionNonce: string; metadata: { encryptedData: string; decryptionHeader: string }; magicMetadata?: RawMagicMetadata; pubMagicMetadata?: RawMagicMetadata; info?: { fileSize?: number; thumbSize?: number }; file: { decryptionHeader: string }; thumbnail: { decryptionHeader: string }; updationTime: number; isDeleted?: boolean; }