Files
openclaw/src/shared/gateway-method-policy.ts
2026-04-04 20:07:18 +09:00

42 lines
1.1 KiB
TypeScript

export const RESERVED_ADMIN_GATEWAY_METHOD_PREFIXES = [
"exec.approvals.",
"config.",
"wizard.",
"update.",
] as const;
export const RESERVED_ADMIN_GATEWAY_METHOD_SCOPE = "operator.admin" as const;
export function isReservedAdminGatewayMethod(method: string): boolean {
return RESERVED_ADMIN_GATEWAY_METHOD_PREFIXES.some((prefix) => method.startsWith(prefix));
}
export function resolveReservedGatewayMethodScope(
method: string,
): typeof RESERVED_ADMIN_GATEWAY_METHOD_SCOPE | undefined {
if (!isReservedAdminGatewayMethod(method)) {
return undefined;
}
return RESERVED_ADMIN_GATEWAY_METHOD_SCOPE;
}
export function normalizePluginGatewayMethodScope<TScope extends string>(
method: string,
scope: TScope | undefined,
): {
scope: TScope | typeof RESERVED_ADMIN_GATEWAY_METHOD_SCOPE | undefined;
coercedToReservedAdmin: boolean;
} {
const reservedScope = resolveReservedGatewayMethodScope(method);
if (!reservedScope || !scope || scope === reservedScope) {
return {
scope,
coercedToReservedAdmin: false,
};
}
return {
scope: reservedScope,
coercedToReservedAdmin: true,
};
}