48 lines
1.2 KiB
TypeScript
48 lines
1.2 KiB
TypeScript
import type { OpenClawConfig } from "../config/config.js";
|
|
import type { PluginInstallRecord } from "../config/types.plugins.js";
|
|
import type { NpmSpecResolution } from "../infra/install-source-utils.js";
|
|
|
|
export type PluginInstallUpdate = PluginInstallRecord & { pluginId: string };
|
|
|
|
export function buildNpmResolutionInstallFields(
|
|
resolution?: NpmSpecResolution,
|
|
): Pick<
|
|
PluginInstallRecord,
|
|
"resolvedName" | "resolvedVersion" | "resolvedSpec" | "integrity" | "shasum" | "resolvedAt"
|
|
> {
|
|
return {
|
|
resolvedName: resolution?.name,
|
|
resolvedVersion: resolution?.version,
|
|
resolvedSpec: resolution?.resolvedSpec,
|
|
integrity: resolution?.integrity,
|
|
shasum: resolution?.shasum,
|
|
resolvedAt: resolution?.resolvedAt,
|
|
};
|
|
}
|
|
|
|
export function recordPluginInstall(
|
|
cfg: OpenClawConfig,
|
|
update: PluginInstallUpdate,
|
|
): OpenClawConfig {
|
|
const { pluginId, ...record } = update;
|
|
const installs = {
|
|
...cfg.plugins?.installs,
|
|
[pluginId]: {
|
|
...cfg.plugins?.installs?.[pluginId],
|
|
...record,
|
|
installedAt: record.installedAt ?? new Date().toISOString(),
|
|
},
|
|
};
|
|
|
|
return {
|
|
...cfg,
|
|
plugins: {
|
|
...cfg.plugins,
|
|
installs: {
|
|
...installs,
|
|
[pluginId]: installs[pluginId],
|
|
},
|
|
},
|
|
};
|
|
}
|