mirror of
https://github.com/n8n-io/n8n.git
synced 2026-05-29 15:57:00 +02:00
34 lines
1022 B
TypeScript
34 lines
1022 B
TypeScript
import { nanoid } from 'nanoid';
|
|
|
|
import type { ApiHelpers } from './api-helper';
|
|
import { TestError } from '../Types';
|
|
|
|
export class RoleApiHelper {
|
|
constructor(private api: ApiHelpers) {}
|
|
|
|
/**
|
|
* Create a custom role with unique name via REST API
|
|
* @param scopes Array of scope strings (e.g., ['project:read', 'workflow:read'])
|
|
* @param displayName Base display name for the role (will be made unique with nanoid)
|
|
* @returns The created role data including slug
|
|
*/
|
|
async createCustomRole(scopes: string[], displayName: string): Promise<{ slug: string }> {
|
|
const uniqueName = `${displayName} (${nanoid(8)})`;
|
|
const response = await this.api.request.post('/rest/roles', {
|
|
data: {
|
|
displayName: uniqueName,
|
|
description: `Custom role with scopes: ${scopes.join(', ')}`,
|
|
roleType: 'project',
|
|
scopes,
|
|
},
|
|
});
|
|
|
|
if (!response.ok()) {
|
|
throw new TestError(`Failed to create custom role: ${await response.text()}`);
|
|
}
|
|
|
|
const result = await response.json();
|
|
return result.data;
|
|
}
|
|
}
|