/** * The prefilter, client side. * * A deliberate reimplementation rather than a shared package: the server's copy is the reference, * and the point of keeping the language this dumb is that any client in any language can rewrite it * in twenty lines. A shared dependency would make that claim untestable and would couple every * platform's release cycle to the server's. * * It is a volume gate, not an expressiveness mechanism. **Nothing may depend on it.** A client that * ignores prefilters and reports every event is still correct, just louder — the server evaluates * the same condition again before spending anything. * * Every condition is ANDed. No OR, no regex, no arithmetic, no code. */ export type PrefilterScalar = string | number | boolean | null; export type PrefilterCondition = PrefilterScalar | PrefilterScalar[] | { not: PrefilterScalar | PrefilterScalar[]; } | { exists: boolean; }; /** Dot-path to condition. An empty or absent prefilter matches everything. */ export type Prefilter = Record; export declare function matchesPrefilter(payload: unknown, prefilter?: Prefilter | null): boolean; /** Reads `author.bot` out of `{ author: { bot: true } }`. Missing paths read as `undefined`. */ export declare function readPath(payload: unknown, path: string): unknown;