@synapcores/sdk 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/client.ts","../src/subscription.ts","../src/collection.ts","../src/automl.ts","../src/nlp.ts","../src/recipes.ts","../src/schema.ts","../src/import.ts","../src/integrations.ts","../src/backup.ts","../src/errors.ts"],"sourcesContent":["/**\n * SynapCores Node.js/TypeScript SDK\n * \n * Official SDK for SynapCores AI-Native Database Management System.\n */\n\nexport { SynapCores } from './client';\nexport { Collection } from './collection';\nexport { AutoMLClient, AutoMLModel } from './automl';\nexport { NLPClient } from './nlp';\nexport { RecipeClient } from './recipes';\nexport { SchemaClient } from './schema';\nexport { ImportExportClient } from './import';\nexport { IntegrationClient } from './integrations';\nexport { BackupClient } from './backup';\nexport { Subscription } from './subscription';\n\n// Export types\nexport type {\n SynapCoresConfig,\n QueryResult,\n QueryColumn,\n EmbedOptions,\n // SQL Table Management Types\n ColumnDefinition,\n ColumnConstraint,\n TableConstraint,\n CreateTableOptions,\n AlterTableOptions,\n IndexDefinition,\n TableInfo,\n // Transaction Types\n TransactionOptions,\n TransactionContext,\n // Batch Operation Types\n BatchInsertOptions,\n BatchUpdateOptions,\n BatchDeleteOptions,\n BatchResult,\n // Advanced SQL Types\n PreparedStatement,\n PreparedStatementOptions,\n CTEDefinition,\n WindowFunctionOptions,\n // Vector Operation Types\n Vector,\n VectorArithmeticResult,\n VectorSimilarityResult,\n VectorSearchOptions,\n VectorSearchResult,\n HybridSearchOptions,\n KNNSearchOptions,\n RangeSearchOptions,\n // Performance and Monitoring Types\n QueryPerformance,\n ConnectionPool,\n // Authentication Types\n RegisterRequest,\n RegisterResponse,\n LoginRequest,\n LoginResponse,\n RefreshResponse,\n // API Key Management Types\n CreateAPIKeyRequest,\n CreateAPIKeyResponse,\n ListAPIKeysResponse,\n APIKeyInfo,\n APIKeyStats,\n // Query Execution Types\n ExecuteQueryRequest,\n BatchQueryRequest,\n BatchQueryResponse,\n BatchQueryResult,\n // Collection Management Types\n CreateCollectionRequest,\n CreateCollectionResponse,\n ListCollectionsResponse,\n CollectionInfo,\n CollectionFieldDefinition,\n CollectionIndexDefinition,\n CollectionSchemaDefinition,\n // Multimedia Types\n UploadMultimediaRequest,\n MultimediaInfo,\n ListMultimediaResponse,\n} from './types/client';\n\nexport type {\n Document,\n SearchResult,\n SearchOptions,\n QueryOptions,\n InsertResult,\n UpdateOptions,\n CollectionSchema,\n CollectionStats,\n} from './types/collection';\n\nexport type {\n ModelInfo,\n TrainOptions,\n PredictResult,\n EvaluationResult,\n AsyncTrainOptions,\n TrainingJob,\n TrainingMetrics,\n ListTrainingJobsOptions,\n} from './types/automl';\n\nexport type {\n NLPAnalysis,\n Sentiment,\n Entity,\n AnalyzeOptions,\n SummarizeOptions,\n} from './types/nlp';\n\nexport type {\n SubscriptionOptions,\n SubscriptionEvent,\n ChangeOperation,\n} from './types/subscription';\n\nexport type {\n Recipe,\n RecipeInfo,\n CreateRecipeOptions,\n ListRecipesOptions,\n ExecuteRecipeOptions,\n RecipeExecutionResult,\n GenerateRecipeOptions,\n GeneratedRecipe,\n RecipeParameter,\n} from './types/recipes';\n\nexport type {\n TableSchema,\n ColumnInfo,\n IndexInfo,\n RelationshipInfo,\n SchemaStatistics,\n ValidationResult,\n ForeignKeyReference,\n ConstraintInfo,\n ValidationError as SchemaValidationError,\n ValidationWarning,\n} from './types/schema';\n\nexport type {\n ImportOptions,\n ImportResult,\n ExportOptions,\n ExportResult,\n ImportJobStatus,\n ExportJobStatus,\n BulkImportOptions,\n BulkImportResult,\n DataValidationOptions,\n DataValidationResult,\n ImportError,\n ValidationError as ImportValidationError,\n ValidationWarning as ImportValidationWarning,\n} from './types/import';\n\nexport type {\n Integration,\n CreateIntegrationOptions,\n ListIntegrationsOptions,\n ExecuteIntegrationOptions,\n IntegrationExecutionResult,\n IntegrationWebhook,\n CreateWebhookOptions,\n IntegrationEvent,\n IntegrationLog,\n IntegrationStats,\n TestIntegrationOptions,\n TestIntegrationResult,\n IntegrationConfig,\n AuthConfig,\n OAuth2Config,\n RetryConfig,\n} from './types/integrations';\n\nexport type {\n Backup,\n BackupOptions,\n RestoreOptions,\n RestoreResult,\n BackupStatus,\n RestoreStatus,\n ListBackupsOptions,\n BackupSchedule,\n CreateScheduleOptions,\n BackupVerificationResult,\n BackupMetrics,\n StorageConfig,\n} from './types/backup';\n\n// Export errors\nexport {\n SynapCoresError,\n ConnectionError,\n AuthenticationError,\n ValidationError,\n NotFoundError,\n ServerError,\n TimeoutError,\n RateLimitError,\n SQLError,\n VectorError,\n TransactionError,\n BatchOperationError,\n} from './errors';\n\n// Export utilities\nexport { z } from 'zod';\n\n// Version\nexport const VERSION = '0.1.0';","/**\n * Main client for SynapCores SDK\n */\n\nimport axios, { AxiosInstance, AxiosError } from 'axios';\nimport { Collection } from './collection';\nimport { AutoMLClient } from './automl';\nimport { NLPClient } from './nlp';\nimport { RecipeClient } from './recipes';\nimport { SchemaClient } from './schema';\nimport { ImportExportClient } from './import';\nimport { IntegrationClient } from './integrations';\nimport { BackupClient } from './backup';\nimport {\n SynapCoresConfig,\n QueryResult,\n EmbedOptions,\n ColumnDefinition,\n CreateTableOptions,\n AlterTableOptions,\n IndexDefinition,\n TableInfo,\n TransactionOptions,\n TransactionContext,\n BatchInsertOptions,\n BatchUpdateOptions,\n BatchDeleteOptions,\n BatchResult,\n PreparedStatement,\n PreparedStatementOptions,\n CTEDefinition,\n WindowFunctionOptions,\n VectorArithmeticResult,\n VectorSimilarityResult,\n VectorSearchResult,\n HybridSearchOptions,\n KNNSearchOptions,\n RangeSearchOptions,\n RegisterRequest,\n RegisterResponse,\n LoginRequest,\n LoginResponse,\n RefreshResponse,\n CreateAPIKeyRequest,\n CreateAPIKeyResponse,\n ListAPIKeysResponse,\n APIKeyStats,\n ExecuteQueryRequest,\n BatchQueryRequest,\n BatchQueryResponse,\n CreateCollectionRequest,\n CreateCollectionResponse,\n ListCollectionsResponse,\n MultimediaInfo,\n ListMultimediaResponse,\n} from './types/client';\nimport {\n ConnectionError,\n AuthenticationError,\n ValidationError,\n NotFoundError,\n ServerError,\n RateLimitError,\n SynapCoresError,\n VectorError,\n} from './errors';\nimport { Document } from './types/collection';\n\nexport class SynapCores {\n private readonly config: Required<SynapCoresConfig>;\n private readonly httpClient: AxiosInstance;\n private readonly collectionsCache = new Map<string, Collection>();\n private currentTransaction: TransactionContext | null = null;\n private preparedStatements = new Map<string, PreparedStatement>();\n\n public readonly automl: AutoMLClient;\n public readonly nlp: NLPClient;\n public readonly recipes: RecipeClient;\n public readonly schema: SchemaClient;\n public readonly import: ImportExportClient;\n public readonly integrations: IntegrationClient;\n public readonly backup: BackupClient;\n\n constructor(config: SynapCoresConfig = {}) {\n this.config = {\n host: config.host || 'localhost',\n port: config.port || 8080,\n apiKey: config.apiKey || '',\n jwtToken: config.jwtToken || '',\n useHttps: config.useHttps || false,\n timeout: config.timeout || 30000,\n maxRetries: config.maxRetries || 3,\n rejectUnauthorized: config.rejectUnauthorized !== undefined ? config.rejectUnauthorized : true,\n };\n\n // Validate API key format if provided (accept both ak_prod_ and aidb_ formats)\n if (this.config.apiKey && !this.config.apiKey.startsWith('ak_') && !this.config.apiKey.startsWith('aidb_')) {\n throw new Error(\n \"Invalid API key format. API keys should start with 'ak_' or 'aidb_' prefix. \" +\n \"Please create a valid API key from your AIDB dashboard.\"\n );\n }\n\n const protocol = this.config.useHttps ? 'https' : 'http';\n const baseURL = `${protocol}://${this.config.host}:${this.config.port}/v1`;\n\n // For development with self-signed certificates\n const httpsAgent = this.config.useHttps && !this.config.rejectUnauthorized\n ? new (require('https').Agent)({ rejectUnauthorized: false })\n : undefined;\n\n // Determine authentication header\n const authHeader: Record<string, string> = {};\n if (this.config.jwtToken) {\n authHeader['Authorization'] = `Bearer ${this.config.jwtToken}`;\n } else if (this.config.apiKey) {\n // Use X-API-Key header for API keys (not Bearer)\n authHeader['X-API-Key'] = this.config.apiKey;\n }\n\n this.httpClient = axios.create({\n baseURL,\n timeout: this.config.timeout,\n headers: {\n 'Content-Type': 'application/json',\n 'User-Agent': 'synapcores-nodejs/0.1.0',\n ...authHeader,\n },\n ...(httpsAgent && { httpsAgent }),\n });\n\n // Add response interceptor for error handling\n this.httpClient.interceptors.response.use(\n (response) => response,\n (error) => this.handleError(error),\n );\n\n // Initialize sub-clients\n this.automl = new AutoMLClient(this);\n this.nlp = new NLPClient(this);\n this.recipes = new RecipeClient(this);\n this.schema = new SchemaClient(this);\n this.import = new ImportExportClient(this);\n this.integrations = new IntegrationClient(this);\n this.backup = new BackupClient(this);\n }\n\n private handleError(error: AxiosError): never {\n if (!error.response) {\n const message = error.code === 'ECONNREFUSED'\n ? `Failed to connect to SynapCores server at ${error.config?.baseURL}. Connection refused.`\n : `Failed to connect to SynapCores server: ${error.message}`;\n throw new ConnectionError(message);\n }\n\n const { status, data } = error.response;\n \n // Handle error format from database integration guide\n // Format: { error: { code, message, details, timestamp, requestId } }\n const errorData = data as any;\n const errorInfo = errorData?.error || errorData;\n const errorCode = errorInfo?.code;\n const errorMessage = errorInfo?.message || errorData?.message || 'An error occurred';\n const errorDetails = errorInfo?.details || errorData?.details || errorData;\n\n switch (status) {\n case 400:\n throw new ValidationError(\n errorMessage,\n errorDetails,\n );\n case 401:\n throw new AuthenticationError(\n errorMessage,\n errorDetails,\n );\n case 403:\n throw new AuthenticationError(\n errorMessage,\n errorDetails,\n );\n case 404:\n throw new NotFoundError(\n errorMessage,\n errorDetails,\n );\n case 409:\n throw new ValidationError(\n errorMessage,\n errorDetails,\n );\n case 413:\n throw new ValidationError(\n errorMessage || 'Payload too large',\n errorDetails,\n );\n case 422:\n throw new ValidationError(\n errorMessage,\n errorDetails?.errors || errorDetails,\n );\n case 429:\n const retryAfter = error.response.headers['retry-after'];\n throw new RateLimitError(\n errorMessage,\n retryAfter ? parseInt(retryAfter) : undefined,\n errorDetails,\n );\n case 500:\n throw new ServerError(\n errorMessage || 'Internal server error',\n errorDetails,\n );\n case 503:\n throw new ServerError(\n errorMessage || 'Service unavailable',\n errorDetails,\n );\n default:\n if (status >= 500) {\n throw new ServerError(\n errorMessage || `Server error: ${status}`,\n errorDetails,\n );\n }\n throw new SynapCoresError(\n errorMessage || `Unexpected error: ${status}`,\n errorCode || 'UNEXPECTED_ERROR',\n errorDetails,\n );\n }\n }\n\n /**\n * Create collection (legacy method for backward compatibility)\n */\n async createCollection(options: {\n name: string;\n schema?: Record<string, any>;\n [key: string]: any;\n }): Promise<Collection> {\n const request: CreateCollectionRequest = {\n name: options.name,\n description: options.description,\n schema: options.schema as any,\n };\n return this.createCollectionWithSchema(request);\n }\n\n /**\n * Create collection matching the database integration guide format\n */\n async createCollectionWithSchema(request: CreateCollectionRequest): Promise<Collection> {\n const { data } = await this.httpClient.post<CreateCollectionResponse>('/collections', {\n name: request.name,\n description: request.description,\n schema: request.schema,\n });\n \n const collection = new Collection(this, request.name, data.collection.schema);\n this.collectionsCache.set(request.name, collection);\n \n return collection;\n }\n\n async getCollection(name: string): Promise<Collection> {\n if (this.collectionsCache.has(name)) {\n return this.collectionsCache.get(name)!;\n }\n\n const { data } = await this.httpClient.get(`/collections/${name}`);\n \n const collection = new Collection(this, name, data.schema);\n this.collectionsCache.set(name, collection);\n \n return collection;\n }\n\n /**\n * List collections (legacy method for backward compatibility)\n */\n async listCollections(): Promise<string[]> {\n const result = await this.listCollectionsDetailed();\n return result.collections.map(c => c.name);\n }\n\n /**\n * List collections with detailed information matching the database integration guide format\n */\n async listCollectionsDetailed(options?: {\n page?: number;\n pageSize?: number;\n search?: string;\n sortBy?: string;\n sortOrder?: 'asc' | 'desc';\n }): Promise<ListCollectionsResponse> {\n const params = new URLSearchParams();\n if (options?.page) params.append('page', options.page.toString());\n if (options?.pageSize) params.append('pageSize', options.pageSize.toString());\n if (options?.search) params.append('search', options.search);\n if (options?.sortBy) params.append('sortBy', options.sortBy);\n if (options?.sortOrder) params.append('sortOrder', options.sortOrder);\n\n const { data } = await this.httpClient.get<ListCollectionsResponse>(\n `/collections${params.toString() ? `?${params.toString()}` : ''}`\n );\n return data;\n }\n \n async getDocuments(collectionName: string, page: number, pageSize: number): Promise<Document[]> {\n const { data } = await this.httpClient.get(\n `/collections/${collectionName}/documents?page=${page}&pageSize=${pageSize}`\n );\n return data;\n }\n\n async deleteCollection(name: string): Promise<void> {\n await this.httpClient.delete(`/collections/${name}`);\n this.collectionsCache.delete(name);\n }\n\n /**\n * Execute SQL query (legacy method for backward compatibility)\n * @deprecated Use executeQuery for new code\n */\n async sql(query: string, params?: Record<string, any>): Promise<QueryResult> {\n return this.executeQuery({\n sql: query,\n parameters: params ? Object.values(params) : [],\n });\n }\n\n /**\n * Execute SQL query matching the database integration guide format\n */\n async executeQuery(request: ExecuteQueryRequest): Promise<QueryResult> {\n const { data } = await this.httpClient.post('/query/execute', {\n sql: request.sql,\n parameters: request.parameters || [],\n max_rows: request.max_rows || 1000,\n timeout_secs: request.timeout_secs || 300,\n });\n\n return {\n columns: data.columns || [],\n rows: data.rows || [],\n rows_affected: data.rows_affected,\n execution_time_ms: data.execution_time_ms || 0,\n queryPlan: data.query_plan,\n };\n }\n\n /**\n * Execute batch queries\n */\n async executeBatchQueries(request: BatchQueryRequest): Promise<BatchQueryResponse> {\n const { data } = await this.httpClient.post('/query/execute/batch', {\n queries: request.queries,\n transactional: request.transactional || false,\n });\n\n return {\n results: data.results || [],\n total_execution_time_ms: data.total_execution_time_ms || 0,\n };\n }\n\n async embed(\n text: string | string[],\n options: EmbedOptions = {},\n ): Promise<number[] | number[][]> {\n const isBatch = Array.isArray(text);\n const texts = isBatch ? text : [text];\n\n const { data } = await this.httpClient.post('/ai/embed', {\n texts,\n model: options.model || 'default',\n });\n\n return isBatch ? data.embeddings : data.embeddings[0];\n }\n\n // Internal method for HTTP client access\n _getHttpClient(): AxiosInstance {\n return this.httpClient;\n }\n\n // =================================================================\n // TABLE MANAGEMENT OPERATIONS\n // =================================================================\n\n /**\n * Creates a new table with the specified columns and constraints\n * @param tableName - Name of the table to create\n * @param columns - Column definitions for the table\n * @param options - Additional table creation options\n * @returns Promise resolving to table creation result\n */\n async createTable(\n tableName: string,\n columns: ColumnDefinition[],\n options: CreateTableOptions = {}\n ): Promise<QueryResult> {\n let sql = `CREATE TABLE ${options.ifNotExists ? 'IF NOT EXISTS' : ''} ${tableName} (`;\n\n const columnDefs = columns.map(col => {\n let def = `${col.name} ${col.dataType}`;\n\n if (col.constraints) {\n for (const constraint of col.constraints) {\n switch (constraint.type) {\n case 'PRIMARY_KEY':\n def += ' PRIMARY KEY';\n break;\n case 'UNIQUE':\n def += ' UNIQUE';\n break;\n case 'NOT_NULL':\n def += ' NOT NULL';\n break;\n case 'CHECK':\n def += ` CHECK (${constraint.expression})`;\n break;\n case 'FOREIGN_KEY':\n def += ` REFERENCES ${constraint.referencedTable}(${constraint.referencedColumn})`;\n break;\n case 'DEFAULT':\n def += ` DEFAULT ${col.defaultValue}`;\n break;\n }\n }\n }\n\n return def;\n }).join(', ');\n\n sql += columnDefs;\n\n if (options.constraints) {\n const constraintDefs = options.constraints.map(constraint => {\n switch (constraint.type) {\n case 'PRIMARY_KEY':\n return `PRIMARY KEY (${constraint.columns.join(', ')})`;\n case 'UNIQUE':\n return `UNIQUE (${constraint.columns.join(', ')})`;\n case 'CHECK':\n return `CHECK (${constraint.expression})`;\n case 'FOREIGN_KEY':\n return `FOREIGN KEY (${constraint.columns.join(', ')}) REFERENCES ${constraint.referencedTable}(${constraint.referencedColumns?.join(', ')})`;\n default:\n return '';\n }\n }).filter(def => def);\n\n if (constraintDefs.length > 0) {\n sql += ', ' + constraintDefs.join(', ');\n }\n }\n\n sql += ')';\n\n if (options.partitionBy) {\n sql += ` PARTITION BY ${options.partitionBy.type} (${options.partitionBy.column})`;\n }\n\n return this.sql(sql);\n }\n\n /**\n * Alters an existing table structure\n * @param tableName - Name of the table to alter\n * @param alterOptions - Alteration options and parameters\n * @returns Promise resolving to alteration result\n */\n async alterTable(tableName: string, alterOptions: AlterTableOptions): Promise<QueryResult> {\n let sql = `ALTER TABLE ${tableName} `;\n\n switch (alterOptions.action) {\n case 'ADD_COLUMN':\n if (!alterOptions.columnDefinition) {\n throw new ValidationError('Column definition required for ADD_COLUMN');\n }\n sql += `ADD COLUMN ${alterOptions.columnDefinition.name} ${alterOptions.columnDefinition.dataType}`;\n break;\n case 'DROP_COLUMN':\n sql += `DROP COLUMN ${alterOptions.columnName}`;\n break;\n case 'RENAME_COLUMN':\n sql += `RENAME COLUMN ${alterOptions.columnName} TO ${alterOptions.newColumnName}`;\n break;\n case 'ALTER_COLUMN':\n sql += `ALTER COLUMN ${alterOptions.columnName} TYPE ${alterOptions.newDataType}`;\n break;\n case 'ADD_CONSTRAINT':\n if (!alterOptions.constraint) {\n throw new ValidationError('Constraint required for ADD_CONSTRAINT');\n }\n sql += `ADD CONSTRAINT ${alterOptions.constraint.type.toLowerCase()}_constraint`;\n break;\n case 'DROP_CONSTRAINT':\n sql += `DROP CONSTRAINT ${alterOptions.constraintName}`;\n break;\n }\n\n return this.sql(sql);\n }\n\n /**\n * Drops an existing table\n * @param tableName - Name of the table to drop\n * @param options - Drop options\n * @returns Promise resolving to drop result\n */\n async dropTable(tableName: string, options: { ifExists?: boolean; cascade?: boolean } = {}): Promise<QueryResult> {\n let sql = `DROP TABLE ${options.ifExists ? 'IF EXISTS' : ''} ${tableName}`;\n if (options.cascade) {\n sql += ' CASCADE';\n }\n return this.sql(sql);\n }\n\n /**\n * Describes a table structure including columns, constraints, and indexes\n * @param tableName - Name of the table to describe\n * @returns Promise resolving to table information\n */\n async describeTable(tableName: string): Promise<TableInfo> {\n const { data } = await this.httpClient.get(`/table/${tableName}/info`);\n return data;\n }\n\n /**\n * Lists all tables in the current database\n * @param pattern - Optional pattern to filter table names\n * @returns Promise resolving to array of table names\n */\n async showTables(pattern?: string): Promise<string[]> {\n const sql = pattern ? `SHOW TABLES LIKE '${pattern}'` : 'SHOW TABLES';\n const result = await this.sql(sql);\n return result.rows.map(row => Object.values(row)[0] as string);\n }\n\n // =================================================================\n // INDEX MANAGEMENT OPERATIONS\n // =================================================================\n\n /**\n * Creates an index on a table\n * @param indexDef - Index definition with name, table, columns, and options\n * @returns Promise resolving to index creation result\n */\n async createIndex(indexDef: IndexDefinition): Promise<QueryResult> {\n const columns = indexDef.columns.map(col => `${col.name} ${col.order || 'ASC'}`).join(', ');\n const sql = `CREATE ${indexDef.unique ? 'UNIQUE' : ''} INDEX ${indexDef.ifNotExists ? 'IF NOT EXISTS' : ''} ${indexDef.name} ON ${indexDef.tableName} (${columns})`;\n return this.sql(sql);\n }\n\n /**\n * Drops an existing index\n * @param indexName - Name of the index to drop\n * @param options - Drop options\n * @returns Promise resolving to drop result\n */\n async dropIndex(indexName: string, options: { ifExists?: boolean } = {}): Promise<QueryResult> {\n const sql = `DROP INDEX ${options.ifExists ? 'IF EXISTS' : ''} ${indexName}`;\n return this.sql(sql);\n }\n\n /**\n * Lists all indexes, optionally filtered by table name\n * @param tableName - Optional table name to filter indexes\n * @returns Promise resolving to array of index information\n */\n async showIndexes(tableName?: string): Promise<Array<{ name: string; table: string; columns: string[]; unique: boolean }>> {\n const sql = tableName ? `SHOW INDEXES FROM ${tableName}` : 'SHOW INDEXES';\n const result = await this.sql(sql);\n \n // Convert array rows to objects using column names\n const indexNameIdx = result.columns.findIndex(c => c.name === 'index_name' || c.name === 'name');\n const tableNameIdx = result.columns.findIndex(c => c.name === 'table_name' || c.name === 'table');\n const columnsIdx = result.columns.findIndex(c => c.name === 'columns' || c.name === 'column');\n const uniqueIdx = result.columns.findIndex(c => c.name === 'is_unique' || c.name === 'unique');\n \n return result.rows.map(row => {\n const indexName = indexNameIdx >= 0 ? row[indexNameIdx] : '';\n const table = tableNameIdx >= 0 ? row[tableNameIdx] : '';\n const columnsStr = columnsIdx >= 0 ? row[columnsIdx] : '';\n const isUnique = uniqueIdx >= 0 ? row[uniqueIdx] : false;\n \n return {\n name: String(indexName),\n table: String(table),\n columns: typeof columnsStr === 'string' ? columnsStr.split(',') : [],\n unique: Boolean(isUnique)\n };\n });\n }\n\n // =================================================================\n // TRANSACTION SUPPORT\n // =================================================================\n\n /**\n * Begins a new transaction\n * @param options - Transaction options including isolation level\n * @returns Promise resolving to transaction context\n */\n async beginTransaction(options: TransactionOptions = {}): Promise<TransactionContext> {\n if (this.currentTransaction) {\n throw new Error('Transaction already in progress');\n }\n\n let sql = 'BEGIN TRANSACTION';\n if (options.isolationLevel) {\n sql += ` ISOLATION LEVEL ${options.isolationLevel}`;\n }\n if (options.readOnly) {\n sql += ' READ ONLY';\n }\n\n await this.sql(sql);\n\n this.currentTransaction = {\n id: Math.random().toString(36).substring(7),\n startTime: new Date(),\n isolationLevel: options.isolationLevel || 'READ_COMMITTED',\n readOnly: options.readOnly || false\n };\n\n if (options.timeout) {\n setTimeout(() => {\n if (this.currentTransaction) {\n this.rollbackTransaction().catch(console.error);\n }\n }, options.timeout);\n }\n\n return this.currentTransaction;\n }\n\n /**\n * Commits the current transaction\n * @returns Promise resolving when transaction is committed\n */\n async commitTransaction(): Promise<void> {\n if (!this.currentTransaction) {\n throw new Error('No transaction in progress');\n }\n\n await this.sql('COMMIT');\n this.currentTransaction = null;\n }\n\n /**\n * Rolls back the current transaction\n * @returns Promise resolving when transaction is rolled back\n */\n async rollbackTransaction(): Promise<void> {\n if (!this.currentTransaction) {\n throw new Error('No transaction in progress');\n }\n\n await this.sql('ROLLBACK');\n this.currentTransaction = null;\n }\n\n /**\n * Gets the current transaction context\n * @returns Current transaction context or null if no transaction\n */\n getCurrentTransaction(): TransactionContext | null {\n return this.currentTransaction;\n }\n\n // =================================================================\n // BATCH OPERATIONS\n // =================================================================\n\n /**\n * Performs batch insert operations\n * @param options - Batch insert options with table, columns, and rows\n * @returns Promise resolving to batch operation result\n */\n async batchInsert(options: BatchInsertOptions): Promise<BatchResult> {\n const { data } = await this.httpClient.post('/batch/insert', {\n table_name: options.tableName,\n columns: options.columns,\n rows: options.rows,\n on_conflict: options.onConflict,\n batch_size: options.batchSize || 1000\n });\n\n return {\n totalProcessed: data.total_processed,\n successful: data.successful,\n failed: data.failed,\n errors: data.errors,\n tookMs: data.took_ms\n };\n }\n\n /**\n * Performs batch update operations\n * @param options - Batch update options with table and update conditions\n * @returns Promise resolving to batch operation result\n */\n async batchUpdate(options: BatchUpdateOptions): Promise<BatchResult> {\n const { data } = await this.httpClient.post('/batch/update', {\n table_name: options.tableName,\n updates: options.updates,\n batch_size: options.batchSize || 1000\n });\n\n return {\n totalProcessed: data.total_processed,\n successful: data.successful,\n failed: data.failed,\n errors: data.errors,\n tookMs: data.took_ms\n };\n }\n\n /**\n * Performs batch delete operations\n * @param options - Batch delete options with table and where conditions\n * @returns Promise resolving to batch operation result\n */\n async batchDelete(options: BatchDeleteOptions): Promise<BatchResult> {\n const { data } = await this.httpClient.post('/batch/delete', {\n table_name: options.tableName,\n where_conditions: options.whereConditions,\n batch_size: options.batchSize || 1000\n });\n\n return {\n totalProcessed: data.total_processed,\n successful: data.successful,\n failed: data.failed,\n errors: data.errors,\n tookMs: data.took_ms\n };\n }\n\n // =================================================================\n // ADVANCED SQL FEATURES\n // =================================================================\n\n /**\n * Prepares a SQL statement for repeated execution\n * @param sql - SQL statement to prepare\n * @param options - Preparation options\n * @returns Promise resolving to prepared statement\n */\n async prepareStatement(sql: string, options: PreparedStatementOptions = {}): Promise<PreparedStatement> {\n const { data } = await this.httpClient.post('/prepare', {\n sql,\n name: options.name,\n parameter_types: options.parameterTypes\n });\n\n const prepared: PreparedStatement = {\n id: data.statement_id,\n sql: sql,\n parameterCount: data.parameter_count\n };\n\n if (options.name) {\n this.preparedStatements.set(options.name, prepared);\n }\n\n return prepared;\n }\n\n /**\n * Executes a prepared statement with parameters\n * @param statementId - ID of the prepared statement or statement name\n * @param params - Parameters for the prepared statement\n * @returns Promise resolving to query result\n */\n async executePrepared(statementId: string, params: any[] = []): Promise<QueryResult> {\n // Check if it's a named statement\n if (this.preparedStatements.has(statementId)) {\n statementId = this.preparedStatements.get(statementId)!.id;\n }\n\n const { data } = await this.httpClient.post('/execute-prepared', {\n statement_id: statementId,\n parameters: params\n });\n\n return {\n columns: data.columns || [],\n rows: data.rows || [],\n rows_affected: data.rows_affected,\n execution_time_ms: data.execution_time_ms || data.took_ms || 0,\n queryPlan: data.query_plan\n };\n }\n\n /**\n * Deallocates a prepared statement\n * @param statementId - ID of the prepared statement or statement name\n * @returns Promise resolving when statement is deallocated\n */\n async deallocatePrepared(statementId: string): Promise<void> {\n if (this.preparedStatements.has(statementId)) {\n const prepared = this.preparedStatements.get(statementId)!;\n await this.httpClient.delete(`/prepare/${prepared.id}`);\n this.preparedStatements.delete(statementId);\n } else {\n await this.httpClient.delete(`/prepare/${statementId}`);\n }\n }\n\n /**\n * Executes a query with Common Table Expressions (CTEs)\n * @param ctes - Array of CTE definitions\n * @param mainQuery - Main query that uses the CTEs\n * @param params - Optional parameters for the query\n * @returns Promise resolving to query result\n */\n async queryWithCTEs(ctes: CTEDefinition[], mainQuery: string, params?: Record<string, any>): Promise<QueryResult> {\n const cteSQL = ctes.map(cte => {\n const columns = cte.columns ? `(${cte.columns.join(', ')})` : '';\n return `${cte.name}${columns} AS (${cte.query})`;\n }).join(', ');\n\n const sql = `WITH ${cteSQL} ${mainQuery}`;\n return this.sql(sql, params);\n }\n\n /**\n * Executes a query with window functions\n * @param selectQuery - Base SELECT query\n * @param windowFunctions - Array of window function definitions\n * @param params - Optional parameters for the query\n * @returns Promise resolving to query result\n */\n async queryWithWindowFunctions(\n selectQuery: string,\n windowFunctions: Array<{ alias: string; function: string; options: WindowFunctionOptions }>,\n params?: Record<string, any>\n ): Promise<QueryResult> {\n const windowClauses = windowFunctions.map(wf => {\n let clause = `${wf.function} OVER (`;\n\n if (wf.options.partitionBy) {\n clause += `PARTITION BY ${wf.options.partitionBy.join(', ')}`;\n }\n\n if (wf.options.orderBy) {\n const orderBy = wf.options.orderBy.map(order => `${order.column} ${order.direction}`).join(', ');\n clause += ` ORDER BY ${orderBy}`;\n }\n\n if (wf.options.frame) {\n clause += ` ${wf.options.frame.type} BETWEEN ${wf.options.frame.start}`;\n if (wf.options.frame.end) {\n clause += ` AND ${wf.options.frame.end}`;\n }\n }\n\n clause += `) AS ${wf.alias}`;\n return clause;\n }).join(', ');\n\n const sql = `${selectQuery}, ${windowClauses}`;\n return this.sql(sql, params);\n }\n\n /**\n * Performs JSON operations on JSON/JSONB columns\n * @param tableName - Table containing JSON data\n * @param jsonColumn - Name of the JSON column\n * @param operation - JSON operation to perform\n * @param path - JSON path for the operation\n * @param value - Value for update operations\n * @param whereClause - Optional WHERE clause\n * @returns Promise resolving to query result\n */\n async jsonQuery(\n tableName: string,\n jsonColumn: string,\n operation: 'extract' | 'update' | 'delete' | 'contains',\n path: string,\n value?: any,\n whereClause?: string\n ): Promise<QueryResult> {\n let sql: string;\n\n switch (operation) {\n case 'extract':\n sql = `SELECT ${jsonColumn}->>'${path}' as extracted_value FROM ${tableName}`;\n break;\n case 'update':\n sql = `UPDATE ${tableName} SET ${jsonColumn} = jsonb_set(${jsonColumn}, '{${path}}', '${JSON.stringify(value)}')`;\n break;\n case 'delete':\n sql = `UPDATE ${tableName} SET ${jsonColumn} = ${jsonColumn} - '${path}'`;\n break;\n case 'contains':\n sql = `SELECT * FROM ${tableName} WHERE ${jsonColumn} @> '{\"${path}\": ${JSON.stringify(value)}}'`;\n break;\n }\n\n if (whereClause && operation !== 'contains') {\n sql += ` WHERE ${whereClause}`;\n }\n\n return this.sql(sql);\n }\n\n // =================================================================\n // VECTOR OPERATIONS\n // =================================================================\n\n /**\n * Performs vector addition\n * @param vector1 - First vector\n * @param vector2 - Second vector\n * @returns Promise resolving to vector addition result\n */\n async vectorAdd(vector1: number[], vector2: number[]): Promise<VectorArithmeticResult> {\n if (vector1.length !== vector2.length) {\n throw new VectorError('Vector dimensions must match', 'DIMENSION_MISMATCH');\n }\n\n const { data } = await this.httpClient.post('/vectors/add', {\n vector1,\n vector2\n });\n\n return {\n result: { values: data.result, dimensions: data.result.length },\n operation: 'addition',\n tookMs: data.took_ms\n };\n }\n\n /**\n * Performs vector subtraction\n * @param vector1 - First vector (minuend)\n * @param vector2 - Second vector (subtrahend)\n * @returns Promise resolving to vector subtraction result\n */\n async vectorSubtract(vector1: number[], vector2: number[]): Promise<VectorArithmeticResult> {\n if (vector1.length !== vector2.length) {\n throw new VectorError('Vector dimensions must match', 'DIMENSION_MISMATCH');\n }\n\n const { data } = await this.httpClient.post('/vectors/subtract', {\n vector1,\n vector2\n });\n\n return {\n result: { values: data.result, dimensions: data.result.length },\n operation: 'subtraction',\n tookMs: data.took_ms\n };\n }\n\n /**\n * Performs scalar multiplication on a vector\n * @param vector - Input vector\n * @param scalar - Scalar value to multiply by\n * @returns Promise resolving to scalar multiplication result\n */\n async vectorScalarMultiply(vector: number[], scalar: number): Promise<VectorArithmeticResult> {\n const { data } = await this.httpClient.post('/vectors/scalar-multiply', {\n vector,\n scalar\n });\n\n return {\n result: { values: data.result, dimensions: data.result.length },\n operation: 'scalar_multiplication',\n tookMs: data.took_ms\n };\n }\n\n /**\n * Calculates the dot product of two vectors\n * @param vector1 - First vector\n * @param vector2 - Second vector\n * @returns Promise resolving to dot product result\n */\n async vectorDotProduct(vector1: number[], vector2: number[]): Promise<{ dotProduct: number; tookMs: number }> {\n if (vector1.length !== vector2.length) {\n throw new VectorError('Vector dimensions must match', 'DIMENSION_MISMATCH');\n }\n\n const { data } = await this.httpClient.post('/vectors/dot-product', {\n vector1,\n vector2\n });\n\n return {\n dotProduct: data.dot_product,\n tookMs: data.took_ms\n };\n }\n\n /**\n * Calculates cosine similarity between two vectors\n * @param vector1 - First vector\n * @param vector2 - Second vector\n * @returns Promise resolving to cosine similarity result\n */\n async cosineSimilarity(vector1: number[], vector2: number[]): Promise<VectorSimilarityResult> {\n if (vector1.length !== vector2.length) {\n throw new VectorError('Vector dimensions must match', 'DIMENSION_MISMATCH');\n }\n\n const { data } = await this.httpClient.post('/vectors/cosine-similarity', {\n vector1,\n vector2\n });\n\n return {\n similarity: data.similarity,\n function: 'cosine',\n tookMs: data.took_ms\n };\n }\n\n /**\n * Calculates L2 (Euclidean) distance between two vectors\n * @param vector1 - First vector\n * @param vector2 - Second vector\n * @returns Promise resolving to L2 distance result\n */\n async l2Distance(vector1: number[], vector2: number[]): Promise<VectorSimilarityResult> {\n if (vector1.length !== vector2.length) {\n throw new VectorError('Vector dimensions must match', 'DIMENSION_MISMATCH');\n }\n\n const { data } = await this.httpClient.post('/vectors/l2-distance', {\n vector1,\n vector2\n });\n\n return {\n distance: data.distance,\n similarity: data.distance, // Include similarity for compatibility\n function: 'l2',\n tookMs: data.took_ms\n };\n }\n\n /**\n * Calculates inner product between two vectors\n * @param vector1 - First vector\n * @param vector2 - Second vector\n * @returns Promise resolving to inner product result\n */\n async innerProduct(vector1: number[], vector2: number[]): Promise<VectorSimilarityResult> {\n if (vector1.length !== vector2.length) {\n throw new VectorError('Vector dimensions must match', 'DIMENSION_MISMATCH');\n }\n\n const { data } = await this.httpClient.post('/vectors/inner-product', {\n vector1,\n vector2\n });\n\n return {\n similarity: data.inner_product,\n function: 'inner_product',\n tookMs: data.took_ms\n };\n }\n\n /**\n * Performs K-nearest neighbors vector search\n * @param options - KNN search options\n * @returns Promise resolving to KNN search results\n */\n async knnSearch(options: KNNSearchOptions): Promise<VectorSearchResult[]> {\n const { data } = await this.httpClient.post('/vectors/knn-search', {\n query_vector: options.queryVector,\n k: options.k,\n table_name: options.tableName,\n vector_column: options.vectorColumn,\n metadata_columns: options.metadataColumns,\n filter: options.filter\n });\n\n return data.results.map((result: any) => ({\n id: result.id,\n vector: result.vector,\n similarity: result.similarity,\n distance: result.distance,\n metadata: result.metadata\n }));\n }\n\n /**\n * Performs range-based vector similarity search\n * @param options - Range search options\n * @returns Promise resolving to range search results\n */\n async rangeSearch(options: RangeSearchOptions): Promise<VectorSearchResult[]> {\n const { data } = await this.httpClient.post('/vectors/range-search', {\n query_vector: options.queryVector,\n threshold: options.threshold,\n table_name: options.tableName,\n vector_column: options.vectorColumn,\n metadata_columns: options.metadataColumns,\n filter: options.filter,\n max_results: options.maxResults\n });\n\n return data.results.map((result: any) => ({\n id: result.id,\n vector: result.vector,\n similarity: result.similarity,\n distance: result.distance,\n metadata: result.metadata\n }));\n }\n\n /**\n * Performs hybrid search combining vector similarity and SQL filtering\n * @param options - Hybrid search options\n * @returns Promise resolving to hybrid search results\n */\n async hybridSearch(options: HybridSearchOptions): Promise<VectorSearchResult[]> {\n const { data } = await this.httpClient.post('/vectors/hybrid-search', {\n vector: options.vector,\n text_query: options.textQuery,\n sql_filter: options.sqlFilter,\n k: options.k,\n threshold: options.threshold,\n metric: options.metric,\n filter: options.filter,\n weights: options.weights\n });\n\n return data.results.map((result: any) => ({\n id: result.id,\n vector: result.vector,\n similarity: result.similarity,\n distance: result.distance,\n metadata: result.metadata\n }));\n }\n\n /**\n * Normalizes a vector to unit length\n * @param vector - Input vector to normalize\n * @returns Promise resolving to normalized vector\n */\n async normalizeVector(vector: number[]): Promise<VectorArithmeticResult> {\n const { data } = await this.httpClient.post('/vectors/normalize', {\n vector\n });\n\n return {\n result: { values: data.result, dimensions: data.result.length },\n operation: 'normalization',\n tookMs: data.took_ms\n };\n }\n\n /**\n * Calculates the magnitude (length) of a vector\n * @param vector - Input vector\n * @returns Promise resolving to vector magnitude\n */\n async vectorMagnitude(vector: number[]): Promise<{ magnitude: number; tookMs: number }> {\n const { data } = await this.httpClient.post('/vectors/magnitude', {\n vector\n });\n\n return {\n magnitude: data.magnitude,\n tookMs: data.took_ms\n };\n }\n\n // =================================================================\n // AUTHENTICATION & USER MANAGEMENT\n // =================================================================\n\n /**\n * Register a new user\n */\n async registerUser(request: RegisterRequest): Promise<RegisterResponse> {\n const { data } = await this.httpClient.post<RegisterResponse>('/auth/register', {\n username: request.username,\n email: request.email,\n password: request.password,\n });\n return data;\n }\n\n /**\n * Login with username and password\n */\n async login(request: LoginRequest): Promise<LoginResponse> {\n const { data } = await this.httpClient.post<LoginResponse>('/auth/login', {\n username: request.username,\n password: request.password,\n });\n \n // Update JWT token in config if login successful\n if (data.access_token) {\n this.config.jwtToken = data.access_token;\n // Update HTTP client headers\n this.httpClient.defaults.headers['Authorization'] = `Bearer ${data.access_token}`;\n // Remove API key header if present\n delete this.httpClient.defaults.headers['X-API-Key'];\n }\n \n return data;\n }\n\n /**\n * Refresh JWT token\n */\n async refreshToken(): Promise<RefreshResponse> {\n const { data } = await this.httpClient.post<RefreshResponse>('/auth/refresh');\n \n // Update JWT token in config\n if (data.access_token) {\n this.config.jwtToken = data.access_token;\n this.httpClient.defaults.headers['Authorization'] = `Bearer ${data.access_token}`;\n delete this.httpClient.defaults.headers['X-API-Key'];\n }\n \n return data;\n }\n\n /**\n * Set JWT token manually (useful after login)\n */\n setJWTToken(token: string): void {\n this.config.jwtToken = token;\n this.httpClient.defaults.headers['Authorization'] = `Bearer ${token}`;\n delete this.httpClient.defaults.headers['X-API-Key'];\n }\n\n /**\n * Clear authentication (logout)\n */\n logout(): void {\n this.config.jwtToken = '';\n delete this.httpClient.defaults.headers['Authorization'];\n delete this.httpClient.defaults.headers['X-API-Key'];\n }\n\n // =================================================================\n // API KEY MANAGEMENT\n // =================================================================\n\n /**\n * Create a new API key\n */\n async createAPIKey(request: CreateAPIKeyRequest): Promise<CreateAPIKeyResponse> {\n const { data } = await this.httpClient.post<CreateAPIKeyResponse>('/api-keys', {\n name: request.name,\n permission: request.permission,\n expires_in_days: request.expires_in_days,\n });\n return data;\n }\n\n /**\n * List all API keys\n */\n async listAPIKeys(): Promise<ListAPIKeysResponse> {\n const { data } = await this.httpClient.get<ListAPIKeysResponse>('/api-keys');\n return data;\n }\n\n /**\n * Get API key statistics\n */\n async getAPIKeyStats(keyId: string): Promise<APIKeyStats> {\n const { data } = await this.httpClient.get<APIKeyStats>(`/api-keys/${keyId}/stats`);\n return data;\n }\n\n /**\n * Revoke (delete) an API key\n */\n async revokeAPIKey(keyId: string): Promise<void> {\n await this.httpClient.delete(`/api-keys/${keyId}`);\n }\n\n // =================================================================\n // MULTIMEDIA MANAGEMENT\n // =================================================================\n\n /**\n * Upload multimedia file to a document\n */\n async uploadMultimedia(\n collection: string,\n documentId: string,\n file: File | Blob | Buffer,\n metadata?: Record<string, any>\n ): Promise<MultimediaInfo> {\n // Dynamic import to handle both Node.js and browser environments\n let FormDataClass: any;\n try {\n // Try Node.js form-data first\n FormDataClass = require('form-data');\n } catch {\n // Fallback to browser FormData\n FormDataClass = FormData;\n }\n \n const formData = new FormDataClass();\n \n // Append file - handle Buffer for Node.js\n if (Buffer.isBuffer(file)) {\n formData.append('file', file, { filename: 'upload' });\n } else {\n formData.append('file', file);\n }\n \n if (metadata) {\n formData.append('metadata', JSON.stringify(metadata));\n }\n\n const headers: Record<string, string> = {};\n // form-data has getHeaders() method in Node.js\n if (typeof formData.getHeaders === 'function') {\n Object.assign(headers, formData.getHeaders());\n }\n\n const { data } = await this.httpClient.post<MultimediaInfo>(\n `/multimedia/${collection}/documents/${documentId}/multimedia`,\n formData,\n {\n headers,\n }\n );\n return data;\n }\n\n /**\n * Get multimedia file URL (for viewing/downloading)\n */\n getMultimediaUrl(collection: string, documentId: string, multimediaId: string, download = false): string {\n const protocol = this.config.useHttps ? 'https' : 'http';\n const baseUrl = `${protocol}://${this.config.host}:${this.config.port}/v1`;\n return `${baseUrl}/multimedia/${collection}/documents/${documentId}/multimedia/${multimediaId}${download ? '?download=true' : ''}`;\n }\n\n /**\n * Get multimedia thumbnail URL\n */\n getMultimediaThumbnailUrl(collection: string, documentId: string, multimediaId: string): string {\n const protocol = this.config.useHttps ? 'https' : 'http';\n const baseUrl = `${protocol}://${this.config.host}:${this.config.port}/v1`;\n return `${baseUrl}/multimedia/${collection}/documents/${documentId}/multimedia/${multimediaId}/thumbnail`;\n }\n\n /**\n * List multimedia files in a document\n */\n async listMultimedia(\n collection: string,\n documentId: string,\n limit = 50,\n offset = 0\n ): Promise<ListMultimediaResponse> {\n const { data } = await this.httpClient.get<ListMultimediaResponse>(\n `/multimedia/${collection}/documents/${documentId}/multimedia?limit=${limit}&offset=${offset}`\n );\n return data;\n }\n\n /**\n * Get multimedia file information\n */\n async getMultimedia(\n collection: string,\n documentId: string,\n multimediaId: string\n ): Promise<MultimediaInfo> {\n const { data } = await this.httpClient.get<MultimediaInfo>(\n `/multimedia/${collection}/documents/${documentId}/multimedia/${multimediaId}`\n );\n return data;\n }\n\n /**\n * Delete multimedia file\n */\n async deleteMultimedia(collection: string, documentId: string, multimediaId: string): Promise<void> {\n await this.httpClient.delete(`/multimedia/${collection}/documents/${documentId}/multimedia/${multimediaId}`);\n }\n}","/**\n * Real-time subscription support for SynapCores SDK\n */\n\nimport WebSocket from 'ws';\nimport { EventEmitter } from 'events';\nimport { Collection } from './collection';\nimport { SubscriptionOptions, SubscriptionEvent } from './types/subscription';\nimport { Document } from './types/collection';\n\nexport class Subscription extends EventEmitter {\n private ws?: WebSocket;\n private running = false;\n private reconnectTimeout?: NodeJS.Timeout;\n private reconnectAttempts = 0;\n private readonly maxReconnectAttempts = 5;\n private readonly reconnectDelay = 1000;\n\n constructor(\n private readonly collection: Collection,\n private readonly options: SubscriptionOptions = {},\n ) {\n super();\n }\n\n async connect(): Promise<void> {\n if (this.running) {\n return;\n }\n\n this.running = true;\n await this.createConnection();\n }\n\n private async createConnection(): Promise<void> {\n const client = (this.collection as any).client;\n const protocol = client.config.useHttps ? 'wss' : 'ws';\n const url = `${protocol}://${client.config.host}:${client.config.port}/v1/ws`;\n\n const headers: Record<string, string> = {};\n if (client.config.apiKey) {\n headers['Authorization'] = `Bearer ${client.config.apiKey}`;\n }\n\n this.ws = new WebSocket(url, { headers });\n\n this.ws.on('open', () => {\n this.reconnectAttempts = 0;\n this.subscribe();\n });\n\n this.ws.on('message', (data) => {\n this.handleMessage(data.toString());\n });\n\n this.ws.on('error', (error) => {\n this.emit('error', error);\n });\n\n this.ws.on('close', () => {\n if (this.running) {\n this.scheduleReconnect();\n }\n });\n\n this.ws.on('ping', () => {\n this.ws?.pong();\n });\n }\n\n private subscribe(): void {\n const subscribeMessage = {\n type: 'subscribe',\n collection: this.collection.name,\n filter: this.options.filter || {},\n };\n\n this.ws?.send(JSON.stringify(subscribeMessage));\n }\n\n private handleMessage(message: string): void {\n try {\n const data = JSON.parse(message);\n\n if (data.type === 'error') {\n this.emit('error', new Error(data.message));\n return;\n }\n\n if (data.type === 'change') {\n const event: SubscriptionEvent = {\n operation: data.operation,\n collection: data.collection,\n document: data.document as Document,\n timestamp: new Date(data.timestamp),\n sequence: data.sequence,\n };\n\n this.emit('change', event);\n\n if (this.options.onChange) {\n Promise.resolve(this.options.onChange(event)).catch((error) => {\n this.emit('error', error);\n });\n }\n }\n } catch (error) {\n this.emit('error', error);\n }\n }\n\n private scheduleReconnect(): void {\n if (this.reconnectAttempts >= this.maxReconnectAttempts) {\n this.emit('error', new Error('Max reconnection attempts reached'));\n this.close();\n return;\n }\n\n this.reconnectAttempts++;\n const delay = this.reconnectDelay * Math.pow(2, this.reconnectAttempts - 1);\n\n this.reconnectTimeout = setTimeout(() => {\n this.createConnection().catch((error) => {\n this.emit('error', error);\n });\n }, delay);\n }\n\n async close(): Promise<void> {\n this.running = false;\n\n if (this.reconnectTimeout) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = undefined;\n }\n\n if (this.ws) {\n this.ws.close();\n this.ws = undefined;\n }\n\n this.removeAllListeners();\n }\n\n // Async iterator support\n async *[Symbol.asyncIterator](): AsyncIterator<SubscriptionEvent> {\n const events: SubscriptionEvent[] = [];\n let resolver: ((value: IteratorResult<SubscriptionEvent>) => void) | null = null;\n\n const handleChange = (event: SubscriptionEvent) => {\n if (resolver) {\n resolver({ done: false, value: event });\n resolver = null;\n } else {\n events.push(event);\n }\n };\n\n this.on('change', handleChange);\n\n try {\n while (this.running) {\n if (events.length > 0) {\n yield events.shift()!;\n } else {\n yield await new Promise<SubscriptionEvent>((resolve) => {\n resolver = (result) => {\n if (!result.done) {\n resolve(result.value);\n }\n };\n });\n }\n }\n } finally {\n this.off('change', handleChange);\n }\n }\n}","/**\n * Collection class for SynapCores SDK\n */\n\nimport { SynapCores } from './client';\nimport { Subscription } from './subscription';\nimport {\n Document,\n SearchResult,\n SearchOptions,\n VectorSearchOptions,\n QueryOptions,\n InsertResult,\n UpdateOptions,\n CollectionStats,\n IndexOptions,\n} from './types/collection';\nimport { SubscriptionOptions } from './types/subscription';\n\nexport class Collection {\n constructor(\n private readonly client: SynapCores,\n public readonly name: string,\n public readonly schema?: Record<string, any>,\n ) {}\n\n private get basePath(): string {\n return `/collections/${this.name}`;\n }\n\n async insert(\n documents: Record<string, any> | Record<string, any>[],\n _autoEmbed = true,\n ): Promise<InsertResult> {\n const isSingle = !Array.isArray(documents);\n const docs = isSingle ? [documents] : documents;\n\n if (isSingle) {\n // Single document insert - use /documents endpoint\n const { data } = await this.client._getHttpClient().post(\n `${this.basePath}/documents`,\n documents, // Send the document directly as the body\n );\n return {\n ids: [data.id],\n inserted: 1,\n };\n } else {\n // Bulk insert - use /documents/bulk endpoint\n // Format documents for the bulk endpoint\n // Because of #[serde(flatten)], we need to spread the document fields at root level\n const formattedDocs = docs.map(doc => ({\n ...doc, // Spread document fields at root level\n id: null // Optional ID field\n }));\n\n const bulkUrl = `${this.basePath}/documents/bulk`;\n console.log('Calling bulk insert endpoint:', bulkUrl);\n console.log('Payload:', JSON.stringify({ documents: formattedDocs }, null, 2));\n\n const { data } = await this.client._getHttpClient().post(\n bulkUrl,\n {\n documents: formattedDocs,\n },\n );\n\n return {\n ids: data.ids || [],\n inserted: data.inserted || docs.length,\n };\n }\n }\n\n async get(documentId: string): Promise<Document | null> {\n try {\n const { data } = await this.client._getHttpClient().get(\n `${this.basePath}/documents/${documentId}`,\n );\n return data;\n } catch (error: any) {\n if (error.code === 'NOT_FOUND') {\n return null;\n }\n throw error;\n }\n }\n\n async update(\n documentId: string,\n data: Record<string, any>,\n options: UpdateOptions = {},\n ): Promise<Document> {\n const response = await this.client._getHttpClient().patch(\n `${this.basePath}/documents/${documentId}`,\n {\n data,\n merge: options.merge !== false,\n },\n );\n return response.data;\n }\n\n async delete(documentId: string | string[]): Promise<{ deleted: number }> {\n const ids = Array.isArray(documentId) ? documentId : [documentId];\n \n const { data } = await this.client._getHttpClient().request({\n method: 'DELETE',\n url: `${this.basePath}/documents`,\n data: { ids },\n });\n\n return { deleted: data.deleted };\n }\n\n async search(options: SearchOptions): Promise<SearchResult> {\n // According to AIDB gateway, the search endpoint expects:\n // - query: JSON filter conditions\n // - limit: number of results\n // - offset: pagination offset\n const searchUrl = `${this.basePath}/search`;\n console.log('Calling search endpoint:', searchUrl);\n console.log('Request body:', {\n query: options.filter || {},\n limit: options.topK || 10,\n offset: options.offset || 0,\n });\n\n const { data } = await this.client._getHttpClient().post(\n searchUrl,\n {\n query: options.filter || {}, // Use filter as the query\n limit: options.topK || 10,\n offset: options.offset || 0,\n },\n );\n\n return {\n documents: data.documents || data, // Handle different response formats\n total: data.total,\n tookMs: data.took_ms,\n nextOffset: data.next_offset,\n };\n }\n\n async vectorSearch(options: VectorSearchOptions): Promise<SearchResult> {\n const { data } = await this.client._getHttpClient().post(\n `${this.basePath}/vector_search`,\n {\n vector: options.vector,\n field: options.field || 'embedding',\n top_k: options.topK || 10,\n filter: options.filter,\n distance_metric: options.distanceMetric || 'cosine',\n include_metadata: options.includeMetadata,\n },\n );\n\n return {\n documents: data.documents,\n total: data.total,\n tookMs: data.took_ms,\n };\n }\n\n async query(options: QueryOptions = {}): Promise<SearchResult> {\n const { data } = await this.client._getHttpClient().post(\n `${this.basePath}/query`,\n {\n filter: options.filter || {},\n limit: options.limit || 100,\n offset: options.offset || 0,\n sort: options.sort,\n projection: options.projection,\n },\n );\n\n return {\n documents: data.documents,\n total: data.total,\n tookMs: data.took_ms,\n nextOffset: data.next_offset,\n };\n }\n\n async count(filter?: Record<string, any>): Promise<number> {\n const { data } = await this.client._getHttpClient().post(\n `${this.basePath}/count`,\n { filter: filter || {} },\n );\n return data.count;\n }\n\n async stats(): Promise<CollectionStats> {\n const { data } = await this.client._getHttpClient().get(\n `${this.basePath}/stats`,\n );\n\n return {\n name: data.name,\n documentCount: data.document_count,\n sizeBytes: data.size_bytes,\n indexCount: data.index_count,\n createdAt: new Date(data.created_at),\n updatedAt: new Date(data.updated_at),\n };\n }\n\n async createIndex(options: IndexOptions): Promise<{ created: boolean }> {\n const { data } = await this.client._getHttpClient().post(\n `${this.basePath}/indexes`,\n {\n field: options.field,\n type: options.type || 'btree',\n options: options.options || {},\n },\n );\n return { created: data.created };\n }\n\n async dropIndex(field: string): Promise<{ dropped: boolean }> {\n const { data } = await this.client._getHttpClient().delete(\n `${this.basePath}/indexes/${field}`,\n );\n return { dropped: data.dropped };\n }\n\n async subscribe(options: SubscriptionOptions = {}): Promise<Subscription> {\n const subscription = new Subscription(this, options);\n await subscription.connect();\n return subscription;\n }\n}","/**\n * AutoML client for SynapCores SDK\n */\n\nimport { SynapCores } from './client';\nimport {\n ModelInfo,\n TrainOptions,\n EvaluationResult,\n AsyncTrainOptions,\n TrainingJob,\n TrainingMetrics,\n ListTrainingJobsOptions,\n} from './types/automl';\n\nexport class AutoMLModel {\n constructor(\n private readonly client: AutoMLClient,\n public readonly info: ModelInfo,\n ) {}\n\n get id(): string {\n return this.info.id;\n }\n\n get name(): string {\n return this.info.name;\n }\n\n async predict(\n data: Record<string, any> | Record<string, any>[],\n ): Promise<any | any[]> {\n const isSingle = !Array.isArray(data);\n const inputs = isSingle ? [data] : data;\n\n const response = await this.client.synapCores._getHttpClient().post(\n '/ai/predict',\n {\n model_id: this.id,\n inputs,\n },\n );\n\n const predictions = response.data.predictions;\n return isSingle ? predictions[0] : predictions;\n }\n\n async evaluate(\n testData: string | Record<string, any>[],\n target?: string,\n ): Promise<EvaluationResult> {\n const payload: any = {\n model_id: this.id,\n };\n\n if (typeof testData === 'string') {\n payload.collection = testData;\n } else {\n payload.data = testData;\n if (target) {\n payload.target = target;\n }\n }\n\n const { data } = await this.client.synapCores._getHttpClient().post(\n '/ai/evaluate',\n payload,\n );\n\n return data;\n }\n\n async delete(): Promise<void> {\n await this.client.synapCores._getHttpClient().delete(\n `/ai/models/${this.id}`,\n );\n }\n}\n\nexport class AutoMLClient {\n constructor(public readonly synapCores: SynapCores) {}\n\n async train(options: TrainOptions): Promise<AutoMLModel> {\n const { data } = await this.synapCores._getHttpClient().post('/ai/train', {\n collection: options.collection,\n target: options.target,\n features: options.features,\n task: options.task || 'auto',\n name: options.name || `${options.collection}_${options.target}_model`,\n config: options.config || {},\n validation_split: options.validationSplit || 0.2,\n max_trials: options.maxTrials || 10,\n timeout_minutes: options.timeoutMinutes || 60,\n });\n\n const modelInfo: ModelInfo = {\n id: data.id,\n name: data.name,\n task: data.task,\n status: data.status,\n accuracy: data.accuracy,\n createdAt: new Date(data.created_at),\n updatedAt: data.updated_at ? new Date(data.updated_at) : undefined,\n config: data.config,\n };\n\n return new AutoMLModel(this, modelInfo);\n }\n\n async getModel(modelId: string): Promise<AutoMLModel> {\n const { data } = await this.synapCores._getHttpClient().get(\n `/ai/models/${modelId}`,\n );\n\n const modelInfo: ModelInfo = {\n id: data.id,\n name: data.name,\n task: data.task,\n status: data.status,\n accuracy: data.accuracy,\n createdAt: new Date(data.created_at),\n updatedAt: data.updated_at ? new Date(data.updated_at) : undefined,\n config: data.config,\n };\n\n return new AutoMLModel(this, modelInfo);\n }\n\n async listModels(filters?: {\n task?: string;\n status?: string;\n }): Promise<ModelInfo[]> {\n const { data } = await this.synapCores._getHttpClient().get('/ai/models', {\n params: filters,\n });\n\n return data.models.map((model: any) => ({\n id: model.id,\n name: model.name,\n task: model.task,\n status: model.status,\n accuracy: model.accuracy,\n createdAt: new Date(model.created_at),\n updatedAt: model.updated_at ? new Date(model.updated_at) : undefined,\n config: model.config,\n }));\n }\n\n /**\n * Start async training job\n */\n async trainAsync(options: AsyncTrainOptions): Promise<TrainingJob> {\n const { data } = await this.synapCores._getHttpClient().post('/ai/train/async', {\n collection: options.collection,\n target: options.target,\n features: options.features,\n task: options.task || 'auto',\n name: options.name || `${options.collection}_${options.target}_model`,\n config: options.config || {},\n validation_split: options.validationSplit || 0.2,\n max_trials: options.maxTrials || 10,\n timeout_minutes: options.timeoutMinutes || 60,\n callback_url: options.callback_url,\n webhook_url: options.webhook_url,\n });\n\n return {\n id: data.id || data.job_id,\n name: data.name,\n status: data.status,\n progress: data.progress || 0,\n phase: data.phase,\n task: data.task,\n current_trial: data.current_trial,\n total_trials: data.total_trials || options.maxTrials || 10,\n best_accuracy: data.best_accuracy,\n eta_ms: data.eta_ms || data.estimated_time_remaining_ms,\n error: data.error,\n started_at: new Date(data.started_at || Date.now()),\n completed_at: data.completed_at ? new Date(data.completed_at) : undefined,\n model_id: data.model_id,\n };\n }\n\n /**\n * Get training job status\n */\n async getTrainingJob(jobId: string): Promise<TrainingJob> {\n const { data } = await this.synapCores._getHttpClient().get(\n `/ai/train/jobs/${jobId}`\n );\n\n return {\n id: data.id || jobId,\n name: data.name,\n status: data.status,\n progress: data.progress || 0,\n phase: data.phase,\n task: data.task,\n current_trial: data.current_trial,\n total_trials: data.total_trials,\n best_accuracy: data.best_accuracy,\n eta_ms: data.eta_ms || data.estimated_time_remaining_ms,\n error: data.error,\n started_at: new Date(data.started_at),\n completed_at: data.completed_at ? new Date(data.completed_at) : undefined,\n model_id: data.model_id,\n };\n }\n\n /**\n * List training jobs\n */\n async listTrainingJobs(\n options: ListTrainingJobsOptions = {}\n ): Promise<TrainingJob[]> {\n const params = new URLSearchParams();\n if (options.status) params.append('status', options.status);\n if (options.page) params.append('page', options.page.toString());\n if (options.page_size) params.append('page_size', options.page_size.toString());\n\n const { data } = await this.synapCores._getHttpClient().get(\n `/ai/train/jobs?${params.toString()}`\n );\n\n return (data.jobs || data).map((job: any) => ({\n id: job.id,\n name: job.name,\n status: job.status,\n progress: job.progress || 0,\n phase: job.phase,\n task: job.task,\n current_trial: job.current_trial,\n total_trials: job.total_trials,\n best_accuracy: job.best_accuracy,\n eta_ms: job.eta_ms || job.estimated_time_remaining_ms,\n error: job.error,\n started_at: new Date(job.started_at),\n completed_at: job.completed_at ? new Date(job.completed_at) : undefined,\n model_id: job.model_id,\n }));\n }\n\n /**\n * Cancel a training job\n */\n async cancelTrainingJob(jobId: string): Promise<void> {\n await this.synapCores._getHttpClient().post(`/ai/train/jobs/${jobId}/cancel`);\n }\n\n /**\n * Get training metrics for a job\n */\n async getTrainingMetrics(jobId: string): Promise<TrainingMetrics[]> {\n const { data } = await this.synapCores._getHttpClient().get(\n `/ai/train/jobs/${jobId}/metrics`\n );\n\n return (data.metrics || data).map((metric: any) => ({\n trial: metric.trial,\n accuracy: metric.accuracy,\n loss: metric.loss,\n metrics: metric.metrics,\n timestamp: new Date(metric.timestamp),\n }));\n }\n\n /**\n * Wait for training job to complete\n */\n async waitForTrainingJob(\n jobId: string,\n options: {\n pollInterval?: number;\n timeout?: number;\n onProgress?: (job: TrainingJob) => void;\n } = {}\n ): Promise<AutoMLModel> {\n const pollInterval = options.pollInterval || 2000;\n const timeout = options.timeout || 3600000; // 1 hour default\n const startTime = Date.now();\n\n while (true) {\n const job = await this.getTrainingJob(jobId);\n\n if (options.onProgress) {\n options.onProgress(job);\n }\n\n if (job.status === 'completed') {\n if (!job.model_id) {\n throw new Error('Training completed but no model ID returned');\n }\n return await this.getModel(job.model_id);\n }\n\n if (job.status === 'failed') {\n throw new Error(`Training failed: ${job.error || 'Unknown error'}`);\n }\n\n if (job.status === 'cancelled') {\n throw new Error('Training was cancelled');\n }\n\n if (Date.now() - startTime > timeout) {\n throw new Error('Timeout waiting for training job to complete');\n }\n\n await new Promise((resolve) => setTimeout(resolve, pollInterval));\n }\n }\n}","/**\n * NLP client for SynapCores SDK\n */\n\nimport { SynapCores } from './client';\nimport {\n NLPAnalysis,\n Sentiment,\n Entity,\n AnalyzeOptions,\n SummarizeOptions,\n ClassifyOptions,\n} from './types/nlp';\n\nexport class NLPClient {\n constructor(private readonly synapCores: SynapCores) {}\n\n async analyze(options: AnalyzeOptions): Promise<NLPAnalysis | NLPAnalysis[]> {\n const isBatch = Array.isArray(options.text);\n const texts = isBatch ? options.text : [options.text];\n\n const { data } = await this.synapCores._getHttpClient().post('/ai/analyze', {\n texts,\n tasks: options.tasks || ['sentiment', 'entities', 'keywords'],\n language: options.language,\n });\n\n const results = data.results.map((r: any) => ({\n sentiment: r.sentiment\n ? {\n label: r.sentiment.label,\n score: r.sentiment.score,\n confidence: r.sentiment.confidence,\n }\n : undefined,\n entities: r.entities\n ? r.entities.map((e: any) => ({\n text: e.text,\n type: e.type,\n start: e.start,\n end: e.end,\n score: e.score,\n }))\n : undefined,\n summary: r.summary,\n keywords: r.keywords,\n language: r.language,\n }));\n\n return isBatch ? results : results[0];\n }\n\n async summarize(options: SummarizeOptions): Promise<string> {\n const { data } = await this.synapCores._getHttpClient().post('/ai/summarize', {\n text: options.text,\n max_length: options.maxLength || 150,\n min_length: options.minLength || 30,\n });\n\n return data.summary;\n }\n\n async extractEntities(\n text: string,\n entityTypes?: string[],\n ): Promise<Entity[]> {\n const { data } = await this.synapCores._getHttpClient().post('/ai/entities', {\n text,\n entity_types: entityTypes,\n });\n\n return data.entities.map((e: any) => ({\n text: e.text,\n type: e.type,\n start: e.start,\n end: e.end,\n score: e.score,\n }));\n }\n\n async sentiment(text: string | string[]): Promise<Sentiment | Sentiment[]> {\n const isBatch = Array.isArray(text);\n const texts = isBatch ? text : [text];\n\n const { data } = await this.synapCores._getHttpClient().post('/ai/sentiment', {\n texts,\n });\n\n const results = data.sentiments.map((s: any) => ({\n label: s.label,\n score: s.score,\n confidence: s.confidence,\n }));\n\n return isBatch ? results : results[0];\n }\n\n async classify(\n options: ClassifyOptions,\n ): Promise<Record<string, number> | Record<string, number>[]> {\n const isBatch = Array.isArray(options.text);\n const texts = isBatch ? options.text : [options.text];\n\n const { data } = await this.synapCores._getHttpClient().post('/ai/classify', {\n texts,\n categories: options.categories,\n multi_label: options.multiLabel || false,\n });\n\n return isBatch ? data.classifications : data.classifications[0];\n }\n}","/**\n * Recipe Management Client for SynapCores SDK\n */\n\nimport { SynapCores } from './client';\nimport {\n Recipe,\n RecipeInfo,\n CreateRecipeOptions,\n ListRecipesOptions,\n ExecuteRecipeOptions,\n RecipeExecutionResult,\n GenerateRecipeOptions,\n GeneratedRecipe,\n} from './types/recipes';\n\nexport class RecipeClient {\n constructor(private readonly synapCores: SynapCores) {}\n\n /**\n * Create a new recipe\n */\n async create(options: CreateRecipeOptions): Promise<Recipe> {\n const { data } = await this.synapCores._getHttpClient().post('/recipes', {\n name: options.name,\n description: options.description,\n category: options.category,\n content: options.content,\n tags: options.tags || [],\n parameters: options.parameters || [],\n });\n\n return {\n id: data.id,\n name: data.name,\n description: data.description,\n category: data.category,\n content: data.content,\n tags: data.tags || [],\n parameters: data.parameters || [],\n created_at: new Date(data.created_at),\n updated_at: new Date(data.updated_at),\n author: data.author,\n execution_count: data.execution_count,\n version: data.version,\n };\n }\n\n /**\n * List recipes with optional filters\n */\n async list(options: ListRecipesOptions = {}): Promise<RecipeInfo[]> {\n const params = new URLSearchParams();\n\n if (options.category) params.append('category', options.category);\n if (options.search) params.append('search', options.search);\n if (options.page) params.append('page', options.page.toString());\n if (options.page_size) params.append('page_size', options.page_size.toString());\n if (options.tags && options.tags.length > 0) {\n params.append('tags', options.tags.join(','));\n }\n\n const { data } = await this.synapCores._getHttpClient().get(\n `/recipes?${params.toString()}`\n );\n\n return (data.recipes || data).map((recipe: any) => ({\n id: recipe.id,\n name: recipe.name,\n description: recipe.description,\n category: recipe.category,\n tags: recipe.tags || [],\n created_at: new Date(recipe.created_at),\n updated_at: new Date(recipe.updated_at),\n author: recipe.author,\n execution_count: recipe.execution_count,\n }));\n }\n\n /**\n * Get a specific recipe by ID\n */\n async get(id: string): Promise<Recipe> {\n const { data } = await this.synapCores._getHttpClient().get(`/recipes/${id}`);\n\n return {\n id: data.id,\n name: data.name,\n description: data.description,\n category: data.category,\n content: data.content,\n tags: data.tags || [],\n parameters: data.parameters || [],\n created_at: new Date(data.created_at),\n updated_at: new Date(data.updated_at),\n author: data.author,\n execution_count: data.execution_count,\n version: data.version,\n };\n }\n\n /**\n * Update an existing recipe\n */\n async update(id: string, updates: Partial<CreateRecipeOptions>): Promise<Recipe> {\n const { data } = await this.synapCores._getHttpClient().put(`/recipes/${id}`, updates);\n\n return {\n id: data.id,\n name: data.name,\n description: data.description,\n category: data.category,\n content: data.content,\n tags: data.tags || [],\n parameters: data.parameters || [],\n created_at: new Date(data.created_at),\n updated_at: new Date(data.updated_at),\n author: data.author,\n execution_count: data.execution_count,\n version: data.version,\n };\n }\n\n /**\n * Delete a recipe\n */\n async delete(id: string): Promise<void> {\n await this.synapCores._getHttpClient().delete(`/recipes/${id}`);\n }\n\n /**\n * Execute a recipe\n */\n async execute(options: ExecuteRecipeOptions): Promise<RecipeExecutionResult> {\n const { data } = await this.synapCores._getHttpClient().post(\n `/recipes/${options.recipe}/execute`,\n {\n parameters: options.parameters || {},\n dry_run: options.dry_run || false,\n }\n );\n\n return {\n id: data.id || data.execution_id,\n success: data.success,\n results: data.results,\n error: data.error,\n execution_time_ms: data.execution_time_ms || data.took_ms,\n statements_executed: data.statements_executed || 0,\n };\n }\n\n /**\n * Generate a recipe using AI\n */\n async generate(options: GenerateRecipeOptions): Promise<GeneratedRecipe> {\n const { data } = await this.synapCores._getHttpClient().post('/ai/generate-recipe', {\n intent: options.intent,\n category: options.category,\n context: options.context,\n });\n\n return {\n name: data.name,\n description: data.description,\n content: data.content,\n };\n }\n\n /**\n * List available recipe categories\n */\n async listCategories(): Promise<string[]> {\n const { data } = await this.synapCores._getHttpClient().get('/recipes/categories');\n return data.categories || [];\n }\n}\n","/**\n * Schema Introspection Client for SynapCores SDK\n */\n\nimport { SynapCores } from './client';\nimport {\n TableInfo,\n TableSchema,\n ColumnInfo,\n IndexInfo,\n RelationshipInfo,\n SchemaStatistics,\n ValidationResult,\n} from './types/schema';\n\nexport class SchemaClient {\n constructor(private readonly synapCores: SynapCores) {}\n\n /**\n * List all tables in the database\n */\n async listTables(options: { includeSystem?: boolean } = {}): Promise<TableInfo[]> {\n const params = new URLSearchParams();\n if (options.includeSystem) {\n params.append('include_system', 'true');\n }\n\n const { data } = await this.synapCores._getHttpClient().get(\n `/schema/tables?${params.toString()}`\n );\n\n return (data.tables || data).map((table: any) => ({\n name: table.name,\n type: table.type || 'table',\n column_count: table.column_count || 0,\n row_count: table.row_count,\n size_bytes: table.size_bytes,\n created_at: table.created_at ? new Date(table.created_at) : undefined,\n updated_at: table.updated_at ? new Date(table.updated_at) : undefined,\n comment: table.comment,\n }));\n }\n\n /**\n * Get complete schema for a specific table\n */\n async getTable(tableName: string): Promise<TableSchema> {\n const { data } = await this.synapCores._getHttpClient().get(\n `/schema/tables/${tableName}`\n );\n\n return {\n table: {\n name: data.name,\n type: data.type || 'table',\n column_count: data.columns?.length || 0,\n row_count: data.row_count,\n size_bytes: data.size_bytes,\n created_at: data.created_at ? new Date(data.created_at) : undefined,\n updated_at: data.updated_at ? new Date(data.updated_at) : undefined,\n comment: data.comment,\n },\n columns: (data.columns || []).map((col: any) => ({\n name: col.name,\n data_type: col.data_type || col.type,\n nullable: col.nullable !== false,\n default_value: col.default_value || col.default,\n is_primary_key: col.is_primary_key || col.primary_key,\n is_unique: col.is_unique || col.unique,\n is_indexed: col.is_indexed || col.indexed,\n foreign_key: col.foreign_key,\n comment: col.comment,\n ordinal_position: col.ordinal_position || col.position,\n })),\n indexes: (data.indexes || []).map((idx: any) => ({\n name: idx.name,\n table: idx.table || tableName,\n type: idx.type || 'btree',\n columns: idx.columns || [],\n is_unique: idx.is_unique || idx.unique || false,\n is_primary: idx.is_primary || idx.primary || false,\n size_bytes: idx.size_bytes,\n created_at: idx.created_at ? new Date(idx.created_at) : undefined,\n })),\n constraints: data.constraints || [],\n relationships: (data.relationships || []).map((rel: any) => ({\n type: rel.type,\n from_table: rel.from_table || rel.source_table,\n from_column: rel.from_column || rel.source_column,\n to_table: rel.to_table || rel.target_table,\n to_column: rel.to_column || rel.target_column,\n name: rel.name,\n })),\n };\n }\n\n /**\n * Get columns for a specific table\n */\n async getColumns(tableName: string): Promise<ColumnInfo[]> {\n const schema = await this.getTable(tableName);\n return schema.columns;\n }\n\n /**\n * Get indexes for a specific table\n */\n async getIndexes(tableName: string): Promise<IndexInfo[]> {\n const schema = await this.getTable(tableName);\n return schema.indexes;\n }\n\n /**\n * Get all relationships in the database\n */\n async getRelationships(): Promise<RelationshipInfo[]> {\n const { data } = await this.synapCores._getHttpClient().get('/schema/relationships');\n\n return (data.relationships || data).map((rel: any) => ({\n type: rel.type,\n from_table: rel.from_table || rel.source_table,\n from_column: rel.from_column || rel.source_column,\n to_table: rel.to_table || rel.target_table,\n to_column: rel.to_column || rel.target_column,\n name: rel.name,\n }));\n }\n\n /**\n * Get schema statistics\n */\n async getStatistics(): Promise<SchemaStatistics> {\n const { data } = await this.synapCores._getHttpClient().get('/schema/statistics');\n\n return {\n table_count: data.table_count || 0,\n view_count: data.view_count || 0,\n index_count: data.index_count || 0,\n relationship_count: data.relationship_count || 0,\n total_size_bytes: data.total_size_bytes || 0,\n total_rows: data.total_rows || 0,\n version: data.version,\n analyzed_at: data.analyzed_at ? new Date(data.analyzed_at) : undefined,\n };\n }\n\n /**\n * Validate a schema definition\n */\n async validateSchema(schema: object): Promise<ValidationResult> {\n const { data } = await this.synapCores._getHttpClient().post('/schema/validate', {\n schema,\n });\n\n return {\n is_valid: data.is_valid || data.valid,\n errors: data.errors || [],\n warnings: data.warnings || [],\n };\n }\n\n /**\n * Compare two schemas\n */\n async compareSchemas(\n schema1: string | object,\n schema2: string | object\n ): Promise<{\n differences: any[];\n added: string[];\n removed: string[];\n modified: string[];\n }> {\n const { data } = await this.synapCores._getHttpClient().post('/schema/compare', {\n schema1,\n schema2,\n });\n\n return {\n differences: data.differences || [],\n added: data.added || [],\n removed: data.removed || [],\n modified: data.modified || [],\n };\n }\n\n /**\n * Generate SQL DDL for a table\n */\n async generateDDL(tableName: string): Promise<string> {\n const { data } = await this.synapCores._getHttpClient().get(\n `/schema/tables/${tableName}/ddl`\n );\n\n return data.ddl || data.sql;\n }\n\n /**\n * Analyze table and update statistics\n */\n async analyzeTable(tableName: string): Promise<void> {\n await this.synapCores._getHttpClient().post(`/schema/tables/${tableName}/analyze`);\n }\n}\n","/**\n * Data Import/Export Client for SynapCores SDK\n */\n\nimport { SynapCores } from './client';\nimport {\n ImportOptions,\n ImportResult,\n ExportOptions,\n ExportResult,\n ImportJobStatus,\n ExportJobStatus,\n BulkImportOptions,\n BulkImportResult,\n DataValidationOptions,\n DataValidationResult,\n} from './types/import';\n\nexport class ImportExportClient {\n constructor(private readonly synapCores: SynapCores) {}\n\n /**\n * Import data into a table\n */\n async import(options: ImportOptions): Promise<ImportResult> {\n const formData = new FormData();\n formData.append('table', options.table);\n formData.append('format', options.format);\n\n if (options.mode) formData.append('mode', options.mode);\n if (options.column_mapping) {\n formData.append('column_mapping', JSON.stringify(options.column_mapping));\n }\n if (options.skip_header !== undefined) {\n formData.append('skip_header', options.skip_header.toString());\n }\n if (options.delimiter) formData.append('delimiter', options.delimiter);\n if (options.batch_size) formData.append('batch_size', options.batch_size.toString());\n if (options.continue_on_error !== undefined) {\n formData.append('continue_on_error', options.continue_on_error.toString());\n }\n if (options.primary_keys) {\n formData.append('primary_keys', JSON.stringify(options.primary_keys));\n }\n\n // Handle data as file or direct content\n if (Buffer.isBuffer(options.data)) {\n formData.append('file', new Blob([options.data]), 'data');\n } else {\n formData.append('data', options.data);\n }\n\n const { data } = await this.synapCores._getHttpClient().post('/import', formData, {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n });\n\n return {\n id: data.id || data.job_id,\n success: data.success,\n rows_processed: data.rows_processed || 0,\n rows_imported: data.rows_imported || 0,\n rows_failed: data.rows_failed || 0,\n duration_ms: data.duration_ms || data.took_ms || 0,\n errors: data.errors || [],\n warnings: data.warnings || [],\n };\n }\n\n /**\n * Export data from a table or query\n */\n async export(options: ExportOptions): Promise<ExportResult> {\n const { data } = await this.synapCores._getHttpClient().post('/export', {\n source: options.source,\n format: options.format,\n destination: options.destination || 'response',\n columns: options.columns,\n filter: options.filter,\n order_by: options.order_by,\n limit: options.limit,\n include_header: options.include_header,\n delimiter: options.delimiter,\n compress: options.compress,\n });\n\n return {\n id: data.id || data.job_id,\n success: data.success,\n rows_exported: data.rows_exported || 0,\n duration_ms: data.duration_ms || data.took_ms || 0,\n file_path: data.file_path,\n data: data.data,\n size_bytes: data.size_bytes,\n download_url: data.download_url,\n expires_at: data.expires_at ? new Date(data.expires_at) : undefined,\n };\n }\n\n /**\n * Get import job status\n */\n async getImportStatus(jobId: string): Promise<ImportJobStatus> {\n const { data } = await this.synapCores._getHttpClient().get(`/import/${jobId}/status`);\n\n return {\n id: data.id || jobId,\n status: data.status,\n progress: data.progress || 0,\n phase: data.phase,\n rows_processed: data.rows_processed,\n eta_ms: data.eta_ms || data.estimated_time_remaining_ms,\n error: data.error,\n started_at: data.started_at ? new Date(data.started_at) : undefined,\n completed_at: data.completed_at ? new Date(data.completed_at) : undefined,\n };\n }\n\n /**\n * Get export job status\n */\n async getExportStatus(jobId: string): Promise<ExportJobStatus> {\n const { data } = await this.synapCores._getHttpClient().get(`/export/${jobId}/status`);\n\n return {\n id: data.id || jobId,\n status: data.status,\n progress: data.progress || 0,\n phase: data.phase,\n rows_exported: data.rows_exported,\n eta_ms: data.eta_ms || data.estimated_time_remaining_ms,\n error: data.error,\n started_at: data.started_at ? new Date(data.started_at) : undefined,\n completed_at: data.completed_at ? new Date(data.completed_at) : undefined,\n };\n }\n\n /**\n * Cancel an import job\n */\n async cancelImport(jobId: string): Promise<void> {\n await this.synapCores._getHttpClient().post(`/import/${jobId}/cancel`);\n }\n\n /**\n * Cancel an export job\n */\n async cancelExport(jobId: string): Promise<void> {\n await this.synapCores._getHttpClient().post(`/export/${jobId}/cancel`);\n }\n\n /**\n * Import data from multiple sources in bulk\n */\n async bulkImport(options: BulkImportOptions): Promise<BulkImportResult> {\n const { data } = await this.synapCores._getHttpClient().post('/import/bulk', {\n jobs: options.jobs,\n parallel: options.parallel || false,\n stop_on_error: options.stop_on_error || false,\n });\n\n return {\n id: data.id || data.bulk_id,\n success: data.success,\n results: data.results || [],\n total_rows_imported: data.total_rows_imported || 0,\n total_duration_ms: data.total_duration_ms || data.took_ms || 0,\n };\n }\n\n /**\n * Validate data before import\n */\n async validateData(options: DataValidationOptions): Promise<DataValidationResult> {\n const { data } = await this.synapCores._getHttpClient().post('/import/validate', {\n table: options.table,\n data: options.data,\n mode: options.mode || 'strict',\n check_foreign_keys: options.check_foreign_keys,\n check_unique: options.check_unique,\n });\n\n return {\n is_valid: data.is_valid || data.valid,\n errors: data.errors || [],\n warnings: data.warnings || [],\n rows_validated: data.rows_validated || options.data.length,\n };\n }\n\n /**\n * Get import template for a table\n */\n async getImportTemplate(\n tableName: string,\n format: 'csv' | 'json' = 'csv'\n ): Promise<string> {\n const { data } = await this.synapCores._getHttpClient().get(\n `/import/template/${tableName}?format=${format}`\n );\n\n return data.template || data.content || data;\n }\n\n /**\n * List import/export jobs\n */\n async listJobs(options: {\n type?: 'import' | 'export';\n status?: string;\n limit?: number;\n } = {}): Promise<Array<ImportJobStatus | ExportJobStatus>> {\n const params = new URLSearchParams();\n if (options.type) params.append('type', options.type);\n if (options.status) params.append('status', options.status);\n if (options.limit) params.append('limit', options.limit.toString());\n\n const { data } = await this.synapCores._getHttpClient().get(\n `/import/jobs?${params.toString()}`\n );\n\n return (data.jobs || data).map((job: any) => ({\n id: job.id,\n status: job.status,\n progress: job.progress || 0,\n phase: job.phase,\n rows_processed: job.rows_processed,\n rows_exported: job.rows_exported,\n eta_ms: job.eta_ms,\n error: job.error,\n started_at: job.started_at ? new Date(job.started_at) : undefined,\n completed_at: job.completed_at ? new Date(job.completed_at) : undefined,\n }));\n }\n\n /**\n * Download exported data\n */\n async downloadExport(jobId: string): Promise<Buffer> {\n const { data } = await this.synapCores._getHttpClient().get(`/export/${jobId}/download`, {\n responseType: 'arraybuffer',\n });\n\n return Buffer.from(data);\n }\n\n /**\n * Stream import data (for large files)\n */\n async streamImport(\n options: ImportOptions,\n onProgress?: (progress: ImportJobStatus) => void\n ): Promise<ImportResult> {\n // Start the import\n const result = await this.import(options);\n const jobId = result.id;\n\n // Poll for status if progress callback provided\n if (onProgress) {\n const pollInterval = setInterval(async () => {\n try {\n const status = await this.getImportStatus(jobId);\n onProgress(status);\n\n if (status.status === 'completed' || status.status === 'failed' || status.status === 'cancelled') {\n clearInterval(pollInterval);\n }\n } catch (error) {\n clearInterval(pollInterval);\n }\n }, 1000);\n }\n\n return result;\n }\n\n /**\n * Stream export data (for large datasets)\n */\n async streamExport(\n options: ExportOptions,\n onProgress?: (progress: ExportJobStatus) => void\n ): Promise<ExportResult> {\n // Start the export\n const result = await this.export(options);\n const jobId = result.id;\n\n // Poll for status if progress callback provided\n if (onProgress) {\n const pollInterval = setInterval(async () => {\n try {\n const status = await this.getExportStatus(jobId);\n onProgress(status);\n\n if (status.status === 'completed' || status.status === 'failed' || status.status === 'cancelled') {\n clearInterval(pollInterval);\n }\n } catch (error) {\n clearInterval(pollInterval);\n }\n }, 1000);\n }\n\n return result;\n }\n}\n","/**\n * Integration Management Client for SynapCores SDK\n */\n\nimport { SynapCores } from './client';\nimport {\n Integration,\n CreateIntegrationOptions,\n ListIntegrationsOptions,\n ExecuteIntegrationOptions,\n IntegrationExecutionResult,\n IntegrationWebhook,\n CreateWebhookOptions,\n IntegrationEvent,\n IntegrationLog,\n IntegrationStats,\n TestIntegrationOptions,\n TestIntegrationResult,\n} from './types/integrations';\n\nexport class IntegrationClient {\n constructor(private readonly synapCores: SynapCores) {}\n\n /**\n * Create a new integration\n */\n async create(options: CreateIntegrationOptions): Promise<Integration> {\n const { data } = await this.synapCores._getHttpClient().post('/integrations', {\n name: options.name,\n type: options.type,\n config: options.config,\n description: options.description,\n tags: options.tags || [],\n activate: options.activate || false,\n });\n\n return this.mapIntegration(data);\n }\n\n /**\n * List integrations with optional filters\n */\n async list(options: ListIntegrationsOptions = {}): Promise<Integration[]> {\n const params = new URLSearchParams();\n\n if (options.type) params.append('type', options.type);\n if (options.status) params.append('status', options.status);\n if (options.search) params.append('search', options.search);\n if (options.page) params.append('page', options.page.toString());\n if (options.page_size) params.append('page_size', options.page_size.toString());\n if (options.tags && options.tags.length > 0) {\n params.append('tags', options.tags.join(','));\n }\n\n const { data } = await this.synapCores._getHttpClient().get(\n `/integrations?${params.toString()}`\n );\n\n return (data.integrations || data).map((integration: any) =>\n this.mapIntegration(integration)\n );\n }\n\n /**\n * Get a specific integration by ID\n */\n async get(id: string): Promise<Integration> {\n const { data } = await this.synapCores._getHttpClient().get(`/integrations/${id}`);\n return this.mapIntegration(data);\n }\n\n /**\n * Update an existing integration\n */\n async update(\n id: string,\n updates: Partial<CreateIntegrationOptions>\n ): Promise<Integration> {\n const { data } = await this.synapCores._getHttpClient().put(\n `/integrations/${id}`,\n updates\n );\n return this.mapIntegration(data);\n }\n\n /**\n * Delete an integration\n */\n async delete(id: string): Promise<void> {\n await this.synapCores._getHttpClient().delete(`/integrations/${id}`);\n }\n\n /**\n * Activate an integration\n */\n async activate(id: string): Promise<Integration> {\n const { data } = await this.synapCores._getHttpClient().post(\n `/integrations/${id}/activate`\n );\n return this.mapIntegration(data);\n }\n\n /**\n * Deactivate an integration\n */\n async deactivate(id: string): Promise<Integration> {\n const { data } = await this.synapCores._getHttpClient().post(\n `/integrations/${id}/deactivate`\n );\n return this.mapIntegration(data);\n }\n\n /**\n * Execute an integration\n */\n async execute(options: ExecuteIntegrationOptions): Promise<IntegrationExecutionResult> {\n const { data } = await this.synapCores._getHttpClient().post(\n `/integrations/${options.integration}/execute`,\n {\n payload: options.payload,\n config_override: options.config_override,\n sync: options.sync !== false,\n }\n );\n\n return {\n id: data.id || data.execution_id,\n success: data.success,\n response: data.response,\n status_code: data.status_code,\n error: data.error,\n execution_time_ms: data.execution_time_ms || data.took_ms || 0,\n retry_count: data.retry_count || 0,\n executed_at: data.executed_at ? new Date(data.executed_at) : new Date(),\n };\n }\n\n /**\n * Test an integration without executing\n */\n async test(options: TestIntegrationOptions): Promise<TestIntegrationResult> {\n const { data } = await this.synapCores._getHttpClient().post(\n `/integrations/${options.integration}/test`,\n {\n payload: options.payload,\n validate_only: options.validate_only || false,\n }\n );\n\n return {\n success: data.success,\n validation_errors: data.validation_errors || [],\n response: data.response,\n error: data.error,\n latency_ms: data.latency_ms,\n };\n }\n\n /**\n * Get integration execution history\n */\n async getExecutionHistory(\n integrationId: string,\n options: { limit?: number; offset?: number } = {}\n ): Promise<IntegrationExecutionResult[]> {\n const params = new URLSearchParams();\n if (options.limit) params.append('limit', options.limit.toString());\n if (options.offset) params.append('offset', options.offset.toString());\n\n const { data } = await this.synapCores._getHttpClient().get(\n `/integrations/${integrationId}/executions?${params.toString()}`\n );\n\n return (data.executions || data).map((exec: any) => ({\n id: exec.id || exec.execution_id,\n success: exec.success,\n response: exec.response,\n status_code: exec.status_code,\n error: exec.error,\n execution_time_ms: exec.execution_time_ms || exec.took_ms || 0,\n retry_count: exec.retry_count || 0,\n executed_at: exec.executed_at ? new Date(exec.executed_at) : new Date(),\n }));\n }\n\n /**\n * Get integration statistics\n */\n async getStats(integrationId: string): Promise<IntegrationStats> {\n const { data } = await this.synapCores._getHttpClient().get(\n `/integrations/${integrationId}/stats`\n );\n\n return {\n integration_id: integrationId,\n total_executions: data.total_executions || 0,\n successful_executions: data.successful_executions || 0,\n failed_executions: data.failed_executions || 0,\n avg_execution_time_ms: data.avg_execution_time_ms || 0,\n executions_24h: data.executions_24h || 0,\n uptime_percentage: data.uptime_percentage || 0,\n last_success_at: data.last_success_at ? new Date(data.last_success_at) : undefined,\n last_error_at: data.last_error_at ? new Date(data.last_error_at) : undefined,\n };\n }\n\n /**\n * Create a webhook for an integration\n */\n async createWebhook(options: CreateWebhookOptions): Promise<IntegrationWebhook> {\n const { data } = await this.synapCores._getHttpClient().post('/integrations/webhooks', {\n integration_id: options.integration_id,\n event: options.event,\n url: options.url,\n secret: options.secret,\n activate: options.activate !== false,\n });\n\n return {\n id: data.id,\n integration_id: data.integration_id,\n event: data.event,\n url: data.url,\n active: data.active,\n secret: data.secret,\n created_at: new Date(data.created_at),\n };\n }\n\n /**\n * List webhooks for an integration\n */\n async listWebhooks(integrationId: string): Promise<IntegrationWebhook[]> {\n const { data } = await this.synapCores._getHttpClient().get(\n `/integrations/${integrationId}/webhooks`\n );\n\n return (data.webhooks || data).map((webhook: any) => ({\n id: webhook.id,\n integration_id: webhook.integration_id,\n event: webhook.event,\n url: webhook.url,\n active: webhook.active,\n secret: webhook.secret,\n created_at: new Date(webhook.created_at),\n }));\n }\n\n /**\n * Delete a webhook\n */\n async deleteWebhook(webhookId: string): Promise<void> {\n await this.synapCores._getHttpClient().delete(`/integrations/webhooks/${webhookId}`);\n }\n\n /**\n * Get integration events\n */\n async getEvents(\n integrationId: string,\n options: { limit?: number; status?: string } = {}\n ): Promise<IntegrationEvent[]> {\n const params = new URLSearchParams();\n if (options.limit) params.append('limit', options.limit.toString());\n if (options.status) params.append('status', options.status);\n\n const { data } = await this.synapCores._getHttpClient().get(\n `/integrations/${integrationId}/events?${params.toString()}`\n );\n\n return (data.events || data).map((event: any) => ({\n id: event.id,\n integration_id: event.integration_id,\n event: event.event,\n data: event.data,\n timestamp: new Date(event.timestamp),\n status: event.status,\n error: event.error,\n }));\n }\n\n /**\n * Get integration logs\n */\n async getLogs(\n integrationId: string,\n options: { limit?: number; level?: string } = {}\n ): Promise<IntegrationLog[]> {\n const params = new URLSearchParams();\n if (options.limit) params.append('limit', options.limit.toString());\n if (options.level) params.append('level', options.level);\n\n const { data } = await this.synapCores._getHttpClient().get(\n `/integrations/${integrationId}/logs?${params.toString()}`\n );\n\n return (data.logs || data).map((log: any) => ({\n id: log.id,\n integration_id: log.integration_id,\n level: log.level,\n message: log.message,\n data: log.data,\n timestamp: new Date(log.timestamp),\n }));\n }\n\n /**\n * Retry a failed execution\n */\n async retryExecution(executionId: string): Promise<IntegrationExecutionResult> {\n const { data } = await this.synapCores._getHttpClient().post(\n `/integrations/executions/${executionId}/retry`\n );\n\n return {\n id: data.id || data.execution_id,\n success: data.success,\n response: data.response,\n status_code: data.status_code,\n error: data.error,\n execution_time_ms: data.execution_time_ms || data.took_ms || 0,\n retry_count: data.retry_count || 0,\n executed_at: data.executed_at ? new Date(data.executed_at) : new Date(),\n };\n }\n\n /**\n * Map raw integration data to Integration type\n */\n private mapIntegration(data: any): Integration {\n return {\n id: data.id,\n name: data.name,\n type: data.type,\n status: data.status,\n config: data.config,\n description: data.description,\n tags: data.tags || [],\n created_at: new Date(data.created_at),\n updated_at: new Date(data.updated_at),\n last_success_at: data.last_success_at ? new Date(data.last_success_at) : undefined,\n last_error: data.last_error,\n execution_count: data.execution_count,\n };\n }\n}\n","/**\n * Backup/Restore Client for SynapCores SDK\n */\n\nimport { SynapCores } from './client';\nimport {\n BackupOptions,\n Backup,\n RestoreOptions,\n RestoreResult,\n BackupStatus,\n RestoreStatus,\n ListBackupsOptions,\n BackupSchedule,\n CreateScheduleOptions,\n BackupVerificationResult,\n BackupMetrics,\n} from './types/backup';\n\nexport class BackupClient {\n constructor(private readonly synapCores: SynapCores) {}\n\n /**\n * Create a new backup\n */\n async create(options: BackupOptions = {}): Promise<Backup> {\n const { data } = await this.synapCores._getHttpClient().post('/backups', {\n name: options.name,\n description: options.description,\n type: options.type || 'full',\n tables: options.tables,\n include_indexes: options.include_indexes !== false,\n include_procedures: options.include_procedures !== false,\n compression: options.compression || 6,\n encrypt: options.encrypt || false,\n encryption_key: options.encryption_key,\n storage: options.storage || 'local',\n storage_config: options.storage_config,\n tags: options.tags || [],\n });\n\n return this.mapBackup(data);\n }\n\n /**\n * List backups with optional filters\n */\n async list(options: ListBackupsOptions = {}): Promise<Backup[]> {\n const params = new URLSearchParams();\n\n if (options.type) params.append('type', options.type);\n if (options.status) params.append('status', options.status);\n if (options.sort) params.append('sort', options.sort);\n if (options.order) params.append('order', options.order);\n if (options.page) params.append('page', options.page.toString());\n if (options.page_size) params.append('page_size', options.page_size.toString());\n if (options.tags && options.tags.length > 0) {\n params.append('tags', options.tags.join(','));\n }\n\n const { data } = await this.synapCores._getHttpClient().get(\n `/backups?${params.toString()}`\n );\n\n return (data.backups || data).map((backup: any) => this.mapBackup(backup));\n }\n\n /**\n * Get a specific backup by ID\n */\n async get(id: string): Promise<Backup> {\n const { data } = await this.synapCores._getHttpClient().get(`/backups/${id}`);\n return this.mapBackup(data);\n }\n\n /**\n * Delete a backup\n */\n async delete(id: string): Promise<void> {\n await this.synapCores._getHttpClient().delete(`/backups/${id}`);\n }\n\n /**\n * Restore from a backup\n */\n async restore(options: RestoreOptions): Promise<RestoreResult> {\n const { data } = await this.synapCores._getHttpClient().post('/backups/restore', {\n backup_id: options.backup_id,\n mode: options.mode || 'full',\n tables: options.tables,\n target_database: options.target_database,\n overwrite: options.overwrite || false,\n skip_indexes: options.skip_indexes || false,\n skip_procedures: options.skip_procedures || false,\n decryption_key: options.decryption_key,\n point_in_time: options.point_in_time?.toISOString(),\n dry_run: options.dry_run || false,\n });\n\n return {\n id: data.id || data.restore_id,\n success: data.success,\n tables_restored: data.tables_restored || [],\n rows_restored: data.rows_restored || 0,\n duration_ms: data.duration_ms || data.took_ms || 0,\n error: data.error,\n warnings: data.warnings || [],\n };\n }\n\n /**\n * Get backup status\n */\n async getBackupStatus(backupId: string): Promise<BackupStatus> {\n const { data } = await this.synapCores._getHttpClient().get(\n `/backups/${backupId}/status`\n );\n\n return {\n id: data.id || backupId,\n status: data.status,\n progress: data.progress || 0,\n phase: data.phase,\n tables_processed: data.tables_processed,\n total_tables: data.total_tables,\n bytes_processed: data.bytes_processed,\n eta_ms: data.eta_ms || data.estimated_time_remaining_ms,\n error: data.error,\n started_at: data.started_at ? new Date(data.started_at) : undefined,\n completed_at: data.completed_at ? new Date(data.completed_at) : undefined,\n };\n }\n\n /**\n * Get restore status\n */\n async getRestoreStatus(restoreId: string): Promise<RestoreStatus> {\n const { data } = await this.synapCores._getHttpClient().get(\n `/backups/restore/${restoreId}/status`\n );\n\n return {\n id: data.id || restoreId,\n status: data.status,\n progress: data.progress || 0,\n phase: data.phase,\n tables_processed: data.tables_processed,\n total_tables: data.total_tables,\n rows_processed: data.rows_processed,\n eta_ms: data.eta_ms || data.estimated_time_remaining_ms,\n error: data.error,\n started_at: data.started_at ? new Date(data.started_at) : undefined,\n completed_at: data.completed_at ? new Date(data.completed_at) : undefined,\n };\n }\n\n /**\n * Cancel a backup in progress\n */\n async cancelBackup(backupId: string): Promise<void> {\n await this.synapCores._getHttpClient().post(`/backups/${backupId}/cancel`);\n }\n\n /**\n * Cancel a restore in progress\n */\n async cancelRestore(restoreId: string): Promise<void> {\n await this.synapCores._getHttpClient().post(`/backups/restore/${restoreId}/cancel`);\n }\n\n /**\n * Download a backup file\n */\n async download(backupId: string): Promise<Buffer> {\n const { data } = await this.synapCores._getHttpClient().get(\n `/backups/${backupId}/download`,\n {\n responseType: 'arraybuffer',\n }\n );\n\n return Buffer.from(data);\n }\n\n /**\n * Verify backup integrity\n */\n async verify(backupId: string): Promise<BackupVerificationResult> {\n const { data } = await this.synapCores._getHttpClient().post(\n `/backups/${backupId}/verify`\n );\n\n return {\n is_valid: data.is_valid || data.valid,\n integrity_ok: data.integrity_ok || data.integrity,\n checksum_match: data.checksum_match,\n tables_verified: data.tables_verified || 0,\n errors: data.errors || [],\n warnings: data.warnings || [],\n verified_at: data.verified_at ? new Date(data.verified_at) : new Date(),\n };\n }\n\n /**\n * Create a backup schedule\n */\n async createSchedule(options: CreateScheduleOptions): Promise<BackupSchedule> {\n const { data } = await this.synapCores._getHttpClient().post('/backups/schedules', {\n name: options.name,\n cron: options.cron,\n backup_options: options.backup_options,\n activate: options.activate !== false,\n tags: options.tags || [],\n });\n\n return {\n id: data.id,\n name: data.name,\n cron: data.cron,\n backup_options: data.backup_options,\n active: data.active,\n last_run_at: data.last_run_at ? new Date(data.last_run_at) : undefined,\n next_run_at: data.next_run_at ? new Date(data.next_run_at) : undefined,\n created_at: new Date(data.created_at),\n tags: data.tags || [],\n };\n }\n\n /**\n * List backup schedules\n */\n async listSchedules(): Promise<BackupSchedule[]> {\n const { data } = await this.synapCores._getHttpClient().get('/backups/schedules');\n\n return (data.schedules || data).map((schedule: any) => ({\n id: schedule.id,\n name: schedule.name,\n cron: schedule.cron,\n backup_options: schedule.backup_options,\n active: schedule.active,\n last_run_at: schedule.last_run_at ? new Date(schedule.last_run_at) : undefined,\n next_run_at: schedule.next_run_at ? new Date(schedule.next_run_at) : undefined,\n created_at: new Date(schedule.created_at),\n tags: schedule.tags || [],\n }));\n }\n\n /**\n * Get a specific schedule\n */\n async getSchedule(scheduleId: string): Promise<BackupSchedule> {\n const { data } = await this.synapCores._getHttpClient().get(\n `/backups/schedules/${scheduleId}`\n );\n\n return {\n id: data.id,\n name: data.name,\n cron: data.cron,\n backup_options: data.backup_options,\n active: data.active,\n last_run_at: data.last_run_at ? new Date(data.last_run_at) : undefined,\n next_run_at: data.next_run_at ? new Date(data.next_run_at) : undefined,\n created_at: new Date(data.created_at),\n tags: data.tags || [],\n };\n }\n\n /**\n * Update a backup schedule\n */\n async updateSchedule(\n scheduleId: string,\n updates: Partial<CreateScheduleOptions>\n ): Promise<BackupSchedule> {\n const { data } = await this.synapCores._getHttpClient().put(\n `/backups/schedules/${scheduleId}`,\n updates\n );\n\n return {\n id: data.id,\n name: data.name,\n cron: data.cron,\n backup_options: data.backup_options,\n active: data.active,\n last_run_at: data.last_run_at ? new Date(data.last_run_at) : undefined,\n next_run_at: data.next_run_at ? new Date(data.next_run_at) : undefined,\n created_at: new Date(data.created_at),\n tags: data.tags || [],\n };\n }\n\n /**\n * Delete a backup schedule\n */\n async deleteSchedule(scheduleId: string): Promise<void> {\n await this.synapCores._getHttpClient().delete(`/backups/schedules/${scheduleId}`);\n }\n\n /**\n * Activate a schedule\n */\n async activateSchedule(scheduleId: string): Promise<BackupSchedule> {\n const { data } = await this.synapCores._getHttpClient().post(\n `/backups/schedules/${scheduleId}/activate`\n );\n\n return {\n id: data.id,\n name: data.name,\n cron: data.cron,\n backup_options: data.backup_options,\n active: data.active,\n last_run_at: data.last_run_at ? new Date(data.last_run_at) : undefined,\n next_run_at: data.next_run_at ? new Date(data.next_run_at) : undefined,\n created_at: new Date(data.created_at),\n tags: data.tags || [],\n };\n }\n\n /**\n * Deactivate a schedule\n */\n async deactivateSchedule(scheduleId: string): Promise<BackupSchedule> {\n const { data } = await this.synapCores._getHttpClient().post(\n `/backups/schedules/${scheduleId}/deactivate`\n );\n\n return {\n id: data.id,\n name: data.name,\n cron: data.cron,\n backup_options: data.backup_options,\n active: data.active,\n last_run_at: data.last_run_at ? new Date(data.last_run_at) : undefined,\n next_run_at: data.next_run_at ? new Date(data.next_run_at) : undefined,\n created_at: new Date(data.created_at),\n tags: data.tags || [],\n };\n }\n\n /**\n * Get backup metrics\n */\n async getMetrics(): Promise<BackupMetrics> {\n const { data } = await this.synapCores._getHttpClient().get('/backups/metrics');\n\n return {\n total_backups: data.total_backups || 0,\n total_size_bytes: data.total_size_bytes || 0,\n successful_backups: data.successful_backups || 0,\n failed_backups: data.failed_backups || 0,\n avg_backup_size_bytes: data.avg_backup_size_bytes || 0,\n avg_duration_ms: data.avg_duration_ms || 0,\n last_backup_at: data.last_backup_at ? new Date(data.last_backup_at) : undefined,\n next_scheduled_at: data.next_scheduled_at\n ? new Date(data.next_scheduled_at)\n : undefined,\n };\n }\n\n /**\n * Map raw backup data to Backup type\n */\n private mapBackup(data: any): Backup {\n return {\n id: data.id,\n name: data.name,\n description: data.description,\n type: data.type,\n status: data.status,\n size_bytes: data.size_bytes,\n compressed_size_bytes: data.compressed_size_bytes,\n table_count: data.table_count,\n created_at: new Date(data.created_at),\n completed_at: data.completed_at ? new Date(data.completed_at) : undefined,\n duration_ms: data.duration_ms || data.took_ms,\n storage: data.storage,\n storage_path: data.storage_path,\n encrypted: data.encrypted || false,\n tags: data.tags || [],\n parent_backup_id: data.parent_backup_id,\n error: data.error,\n };\n }\n}\n","/**\n * Error classes for SynapCores SDK\n */\n\nexport class SynapCoresError extends Error {\n public readonly code?: string;\n public readonly details?: Record<string, any>;\n\n constructor(message: string, code?: string, details?: Record<string, any>) {\n super(message);\n this.name = 'SynapCoresError';\n this.code = code;\n this.details = details;\n \n // Maintains proper stack trace for where our error was thrown\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, SynapCoresError);\n }\n }\n}\n\nexport class ConnectionError extends SynapCoresError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'CONNECTION_ERROR', details);\n this.name = 'ConnectionError';\n }\n}\n\nexport class AuthenticationError extends SynapCoresError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'AUTH_ERROR', details);\n this.name = 'AuthenticationError';\n }\n}\n\nexport class ValidationError extends SynapCoresError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'VALIDATION_ERROR', details);\n this.name = 'ValidationError';\n }\n}\n\nexport class NotFoundError extends SynapCoresError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'NOT_FOUND', details);\n this.name = 'NotFoundError';\n }\n}\n\nexport class ServerError extends SynapCoresError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'SERVER_ERROR', details);\n this.name = 'ServerError';\n }\n}\n\nexport class TimeoutError extends SynapCoresError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'TIMEOUT_ERROR', details);\n this.name = 'TimeoutError';\n }\n}\n\nexport class RateLimitError extends SynapCoresError {\n public readonly retryAfter?: number;\n\n constructor(message: string, retryAfter?: number, details?: Record<string, any>) {\n super(message, 'RATE_LIMIT_ERROR', details);\n this.name = 'RateLimitError';\n this.retryAfter = retryAfter;\n }\n}\n\nexport class SQLError extends SynapCoresError {\n public readonly severity: 'ERROR' | 'WARNING' | 'INFO';\n public readonly position?: number;\n public readonly hint?: string;\n public readonly detail?: string;\n\n constructor(\n message: string,\n code: string,\n severity: 'ERROR' | 'WARNING' | 'INFO' = 'ERROR',\n position?: number,\n hint?: string,\n detail?: string,\n details?: Record<string, any>\n ) {\n super(message, code, details);\n this.name = 'SQLError';\n this.severity = severity;\n this.position = position;\n this.hint = hint;\n this.detail = detail;\n }\n}\n\nexport class VectorError extends SynapCoresError {\n public readonly vectorDimensions?: number;\n public readonly expectedDimensions?: number;\n public readonly operation?: string;\n\n constructor(\n message: string,\n code: string,\n vectorDimensions?: number,\n expectedDimensions?: number,\n operation?: string,\n details?: Record<string, any>\n ) {\n super(message, code, details);\n this.name = 'VectorError';\n this.vectorDimensions = vectorDimensions;\n this.expectedDimensions = expectedDimensions;\n this.operation = operation;\n }\n}\n\nexport class TransactionError extends SynapCoresError {\n public readonly transactionId?: string;\n public readonly transactionState?: string;\n\n constructor(\n message: string,\n code: string,\n transactionId?: string,\n transactionState?: string,\n details?: Record<string, any>\n ) {\n super(message, code, details);\n this.name = 'TransactionError';\n this.transactionId = transactionId;\n this.transactionState = transactionState;\n }\n}\n\nexport class BatchOperationError extends SynapCoresError {\n public readonly failedItems?: Array<{\n index: number;\n error: string;\n }>;\n public readonly totalProcessed?: number;\n public readonly successfulCount?: number;\n\n constructor(\n message: string,\n code: string,\n failedItems?: Array<{ index: number; error: string }>,\n totalProcessed?: number,\n successfulCount?: number,\n details?: Record<string, any>\n ) {\n super(message, code, details);\n this.name = 'BatchOperationError';\n this.failedItems = failedItems;\n this.totalProcessed = totalProcessed;\n this.successfulCount = successfulCount;\n }\n}"],"mappings":"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","names":["WebSocket","axios"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/client.ts","../src/subscription.ts","../src/collection.ts","../src/automl.ts","../src/nlp.ts","../src/recipes.ts","../src/schema.ts","../src/errors.ts","../src/import.ts","../src/integrations.ts","../src/backup.ts","../src/graph.ts","../src/nl2sql.ts","../src/filesystem.ts","../src/chat.ts","../src/multimodal.ts","../src/system.ts","../src/transactions.ts","../src/mcp.ts"],"sourcesContent":["/**\n * SynapCores Node.js/TypeScript SDK\n *\n * Official SDK for SynapCores AI-Native Database Management System.\n */\n\nexport { SynapCores } from './client';\nexport { Collection } from './collection';\nexport { AutoMLClient, AutoMLModel } from './automl';\nexport { NLPClient } from './nlp';\nexport { RecipeClient } from './recipes';\nexport { SchemaClient } from './schema';\nexport { ImportExportClient } from './import';\nexport { IntegrationClient } from './integrations';\nexport { BackupClient } from './backup';\nexport { Subscription } from './subscription';\n\n// v0.2.0: new top-level modules.\nexport { GraphClient } from './graph';\nexport { NL2SqlClient } from './nl2sql';\nexport { FilesystemCollectionsClient } from './filesystem';\nexport { ChatClient } from './chat';\nexport { MultimodalClient } from './multimodal';\nexport { SystemClient } from './system';\nexport { TransactionsClient, Tx } from './transactions';\nexport { McpClient } from './mcp';\n\n// Export types\nexport type {\n SynapCoresConfig,\n QueryResult,\n QueryColumn,\n EmbedOptions,\n // SQL Table Management Types\n ColumnDefinition,\n ColumnConstraint,\n TableConstraint,\n CreateTableOptions,\n AlterTableOptions,\n IndexDefinition,\n TableInfo,\n // Transaction Types\n TransactionOptions,\n TransactionContext,\n // Batch Operation Types\n BatchInsertOptions,\n BatchUpdateOptions,\n BatchDeleteOptions,\n BatchResult,\n // Advanced SQL Types\n PreparedStatement,\n PreparedStatementOptions,\n CTEDefinition,\n WindowFunctionOptions,\n // Vector Operation Types\n Vector,\n VectorArithmeticResult,\n VectorSimilarityResult,\n VectorSearchOptions,\n VectorSearchResult,\n HybridSearchOptions,\n KNNSearchOptions,\n RangeSearchOptions,\n // Performance and Monitoring Types\n QueryPerformance,\n ConnectionPool,\n // Authentication Types\n RegisterRequest,\n RegisterResponse,\n LoginRequest,\n LoginResponse,\n RefreshResponse,\n // API Key Management Types\n CreateAPIKeyRequest,\n CreateAPIKeyResponse,\n ListAPIKeysResponse,\n APIKeyInfo,\n APIKeyStats,\n // Query Execution Types\n ExecuteQueryRequest,\n BatchQueryRequest,\n BatchQueryResponse,\n BatchQueryResult,\n // Collection Management Types\n CreateCollectionRequest,\n CreateCollectionResponse,\n ListCollectionsResponse,\n CollectionInfo,\n CollectionFieldDefinition,\n CollectionIndexDefinition,\n CollectionSchemaDefinition,\n // Multimedia Types\n UploadMultimediaRequest,\n MultimediaInfo,\n ListMultimediaResponse,\n} from './types/client';\n\nexport type {\n Document,\n SearchResult,\n SearchOptions,\n QueryOptions,\n InsertResult,\n UpdateOptions,\n CollectionSchema,\n CollectionStats,\n} from './types/collection';\n\nexport type {\n ModelInfo,\n TrainOptions,\n PredictResult,\n EvaluationResult,\n AsyncTrainOptions,\n TrainingJob,\n TrainingMetrics,\n ListTrainingJobsOptions,\n} from './types/automl';\n\nexport type {\n NLPAnalysis,\n Sentiment,\n Entity,\n AnalyzeOptions,\n SummarizeOptions,\n} from './types/nlp';\n\nexport type {\n SubscriptionOptions,\n SubscriptionEvent,\n ChangeOperation,\n} from './types/subscription';\n\nexport type {\n Recipe,\n RecipeInfo,\n CreateRecipeOptions,\n ListRecipesOptions,\n ExecuteRecipeOptions,\n RecipeExecutionResult,\n GenerateRecipeOptions,\n GeneratedRecipe,\n RecipeParameter,\n} from './types/recipes';\n\nexport type {\n TableSchema,\n ColumnInfo,\n IndexInfo,\n RelationshipInfo,\n SchemaStatistics,\n ValidationResult,\n ForeignKeyReference,\n ConstraintInfo,\n ValidationError as SchemaValidationError,\n ValidationWarning,\n} from './types/schema';\n\nexport type {\n ImportOptions,\n ImportResult,\n ExportOptions,\n ExportResult,\n ImportJobStatus,\n ExportJobStatus,\n BulkImportOptions,\n BulkImportResult,\n DataValidationOptions,\n DataValidationResult,\n ImportError,\n ValidationError as ImportValidationError,\n ValidationWarning as ImportValidationWarning,\n} from './types/import';\n\nexport type {\n Integration,\n CreateIntegrationOptions,\n ListIntegrationsOptions,\n ExecuteIntegrationOptions,\n IntegrationExecutionResult,\n IntegrationWebhook,\n CreateWebhookOptions,\n IntegrationEvent,\n IntegrationLog,\n IntegrationStats,\n TestIntegrationOptions,\n TestIntegrationResult,\n IntegrationConfig,\n AuthConfig,\n OAuth2Config,\n RetryConfig,\n} from './types/integrations';\n\nexport type {\n Backup,\n BackupOptions,\n RestoreOptions,\n RestoreResult,\n BackupStatus,\n RestoreStatus,\n ListBackupsOptions,\n BackupSchedule,\n CreateScheduleOptions,\n BackupVerificationResult,\n BackupMetrics,\n StorageConfig,\n} from './types/backup';\n\n// v0.2.0 module types\nexport type {\n GraphNode,\n GraphEdge,\n CypherResult,\n CypherProfileResult,\n GraphAlgorithmName,\n GraphAlgorithmRequest,\n GraphAlgorithmResult,\n GraphSummary,\n GraphExtractRequest,\n GraphExtractResult,\n} from './types/graph';\n\nexport type {\n Nl2SqlAskOptions,\n Nl2SqlAskResult,\n Nl2SqlSchemaContext,\n Nl2SqlHistoryEntry,\n Nl2SqlValidateResult,\n} from './types/nl2sql';\n\nexport type {\n FsCollection,\n CreateFsCollectionOptions,\n FsDocument,\n FsProgressEvent,\n} from './types/filesystem';\n\nexport type {\n ChatSession,\n CreateChatSessionOptions,\n ChatMessage,\n SendChatOptions,\n SendChatResult,\n ChatStreamChunk,\n ChatSuggestion,\n ChatSuggestionsOptions,\n ChatModelInfo,\n ChatSystemPrompt,\n ChatTool,\n ChatCacheStats,\n} from './types/chat';\n\nexport type {\n MultimodalInput,\n MultimodalSimilarityOptions,\n MultimodalSimilarityResult,\n MultimodalSearchOptions,\n MultimodalSearchHit,\n MultimodalJoinOptions,\n MultimodalJoinResult,\n MultimodalEmbedResult,\n} from './types/multimodal';\n\nexport type { VisionConfig, VisionTestResult } from './types/system';\n\nexport type {\n BeginTransactionOptions,\n TxQueryResult,\n TxHistoryEntry,\n} from './types/transactions';\n\nexport type { McpRequest, McpResponse, McpInfo } from './types/mcp';\n\n// Export errors\nexport {\n SynapCoresError,\n ConnectionError,\n AuthenticationError,\n ValidationError,\n NotFoundError,\n ServerError,\n TimeoutError,\n RateLimitError,\n SQLError,\n VectorError,\n TransactionError,\n BatchOperationError,\n} from './errors';\n\n// Export utilities\nexport { z } from 'zod';\n\n// Version\nexport const VERSION = '0.2.0';\n","/**\n * Main client for SynapCores SDK\n */\n\nimport axios, { AxiosInstance, AxiosError } from 'axios';\nimport { Collection } from './collection';\nimport { AutoMLClient } from './automl';\nimport { NLPClient } from './nlp';\nimport { RecipeClient } from './recipes';\nimport { SchemaClient } from './schema';\nimport { ImportExportClient } from './import';\nimport { IntegrationClient } from './integrations';\nimport { BackupClient } from './backup';\nimport { GraphClient } from './graph';\nimport { NL2SqlClient } from './nl2sql';\nimport { FilesystemCollectionsClient } from './filesystem';\nimport { ChatClient } from './chat';\nimport { MultimodalClient } from './multimodal';\nimport { SystemClient } from './system';\nimport { TransactionsClient } from './transactions';\nimport { McpClient } from './mcp';\nimport {\n SynapCoresConfig,\n QueryResult,\n EmbedOptions,\n ColumnDefinition,\n CreateTableOptions,\n AlterTableOptions,\n IndexDefinition,\n TableInfo,\n TransactionOptions,\n TransactionContext,\n BatchInsertOptions,\n BatchUpdateOptions,\n BatchDeleteOptions,\n BatchResult,\n PreparedStatement,\n PreparedStatementOptions,\n CTEDefinition,\n WindowFunctionOptions,\n VectorArithmeticResult,\n VectorSimilarityResult,\n VectorSearchResult,\n HybridSearchOptions,\n KNNSearchOptions,\n RangeSearchOptions,\n RegisterRequest,\n RegisterResponse,\n LoginRequest,\n LoginResponse,\n RefreshResponse,\n CreateAPIKeyRequest,\n CreateAPIKeyResponse,\n ListAPIKeysResponse,\n APIKeyStats,\n ExecuteQueryRequest,\n BatchQueryRequest,\n BatchQueryResponse,\n CreateCollectionRequest,\n CreateCollectionResponse,\n ListCollectionsResponse,\n MultimediaInfo,\n ListMultimediaResponse,\n} from './types/client';\nimport {\n ConnectionError,\n AuthenticationError,\n ValidationError,\n NotFoundError,\n ServerError,\n RateLimitError,\n SynapCoresError,\n VectorError,\n} from './errors';\nimport { Document } from './types/collection';\n\nexport class SynapCores {\n private readonly config: Required<SynapCoresConfig>;\n private readonly httpClient: AxiosInstance;\n private readonly collectionsCache = new Map<string, Collection>();\n private currentTransaction: TransactionContext | null = null;\n private preparedStatements = new Map<string, PreparedStatement>();\n\n public readonly automl: AutoMLClient;\n public readonly nlp: NLPClient;\n public readonly recipes: RecipeClient;\n public readonly schema: SchemaClient;\n public readonly import: ImportExportClient;\n public readonly integrations: IntegrationClient;\n public readonly backup: BackupClient;\n public readonly graph: GraphClient;\n public readonly nl2sql: NL2SqlClient;\n public readonly filesystem: FilesystemCollectionsClient;\n public readonly chat: ChatClient;\n public readonly multimodal: MultimodalClient;\n public readonly system: SystemClient;\n public readonly transactions: TransactionsClient;\n public readonly mcp: McpClient;\n\n constructor(config: SynapCoresConfig = {}) {\n this.config = {\n host: config.host || 'localhost',\n port: config.port || 8080,\n apiKey: config.apiKey || '',\n jwtToken: config.jwtToken || '',\n useHttps: config.useHttps || false,\n timeout: config.timeout || 30000,\n maxRetries: config.maxRetries || 3,\n rejectUnauthorized: config.rejectUnauthorized !== undefined ? config.rejectUnauthorized : true,\n };\n\n // Validate API key format if provided (accept both ak_prod_ and aidb_ formats)\n if (this.config.apiKey && !this.config.apiKey.startsWith('ak_') && !this.config.apiKey.startsWith('aidb_')) {\n throw new Error(\n \"Invalid API key format. API keys should start with 'ak_' or 'aidb_' prefix. \" +\n \"Please create a valid API key from your AIDB dashboard.\"\n );\n }\n\n const protocol = this.config.useHttps ? 'https' : 'http';\n const baseURL = `${protocol}://${this.config.host}:${this.config.port}/v1`;\n\n // For development with self-signed certificates\n const httpsAgent = this.config.useHttps && !this.config.rejectUnauthorized\n ? new (require('https').Agent)({ rejectUnauthorized: false })\n : undefined;\n\n // Determine authentication header\n const authHeader: Record<string, string> = {};\n if (this.config.jwtToken) {\n authHeader['Authorization'] = `Bearer ${this.config.jwtToken}`;\n } else if (this.config.apiKey) {\n // Use X-API-Key header for API keys (not Bearer)\n authHeader['X-API-Key'] = this.config.apiKey;\n }\n\n this.httpClient = axios.create({\n baseURL,\n timeout: this.config.timeout,\n headers: {\n 'Content-Type': 'application/json',\n 'User-Agent': 'synapcores-nodejs/0.2.0',\n ...authHeader,\n },\n ...(httpsAgent && { httpsAgent }),\n });\n\n // Add response interceptor for error handling\n this.httpClient.interceptors.response.use(\n (response) => response,\n (error) => this.handleError(error),\n );\n\n // Initialize sub-clients\n this.automl = new AutoMLClient(this);\n this.nlp = new NLPClient(this);\n this.recipes = new RecipeClient(this);\n this.schema = new SchemaClient(this);\n this.import = new ImportExportClient(this);\n this.integrations = new IntegrationClient(this);\n this.backup = new BackupClient(this);\n this.graph = new GraphClient(this);\n this.nl2sql = new NL2SqlClient(this);\n this.filesystem = new FilesystemCollectionsClient(this);\n this.chat = new ChatClient(this);\n this.multimodal = new MultimodalClient(this);\n this.system = new SystemClient(this);\n this.transactions = new TransactionsClient(this);\n this.mcp = new McpClient(this);\n }\n\n /**\n * Build the WebSocket base URL (ws:// or wss://).\n */\n _getWsBaseUrl(): string {\n const protocol = this.config.useHttps ? 'wss' : 'ws';\n return `${protocol}://${this.config.host}:${this.config.port}`;\n }\n\n /**\n * Read-only access to the configured host/port for WS-clients.\n */\n _getConfig(): Required<SynapCoresConfig> {\n return this.config;\n }\n\n /**\n * Exchange the current credentials (JWT or API key) for a short-lived\n * WebSocket ticket. Use the returned token as the `?token=` query\n * param when opening any /ws endpoint.\n */\n async createWsTicket(): Promise<{ token: string; expiresAt: number }> {\n const { data } = await this.httpClient.post('/ws/ticket', {});\n const token = data.token ?? data.ticket;\n const expiresAt =\n typeof data.expiresAt === 'number'\n ? data.expiresAt\n : data.expires_at\n ? Date.parse(data.expires_at)\n : Date.now() + 60_000;\n return { token, expiresAt };\n }\n\n /**\n * Revoke a previously-issued ticket (best-effort).\n */\n async revokeWsTicket(token: string): Promise<void> {\n await this.httpClient.post('/ws/ticket/revoke', { token });\n }\n\n private handleError(error: AxiosError): never {\n if (!error.response) {\n const message = error.code === 'ECONNREFUSED'\n ? `Failed to connect to SynapCores server at ${error.config?.baseURL}. Connection refused.`\n : `Failed to connect to SynapCores server: ${error.message}`;\n throw new ConnectionError(message);\n }\n\n const { status, data } = error.response;\n \n // Handle error format from database integration guide\n // Format: { error: { code, message, details, timestamp, requestId } }\n const errorData = data as any;\n const errorInfo = errorData?.error || errorData;\n const errorCode = errorInfo?.code;\n const errorMessage = errorInfo?.message || errorData?.message || 'An error occurred';\n const errorDetails = errorInfo?.details || errorData?.details || errorData;\n\n switch (status) {\n case 400:\n throw new ValidationError(\n errorMessage,\n errorDetails,\n );\n case 401:\n throw new AuthenticationError(\n errorMessage,\n errorDetails,\n );\n case 403:\n throw new AuthenticationError(\n errorMessage,\n errorDetails,\n );\n case 404:\n throw new NotFoundError(\n errorMessage,\n errorDetails,\n );\n case 409:\n throw new ValidationError(\n errorMessage,\n errorDetails,\n );\n case 413:\n throw new ValidationError(\n errorMessage || 'Payload too large',\n errorDetails,\n );\n case 422:\n throw new ValidationError(\n errorMessage,\n errorDetails?.errors || errorDetails,\n );\n case 429:\n const retryAfter = error.response.headers['retry-after'];\n throw new RateLimitError(\n errorMessage,\n retryAfter ? parseInt(retryAfter) : undefined,\n errorDetails,\n );\n case 500:\n throw new ServerError(\n errorMessage || 'Internal server error',\n errorDetails,\n );\n case 503:\n throw new ServerError(\n errorMessage || 'Service unavailable',\n errorDetails,\n );\n default:\n if (status >= 500) {\n throw new ServerError(\n errorMessage || `Server error: ${status}`,\n errorDetails,\n );\n }\n throw new SynapCoresError(\n errorMessage || `Unexpected error: ${status}`,\n errorCode || 'UNEXPECTED_ERROR',\n errorDetails,\n );\n }\n }\n\n /**\n * Create collection (legacy method for backward compatibility)\n */\n async createCollection(options: {\n name: string;\n schema?: Record<string, any>;\n [key: string]: any;\n }): Promise<Collection> {\n const request: CreateCollectionRequest = {\n name: options.name,\n description: options.description,\n schema: options.schema as any,\n };\n return this.createCollectionWithSchema(request);\n }\n\n /**\n * Create collection matching the database integration guide format\n */\n async createCollectionWithSchema(request: CreateCollectionRequest): Promise<Collection> {\n const { data } = await this.httpClient.post<CreateCollectionResponse>('/collections', {\n name: request.name,\n description: request.description,\n schema: request.schema,\n });\n \n const collection = new Collection(this, request.name, data.collection.schema);\n this.collectionsCache.set(request.name, collection);\n \n return collection;\n }\n\n async getCollection(name: string): Promise<Collection> {\n if (this.collectionsCache.has(name)) {\n return this.collectionsCache.get(name)!;\n }\n\n const { data } = await this.httpClient.get(`/collections/${name}`);\n \n const collection = new Collection(this, name, data.schema);\n this.collectionsCache.set(name, collection);\n \n return collection;\n }\n\n /**\n * List collections (legacy method for backward compatibility)\n */\n async listCollections(): Promise<string[]> {\n const result = await this.listCollectionsDetailed();\n return result.collections.map(c => c.name);\n }\n\n /**\n * List collections with detailed information matching the database integration guide format\n */\n async listCollectionsDetailed(options?: {\n page?: number;\n pageSize?: number;\n search?: string;\n sortBy?: string;\n sortOrder?: 'asc' | 'desc';\n }): Promise<ListCollectionsResponse> {\n const params = new URLSearchParams();\n if (options?.page) params.append('page', options.page.toString());\n if (options?.pageSize) params.append('pageSize', options.pageSize.toString());\n if (options?.search) params.append('search', options.search);\n if (options?.sortBy) params.append('sortBy', options.sortBy);\n if (options?.sortOrder) params.append('sortOrder', options.sortOrder);\n\n const { data } = await this.httpClient.get<ListCollectionsResponse>(\n `/collections${params.toString() ? `?${params.toString()}` : ''}`\n );\n return data;\n }\n \n async getDocuments(collectionName: string, page: number, pageSize: number): Promise<Document[]> {\n const { data } = await this.httpClient.get(\n `/collections/${collectionName}/documents?page=${page}&pageSize=${pageSize}`\n );\n return data;\n }\n\n async deleteCollection(name: string): Promise<void> {\n await this.httpClient.delete(`/collections/${name}`);\n this.collectionsCache.delete(name);\n }\n\n /**\n * Execute SQL query (legacy method for backward compatibility)\n * @deprecated Use executeQuery for new code\n */\n async sql(query: string, params?: Record<string, any>): Promise<QueryResult> {\n return this.executeQuery({\n sql: query,\n parameters: params ? Object.values(params) : [],\n });\n }\n\n /**\n * Execute SQL query matching the database integration guide format\n */\n async executeQuery(request: ExecuteQueryRequest): Promise<QueryResult> {\n const { data } = await this.httpClient.post('/query/execute', {\n sql: request.sql,\n parameters: request.parameters || [],\n max_rows: request.max_rows || 1000,\n timeout_secs: request.timeout_secs || 300,\n });\n\n return {\n columns: data.columns || [],\n rows: data.rows || [],\n rows_affected: data.rows_affected,\n execution_time_ms: data.execution_time_ms || 0,\n queryPlan: data.query_plan,\n };\n }\n\n /**\n * Execute batch queries\n */\n async executeBatchQueries(request: BatchQueryRequest): Promise<BatchQueryResponse> {\n const { data } = await this.httpClient.post('/query/execute/batch', {\n queries: request.queries,\n transactional: request.transactional || false,\n });\n\n return {\n results: data.results || [],\n total_execution_time_ms: data.total_execution_time_ms || 0,\n };\n }\n\n async embed(\n text: string | string[],\n options: EmbedOptions = {},\n ): Promise<number[] | number[][]> {\n const isBatch = Array.isArray(text);\n const texts = isBatch ? text : [text];\n\n // v0.2.0: gateway endpoint renamed from /ai/embed to /ai/embeddings\n // (and /ai/embeddings/batch when len > 1).\n const path = isBatch ? '/ai/embeddings/batch' : '/ai/embeddings';\n const body = isBatch ? { texts, model: options.model } : { text: texts[0], model: options.model };\n const { data } = await this.httpClient.post(path, body);\n if (isBatch) return data.embeddings ?? data;\n return data.embedding ?? data.embeddings?.[0] ?? data;\n }\n\n // Internal method for HTTP client access\n _getHttpClient(): AxiosInstance {\n return this.httpClient;\n }\n\n // =================================================================\n // TABLE MANAGEMENT OPERATIONS\n // =================================================================\n\n /**\n * Creates a new table with the specified columns and constraints\n * @param tableName - Name of the table to create\n * @param columns - Column definitions for the table\n * @param options - Additional table creation options\n * @returns Promise resolving to table creation result\n */\n async createTable(\n tableName: string,\n columns: ColumnDefinition[],\n options: CreateTableOptions = {}\n ): Promise<QueryResult> {\n let sql = `CREATE TABLE ${options.ifNotExists ? 'IF NOT EXISTS' : ''} ${tableName} (`;\n\n const columnDefs = columns.map(col => {\n let def = `${col.name} ${col.dataType}`;\n\n if (col.constraints) {\n for (const constraint of col.constraints) {\n switch (constraint.type) {\n case 'PRIMARY_KEY':\n def += ' PRIMARY KEY';\n break;\n case 'UNIQUE':\n def += ' UNIQUE';\n break;\n case 'NOT_NULL':\n def += ' NOT NULL';\n break;\n case 'CHECK':\n def += ` CHECK (${constraint.expression})`;\n break;\n case 'FOREIGN_KEY':\n def += ` REFERENCES ${constraint.referencedTable}(${constraint.referencedColumn})`;\n break;\n case 'DEFAULT':\n def += ` DEFAULT ${col.defaultValue}`;\n break;\n }\n }\n }\n\n return def;\n }).join(', ');\n\n sql += columnDefs;\n\n if (options.constraints) {\n const constraintDefs = options.constraints.map(constraint => {\n switch (constraint.type) {\n case 'PRIMARY_KEY':\n return `PRIMARY KEY (${constraint.columns.join(', ')})`;\n case 'UNIQUE':\n return `UNIQUE (${constraint.columns.join(', ')})`;\n case 'CHECK':\n return `CHECK (${constraint.expression})`;\n case 'FOREIGN_KEY':\n return `FOREIGN KEY (${constraint.columns.join(', ')}) REFERENCES ${constraint.referencedTable}(${constraint.referencedColumns?.join(', ')})`;\n default:\n return '';\n }\n }).filter(def => def);\n\n if (constraintDefs.length > 0) {\n sql += ', ' + constraintDefs.join(', ');\n }\n }\n\n sql += ')';\n\n if (options.partitionBy) {\n sql += ` PARTITION BY ${options.partitionBy.type} (${options.partitionBy.column})`;\n }\n\n return this.sql(sql);\n }\n\n /**\n * Alters an existing table structure\n * @param tableName - Name of the table to alter\n * @param alterOptions - Alteration options and parameters\n * @returns Promise resolving to alteration result\n */\n async alterTable(tableName: string, alterOptions: AlterTableOptions): Promise<QueryResult> {\n let sql = `ALTER TABLE ${tableName} `;\n\n switch (alterOptions.action) {\n case 'ADD_COLUMN':\n if (!alterOptions.columnDefinition) {\n throw new ValidationError('Column definition required for ADD_COLUMN');\n }\n sql += `ADD COLUMN ${alterOptions.columnDefinition.name} ${alterOptions.columnDefinition.dataType}`;\n break;\n case 'DROP_COLUMN':\n sql += `DROP COLUMN ${alterOptions.columnName}`;\n break;\n case 'RENAME_COLUMN':\n sql += `RENAME COLUMN ${alterOptions.columnName} TO ${alterOptions.newColumnName}`;\n break;\n case 'ALTER_COLUMN':\n sql += `ALTER COLUMN ${alterOptions.columnName} TYPE ${alterOptions.newDataType}`;\n break;\n case 'ADD_CONSTRAINT':\n if (!alterOptions.constraint) {\n throw new ValidationError('Constraint required for ADD_CONSTRAINT');\n }\n sql += `ADD CONSTRAINT ${alterOptions.constraint.type.toLowerCase()}_constraint`;\n break;\n case 'DROP_CONSTRAINT':\n sql += `DROP CONSTRAINT ${alterOptions.constraintName}`;\n break;\n }\n\n return this.sql(sql);\n }\n\n /**\n * Drops an existing table\n * @param tableName - Name of the table to drop\n * @param options - Drop options\n * @returns Promise resolving to drop result\n */\n async dropTable(tableName: string, options: { ifExists?: boolean; cascade?: boolean } = {}): Promise<QueryResult> {\n let sql = `DROP TABLE ${options.ifExists ? 'IF EXISTS' : ''} ${tableName}`;\n if (options.cascade) {\n sql += ' CASCADE';\n }\n return this.sql(sql);\n }\n\n /**\n * Describes a table structure including columns, constraints, and indexes\n * @param tableName - Name of the table to describe\n * @returns Promise resolving to table information\n */\n async describeTable(tableName: string): Promise<TableInfo> {\n // v0.2.0: gateway uses /schema/tables/:t (the /table/:t/info endpoint\n // never existed). Compose the full TableInfo from the columns +\n // indexes side-channel calls.\n const [tableRes, colsRes, idxRes] = await Promise.all([\n this.httpClient.get(`/schema/tables/${tableName}`),\n this.httpClient.get(`/schema/tables/${tableName}/columns`),\n this.httpClient.get(`/schema/tables/${tableName}/indexes`),\n ]);\n return {\n ...tableRes.data,\n columns: colsRes.data?.columns ?? colsRes.data ?? [],\n indexes: idxRes.data?.indexes ?? idxRes.data ?? [],\n } as TableInfo;\n }\n\n /**\n * Lists all tables in the current database\n * @param pattern - Optional pattern to filter table names\n * @returns Promise resolving to array of table names\n */\n async showTables(pattern?: string): Promise<string[]> {\n const sql = pattern ? `SHOW TABLES LIKE '${pattern}'` : 'SHOW TABLES';\n const result = await this.sql(sql);\n return result.rows.map(row => Object.values(row)[0] as string);\n }\n\n // =================================================================\n // INDEX MANAGEMENT OPERATIONS\n // =================================================================\n\n /**\n * Creates an index on a table\n * @param indexDef - Index definition with name, table, columns, and options\n * @returns Promise resolving to index creation result\n */\n async createIndex(indexDef: IndexDefinition): Promise<QueryResult> {\n const columns = indexDef.columns.map(col => `${col.name} ${col.order || 'ASC'}`).join(', ');\n const sql = `CREATE ${indexDef.unique ? 'UNIQUE' : ''} INDEX ${indexDef.ifNotExists ? 'IF NOT EXISTS' : ''} ${indexDef.name} ON ${indexDef.tableName} (${columns})`;\n return this.sql(sql);\n }\n\n /**\n * Drops an existing index\n * @param indexName - Name of the index to drop\n * @param options - Drop options\n * @returns Promise resolving to drop result\n */\n async dropIndex(indexName: string, options: { ifExists?: boolean } = {}): Promise<QueryResult> {\n const sql = `DROP INDEX ${options.ifExists ? 'IF EXISTS' : ''} ${indexName}`;\n return this.sql(sql);\n }\n\n /**\n * Lists all indexes, optionally filtered by table name\n * @param tableName - Optional table name to filter indexes\n * @returns Promise resolving to array of index information\n */\n async showIndexes(tableName?: string): Promise<Array<{ name: string; table: string; columns: string[]; unique: boolean }>> {\n const sql = tableName ? `SHOW INDEXES FROM ${tableName}` : 'SHOW INDEXES';\n const result = await this.sql(sql);\n \n // Convert array rows to objects using column names\n const indexNameIdx = result.columns.findIndex(c => c.name === 'index_name' || c.name === 'name');\n const tableNameIdx = result.columns.findIndex(c => c.name === 'table_name' || c.name === 'table');\n const columnsIdx = result.columns.findIndex(c => c.name === 'columns' || c.name === 'column');\n const uniqueIdx = result.columns.findIndex(c => c.name === 'is_unique' || c.name === 'unique');\n \n return result.rows.map(row => {\n const indexName = indexNameIdx >= 0 ? row[indexNameIdx] : '';\n const table = tableNameIdx >= 0 ? row[tableNameIdx] : '';\n const columnsStr = columnsIdx >= 0 ? row[columnsIdx] : '';\n const isUnique = uniqueIdx >= 0 ? row[uniqueIdx] : false;\n \n return {\n name: String(indexName),\n table: String(table),\n columns: typeof columnsStr === 'string' ? columnsStr.split(',') : [],\n unique: Boolean(isUnique)\n };\n });\n }\n\n // =================================================================\n // TRANSACTION SUPPORT\n // =================================================================\n\n /**\n * Begins a new transaction\n * @param options - Transaction options including isolation level\n * @returns Promise resolving to transaction context\n */\n async beginTransaction(options: TransactionOptions = {}): Promise<TransactionContext> {\n if (this.currentTransaction) {\n throw new Error('Transaction already in progress');\n }\n\n let sql = 'BEGIN TRANSACTION';\n if (options.isolationLevel) {\n sql += ` ISOLATION LEVEL ${options.isolationLevel}`;\n }\n if (options.readOnly) {\n sql += ' READ ONLY';\n }\n\n await this.sql(sql);\n\n this.currentTransaction = {\n id: Math.random().toString(36).substring(7),\n startTime: new Date(),\n isolationLevel: options.isolationLevel || 'READ_COMMITTED',\n readOnly: options.readOnly || false\n };\n\n if (options.timeout) {\n setTimeout(() => {\n if (this.currentTransaction) {\n this.rollbackTransaction().catch(console.error);\n }\n }, options.timeout);\n }\n\n return this.currentTransaction;\n }\n\n /**\n * Commits the current transaction\n * @returns Promise resolving when transaction is committed\n */\n async commitTransaction(): Promise<void> {\n if (!this.currentTransaction) {\n throw new Error('No transaction in progress');\n }\n\n await this.sql('COMMIT');\n this.currentTransaction = null;\n }\n\n /**\n * Rolls back the current transaction\n * @returns Promise resolving when transaction is rolled back\n */\n async rollbackTransaction(): Promise<void> {\n if (!this.currentTransaction) {\n throw new Error('No transaction in progress');\n }\n\n await this.sql('ROLLBACK');\n this.currentTransaction = null;\n }\n\n /**\n * Gets the current transaction context\n * @returns Current transaction context or null if no transaction\n */\n getCurrentTransaction(): TransactionContext | null {\n return this.currentTransaction;\n }\n\n // =================================================================\n // BATCH OPERATIONS\n // =================================================================\n\n /**\n * Performs batch insert operations\n * @param options - Batch insert options with table, columns, and rows\n * @returns Promise resolving to batch operation result\n */\n async batchInsert(options: BatchInsertOptions): Promise<BatchResult> {\n // v0.2.0: gateway never had /batch/{insert,update,delete}; batched\n // SQL goes through /query/execute/batch as a list of statements.\n // Rows can come in as arrays or as keyed records; normalise to\n // positional arrays aligned with `columns`.\n const cols: string[] = (options.columns ?? []) as string[];\n const queries = (options.rows as any[]).map((row: any) => {\n const values: any[] = Array.isArray(row) ? row : cols.map((c) => row[c]);\n return {\n sql: `INSERT INTO ${options.tableName} (${cols.join(', ')}) VALUES (${values.map((_, i) => '$' + (i + 1)).join(', ')})`,\n parameters: values,\n };\n });\n const { data } = await this.httpClient.post('/query/execute/batch', {\n queries,\n transactional: false,\n });\n const results = data.results ?? [];\n const successful = results.filter((r: any) => !r.error).length;\n return {\n totalProcessed: results.length,\n successful,\n failed: results.length - successful,\n errors: results.filter((r: any) => r.error).map((r: any) => r.error),\n tookMs: data.total_execution_time_ms ?? 0,\n };\n }\n\n /**\n * Performs batch update operations\n * @param options - Batch update options with table and update conditions\n * @returns Promise resolving to batch operation result\n */\n async batchUpdate(options: BatchUpdateOptions): Promise<BatchResult> {\n // Each update becomes its own UPDATE ... WHERE statement under\n // /query/execute/batch.\n const queries = options.updates.map((u: any) => {\n const setClause = Object.keys(u.set ?? {})\n .map((k, i) => `${k} = $${i + 1}`)\n .join(', ');\n const setVals = Object.values(u.set ?? {});\n const whereStr = u.where ?? '1=1';\n return {\n sql: `UPDATE ${options.tableName} SET ${setClause} WHERE ${whereStr}`,\n parameters: setVals,\n };\n });\n const { data } = await this.httpClient.post('/query/execute/batch', {\n queries,\n transactional: false,\n });\n const results = data.results ?? [];\n const successful = results.filter((r: any) => !r.error).length;\n return {\n totalProcessed: results.length,\n successful,\n failed: results.length - successful,\n errors: results.filter((r: any) => r.error).map((r: any) => r.error),\n tookMs: data.total_execution_time_ms ?? 0,\n };\n }\n\n /**\n * Performs batch delete operations\n * @param options - Batch delete options with table and where conditions\n * @returns Promise resolving to batch operation result\n */\n async batchDelete(options: BatchDeleteOptions): Promise<BatchResult> {\n const queries = ((options.whereConditions ?? []) as any[]).map((cond: any) => ({\n sql: `DELETE FROM ${options.tableName} WHERE ${typeof cond === 'string' ? cond : JSON.stringify(cond)}`,\n parameters: [] as any[],\n }));\n const { data } = await this.httpClient.post('/query/execute/batch', {\n queries,\n transactional: false,\n });\n const results = data.results ?? [];\n const successful = results.filter((r: any) => !r.error).length;\n return {\n totalProcessed: results.length,\n successful,\n failed: results.length - successful,\n errors: results.filter((r: any) => r.error).map((r: any) => r.error),\n tookMs: data.total_execution_time_ms ?? 0,\n };\n }\n\n // =================================================================\n // ADVANCED SQL FEATURES\n // =================================================================\n\n /**\n * Prepares a SQL statement for repeated execution\n * @param sql - SQL statement to prepare\n * @param options - Preparation options\n * @returns Promise resolving to prepared statement\n */\n async prepareStatement(sql: string, options: PreparedStatementOptions = {}): Promise<PreparedStatement> {\n // v0.2.0: gateway routes are /query/{prepare,exec,close} (POST only).\n const { data } = await this.httpClient.post('/query/prepare', {\n sql,\n name: options.name,\n parameter_types: options.parameterTypes\n });\n\n const prepared: PreparedStatement = {\n id: data.statement_id ?? data.id,\n sql: sql,\n parameterCount: data.parameter_count ?? data.parameters_count ?? 0,\n };\n\n if (options.name) {\n this.preparedStatements.set(options.name, prepared);\n }\n\n return prepared;\n }\n\n /**\n * Executes a prepared statement with parameters\n * @param statementId - ID of the prepared statement or statement name\n * @param params - Parameters for the prepared statement\n * @returns Promise resolving to query result\n */\n async executePrepared(statementId: string, params: any[] = []): Promise<QueryResult> {\n // Check if it's a named statement\n if (this.preparedStatements.has(statementId)) {\n statementId = this.preparedStatements.get(statementId)!.id;\n }\n\n const { data } = await this.httpClient.post('/query/exec', {\n statement_id: statementId,\n parameters: params\n });\n\n return {\n columns: data.columns || [],\n rows: data.rows || [],\n rows_affected: data.rows_affected,\n execution_time_ms: data.execution_time_ms || data.took_ms || 0,\n queryPlan: data.query_plan\n };\n }\n\n /**\n * Deallocates a prepared statement\n * @param statementId - ID of the prepared statement or statement name\n * @returns Promise resolving when statement is deallocated\n */\n async deallocatePrepared(statementId: string): Promise<void> {\n // v0.2.0: gateway uses POST /query/close, not DELETE /prepare/:id.\n if (this.preparedStatements.has(statementId)) {\n const prepared = this.preparedStatements.get(statementId)!;\n await this.httpClient.post('/query/close', { statement_id: prepared.id });\n this.preparedStatements.delete(statementId);\n } else {\n await this.httpClient.post('/query/close', { statement_id: statementId });\n }\n }\n\n /**\n * Executes a query with Common Table Expressions (CTEs)\n * @param ctes - Array of CTE definitions\n * @param mainQuery - Main query that uses the CTEs\n * @param params - Optional parameters for the query\n * @returns Promise resolving to query result\n */\n async queryWithCTEs(ctes: CTEDefinition[], mainQuery: string, params?: Record<string, any>): Promise<QueryResult> {\n const cteSQL = ctes.map(cte => {\n const columns = cte.columns ? `(${cte.columns.join(', ')})` : '';\n return `${cte.name}${columns} AS (${cte.query})`;\n }).join(', ');\n\n const sql = `WITH ${cteSQL} ${mainQuery}`;\n return this.sql(sql, params);\n }\n\n /**\n * Executes a query with window functions\n * @param selectQuery - Base SELECT query\n * @param windowFunctions - Array of window function definitions\n * @param params - Optional parameters for the query\n * @returns Promise resolving to query result\n */\n async queryWithWindowFunctions(\n selectQuery: string,\n windowFunctions: Array<{ alias: string; function: string; options: WindowFunctionOptions }>,\n params?: Record<string, any>\n ): Promise<QueryResult> {\n const windowClauses = windowFunctions.map(wf => {\n let clause = `${wf.function} OVER (`;\n\n if (wf.options.partitionBy) {\n clause += `PARTITION BY ${wf.options.partitionBy.join(', ')}`;\n }\n\n if (wf.options.orderBy) {\n const orderBy = wf.options.orderBy.map(order => `${order.column} ${order.direction}`).join(', ');\n clause += ` ORDER BY ${orderBy}`;\n }\n\n if (wf.options.frame) {\n clause += ` ${wf.options.frame.type} BETWEEN ${wf.options.frame.start}`;\n if (wf.options.frame.end) {\n clause += ` AND ${wf.options.frame.end}`;\n }\n }\n\n clause += `) AS ${wf.alias}`;\n return clause;\n }).join(', ');\n\n const sql = `${selectQuery}, ${windowClauses}`;\n return this.sql(sql, params);\n }\n\n /**\n * Performs JSON operations on JSON/JSONB columns\n * @param tableName - Table containing JSON data\n * @param jsonColumn - Name of the JSON column\n * @param operation - JSON operation to perform\n * @param path - JSON path for the operation\n * @param value - Value for update operations\n * @param whereClause - Optional WHERE clause\n * @returns Promise resolving to query result\n */\n async jsonQuery(\n tableName: string,\n jsonColumn: string,\n operation: 'extract' | 'update' | 'delete' | 'contains',\n path: string,\n value?: any,\n whereClause?: string\n ): Promise<QueryResult> {\n let sql: string;\n\n switch (operation) {\n case 'extract':\n sql = `SELECT ${jsonColumn}->>'${path}' as extracted_value FROM ${tableName}`;\n break;\n case 'update':\n sql = `UPDATE ${tableName} SET ${jsonColumn} = jsonb_set(${jsonColumn}, '{${path}}', '${JSON.stringify(value)}')`;\n break;\n case 'delete':\n sql = `UPDATE ${tableName} SET ${jsonColumn} = ${jsonColumn} - '${path}'`;\n break;\n case 'contains':\n sql = `SELECT * FROM ${tableName} WHERE ${jsonColumn} @> '{\"${path}\": ${JSON.stringify(value)}}'`;\n break;\n }\n\n if (whereClause && operation !== 'contains') {\n sql += ` WHERE ${whereClause}`;\n }\n\n return this.sql(sql);\n }\n\n // =================================================================\n // VECTOR OPERATIONS\n // =================================================================\n\n /**\n * Performs vector addition\n * @param vector1 - First vector\n * @param vector2 - Second vector\n * @returns Promise resolving to vector addition result\n */\n async vectorAdd(vector1: number[], vector2: number[]): Promise<VectorArithmeticResult> {\n if (vector1.length !== vector2.length) {\n throw new VectorError('Vector dimensions must match', 'DIMENSION_MISMATCH');\n }\n\n // v0.2.0: gateway exposes a single /vector-algebra/operation endpoint\n // with an `op` discriminator instead of one route per math op.\n const { data } = await this.httpClient.post('/vector-algebra/operation', {\n op: 'add', a: vector1, b: vector2,\n });\n const result = data.result ?? data.vector ?? [];\n return {\n result: { values: result, dimensions: result.length },\n operation: 'addition',\n tookMs: data.took_ms,\n };\n }\n\n /**\n * Performs vector subtraction\n */\n async vectorSubtract(vector1: number[], vector2: number[]): Promise<VectorArithmeticResult> {\n if (vector1.length !== vector2.length) {\n throw new VectorError('Vector dimensions must match', 'DIMENSION_MISMATCH');\n }\n const { data } = await this.httpClient.post('/vector-algebra/operation', {\n op: 'subtract', a: vector1, b: vector2,\n });\n const result = data.result ?? data.vector ?? [];\n return {\n result: { values: result, dimensions: result.length },\n operation: 'subtraction',\n tookMs: data.took_ms,\n };\n }\n\n /**\n * Performs scalar multiplication on a vector\n */\n async vectorScalarMultiply(vector: number[], scalar: number): Promise<VectorArithmeticResult> {\n const { data } = await this.httpClient.post('/vector-algebra/operation', {\n op: 'scalar_multiply', a: vector, scalar,\n });\n const result = data.result ?? data.vector ?? [];\n return {\n result: { values: result, dimensions: result.length },\n operation: 'scalar_multiplication',\n tookMs: data.took_ms,\n };\n }\n\n /**\n * Calculates the dot product of two vectors\n */\n async vectorDotProduct(vector1: number[], vector2: number[]): Promise<{ dotProduct: number; tookMs: number }> {\n if (vector1.length !== vector2.length) {\n throw new VectorError('Vector dimensions must match', 'DIMENSION_MISMATCH');\n }\n const { data } = await this.httpClient.post('/vector-algebra/operation', {\n op: 'dot_product', a: vector1, b: vector2,\n });\n return { dotProduct: data.scalar ?? data.dot_product ?? 0, tookMs: data.took_ms };\n }\n\n /**\n * Calculates cosine similarity between two vectors\n */\n async cosineSimilarity(vector1: number[], vector2: number[]): Promise<VectorSimilarityResult> {\n if (vector1.length !== vector2.length) {\n throw new VectorError('Vector dimensions must match', 'DIMENSION_MISMATCH');\n }\n const { data } = await this.httpClient.post('/vector-algebra/operation', {\n op: 'cosine_similarity', a: vector1, b: vector2,\n });\n return { similarity: data.scalar ?? data.similarity ?? 0, function: 'cosine', tookMs: data.took_ms };\n }\n\n /**\n * Calculates L2 (Euclidean) distance between two vectors\n */\n async l2Distance(vector1: number[], vector2: number[]): Promise<VectorSimilarityResult> {\n if (vector1.length !== vector2.length) {\n throw new VectorError('Vector dimensions must match', 'DIMENSION_MISMATCH');\n }\n const { data } = await this.httpClient.post('/vector-algebra/operation', {\n op: 'l2_distance', a: vector1, b: vector2,\n });\n const distance = data.scalar ?? data.distance ?? 0;\n return { distance, similarity: distance, function: 'l2', tookMs: data.took_ms };\n }\n\n /**\n * Calculates inner product between two vectors\n */\n async innerProduct(vector1: number[], vector2: number[]): Promise<VectorSimilarityResult> {\n if (vector1.length !== vector2.length) {\n throw new VectorError('Vector dimensions must match', 'DIMENSION_MISMATCH');\n }\n const { data } = await this.httpClient.post('/vector-algebra/operation', {\n op: 'inner_product', a: vector1, b: vector2,\n });\n return { similarity: data.scalar ?? data.inner_product ?? 0, function: 'inner_product', tookMs: data.took_ms };\n }\n\n /**\n * Performs K-nearest neighbors vector search.\n * v0.2.0: routes through /vectors/collections/:c/search with mode discriminator.\n */\n async knnSearch(options: KNNSearchOptions): Promise<VectorSearchResult[]> {\n const collection = (options as any).collectionName ?? options.tableName;\n const { data } = await this.httpClient.post(`/vectors/collections/${collection}/search`, {\n mode: 'knn',\n vector: options.queryVector,\n limit: options.k,\n filter: options.filter,\n });\n return (data.matches ?? data.results ?? []).map((r: any) => ({\n id: r.id, vector: r.vector, similarity: r.similarity, distance: r.distance, metadata: r.metadata,\n }));\n }\n\n /**\n * Performs range-based vector similarity search.\n */\n async rangeSearch(options: RangeSearchOptions): Promise<VectorSearchResult[]> {\n const collection = (options as any).collectionName ?? options.tableName;\n const { data } = await this.httpClient.post(`/vectors/collections/${collection}/search`, {\n mode: 'range',\n vector: options.queryVector,\n threshold: options.threshold,\n max_results: options.maxResults,\n filter: options.filter,\n });\n return (data.matches ?? data.results ?? []).map((r: any) => ({\n id: r.id, vector: r.vector, similarity: r.similarity, distance: r.distance, metadata: r.metadata,\n }));\n }\n\n /**\n * Performs hybrid search combining vector similarity and SQL filtering.\n */\n async hybridSearch(options: HybridSearchOptions): Promise<VectorSearchResult[]> {\n const collection = (options as any).collectionName ?? (options as any).tableName;\n const { data } = await this.httpClient.post(`/vectors/collections/${collection}/search`, {\n mode: 'hybrid',\n vector: options.vector,\n text_query: options.textQuery,\n sql_filter: options.sqlFilter,\n limit: options.k,\n threshold: options.threshold,\n metric: options.metric,\n filter: options.filter,\n weights: options.weights,\n });\n return (data.matches ?? data.results ?? []).map((r: any) => ({\n id: r.id, vector: r.vector, similarity: r.similarity, distance: r.distance, metadata: r.metadata,\n }));\n }\n\n /**\n * Normalizes a vector to unit length\n */\n async normalizeVector(vector: number[]): Promise<VectorArithmeticResult> {\n const { data } = await this.httpClient.post('/vector-algebra/operation', {\n op: 'normalize', a: vector,\n });\n const result = data.result ?? data.vector ?? [];\n return {\n result: { values: result, dimensions: result.length },\n operation: 'normalization',\n tookMs: data.took_ms,\n };\n }\n\n /**\n * Calculates the magnitude (length) of a vector\n */\n async vectorMagnitude(vector: number[]): Promise<{ magnitude: number; tookMs: number }> {\n const { data } = await this.httpClient.post('/vector-algebra/operation', {\n op: 'magnitude', a: vector,\n });\n return { magnitude: data.scalar ?? data.magnitude ?? 0, tookMs: data.took_ms };\n }\n\n // =================================================================\n // AUTHENTICATION & USER MANAGEMENT\n // =================================================================\n\n /**\n * Register a new user\n */\n async registerUser(request: RegisterRequest): Promise<RegisterResponse> {\n const { data } = await this.httpClient.post<RegisterResponse>('/auth/register', {\n username: request.username,\n email: request.email,\n password: request.password,\n });\n return data;\n }\n\n /**\n * Login with username and password\n */\n async login(request: LoginRequest): Promise<LoginResponse> {\n const { data } = await this.httpClient.post<LoginResponse>('/auth/login', {\n username: request.username,\n password: request.password,\n });\n \n // Update JWT token in config if login successful\n if (data.access_token) {\n this.config.jwtToken = data.access_token;\n // Update HTTP client headers\n this.httpClient.defaults.headers['Authorization'] = `Bearer ${data.access_token}`;\n // Remove API key header if present\n delete this.httpClient.defaults.headers['X-API-Key'];\n }\n \n return data;\n }\n\n /**\n * Refresh JWT token.\n *\n * v0.2.0: the gateway does not currently expose a refresh endpoint —\n * this method now re-runs login() with the same credentials. Pass\n * the credentials in the call site (or supply them at SDK construction\n * time and we'll re-use the cached pair).\n */\n async refreshToken(credentials?: { username?: string; password?: string }): Promise<RefreshResponse> {\n if (credentials?.username && credentials?.password) {\n const login = await this.login({ username: credentials.username, password: credentials.password });\n return {\n access_token: login.access_token,\n refresh_token: '',\n token_type: 'Bearer',\n expires_in: login.expires_in,\n } as RefreshResponse;\n }\n throw new ValidationError(\n 'refreshToken now requires credentials — the gateway has no /auth/refresh endpoint in v1.5.0-ce. Pass {username, password} or call login() again.'\n );\n }\n\n /**\n * Set JWT token manually (useful after login)\n */\n setJWTToken(token: string): void {\n this.config.jwtToken = token;\n this.httpClient.defaults.headers['Authorization'] = `Bearer ${token}`;\n delete this.httpClient.defaults.headers['X-API-Key'];\n }\n\n /**\n * Clear authentication (logout)\n */\n logout(): void {\n this.config.jwtToken = '';\n delete this.httpClient.defaults.headers['Authorization'];\n delete this.httpClient.defaults.headers['X-API-Key'];\n }\n\n // =================================================================\n // API KEY MANAGEMENT\n // =================================================================\n\n /**\n * Create a new API key\n */\n async createAPIKey(request: CreateAPIKeyRequest): Promise<CreateAPIKeyResponse> {\n const { data } = await this.httpClient.post<CreateAPIKeyResponse>('/api-keys', {\n name: request.name,\n permission: request.permission,\n expires_in_days: request.expires_in_days,\n });\n return data;\n }\n\n /**\n * List all API keys\n */\n async listAPIKeys(): Promise<ListAPIKeysResponse> {\n const { data } = await this.httpClient.get<ListAPIKeysResponse>('/api-keys');\n return data;\n }\n\n /**\n * Get API key statistics\n */\n async getAPIKeyStats(keyId: string): Promise<APIKeyStats> {\n const { data } = await this.httpClient.get<APIKeyStats>(`/api-keys/${keyId}/stats`);\n return data;\n }\n\n /**\n * Revoke (delete) an API key\n */\n async revokeAPIKey(keyId: string): Promise<void> {\n await this.httpClient.delete(`/api-keys/${keyId}`);\n }\n\n // =================================================================\n // MULTIMEDIA MANAGEMENT\n // =================================================================\n\n /**\n * Upload multimedia file to a document\n */\n async uploadMultimedia(\n collection: string,\n documentId: string,\n file: File | Blob | Buffer,\n metadata?: Record<string, any>\n ): Promise<MultimediaInfo> {\n // Dynamic import to handle both Node.js and browser environments\n let FormDataClass: any;\n try {\n // Try Node.js form-data first\n FormDataClass = require('form-data');\n } catch {\n // Fallback to browser FormData\n FormDataClass = FormData;\n }\n \n const formData = new FormDataClass();\n \n // Append file - handle Buffer for Node.js\n if (Buffer.isBuffer(file)) {\n formData.append('file', file, { filename: 'upload' });\n } else {\n formData.append('file', file);\n }\n \n if (metadata) {\n formData.append('metadata', JSON.stringify(metadata));\n }\n\n const headers: Record<string, string> = {};\n // form-data has getHeaders() method in Node.js\n if (typeof formData.getHeaders === 'function') {\n Object.assign(headers, formData.getHeaders());\n }\n\n const { data } = await this.httpClient.post<MultimediaInfo>(\n `/multimedia/${collection}/documents/${documentId}/multimedia`,\n formData,\n {\n headers,\n }\n );\n return data;\n }\n\n /**\n * Get multimedia file URL (for viewing/downloading)\n */\n getMultimediaUrl(collection: string, documentId: string, multimediaId: string, download = false): string {\n const protocol = this.config.useHttps ? 'https' : 'http';\n const baseUrl = `${protocol}://${this.config.host}:${this.config.port}/v1`;\n return `${baseUrl}/multimedia/${collection}/documents/${documentId}/multimedia/${multimediaId}${download ? '?download=true' : ''}`;\n }\n\n /**\n * Get multimedia thumbnail URL\n */\n getMultimediaThumbnailUrl(collection: string, documentId: string, multimediaId: string): string {\n const protocol = this.config.useHttps ? 'https' : 'http';\n const baseUrl = `${protocol}://${this.config.host}:${this.config.port}/v1`;\n return `${baseUrl}/multimedia/${collection}/documents/${documentId}/multimedia/${multimediaId}/thumbnail`;\n }\n\n /**\n * List multimedia files in a document\n */\n async listMultimedia(\n collection: string,\n documentId: string,\n limit = 50,\n offset = 0\n ): Promise<ListMultimediaResponse> {\n const { data } = await this.httpClient.get<ListMultimediaResponse>(\n `/multimedia/${collection}/documents/${documentId}/multimedia?limit=${limit}&offset=${offset}`\n );\n return data;\n }\n\n /**\n * Get multimedia file information\n */\n async getMultimedia(\n collection: string,\n documentId: string,\n multimediaId: string\n ): Promise<MultimediaInfo> {\n const { data } = await this.httpClient.get<MultimediaInfo>(\n `/multimedia/${collection}/documents/${documentId}/multimedia/${multimediaId}`\n );\n return data;\n }\n\n /**\n * Delete multimedia file\n */\n async deleteMultimedia(collection: string, documentId: string, multimediaId: string): Promise<void> {\n await this.httpClient.delete(`/multimedia/${collection}/documents/${documentId}/multimedia/${multimediaId}`);\n }\n}","/**\n * Real-time subscription support for SynapCores SDK.\n *\n * v0.2.0: WebSocket auth uses the ticket exchange flow.\n * 1. POST /v1/ws/ticket -> {token, expiresAt}\n * 2. Open `ws://host:port/ws?token={ticket}` (note: root /ws, not /v1/ws)\n */\n\nimport WebSocket from 'ws';\nimport { EventEmitter } from 'events';\nimport { Collection } from './collection';\nimport { SubscriptionOptions, SubscriptionEvent } from './types/subscription';\nimport { Document } from './types/collection';\n\nexport class Subscription extends EventEmitter {\n private ws?: WebSocket;\n private running = false;\n private reconnectTimeout?: NodeJS.Timeout;\n private reconnectAttempts = 0;\n private readonly maxReconnectAttempts = 5;\n private readonly reconnectDelay = 1000;\n\n constructor(\n private readonly collection: Collection,\n private readonly options: SubscriptionOptions = {},\n ) {\n super();\n }\n\n async connect(): Promise<void> {\n if (this.running) {\n return;\n }\n\n this.running = true;\n await this.createConnection();\n }\n\n private async createConnection(): Promise<void> {\n const client: any = (this.collection as any).client;\n // Mint a fresh WS ticket using the SDK auth context.\n const { token } = await client.createWsTicket();\n\n const wsBase: string = client._getWsBaseUrl\n ? client._getWsBaseUrl()\n : (() => {\n const cfg = client.config ?? client._getConfig();\n const protocol = cfg.useHttps ? 'wss' : 'ws';\n return `${protocol}://${cfg.host}:${cfg.port}`;\n })();\n const url = `${wsBase}/ws?token=${encodeURIComponent(token)}`;\n\n this.ws = new WebSocket(url);\n\n this.ws.on('open', () => {\n this.reconnectAttempts = 0;\n this.subscribe();\n });\n\n this.ws.on('message', (data) => {\n this.handleMessage(data.toString());\n });\n\n this.ws.on('error', (error) => {\n this.emit('error', error);\n });\n\n this.ws.on('close', () => {\n if (this.running) {\n this.scheduleReconnect();\n }\n });\n\n this.ws.on('ping', () => {\n this.ws?.pong();\n });\n }\n\n private subscribe(): void {\n const subscribeMessage = {\n type: 'subscribe',\n collection: this.collection.name,\n filter: this.options.filter || {},\n };\n\n this.ws?.send(JSON.stringify(subscribeMessage));\n }\n\n private handleMessage(message: string): void {\n try {\n const data = JSON.parse(message);\n\n if (data.type === 'error') {\n this.emit('error', new Error(data.message));\n return;\n }\n\n if (data.type === 'change') {\n const event: SubscriptionEvent = {\n operation: data.operation,\n collection: data.collection,\n document: data.document as Document,\n timestamp: new Date(data.timestamp),\n sequence: data.sequence,\n };\n\n this.emit('change', event);\n\n if (this.options.onChange) {\n Promise.resolve(this.options.onChange(event)).catch((error) => {\n this.emit('error', error);\n });\n }\n }\n } catch (error) {\n this.emit('error', error);\n }\n }\n\n private scheduleReconnect(): void {\n if (this.reconnectAttempts >= this.maxReconnectAttempts) {\n this.emit('error', new Error('Max reconnection attempts reached'));\n this.close();\n return;\n }\n\n this.reconnectAttempts++;\n const delay = this.reconnectDelay * Math.pow(2, this.reconnectAttempts - 1);\n\n this.reconnectTimeout = setTimeout(() => {\n this.createConnection().catch((error) => {\n this.emit('error', error);\n });\n }, delay);\n }\n\n async close(): Promise<void> {\n this.running = false;\n\n if (this.reconnectTimeout) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = undefined;\n }\n\n if (this.ws) {\n this.ws.close();\n this.ws = undefined;\n }\n\n this.removeAllListeners();\n }\n\n // Async iterator support\n async *[Symbol.asyncIterator](): AsyncIterator<SubscriptionEvent> {\n const events: SubscriptionEvent[] = [];\n let resolver: ((value: IteratorResult<SubscriptionEvent>) => void) | null = null;\n\n const handleChange = (event: SubscriptionEvent) => {\n if (resolver) {\n resolver({ done: false, value: event });\n resolver = null;\n } else {\n events.push(event);\n }\n };\n\n this.on('change', handleChange);\n\n try {\n while (this.running) {\n if (events.length > 0) {\n yield events.shift()!;\n } else {\n yield await new Promise<SubscriptionEvent>((resolve) => {\n resolver = (result) => {\n if (!result.done) {\n resolve(result.value);\n }\n };\n });\n }\n }\n } finally {\n this.off('change', handleChange);\n }\n }\n}\n","/**\n * Collection class for SynapCores SDK\n */\n\nimport { SynapCores } from './client';\nimport { Subscription } from './subscription';\nimport {\n Document,\n SearchResult,\n SearchOptions,\n VectorSearchOptions,\n QueryOptions,\n InsertResult,\n UpdateOptions,\n CollectionStats,\n IndexOptions,\n} from './types/collection';\nimport { SubscriptionOptions } from './types/subscription';\n\nexport class Collection {\n constructor(\n private readonly client: SynapCores,\n public readonly name: string,\n public readonly schema?: Record<string, any>,\n ) {}\n\n private get basePath(): string {\n return `/collections/${this.name}`;\n }\n\n async insert(\n documents: Record<string, any> | Record<string, any>[],\n _autoEmbed = true,\n ): Promise<InsertResult> {\n const isSingle = !Array.isArray(documents);\n const docs = isSingle ? [documents] : documents;\n\n if (isSingle) {\n // Single document insert - use /documents endpoint\n const { data } = await this.client._getHttpClient().post(\n `${this.basePath}/documents`,\n documents, // Send the document directly as the body\n );\n return {\n ids: [data.id],\n inserted: 1,\n };\n } else {\n // Bulk insert - use /documents/bulk endpoint\n // Format documents for the bulk endpoint\n // Because of #[serde(flatten)], we need to spread the document fields at root level\n const formattedDocs = docs.map(doc => ({\n ...doc, // Spread document fields at root level\n id: null // Optional ID field\n }));\n\n const bulkUrl = `${this.basePath}/documents/bulk`;\n console.log('Calling bulk insert endpoint:', bulkUrl);\n console.log('Payload:', JSON.stringify({ documents: formattedDocs }, null, 2));\n\n const { data } = await this.client._getHttpClient().post(\n bulkUrl,\n {\n documents: formattedDocs,\n },\n );\n\n return {\n ids: data.ids || [],\n inserted: data.inserted || docs.length,\n };\n }\n }\n\n async get(documentId: string): Promise<Document | null> {\n try {\n const { data } = await this.client._getHttpClient().get(\n `${this.basePath}/documents/${documentId}`,\n );\n return data;\n } catch (error: any) {\n if (error.code === 'NOT_FOUND') {\n return null;\n }\n throw error;\n }\n }\n\n async update(\n documentId: string,\n data: Record<string, any>,\n options: UpdateOptions = {},\n ): Promise<Document> {\n const response = await this.client._getHttpClient().patch(\n `${this.basePath}/documents/${documentId}`,\n {\n data,\n merge: options.merge !== false,\n },\n );\n return response.data;\n }\n\n async delete(documentId: string | string[]): Promise<{ deleted: number }> {\n const ids = Array.isArray(documentId) ? documentId : [documentId];\n \n const { data } = await this.client._getHttpClient().request({\n method: 'DELETE',\n url: `${this.basePath}/documents`,\n data: { ids },\n });\n\n return { deleted: data.deleted };\n }\n\n async search(options: SearchOptions): Promise<SearchResult> {\n // According to AIDB gateway, the search endpoint expects:\n // - query: JSON filter conditions\n // - limit: number of results\n // - offset: pagination offset\n const searchUrl = `${this.basePath}/search`;\n console.log('Calling search endpoint:', searchUrl);\n console.log('Request body:', {\n query: options.filter || {},\n limit: options.topK || 10,\n offset: options.offset || 0,\n });\n\n const { data } = await this.client._getHttpClient().post(\n searchUrl,\n {\n query: options.filter || {}, // Use filter as the query\n limit: options.topK || 10,\n offset: options.offset || 0,\n },\n );\n\n return {\n documents: data.documents || data, // Handle different response formats\n total: data.total,\n tookMs: data.took_ms,\n nextOffset: data.next_offset,\n };\n }\n\n async vectorSearch(options: VectorSearchOptions): Promise<SearchResult> {\n const { data } = await this.client._getHttpClient().post(\n `${this.basePath}/vector_search`,\n {\n vector: options.vector,\n field: options.field || 'embedding',\n top_k: options.topK || 10,\n filter: options.filter,\n distance_metric: options.distanceMetric || 'cosine',\n include_metadata: options.includeMetadata,\n },\n );\n\n return {\n documents: data.documents,\n total: data.total,\n tookMs: data.took_ms,\n };\n }\n\n async query(options: QueryOptions = {}): Promise<SearchResult> {\n const { data } = await this.client._getHttpClient().post(\n `${this.basePath}/query`,\n {\n filter: options.filter || {},\n limit: options.limit || 100,\n offset: options.offset || 0,\n sort: options.sort,\n projection: options.projection,\n },\n );\n\n return {\n documents: data.documents,\n total: data.total,\n tookMs: data.took_ms,\n nextOffset: data.next_offset,\n };\n }\n\n async count(filter?: Record<string, any>): Promise<number> {\n const { data } = await this.client._getHttpClient().post(\n `${this.basePath}/count`,\n { filter: filter || {} },\n );\n return data.count;\n }\n\n async stats(): Promise<CollectionStats> {\n const { data } = await this.client._getHttpClient().get(\n `${this.basePath}/stats`,\n );\n\n return {\n name: data.name,\n documentCount: data.document_count,\n sizeBytes: data.size_bytes,\n indexCount: data.index_count,\n createdAt: new Date(data.created_at),\n updatedAt: new Date(data.updated_at),\n };\n }\n\n async createIndex(options: IndexOptions): Promise<{ created: boolean }> {\n const { data } = await this.client._getHttpClient().post(\n `${this.basePath}/indexes`,\n {\n field: options.field,\n type: options.type || 'btree',\n options: options.options || {},\n },\n );\n return { created: data.created };\n }\n\n async dropIndex(field: string): Promise<{ dropped: boolean }> {\n const { data } = await this.client._getHttpClient().delete(\n `${this.basePath}/indexes/${field}`,\n );\n return { dropped: data.dropped };\n }\n\n async subscribe(options: SubscriptionOptions = {}): Promise<Subscription> {\n const subscription = new Subscription(this, options);\n await subscription.connect();\n return subscription;\n }\n}","/**\n * AutoML client for SynapCores SDK\n *\n * v0.2.0: paths migrated from /ai/* to /automl/* to match gateway\n * v1.5.0-ce. Async training is just /automl/train + polling /automl/jobs/:id.\n */\n\nimport { SynapCores } from './client';\nimport {\n ModelInfo,\n TrainOptions,\n EvaluationResult,\n AsyncTrainOptions,\n TrainingJob,\n TrainingMetrics,\n ListTrainingJobsOptions,\n} from './types/automl';\n\nexport class AutoMLModel {\n constructor(\n private readonly client: AutoMLClient,\n public readonly info: ModelInfo,\n ) {}\n\n get id(): string {\n return this.info.id;\n }\n\n get name(): string {\n return this.info.name;\n }\n\n async predict(\n data: Record<string, any> | Record<string, any>[],\n ): Promise<any | any[]> {\n const isSingle = !Array.isArray(data);\n const inputs = isSingle ? [data] : data;\n\n const response = await this.client.synapCores._getHttpClient().post(\n `/automl/models/${this.id}/predict`,\n { inputs },\n );\n\n const predictions = response.data.predictions ?? response.data;\n return isSingle ? predictions[0] : predictions;\n }\n\n async evaluate(\n testData: string | Record<string, any>[],\n target?: string,\n ): Promise<EvaluationResult> {\n const payload: any = {};\n\n if (typeof testData === 'string') {\n payload.collection = testData;\n } else {\n payload.data = testData;\n if (target) {\n payload.target = target;\n }\n }\n\n const { data } = await this.client.synapCores._getHttpClient().post(\n `/automl/models/${this.id}/evaluate`,\n payload,\n );\n\n return data;\n }\n\n async delete(): Promise<void> {\n await this.client.synapCores._getHttpClient().delete(\n `/automl/models/${this.id}`,\n );\n }\n}\n\nexport class AutoMLClient {\n constructor(public readonly synapCores: SynapCores) {}\n\n async train(options: TrainOptions): Promise<AutoMLModel> {\n const { data } = await this.synapCores._getHttpClient().post('/automl/train', {\n collection: options.collection,\n target: options.target,\n features: options.features,\n task: options.task || 'auto',\n name: options.name || `${options.collection}_${options.target}_model`,\n config: options.config || {},\n validation_split: options.validationSplit || 0.2,\n max_trials: options.maxTrials || 10,\n timeout_minutes: options.timeoutMinutes || 60,\n });\n\n const modelInfo: ModelInfo = {\n id: data.id,\n name: data.name,\n task: data.task,\n status: data.status,\n accuracy: data.accuracy,\n createdAt: new Date(data.created_at ?? Date.now()),\n updatedAt: data.updated_at ? new Date(data.updated_at) : undefined,\n config: data.config ?? {},\n };\n\n return new AutoMLModel(this, modelInfo);\n }\n\n async getModel(modelId: string): Promise<AutoMLModel> {\n const { data } = await this.synapCores._getHttpClient().get(\n `/automl/models/${modelId}`,\n );\n\n const modelInfo: ModelInfo = {\n id: data.id,\n name: data.name,\n task: data.task,\n status: data.status,\n accuracy: data.accuracy,\n createdAt: new Date(data.created_at ?? Date.now()),\n updatedAt: data.updated_at ? new Date(data.updated_at) : undefined,\n config: data.config ?? {},\n };\n\n return new AutoMLModel(this, modelInfo);\n }\n\n async listModels(filters?: {\n task?: string;\n status?: string;\n }): Promise<ModelInfo[]> {\n const { data } = await this.synapCores._getHttpClient().get('/automl/models', {\n params: filters,\n });\n\n return (data.models ?? data ?? []).map((model: any) => ({\n id: model.id,\n name: model.name,\n task: model.task,\n status: model.status,\n accuracy: model.accuracy,\n createdAt: new Date(model.created_at ?? Date.now()),\n updatedAt: model.updated_at ? new Date(model.updated_at) : undefined,\n config: model.config ?? {},\n }));\n }\n\n /**\n * Start async training job.\n *\n * In v1.5.0-ce there is no separate /train/async endpoint — /automl/train\n * itself returns a job descriptor when the training is long-running.\n */\n async trainAsync(options: AsyncTrainOptions): Promise<TrainingJob> {\n const { data } = await this.synapCores._getHttpClient().post('/automl/train', {\n collection: options.collection,\n target: options.target,\n features: options.features,\n task: options.task || 'auto',\n name: options.name || `${options.collection}_${options.target}_model`,\n config: options.config || {},\n validation_split: options.validationSplit || 0.2,\n max_trials: options.maxTrials || 10,\n timeout_minutes: options.timeoutMinutes || 60,\n async: true,\n callback_url: options.callback_url,\n webhook_url: options.webhook_url,\n });\n\n return this.mapTrainingJob(data, options.maxTrials || 10);\n }\n\n /**\n * Get training job status\n */\n async getTrainingJob(jobId: string): Promise<TrainingJob> {\n const { data } = await this.synapCores._getHttpClient().get(\n `/automl/jobs/${jobId}`,\n );\n\n return this.mapTrainingJob(data);\n }\n\n /**\n * List training jobs\n */\n async listTrainingJobs(\n options: ListTrainingJobsOptions = {},\n ): Promise<TrainingJob[]> {\n const params = new URLSearchParams();\n if (options.status) params.append('status', options.status);\n if (options.page) params.append('page', options.page.toString());\n if (options.page_size) params.append('page_size', options.page_size.toString());\n\n const qs = params.toString();\n const { data } = await this.synapCores._getHttpClient().get(\n `/automl/jobs${qs ? `?${qs}` : ''}`,\n );\n\n return (data.jobs ?? data ?? []).map((job: any) => this.mapTrainingJob(job));\n }\n\n /**\n * Cancel/stop a training job\n */\n async cancelTrainingJob(jobId: string): Promise<void> {\n await this.synapCores._getHttpClient().post(`/automl/jobs/${jobId}/stop`);\n }\n\n /**\n * Get training metrics for a job.\n *\n * v1.5.0-ce: gateway no longer has a dedicated /metrics route — metrics\n * (when available) ship inside the /automl/jobs/:id payload as\n * `metrics` or `trial_metrics`. We just unwrap that field here.\n */\n async getTrainingMetrics(jobId: string): Promise<TrainingMetrics[]> {\n const { data } = await this.synapCores._getHttpClient().get(\n `/automl/jobs/${jobId}`,\n );\n\n const metrics = data.metrics ?? data.trial_metrics ?? [];\n return metrics.map((metric: any) => ({\n trial: metric.trial,\n accuracy: metric.accuracy,\n loss: metric.loss,\n metrics: metric.metrics,\n timestamp: new Date(metric.timestamp ?? Date.now()),\n }));\n }\n\n /**\n * Wait for training job to complete\n */\n async waitForTrainingJob(\n jobId: string,\n options: {\n pollInterval?: number;\n timeout?: number;\n onProgress?: (job: TrainingJob) => void;\n } = {},\n ): Promise<AutoMLModel> {\n const pollInterval = options.pollInterval || 2000;\n const timeout = options.timeout || 3600000; // 1 hour default\n const startTime = Date.now();\n\n while (true) {\n const job = await this.getTrainingJob(jobId);\n\n if (options.onProgress) {\n options.onProgress(job);\n }\n\n if (job.status === 'completed') {\n if (!job.model_id) {\n throw new Error('Training completed but no model ID returned');\n }\n return await this.getModel(job.model_id);\n }\n\n if (job.status === 'failed') {\n throw new Error(`Training failed: ${job.error || 'Unknown error'}`);\n }\n\n if (job.status === 'cancelled') {\n throw new Error('Training was cancelled');\n }\n\n if (Date.now() - startTime > timeout) {\n throw new Error('Timeout waiting for training job to complete');\n }\n\n await new Promise((resolve) => setTimeout(resolve, pollInterval));\n }\n }\n\n private mapTrainingJob(data: any, fallbackMaxTrials?: number): TrainingJob {\n return {\n id: data.id ?? data.job_id,\n name: data.name,\n status: data.status,\n progress: data.progress ?? 0,\n phase: data.phase,\n task: data.task,\n current_trial: data.current_trial,\n total_trials: data.total_trials ?? fallbackMaxTrials,\n best_accuracy: data.best_accuracy,\n eta_ms: data.eta_ms ?? data.estimated_time_remaining_ms,\n error: data.error,\n started_at: new Date(data.started_at ?? Date.now()),\n completed_at: data.completed_at ? new Date(data.completed_at) : undefined,\n model_id: data.model_id,\n };\n }\n}\n","/**\n * NLP client for SynapCores SDK.\n *\n * v0.2.0: replaced /ai/analyze (which never existed in v1.5.0-ce) with a\n * client-side fan-out to /ai/sentiment + /ai/entities + /ai/summarize.\n * Added qa() for question-answering against the new /ai/qa route.\n */\n\nimport { SynapCores } from './client';\nimport {\n NLPAnalysis,\n Sentiment,\n Entity,\n AnalyzeOptions,\n SummarizeOptions,\n ClassifyOptions,\n} from './types/nlp';\n\nexport class NLPClient {\n constructor(private readonly synapCores: SynapCores) {}\n\n /**\n * Run multiple NLP tasks in parallel and stitch them into a single\n * NLPAnalysis (or array of them, matching the input shape).\n */\n async analyze(options: AnalyzeOptions): Promise<NLPAnalysis | NLPAnalysis[]> {\n const isBatch = Array.isArray(options.text);\n const texts = (isBatch ? options.text : [options.text]) as string[];\n const tasks = options.tasks || ['sentiment', 'entities', 'summarize'];\n const http = this.synapCores._getHttpClient();\n\n const wantSentiment = tasks.includes('sentiment');\n const wantEntities = tasks.includes('entities');\n const wantSummarize = tasks.includes('summarize') || tasks.includes('summary');\n const wantKeywords = tasks.includes('keywords');\n\n const results: NLPAnalysis[] = await Promise.all(\n texts.map(async (text) => {\n const out: NLPAnalysis = {};\n const calls: Array<Promise<void>> = [];\n\n if (wantSentiment) {\n calls.push(\n http.post('/ai/sentiment', { texts: [text], language: options.language })\n .then(({ data }) => {\n const s = (data.sentiments ?? [])[0] ?? data.sentiment ?? data;\n if (s) {\n out.sentiment = {\n label: s.label,\n score: s.score,\n confidence: s.confidence,\n };\n }\n })\n .catch(() => undefined),\n );\n }\n\n if (wantEntities) {\n calls.push(\n http.post('/ai/entities', { text, language: options.language })\n .then(({ data }) => {\n const arr = data.entities ?? [];\n out.entities = arr.map((e: any) => ({\n text: e.text,\n type: e.type,\n start: e.start,\n end: e.end,\n score: e.score,\n }));\n })\n .catch(() => undefined),\n );\n }\n\n if (wantSummarize) {\n calls.push(\n http.post('/ai/summarize', { text })\n .then(({ data }) => {\n out.summary = data.summary;\n })\n .catch(() => undefined),\n );\n }\n\n if (wantKeywords) {\n // No dedicated keywords endpoint in v1.5.0-ce — leave the field\n // unset so callers can detect lack of support without throwing.\n out.keywords = undefined;\n }\n\n await Promise.all(calls);\n return out;\n }),\n );\n\n if (isBatch) return results;\n return results[0] ?? {};\n }\n\n async summarize(options: SummarizeOptions): Promise<string> {\n const { data } = await this.synapCores._getHttpClient().post('/ai/summarize', {\n text: options.text,\n max_length: options.maxLength || 150,\n min_length: options.minLength || 30,\n });\n\n return data.summary;\n }\n\n async extractEntities(\n text: string,\n entityTypes?: string[],\n ): Promise<Entity[]> {\n const { data } = await this.synapCores._getHttpClient().post('/ai/entities', {\n text,\n entity_types: entityTypes,\n });\n\n return (data.entities ?? []).map((e: any) => ({\n text: e.text,\n type: e.type,\n start: e.start,\n end: e.end,\n score: e.score,\n }));\n }\n\n async sentiment(text: string | string[]): Promise<Sentiment | Sentiment[]> {\n const isBatch = Array.isArray(text);\n const texts = isBatch ? text : [text];\n\n const { data } = await this.synapCores._getHttpClient().post('/ai/sentiment', {\n texts,\n });\n\n const results = (data.sentiments ?? []).map((s: any) => ({\n label: s.label,\n score: s.score,\n confidence: s.confidence,\n }));\n\n return isBatch ? results : results[0];\n }\n\n async classify(\n options: ClassifyOptions,\n ): Promise<Record<string, number> | Record<string, number>[]> {\n const isBatch = Array.isArray(options.text);\n const texts = isBatch ? options.text : [options.text];\n\n const { data } = await this.synapCores._getHttpClient().post('/ai/classify', {\n texts,\n categories: options.categories,\n multi_label: options.multiLabel || false,\n });\n\n return isBatch ? data.classifications : data.classifications[0];\n }\n\n /**\n * Question-answering against an optional context window.\n */\n async qa(\n question: string,\n context?: string,\n opts: { maxAnswerTokens?: number } = {},\n ): Promise<{ answer: string; score?: number; start?: number; end?: number }> {\n const { data } = await this.synapCores._getHttpClient().post('/ai/qa', {\n question,\n context,\n max_answer_tokens: opts.maxAnswerTokens,\n });\n return {\n answer: data.answer ?? data.text ?? '',\n score: data.score ?? data.confidence,\n start: data.start,\n end: data.end,\n };\n }\n}\n","/**\n * Recipe Management Client for SynapCores SDK\n */\n\nimport { SynapCores } from './client';\nimport {\n Recipe,\n RecipeInfo,\n CreateRecipeOptions,\n ListRecipesOptions,\n ExecuteRecipeOptions,\n RecipeExecutionResult,\n GenerateRecipeOptions,\n GeneratedRecipe,\n} from './types/recipes';\n\nexport class RecipeClient {\n constructor(private readonly synapCores: SynapCores) {}\n\n /**\n * Create a new recipe\n */\n async create(options: CreateRecipeOptions): Promise<Recipe> {\n const { data } = await this.synapCores._getHttpClient().post('/recipes', {\n name: options.name,\n description: options.description,\n category: options.category,\n content: options.content,\n tags: options.tags || [],\n parameters: options.parameters || [],\n });\n\n return {\n id: data.id,\n name: data.name,\n description: data.description,\n category: data.category,\n content: data.content,\n tags: data.tags || [],\n parameters: data.parameters || [],\n created_at: new Date(data.created_at),\n updated_at: new Date(data.updated_at),\n author: data.author,\n execution_count: data.execution_count,\n version: data.version,\n };\n }\n\n /**\n * List recipes with optional filters\n */\n async list(options: ListRecipesOptions = {}): Promise<RecipeInfo[]> {\n const params = new URLSearchParams();\n\n if (options.category) params.append('category', options.category);\n if (options.search) params.append('search', options.search);\n if (options.page) params.append('page', options.page.toString());\n if (options.page_size) params.append('page_size', options.page_size.toString());\n if (options.tags && options.tags.length > 0) {\n params.append('tags', options.tags.join(','));\n }\n\n const { data } = await this.synapCores._getHttpClient().get(\n `/recipes?${params.toString()}`\n );\n\n return (data.recipes || data).map((recipe: any) => ({\n id: recipe.id,\n name: recipe.name,\n description: recipe.description,\n category: recipe.category,\n tags: recipe.tags || [],\n created_at: new Date(recipe.created_at),\n updated_at: new Date(recipe.updated_at),\n author: recipe.author,\n execution_count: recipe.execution_count,\n }));\n }\n\n /**\n * Get a specific recipe by ID\n */\n async get(id: string): Promise<Recipe> {\n const { data } = await this.synapCores._getHttpClient().get(`/recipes/${id}`);\n\n return {\n id: data.id,\n name: data.name,\n description: data.description,\n category: data.category,\n content: data.content,\n tags: data.tags || [],\n parameters: data.parameters || [],\n created_at: new Date(data.created_at),\n updated_at: new Date(data.updated_at),\n author: data.author,\n execution_count: data.execution_count,\n version: data.version,\n };\n }\n\n /**\n * Update an existing recipe\n */\n async update(id: string, updates: Partial<CreateRecipeOptions>): Promise<Recipe> {\n const { data } = await this.synapCores._getHttpClient().put(`/recipes/${id}`, updates);\n\n return {\n id: data.id,\n name: data.name,\n description: data.description,\n category: data.category,\n content: data.content,\n tags: data.tags || [],\n parameters: data.parameters || [],\n created_at: new Date(data.created_at),\n updated_at: new Date(data.updated_at),\n author: data.author,\n execution_count: data.execution_count,\n version: data.version,\n };\n }\n\n /**\n * Delete a recipe\n */\n async delete(id: string): Promise<void> {\n await this.synapCores._getHttpClient().delete(`/recipes/${id}`);\n }\n\n /**\n * Execute a recipe\n */\n async execute(options: ExecuteRecipeOptions): Promise<RecipeExecutionResult> {\n const { data } = await this.synapCores._getHttpClient().post(\n `/recipes/${options.recipe}/execute`,\n {\n parameters: options.parameters || {},\n dry_run: options.dry_run || false,\n }\n );\n\n return {\n id: data.id || data.execution_id,\n success: data.success,\n results: data.results,\n error: data.error,\n execution_time_ms: data.execution_time_ms || data.took_ms,\n statements_executed: data.statements_executed || 0,\n };\n }\n\n /**\n * Generate a recipe using AI\n */\n async generate(options: GenerateRecipeOptions): Promise<GeneratedRecipe> {\n const { data } = await this.synapCores._getHttpClient().post('/ai/generate-recipe', {\n intent: options.intent,\n category: options.category,\n context: options.context,\n });\n\n return {\n name: data.name,\n description: data.description,\n content: data.content,\n };\n }\n\n /**\n * List available recipe categories with counts.\n *\n * v0.2.0: gateway path is /recipes/categories/counts.\n * Returns the array of category names; for the {category, count}\n * payload use `listCategoriesWithCounts`.\n */\n async listCategories(): Promise<string[]> {\n const data = await this.listCategoriesWithCounts();\n return data.map((c) => c.category);\n }\n\n async listCategoriesWithCounts(): Promise<Array<{ category: string; count: number }>> {\n const { data } = await this.synapCores._getHttpClient().get(\n '/recipes/categories/counts',\n );\n const arr = data.categories ?? data ?? [];\n return arr.map((c: any) => ({\n category: c.category ?? c.name ?? c,\n count: c.count ?? c.recipe_count ?? 0,\n }));\n }\n\n /**\n * Validate a recipe payload before saving/executing.\n */\n async validate(body: { content?: string; recipe?: any; parameters?: Record<string, any> }): Promise<{\n is_valid: boolean;\n errors: string[];\n warnings: string[];\n }> {\n const { data } = await this.synapCores._getHttpClient().post('/recipes/validate', body);\n return {\n is_valid: data.is_valid ?? data.valid ?? false,\n errors: data.errors ?? [],\n warnings: data.warnings ?? [],\n };\n }\n\n /**\n * Get execution history for a specific recipe.\n */\n async getHistory(id: string): Promise<RecipeExecutionResult[]> {\n const { data } = await this.synapCores._getHttpClient().get(`/recipes/${id}/history`);\n const arr = data.history ?? data.executions ?? data ?? [];\n return arr.map((row: any) => ({\n id: row.id ?? row.execution_id ?? '',\n success: row.success ?? row.status === 'completed',\n results: row.results,\n error: row.error,\n execution_time_ms: row.execution_time_ms ?? row.took_ms ?? 0,\n statements_executed: row.statements_executed ?? 0,\n }));\n }\n\n /**\n * List built-in / shared recipe templates.\n */\n async listTemplates(): Promise<RecipeInfo[]> {\n const { data } = await this.synapCores._getHttpClient().get('/recipes/templates');\n return (data.templates ?? data ?? []).map((t: any) => ({\n id: t.id,\n name: t.name,\n description: t.description ?? '',\n category: t.category ?? 'template',\n tags: t.tags ?? [],\n created_at: new Date(t.created_at ?? Date.now()),\n updated_at: new Date(t.updated_at ?? t.created_at ?? Date.now()),\n author: t.author,\n execution_count: t.execution_count,\n }));\n }\n\n /**\n * Get a specific recipe template.\n */\n async getTemplate(id: string): Promise<Recipe> {\n const { data } = await this.synapCores._getHttpClient().get(`/recipes/templates/${id}`);\n return {\n id: data.id,\n name: data.name,\n description: data.description ?? '',\n category: data.category ?? 'template',\n content: data.content ?? '',\n tags: data.tags ?? [],\n parameters: data.parameters ?? [],\n created_at: new Date(data.created_at ?? Date.now()),\n updated_at: new Date(data.updated_at ?? data.created_at ?? Date.now()),\n author: data.author,\n execution_count: data.execution_count,\n version: data.version,\n };\n }\n\n /**\n * Execute a recipe template with a parameter set.\n */\n async executeTemplate(\n id: string,\n params: Record<string, any> = {},\n ): Promise<RecipeExecutionResult> {\n const { data } = await this.synapCores._getHttpClient().post(\n `/recipes/templates/${id}/execute`,\n { parameters: params },\n );\n return {\n id: data.id ?? data.execution_id ?? '',\n success: data.success ?? false,\n results: data.results,\n error: data.error,\n execution_time_ms: data.execution_time_ms ?? data.took_ms ?? 0,\n statements_executed: data.statements_executed ?? 0,\n };\n }\n\n /**\n * List all recipe executions across recipes.\n */\n async listExecutions(options: { limit?: number; status?: string } = {}): Promise<\n RecipeExecutionResult[]\n > {\n const params = new URLSearchParams();\n if (options.limit) params.append('limit', options.limit.toString());\n if (options.status) params.append('status', options.status);\n const qs = params.toString();\n const { data } = await this.synapCores._getHttpClient().get(\n `/recipes/executions${qs ? `?${qs}` : ''}`,\n );\n const arr = data.executions ?? data ?? [];\n return arr.map((row: any) => ({\n id: row.id ?? row.execution_id ?? '',\n success: row.success ?? row.status === 'completed',\n results: row.results,\n error: row.error,\n execution_time_ms: row.execution_time_ms ?? row.took_ms ?? 0,\n statements_executed: row.statements_executed ?? 0,\n }));\n }\n\n /**\n * Get a single execution by ID.\n */\n async getExecution(id: string): Promise<RecipeExecutionResult> {\n const { data } = await this.synapCores._getHttpClient().get(\n `/recipes/executions/${id}`,\n );\n return {\n id: data.id ?? id,\n success: data.success ?? data.status === 'completed',\n results: data.results,\n error: data.error,\n execution_time_ms: data.execution_time_ms ?? data.took_ms ?? 0,\n statements_executed: data.statements_executed ?? 0,\n };\n }\n}\n","/**\n * Schema Introspection Client for SynapCores SDK.\n *\n * v0.2.0: trimmed to match gateway v1.5.0-ce. Removed\n * getRelationships(), getStatistics(), validateSchema(), compareSchemas(),\n * analyzeTable() and generateDDL() — none of those endpoints exist in the\n * v1.5.0-ce gateway. Added listDatabases() and previewTable().\n */\n\nimport { SynapCores } from './client';\nimport { TableInfo, TableSchema, ColumnInfo, IndexInfo } from './types/schema';\n\nexport interface DatabaseInfo {\n name: string;\n table_count?: number;\n size_bytes?: number;\n is_default?: boolean;\n}\n\nexport interface TableDataPreview {\n columns: Array<{ name: string; data_type?: string }>;\n rows: any[][];\n total_rows?: number;\n}\n\nexport class SchemaClient {\n constructor(private readonly synapCores: SynapCores) {}\n\n /**\n * List all databases visible to the current authentication context.\n */\n async listDatabases(): Promise<DatabaseInfo[]> {\n const { data } = await this.synapCores._getHttpClient().get('/schema/databases');\n return (data.databases ?? data ?? []).map((db: any) => ({\n name: db.name,\n table_count: db.table_count,\n size_bytes: db.size_bytes,\n is_default: db.is_default,\n }));\n }\n\n /**\n * List all tables in the current database.\n */\n async listTables(options: { includeSystem?: boolean } = {}): Promise<TableInfo[]> {\n const params = new URLSearchParams();\n if (options.includeSystem) {\n params.append('include_system', 'true');\n }\n\n const qs = params.toString();\n const { data } = await this.synapCores._getHttpClient().get(\n `/schema/tables${qs ? `?${qs}` : ''}`,\n );\n\n return (data.tables || data || []).map((table: any) => ({\n name: table.name,\n type: table.type || 'table',\n column_count: table.column_count || 0,\n row_count: table.row_count,\n size_bytes: table.size_bytes,\n created_at: table.created_at ? new Date(table.created_at) : undefined,\n updated_at: table.updated_at ? new Date(table.updated_at) : undefined,\n comment: table.comment,\n }));\n }\n\n /**\n * Get complete schema for a specific table.\n *\n * Combines /schema/tables/:t with /schema/tables/:t/columns and\n * /schema/tables/:t/indexes side-channels because the table-only payload\n * does not always include columns and indexes inline.\n */\n async getTable(tableName: string): Promise<TableSchema> {\n const [tableRes, colsRes, idxRes] = await Promise.all([\n this.synapCores._getHttpClient().get(`/schema/tables/${tableName}`),\n this.synapCores._getHttpClient().get(`/schema/tables/${tableName}/columns`),\n this.synapCores._getHttpClient().get(`/schema/tables/${tableName}/indexes`),\n ]);\n\n const table = tableRes.data ?? {};\n const columns = colsRes.data?.columns ?? colsRes.data ?? [];\n const indexes = idxRes.data?.indexes ?? idxRes.data ?? [];\n\n return {\n table: {\n name: table.name ?? tableName,\n type: table.type || 'table',\n column_count: columns.length,\n row_count: table.row_count,\n size_bytes: table.size_bytes,\n created_at: table.created_at ? new Date(table.created_at) : undefined,\n updated_at: table.updated_at ? new Date(table.updated_at) : undefined,\n comment: table.comment,\n },\n columns: columns.map((col: any) => ({\n name: col.name,\n data_type: col.data_type || col.type,\n nullable: col.nullable !== false,\n default_value: col.default_value || col.default,\n is_primary_key: col.is_primary_key || col.primary_key,\n is_unique: col.is_unique || col.unique,\n is_indexed: col.is_indexed || col.indexed,\n foreign_key: col.foreign_key,\n comment: col.comment,\n ordinal_position: col.ordinal_position || col.position,\n })),\n indexes: indexes.map((idx: any) => ({\n name: idx.name,\n table: idx.table || tableName,\n type: idx.type || 'btree',\n columns: idx.columns || [],\n is_unique: idx.is_unique || idx.unique || false,\n is_primary: idx.is_primary || idx.primary || false,\n size_bytes: idx.size_bytes,\n created_at: idx.created_at ? new Date(idx.created_at) : undefined,\n })),\n constraints: table.constraints || [],\n relationships: (table.relationships || []).map((rel: any) => ({\n type: rel.type,\n from_table: rel.from_table || rel.source_table,\n from_column: rel.from_column || rel.source_column,\n to_table: rel.to_table || rel.target_table,\n to_column: rel.to_column || rel.target_column,\n name: rel.name,\n })),\n };\n }\n\n /**\n * Get columns for a specific table.\n */\n async getColumns(tableName: string): Promise<ColumnInfo[]> {\n const { data } = await this.synapCores._getHttpClient().get(\n `/schema/tables/${tableName}/columns`,\n );\n const cols = data.columns ?? data ?? [];\n return cols.map((col: any) => ({\n name: col.name,\n data_type: col.data_type || col.type,\n nullable: col.nullable !== false,\n default_value: col.default_value || col.default,\n is_primary_key: col.is_primary_key || col.primary_key,\n is_unique: col.is_unique || col.unique,\n is_indexed: col.is_indexed || col.indexed,\n foreign_key: col.foreign_key,\n comment: col.comment,\n ordinal_position: col.ordinal_position || col.position,\n }));\n }\n\n /**\n * Get indexes for a specific table.\n */\n async getIndexes(tableName: string): Promise<IndexInfo[]> {\n const { data } = await this.synapCores._getHttpClient().get(\n `/schema/tables/${tableName}/indexes`,\n );\n const idxs = data.indexes ?? data ?? [];\n return idxs.map((idx: any) => ({\n name: idx.name,\n table: idx.table || tableName,\n type: idx.type || 'btree',\n columns: idx.columns || [],\n is_unique: idx.is_unique || idx.unique || false,\n is_primary: idx.is_primary || idx.primary || false,\n size_bytes: idx.size_bytes,\n created_at: idx.created_at ? new Date(idx.created_at) : undefined,\n }));\n }\n\n /**\n * Preview rows from a table without writing SQL.\n *\n * GET /schema/tables/:t/data?limit=&offset=\n */\n async previewTable(\n tableName: string,\n opts: { limit?: number; offset?: number } = {},\n ): Promise<TableDataPreview> {\n const params = new URLSearchParams();\n if (opts.limit !== undefined) params.append('limit', String(opts.limit));\n if (opts.offset !== undefined) params.append('offset', String(opts.offset));\n const qs = params.toString();\n const { data } = await this.synapCores._getHttpClient().get(\n `/schema/tables/${tableName}/data${qs ? `?${qs}` : ''}`,\n );\n return {\n columns: data.columns ?? [],\n rows: data.rows ?? data.data ?? [],\n total_rows: data.total_rows ?? data.total,\n };\n }\n}\n","/**\n * Error classes for SynapCores SDK\n */\n\nexport class SynapCoresError extends Error {\n public readonly code?: string;\n public readonly details?: Record<string, any>;\n\n constructor(message: string, code?: string, details?: Record<string, any>) {\n super(message);\n this.name = 'SynapCoresError';\n this.code = code;\n this.details = details;\n \n // Maintains proper stack trace for where our error was thrown\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, SynapCoresError);\n }\n }\n}\n\nexport class ConnectionError extends SynapCoresError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'CONNECTION_ERROR', details);\n this.name = 'ConnectionError';\n }\n}\n\nexport class AuthenticationError extends SynapCoresError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'AUTH_ERROR', details);\n this.name = 'AuthenticationError';\n }\n}\n\nexport class ValidationError extends SynapCoresError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'VALIDATION_ERROR', details);\n this.name = 'ValidationError';\n }\n}\n\nexport class NotFoundError extends SynapCoresError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'NOT_FOUND', details);\n this.name = 'NotFoundError';\n }\n}\n\nexport class ServerError extends SynapCoresError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'SERVER_ERROR', details);\n this.name = 'ServerError';\n }\n}\n\nexport class TimeoutError extends SynapCoresError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'TIMEOUT_ERROR', details);\n this.name = 'TimeoutError';\n }\n}\n\nexport class RateLimitError extends SynapCoresError {\n public readonly retryAfter?: number;\n\n constructor(message: string, retryAfter?: number, details?: Record<string, any>) {\n super(message, 'RATE_LIMIT_ERROR', details);\n this.name = 'RateLimitError';\n this.retryAfter = retryAfter;\n }\n}\n\nexport class SQLError extends SynapCoresError {\n public readonly severity: 'ERROR' | 'WARNING' | 'INFO';\n public readonly position?: number;\n public readonly hint?: string;\n public readonly detail?: string;\n\n constructor(\n message: string,\n code: string,\n severity: 'ERROR' | 'WARNING' | 'INFO' = 'ERROR',\n position?: number,\n hint?: string,\n detail?: string,\n details?: Record<string, any>\n ) {\n super(message, code, details);\n this.name = 'SQLError';\n this.severity = severity;\n this.position = position;\n this.hint = hint;\n this.detail = detail;\n }\n}\n\nexport class VectorError extends SynapCoresError {\n public readonly vectorDimensions?: number;\n public readonly expectedDimensions?: number;\n public readonly operation?: string;\n\n constructor(\n message: string,\n code: string,\n vectorDimensions?: number,\n expectedDimensions?: number,\n operation?: string,\n details?: Record<string, any>\n ) {\n super(message, code, details);\n this.name = 'VectorError';\n this.vectorDimensions = vectorDimensions;\n this.expectedDimensions = expectedDimensions;\n this.operation = operation;\n }\n}\n\nexport class TransactionError extends SynapCoresError {\n public readonly transactionId?: string;\n public readonly transactionState?: string;\n\n constructor(\n message: string,\n code: string,\n transactionId?: string,\n transactionState?: string,\n details?: Record<string, any>\n ) {\n super(message, code, details);\n this.name = 'TransactionError';\n this.transactionId = transactionId;\n this.transactionState = transactionState;\n }\n}\n\nexport class BatchOperationError extends SynapCoresError {\n public readonly failedItems?: Array<{\n index: number;\n error: string;\n }>;\n public readonly totalProcessed?: number;\n public readonly successfulCount?: number;\n\n constructor(\n message: string,\n code: string,\n failedItems?: Array<{ index: number; error: string }>,\n totalProcessed?: number,\n successfulCount?: number,\n details?: Record<string, any>\n ) {\n super(message, code, details);\n this.name = 'BatchOperationError';\n this.failedItems = failedItems;\n this.totalProcessed = totalProcessed;\n this.successfulCount = successfulCount;\n }\n}","/**\n * Data Import Client for SynapCores SDK.\n *\n * v0.2.0: gateway v1.5.0-ce only exposes one-shot multipart uploads at\n * POST /v1/data/import/csv\n * POST /v1/data/import/json\n * The legacy /import, /export and job-tracking endpoints no longer exist\n * — for exports, recommend going through `client.executeQuery` with\n * `COPY ... TO STDOUT` style SQL.\n */\n\nimport { SynapCores } from './client';\nimport { ValidationError } from './errors';\nimport {\n ImportOptions,\n ImportResult,\n ExportOptions,\n ExportResult,\n ImportJobStatus,\n ExportJobStatus,\n BulkImportOptions,\n BulkImportResult,\n DataValidationOptions,\n DataValidationResult,\n} from './types/import';\n\nconst NOT_SUPPORTED_MSG =\n 'not supported in v1.5.0-ce — use SynapCores.executeQuery with COPY ... or process locally';\n\nexport class ImportExportClient {\n constructor(private readonly synapCores: SynapCores) {}\n\n /**\n * Import data into a table.\n *\n * Routes to /v1/data/import/csv or /v1/data/import/json based on\n * `options.format`. NDJSON falls under the JSON endpoint.\n */\n async import(options: ImportOptions): Promise<ImportResult> {\n const fmt = options.format;\n if (fmt !== 'csv' && fmt !== 'json' && fmt !== 'ndjson') {\n throw new ValidationError(\n `Unsupported import format '${fmt}' — gateway v1.5.0-ce only accepts csv or json`,\n );\n }\n const path = fmt === 'csv' ? '/data/import/csv' : '/data/import/json';\n\n // form-data is bundled (Node-side); browser FormData is the fallback.\n let FormDataClass: any;\n try {\n FormDataClass = require('form-data');\n } catch {\n FormDataClass = (globalThis as any).FormData;\n }\n\n const formData = new FormDataClass();\n formData.append('table', options.table);\n if (options.mode) formData.append('mode', options.mode);\n if (options.column_mapping) {\n formData.append('column_mapping', JSON.stringify(options.column_mapping));\n }\n if (options.skip_header !== undefined) {\n formData.append('skip_header', options.skip_header.toString());\n }\n if (options.delimiter) formData.append('delimiter', options.delimiter);\n if (options.batch_size) {\n formData.append('batch_size', options.batch_size.toString());\n }\n if (options.continue_on_error !== undefined) {\n formData.append('continue_on_error', options.continue_on_error.toString());\n }\n if (options.primary_keys) {\n formData.append('primary_keys', JSON.stringify(options.primary_keys));\n }\n\n if (Buffer.isBuffer(options.data)) {\n // Node form-data accepts a Buffer with a {filename} option.\n formData.append('file', options.data, { filename: `data.${fmt}` });\n } else {\n // string content\n formData.append('file', Buffer.from(String(options.data)), {\n filename: `data.${fmt}`,\n });\n }\n\n const headers: Record<string, string> = {};\n if (typeof formData.getHeaders === 'function') {\n Object.assign(headers, formData.getHeaders());\n } else {\n headers['Content-Type'] = 'multipart/form-data';\n }\n\n const { data } = await this.synapCores._getHttpClient().post(path, formData, {\n headers,\n maxBodyLength: Infinity,\n maxContentLength: Infinity,\n });\n\n return {\n id: data.id ?? data.job_id ?? '',\n success: data.success ?? true,\n rows_processed: data.rows_processed ?? 0,\n rows_imported: data.rows_imported ?? data.rows_processed ?? 0,\n rows_failed: data.rows_failed ?? 0,\n duration_ms: data.duration_ms ?? data.took_ms ?? 0,\n errors: data.errors ?? [],\n warnings: data.warnings ?? [],\n };\n }\n\n // ---------------------------------------------------------------------\n // Removed methods: every export route, every job-tracking route, bulk\n // import, validate, template — none of those endpoints exist in the\n // v1.5.0-ce gateway. We keep the shape so old callers get a clear error\n // instead of a silent 404.\n // ---------------------------------------------------------------------\n\n async export(_options: ExportOptions): Promise<ExportResult> {\n throw new ValidationError(`export() ${NOT_SUPPORTED_MSG}`);\n }\n\n async getImportStatus(_jobId: string): Promise<ImportJobStatus> {\n throw new ValidationError(`getImportStatus() ${NOT_SUPPORTED_MSG}`);\n }\n\n async getExportStatus(_jobId: string): Promise<ExportJobStatus> {\n throw new ValidationError(`getExportStatus() ${NOT_SUPPORTED_MSG}`);\n }\n\n async cancelImport(_jobId: string): Promise<void> {\n throw new ValidationError(`cancelImport() ${NOT_SUPPORTED_MSG}`);\n }\n\n async cancelExport(_jobId: string): Promise<void> {\n throw new ValidationError(`cancelExport() ${NOT_SUPPORTED_MSG}`);\n }\n\n async bulkImport(_options: BulkImportOptions): Promise<BulkImportResult> {\n throw new ValidationError(`bulkImport() ${NOT_SUPPORTED_MSG}`);\n }\n\n async validateData(_options: DataValidationOptions): Promise<DataValidationResult> {\n throw new ValidationError(`validateData() ${NOT_SUPPORTED_MSG}`);\n }\n\n async getImportTemplate(\n _tableName: string,\n _format: 'csv' | 'json' = 'csv',\n ): Promise<string> {\n throw new ValidationError(`getImportTemplate() ${NOT_SUPPORTED_MSG}`);\n }\n\n async listJobs(_options: {\n type?: 'import' | 'export';\n status?: string;\n limit?: number;\n } = {}): Promise<Array<ImportJobStatus | ExportJobStatus>> {\n throw new ValidationError(`listJobs() ${NOT_SUPPORTED_MSG}`);\n }\n\n async downloadExport(_jobId: string): Promise<Buffer> {\n throw new ValidationError(`downloadExport() ${NOT_SUPPORTED_MSG}`);\n }\n\n async streamImport(\n options: ImportOptions,\n _onProgress?: (progress: ImportJobStatus) => void,\n ): Promise<ImportResult> {\n // The gateway runs imports synchronously, so streaming progress no\n // longer applies. Just delegate to the one-shot import.\n return this.import(options);\n }\n\n async streamExport(\n _options: ExportOptions,\n _onProgress?: (progress: ExportJobStatus) => void,\n ): Promise<ExportResult> {\n throw new ValidationError(`streamExport() ${NOT_SUPPORTED_MSG}`);\n }\n}\n","/**\n * Integration Management Client for SynapCores SDK.\n *\n * v0.2.0: gateway v1.5.0-ce uses {integration_type} (a slug) as the path\n * parameter, not arbitrary IDs. Webhooks, stats, logs, events and\n * execution history routes do not exist on the gateway, so those methods\n * now throw a ValidationError. New methods: listTypes() and audit().\n */\n\nimport { SynapCores } from './client';\nimport { ValidationError } from './errors';\nimport {\n Integration,\n CreateIntegrationOptions,\n ListIntegrationsOptions,\n ExecuteIntegrationOptions,\n IntegrationExecutionResult,\n IntegrationWebhook,\n CreateWebhookOptions,\n IntegrationEvent,\n IntegrationLog,\n IntegrationStats,\n TestIntegrationOptions,\n TestIntegrationResult,\n} from './types/integrations';\n\nconst NOT_SUPPORTED = 'not supported in v1.5.0-ce — see SynapCores integrations API';\n\nexport interface IntegrationTypeInfo {\n type: string;\n display_name?: string;\n description?: string;\n config_schema?: any;\n}\n\nexport interface IntegrationAuditEntry {\n id?: string;\n type: string;\n action: string;\n user?: string;\n timestamp: Date;\n details?: any;\n}\n\nexport class IntegrationClient {\n constructor(private readonly synapCores: SynapCores) {}\n\n /**\n * Create a new integration. Gateway v1.5.0-ce keys integrations by\n * `type` (slug). The body still carries the type so old call sites\n * remain backwards compatible.\n */\n async create(options: CreateIntegrationOptions): Promise<Integration> {\n const { data } = await this.synapCores._getHttpClient().post('/integrations', {\n name: options.name,\n type: options.type,\n config: options.config,\n description: options.description,\n tags: options.tags || [],\n activate: options.activate || false,\n });\n\n return this.mapIntegration(data);\n }\n\n /**\n * List integrations (optional filters).\n */\n async list(options: ListIntegrationsOptions = {}): Promise<Integration[]> {\n const params = new URLSearchParams();\n\n if (options.type) params.append('type', options.type);\n if (options.status) params.append('status', options.status);\n if (options.search) params.append('search', options.search);\n if (options.page) params.append('page', options.page.toString());\n if (options.page_size) params.append('page_size', options.page_size.toString());\n if (options.tags && options.tags.length > 0) {\n params.append('tags', options.tags.join(','));\n }\n\n const qs = params.toString();\n const { data } = await this.synapCores._getHttpClient().get(\n `/integrations${qs ? `?${qs}` : ''}`,\n );\n\n return (data.integrations || data || []).map((integration: any) =>\n this.mapIntegration(integration),\n );\n }\n\n /**\n * Get a specific integration by type-slug.\n */\n async get(type: string): Promise<Integration> {\n const { data } = await this.synapCores._getHttpClient().get(\n `/integrations/${type}`,\n );\n return this.mapIntegration(data);\n }\n\n /**\n * Update an existing integration by type-slug.\n */\n async update(\n type: string,\n updates: Partial<CreateIntegrationOptions>,\n ): Promise<Integration> {\n const { data } = await this.synapCores._getHttpClient().put(\n `/integrations/${type}`,\n updates,\n );\n return this.mapIntegration(data);\n }\n\n /**\n * Delete an integration by type-slug.\n */\n async delete(type: string): Promise<void> {\n await this.synapCores._getHttpClient().delete(`/integrations/${type}`);\n }\n\n /**\n * Test an integration connection.\n */\n async test(options: TestIntegrationOptions): Promise<TestIntegrationResult> {\n const { data } = await this.synapCores._getHttpClient().post(\n `/integrations/${options.integration}/test`,\n {\n payload: options.payload,\n validate_only: options.validate_only || false,\n },\n );\n\n return {\n success: data.success,\n validation_errors: data.validation_errors || [],\n response: data.response,\n error: data.error,\n latency_ms: data.latency_ms,\n };\n }\n\n /**\n * List supported integration types and their config schemas.\n */\n async listTypes(): Promise<IntegrationTypeInfo[]> {\n const { data } = await this.synapCores._getHttpClient().get('/integrations/types');\n return (data.types ?? data ?? []).map((t: any) => ({\n type: t.type ?? t.name,\n display_name: t.display_name ?? t.label,\n description: t.description,\n config_schema: t.config_schema ?? t.schema,\n }));\n }\n\n /**\n * Get the integrations audit trail.\n */\n async audit(options: { limit?: number; type?: string } = {}): Promise<IntegrationAuditEntry[]> {\n const params = new URLSearchParams();\n if (options.limit) params.append('limit', options.limit.toString());\n if (options.type) params.append('type', options.type);\n const qs = params.toString();\n const { data } = await this.synapCores._getHttpClient().get(\n `/integrations/audit${qs ? `?${qs}` : ''}`,\n );\n return (data.entries ?? data.audit ?? data ?? []).map((row: any) => ({\n id: row.id,\n type: row.type ?? row.integration_type,\n action: row.action ?? row.event,\n user: row.user ?? row.actor,\n timestamp: new Date(row.timestamp ?? row.created_at ?? Date.now()),\n details: row.details ?? row.data,\n }));\n }\n\n // -------------------------------------------------------------------\n // Methods removed from v1.5.0-ce (gateway has no matching route).\n // We keep the names for backwards-compat but throw a clear error.\n // -------------------------------------------------------------------\n\n async activate(_type: string): Promise<Integration> {\n throw new ValidationError(`integrations.activate() ${NOT_SUPPORTED} — use update() with {activate:true}`);\n }\n\n async deactivate(_type: string): Promise<Integration> {\n throw new ValidationError(`integrations.deactivate() ${NOT_SUPPORTED} — use update() with {activate:false}`);\n }\n\n async execute(_options: ExecuteIntegrationOptions): Promise<IntegrationExecutionResult> {\n throw new ValidationError(`integrations.execute() ${NOT_SUPPORTED}`);\n }\n\n async getExecutionHistory(\n _type: string,\n _options: { limit?: number; offset?: number } = {},\n ): Promise<IntegrationExecutionResult[]> {\n throw new ValidationError(`integrations.getExecutionHistory() ${NOT_SUPPORTED}`);\n }\n\n async getStats(_type: string): Promise<IntegrationStats> {\n throw new ValidationError(`integrations.getStats() ${NOT_SUPPORTED}`);\n }\n\n async createWebhook(_options: CreateWebhookOptions): Promise<IntegrationWebhook> {\n throw new ValidationError(`integrations.createWebhook() ${NOT_SUPPORTED}`);\n }\n\n async listWebhooks(_type: string): Promise<IntegrationWebhook[]> {\n throw new ValidationError(`integrations.listWebhooks() ${NOT_SUPPORTED}`);\n }\n\n async deleteWebhook(_webhookId: string): Promise<void> {\n throw new ValidationError(`integrations.deleteWebhook() ${NOT_SUPPORTED}`);\n }\n\n async getEvents(\n _type: string,\n _options: { limit?: number; status?: string } = {},\n ): Promise<IntegrationEvent[]> {\n throw new ValidationError(`integrations.getEvents() ${NOT_SUPPORTED}`);\n }\n\n async getLogs(\n _type: string,\n _options: { limit?: number; level?: string } = {},\n ): Promise<IntegrationLog[]> {\n throw new ValidationError(`integrations.getLogs() ${NOT_SUPPORTED}`);\n }\n\n async retryExecution(_executionId: string): Promise<IntegrationExecutionResult> {\n throw new ValidationError(`integrations.retryExecution() ${NOT_SUPPORTED}`);\n }\n\n /**\n * Map raw integration data to Integration type.\n */\n private mapIntegration(data: any): Integration {\n return {\n id: data.id ?? data.type,\n name: data.name ?? data.type,\n type: data.type,\n status: data.status ?? (data.active ? 'active' : 'inactive'),\n config: data.config ?? {},\n description: data.description,\n tags: data.tags || [],\n created_at: new Date(data.created_at ?? Date.now()),\n updated_at: new Date(data.updated_at ?? data.created_at ?? Date.now()),\n last_success_at: data.last_success_at ? new Date(data.last_success_at) : undefined,\n last_error: data.last_error,\n execution_count: data.execution_count,\n };\n }\n}\n","/**\n * Backup/Restore Client for SynapCores SDK\n */\n\nimport { SynapCores } from './client';\nimport {\n BackupOptions,\n Backup,\n RestoreOptions,\n RestoreResult,\n BackupStatus,\n RestoreStatus,\n ListBackupsOptions,\n BackupSchedule,\n CreateScheduleOptions,\n BackupVerificationResult,\n} from './types/backup';\n\nexport class BackupClient {\n constructor(private readonly synapCores: SynapCores) {}\n\n /**\n * Create a new backup\n */\n async create(options: BackupOptions = {}): Promise<Backup> {\n const { data } = await this.synapCores._getHttpClient().post('/backups', {\n name: options.name,\n description: options.description,\n type: options.type || 'full',\n tables: options.tables,\n include_indexes: options.include_indexes !== false,\n include_procedures: options.include_procedures !== false,\n compression: options.compression || 6,\n encrypt: options.encrypt || false,\n encryption_key: options.encryption_key,\n storage: options.storage || 'local',\n storage_config: options.storage_config,\n tags: options.tags || [],\n });\n\n return this.mapBackup(data);\n }\n\n /**\n * List backups with optional filters\n */\n async list(options: ListBackupsOptions = {}): Promise<Backup[]> {\n const params = new URLSearchParams();\n\n if (options.type) params.append('type', options.type);\n if (options.status) params.append('status', options.status);\n if (options.sort) params.append('sort', options.sort);\n if (options.order) params.append('order', options.order);\n if (options.page) params.append('page', options.page.toString());\n if (options.page_size) params.append('page_size', options.page_size.toString());\n if (options.tags && options.tags.length > 0) {\n params.append('tags', options.tags.join(','));\n }\n\n const { data } = await this.synapCores._getHttpClient().get(\n `/backups?${params.toString()}`\n );\n\n return (data.backups || data).map((backup: any) => this.mapBackup(backup));\n }\n\n /**\n * Get a specific backup by ID\n */\n async get(id: string): Promise<Backup> {\n const { data } = await this.synapCores._getHttpClient().get(`/backups/${id}`);\n return this.mapBackup(data);\n }\n\n /**\n * Delete a backup\n */\n async delete(id: string): Promise<void> {\n await this.synapCores._getHttpClient().delete(`/backups/${id}`);\n }\n\n /**\n * Restore from a backup\n */\n async restore(options: RestoreOptions): Promise<RestoreResult> {\n const { data } = await this.synapCores._getHttpClient().post('/backups/restore', {\n backup_id: options.backup_id,\n mode: options.mode || 'full',\n tables: options.tables,\n target_database: options.target_database,\n overwrite: options.overwrite || false,\n skip_indexes: options.skip_indexes || false,\n skip_procedures: options.skip_procedures || false,\n decryption_key: options.decryption_key,\n point_in_time: options.point_in_time?.toISOString(),\n dry_run: options.dry_run || false,\n });\n\n return {\n id: data.id || data.restore_id,\n success: data.success,\n tables_restored: data.tables_restored || [],\n rows_restored: data.rows_restored || 0,\n duration_ms: data.duration_ms || data.took_ms || 0,\n error: data.error,\n warnings: data.warnings || [],\n };\n }\n\n /**\n * Get backup status\n */\n async getBackupStatus(backupId: string): Promise<BackupStatus> {\n const { data } = await this.synapCores._getHttpClient().get(\n `/backups/${backupId}/status`\n );\n\n return {\n id: data.id || backupId,\n status: data.status,\n progress: data.progress || 0,\n phase: data.phase,\n tables_processed: data.tables_processed,\n total_tables: data.total_tables,\n bytes_processed: data.bytes_processed,\n eta_ms: data.eta_ms || data.estimated_time_remaining_ms,\n error: data.error,\n started_at: data.started_at ? new Date(data.started_at) : undefined,\n completed_at: data.completed_at ? new Date(data.completed_at) : undefined,\n };\n }\n\n /**\n * Get restore status\n */\n async getRestoreStatus(restoreId: string): Promise<RestoreStatus> {\n const { data } = await this.synapCores._getHttpClient().get(\n `/backups/restore/${restoreId}/status`\n );\n\n return {\n id: data.id || restoreId,\n status: data.status,\n progress: data.progress || 0,\n phase: data.phase,\n tables_processed: data.tables_processed,\n total_tables: data.total_tables,\n rows_processed: data.rows_processed,\n eta_ms: data.eta_ms || data.estimated_time_remaining_ms,\n error: data.error,\n started_at: data.started_at ? new Date(data.started_at) : undefined,\n completed_at: data.completed_at ? new Date(data.completed_at) : undefined,\n };\n }\n\n // cancelBackup() / cancelRestore() removed — gateway v1.5.0-ce has no\n // /backups/:id/cancel or /backups/restore/:id/cancel routes. Use\n // delete() to clean up an aborted backup record.\n\n /**\n * Download a backup file\n */\n async download(backupId: string): Promise<Buffer> {\n const { data } = await this.synapCores._getHttpClient().get(\n `/backups/${backupId}/download`,\n {\n responseType: 'arraybuffer',\n }\n );\n\n return Buffer.from(data);\n }\n\n /**\n * Verify backup integrity\n */\n async verify(backupId: string): Promise<BackupVerificationResult> {\n const { data } = await this.synapCores._getHttpClient().post(\n `/backups/${backupId}/verify`\n );\n\n return {\n is_valid: data.is_valid || data.valid,\n integrity_ok: data.integrity_ok || data.integrity,\n checksum_match: data.checksum_match,\n tables_verified: data.tables_verified || 0,\n errors: data.errors || [],\n warnings: data.warnings || [],\n verified_at: data.verified_at ? new Date(data.verified_at) : new Date(),\n };\n }\n\n /**\n * Create a backup schedule\n */\n async createSchedule(options: CreateScheduleOptions): Promise<BackupSchedule> {\n const { data } = await this.synapCores._getHttpClient().post('/backups/schedules', {\n name: options.name,\n cron: options.cron,\n backup_options: options.backup_options,\n activate: options.activate !== false,\n tags: options.tags || [],\n });\n\n return {\n id: data.id,\n name: data.name,\n cron: data.cron,\n backup_options: data.backup_options,\n active: data.active,\n last_run_at: data.last_run_at ? new Date(data.last_run_at) : undefined,\n next_run_at: data.next_run_at ? new Date(data.next_run_at) : undefined,\n created_at: new Date(data.created_at),\n tags: data.tags || [],\n };\n }\n\n /**\n * List backup schedules\n */\n async listSchedules(): Promise<BackupSchedule[]> {\n const { data } = await this.synapCores._getHttpClient().get('/backups/schedules');\n\n return (data.schedules || data).map((schedule: any) => ({\n id: schedule.id,\n name: schedule.name,\n cron: schedule.cron,\n backup_options: schedule.backup_options,\n active: schedule.active,\n last_run_at: schedule.last_run_at ? new Date(schedule.last_run_at) : undefined,\n next_run_at: schedule.next_run_at ? new Date(schedule.next_run_at) : undefined,\n created_at: new Date(schedule.created_at),\n tags: schedule.tags || [],\n }));\n }\n\n /**\n * Get a specific schedule\n */\n async getSchedule(scheduleId: string): Promise<BackupSchedule> {\n const { data } = await this.synapCores._getHttpClient().get(\n `/backups/schedules/${scheduleId}`\n );\n\n return {\n id: data.id,\n name: data.name,\n cron: data.cron,\n backup_options: data.backup_options,\n active: data.active,\n last_run_at: data.last_run_at ? new Date(data.last_run_at) : undefined,\n next_run_at: data.next_run_at ? new Date(data.next_run_at) : undefined,\n created_at: new Date(data.created_at),\n tags: data.tags || [],\n };\n }\n\n /**\n * Update a backup schedule\n */\n async updateSchedule(\n scheduleId: string,\n updates: Partial<CreateScheduleOptions>\n ): Promise<BackupSchedule> {\n const { data } = await this.synapCores._getHttpClient().put(\n `/backups/schedules/${scheduleId}`,\n updates\n );\n\n return {\n id: data.id,\n name: data.name,\n cron: data.cron,\n backup_options: data.backup_options,\n active: data.active,\n last_run_at: data.last_run_at ? new Date(data.last_run_at) : undefined,\n next_run_at: data.next_run_at ? new Date(data.next_run_at) : undefined,\n created_at: new Date(data.created_at),\n tags: data.tags || [],\n };\n }\n\n /**\n * Delete a backup schedule\n */\n async deleteSchedule(scheduleId: string): Promise<void> {\n await this.synapCores._getHttpClient().delete(`/backups/schedules/${scheduleId}`);\n }\n\n /**\n * Activate a schedule\n */\n async activateSchedule(scheduleId: string): Promise<BackupSchedule> {\n const { data } = await this.synapCores._getHttpClient().post(\n `/backups/schedules/${scheduleId}/activate`\n );\n\n return {\n id: data.id,\n name: data.name,\n cron: data.cron,\n backup_options: data.backup_options,\n active: data.active,\n last_run_at: data.last_run_at ? new Date(data.last_run_at) : undefined,\n next_run_at: data.next_run_at ? new Date(data.next_run_at) : undefined,\n created_at: new Date(data.created_at),\n tags: data.tags || [],\n };\n }\n\n /**\n * Deactivate a schedule\n */\n async deactivateSchedule(scheduleId: string): Promise<BackupSchedule> {\n const { data } = await this.synapCores._getHttpClient().post(\n `/backups/schedules/${scheduleId}/deactivate`\n );\n\n return {\n id: data.id,\n name: data.name,\n cron: data.cron,\n backup_options: data.backup_options,\n active: data.active,\n last_run_at: data.last_run_at ? new Date(data.last_run_at) : undefined,\n next_run_at: data.next_run_at ? new Date(data.next_run_at) : undefined,\n created_at: new Date(data.created_at),\n tags: data.tags || [],\n };\n }\n\n // getMetrics() removed — gateway v1.5.0-ce has no /backups/metrics route.\n // Aggregate metrics can be derived client-side from list().\n\n /**\n * Map raw backup data to Backup type\n */\n private mapBackup(data: any): Backup {\n return {\n id: data.id,\n name: data.name,\n description: data.description,\n type: data.type,\n status: data.status,\n size_bytes: data.size_bytes,\n compressed_size_bytes: data.compressed_size_bytes,\n table_count: data.table_count,\n created_at: new Date(data.created_at),\n completed_at: data.completed_at ? new Date(data.completed_at) : undefined,\n duration_ms: data.duration_ms || data.took_ms,\n storage: data.storage,\n storage_path: data.storage_path,\n encrypted: data.encrypted || false,\n tags: data.tags || [],\n parent_backup_id: data.parent_backup_id,\n error: data.error,\n };\n }\n}\n","/**\n * Graph database client for SynapCores SDK (v1.5.0-ce).\n */\n\nimport { SynapCores } from './client';\nimport {\n GraphNode,\n GraphEdge,\n CypherResult,\n CypherProfileResult,\n GraphAlgorithmName,\n GraphAlgorithmRequest,\n GraphAlgorithmResult,\n GraphSummary,\n GraphExtractRequest,\n GraphExtractResult,\n} from './types/graph';\n\nclass GraphNodeApi {\n constructor(private readonly synapCores: SynapCores) {}\n\n async create(label: string, props: Record<string, any> = {}): Promise<GraphNode> {\n const { data } = await this.synapCores._getHttpClient().post('/graph/nodes', {\n label,\n properties: props,\n });\n return this.normalize(data);\n }\n\n async get(id: string): Promise<GraphNode> {\n const { data } = await this.synapCores._getHttpClient().get(`/graph/nodes/${id}`);\n return this.normalize(data);\n }\n\n async update(id: string, patch: Record<string, any>): Promise<GraphNode> {\n const { data } = await this.synapCores._getHttpClient().patch(\n `/graph/nodes/${id}`,\n { properties: patch },\n );\n return this.normalize(data);\n }\n\n async delete(id: string): Promise<void> {\n await this.synapCores._getHttpClient().delete(`/graph/nodes/${id}`);\n }\n\n async neighbors(\n id: string,\n opts: { direction?: 'in' | 'out' | 'both'; limit?: number; type?: string } = {},\n ): Promise<{ nodes: GraphNode[]; edges: GraphEdge[] }> {\n const params = new URLSearchParams();\n if (opts.direction) params.append('direction', opts.direction);\n if (opts.limit !== undefined) params.append('limit', String(opts.limit));\n if (opts.type) params.append('type', opts.type);\n const qs = params.toString();\n const { data } = await this.synapCores._getHttpClient().get(\n `/graph/nodes/${id}/neighbors${qs ? `?${qs}` : ''}`,\n );\n return {\n nodes: (data.nodes ?? []).map((n: any) => this.normalize(n)),\n edges: (data.edges ?? []).map((e: any) => this.normalizeEdge(e)),\n };\n }\n\n private normalize(data: any): GraphNode {\n return {\n id: String(data.id ?? data.node_id ?? ''),\n label: data.label,\n labels: data.labels,\n properties: data.properties ?? data.props ?? {},\n };\n }\n\n private normalizeEdge(data: any): GraphEdge {\n return {\n id: data.id !== undefined ? String(data.id) : undefined,\n from: String(data.from ?? data.source ?? ''),\n to: String(data.to ?? data.target ?? ''),\n type: data.type ?? data.label ?? '',\n properties: data.properties ?? data.props ?? {},\n };\n }\n}\n\nclass GraphEdgeApi {\n constructor(private readonly synapCores: SynapCores) {}\n\n async create(\n from: string,\n to: string,\n type: string,\n props: Record<string, any> = {},\n ): Promise<GraphEdge> {\n const { data } = await this.synapCores._getHttpClient().post('/graph/edges', {\n from,\n to,\n type,\n properties: props,\n });\n return {\n id: data.id !== undefined ? String(data.id) : undefined,\n from: String(data.from ?? from),\n to: String(data.to ?? to),\n type: data.type ?? type,\n properties: data.properties ?? props,\n };\n }\n}\n\nclass GraphIndexesApi {\n constructor(private readonly synapCores: SynapCores) {}\n\n /**\n * Create a graph index (label/property index, fulltext, or vector\n * depending on the gateway's accepted DDL strings).\n */\n async create(stmt: string): Promise<{ name?: string; raw: any }> {\n const { data } = await this.synapCores._getHttpClient().post('/graph/indexes', {\n statement: stmt,\n });\n return { name: data.name ?? data.index_name, raw: data };\n }\n}\n\nclass GraphAlgorithmsApi {\n constructor(private readonly synapCores: SynapCores) {}\n\n async run(\n name: GraphAlgorithmName,\n opts: GraphAlgorithmRequest = {},\n ): Promise<GraphAlgorithmResult> {\n const { data } = await this.synapCores._getHttpClient().post('/graph/algorithms', {\n algorithm: name,\n ...opts,\n });\n return {\n algorithm: name,\n results: data.results ?? data.result ?? data,\n stats: data.stats,\n execution_time_ms: data.execution_time_ms ?? data.took_ms,\n };\n }\n}\n\nclass GraphsApi {\n constructor(private readonly synapCores: SynapCores) {}\n\n async list(): Promise<GraphSummary[]> {\n const { data } = await this.synapCores._getHttpClient().get('/graphs');\n return (data.graphs ?? data ?? []).map((g: any) => this.normalize(g));\n }\n\n async create(name: string, opts: { description?: string } = {}): Promise<GraphSummary> {\n const { data } = await this.synapCores._getHttpClient().post('/graphs', {\n name,\n description: opts.description,\n });\n return this.normalize(data);\n }\n\n async get(name: string): Promise<GraphSummary> {\n const { data } = await this.synapCores._getHttpClient().get(`/graphs/${name}`);\n return this.normalize(data);\n }\n\n async delete(name: string): Promise<void> {\n await this.synapCores._getHttpClient().delete(`/graphs/${name}`);\n }\n\n private normalize(data: any): GraphSummary {\n return {\n name: data.name,\n node_count: data.node_count ?? data.nodes,\n edge_count: data.edge_count ?? data.edges,\n created_at: data.created_at ? new Date(data.created_at) : undefined,\n description: data.description,\n };\n }\n}\n\nexport class GraphClient {\n public readonly nodes: GraphNodeApi;\n public readonly edges: GraphEdgeApi;\n public readonly indexes: GraphIndexesApi;\n public readonly algorithms: GraphAlgorithmsApi;\n public readonly graphs: GraphsApi;\n\n constructor(private readonly synapCores: SynapCores) {\n this.nodes = new GraphNodeApi(synapCores);\n this.edges = new GraphEdgeApi(synapCores);\n this.indexes = new GraphIndexesApi(synapCores);\n this.algorithms = new GraphAlgorithmsApi(synapCores);\n this.graphs = new GraphsApi(synapCores);\n }\n\n /**\n * Run a Cypher / MATCH query.\n */\n async cypher(query: string, params: Record<string, any> = {}, graph?: string): Promise<CypherResult> {\n const { data } = await this.synapCores._getHttpClient().post('/graph/match', {\n query,\n params,\n graph,\n });\n return this.normalizeCypher(data);\n }\n\n /**\n * Profile a Cypher / MATCH query (returns plan/profile metadata).\n */\n async cypherProfile(\n query: string,\n params: Record<string, any> = {},\n graph?: string,\n ): Promise<CypherProfileResult> {\n const { data } = await this.synapCores._getHttpClient().post('/graph/match/profile', {\n query,\n params,\n graph,\n });\n return {\n ...this.normalizeCypher(data),\n plan: data.plan,\n profile: data.profile ?? data.profile_data,\n };\n }\n\n /**\n * Run LLM-based extraction over text into the given graph.\n */\n async extract(req: GraphExtractRequest | string, graphName?: string): Promise<GraphExtractResult> {\n const body = typeof req === 'string' ? { text: req, graph: graphName } : req;\n const { data } = await this.synapCores._getHttpClient().post('/graph/extract', body);\n return {\n nodes: (data.nodes ?? []).map((n: any) => ({\n id: String(n.id ?? ''),\n label: n.label,\n labels: n.labels,\n properties: n.properties ?? n.props ?? {},\n })),\n edges: (data.edges ?? []).map((e: any) => ({\n id: e.id !== undefined ? String(e.id) : undefined,\n from: String(e.from ?? e.source ?? ''),\n to: String(e.to ?? e.target ?? ''),\n type: e.type ?? e.label ?? '',\n properties: e.properties ?? e.props ?? {},\n })),\n spans: data.spans,\n };\n }\n\n private normalizeCypher(data: any): CypherResult {\n return {\n columns: data.columns ?? data.fields,\n rows: data.rows ?? data.values ?? [],\n records: data.records ?? data.results,\n stats: data.stats,\n execution_time_ms: data.execution_time_ms ?? data.took_ms,\n };\n }\n}\n","/**\n * Natural-language-to-SQL client for SynapCores SDK (v1.5.0-ce).\n */\n\nimport { SynapCores } from './client';\nimport {\n Nl2SqlAskOptions,\n Nl2SqlAskResult,\n Nl2SqlSchemaContext,\n Nl2SqlHistoryEntry,\n Nl2SqlValidateResult,\n} from './types/nl2sql';\n\nexport class NL2SqlClient {\n constructor(private readonly synapCores: SynapCores) {}\n\n /**\n * Ask a question in natural language. The gateway returns the\n * generated SQL and optionally the executed result set when\n * `execute=true`.\n */\n async ask(question: string, opts: Nl2SqlAskOptions = {}): Promise<Nl2SqlAskResult> {\n const { data } = await this.synapCores._getHttpClient().post('/nl2sql/query', {\n question,\n ...opts,\n });\n return {\n sql: data.sql ?? data.generated_sql ?? '',\n confidence: data.confidence,\n rows: data.rows ?? data.data,\n columns: data.columns,\n execution_time_ms: data.execution_time_ms ?? data.took_ms,\n trace: data.trace ?? data.plan,\n question,\n };\n }\n\n /**\n * Push schema context the model should use for subsequent ask() calls.\n */\n async updateSchemaContext(payload: Nl2SqlSchemaContext): Promise<{ accepted: boolean; raw: any }> {\n const { data } = await this.synapCores._getHttpClient().post(\n '/nl2sql/schema/context',\n payload,\n );\n return { accepted: data.accepted ?? data.success ?? true, raw: data };\n }\n\n /**\n * Retrieve recent NL2SQL history for the current authenticated user.\n */\n async history(opts: { limit?: number; session_id?: string } = {}): Promise<Nl2SqlHistoryEntry[]> {\n const params = new URLSearchParams();\n if (opts.limit) params.append('limit', String(opts.limit));\n if (opts.session_id) params.append('session_id', opts.session_id);\n const qs = params.toString();\n const { data } = await this.synapCores._getHttpClient().get(\n `/nl2sql/history${qs ? `?${qs}` : ''}`,\n );\n return (data.history ?? data.entries ?? data ?? []).map((row: any) => ({\n id: String(row.id ?? row.entry_id ?? ''),\n question: row.question ?? row.prompt ?? '',\n sql: row.sql ?? row.generated_sql ?? '',\n created_at: new Date(row.created_at ?? row.timestamp ?? Date.now()),\n executed: row.executed,\n success: row.success,\n }));\n }\n\n /**\n * Validate a SQL string against the current schema and policies.\n */\n async validate(sql: string): Promise<Nl2SqlValidateResult> {\n const { data } = await this.synapCores._getHttpClient().post('/nl2sql/validate', {\n sql,\n });\n return {\n is_valid: data.is_valid ?? data.valid ?? false,\n errors: data.errors ?? [],\n warnings: data.warnings ?? [],\n rewritten_sql: data.rewritten_sql ?? data.sql,\n };\n }\n}\n","/**\n * Filesystem-collections client for SynapCores SDK (v1.5.0-ce).\n *\n * Routes:\n * GET/POST /v1/filesystem-collections\n * GET/PATCH/DELETE /v1/filesystem-collections/:id\n * GET /v1/filesystem-collections/:id/documents\n * POST /v1/filesystem-collections/:id/reprocess\n * WS /ws/filesystem-collections/:id/progress?token=\n */\n\nimport WebSocket from 'ws';\nimport { SynapCores } from './client';\nimport {\n FsCollection,\n CreateFsCollectionOptions,\n FsDocument,\n FsProgressEvent,\n} from './types/filesystem';\n\nclass FsCollectionsApi {\n constructor(private readonly synapCores: SynapCores) {}\n\n async create(opts: CreateFsCollectionOptions): Promise<FsCollection> {\n const { data } = await this.synapCores._getHttpClient().post(\n '/filesystem-collections',\n opts,\n );\n return this.normalize(data);\n }\n\n async list(): Promise<FsCollection[]> {\n const { data } = await this.synapCores._getHttpClient().get('/filesystem-collections');\n return (data.collections ?? data ?? []).map((c: any) => this.normalize(c));\n }\n\n async get(id: string): Promise<FsCollection> {\n const { data } = await this.synapCores._getHttpClient().get(\n `/filesystem-collections/${id}`,\n );\n return this.normalize(data);\n }\n\n async patch(id: string, p: Partial<CreateFsCollectionOptions> & { config?: Record<string, any> }): Promise<FsCollection> {\n const { data } = await this.synapCores._getHttpClient().patch(\n `/filesystem-collections/${id}`,\n p,\n );\n return this.normalize(data);\n }\n\n async delete(id: string): Promise<void> {\n await this.synapCores._getHttpClient().delete(`/filesystem-collections/${id}`);\n }\n\n async documents(id: string, opts: { page?: number; page_size?: number } = {}): Promise<FsDocument[]> {\n const params = new URLSearchParams();\n if (opts.page) params.append('page', String(opts.page));\n if (opts.page_size) params.append('page_size', String(opts.page_size));\n const qs = params.toString();\n const { data } = await this.synapCores._getHttpClient().get(\n `/filesystem-collections/${id}/documents${qs ? `?${qs}` : ''}`,\n );\n return (data.documents ?? data ?? []).map((d: any) => ({\n id: String(d.id ?? d.document_id ?? ''),\n collection_id: d.collection_id !== undefined ? String(d.collection_id) : id,\n filename: d.filename ?? d.name,\n path: d.path,\n status: d.status,\n size_bytes: d.size_bytes,\n created_at: d.created_at ? new Date(d.created_at) : undefined,\n updated_at: d.updated_at ? new Date(d.updated_at) : undefined,\n }));\n }\n\n async reprocess(id: string, fileId?: string): Promise<{ accepted: boolean; raw: any }> {\n const body = fileId ? { document_id: fileId } : {};\n const { data } = await this.synapCores._getHttpClient().post(\n `/filesystem-collections/${id}/reprocess`,\n body,\n );\n return { accepted: data.accepted ?? data.success ?? true, raw: data };\n }\n\n /**\n * Stream progress events for an in-flight ingestion. Each tick maps to\n * a JSON payload broadcast by the gateway over the WS channel. The\n * iterator ends when the server closes the socket or the consumer\n * breaks out of the for-await loop.\n */\n async *subscribeProgress(id: string, opts: { signal?: AbortSignal } = {}): AsyncIterable<FsProgressEvent> {\n const { token } = await this.synapCores.createWsTicket();\n const wsBase = this.synapCores._getWsBaseUrl();\n const url = `${wsBase}/ws/filesystem-collections/${id}/progress?token=${encodeURIComponent(token)}`;\n\n const ws = new WebSocket(url);\n\n type Pending =\n | { kind: 'value'; value: FsProgressEvent }\n | { kind: 'error'; error: any }\n | { kind: 'done' };\n const queue: Pending[] = [];\n let resolver: ((p: Pending) => void) | null = null;\n\n const push = (p: Pending) => {\n if (resolver) {\n const r = resolver;\n resolver = null;\n r(p);\n } else {\n queue.push(p);\n }\n };\n\n ws.on('message', (raw) => {\n try {\n const obj = JSON.parse(raw.toString());\n push({\n kind: 'value',\n value: {\n type: obj.type ?? obj.event ?? 'progress',\n collection_id: obj.collection_id !== undefined ? String(obj.collection_id) : id,\n document_id: obj.document_id !== undefined ? String(obj.document_id) : undefined,\n filename: obj.filename ?? obj.path,\n status: obj.status,\n progress: obj.progress,\n message: obj.message,\n error: obj.error,\n timestamp: obj.timestamp ? new Date(obj.timestamp) : undefined,\n raw: obj,\n },\n });\n } catch (e) {\n push({ kind: 'error', error: e });\n }\n });\n ws.on('error', (err) => push({ kind: 'error', error: err }));\n ws.on('close', () => push({ kind: 'done' }));\n\n const onAbort = () => {\n try {\n ws.close();\n } catch {\n /* ignore */\n }\n };\n if (opts.signal) {\n if (opts.signal.aborted) onAbort();\n else opts.signal.addEventListener('abort', onAbort);\n }\n\n try {\n while (true) {\n const next: Pending = await new Promise((resolve) => {\n if (queue.length > 0) {\n resolve(queue.shift()!);\n } else {\n resolver = resolve;\n }\n });\n if (next.kind === 'value') yield next.value;\n else if (next.kind === 'error') throw next.error;\n else return;\n }\n } finally {\n try {\n ws.close();\n } catch {\n /* ignore */\n }\n if (opts.signal) opts.signal.removeEventListener('abort', onAbort);\n }\n }\n\n private normalize(data: any): FsCollection {\n return {\n id: String(data.id ?? data.collection_id ?? ''),\n name: data.name,\n description: data.description,\n path: data.path,\n status: data.status,\n document_count: data.document_count ?? data.documents,\n created_at: data.created_at ? new Date(data.created_at) : undefined,\n updated_at: data.updated_at ? new Date(data.updated_at) : undefined,\n config: data.config,\n };\n }\n}\n\nexport class FilesystemCollectionsClient {\n public readonly collections: FsCollectionsApi;\n\n constructor(synapCores: SynapCores) {\n this.collections = new FsCollectionsApi(synapCores);\n }\n}\n","/**\n * AI chat client for SynapCores SDK (v1.5.0-ce).\n *\n * Wraps:\n * /v1/ai/sessions, /v1/ai/sessions/:id, /v1/ai/sessions/:id/messages\n * /v1/ai/chat, /v1/ai/chat/stream (POST)\n * /v1/ai/suggestions, /v1/ai/models, /v1/ai/system-prompts\n * /v1/ai/tools, /v1/ai/tools/execute, /v1/ai/tools/sql\n * /v1/ai/cache/stats, /v1/ai/cache/clear\n */\n\nimport { SynapCores } from './client';\nimport {\n ChatSession,\n CreateChatSessionOptions,\n ChatMessage,\n SendChatOptions,\n SendChatResult,\n ChatStreamChunk,\n ChatSuggestion,\n ChatSuggestionsOptions,\n ChatModelInfo,\n ChatSystemPrompt,\n ChatTool,\n ChatCacheStats,\n} from './types/chat';\n\nclass ChatSessionsApi {\n constructor(private readonly synapCores: SynapCores) {}\n\n async create(opts: CreateChatSessionOptions = {}): Promise<ChatSession> {\n const { data } = await this.synapCores._getHttpClient().post('/ai/sessions', opts);\n return this.normalize(data);\n }\n\n async list(opts: { limit?: number; offset?: number } = {}): Promise<ChatSession[]> {\n const params = new URLSearchParams();\n if (opts.limit) params.append('limit', String(opts.limit));\n if (opts.offset) params.append('offset', String(opts.offset));\n const qs = params.toString();\n const { data } = await this.synapCores._getHttpClient().get(\n `/ai/sessions${qs ? `?${qs}` : ''}`,\n );\n return (data.sessions ?? data ?? []).map((s: any) => this.normalize(s));\n }\n\n async get(id: string): Promise<ChatSession> {\n const { data } = await this.synapCores._getHttpClient().get(`/ai/sessions/${id}`);\n return this.normalize(data);\n }\n\n async delete(id: string): Promise<void> {\n await this.synapCores._getHttpClient().delete(`/ai/sessions/${id}`);\n }\n\n async messages(id: string, opts: { limit?: number; offset?: number } = {}): Promise<ChatMessage[]> {\n const params = new URLSearchParams();\n if (opts.limit) params.append('limit', String(opts.limit));\n if (opts.offset) params.append('offset', String(opts.offset));\n const qs = params.toString();\n const { data } = await this.synapCores._getHttpClient().get(\n `/ai/sessions/${id}/messages${qs ? `?${qs}` : ''}`,\n );\n return (data.messages ?? data ?? []).map((m: any) => this.normalizeMessage(m, id));\n }\n\n private normalize(data: any): ChatSession {\n return {\n id: String(data.id ?? data.session_id ?? ''),\n title: data.title,\n model: data.model,\n system_prompt: data.system_prompt,\n created_at: new Date(data.created_at ?? Date.now()),\n updated_at: data.updated_at ? new Date(data.updated_at) : undefined,\n message_count: data.message_count ?? data.messages,\n metadata: data.metadata,\n };\n }\n\n private normalizeMessage(m: any, sessionId: string): ChatMessage {\n return {\n id: String(m.id ?? m.message_id ?? ''),\n session_id: m.session_id !== undefined ? String(m.session_id) : sessionId,\n role: m.role,\n content: m.content ?? m.text ?? '',\n created_at: new Date(m.created_at ?? Date.now()),\n metadata: m.metadata,\n };\n }\n}\n\nclass ChatToolsApi {\n constructor(private readonly synapCores: SynapCores) {}\n\n async list(): Promise<ChatTool[]> {\n const { data } = await this.synapCores._getHttpClient().get('/ai/tools');\n return (data.tools ?? data ?? []).map((t: any) => ({\n name: t.name,\n description: t.description,\n parameters: t.parameters ?? t.schema,\n }));\n }\n\n async execute(name: string, args: Record<string, any> = {}): Promise<any> {\n const { data } = await this.synapCores._getHttpClient().post('/ai/tools/execute', {\n tool: name,\n arguments: args,\n });\n return data;\n }\n\n async sql(sql: string, params: any[] = []): Promise<any> {\n const { data } = await this.synapCores._getHttpClient().post('/ai/tools/sql', {\n sql,\n parameters: params,\n });\n return data;\n }\n}\n\nclass ChatCacheApi {\n constructor(private readonly synapCores: SynapCores) {}\n\n async stats(): Promise<ChatCacheStats> {\n const { data } = await this.synapCores._getHttpClient().get('/ai/cache/stats');\n return {\n size_bytes: data.size_bytes ?? data.bytes,\n hit_count: data.hit_count ?? data.hits,\n miss_count: data.miss_count ?? data.misses,\n entries: data.entries ?? data.count,\n raw: data,\n };\n }\n\n async clear(): Promise<void> {\n await this.synapCores._getHttpClient().post('/ai/cache/clear', {});\n }\n}\n\nexport class ChatClient {\n public readonly sessions: ChatSessionsApi;\n public readonly tools: ChatToolsApi;\n public readonly cache: ChatCacheApi;\n\n constructor(private readonly synapCores: SynapCores) {\n this.sessions = new ChatSessionsApi(synapCores);\n this.tools = new ChatToolsApi(synapCores);\n this.cache = new ChatCacheApi(synapCores);\n }\n\n /**\n * Send a one-shot chat message. The gateway accepts both /ai/chat and\n * the alias /ai/ — we use /ai/chat for clarity.\n */\n async send(sessionId: string, content: string, opts: SendChatOptions = {}): Promise<SendChatResult> {\n const { data } = await this.synapCores._getHttpClient().post('/ai/chat', {\n session_id: sessionId,\n content,\n ...opts,\n });\n\n const messageData = data.message ?? data;\n return {\n message: {\n id: String(messageData.id ?? messageData.message_id ?? ''),\n session_id: sessionId,\n role: messageData.role ?? 'assistant',\n content: messageData.content ?? messageData.text ?? '',\n created_at: new Date(messageData.created_at ?? Date.now()),\n metadata: messageData.metadata,\n },\n tool_calls: data.tool_calls,\n usage: data.usage,\n };\n }\n\n /**\n * Stream a chat completion. Returns an async iterator over SSE chunks.\n */\n async *stream(\n sessionId: string,\n content: string,\n opts: SendChatOptions = {},\n ): AsyncIterable<ChatStreamChunk> {\n const http = this.synapCores._getHttpClient();\n const response = await http.post(\n '/ai/chat/stream',\n {\n session_id: sessionId,\n content,\n ...opts,\n },\n { responseType: 'stream' },\n );\n\n // Node stream response — parse SSE-like `data: {...}\\n\\n` frames.\n const stream: NodeJS.ReadableStream = response.data;\n let buffer = '';\n for await (const chunk of stream as any) {\n buffer += chunk.toString();\n const frames = buffer.split(/\\n\\n/);\n buffer = frames.pop() ?? '';\n for (const frame of frames) {\n const trimmed = frame.trim();\n if (!trimmed) continue;\n // Handle SSE \"data: \" prefix or raw JSON lines.\n const line = trimmed.startsWith('data:') ? trimmed.slice(5).trim() : trimmed;\n if (line === '[DONE]') {\n yield { done: true };\n return;\n }\n try {\n const obj = JSON.parse(line);\n yield {\n delta:\n obj.delta ??\n obj.choices?.[0]?.delta?.content ??\n obj.text ??\n undefined,\n content: obj.content ?? obj.message?.content,\n type: obj.type ?? obj.event,\n done: obj.done ?? obj.finished,\n raw: obj,\n };\n } catch {\n // Treat as plain text delta if not JSON.\n yield { delta: line, raw: line };\n }\n }\n }\n if (buffer.trim()) {\n try {\n yield { raw: JSON.parse(buffer) };\n } catch {\n yield { delta: buffer };\n }\n }\n }\n\n /**\n * Get prompt suggestions, e.g. for an empty session UI.\n */\n async suggestions(opts: ChatSuggestionsOptions = {}): Promise<ChatSuggestion[]> {\n const { data } = await this.synapCores._getHttpClient().post('/ai/suggestions', opts);\n return (data.suggestions ?? data ?? []).map((s: any) => ({\n prompt: s.prompt ?? s.text ?? '',\n category: s.category,\n meta: s.meta ?? s.metadata,\n }));\n }\n\n /**\n * List configured chat models.\n */\n async models(): Promise<ChatModelInfo[]> {\n const { data } = await this.synapCores._getHttpClient().get('/ai/models');\n return (data.models ?? data ?? []).map((m: any) => ({\n id: m.id ?? m.name,\n name: m.name,\n provider: m.provider,\n context_window: m.context_window ?? m.max_context,\n capabilities: m.capabilities,\n }));\n }\n\n /**\n * List the available system prompts library.\n */\n async systemPrompts(): Promise<ChatSystemPrompt[]> {\n const { data } = await this.synapCores._getHttpClient().get('/ai/system-prompts');\n return (data.prompts ?? data.system_prompts ?? data ?? []).map((p: any) => ({\n id: String(p.id ?? p.name ?? ''),\n name: p.name,\n content: p.content ?? p.text ?? '',\n description: p.description,\n category: p.category,\n }));\n }\n}\n","/**\n * Multimodal client for SynapCores SDK (v1.5.0-ce).\n *\n * Wraps:\n * POST /v1/multimodal/similarity\n * POST /v1/multimodal/search\n * POST /v1/multimodal/join\n * POST /v1/multimodal/embed\n */\n\nimport { SynapCores } from './client';\nimport {\n MultimodalInput,\n MultimodalSimilarityOptions,\n MultimodalSimilarityResult,\n MultimodalSearchOptions,\n MultimodalSearchHit,\n MultimodalJoinOptions,\n MultimodalJoinResult,\n MultimodalEmbedResult,\n} from './types/multimodal';\n\nexport class MultimodalClient {\n constructor(private readonly synapCores: SynapCores) {}\n\n async similarity(\n a: MultimodalInput | string,\n b: MultimodalInput | string,\n opts: MultimodalSimilarityOptions = {},\n ): Promise<MultimodalSimilarityResult> {\n const { data } = await this.synapCores._getHttpClient().post('/multimodal/similarity', {\n a: typeof a === 'string' ? { type: 'text', text: a } : a,\n b: typeof b === 'string' ? { type: 'text', text: b } : b,\n ...opts,\n });\n return {\n similarity: data.similarity ?? data.score ?? 0,\n metric: data.metric ?? opts.metric,\n raw: data,\n };\n }\n\n async search(\n query: MultimodalInput | string,\n opts: MultimodalSearchOptions = {},\n ): Promise<MultimodalSearchHit[]> {\n const { data } = await this.synapCores._getHttpClient().post('/multimodal/search', {\n query: typeof query === 'string' ? { type: 'text', text: query } : query,\n ...opts,\n });\n return (data.results ?? data.hits ?? data ?? []).map((r: any) => ({\n id: String(r.id ?? r.document_id ?? ''),\n score: r.score ?? r.similarity ?? 0,\n modality: r.modality,\n metadata: r.metadata,\n }));\n }\n\n async join(\n left: Array<MultimodalInput | string> | { collection: string },\n right: Array<MultimodalInput | string> | { collection: string },\n opts: MultimodalJoinOptions = {},\n ): Promise<MultimodalJoinResult> {\n const normalize = (\n side: Array<MultimodalInput | string> | { collection: string },\n ) =>\n Array.isArray(side)\n ? side.map((s) => (typeof s === 'string' ? { type: 'text', text: s } : s))\n : side;\n\n const { data } = await this.synapCores._getHttpClient().post('/multimodal/join', {\n left: normalize(left),\n right: normalize(right),\n ...opts,\n });\n return {\n pairs: (data.pairs ?? data.results ?? []).map((p: any) => ({\n left: p.left,\n right: p.right,\n score: p.score ?? p.similarity ?? 0,\n })),\n };\n }\n\n async embed(\n input: MultimodalInput | string,\n model?: string,\n ): Promise<MultimodalEmbedResult> {\n const { data } = await this.synapCores._getHttpClient().post('/multimodal/embed', {\n input: typeof input === 'string' ? { type: 'text', text: input } : input,\n model,\n });\n const embedding = data.embedding ?? data.vector ?? [];\n return {\n embedding,\n modality: data.modality,\n model: data.model ?? model,\n dimensions: data.dimensions ?? embedding.length,\n };\n }\n}\n","/**\n * System / admin client for SynapCores SDK (v1.5.0-ce).\n *\n * Currently only the vision provider config surface is exposed:\n * GET/PUT/DELETE /v1/system/vision\n * POST /v1/system/vision/test\n */\n\nimport { SynapCores } from './client';\nimport { VisionConfig, VisionTestResult } from './types/system';\n\nclass VisionApi {\n constructor(private readonly synapCores: SynapCores) {}\n\n async get(): Promise<VisionConfig | null> {\n try {\n const { data } = await this.synapCores._getHttpClient().get('/system/vision');\n if (!data || (Object.keys(data).length === 0)) return null;\n return data as VisionConfig;\n } catch (e: any) {\n if (e?.statusCode === 404 || e?.code === 'NOT_FOUND') return null;\n throw e;\n }\n }\n\n async set(cfg: VisionConfig): Promise<VisionConfig> {\n const { data } = await this.synapCores._getHttpClient().put('/system/vision', cfg);\n return data as VisionConfig;\n }\n\n async delete(): Promise<void> {\n await this.synapCores._getHttpClient().delete('/system/vision');\n }\n\n async test(payload: any = {}): Promise<VisionTestResult> {\n const { data } = await this.synapCores._getHttpClient().post('/system/vision/test', payload);\n return {\n success: data.success ?? false,\n latency_ms: data.latency_ms,\n response: data.response,\n error: data.error,\n };\n }\n}\n\nexport class SystemClient {\n public readonly vision: VisionApi;\n\n constructor(synapCores: SynapCores) {\n this.vision = new VisionApi(synapCores);\n }\n}\n","/**\n * Server-side transactions client for SynapCores SDK (v1.5.0-ce).\n *\n * Wraps:\n * POST /v1/transactions\n * GET /v1/transactions/:id\n * POST /v1/transactions/:id/{execute,commit,rollback,savepoint}\n * POST /v1/transactions/:id/savepoint/:name/rollback\n * GET /v1/transactions/history\n * GET /v1/transactions/history/:id\n */\n\nimport { AxiosInstance } from 'axios';\nimport { SynapCores } from './client';\nimport {\n BeginTransactionOptions,\n TxQueryResult,\n TxHistoryEntry,\n} from './types/transactions';\n\nexport class Tx {\n private active = true;\n\n constructor(\n private readonly http: AxiosInstance,\n public readonly id: string,\n public readonly options: BeginTransactionOptions,\n ) {}\n\n isActive(): boolean {\n return this.active;\n }\n\n async execute(sql: string, params: any[] = []): Promise<TxQueryResult> {\n this.assertActive();\n const { data } = await this.http.post(`/transactions/${this.id}/execute`, {\n sql,\n parameters: params,\n });\n return {\n columns: data.columns ?? [],\n rows: data.rows ?? [],\n rows_affected: data.rows_affected,\n execution_time_ms: data.execution_time_ms ?? data.took_ms,\n };\n }\n\n async commit(): Promise<void> {\n this.assertActive();\n await this.http.post(`/transactions/${this.id}/commit`, {});\n this.active = false;\n }\n\n async rollback(): Promise<void> {\n this.assertActive();\n await this.http.post(`/transactions/${this.id}/rollback`, {});\n this.active = false;\n }\n\n async savepoint(name: string): Promise<void> {\n this.assertActive();\n await this.http.post(`/transactions/${this.id}/savepoint`, { name });\n }\n\n async rollbackTo(name: string): Promise<void> {\n this.assertActive();\n await this.http.post(`/transactions/${this.id}/savepoint/${name}/rollback`, {});\n }\n\n private assertActive(): void {\n if (!this.active) {\n throw new Error(`Transaction ${this.id} has already been committed/rolled back`);\n }\n }\n}\n\nclass TxHistoryApi {\n constructor(private readonly synapCores: SynapCores) {}\n\n async list(opts: { limit?: number; status?: string } = {}): Promise<TxHistoryEntry[]> {\n const params = new URLSearchParams();\n if (opts.limit) params.append('limit', String(opts.limit));\n if (opts.status) params.append('status', opts.status);\n const qs = params.toString();\n const { data } = await this.synapCores._getHttpClient().get(\n `/transactions/history${qs ? `?${qs}` : ''}`,\n );\n return (data.transactions ?? data.history ?? data ?? []).map((row: any) => ({\n id: String(row.id ?? row.transaction_id ?? ''),\n status: row.status ?? 'unknown',\n started_at: new Date(row.started_at ?? row.created_at ?? Date.now()),\n completed_at: row.completed_at ? new Date(row.completed_at) : undefined,\n isolation_level: row.isolation_level,\n read_only: row.read_only,\n statement_count: row.statement_count ?? row.statements,\n metrics: row.metrics,\n }));\n }\n\n async get(id: string): Promise<TxHistoryEntry> {\n const { data } = await this.synapCores._getHttpClient().get(\n `/transactions/history/${id}`,\n );\n return {\n id: String(data.id ?? id),\n status: data.status ?? 'unknown',\n started_at: new Date(data.started_at ?? data.created_at ?? Date.now()),\n completed_at: data.completed_at ? new Date(data.completed_at) : undefined,\n isolation_level: data.isolation_level,\n read_only: data.read_only,\n statement_count: data.statement_count ?? data.statements,\n metrics: data.metrics,\n };\n }\n}\n\nexport class TransactionsClient {\n public readonly history: TxHistoryApi;\n\n constructor(private readonly synapCores: SynapCores) {\n this.history = new TxHistoryApi(synapCores);\n }\n\n /**\n * Begin a new server-side transaction.\n */\n async begin(opts: BeginTransactionOptions = {}): Promise<Tx> {\n const { data } = await this.synapCores._getHttpClient().post('/transactions', opts);\n const id = String(data.id ?? data.transaction_id ?? '');\n if (!id) {\n throw new Error('begin(): server did not return a transaction id');\n }\n return new Tx(this.synapCores._getHttpClient(), id, opts);\n }\n}\n","/**\n * Model Context Protocol (MCP) client for SynapCores SDK (v1.5.0-ce).\n *\n * Wraps:\n * POST /v1/mcp - single JSON-RPC style invocation\n * POST /v1/mcp/batch - array of invocations in one round-trip\n * GET /v1/mcp/info - server-side discovery\n */\n\nimport { SynapCores } from './client';\nimport { McpRequest, McpResponse, McpInfo } from './types/mcp';\n\nlet mcpRequestCounter = 0;\n\nfunction withId(req: McpRequest): McpRequest {\n if (req.id !== undefined && req.id !== null) return req;\n mcpRequestCounter += 1;\n return { ...req, id: `mcp-${Date.now()}-${mcpRequestCounter}` };\n}\n\nexport class McpClient {\n constructor(private readonly synapCores: SynapCores) {}\n\n /**\n * Invoke a single MCP method.\n */\n async invoke<T = any>(req: McpRequest): Promise<McpResponse<T>> {\n const body = withId(req);\n const { data } = await this.synapCores._getHttpClient().post('/mcp', body);\n return {\n id: data.id ?? body.id,\n result: data.result,\n error: data.error,\n raw: data,\n };\n }\n\n /**\n * Send an array of MCP invocations and resolve to the matching array\n * of responses (in the order returned by the gateway).\n */\n async batch<T = any>(reqs: McpRequest[]): Promise<Array<McpResponse<T>>> {\n const body = reqs.map(withId);\n const { data } = await this.synapCores._getHttpClient().post('/mcp/batch', body);\n const arr = Array.isArray(data) ? data : data.responses ?? data.results ?? [];\n return arr.map((r: any) => ({\n id: r.id,\n result: r.result,\n error: r.error,\n raw: r,\n }));\n }\n\n /**\n * Discover the server's MCP capabilities and tools.\n */\n async info(): Promise<McpInfo> {\n const { data } = await this.synapCores._getHttpClient().get('/mcp/info');\n return {\n version: data.version ?? data.mcp_version ?? '0',\n capabilities: data.capabilities,\n tools: data.tools,\n meta: data.meta ?? data.metadata,\n };\n }\n}\n"],"mappings":"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","names":["WebSocket","import_ws","WebSocket","axios"]}