### `lib/background-uploader` 模块概要

该模块负责将用户设备中的媒体文件（图片和视频）上传到服务器，并支持后台处理。

**核心功能：**

*   **媒体选择：** 从设备的媒体库中获取指定日期范围内的照片和视频（见 `media.ts`），同时获取相关的元数据，如 EXIF 和位置信息。
*   **文件处理：**
    *   处理 `HEIC` 格式图片转为 `JPEG` 格式（见 `fileProcessor.ts`）。
    *   将图片压缩到标准的宽高和质量（见 `fileProcessor.ts`）。
    *   对于视频，提取首帧、压缩后作为缩略图上传（见 `fileProcessor.ts`）。
*   **API 交互：**
    *   与后端服务器通信，获取用于上传文件的安全临时 URL（见 `api.ts`）。
    *   上传完成后与后端确认（见 `api.ts`）。
    *   文件及其预览/缩略图上传后，将元数据发送到另一个接口以创建“素材”记录（见 `api.ts`）。
*   **上传引擎：**
    *   主要上传逻辑位于 `index.ts`，负责整体流程的编排：检查权限、处理文件、调用 API。
    *   使用并发限制（`p-limit`），防止同时上传过多文件，提高可靠性和性能。
    *   同时处理原始高质量文件和压缩版本（或视频缩略图）的上传。
*   **后台任务：**
    *   可注册后台任务，定期（如每 15 分钟）自动上传过去 24 小时内的新媒体文件（见 `task.ts`）。
    *   即使应用不在前台，也能持续上传文件，提升无缝体验。
*   **工具与类型定义：**
    *   包含用于检查媒体库权限、获取文件扩展名和 MIME 类型的辅助函数（见 `utils.ts`）。
    *   定义了自定义的 `ExtendedAsset` 类型，包含 `exif` 数据和标准的 `MediaLibrary.Asset` 属性（见 `types.ts`）。
    *   实际上传文件使用 `XMLHttpRequest`，以支持进度追踪，并通过 Promise 封装（见 `uploader.ts`）。

简而言之，这是一个为移动应用设计的、健壮高效的后台上传系统。