/** A media object as the browser sees it — host-resolved display URL, server-derived metadata. */
export interface MediaItem {
  key: string
  url: string
  size: number
  contentType?: string
  width?: number
  height?: number
  uploadedAt?: number
}

/**
 * Injected transport seam. The browser NEVER holds storage creds — every method maps to the host's
 * authenticated worker route. Same injection shape as auth-react's AuthClient / content-react's ContentClient.
 */
export interface MediaClient {
  upload(file: File, opts?: { signal?: AbortSignal; onProgress?: (fraction: number) => void }): Promise<MediaItem>
  list(opts?: { cursor?: string; limit?: number }): Promise<{ items: MediaItem[]; cursor?: string }>
  remove(key: string): Promise<void>
}
