import { User } from "../../types"; import { DetailedAccessControlRule } from "../../types/auth"; export type ArkosPolicyRule = string[] | DetailedAccessControlRule | "*"; export type PolicyAuthEntry = { readonly resource: TResource; readonly action: TAction; readonly rule: ArkosPolicyRule; }; export type PolicyChecker = (user?: User) => Promise; type CanKey = `can${Capitalize}`; export type PolicyWithActions = IArkosPolicy & { [K in TActions]: PolicyAuthEntry; } & { [K in CanKey]: PolicyChecker; }; export interface IArkosPolicy { readonly __type: "ArkosPolicy"; readonly resource: TResource; rule(action: TAction, config?: ArkosPolicyRule): PolicyWithActions; } export {};