/**
 * File-backed sandbox-abuse-report store. Mirrors
 * `src/services/feedback/local_store.ts` so the sandbox reporting pipeline
 * behaves identically to product feedback on the local transport.
 *
 * The public sandbox (sandbox.neotoma.io) is wiped weekly, so in production
 * the HTTP transport forwards reports to the agent-site Netlify pipeline for
 * durability. The local store is still used:
 *   - as a hot buffer before the forwarder runs
 *   - for integration tests
 *   - for self-hosted Neotoma installations that want a local fallback
 */
import type { SandboxReportReason, SandboxReportStatus } from "./types.js";
export interface LocalSandboxReportRecord {
    id: string;
    submitter_ip_hash: string;
    reason: SandboxReportReason;
    description: string;
    entity_id: string | null;
    url: string | null;
    reporter_contact: string | null;
    metadata: Record<string, unknown>;
    submitted_at: string;
    status: SandboxReportStatus;
    status_updated_at: string;
    resolution_notes: string | null;
    access_token_hash: string;
    redaction_applied: boolean;
    redaction_backstop_hits: string[];
    forwarded_at: string | null;
    forwarded_report_id: string | null;
    consecutive_same_status_polls: number;
}
export declare function resolveSandboxReportStorePath(dataDir?: string): string;
export declare function generateSandboxReportId(): string;
export declare function hashSandboxToken(token: string): string;
export declare function hashSubmitterIp(ip: string): string;
export declare class LocalSandboxReportStore {
    private readonly storePath;
    constructor(storePath?: string);
    getById(id: string): Promise<LocalSandboxReportRecord | null>;
    getByTokenHash(tokenHash: string): Promise<LocalSandboxReportRecord | null>;
    upsert(record: LocalSandboxReportRecord, tokenHashForIndex?: string): Promise<void>;
    listUnforwarded(limit?: number): Promise<LocalSandboxReportRecord[]>;
    listAll(): Promise<LocalSandboxReportRecord[]>;
}
//# sourceMappingURL=local_store.d.ts.map