import { ContextStore } from '../utils/context'; import { IResource, IAction } from "../enforcement/interfaces"; 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: string; export declare function extractPatternAndContext(path: string): PatternWithContext; export declare class ActionDefinition { name: string; title?: string | undefined; description?: string | undefined; path?: string | undefined; attributes: Record; private _resourceId?; private _resourceName; constructor(name: string, title?: string | undefined, description?: string | undefined, path?: string | undefined, 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 | undefined; readonly actions: ActionDefinition[]; readonly attributes: Record; private _remoteId?; constructor(name: string, type: string, path: string, description?: string | undefined, 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 | undefined; context: Record; definitionPath?: string; constructor(name: string, path: string, definition?: ResourceDefinition | undefined, 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; }