import './assert_dev_env.js';
import type { AppSurface, AppSurfaceSpec } from '../http/surface.js';
import type { BackendCapabilities } from './cross_backend/capabilities.js';
import type { SetupTest } from './cross_backend/setup.js';
/**
 * Recursively collect all property names from a JSON Schema.
 *
 * Walks `properties`, `items`, `allOf`/`anyOf`/`oneOf`, and
 * `additionalProperties` to find every declared field name at any depth.
 */
export declare const collect_json_schema_property_names: (schema: unknown) => Set<string>;
/**
 * Assert that no output schema in the surface contains sensitive field names.
 */
export declare const assert_output_schemas_no_sensitive_fields: (surface: AppSurface, sensitive_fields?: ReadonlyArray<string>) => void;
/**
 * Assert that non-admin route output schemas don't contain admin-only fields.
 */
export declare const assert_non_admin_schemas_no_admin_fields: (surface: AppSurface, admin_only_fields?: ReadonlyArray<string>) => void;
/** Options for `describe_data_exposure_tests`. */
export interface DataExposureTestOptions {
    /** Per-test fixture-producing function (per-describe cadence). */
    setup_test: SetupTest;
    /**
     * App surface for schema-level + route-iteration checks. Constructed in
     * TS by the consumer; same shape for in-process and cross-process tests.
     */
    surface_source: AppSurfaceSpec;
    /** Backend capability declarations. */
    capabilities: BackendCapabilities;
    /** Fields that must never appear in any response. Default: `sensitive_field_blocklist`. */
    sensitive_fields?: ReadonlyArray<string>;
    /** Fields that must not appear in non-admin responses. Default: `admin_only_field_blocklist`. */
    admin_only_fields?: ReadonlyArray<string>;
    /** Routes to skip, in `'METHOD /path'` format. */
    skip_routes?: Array<string>;
}
/**
 * Composable data exposure test suite.
 *
 * Three test groups:
 * 1. Schema-level — walk JSON Schema output/error schemas for sensitive field names
 * 2. Runtime — fire real requests and check response bodies against blocklists
 * 3. Cross-privilege — admin routes return 403 for non-admin, error responses
 *    contain no sensitive fields
 */
export declare const describe_data_exposure_tests: (options: DataExposureTestOptions) => void;
//# sourceMappingURL=data_exposure.d.ts.map