FluxDown 插件市场 — 沙箱 JS 解析器与事件钩子
插件是什么
FluxDown 插件系统在引擎层面提供两种扩展点:
| 类型 | 做什么 | 什么时候触发 |
|---|---|---|
| Resolver(解析器) | 把网页 URL 或页面内容转换成直接下载链接 | 新建下载时粘贴的 URL 被 Resolver 识别 |
| Hook(事件钩子) | 任务生命周期事件的回调脚本 | 任务开始/完成/失败时触发 |
沙箱设计
FluxDown 插件跑在沙箱 JS 运行时里(不是浏览器 Node 或 V8,而是 FluxDown 自己的受限 JS 环境):
- 插件无法访问任意文件系统、网络(除非通过声明的受限 API)、进程。
- 每个插件必须在 manifest 里声明它要的权限(比如
network:fetch、filesystem:read_temp)。 - 安装时 FluxDown 展示权限声明,用户确认后才授权。
- 引擎用 sha256 内容哈希固定插件包——防止被篡改。
插件市场
「设置 → 扩展 → 插件 → 市场」里可以直接浏览和安装插件:
市场由开放 Git 索引维护——任何人可以开 PR 发布新插件,插件的每个版本都 trace 回 Git commit,方便审计。
典型插件
Resolver 类
- GitHub Release Resolver — 粘贴 GitHub Release 页 URL,自动解析到具体资产文件。
- 网页视频解析 — 把某些平台的视频页转换成直链(和 yt-dlp 类似,但走插件系统)。
- 网盘解析 — 某些公开分享的网盘直链转换。
Hook 类
- 下载完成通知 — 任务跑完后发 Telegram / Discord / 邮件通知。
- 自动整理 — 按文件类型自动移动到对应目录(视频 → Videos、ISO → ISOs)。
- 上传到云盘 — 下载完成后自动上传到 Nextcloud / WebDAV。
- 失败重试 — 任务失败后等几分钟自动重试(引擎默认只重试 3 次,Hook 可以加轮次)。
写自己的插件
插件是一个小的 JS 文件 + manifest。发布流程:
- 写 Resolver 或 Hook。
- 在桌面端本地测试(开发者模式)。
- 提交 PR 到插件索引仓库。
- 被合并后所有人能在市场里看到。
详细的开发指南在 FluxDown 官方 docs 里。
和受管组件的区别
插件 vs 受管组件(ffmpeg / yt-dlp 等,见 受管组件 ffmpeg-yt-dlp):
- 插件是 JS 写的、跑在沙箱里、有显式权限声明。
- 受管组件是预编译的原生二进制,FluxDown 自动下载并 jail 化调用。
- 两者配合使用——比如 Hook 插件在任务完成时调用受管 ffmpeg 做后处理。