Shyamnath's picture
Push UI dashboard and deployment files
c40c75a
export interface PermissionInfo {
method: string;
endpoint: string;
description: string;
route: string;
}
/**
* Map of permission endpoint patterns to their descriptions
*/
export const PERMISSION_DESCRIPTIONS: Record<string, string> = {
'/key/generate': 'Member can generate a virtual key for this team',
'/key/update': 'Member can update a virtual key belonging to this team',
'/key/delete': 'Member can delete a virtual key belonging to this team',
'/key/info': 'Member can get info about a virtual key belonging to this team',
'/key/regenerate': 'Member can regenerate a virtual key belonging to this team',
'/key/{key_id}/regenerate': 'Member can regenerate a virtual key belonging to this team',
'/key/list': 'Member can list virtual keys belonging to this team',
'/key/block': 'Member can block a virtual key belonging to this team',
'/key/unblock': 'Member can unblock a virtual key belonging to this team'
};
/**
* Determines the HTTP method for a given permission endpoint
*/
export const getMethodForEndpoint = (endpoint: string): string => {
if (endpoint.includes('/info') || endpoint.includes('/list')) {
return 'GET';
}
return 'POST';
};
/**
* Parses a permission string into a structured PermissionInfo object
*/
export const getPermissionInfo = (permission: string): PermissionInfo => {
const method = getMethodForEndpoint(permission);
const endpoint = permission;
// Find exact match or fallback to default description
let description = PERMISSION_DESCRIPTIONS[permission];
// If no exact match, try to find a partial match based on patterns
if (!description) {
for (const [pattern, desc] of Object.entries(PERMISSION_DESCRIPTIONS)) {
if (permission.includes(pattern)) {
description = desc;
break;
}
}
}
// Fallback if no match found
if (!description) {
description = `Access ${permission}`;
}
return {
method,
endpoint,
description,
route: permission
};
};