@codai/memorai
Version:
Universal Database & Storage Service for CODAI Ecosystem - CBD Backend
509 lines • 13.3 kB
TypeScript
/**
* Universal Types for MEMORAI Database & Storage Service
*/
export interface MemoraiConfig {
database: {
url: string;
type: 'postgresql' | 'mysql' | 'sqlite' | 'mongodb';
provider?: string;
maxConnections: number;
connectionTimeout: number;
queryTimeout: number;
ssl?: boolean;
logging?: boolean;
migrations?: {
auto: boolean;
directory: string;
};
};
vectorDB: {
url: string;
type: 'pinecone' | 'weaviate' | 'qdrant' | 'chroma' | 'local';
apiKey?: string;
dimensions: number;
metric: 'cosine' | 'euclidean' | 'dotproduct';
indexName: string;
};
storage: {
provider: 'local' | 'aws-s3' | 'cloudflare-r2' | 'supabase' | 'vercel-blob';
bucket: string;
region?: string;
accessKey?: string;
secretKey?: string;
publicUrl?: string;
maxFileSize: number;
allowedTypes: string[];
enableCDN: boolean;
};
cache: {
provider: 'redis' | 'memory' | 'upstash';
url?: string;
password?: string;
ttl: number;
maxSize: number;
};
ai: {
provider: 'openai' | 'anthropic' | 'local';
apiKey?: string;
model: string;
embeddingModel: string;
maxTokens: number;
};
realtime: {
enabled: boolean;
provider: 'socket.io' | 'supabase' | 'pusher';
url?: string;
apiKey?: string;
secret?: string;
};
security: {
encryption: {
enabled: boolean;
algorithm: string;
key?: string;
};
rateLimit: {
enabled: boolean;
windowMs: number;
maxRequests: number;
};
cors: {
origins: string[];
credentials: boolean;
};
};
performance: {
queryOptimization: boolean;
indexOptimization: boolean;
compressionEnabled: boolean;
batchSize: number;
cacheStrategy: 'aggressive' | 'balanced' | 'conservative';
};
}
export interface MemoraiEntity {
id: string;
createdAt: Date;
updatedAt: Date;
version: number;
metadata?: Record<string, any>;
}
export interface User extends MemoraiEntity {
email: string;
name: string;
avatar?: string;
preferences: UserPreferences;
subscription?: Subscription;
storageUsed: number;
storageLimit: number;
}
export interface UserPreferences {
theme: 'light' | 'dark' | 'system';
language: string;
timezone: string;
notifications: NotificationPreferences;
privacy: PrivacySettings;
}
export interface NotificationPreferences {
email: boolean;
push: boolean;
inApp: boolean;
digest: 'realtime' | 'hourly' | 'daily' | 'weekly';
}
export interface PrivacySettings {
shareData: boolean;
allowAnalytics: boolean;
publicProfile: boolean;
}
export interface Subscription {
plan: 'free' | 'pro' | 'enterprise';
status: 'active' | 'cancelled' | 'expired';
startDate: Date;
endDate?: Date;
features: string[];
}
export interface DatabaseRecord extends MemoraiEntity {
table: string;
data: Record<string, any>;
schema?: string;
indexes: string[];
relations: DatabaseRelation[];
}
export interface DatabaseRelation {
type: 'one-to-one' | 'one-to-many' | 'many-to-many';
target: string;
foreignKey: string;
references: string;
}
export interface DatabaseQuery {
table: string;
operation: 'select' | 'insert' | 'update' | 'delete';
conditions?: QueryCondition[];
fields?: string[];
data?: Record<string, any>;
limit?: number;
offset?: number;
orderBy?: OrderBy[];
joins?: Join[];
}
export interface QueryCondition {
field: string;
operator: '=' | '!=' | '>' | '<' | '>=' | '<=' | 'IN' | 'NOT IN' | 'LIKE' | 'NOT LIKE' | 'IS NULL' | 'IS NOT NULL';
value: any;
connector?: 'AND' | 'OR';
}
export interface OrderBy {
field: string;
direction: 'ASC' | 'DESC';
}
export interface Join {
type: 'INNER' | 'LEFT' | 'RIGHT' | 'FULL';
table: string;
condition: string;
}
export interface StorageFile extends MemoraiEntity {
filename: string;
originalName: string;
mimeType: string;
size: number;
path: string;
url: string;
hash: string;
userId: string;
tags: string[];
isPublic: boolean;
downloadCount: number;
expiresAt?: Date;
}
export interface StorageUpload {
file: Buffer | ReadableStream;
filename: string;
mimeType: string;
size?: number;
isPublic?: boolean;
tags?: string[];
expiresAt?: Date;
}
export interface StorageProvider {
upload(file: StorageUpload, path: string): Promise<StorageFile>;
download(path: string): Promise<Buffer>;
delete(path: string): Promise<boolean>;
getUrl(path: string, expiresIn?: number): Promise<string>;
list(prefix?: string): Promise<StorageFile[]>;
copy(fromPath: string, toPath: string): Promise<boolean>;
move(fromPath: string, toPath: string): Promise<boolean>;
}
export interface Memory extends MemoraiEntity {
userId: string;
appId: string;
content: string;
type: 'episodic' | 'semantic' | 'procedural' | 'working' | 'autobiographical';
importance: number;
confidence: number;
context: MemoryContext;
embeddings: number[];
relationships: MemoryRelationship[];
accessHistory: MemoryAccess[];
tags: string[];
isShared: boolean;
sharedWith: string[];
expiresAt?: Date;
}
export interface MemoryContext {
sessionId?: string;
conversationId?: string;
taskId?: string;
location?: string;
temporalContext: TemporalContext;
emotionalState?: EmotionalState;
cognitiveLoad?: number;
environmentalFactors: Record<string, any>;
}
export interface TemporalContext {
timeOfDay: string;
dayOfWeek: string;
season: string;
timeZone: string;
relativeTime: 'recent' | 'medium' | 'distant';
}
export interface EmotionalState {
valence: number;
arousal: number;
dominance: number;
emotions: string[];
}
export interface MemoryRelationship {
id: string;
relatedMemoryId: string;
type: 'causal' | 'temporal' | 'semantic' | 'contextual' | 'associative';
strength: number;
direction: 'bidirectional' | 'unidirectional';
createdAt: Date;
lastReinforced: Date;
}
export interface MemoryAccess {
timestamp: Date;
accessType: 'read' | 'update' | 'link' | 'consolidate';
userId: string;
appId: string;
context: string;
reinforcement: number;
}
export interface MemoryQuery {
text?: string;
embeddings?: number[];
type?: Memory['type'];
userId?: string;
appId?: string;
timeRange?: {
start: Date;
end: Date;
};
importance?: {
min: number;
max: number;
};
confidence?: {
min: number;
max: number;
};
tags?: string[];
limit?: number;
includeRelated?: boolean;
semanticThreshold?: number;
}
export interface MemorySearchResult {
memory: Memory;
similarity: number;
relevanceScore: number;
contextMatch: number;
explanation: string;
}
export interface VectorDocument extends MemoraiEntity {
documentId: string;
content: string;
embeddings: number[];
metadata: DocumentMetadata;
chunks: VectorChunk[];
lastIndexed: Date;
}
export interface DocumentMetadata {
title?: string;
author?: string;
source?: string;
language?: string;
contentType: string;
size: number;
tags: string[];
customFields: Record<string, any>;
}
export interface VectorChunk {
id: string;
content: string;
embeddings: number[];
startIndex: number;
endIndex: number;
metadata: Record<string, any>;
}
export interface VectorSearchQuery {
query: string;
embeddings?: number[];
limit?: number;
threshold?: number;
filters?: Record<string, any>;
includeMetadata?: boolean;
includeContent?: boolean;
}
export interface VectorSearchResult {
document: VectorDocument;
chunk?: VectorChunk;
score: number;
distance: number;
metadata: Record<string, any>;
}
export interface SyncOperation extends MemoraiEntity {
userId: string;
appId: string;
operation: 'insert' | 'update' | 'delete';
table: string;
recordId: string;
data?: Record<string, any>;
previousData?: Record<string, any>;
status: 'pending' | 'synced' | 'failed' | 'conflict';
syncedAt?: Date;
retryCount: number;
error?: string;
priority: number;
}
export interface SyncConflict extends MemoraiEntity {
syncOperationId: string;
conflictType: 'concurrent_update' | 'deleted_record' | 'schema_mismatch';
localData: Record<string, any>;
remoteData: Record<string, any>;
resolution?: 'use_local' | 'use_remote' | 'merge' | 'manual';
resolvedData?: Record<string, any>;
resolvedAt?: Date;
resolvedBy?: string;
}
export interface SyncStatus {
appId: string;
lastSync: Date;
pendingOperations: number;
failedOperations: number;
conflicts: number;
isOnline: boolean;
syncInProgress: boolean;
}
export interface CacheEntry<T = any> {
key: string;
value: T;
expiresAt: Date;
tags: string[];
version: number;
metadata?: Record<string, any>;
}
export interface CacheOptions {
ttl?: number;
tags?: string[];
compression?: boolean;
encryption?: boolean;
metadata?: Record<string, any>;
}
export interface CacheStats {
totalKeys: number;
memoryUsage: number;
hitRate: number;
missRate: number;
evictionCount: number;
expiredCount: number;
}
export interface MemoraiEvent {
id: string;
type: string;
source: string;
data: Record<string, any>;
timestamp: Date;
userId?: string;
appId?: string;
metadata?: Record<string, any>;
}
export interface EventSubscription {
id: string;
userId: string;
appId: string;
eventTypes: string[];
endpoint: string;
isActive: boolean;
lastDelivery?: Date;
failureCount: number;
}
export interface APIResponse<T = any> {
success: boolean;
data?: T;
error?: string;
message?: string;
timestamp: Date;
requestId: string;
metadata?: Record<string, any>;
}
export interface PaginatedResponse<T = any> extends APIResponse<T[]> {
pagination: {
page: number;
limit: number;
total: number;
totalPages: number;
hasNextPage: boolean;
hasPreviousPage: boolean;
};
}
export interface BatchOperation<T = any> {
operation: 'insert' | 'update' | 'delete';
data: T;
id?: string;
}
export interface BatchResponse<T = any> {
success: boolean;
results: BatchOperationResult<T>[];
summary: {
total: number;
successful: number;
failed: number;
skipped: number;
};
}
export interface BatchOperationResult<T = any> {
success: boolean;
data?: T;
error?: string;
operation: BatchOperation<T>;
}
export interface AnalyticsEvent {
eventName: string;
userId?: string;
appId: string;
properties: Record<string, any>;
timestamp: Date;
sessionId?: string;
deviceId?: string;
userAgent?: string;
ipAddress?: string;
}
export interface AnalyticsQuery {
eventName?: string;
userId?: string;
appId?: string;
startDate: Date;
endDate: Date;
groupBy?: string[];
filters?: Record<string, any>;
aggregations?: AnalyticsAggregation[];
}
export interface AnalyticsAggregation {
field: string;
operation: 'sum' | 'count' | 'avg' | 'min' | 'max' | 'distinct';
}
export interface AnalyticsResult {
data: Record<string, any>[];
summary: {
totalEvents: number;
uniqueUsers: number;
dateRange: {
start: Date;
end: Date;
};
aggregations: Record<string, number>;
};
}
export type DeepPartial<T> = {
[P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
};
export type RequiredFields<T, K extends keyof T> = T & Required<Pick<T, K>>;
export type OptionalFields<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
export type Timestamp = Date | string | number;
export type UUID = string;
export type JSONValue = string | number | boolean | null | JSONObject | JSONArray;
export interface JSONObject {
[key: string]: JSONValue;
}
export interface JSONArray extends Array<JSONValue> {
}
export interface MemoraiError {
code: string;
message: string;
details?: Record<string, any>;
stack?: string;
timestamp: Date;
requestId?: string;
userId?: string;
appId?: string;
}
export declare class MemoraiException extends Error {
readonly code: string;
readonly details?: Record<string, any>;
readonly timestamp: Date;
readonly requestId?: string;
readonly userId?: string;
readonly appId?: string;
constructor(code: string, message: string, details?: Record<string, any>, requestId?: string, userId?: string, appId?: string);
toJSON(): MemoraiError;
}
//# sourceMappingURL=types.d.ts.map