interface IStorage {
    /**
     * 获取存储项
     * @param key 键名
     * @returns 存储的值
     */
    getItem(key: string): any;
    /**
     * 设置存储项
     * @param key 键名
     * @param value 值
     * @param expire 过期时间（分钟）
     */
    setItem(key: string, value: any, expire?: number): any;
    /**
     * 移除存储项
     * @param key 键名
     */
    removeItem(key: string): any;
    /**
     * 清空所有存储项
     */
    clear(): any;
    /**
     * 获取所有键名
     */
    keys(): any;
    /**
     * 获取存储大小
     */
    size(): any;
}

interface StorageData {
    value: any;
    expire: number | null;
    isEncrypted: boolean;
}

interface IEncryptionService {
    encryptData(data: string): string;
    decryptData(encryptedData: string): string;
}
declare class EncryptionService implements IEncryptionService {
    private readonly encryption;
    constructor({ key, iv, hasEncrypt }: {
        hasEncrypt: boolean;
        key: string;
        iv: string;
    });
    encryptData(data: string): string;
    decryptData(encryptedData: string): string;
    handleEncryption(key: string, iv: string): boolean;
}

declare abstract class BaseStorage implements IStorage {
    private static cleanupInterval;
    protected static encryptionService: EncryptionService;
    protected readonly cache: any;
    protected readonly prefix: string;
    protected readonly hasEncrypt: boolean;
    protected readonly storageType?: string;
    constructor({ prefix, hasEncrypt, key, iv }: {
        hasEncrypt: boolean;
        prefix?: string;
        key: string;
        iv: string;
    });
    protected setCache(key: string, value: any, expire?: number | null): void;
    protected getCache(key: string): any | undefined;
    protected deleteCache(key: string): void;
    protected clearCache(): void;
    /**
    * 生成带有前缀（如果有）并转换为大写的键。
    *
    *
    * @param {string} key - 需要格式化的原始键。
    * @returns {string} - 带有前缀并转换为大写的键。
    */
    protected getPrefixedKey(key: string, prefixKey?: string): string;
    protected setCacheKey(key: string): string;
    /**
      * 检查数据是否未过期。
      *
      * @param {StorageData} data - 数据对象。
      * @returns {boolean} - 是否未过期。
      */
    protected isNotExpired(data: StorageData): boolean;
    /**
       * 准备要存储的数据。
       *
       * @param {*} value - 要存储的数据。
       * @param {number} [expire=0] - 过期时间（单位`分`，默认`0`分钟，永久缓存）。
       * @returns {string} - 准备好的 JSON 字符串。
     */
    protected prepareStorageData(key: string, value: any, expire?: number | null): string;
    /**
     * 解析存储的数据
     */
    protected parseStorageData(data: string): StorageData | null;
    /**
    * 创建缓存项对象
    */
    private createCacheItem;
    /**
     * 抽象方法：具体存储实现需要实现这些方法
     */
    abstract getItem(key: string): any;
    abstract setItem(key: string, value: any, expire?: number): void;
    abstract removeItem(key: string): void;
    abstract clear(): void;
    abstract keys(): string[];
    abstract size(): number;
    /**
     * 检查键是否存在
     */
    hasItem(key: string): Promise<boolean>;
    /**
     * 获取多个键的值
     */
    getItems(keys: string[]): Promise<Record<string, any>>;
    /**
     * 设置多个键值对
     */
    setItems(items: Record<string, any>, expire?: number): Promise<void>;
    /**
     * 移除多个键
     */
    removeItems(keys: string[]): Promise<void>;
    /**
    * 设置自动清理机制
    */
    private setupAutoCleanup;
    /**
   * 清理过期的缓存项并重新获取存储数据
   */
    protected cleanCache(): Promise<void>;
    destroy(): void;
}

export type StorageOptions = Partial<CreateStorageParams>;
export interface CreateStorageParams {
    prefix?: string;
    storage?: Storage;
    hasEncrypt: boolean;
    cacheName?: string;
    key: string;
    iv: string;
    storageAdapter: Storage;
    storageType?: CacheType;
}
declare enum CacheType {
    LOCALSTORAGE = "LOCALSTORAGE",
    SESSIONSTORAGE = "SESSIONSTORAGE",
    INDEXEDDB = "INDEXEDDB",
    UNIAPP = "UNIAPP",
    COOKIE = "COOKIE"
}

type WebStorageOptions = CreateStorageParams & {
    storageAdapter: Storage$1;
    storageType?: CacheType;
};
declare class Storage$1 extends BaseStorage {
    private readonly storageAdapter;
    protected readonly storageType?: CacheType;
    constructor(options: WebStorageOptions);
    getItem(key: string): unknown;
    setItem(key: string, value: unknown, expire?: number): void;
    removeItem(key: string): void;
    clear(): void;
    keys(): string[];
    size(): number;
}

interface StorageAdapter {
    getItem(key: string): string | null;
    setItem(key: string, value: string): void;
    removeItem(key: string): void;
    clear(): void;
    keys(): string[];
    size(): number;
}

declare class CookieStorageAdapter implements StorageAdapter {
    private storageType;
    constructor();
    getItem(key: string): any;
    setItem(key: string, value: string): void;
    removeItem(key: string): void;
    clear(): void;
    keys(): string[];
    size(): number;
}

declare class UniAppStorageAdapter implements StorageAdapter {
    private storageType;
    constructor();
    getItem(key: string): string | null;
    setItem(key: string, value: string): void;
    removeItem(key: string): void;
    clear(): void;
    keys(): string[];
    size(): number;
}

/**
 * Web Storage 适配器
 * 用于处理 localStorage 和 sessionStorage 的存储操作
 */
declare class WebStorageAdapter implements StorageAdapter {
    private storage;
    private storageType;
    constructor(storage: Storage);
    /**
     * 获取存储项
     * @param key 键名
     * @returns 存储的值，如果不存在则返回 null
     */
    getItem(key: string): string | null;
    /**
     * 设置存储项
     * @param key 键名
     * @param value 要存储的值
     */
    setItem(key: string, value: string): void;
    /**
     * 移除存储项
     * @param key 键名
     */
    removeItem(key: string): void;
    /**
     * 清空所有存储项
     */
    clear(): void;
    /**
     * 获取所有存储项的键名
     * @returns 键名数组
     */
    keys(): string[];
    /**
     * 获取存储项的数量
     * @returns 存储项数量
     */
    size(): number;
}

declare class IndexedDBStorage implements StorageAdapter {
    private storage;
    private storageType;
    constructor({ cacheName }: {
        cacheName: string;
    });
    /**
        * 获取存储项
        * @param key 键名
        * @returns 存储的值，如果不存在则返回 null
        */
    getItem(key: string): Promise<string | null>;
    /**
     * 异步设置缓存项，并可以选择设置过期时间。
     *
     * @param {string} key - 要存储数据的键。
     * @param {*} value - 要存储的数据。
     * @param {number} [expire] - 过期时间（单位`分`，默认`0`分钟，永久缓存）。
     * @returns {Promise<void>} - 一个 Promise 对象，表示设置操作的结果。
     */
    setItem(key: string, value: any): Promise<void>;
    /**
     * 异步从离线仓库中删除对应键名的值。
     *
     * @param {string} key - 键名。
     * @returns {Promise<boolean>} - 操作是否成功。
     */
    removeItem(key: string): Promise<void>;
    /**
     * 异步从离线仓库中删除所有的键名，重置数据库。
     *
     * @returns {Promise<boolean>} - 操作是否成功。
     */
    clear(): void;
    /**
     * 异步获取数据仓库中所有的key。
     *
     * @returns {Promise<string[]>} - 一个 Promise 对象，表示获取所有键的结果。
     */
    Keys(): void;
}

export declare function cookieAdapter(): CookieStorageAdapter;
export declare function webLocalAdapter(localStorageType: any): WebStorageAdapter;
export declare function webSessionAdapter(localStorageType: any): WebStorageAdapter;
export declare function uniAppAdapter(): UniAppStorageAdapter;
export declare function indexedDBAdapter({ cacheName }: {
    cacheName?: string | undefined;
}): IndexedDBStorage;

/**
 * 创建 Aura 存储实例
 * @param options - 存储配置选项
 * @returns 存储实例
 * @throws {StorageError} 当存储类型不支持或创建失败时抛出错误
 */
export declare function createAuraStorage(options: any): Storage$1;

