import { IAction, IResource } from '../enforcement/interfaces'; import { ContextStore } from '../utils/context'; export interface IUrlContext { resource: IResource; action: IAction; } export interface PatternWithContext { pattern: RegExp; contextVars: string[]; } export interface ActionMatcher extends PatternWithContext { verb: string; resourceName: string; actionName: string; } export declare const NO_VERB = "DEFAULT"; export declare function extractPatternAndContext(path: string): PatternWithContext; export declare class ActionDefinition { name: string; title?: string; description?: string; path?: string; attributes: Record; private _resourceId?; private _resourceName; constructor(name: string, title?: string, description?: string, path?: string, attributes?: Record, resourceId?: string); get resourceId(): string | undefined; set resourceId(id: string | undefined); get resourceName(): string; set resourceName(name: string); get verb(): string; dict(): Record; repr(): string; } export declare class ResourceDefinition { readonly name: string; readonly type: string; readonly path: string; readonly description?: string; readonly actions: ActionDefinition[]; readonly attributes: Record; private _remoteId?; constructor(name: string, type: string, path: string, description?: string, actions?: ActionDefinition[], attributes?: Record); get remoteId(): string | undefined; set remoteId(id: string | undefined); dict(): Record; repr(): string; } /** * TODO: remove this class completely. */ export default class ResourceSchemaBuilder { name: string; path: string; definition?: ResourceDefinition; context: Record; definitionPath?: string; constructor(name: string, path: string, definition?: ResourceDefinition, context?: Record); build(): IResource; } export interface IResourceRegistry { getUrlContext(path: string, verb: string): IUrlContext | undefined; } export declare class ResourceRegistry { private resources; private alreadySynced; private processedPaths; private actionMatchers; contextStore: ContextStore; get resourceList(): ResourceDefinition[]; addResource(resource: ResourceDefinition): void; addActionToResource(resourceName: string, action: ActionDefinition): ActionDefinition | undefined; get paths(): string[]; static actionKey(action: ActionDefinition): string; /** * parses the action URI (path) and http verb into a matcher regex with context vars (named params) */ private processActionPath; isSynced(obj: ResourceDefinition | ActionDefinition): boolean; markAsSynced(obj: ResourceDefinition | ActionDefinition, remoteId: string): void; getUrlContext(path: string, verb?: string): IUrlContext | undefined; getMethods(): IResourceRegistry; }