import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs'; import { ValtechAuthConfig } from '../auth/types'; import * as i0 from "@angular/core"; export type PermissionScope = 'app' | 'org' | 'internal'; /** Etiqueta legible por idioma (es/en). El backend es autoritativo (ADR-024). */ export type LocalizedLabel = Record; export interface PermissionResource { resource: string; scope: PermissionScope; appId?: string; actions: string[]; /** Nombre legible del recurso (es/en), provisto por el backend. */ label?: LocalizedLabel; } export interface PermissionCatalogResponse { operationId: string; appId: string; permissions: PermissionResource[]; /** Nombre legible (es/en) por acción, transversal a los recursos. */ actionLabels?: Record; } /** * Consume el catálogo de permisos del backend (`GET /org/{orgId}/permissions-catalog`). * El backend es la fuente de verdad de qué permisos existen y de su alcance * (globales de plataforma vs. propios de una app). La respuesta incluye el * `appId` del request para que la vista distinga la app actual. * * Promovido desde `showcase` a la lib bajo el proceso de ADR-021. Usa * `VALTECH_AUTH_CONFIG.apiUrl` (como `OrgService`) en vez del `environment` de la * app — la lib no importa el environment del consumer. */ export declare class PermissionCatalogService { private config; private http; constructor(config: ValtechAuthConfig, http: HttpClient); getCatalog(orgId: string): Observable; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵprov: i0.ɵɵInjectableDeclaration; } /** Función que resuelve un permiso `resource:action` a su label legible. */ export type PermissionLabeler = (perm: string) => string; /** * Construye el resolvedor de labels de permisos a partir del catálogo del backend * (fuente única de verdad de los labels, ADR-024). Los consumers (permissions-view, * organization-view, member-detail-modal) usan esto en vez de duplicar mapas * hardcodeados `resource→key`/`action→key`. * * - Recurso → `permissions[].label[locale]`; acción → `actionLabels[action][locale]`. * - Wildcards (`*:*`, `resource:*`, `*`) usan `allLabel` (el catálogo no modela el * comodín; el consumer pasa su string i18n, p.ej. "Todos los permisos"). * - Fallback humanizado si el catálogo no trae label (evita salidas vacías como * ": Gestionar" ante un recurso/acción nuevo aún sin etiqueta en el backend). */ export declare function createPermissionLabeler(catalog: Pick, locale: string, opts?: { allLabel?: string; }): PermissionLabeler;