import { IApiBaseEntity } from '../../../interface/api-base-entity.interface';
import { IApiAuthenticationRequest } from '../../../interface/api/authentication-request.interface';
import { IApiAuthorizationAuditSink, IApiAuthorizationDecision, IApiAuthorizationPolicyRegistry, IApiAuthorizationPrincipal, IApiAuthorizationPrincipalResolver, IApiAuthorizationRequestMetadata } from '../../../interface/class/api/authorization';
import { IApiControllerAuthorizationProperties } from '../../../interface/decorator/api/controller/properties';
import { IApiRouteAuthorizationProperties } from '../../../interface/decorator/api/route';
import { TApiAuthorizationRuleTransformPayload } from '../../../type/class/api/authorization/rule/transform-payload.type';
import { ApiAuthorizationEngine } from './engine.class';
import { ApiAuthorizationHookPermissionResolver } from './hook';
import { ApiAuthorizationIamAttachmentResolver, ApiAuthorizationIamDocumentResolver, ApiAuthorizationIamEngine } from './iam';
import { EApiRouteType } from '../../../enum/decorator/api/route';
export declare class ApiAuthorizationRuntime {
    private readonly policyRegistry;
    private readonly authorizationEngine;
    private readonly hookPermissionResolver;
    private readonly iamAttachmentResolver;
    private readonly iamDocumentResolver;
    private readonly iamEngine;
    private readonly principalResolver?;
    private readonly auditSink?;
    constructor(policyRegistry: IApiAuthorizationPolicyRegistry, authorizationEngine: ApiAuthorizationEngine, hookPermissionResolver: ApiAuthorizationHookPermissionResolver, iamAttachmentResolver: ApiAuthorizationIamAttachmentResolver, iamDocumentResolver: ApiAuthorizationIamDocumentResolver, iamEngine: ApiAuthorizationIamEngine, principalResolver?: IApiAuthorizationPrincipalResolver | undefined, auditSink?: IApiAuthorizationAuditSink | undefined);
    evaluate<E extends IApiBaseEntity>(options: {
        action: string;
        authenticationRequest?: IApiAuthenticationRequest;
        authorization: IApiControllerAuthorizationProperties<E>;
        entity: new () => E;
        principal?: IApiAuthorizationPrincipal;
        requestMetadata: IApiAuthorizationRequestMetadata<E>;
        resource?: E;
        routeAuthorization?: IApiRouteAuthorizationProperties;
        routeType?: EApiRouteType;
    }): Promise<IApiAuthorizationDecision<E, TApiAuthorizationRuleTransformPayload<E>>>;
    private createImplicitDenyHookPolicy;
    private evaluateHooks;
    private evaluateIam;
    private resolveIamAction;
    private resolveMode;
    private resolvePrincipal;
}
