UNPKG

slimcryptdb

Version:

A minimalist, ultra-secure embedded database for Node.js applications

294 lines (253 loc) 9.74 kB
// Type definitions for SlimCryptDB v2.2.2 - Enhanced with WAL Encryption // Project: SlimCryptDB // Definitions by: SlimCryptDB Contributors /// <reference types="node" /> import { EventEmitter } from 'events'; declare namespace SlimCryptDB { interface DatabaseOptions { encrypt?: boolean; compression?: boolean; walEnabled?: boolean; syncWrites?: boolean; maxWalSize?: number; checkpointInterval?: number; lockTimeout?: number; walPaddingSize?: number; } interface JSONSchema { type?: string; properties?: { [key: string]: JSONSchema }; required?: string[]; items?: JSONSchema; enum?: any[]; format?: string; minLength?: number; maxLength?: number; minimum?: number; maximum?: number; pattern?: string; additionalProperties?: boolean; } interface QueryCondition { column: string; operator: '==' | '!=' | '>' | '>=' | '<' | '<=' | 'in' | 'like' | 'contains'; value: any; } interface QueryFilter { operator: 'and' | 'or'; conditions: QueryCondition[]; } interface QuerySort { column: string; direction?: 'asc' | 'desc'; } interface QueryJoin { table: string; on: string; type?: 'inner' | 'left' | 'right'; } interface QueryOptions { filter?: QueryFilter; sort?: QuerySort; limit?: number; offset?: number; join?: QueryJoin; } interface IndexOptions { type?: 'btree' | 'hash'; unique?: boolean; } interface DatabaseStats { tables: number; indexes: number; activeTransactions: number; walSequence: number; memoryUsage: NodeJS.MemoryUsage; uptime: number; locks: number; lockQueue: number; walEncrypted: boolean; // Now always present, indicates WAL encryption status walRecoveryFailures?: number; // New: Number of failures in last recovery } interface WALEntry { sequence: number; timestamp: number; operation: any; checksum: string; } interface TransactionOptions { isolationLevel?: 'READ_UNCOMMITTED' | 'READ_COMMITTED' | 'REPEATABLE_READ' | 'SERIALIZABLE'; } interface IndexInfo { tableName: string; columns: string[]; type: 'btree' | 'hash'; unique: boolean; data: Map<string, any[]>; } /** * WAL Recovery Summary - New in v2.2.0 */ interface WALRecoverySummary { failures: Array<{ file: string; entry: string | null; error: string; }>; successCount: number | null; } type TransactionId = string; type EventType = 'add' | 'update' | 'delete' | 'createTable' | 'deleteTable' | 'createIndex' | 'commitTransaction' | 'rollbackTransaction'; } declare class SlimCryptDB extends EventEmitter { /** * Creates a new SlimCryptDB instance * @param databaseDir Directory path for database storage * @param encryptionKey 32-byte encryption key (optional, generates if not provided) * @param options Configuration options */ constructor(databaseDir: string, encryptionKey?: Buffer | null, options?: SlimCryptDB.DatabaseOptions); /** * Create a new table with optional schema validation * @param tableName Name of the table to create * @param schema Optional JSON schema for validation */ createTable(tableName: string, schema?: SlimCryptDB.JSONSchema | null): Promise<void>; /** * Delete a table and all its data * @param tableName Name of the table to delete */ deleteTable(tableName: string): Promise<void>; /** * Check if a table exists * @param tableName Name of the table to check * @returns True if table exists, false otherwise */ tableExists(tableName: string): boolean; /** * Add data to a table with validation and indexing * @param tableName Name of the table * @param data Data object to insert * @param transactionId Optional transaction ID for atomic operations * @returns The inserted data with generated ID */ addData(tableName: string, data: any, transactionId?: SlimCryptDB.TransactionId | null): Promise<any>; /** * Read data from a table with basic filtering * @param tableName Name of the table * @param query Simple key-value filter object * @returns Array of matching records */ readData(tableName: string, query?: Record<string, any>): Promise<any[]>; /** * Update data in a table * @param tableName Name of the table * @param filter Filter to select records to update * @param updateData Data to update * @param transactionId Optional transaction ID * @returns Number of updated records */ updateData(tableName: string, filter: Record<string, any>, updateData: Record<string, any>, transactionId?: SlimCryptDB.TransactionId | null): Promise<number>; /** * Delete data from a table * @param tableName Name of the table * @param filter Filter to select records to delete * @param transactionId Optional transaction ID * @returns Number of deleted records */ deleteData(tableName: string, filter: Record<string, any>, transactionId?: SlimCryptDB.TransactionId | null): Promise<number>; /** * Query data with advanced filtering, sorting, and pagination * @param tableName Name of the table * @param query Advanced query options * @returns Array of matching records */ queryData(tableName: string, query?: SlimCryptDB.QueryOptions): Promise<any[]>; /** * Create an index for faster queries * @param tableName Name of the table * @param indexName Name of the index * @param columns Array of column names to index * @param options Index configuration options */ createIndex(tableName: string, indexName: string, columns: string[], options?: SlimCryptDB.IndexOptions): Promise<void>; /** * Drop an index * @param indexName Name of the index to drop */ dropIndex(indexName: string): Promise<void>; /** * Ready function - ensures database is fully initialized * @returns Promise that resolves when the database is ready */ ready(): Promise<boolean>; /** * Start a new transaction * @param isolationLevel Transaction isolation level * @returns Transaction ID */ startTransaction(isolationLevel?: SlimCryptDB.TransactionOptions['isolationLevel']): Promise<SlimCryptDB.TransactionId>; /** * Commit a transaction atomically * @param transactionId Transaction ID to commit */ commitTransaction(transactionId: SlimCryptDB.TransactionId): Promise<void>; /** * Rollback a transaction * @param transactionId Transaction ID to rollback */ rollbackTransaction(transactionId: SlimCryptDB.TransactionId): Promise<void>; /** * Get database statistics and performance metrics * @returns Database statistics object */ getStats(): Promise<SlimCryptDB.DatabaseStats>; /** * Get summary of last WAL recovery operation - New in v2.2.0 * @returns Object containing recovery failures and success count */ getWALRecoverySummary(): SlimCryptDB.WALRecoverySummary; /** * Gracefully close the database */ close(): Promise<void>; /** * Event handlers */ on(event: 'add', listener: (tableName: string, data: any) => void): this; on(event: 'update', listener: (tableName: string, recordsUpdated: any[], updateData: any) => void): this; on(event: 'delete', listener: (tableName: string, recordsDeleted: any[]) => void): this; on(event: 'createTable', listener: (tableName: string, tableData: any) => void): this; on(event: 'deleteTable', listener: (tableName: string) => void): this; on(event: 'createIndex', listener: (tableName: string, indexName: string) => void): this; on(event: 'commitTransaction', listener: (transactionId: SlimCryptDB.TransactionId) => void): this; on(event: 'rollbackTransaction', listener: (transactionId: SlimCryptDB.TransactionId) => void): this; removeListener(event: SlimCryptDB.EventType, listener: (...args: any[]) => void): this; // Enhanced private methods (for documentation purposes) - Updated in v2.2.0 private _deriveWALKey(): Buffer; private _encryptWALData(data: any): string; private _decryptWALData(encryptedData: string): any; private _applyWALPaddingBuffer(plaintextBuffer: Buffer): Buffer; // New in v2.2.0 private _removeWALPaddingBuffer(paddedBuffer: Buffer): Buffer; // New in v2.2.0 private _initializeWALEncryption(): Promise<void>; private _recoverFromWAL(): Promise<void>; // Enhanced in v2.2.0 } /** * Generate a cryptographically secure 256-bit encryption key * @returns 32-byte Buffer containing the encryption key */ declare function generateEncryptionKey(): Buffer; /** * Create a secure database instance with recommended defaults * @param databaseDir Directory path for database storage * @param encryptionKey 32-byte encryption key (optional, generates if not provided) * @param options Configuration options * @returns SlimCryptDB instance with secure defaults */ declare function createSecureDatabase(databaseDir: string, encryptionKey?: Buffer | null, options?: SlimCryptDB.DatabaseOptions): SlimCryptDB; export { SlimCryptDB, generateEncryptionKey, createSecureDatabase }; export default SlimCryptDB;