@lark-project/cli
Version:
飞书项目插件开发工具
30 lines (29 loc) • 1.71 kB
TypeScript
import type { AppType } from "../../types";
/**
* 全局只读插件注册表(`~/.lpm/plugins.json`,按域名累积)。
*
* 目的:让**只读**命令(`lpm perm list`,token-only、无需 pluginSecret)能在插件工程目录之外
* (例如开发者自己的后端代码仓里)定位到插件,而无需在那个仓里落任何 handle 目录。
*
* 安全边界(对齐"不走 workflow 不能改数据"不变量):
* - **不存 pluginSecret**。改类命令(local-config set / update / publish)要 secret,secret 只在
* 工程目录的 plugin.config.json 里 → 它们天然只能在工程目录(=走 workflow)里跑。
* - 因此本注册表只服务读类定位;读错插件无害,故无需 active 选择 / 防误写护栏。
*/
export interface PluginRegistryEntry {
pluginId: string;
/** 插件名(best-effort,可能缺省——plugin.config.json 不带 name)。 */
name?: string;
app_type?: AppType;
}
/** origin → 该站点下记录过的插件。 */
export type PluginRegistry = Record<string, PluginRegistryEntry[]>;
export declare function loadPluginRegistry(): PluginRegistry;
/** 列出某站点下记录过的插件(域名按 origin 归一)。 */
export declare function listPlugins(siteDomain: string): PluginRegistryEntry[];
/**
* 累积记录一个插件(按 origin + pluginId 去重、合并字段)。无 secret。
* 全程 best-effort——它只是定位用的便利缓存,任何失败都吞掉,绝不让主命令挂掉;
* 内容无变化时跳过写盘(getLocalPluginConfig 会频繁调用)。
*/
export declare function recordPlugin(siteDomain: string, entry: PluginRegistryEntry): void;