export type AuthConfigTransform = (config: unknown) => unknown | null;
export interface AuthConfigMigrationRow {
    /** The integration row's primary key (`row_id`). */
    readonly rowId: string;
    readonly pluginId: string;
    readonly config: unknown;
}
export interface AuthConfigMigrationUpdate {
    readonly rowId: string;
    readonly config: unknown;
}
/** Plan the config rewrites for a set of integration rows. `transforms` maps
 *  plugin ids (`mcp` / `graphql` / `openapi`) to their migration functions;
 *  rows of other plugins, and rows whose transform returns null, are left
 *  untouched. */
export declare const planAuthConfigMigration: (rows: readonly AuthConfigMigrationRow[], transforms: Record<string, AuthConfigTransform>) => readonly AuthConfigMigrationUpdate[];
export interface SqliteAuthConfigClient {
    execute(stmt: string | {
        readonly sql: string;
        readonly args: readonly unknown[];
    }): Promise<{
        readonly rows: readonly Record<string, unknown>[];
    }>;
}
/** Rewrite pre-canonical integration `config` blobs in a SQLite database.
 *  Idempotent (canonical rows plan no updates); returns the number of rows
 *  rewritten. The `integration` table may not exist yet on a fresh database —
 *  that counts as nothing to migrate. */
export declare const runSqliteAuthConfigMigration: (client: SqliteAuthConfigClient, transforms: Record<string, AuthConfigTransform>) => Promise<number>;
//# sourceMappingURL=migrate.d.ts.map