export interface PermissionInfo { method: string; endpoint: string; description: string; route: string; } /** * Map of permission endpoint patterns to their descriptions */ export const PERMISSION_DESCRIPTIONS: Record = { '/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 }; };