import { IAdapter } from "../adapter/IAdapter"; import { ISerializer } from "../adapter/data/ISerializer"; import { CipherKey } from 'crypto'; export interface JsonDBConfig { readonly adapter: IAdapter; readonly saveOnPush: boolean; readonly separator: string; } export declare class Config implements JsonDBConfig { adapter: IAdapter; private _filename; saveOnPush: boolean; separator: string; syncOnSave: boolean; humanReadable: boolean; private _serializers; private _cipherKey?; get filename(): string; constructor(filename: string, saveOnPush?: boolean, humanReadable?: boolean, separator?: string, syncOnSave?: boolean); /** * Add a custom serializer for handling additional types during JSON serialization. * * Custom serializers allow you to extend the built-in type support (Date, Set, Map, RegExp, BigInt) * with your own types. Each serializer uses a `__type`/`__value` envelope pattern in the stored JSON. * * @param serializer - The serializer to add. Must implement the {@link ISerializer} interface. * * @example * ```typescript * import { Config, ISerializer } from 'node-json-db'; * * const urlSerializer: ISerializer = { * type: "URL", * serialize: (value: URL) => value.href, * deserialize: (value: string) => new URL(value), * test: (value: any) => value instanceof URL, * }; * * const config = new Config('mydb'); * config.addSerializer(urlSerializer); * ``` */ addSerializer(serializer: ISerializer): void; /** * Enable encryption for the database using AES-256-GCM. * * When encryption is enabled, the database filename automatically changes to use the `.enc.json` extension. * For example, `mydb.json` becomes `mydb.enc.json`. This prevents accidentally accessing encrypted * databases without proper encryption settings. * * This method is idempotent - calling it multiple times won't keep changing the filename. * * @param cipherKey - The encryption key. Must be exactly 32 bytes. Can be: * - A string of 32 characters * - A Buffer of 32 bytes * - A symmetric KeyObject with 256-bit key size (from Node.js crypto module) * * @throws {Error} If the key is asymmetric (not supported) * @throws {Error} If the key length is not exactly 32 bytes * * @example * ```typescript * import { Config } from 'node-json-db'; * import { randomBytes } from 'crypto'; * * const config = new Config('mydb', true); * const key = randomBytes(32); // 32-byte encryption key * config.setEncryption(key); * // Database will now be stored in 'mydb.enc.json' with encrypted data * ``` */ setEncryption(cipherKey: CipherKey): void; private _rebuildAdapter; } export declare class ConfigWithAdapter implements JsonDBConfig { readonly adapter: IAdapter; readonly saveOnPush: boolean; readonly separator: string; constructor(adapter: IAdapter, saveOnPush?: boolean, separator?: string); }