import { fetchWrapper } from '@KTXC/utils/helpers/fetch-wrapper'; import type { ApiResponse, Role } from '@/types'; /** * Role Manager Service * API client for role management operations */ class RoleManagerService { private baseUrl = '/user/roles'; private transactionCounter = 0; private getTransaction(): string { return `txn-${Date.now()}-${++this.transactionCounter}`; } /** * List all roles */ async listRoles(): Promise { const response = await fetchWrapper.post>( `${this.baseUrl}/v1`, { version: 1, transaction: this.getTransaction(), operation: 'role.list', data: {} }, { skipLogoutOnError: true } ); return response.data; } /** * Fetch single role */ async fetchRole(rid: string): Promise { const response = await fetchWrapper.post>( `${this.baseUrl}/v1`, { version: 1, transaction: this.getTransaction(), operation: 'role.fetch', data: { rid } } ); return response.data; } /** * Create new role */ async createRole(roleData: { label: string; description?: string; permissions?: string[]; }): Promise { const response = await fetchWrapper.post>( `${this.baseUrl}/v1`, { version: 1, transaction: this.getTransaction(), operation: 'role.create', data: roleData } ); return response.data; } /** * Update role */ async updateRole(rid: string, updates: { label?: string; description?: string; permissions?: string[]; }): Promise { const response = await fetchWrapper.post>( `${this.baseUrl}/v1`, { version: 1, transaction: this.getTransaction(), operation: 'role.update', data: { rid, ...updates } } ); return response.data; } /** * Delete role */ async deleteRole(rid: string): Promise { const response = await fetchWrapper.post>( `${this.baseUrl}/v1`, { version: 1, transaction: this.getTransaction(), operation: 'role.delete', data: { rid } } ); return response.data; } /** * Get available permissions (grouped with metadata) */ async listPermissions(): Promise { const response = await fetchWrapper.post>( `${this.baseUrl}/v1`, { version: 1, transaction: this.getTransaction(), operation: 'permissions.list', data: {} } ); return response.data; } } export const roleManagerService = new RoleManagerService();