fix(sync): let a linked desktop enable mirrored plugins it does not trust on its own (#1632)

* fix(sync): let a linked desktop enable mirrored plugins it does not trust on its own

* fix(sync): switch off an untrusted mirrored plugin when the server updates it

* fix: require local consent for mirrored plugin activation

* docs: describe consent fields on the plugin state endpoint
This commit is contained in:
ZacharyZcR authored and GitHub committed 2026-10-14 09:11:55 +08:00
1 parent 9b0af07607
commit b3b08b4ff2
17 files changed
+515 -36

No files matched your search

+22
View File
@@ -715,6 +715,28 @@ export async function planStateChange(
};
}
/** A local admin consents to the exact mirrored version before granting it access. */
export function enablePluginWithConsent(
pluginId: string,
options: { version?: string; capabilities?: string[]; userId: string },
): Promise<StateChangePlan & { state: string }> {
return serialized(async () => {
const plugin = getPluginRuntime().loader.get(pluginId);
if (!plugin)
throw new PluginManageError("Plugin not found", 404, "NOT_FOUND");
if (options.version !== plugin.manifest.version) {
throw new PluginManageError(
"The plugin version changed; review it again",
409,
"CONSENT_MISMATCH",
);
}
assertConsent(options.capabilities, plugin.manifest.capabilities);
await grantDeclared(plugin, options.userId);
return setPluginStateUnlocked(pluginId, true);
});
}
export function setPluginState(
pluginId: string,
enabled: boolean,