插件

项目自带两个插件;事实上其它东西也都是插件 —— Kotlin 加载器、HTTP 后端、HLS 适配器。内核本身不认识任何协议。

官方插件

HLS VOD Backend

把 `.m3u8` 当作**要拼装的流**而不是要保存的文本文件:解析清单、选码率、分片并发(分片级重试)、AES-128 解密、字节范围。

dev.turbodl:turbo-plugin-hls:0.2.2.0

backend.hlsturbodl-protocoldev.turbodl.cap.hlsdev.turbodl.cap.m3u8

JavaScript Plugin Loader

加载用 JavaScript 写的 TurboDL 插件。每个脚本一个 QuickJS runtime 与 context、一套稳定的 `host`/`plugin` ABI,以及一套「绝不在脚本还在执行时关掉 runtime」的加载/卸载流程。

dev.turbodl:turbo-plugin-js:0.2.2.0

loader.jsturbodl-loaderdev.turbodl.cap.jsdev.turbodl.cap.quickjs

插件分类

插件在清单里声明一个分类。分类只说明它能接到哪里,不说明别的。

分类接到哪里
turbodl-backend协议后端(替换或扩展内置 HTTP 引擎)。
turbodl-protocol声明它处理哪些协议 / scheme(清单的 `protocols` 列表)。
turbodl-adapter对接外部下载器。
turbodl-parser把分享链接 / 磁力 / 口令变成下载请求。
turbodl-hook观察或改写请求与结果。
turbodl-loader加载用别的语言写的插件 —— JS 加载器就属于这一类。

写一个自己的插件

插件就是一个实现了某个接口的普通类。第三方插件通过 GitHub topic + 清单被发现 —— 没有需要注册的中心仓库。

Kotlin
class MyPlugin : Plugin {
    override val id = "parser.example"

    override fun onLoad(context: PluginContext) {
        context.registerExtension(ExtensionPoints.LINK_PARSER, LinkParser { input ->
            input.takeIf { it.startsWith("example://") }
                ?.let { listOf(DownloadRequest(url = it, destination = File("out.bin"))) }
        })
    }
}

关于安全,说清楚

本项目没有签名与验证流程,所以本站不声称有。来自本仓库的插件就是来自本仓库;来自别处的代码就是别人的代码 —— 运行时能强制的东西,就是上面那张分类表。