import * as _credo_ts_core0 from "@credo-ts/core";
import { Agent, AgentDependencies, Logger } from "@credo-ts/core";
import { AskarModule } from "@credo-ts/askar";
import { DrizzleStorageModule } from "@credo-ts/drizzle-storage";

//#region src/AskarToDrizzleStorageMigrator.d.ts

/**
 * Migration class to move storage from Askar to Drizzle. Note that this does not migrate
 * the KMS part of Askar (the keys), and only the normal record storage.
 *
 * No backups are created during the process. The askar store is only used for reading, the
 * drizzle store is also used for writing. Ensure the drizzle target is empty when starting the
 * migration.
 *
 * Note that if you were previously using `AskarMultiWalletDatabaseScheme.DatabasePerWallet`, that all storage will be moved
 * to a single database. You can still keep using multiiple databases for the Askar storage, but Drizzle only supports
 * a single database per main agent instance (including sub agents for tenants).
 */
declare class AskarToDrizzleStorageMigrator {
  private drizzleModule;
  private askarModule;
  private agentDependencies;
  private logger;
  private skipMigrationforMissingAdapter;
  private tenantsModule?;
  private drizzleAgent;
  askarAgent: Agent<_credo_ts_core0.ModulesMap>;
  private drizzleConfig;
  private drizzleAdapters;
  private constructor();
  static initialize({
    drizzleModule,
    askarModule,
    agentDependencies,
    logger,
    skipMigrationForMissingAdapter,
    tenantsModule
  }: {
    drizzleModule: DrizzleStorageModule;
    askarModule: AskarModule;
    agentDependencies: AgentDependencies;
    logger: Logger;
    tenantsModule?: TenantsModule;
    /**
     * When set to `true`, the migration of any records in the Askar store that don't
     * have an adapter registered will be skipped. Note that this can be dangerous and
     * result in loss of data in the new store. Use this only if you have records with a
     * category in your askar store, for which there is no adapter registered, and should
     * not be migrated.
     *
     * @default false
     */
    skipMigrationForMissingAdapter?: boolean;
  }): Promise<AskarToDrizzleStorageMigrator>;
  private getAdapterForRecordType;
  migrate(): Promise<void>;
  private migrateForContext;
}
//#endregion
export { AskarToDrizzleStorageMigrator };
//# sourceMappingURL=AskarToDrizzleStorageMigrator.d.ts.map