export interface ScopeFilter { assignee?: unknown; team?: unknown; } export interface ScopeTerm { requested: string; /** Every id a record may carry to match this filter. */ match: string[]; } export interface ResolvedScope { assignee?: ScopeTerm; team?: ScopeTerm; /** True when the roster answered and aliases were applied. */ expanded: boolean; /** Present whenever the result may be short, and why. */ note?: string; } export interface RosterRow { id: string; kind: string; canonical_id: string | null; aliases: string[] | null; } export type RosterResolver = (ids: string[]) => Promise; /** Test seam. */ export declare function _setRosterResolver(fn: RosterResolver | null): void; /** * Resolve a scope filter. Returns null when no filter was given, so an * unscoped call keeps exactly its current behaviour. */ export declare function resolveScope(f: ScopeFilter): Promise; /** Does a record fall inside the scope? Both terms must hold when both are set. */ export declare function inScope(record: { assignee?: string; team?: string; }, scope: ResolvedScope): boolean; //# sourceMappingURL=roster.d.ts.map