import { AnyClass, AnyObject } from '@casl/ability/dist/types/types'; import { AuthorizableRequest } from './request.interface'; import { AuthorizableUser } from './authorizable-user.interface'; export interface SubjectBeforeFilterHook> { run: (request: Request) => Promise; } export type SubjectBeforeFilterTuple = [ AnyClass, (service: InstanceType, request: Request) => Promise ]; export interface UserBeforeFilterHook = AuthorizableUser, RequestUser = User> { run: (user: RequestUser) => Promise; } export type UserBeforeFilterTuple = AuthorizableUser, RequestUser = User> = [AnyClass, (service: InstanceType, user: RequestUser) => Promise];