import { Querier } from '@platform-modules/db';
import * as drizzle_orm_pg_core from 'drizzle-orm/pg-core';

type AuditEvent = {
    actorId?: string | null;
    actorType?: string | null;
    actorLabel?: string | null;
    action: string;
    entityType: string;
    entityId: string;
    metadata?: Record<string, unknown> | null;
    ip?: string | null;
    tenantId?: string | null;
};
type LogAuditResult = {
    logged: boolean;
    id?: string;
    error?: unknown;
};
type AuditRecord = {
    id: string;
    actorId: string | null;
    actorType: string | null;
    actorLabel: string | null;
    action: string;
    entityType: string;
    entityId: string;
    metadata: Record<string, unknown> | null;
    ip: string | null;
    tenantId: string | null;
    createdAt: Date;
};
type ListAuditFilter = {
    tenant?: string;
    actor?: string;
    entityType?: string;
    entityId?: string;
    action?: string;
    from?: Date;
    to?: Date;
    q?: string;
    limit?: number;
    cursor?: string;
};
type ListAuditResult = {
    items: AuditRecord[];
    nextCursor: string | null;
};
type AuditCursor = {
    createdAt: string;
    id: string;
};

declare function encodeCursor(row: {
    createdAt: Date;
    id: string;
}): string;
declare function decodeCursor(cursor: string): AuditCursor;

declare class InvalidCursorError extends Error {
    readonly name = "InvalidCursorError";
    constructor();
}

declare const auditLog: drizzle_orm_pg_core.PgTableWithColumns<{
    name: "audit_log";
    schema: undefined;
    columns: {
        id: drizzle_orm_pg_core.PgColumn<{
            name: "id";
            tableName: "audit_log";
            dataType: "string";
            columnType: "PgUUID";
            data: string;
            driverParam: string;
            notNull: true;
            hasDefault: true;
            isPrimaryKey: true;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: undefined;
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        actorId: drizzle_orm_pg_core.PgColumn<{
            name: "actor_id";
            tableName: "audit_log";
            dataType: "string";
            columnType: "PgText";
            data: string;
            driverParam: string;
            notNull: false;
            hasDefault: false;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: [string, ...string[]];
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        actorType: drizzle_orm_pg_core.PgColumn<{
            name: "actor_type";
            tableName: "audit_log";
            dataType: "string";
            columnType: "PgText";
            data: string;
            driverParam: string;
            notNull: false;
            hasDefault: false;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: [string, ...string[]];
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        actorLabel: drizzle_orm_pg_core.PgColumn<{
            name: "actor_label";
            tableName: "audit_log";
            dataType: "string";
            columnType: "PgText";
            data: string;
            driverParam: string;
            notNull: false;
            hasDefault: false;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: [string, ...string[]];
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        action: drizzle_orm_pg_core.PgColumn<{
            name: "action";
            tableName: "audit_log";
            dataType: "string";
            columnType: "PgText";
            data: string;
            driverParam: string;
            notNull: true;
            hasDefault: false;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: [string, ...string[]];
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        entityType: drizzle_orm_pg_core.PgColumn<{
            name: "entity_type";
            tableName: "audit_log";
            dataType: "string";
            columnType: "PgText";
            data: string;
            driverParam: string;
            notNull: true;
            hasDefault: false;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: [string, ...string[]];
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        entityId: drizzle_orm_pg_core.PgColumn<{
            name: "entity_id";
            tableName: "audit_log";
            dataType: "string";
            columnType: "PgText";
            data: string;
            driverParam: string;
            notNull: true;
            hasDefault: false;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: [string, ...string[]];
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        metadata: drizzle_orm_pg_core.PgColumn<{
            name: "metadata";
            tableName: "audit_log";
            dataType: "json";
            columnType: "PgJsonb";
            data: Record<string, unknown> | null;
            driverParam: unknown;
            notNull: false;
            hasDefault: false;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: undefined;
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {
            $type: Record<string, unknown> | null;
        }>;
        ip: drizzle_orm_pg_core.PgColumn<{
            name: "ip";
            tableName: "audit_log";
            dataType: "string";
            columnType: "PgText";
            data: string;
            driverParam: string;
            notNull: false;
            hasDefault: false;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: [string, ...string[]];
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        tenantId: drizzle_orm_pg_core.PgColumn<{
            name: "tenant_id";
            tableName: "audit_log";
            dataType: "string";
            columnType: "PgText";
            data: string;
            driverParam: string;
            notNull: false;
            hasDefault: false;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: [string, ...string[]];
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        createdAt: drizzle_orm_pg_core.PgColumn<{
            name: "created_at";
            tableName: "audit_log";
            dataType: "date";
            columnType: "PgTimestamp";
            data: Date;
            driverParam: string;
            notNull: true;
            hasDefault: true;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: undefined;
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
    };
    dialect: "pg";
}>;
declare const auditSchema: {
    auditLog: drizzle_orm_pg_core.PgTableWithColumns<{
        name: "audit_log";
        schema: undefined;
        columns: {
            id: drizzle_orm_pg_core.PgColumn<{
                name: "id";
                tableName: "audit_log";
                dataType: "string";
                columnType: "PgUUID";
                data: string;
                driverParam: string;
                notNull: true;
                hasDefault: true;
                isPrimaryKey: true;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: undefined;
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            actorId: drizzle_orm_pg_core.PgColumn<{
                name: "actor_id";
                tableName: "audit_log";
                dataType: "string";
                columnType: "PgText";
                data: string;
                driverParam: string;
                notNull: false;
                hasDefault: false;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: [string, ...string[]];
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            actorType: drizzle_orm_pg_core.PgColumn<{
                name: "actor_type";
                tableName: "audit_log";
                dataType: "string";
                columnType: "PgText";
                data: string;
                driverParam: string;
                notNull: false;
                hasDefault: false;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: [string, ...string[]];
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            actorLabel: drizzle_orm_pg_core.PgColumn<{
                name: "actor_label";
                tableName: "audit_log";
                dataType: "string";
                columnType: "PgText";
                data: string;
                driverParam: string;
                notNull: false;
                hasDefault: false;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: [string, ...string[]];
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            action: drizzle_orm_pg_core.PgColumn<{
                name: "action";
                tableName: "audit_log";
                dataType: "string";
                columnType: "PgText";
                data: string;
                driverParam: string;
                notNull: true;
                hasDefault: false;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: [string, ...string[]];
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            entityType: drizzle_orm_pg_core.PgColumn<{
                name: "entity_type";
                tableName: "audit_log";
                dataType: "string";
                columnType: "PgText";
                data: string;
                driverParam: string;
                notNull: true;
                hasDefault: false;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: [string, ...string[]];
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            entityId: drizzle_orm_pg_core.PgColumn<{
                name: "entity_id";
                tableName: "audit_log";
                dataType: "string";
                columnType: "PgText";
                data: string;
                driverParam: string;
                notNull: true;
                hasDefault: false;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: [string, ...string[]];
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            metadata: drizzle_orm_pg_core.PgColumn<{
                name: "metadata";
                tableName: "audit_log";
                dataType: "json";
                columnType: "PgJsonb";
                data: Record<string, unknown> | null;
                driverParam: unknown;
                notNull: false;
                hasDefault: false;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: undefined;
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {
                $type: Record<string, unknown> | null;
            }>;
            ip: drizzle_orm_pg_core.PgColumn<{
                name: "ip";
                tableName: "audit_log";
                dataType: "string";
                columnType: "PgText";
                data: string;
                driverParam: string;
                notNull: false;
                hasDefault: false;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: [string, ...string[]];
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            tenantId: drizzle_orm_pg_core.PgColumn<{
                name: "tenant_id";
                tableName: "audit_log";
                dataType: "string";
                columnType: "PgText";
                data: string;
                driverParam: string;
                notNull: false;
                hasDefault: false;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: [string, ...string[]];
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            createdAt: drizzle_orm_pg_core.PgColumn<{
                name: "created_at";
                tableName: "audit_log";
                dataType: "date";
                columnType: "PgTimestamp";
                data: Date;
                driverParam: string;
                notNull: true;
                hasDefault: true;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: undefined;
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
        };
        dialect: "pg";
    }>;
};
type AuditSchema = typeof auditSchema;

/**
 * List audit records, newest first, with keyset pagination (cursor = `(created_at_ms, id)`).
 *
 * `tenant` is OPTIONAL (single-tenant hosts store `tenant_id` null). When provided it
 * constrains correctly; when omitted the query spans ALL tenants — scoping is the host's
 * responsibility. On a multi-tenant audit surface, always pass `tenant` (fail-open default).
 */
declare function listAudit<S extends AuditSchema>(db: Querier<S>, filter?: ListAuditFilter): Promise<ListAuditResult>;

/**
 * Append an audit record. **Never throws** — a write failure is swallowed and
 * returned as `{ logged: false, error }` so it cannot break the operation being logged.
 *
 * CONTRACT (boundary spec amendment B): because failures are swallowed, this is the
 * *decoupled* form — call it **after the business commit, or fire-and-forget**.
 * Do NOT call it inside the caller's business transaction: a failed insert aborts the
 * whole Postgres tx while the swallow hides it, so the mutation can commit with the
 * audit row silently dropped. For transaction-atomic audit, insert into the exported
 * `auditLog` schema directly within your own tx (a throw there correctly rolls back).
 */
declare function logAudit<S extends AuditSchema>(db: Querier<S>, event: AuditEvent): Promise<LogAuditResult>;

export { type AuditCursor, type AuditEvent, type AuditRecord, type AuditSchema, InvalidCursorError, type ListAuditFilter, type ListAuditResult, type LogAuditResult, auditLog, auditSchema, decodeCursor, encodeCursor, listAudit, logAudit };
