brainy/dist/storage/storageFactory.d.ts
David Snelling f8c45f2d8d Initial commit: Brainy - Multi-Dimensional AI Database
Open source vector database with HNSW indexing, graph relationships,
and metadata facets. Features CLI with professional augmentation registry
integration for discovering extensions and capabilities.
2025-08-18 17:35:06 -07:00

199 lines
5.7 KiB
TypeScript

/**
* Storage Factory
* Creates the appropriate storage adapter based on the environment and configuration
*/
import { StorageAdapter } from '../coreTypes.js';
import { MemoryStorage } from './adapters/memoryStorage.js';
import { OPFSStorage } from './adapters/opfsStorage.js';
import { S3CompatibleStorage, R2Storage } from './adapters/s3CompatibleStorage.js';
import { OperationConfig } from '../utils/operationUtils.js';
/**
* Options for creating a storage adapter
*/
export interface StorageOptions {
/**
* The type of storage to use
* - 'auto': Automatically select the best storage adapter based on the environment
* - 'memory': Use in-memory storage
* - 'opfs': Use Origin Private File System storage (browser only)
* - 'filesystem': Use file system storage (Node.js only)
* - 's3': Use Amazon S3 storage
* - 'r2': Use Cloudflare R2 storage
* - 'gcs': Use Google Cloud Storage
*/
type?: 'auto' | 'memory' | 'opfs' | 'filesystem' | 's3' | 'r2' | 'gcs';
/**
* Force the use of memory storage even if other storage types are available
*/
forceMemoryStorage?: boolean;
/**
* Force the use of file system storage even if other storage types are available
*/
forceFileSystemStorage?: boolean;
/**
* Request persistent storage permission from the user (browser only)
*/
requestPersistentStorage?: boolean;
/**
* Root directory for file system storage (Node.js only)
*/
rootDirectory?: string;
/**
* Configuration for Amazon S3 storage
*/
s3Storage?: {
/**
* S3 bucket name
*/
bucketName: string;
/**
* AWS region (e.g., 'us-east-1')
*/
region?: string;
/**
* AWS access key ID
*/
accessKeyId: string;
/**
* AWS secret access key
*/
secretAccessKey: string;
/**
* AWS session token (optional)
*/
sessionToken?: string;
};
/**
* Configuration for Cloudflare R2 storage
*/
r2Storage?: {
/**
* R2 bucket name
*/
bucketName: string;
/**
* Cloudflare account ID
*/
accountId: string;
/**
* R2 access key ID
*/
accessKeyId: string;
/**
* R2 secret access key
*/
secretAccessKey: string;
};
/**
* Configuration for Google Cloud Storage
*/
gcsStorage?: {
/**
* GCS bucket name
*/
bucketName: string;
/**
* GCS region (e.g., 'us-central1')
*/
region?: string;
/**
* GCS access key ID
*/
accessKeyId: string;
/**
* GCS secret access key
*/
secretAccessKey: string;
/**
* GCS endpoint (e.g., 'https://storage.googleapis.com')
*/
endpoint?: string;
};
/**
* Configuration for custom S3-compatible storage
*/
customS3Storage?: {
/**
* S3-compatible bucket name
*/
bucketName: string;
/**
* S3-compatible region
*/
region?: string;
/**
* S3-compatible endpoint URL
*/
endpoint: string;
/**
* S3-compatible access key ID
*/
accessKeyId: string;
/**
* S3-compatible secret access key
*/
secretAccessKey: string;
/**
* S3-compatible service type (for logging and error messages)
*/
serviceType?: string;
};
/**
* Operation configuration for timeout and retry behavior
*/
operationConfig?: OperationConfig;
/**
* Cache configuration for optimizing data access
* Particularly important for S3 and other remote storage
*/
cacheConfig?: {
/**
* Maximum size of the hot cache (most frequently accessed items)
* For large datasets, consider values between 5000-50000 depending on available memory
*/
hotCacheMaxSize?: number;
/**
* Threshold at which to start evicting items from the hot cache
* Expressed as a fraction of hotCacheMaxSize (0.0 to 1.0)
* Default: 0.8 (start evicting when cache is 80% full)
*/
hotCacheEvictionThreshold?: number;
/**
* Time-to-live for items in the warm cache in milliseconds
* Default: 3600000 (1 hour)
*/
warmCacheTTL?: number;
/**
* Batch size for operations like prefetching
* Larger values improve throughput but use more memory
*/
batchSize?: number;
/**
* Whether to enable auto-tuning of cache parameters
* When true, the system will automatically adjust cache sizes based on usage patterns
* Default: true
*/
autoTune?: boolean;
/**
* The interval (in milliseconds) at which to auto-tune cache parameters
* Only applies when autoTune is true
* Default: 60000 (1 minute)
*/
autoTuneInterval?: number;
/**
* Whether the storage is in read-only mode
* This affects cache sizing and prefetching strategies
*/
readOnly?: boolean;
};
}
/**
* Create a storage adapter based on the environment and configuration
* @param options Options for creating the storage adapter
* @returns Promise that resolves to a storage adapter
*/
export declare function createStorage(options?: StorageOptions): Promise<StorageAdapter>;
/**
* Export storage adapters
*/
export { MemoryStorage, OPFSStorage, S3CompatibleStorage, R2Storage };