import { A, useNavigate } from '@solidjs/router'; import { createResource, createSignal, Show } from 'solid-js'; import AdminShell from '~/components/AdminShell'; const API = '/api/gateway'; type ExternalRole = { id: string; roleKey: string; displayName: string; vertical: string; enabledModules: string[]; onboardingSchemaId: string; isActive: boolean; }; async function loadExternalRoles(): Promise { try { const res = await fetch(`${API}/api/admin/roles?audience=EXTERNAL`); if (!res.ok) throw new Error('Failed to load'); const data = await res.json(); const rows = Array.isArray(data) ? data : (data.roles || []); return rows.map((r: any) => ({ id: r.id, roleKey: r.key || r.role_key || r.roleKey || '', displayName: r.name || r.displayName || r.display_name || r.key || '', vertical: r.config_json?.vertical || r.vertical || '', enabledModules: r.config_json?.enabledModules || r.enabled_modules || [], onboardingSchemaId: r.config_json?.onboardingSchemaId || r.onboarding_schema_id || '', isActive: r.is_active !== false, })); } catch { return []; } } export default function RuntimeRolesPage() { const navigate = useNavigate(); const [roles, { refetch }] = createResource(loadExternalRoles); const [deleting, setDeleting] = createSignal(''); const [deleteError, setDeleteError] = createSignal(''); const handleDelete = async (id: string, name: string) => { if (!confirm(`Delete external role "${name}"?`)) return; try { setDeleting(id); const res = await fetch(`${API}/api/admin/roles/${id}`, { method: 'DELETE' }); if (!res.ok) throw new Error('Failed to delete'); refetch(); } catch (err: any) { setDeleteError(err.message || 'Failed to delete'); } finally { setDeleting(''); } }; return (

External Role Management

Manage canonical external runtime roles, enabled modules, onboarding assignment, and approval gates from one place.

Create External Role
{deleteError()}

Published External Roles

Only canonical external runtime roles are shown here.

{roles()?.length || 0} roles
0}> {roles()!.map((role) => ( ))}
Role Type Modules Schema Status Actions
Loading external roles...
Failed to load external roles. Is the backend running?
No external roles configured yet.

{role.displayName}

{role.roleKey}

{role.vertical || '—'} {role.enabledModules.length} {role.onboardingSchemaId || '—'} {role.isActive ? 'Active' : 'Inactive'}
Edit
); }