import type { HttpMethod, Nullable } from "../utils"; export interface IPermissionProvider { createRole< R extends string = string, I extends NPermissionProvider.RoleInfo = NPermissionProvider.RoleInfo >( role: R, info: I ): Promise; getRoleRoutes< R extends string = string, RU extends NPermissionProvider.Routes = NPermissionProvider.Routes >( role: R ): Promise>; getRoleEvents< R extends string = string, EV extends NPermissionProvider.Events = NPermissionProvider.Events >( role: R ): Promise>; removeRole(role: R): Promise; clearRoleRoutes(role: R): Promise; clearRoleEvents(role: R): Promise; addRoute< RO extends string = string, RU extends NPermissionProvider.Routes = NPermissionProvider.Routes >( role: RO, routes: RU ): Promise; removeRoute< R extends string = string, RU extends NPermissionProvider.Routes = NPermissionProvider.Routes >( role: R, routes: RU ): Promise; addEvent< E extends string = string, EV extends NPermissionProvider.Events = NPermissionProvider.Events >( role: E, events: EV ): Promise; removeEvent< E extends string = string, EV extends NPermissionProvider.Events = NPermissionProvider.Events >( role: E, events: EV ): Promise; } export namespace NPermissionProvider { export type RouteStructure = { method: HttpMethod; route: R; }; export type Route = RouteStructure; export type Routes = Route[]; export type EventsStructure< T extends string = string, E extends string = string > = { type: T; event: E }; export type Event = EventsStructure; export type Events = Event[]; export type RoleInfo = { routes: Routes; events: Events; }; }