export interface UserContext { userHandle: string; displayName?: string; isOwner: boolean; } export interface Helpers { requireAccess(channelId: string): void; requireRole(roleName: string): void; isImgGenVersionAppend(doc: unknown, oldDoc: unknown): boolean; } export interface AccessDescriptor { channels?: string[]; audience?: { followersOf?: string; mutualsOf?: string; }; inheritRead?: { db: string; docId: string; }; members?: Record; grant?: { users?: Record; roles?: Record; public?: string[]; }; expiry?: string | number | null; allowAnonymous?: boolean; } export type AccessFunction = (doc: unknown, oldDoc: unknown, user: UserContext | null, ctx: Helpers) => AccessDescriptor;