import type { NActionDef } from '@neon.id/types'; import type { TRuleInstance } from '../rule'; import type { TPermitPayload, TPermitResult } from '../types'; export interface TAbilityCanOptions { model?: string; isDebug?: boolean; } export interface TAbilityDefinition { rules: TRule[]; payload?: TPermitPayload; } export interface TAbilityInstance { rules: Set; payload: TPermitPayload | undefined; isHydrated: boolean; clone(): TAbilityInstance; add(rule: TRuleInstance | TRuleInstance[]): void; hydrate(payload: TPermitPayload): void; can(action: NActionDef, data?: Record, options?: TAbilityCanOptions): TPermitResult; }