跳转到内容

插件开发入门

LANrurugi 的插件是单个 .ts 文件,放在 plugins/<类别>/ 下,或者通过设置页面/POST /api/plugins/upload 上传(会上传到 plugins/custom/<类别>/)。它在独立的 Deno 子进程里运行,只带插件自己声明的权限 (--allow-net / --allow-read 等),拿不到宿主进程的任何东西。

一个插件文件必须导出恰好两样东西:

  1. pluginInfo()——同步、无副作用,只返回插件自己的元数据:命名空间、名称、参数、声明的权限。 宿主会用一个零权限的一次性子进程调用它,就为了读元数据,然后再按声明去申请真正的权限。
  2. 对应类型的执行函数——execMetadata(元数据抓取)、execLogin(登录)、execDownload(下载)。

具体签名、类型与每个字段的含义,见 SDK 参考:它由 deno doc 直接从运行时会加载的那份 TypeScript 源码生成,所以不会和实际行为脱节。

插件必须预先声明它需要什么,宿主才会授予什么。这是为了让一个行为异常或者恶意的插件没法拖垮宿主进程, 也没法读它不该读的文件。声明之外的任何网络/文件访问都会失败。

  • 设置页面的插件列表会显示每个插件的 pluginInfo() 结果,包括它声明的权限。
  • 插件调用失败时,宿主会把子进程的 stderr 一并记录;日志页面按类别可查。
  • HTTP 请求走宿主中继,并按需最小化——插件发出的请求由宿主代理,因此插件不需要 --allow-net 之外的东西, 也能被统一限流与记录。
  • SDK 参考——所有导出类型与函数,含文档注释。
  • API 参考——/api/plugins* 下的端点(列表、上传、执行、导出)。