mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-23 10:55:31 -06:00
34 lines
892 B
TypeScript
34 lines
892 B
TypeScript
import type { ExecAsk, ExecMode, ExecSecurity } from "./exec-approvals.js";
|
|
import { resolveExecPolicyForMode } from "./exec-approvals.js";
|
|
|
|
export type ExecPolicyLayer = {
|
|
mode?: ExecMode;
|
|
security?: ExecSecurity;
|
|
ask?: ExecAsk;
|
|
};
|
|
|
|
export function applyExecPolicyLayer<TBase extends ExecPolicyLayer>(
|
|
base: TBase,
|
|
layer?: ExecPolicyLayer,
|
|
): TBase & ExecPolicyLayer {
|
|
if (!layer) {
|
|
return base;
|
|
}
|
|
if (layer.mode) {
|
|
return {
|
|
...base,
|
|
mode: layer.mode,
|
|
...resolveExecPolicyForMode(layer.mode),
|
|
} as unknown as TBase & ExecPolicyLayer;
|
|
}
|
|
if (layer.security !== undefined || layer.ask !== undefined) {
|
|
const { mode: _mode, ...baseWithoutMode } = base;
|
|
return {
|
|
...baseWithoutMode,
|
|
security: layer.security ?? base.security,
|
|
ask: layer.ask ?? base.ask,
|
|
} as unknown as TBase & ExecPolicyLayer;
|
|
}
|
|
return base;
|
|
}
|