import type { PostgresJsDatabase } from 'drizzle-orm/postgres-js';
import type { ServerAdapter, SyncOperation } from '../types.ts';
export interface DrizzleAdapterConfig {
    db: PostgresJsDatabase;
    schema: Record<string, any>;
    getFilter?: (table: string, userId: string) => any;
    transformOut?: (table: string, data: any) => any;
    transformIn?: (table: string, data: any) => any;
}
export declare const syncMetadata: {
    _version: import("drizzle-orm/column-builder", { with: { "resolution-mode": "require" } }).HasDefault<import("drizzle-orm/column-builder", { with: { "resolution-mode": "require" } }).NotNull<import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgIntegerBuilderInitial<"_version">>>;
    _updatedAt: import("drizzle-orm").HasDefault<import("drizzle-orm/column-builder", { with: { "resolution-mode": "require" } }).NotNull<import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgTimestampBuilderInitial<"_updated_at">>>;
    _clientId: import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgTextBuilderInitial<"_client_id", [string, ...string[]]>;
    _isDeleted: import("drizzle-orm/column-builder", { with: { "resolution-mode": "require" } }).HasDefault<import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgBooleanBuilderInitial<"_is_deleted">>;
};
export declare const syncLog: import("drizzle-orm/pg-core/table", { with: { "resolution-mode": "require" } }).PgTableWithColumns<{
    name: "_sync_log";
    schema: undefined;
    columns: {
        id: import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgColumn<{
            name: "id";
            tableName: "_sync_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;
        }, {}, {}>;
        tableName: import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgColumn<{
            name: "table_name";
            tableName: "_sync_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;
        }, {}, {}>;
        recordId: import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgColumn<{
            name: "record_id";
            tableName: "_sync_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;
        }, {}, {}>;
        operation: import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgColumn<{
            name: "operation";
            tableName: "_sync_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;
        }, {}, {}>;
        data: import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgColumn<{
            name: "data";
            tableName: "_sync_log";
            dataType: "json";
            columnType: "PgJsonb";
            data: unknown;
            driverParam: unknown;
            notNull: false;
            hasDefault: false;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: undefined;
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        timestamp: import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgColumn<{
            name: "timestamp";
            tableName: "_sync_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;
        }, {}, {}>;
        clientId: import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgColumn<{
            name: "client_id";
            tableName: "_sync_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;
        }, {}, {}>;
        userId: import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgColumn<{
            name: "user_id";
            tableName: "_sync_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;
        }, {}, {}>;
    };
    dialect: "pg";
}>;
export declare const clientState: import("drizzle-orm/pg-core/table", { with: { "resolution-mode": "require" } }).PgTableWithColumns<{
    name: "_sync_client_state";
    schema: undefined;
    columns: {
        clientId: import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgColumn<{
            name: "client_id";
            tableName: "_sync_client_state";
            dataType: "string";
            columnType: "PgText";
            data: string;
            driverParam: string;
            notNull: true;
            hasDefault: false;
            isPrimaryKey: true;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: [string, ...string[]];
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        userId: import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgColumn<{
            name: "user_id";
            tableName: "_sync_client_state";
            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;
        }, {}, {}>;
        lastSync: import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgColumn<{
            name: "last_sync";
            tableName: "_sync_client_state";
            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;
        }, {}, {}>;
        lastActive: import("drizzle-orm/pg-core", { with: { "resolution-mode": "require" } }).PgColumn<{
            name: "last_active";
            tableName: "_sync_client_state";
            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";
}>;
export declare class DrizzleAdapter implements ServerAdapter<PostgresJsDatabase> {
    private config;
    constructor(config: DrizzleAdapterConfig);
    insert(table: string, data: any): Promise<any>;
    update(table: string, id: string, data: any, expectedVersion: number): Promise<any>;
    delete(table: string, id: string): Promise<void>;
    findOne(table: string, id: string): Promise<any | null>;
    find(table: string, filter?: any): Promise<any[]>;
    getChangesSince(table: string, timestamp: number, userId?: string, excludeClientId?: string): Promise<SyncOperation[]>;
    applyOperation(op: SyncOperation, userId?: string): Promise<void>;
    checkConflict(table: string, id: string, expectedVersion: number): Promise<boolean>;
    batchInsert(table: string, records: any[]): Promise<any[]>;
    batchUpdate(table: string, updates: Array<{
        id: string;
        data: any;
    }>): Promise<any[]>;
    logSyncOperation(op: SyncOperation, userId: string): Promise<void>;
    updateClientState(clientId: string, userId: string): Promise<void>;
    getClientState(clientId: string): Promise<ClientState | null>;
    transaction<T>(fn: (adapter: ServerAdapter) => Promise<T>): Promise<T>;
}
