/** * A read-query event. Values are never included — only the **filter shape** * (keys + operators) so observers cannot leak PII. */ export interface OrmQueryObservation { connectionName?: string; collection: string; /** `find` | `findOne` | `count` | `aggregate` | `distinct` | … */ op: string; /** Keys + operators only, values redacted (e.g. `{ tenantId: '…', createdAt: { $gt: '…' } }`). */ filterShape: Record; durationMs: number; count?: number; at: number; } export interface QueryObserver { onQuery(observation: OrmQueryObservation): void; } export declare const registerQueryObserver: (observer: QueryObserver) => (() => void); export declare const clearQueryObservers: () => void; export declare const hasQueryObservers: () => boolean; export declare const notifyQueryObservers: (observation: OrmQueryObservation) => void; /** * Reduces a Mongo filter to its shape: object keys are preserved, operator keys * (`$gt`, `$in`, …) are preserved with redacted values, and all scalar/array * values collapse to `'…'`. Bounded in depth to avoid pathological documents. */ export declare const describeFilterShape: (filter: unknown, depth?: number) => Record; //# sourceMappingURL=query-observer.d.ts.map