import type { EntityDict, CheckerType } from 'oak-domain/lib/types'; import type { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain'; import { Cache } from './cache'; type EntityKey = keyof ED; export type RouteAccessRelationRule = { entity: EntityKey; actions: ReadonlyArray]['Action']>; path: string; }; export type RouteAccessOperationRule = { entity: EntityKey; action: ED[EntityKey]['Action']; data?: Record; checkerTypes?: ReadonlyArray; }; export type RouteAccessItem = { type: 'public'; } | { type: 'deny'; } | { type: 'root'; } | { type: 'login'; } | { type: 'ref'; refs: ReadonlyArray; } | { type: 'relation'; anyOf: ReadonlyArray>; } | { type: 'operation'; target: RouteAccessOperationRule; } | { type: 'anyOf'; items: ReadonlyArray>; } | { type: 'allOf'; items: ReadonlyArray>; }; export type RouteAccess = RouteAccessItem | ReadonlyArray>; export type RouteAccessResult = { type: 'pending'; } | { type: 'error'; error?: unknown; } | { type: 'allow'; } | { type: 'login'; } | { type: 'deny'; } | { type: 'contextMismatch'; } | { type: 'unchecked'; }; export interface RouteAccessTokenFeature { getTokenValue?: () => unknown; getUserId?: (allowUnloggedIn?: boolean) => string | undefined; isRoot?: () => boolean; } export interface RouteAccessConsoleFeature { getAccessState?: () => 'loading' | 'ready' | 'error'; getAccessError?: () => unknown; getContext?: () => { entity: EntityKey; entityId: string; } | undefined; checkUrlAvailable?: (url: string) => boolean | null | undefined; } export type RouteAccessFeatures = { cache?: Cache; token?: RouteAccessTokenFeature; console?: RouteAccessConsoleFeature; }; export type ResolveRouteRefAccess = (refs: ReadonlyArray, features: RouteAccessFeatures) => RouteAccessResult | undefined; export type ResolveRouteAccessOptions = { resolveRefAccess?: ResolveRouteRefAccess; consoleContextEntities?: ReadonlyArray>; }; export declare function resolveRouteAccess(access: RouteAccess | undefined, features: RouteAccessFeatures, options?: ResolveRouteAccessOptions): RouteAccessResult; export {};