agentdb 2.0.0-alpha.2 → 2.0.0-alpha.2.1
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/agentdb.min.js +4 -4
- package/dist/simulation/cli.js +0 -0
- package/dist/src/cli/agentdb-cli.d.ts.map +1 -1
- package/dist/src/cli/agentdb-cli.js +78 -0
- package/dist/src/cli/agentdb-cli.js.map +1 -1
- package/package.json +3 -3
- package/src/cli/agentdb-cli.ts +78 -0
- package/dist/agentdb-advanced.js +0 -2110
- package/dist/agentdb-advanced.min.js +0 -1
- package/dist/backends/GraphBackend.d.ts +0 -196
- package/dist/backends/GraphBackend.d.ts.map +0 -1
- package/dist/backends/GraphBackend.js +0 -33
- package/dist/backends/GraphBackend.js.map +0 -1
- package/dist/backends/LearningBackend.d.ts +0 -148
- package/dist/backends/LearningBackend.d.ts.map +0 -1
- package/dist/backends/LearningBackend.js +0 -27
- package/dist/backends/LearningBackend.js.map +0 -1
- package/dist/backends/VectorBackend.d.ts +0 -119
- package/dist/backends/VectorBackend.d.ts.map +0 -1
- package/dist/backends/VectorBackend.js +0 -14
- package/dist/backends/VectorBackend.js.map +0 -1
- package/dist/backends/detector.d.ts +0 -81
- package/dist/backends/detector.d.ts.map +0 -1
- package/dist/backends/detector.js +0 -192
- package/dist/backends/detector.js.map +0 -1
- package/dist/backends/factory.d.ts +0 -50
- package/dist/backends/factory.d.ts.map +0 -1
- package/dist/backends/factory.js +0 -161
- package/dist/backends/factory.js.map +0 -1
- package/dist/backends/graph/GraphDatabaseAdapter.d.ts +0 -139
- package/dist/backends/graph/GraphDatabaseAdapter.d.ts.map +0 -1
- package/dist/backends/graph/GraphDatabaseAdapter.js +0 -194
- package/dist/backends/graph/GraphDatabaseAdapter.js.map +0 -1
- package/dist/backends/hnswlib/HNSWLibBackend.d.ts +0 -92
- package/dist/backends/hnswlib/HNSWLibBackend.d.ts.map +0 -1
- package/dist/backends/hnswlib/HNSWLibBackend.js +0 -316
- package/dist/backends/hnswlib/HNSWLibBackend.js.map +0 -1
- package/dist/backends/hnswlib/index.d.ts +0 -7
- package/dist/backends/hnswlib/index.d.ts.map +0 -1
- package/dist/backends/hnswlib/index.js +0 -7
- package/dist/backends/hnswlib/index.js.map +0 -1
- package/dist/backends/index.d.ts +0 -14
- package/dist/backends/index.d.ts.map +0 -1
- package/dist/backends/index.js +0 -13
- package/dist/backends/index.js.map +0 -1
- package/dist/backends/ruvector/RuVectorBackend.d.ts +0 -75
- package/dist/backends/ruvector/RuVectorBackend.d.ts.map +0 -1
- package/dist/backends/ruvector/RuVectorBackend.js +0 -198
- package/dist/backends/ruvector/RuVectorBackend.js.map +0 -1
- package/dist/backends/ruvector/RuVectorLearning.d.ts +0 -104
- package/dist/backends/ruvector/RuVectorLearning.d.ts.map +0 -1
- package/dist/backends/ruvector/RuVectorLearning.js +0 -177
- package/dist/backends/ruvector/RuVectorLearning.js.map +0 -1
- package/dist/backends/ruvector/index.d.ts +0 -9
- package/dist/backends/ruvector/index.d.ts.map +0 -1
- package/dist/backends/ruvector/index.js +0 -8
- package/dist/backends/ruvector/index.js.map +0 -1
- package/dist/benchmarks/wasm-vector-benchmark.d.ts +0 -10
- package/dist/benchmarks/wasm-vector-benchmark.d.ts.map +0 -1
- package/dist/benchmarks/wasm-vector-benchmark.js +0 -196
- package/dist/benchmarks/wasm-vector-benchmark.js.map +0 -1
- package/dist/browser/AdvancedFeatures.d.ts +0 -144
- package/dist/browser/AdvancedFeatures.d.ts.map +0 -1
- package/dist/browser/AdvancedFeatures.js +0 -430
- package/dist/browser/AdvancedFeatures.js.map +0 -1
- package/dist/browser/HNSWIndex.d.ts +0 -117
- package/dist/browser/HNSWIndex.d.ts.map +0 -1
- package/dist/browser/HNSWIndex.js +0 -402
- package/dist/browser/HNSWIndex.js.map +0 -1
- package/dist/browser/ProductQuantization.d.ts +0 -107
- package/dist/browser/ProductQuantization.d.ts.map +0 -1
- package/dist/browser/ProductQuantization.js +0 -337
- package/dist/browser/ProductQuantization.js.map +0 -1
- package/dist/browser/browser/AdvancedFeatures.d.ts +0 -144
- package/dist/browser/browser/AdvancedFeatures.d.ts.map +0 -1
- package/dist/browser/browser/AdvancedFeatures.js +0 -427
- package/dist/browser/browser/HNSWIndex.d.ts +0 -117
- package/dist/browser/browser/HNSWIndex.d.ts.map +0 -1
- package/dist/browser/browser/HNSWIndex.js +0 -402
- package/dist/browser/browser/ProductQuantization.d.ts +0 -107
- package/dist/browser/browser/ProductQuantization.d.ts.map +0 -1
- package/dist/browser/browser/ProductQuantization.js +0 -348
- package/dist/browser/browser/index.d.ts +0 -223
- package/dist/browser/browser/index.d.ts.map +0 -1
- package/dist/browser/browser/index.js +0 -233
- package/dist/browser/index.d.ts +0 -223
- package/dist/browser/index.d.ts.map +0 -1
- package/dist/browser/index.js +0 -225
- package/dist/browser/index.js.map +0 -1
- package/dist/cli/agentdb-cli.d.ts +0 -154
- package/dist/cli/agentdb-cli.d.ts.map +0 -1
- package/dist/cli/agentdb-cli.js +0 -2273
- package/dist/cli/agentdb-cli.js.map +0 -1
- package/dist/cli/agentdb.db +0 -0
- package/dist/cli/commands/init.d.ts +0 -12
- package/dist/cli/commands/init.d.ts.map +0 -1
- package/dist/cli/commands/init.js +0 -115
- package/dist/cli/commands/init.js.map +0 -1
- package/dist/cli/commands/install-embeddings.d.ts +0 -10
- package/dist/cli/commands/install-embeddings.d.ts.map +0 -1
- package/dist/cli/commands/install-embeddings.js +0 -68
- package/dist/cli/commands/install-embeddings.js.map +0 -1
- package/dist/cli/commands/migrate.d.ts +0 -15
- package/dist/cli/commands/migrate.d.ts.map +0 -1
- package/dist/cli/commands/migrate.js +0 -425
- package/dist/cli/commands/migrate.js.map +0 -1
- package/dist/cli/commands/status.d.ts +0 -10
- package/dist/cli/commands/status.d.ts.map +0 -1
- package/dist/cli/commands/status.js +0 -129
- package/dist/cli/commands/status.js.map +0 -1
- package/dist/controllers/CausalMemoryGraph.d.ts +0 -126
- package/dist/controllers/CausalMemoryGraph.d.ts.map +0 -1
- package/dist/controllers/CausalMemoryGraph.js +0 -323
- package/dist/controllers/CausalMemoryGraph.js.map +0 -1
- package/dist/controllers/CausalRecall.d.ts +0 -139
- package/dist/controllers/CausalRecall.d.ts.map +0 -1
- package/dist/controllers/CausalRecall.js +0 -356
- package/dist/controllers/CausalRecall.js.map +0 -1
- package/dist/controllers/ContextSynthesizer.d.ts +0 -65
- package/dist/controllers/ContextSynthesizer.d.ts.map +0 -1
- package/dist/controllers/ContextSynthesizer.js +0 -208
- package/dist/controllers/ContextSynthesizer.js.map +0 -1
- package/dist/controllers/EmbeddingService.d.ts +0 -37
- package/dist/controllers/EmbeddingService.d.ts.map +0 -1
- package/dist/controllers/EmbeddingService.js +0 -136
- package/dist/controllers/EmbeddingService.js.map +0 -1
- package/dist/controllers/EnhancedEmbeddingService.d.ts +0 -50
- package/dist/controllers/EnhancedEmbeddingService.d.ts.map +0 -1
- package/dist/controllers/EnhancedEmbeddingService.js +0 -119
- package/dist/controllers/EnhancedEmbeddingService.js.map +0 -1
- package/dist/controllers/ExplainableRecall.d.ts +0 -163
- package/dist/controllers/ExplainableRecall.d.ts.map +0 -1
- package/dist/controllers/ExplainableRecall.js +0 -485
- package/dist/controllers/ExplainableRecall.js.map +0 -1
- package/dist/controllers/HNSWIndex.d.ts +0 -128
- package/dist/controllers/HNSWIndex.d.ts.map +0 -1
- package/dist/controllers/HNSWIndex.js +0 -361
- package/dist/controllers/HNSWIndex.js.map +0 -1
- package/dist/controllers/LearningSystem.d.ts +0 -195
- package/dist/controllers/LearningSystem.d.ts.map +0 -1
- package/dist/controllers/LearningSystem.js +0 -929
- package/dist/controllers/LearningSystem.js.map +0 -1
- package/dist/controllers/MMRDiversityRanker.d.ts +0 -50
- package/dist/controllers/MMRDiversityRanker.d.ts.map +0 -1
- package/dist/controllers/MMRDiversityRanker.js +0 -130
- package/dist/controllers/MMRDiversityRanker.js.map +0 -1
- package/dist/controllers/MetadataFilter.d.ts +0 -70
- package/dist/controllers/MetadataFilter.d.ts.map +0 -1
- package/dist/controllers/MetadataFilter.js +0 -243
- package/dist/controllers/MetadataFilter.js.map +0 -1
- package/dist/controllers/NightlyLearner.d.ts +0 -114
- package/dist/controllers/NightlyLearner.d.ts.map +0 -1
- package/dist/controllers/NightlyLearner.js +0 -394
- package/dist/controllers/NightlyLearner.js.map +0 -1
- package/dist/controllers/QUICClient.d.ts +0 -109
- package/dist/controllers/QUICClient.d.ts.map +0 -1
- package/dist/controllers/QUICClient.js +0 -299
- package/dist/controllers/QUICClient.js.map +0 -1
- package/dist/controllers/QUICServer.d.ts +0 -121
- package/dist/controllers/QUICServer.d.ts.map +0 -1
- package/dist/controllers/QUICServer.js +0 -383
- package/dist/controllers/QUICServer.js.map +0 -1
- package/dist/controllers/ReasoningBank.d.ts +0 -196
- package/dist/controllers/ReasoningBank.d.ts.map +0 -1
- package/dist/controllers/ReasoningBank.js +0 -494
- package/dist/controllers/ReasoningBank.js.map +0 -1
- package/dist/controllers/ReflexionMemory.d.ts +0 -125
- package/dist/controllers/ReflexionMemory.d.ts.map +0 -1
- package/dist/controllers/ReflexionMemory.js +0 -521
- package/dist/controllers/ReflexionMemory.js.map +0 -1
- package/dist/controllers/SkillLibrary.d.ts +0 -149
- package/dist/controllers/SkillLibrary.d.ts.map +0 -1
- package/dist/controllers/SkillLibrary.js +0 -547
- package/dist/controllers/SkillLibrary.js.map +0 -1
- package/dist/controllers/SyncCoordinator.d.ts +0 -120
- package/dist/controllers/SyncCoordinator.d.ts.map +0 -1
- package/dist/controllers/SyncCoordinator.js +0 -441
- package/dist/controllers/SyncCoordinator.js.map +0 -1
- package/dist/controllers/WASMVectorSearch.d.ts +0 -89
- package/dist/controllers/WASMVectorSearch.d.ts.map +0 -1
- package/dist/controllers/WASMVectorSearch.js +0 -234
- package/dist/controllers/WASMVectorSearch.js.map +0 -1
- package/dist/controllers/frontier-index.d.ts +0 -14
- package/dist/controllers/frontier-index.d.ts.map +0 -1
- package/dist/controllers/frontier-index.js +0 -10
- package/dist/controllers/frontier-index.js.map +0 -1
- package/dist/controllers/index.d.ts +0 -30
- package/dist/controllers/index.d.ts.map +0 -1
- package/dist/controllers/index.js +0 -18
- package/dist/controllers/index.js.map +0 -1
- package/dist/db-fallback.d.ts +0 -26
- package/dist/db-fallback.d.ts.map +0 -1
- package/dist/db-fallback.js +0 -264
- package/dist/db-fallback.js.map +0 -1
- package/dist/db-test.d.ts +0 -13
- package/dist/db-test.d.ts.map +0 -1
- package/dist/db-test.js +0 -55
- package/dist/db-test.js.map +0 -1
- package/dist/db-unified.d.ts +0 -76
- package/dist/db-unified.d.ts.map +0 -1
- package/dist/db-unified.js +0 -278
- package/dist/db-unified.js.map +0 -1
- package/dist/examples/quic-sync-example.d.ts +0 -9
- package/dist/examples/quic-sync-example.d.ts.map +0 -1
- package/dist/examples/quic-sync-example.js +0 -169
- package/dist/examples/quic-sync-example.js.map +0 -1
- package/dist/examples/wasm-vector-usage.d.ts +0 -12
- package/dist/examples/wasm-vector-usage.d.ts.map +0 -1
- package/dist/examples/wasm-vector-usage.js +0 -190
- package/dist/examples/wasm-vector-usage.js.map +0 -1
- package/dist/index.d.ts +0 -28
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -35
- package/dist/index.js.map +0 -1
- package/dist/malp/core/ccc.d.ts +0 -99
- package/dist/malp/core/ccc.d.ts.map +0 -1
- package/dist/malp/core/ccc.js +0 -181
- package/dist/malp/core/ccc.js.map +0 -1
- package/dist/malp/core/index.d.ts +0 -9
- package/dist/malp/core/index.d.ts.map +0 -1
- package/dist/malp/core/index.js +0 -9
- package/dist/malp/core/index.js.map +0 -1
- package/dist/malp/core/linalg.d.ts +0 -101
- package/dist/malp/core/linalg.d.ts.map +0 -1
- package/dist/malp/core/linalg.js +0 -278
- package/dist/malp/core/linalg.js.map +0 -1
- package/dist/malp/core/optimizer.d.ts +0 -68
- package/dist/malp/core/optimizer.d.ts.map +0 -1
- package/dist/malp/core/optimizer.js +0 -160
- package/dist/malp/core/optimizer.js.map +0 -1
- package/dist/malp/index.d.ts +0 -33
- package/dist/malp/index.d.ts.map +0 -1
- package/dist/malp/index.js +0 -37
- package/dist/malp/index.js.map +0 -1
- package/dist/malp/metrics/agreement.d.ts +0 -106
- package/dist/malp/metrics/agreement.d.ts.map +0 -1
- package/dist/malp/metrics/agreement.js +0 -199
- package/dist/malp/metrics/agreement.js.map +0 -1
- package/dist/malp/metrics/comparison.d.ts +0 -93
- package/dist/malp/metrics/comparison.d.ts.map +0 -1
- package/dist/malp/metrics/comparison.js +0 -256
- package/dist/malp/metrics/comparison.js.map +0 -1
- package/dist/malp/metrics/index.d.ts +0 -8
- package/dist/malp/metrics/index.d.ts.map +0 -1
- package/dist/malp/metrics/index.js +0 -8
- package/dist/malp/metrics/index.js.map +0 -1
- package/dist/malp/metrics/performance.d.ts +0 -61
- package/dist/malp/metrics/performance.d.ts.map +0 -1
- package/dist/malp/metrics/performance.js +0 -190
- package/dist/malp/metrics/performance.js.map +0 -1
- package/dist/malp/models/index.d.ts +0 -7
- package/dist/malp/models/index.d.ts.map +0 -1
- package/dist/malp/models/index.js +0 -7
- package/dist/malp/models/index.js.map +0 -1
- package/dist/malp/models/malp.d.ts +0 -116
- package/dist/malp/models/malp.d.ts.map +0 -1
- package/dist/malp/models/malp.js +0 -206
- package/dist/malp/models/malp.js.map +0 -1
- package/dist/malp/models/regressor.d.ts +0 -80
- package/dist/malp/models/regressor.d.ts.map +0 -1
- package/dist/malp/models/regressor.js +0 -229
- package/dist/malp/models/regressor.js.map +0 -1
- package/dist/malp/reasoningbank_validator.d.ts +0 -187
- package/dist/malp/reasoningbank_validator.d.ts.map +0 -1
- package/dist/malp/reasoningbank_validator.js +0 -246
- package/dist/malp/reasoningbank_validator.js.map +0 -1
- package/dist/malp/wasm_bindings.d.ts +0 -344
- package/dist/malp/wasm_bindings.d.ts.map +0 -1
- package/dist/malp/wasm_bindings.js +0 -9
- package/dist/malp/wasm_bindings.js.map +0 -1
- package/dist/mcp/agentdb-mcp-server.d.ts +0 -8
- package/dist/mcp/agentdb-mcp-server.d.ts.map +0 -1
- package/dist/mcp/agentdb-mcp-server.js +0 -2116
- package/dist/mcp/agentdb-mcp-server.js.map +0 -1
- package/dist/mcp/learning-tools-handlers.d.ts +0 -16
- package/dist/mcp/learning-tools-handlers.d.ts.map +0 -1
- package/dist/mcp/learning-tools-handlers.js +0 -105
- package/dist/mcp/learning-tools-handlers.js.map +0 -1
- package/dist/optimizations/BatchOperations.d.ts +0 -109
- package/dist/optimizations/BatchOperations.d.ts.map +0 -1
- package/dist/optimizations/BatchOperations.js +0 -407
- package/dist/optimizations/BatchOperations.js.map +0 -1
- package/dist/optimizations/QueryOptimizer.d.ts +0 -83
- package/dist/optimizations/QueryOptimizer.d.ts.map +0 -1
- package/dist/optimizations/QueryOptimizer.js +0 -228
- package/dist/optimizations/QueryOptimizer.js.map +0 -1
- package/dist/optimizations/ToolCache.d.ts +0 -137
- package/dist/optimizations/ToolCache.d.ts.map +0 -1
- package/dist/optimizations/ToolCache.js +0 -281
- package/dist/optimizations/ToolCache.js.map +0 -1
- package/dist/optimizations/index.d.ts +0 -10
- package/dist/optimizations/index.d.ts.map +0 -1
- package/dist/optimizations/index.js +0 -8
- package/dist/optimizations/index.js.map +0 -1
- package/dist/security/input-validation.d.ts +0 -109
- package/dist/security/input-validation.d.ts.map +0 -1
- package/dist/security/input-validation.js +0 -398
- package/dist/security/input-validation.js.map +0 -1
- package/dist/security/limits.d.ts +0 -150
- package/dist/security/limits.d.ts.map +0 -1
- package/dist/security/limits.js +0 -288
- package/dist/security/limits.js.map +0 -1
- package/dist/security/path-security.d.ts +0 -100
- package/dist/security/path-security.d.ts.map +0 -1
- package/dist/security/path-security.js +0 -337
- package/dist/security/path-security.js.map +0 -1
- package/dist/security/validation.d.ts +0 -95
- package/dist/security/validation.d.ts.map +0 -1
- package/dist/security/validation.js +0 -315
- package/dist/security/validation.js.map +0 -1
- package/dist/types/quic.d.ts +0 -518
- package/dist/types/quic.d.ts.map +0 -1
- package/dist/types/quic.js +0 -272
- package/dist/types/quic.js.map +0 -1
|
@@ -1,315 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AgentDB v2 Security Validation
|
|
3
|
-
*
|
|
4
|
-
* Comprehensive input validation for RuVector integration:
|
|
5
|
-
* - Vector dimension and value validation (NaN/Infinity prevention)
|
|
6
|
-
* - ID sanitization (path traversal prevention)
|
|
7
|
-
* - Search options validation (bounds checking)
|
|
8
|
-
* - Cypher query parameter validation (injection prevention)
|
|
9
|
-
* - Metadata sanitization (sensitive data protection)
|
|
10
|
-
*/
|
|
11
|
-
import { ValidationError } from './input-validation.js';
|
|
12
|
-
/**
|
|
13
|
-
* Security limits for AgentDB v2
|
|
14
|
-
*/
|
|
15
|
-
export const SECURITY_LIMITS = {
|
|
16
|
-
MAX_VECTORS: 10_000_000, // 10M vectors max
|
|
17
|
-
MAX_DIMENSION: 4096, // Maximum vector dimension
|
|
18
|
-
MAX_BATCH_SIZE: 10_000, // Batch insert limit
|
|
19
|
-
MAX_K: 10_000, // Search result limit
|
|
20
|
-
QUERY_TIMEOUT_MS: 30_000, // 30s query timeout
|
|
21
|
-
MAX_MEMORY_MB: 16_384, // 16GB memory limit
|
|
22
|
-
MAX_ID_LENGTH: 256, // ID string length
|
|
23
|
-
MAX_METADATA_SIZE: 65_536, // 64KB metadata per vector
|
|
24
|
-
MAX_LABEL_LENGTH: 128, // Graph node label length
|
|
25
|
-
MAX_PROPERTY_KEY_LENGTH: 128, // Property key length
|
|
26
|
-
MAX_CYPHER_PARAMS: 100, // Maximum Cypher parameters
|
|
27
|
-
MIN_DIMENSION: 1, // Minimum vector dimension
|
|
28
|
-
MIN_K: 1, // Minimum search results
|
|
29
|
-
MIN_THRESHOLD: 0.0, // Minimum similarity threshold
|
|
30
|
-
MAX_THRESHOLD: 1.0, // Maximum similarity threshold
|
|
31
|
-
MIN_EF_SEARCH: 1, // Minimum HNSW efSearch
|
|
32
|
-
MAX_EF_SEARCH: 1000, // Maximum HNSW efSearch
|
|
33
|
-
MIN_EF_CONSTRUCTION: 4, // Minimum HNSW efConstruction
|
|
34
|
-
MAX_EF_CONSTRUCTION: 500, // Maximum HNSW efConstruction
|
|
35
|
-
MAX_M: 64, // Maximum HNSW M parameter
|
|
36
|
-
MIN_M: 2, // Minimum HNSW M parameter
|
|
37
|
-
};
|
|
38
|
-
/**
|
|
39
|
-
* Validate vector embedding data
|
|
40
|
-
* Prevents NaN, Infinity, and dimension mismatches
|
|
41
|
-
*/
|
|
42
|
-
export function validateVector(embedding, expectedDim, fieldName = 'vector') {
|
|
43
|
-
// Validate dimension bounds
|
|
44
|
-
if (expectedDim < SECURITY_LIMITS.MIN_DIMENSION || expectedDim > SECURITY_LIMITS.MAX_DIMENSION) {
|
|
45
|
-
throw new ValidationError(`Invalid expected dimension: ${expectedDim} (must be between ${SECURITY_LIMITS.MIN_DIMENSION} and ${SECURITY_LIMITS.MAX_DIMENSION})`, 'INVALID_DIMENSION', fieldName);
|
|
46
|
-
}
|
|
47
|
-
// Check if embedding exists
|
|
48
|
-
if (!embedding) {
|
|
49
|
-
throw new ValidationError(`${fieldName} is required`, 'MISSING_VECTOR', fieldName);
|
|
50
|
-
}
|
|
51
|
-
// Validate dimension match
|
|
52
|
-
if (embedding.length !== expectedDim) {
|
|
53
|
-
throw new ValidationError(`Invalid ${fieldName} dimension: expected ${expectedDim}, got ${embedding.length}`, 'DIMENSION_MISMATCH', fieldName);
|
|
54
|
-
}
|
|
55
|
-
// Validate each value for NaN and Infinity
|
|
56
|
-
for (let i = 0; i < embedding.length; i++) {
|
|
57
|
-
const value = embedding[i];
|
|
58
|
-
if (!Number.isFinite(value)) {
|
|
59
|
-
throw new ValidationError(`Invalid value in ${fieldName} at index ${i}: ${value} (NaN or Infinity not allowed)`, 'INVALID_VECTOR_VALUE', `${fieldName}[${i}]`);
|
|
60
|
-
}
|
|
61
|
-
// Optional: Check for extreme values that might indicate errors
|
|
62
|
-
if (Math.abs(value) > 1e10) {
|
|
63
|
-
throw new ValidationError(`Extreme value in ${fieldName} at index ${i}: ${value} (magnitude too large)`, 'EXTREME_VECTOR_VALUE', `${fieldName}[${i}]`);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Validate vector ID
|
|
69
|
-
* Prevents path traversal, excessive length, and malicious characters
|
|
70
|
-
*/
|
|
71
|
-
export function validateVectorId(id, fieldName = 'id') {
|
|
72
|
-
if (typeof id !== 'string') {
|
|
73
|
-
throw new ValidationError(`${fieldName} must be a string`, 'INVALID_ID_TYPE', fieldName);
|
|
74
|
-
}
|
|
75
|
-
if (id.length === 0) {
|
|
76
|
-
throw new ValidationError(`${fieldName} cannot be empty`, 'EMPTY_ID', fieldName);
|
|
77
|
-
}
|
|
78
|
-
if (id.length > SECURITY_LIMITS.MAX_ID_LENGTH) {
|
|
79
|
-
throw new ValidationError(`${fieldName} exceeds maximum length (${SECURITY_LIMITS.MAX_ID_LENGTH} chars)`, 'ID_TOO_LONG', fieldName);
|
|
80
|
-
}
|
|
81
|
-
// Prevent path traversal attacks
|
|
82
|
-
if (id.includes('..') || id.includes('/') || id.includes('\\')) {
|
|
83
|
-
throw new ValidationError(`${fieldName} contains invalid path characters (., /, \\)`, 'PATH_TRAVERSAL_ATTEMPT', fieldName);
|
|
84
|
-
}
|
|
85
|
-
// Prevent null bytes and control characters
|
|
86
|
-
if (/[\x00-\x1F\x7F]/.test(id)) {
|
|
87
|
-
throw new ValidationError(`${fieldName} contains control characters`, 'INVALID_CHARACTERS', fieldName);
|
|
88
|
-
}
|
|
89
|
-
// Prevent potential Cypher injection via IDs used in graph queries
|
|
90
|
-
const cypherDangerousChars = /['"`;{}[\]()]/;
|
|
91
|
-
if (cypherDangerousChars.test(id)) {
|
|
92
|
-
throw new ValidationError(`${fieldName} contains potentially dangerous characters for graph queries`, 'DANGEROUS_ID_CHARACTERS', fieldName);
|
|
93
|
-
}
|
|
94
|
-
return id;
|
|
95
|
-
}
|
|
96
|
-
export function validateSearchOptions(options) {
|
|
97
|
-
const validated = {};
|
|
98
|
-
// Validate k parameter
|
|
99
|
-
if (options.k !== undefined) {
|
|
100
|
-
if (!Number.isInteger(options.k)) {
|
|
101
|
-
throw new ValidationError('k must be an integer', 'INVALID_K_TYPE', 'k');
|
|
102
|
-
}
|
|
103
|
-
if (options.k < SECURITY_LIMITS.MIN_K || options.k > SECURITY_LIMITS.MAX_K) {
|
|
104
|
-
throw new ValidationError(`k must be between ${SECURITY_LIMITS.MIN_K} and ${SECURITY_LIMITS.MAX_K}`, 'K_OUT_OF_BOUNDS', 'k');
|
|
105
|
-
}
|
|
106
|
-
validated.k = options.k;
|
|
107
|
-
}
|
|
108
|
-
// Validate threshold parameter
|
|
109
|
-
if (options.threshold !== undefined) {
|
|
110
|
-
if (typeof options.threshold !== 'number') {
|
|
111
|
-
throw new ValidationError('threshold must be a number', 'INVALID_THRESHOLD_TYPE', 'threshold');
|
|
112
|
-
}
|
|
113
|
-
if (!Number.isFinite(options.threshold)) {
|
|
114
|
-
throw new ValidationError('threshold must be a finite number', 'THRESHOLD_NOT_FINITE', 'threshold');
|
|
115
|
-
}
|
|
116
|
-
if (options.threshold < SECURITY_LIMITS.MIN_THRESHOLD ||
|
|
117
|
-
options.threshold > SECURITY_LIMITS.MAX_THRESHOLD) {
|
|
118
|
-
throw new ValidationError(`threshold must be between ${SECURITY_LIMITS.MIN_THRESHOLD} and ${SECURITY_LIMITS.MAX_THRESHOLD}`, 'THRESHOLD_OUT_OF_BOUNDS', 'threshold');
|
|
119
|
-
}
|
|
120
|
-
validated.threshold = options.threshold;
|
|
121
|
-
}
|
|
122
|
-
// Validate efSearch parameter (HNSW specific)
|
|
123
|
-
if (options.efSearch !== undefined) {
|
|
124
|
-
if (!Number.isInteger(options.efSearch)) {
|
|
125
|
-
throw new ValidationError('efSearch must be an integer', 'INVALID_EFSEARCH_TYPE', 'efSearch');
|
|
126
|
-
}
|
|
127
|
-
if (options.efSearch < SECURITY_LIMITS.MIN_EF_SEARCH ||
|
|
128
|
-
options.efSearch > SECURITY_LIMITS.MAX_EF_SEARCH) {
|
|
129
|
-
throw new ValidationError(`efSearch must be between ${SECURITY_LIMITS.MIN_EF_SEARCH} and ${SECURITY_LIMITS.MAX_EF_SEARCH}`, 'EFSEARCH_OUT_OF_BOUNDS', 'efSearch');
|
|
130
|
-
}
|
|
131
|
-
validated.efSearch = options.efSearch;
|
|
132
|
-
}
|
|
133
|
-
// Validate filter object
|
|
134
|
-
if (options.filter !== undefined) {
|
|
135
|
-
if (typeof options.filter !== 'object' || options.filter === null) {
|
|
136
|
-
throw new ValidationError('filter must be an object', 'INVALID_FILTER_TYPE', 'filter');
|
|
137
|
-
}
|
|
138
|
-
validated.filter = sanitizeMetadata(options.filter);
|
|
139
|
-
}
|
|
140
|
-
// Copy boolean flags
|
|
141
|
-
if (options.includeMetadata !== undefined) {
|
|
142
|
-
validated.includeMetadata = Boolean(options.includeMetadata);
|
|
143
|
-
}
|
|
144
|
-
if (options.includeVectors !== undefined) {
|
|
145
|
-
validated.includeVectors = Boolean(options.includeVectors);
|
|
146
|
-
}
|
|
147
|
-
return validated;
|
|
148
|
-
}
|
|
149
|
-
export function validateHNSWParams(params) {
|
|
150
|
-
const validated = {};
|
|
151
|
-
if (params.M !== undefined) {
|
|
152
|
-
if (!Number.isInteger(params.M)) {
|
|
153
|
-
throw new ValidationError('M must be an integer', 'INVALID_M_TYPE', 'M');
|
|
154
|
-
}
|
|
155
|
-
if (params.M < SECURITY_LIMITS.MIN_M || params.M > SECURITY_LIMITS.MAX_M) {
|
|
156
|
-
throw new ValidationError(`M must be between ${SECURITY_LIMITS.MIN_M} and ${SECURITY_LIMITS.MAX_M}`, 'M_OUT_OF_BOUNDS', 'M');
|
|
157
|
-
}
|
|
158
|
-
validated.M = params.M;
|
|
159
|
-
}
|
|
160
|
-
if (params.efConstruction !== undefined) {
|
|
161
|
-
if (!Number.isInteger(params.efConstruction)) {
|
|
162
|
-
throw new ValidationError('efConstruction must be an integer', 'INVALID_EFCONSTRUCTION_TYPE', 'efConstruction');
|
|
163
|
-
}
|
|
164
|
-
if (params.efConstruction < SECURITY_LIMITS.MIN_EF_CONSTRUCTION ||
|
|
165
|
-
params.efConstruction > SECURITY_LIMITS.MAX_EF_CONSTRUCTION) {
|
|
166
|
-
throw new ValidationError(`efConstruction must be between ${SECURITY_LIMITS.MIN_EF_CONSTRUCTION} and ${SECURITY_LIMITS.MAX_EF_CONSTRUCTION}`, 'EFCONSTRUCTION_OUT_OF_BOUNDS', 'efConstruction');
|
|
167
|
-
}
|
|
168
|
-
validated.efConstruction = params.efConstruction;
|
|
169
|
-
}
|
|
170
|
-
if (params.efSearch !== undefined) {
|
|
171
|
-
const searchOpts = validateSearchOptions({ efSearch: params.efSearch });
|
|
172
|
-
validated.efSearch = searchOpts.efSearch;
|
|
173
|
-
}
|
|
174
|
-
return validated;
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* Sanitize metadata to prevent sensitive data exposure
|
|
178
|
-
* Removes fields that commonly contain secrets or PII
|
|
179
|
-
*/
|
|
180
|
-
export function sanitizeMetadata(metadata) {
|
|
181
|
-
if (!metadata || typeof metadata !== 'object') {
|
|
182
|
-
return {};
|
|
183
|
-
}
|
|
184
|
-
const sanitized = { ...metadata };
|
|
185
|
-
// List of sensitive field names (case-insensitive)
|
|
186
|
-
const sensitivePatterns = [
|
|
187
|
-
/password/i,
|
|
188
|
-
/secret/i,
|
|
189
|
-
/token/i,
|
|
190
|
-
/key/i,
|
|
191
|
-
/credential/i,
|
|
192
|
-
/api[_-]?key/i,
|
|
193
|
-
/auth/i,
|
|
194
|
-
/private/i,
|
|
195
|
-
/ssn/i,
|
|
196
|
-
/social[_-]?security/i,
|
|
197
|
-
/credit[_-]?card/i,
|
|
198
|
-
/card[_-]?number/i,
|
|
199
|
-
/cvv/i,
|
|
200
|
-
/pin/i,
|
|
201
|
-
];
|
|
202
|
-
// Check metadata size
|
|
203
|
-
const metadataStr = JSON.stringify(metadata);
|
|
204
|
-
if (metadataStr.length > SECURITY_LIMITS.MAX_METADATA_SIZE) {
|
|
205
|
-
throw new ValidationError(`Metadata exceeds maximum size (${SECURITY_LIMITS.MAX_METADATA_SIZE} bytes)`, 'METADATA_TOO_LARGE', 'metadata');
|
|
206
|
-
}
|
|
207
|
-
// Remove sensitive fields
|
|
208
|
-
for (const key of Object.keys(sanitized)) {
|
|
209
|
-
if (sensitivePatterns.some(pattern => pattern.test(key))) {
|
|
210
|
-
delete sanitized[key];
|
|
211
|
-
console.warn(`[Security] Removed potentially sensitive metadata field: ${key}`);
|
|
212
|
-
}
|
|
213
|
-
// Validate property key length
|
|
214
|
-
if (key.length > SECURITY_LIMITS.MAX_PROPERTY_KEY_LENGTH) {
|
|
215
|
-
throw new ValidationError(`Metadata property key exceeds maximum length: ${key.substring(0, 50)}...`, 'PROPERTY_KEY_TOO_LONG', 'metadata');
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
return sanitized;
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* Validate Cypher query parameters for graph operations
|
|
222
|
-
* Prevents Cypher injection attacks
|
|
223
|
-
*/
|
|
224
|
-
export function validateCypherParams(params) {
|
|
225
|
-
if (!params || typeof params !== 'object') {
|
|
226
|
-
return {};
|
|
227
|
-
}
|
|
228
|
-
if (Object.keys(params).length > SECURITY_LIMITS.MAX_CYPHER_PARAMS) {
|
|
229
|
-
throw new ValidationError(`Too many Cypher parameters (max ${SECURITY_LIMITS.MAX_CYPHER_PARAMS})`, 'TOO_MANY_PARAMS', 'cypherParams');
|
|
230
|
-
}
|
|
231
|
-
const validated = {};
|
|
232
|
-
for (const [key, value] of Object.entries(params)) {
|
|
233
|
-
// Validate parameter key format (must be alphanumeric + underscore)
|
|
234
|
-
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key)) {
|
|
235
|
-
throw new ValidationError(`Invalid Cypher parameter name: ${key} (must be alphanumeric with underscores)`, 'INVALID_PARAM_NAME', key);
|
|
236
|
-
}
|
|
237
|
-
// Validate string values aren't suspiciously long
|
|
238
|
-
if (typeof value === 'string' && value.length > 10000) {
|
|
239
|
-
throw new ValidationError(`Cypher parameter value too long: ${key}`, 'PARAM_VALUE_TOO_LONG', key);
|
|
240
|
-
}
|
|
241
|
-
// Prevent null bytes in string parameters
|
|
242
|
-
if (typeof value === 'string' && value.includes('\x00')) {
|
|
243
|
-
throw new ValidationError(`Cypher parameter contains null bytes: ${key}`, 'NULL_BYTE_IN_PARAM', key);
|
|
244
|
-
}
|
|
245
|
-
validated[key] = value;
|
|
246
|
-
}
|
|
247
|
-
return validated;
|
|
248
|
-
}
|
|
249
|
-
/**
|
|
250
|
-
* Validate graph node label
|
|
251
|
-
*/
|
|
252
|
-
export function validateLabel(label) {
|
|
253
|
-
if (typeof label !== 'string') {
|
|
254
|
-
throw new ValidationError('Label must be a string', 'INVALID_LABEL_TYPE', 'label');
|
|
255
|
-
}
|
|
256
|
-
if (label.length === 0) {
|
|
257
|
-
throw new ValidationError('Label cannot be empty', 'EMPTY_LABEL', 'label');
|
|
258
|
-
}
|
|
259
|
-
if (label.length > SECURITY_LIMITS.MAX_LABEL_LENGTH) {
|
|
260
|
-
throw new ValidationError(`Label exceeds maximum length (${SECURITY_LIMITS.MAX_LABEL_LENGTH} chars)`, 'LABEL_TOO_LONG', 'label');
|
|
261
|
-
}
|
|
262
|
-
// Label must be alphanumeric + underscore (Cypher safe)
|
|
263
|
-
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(label)) {
|
|
264
|
-
throw new ValidationError('Label must be alphanumeric with underscores, starting with letter or underscore', 'INVALID_LABEL_FORMAT', 'label');
|
|
265
|
-
}
|
|
266
|
-
return label;
|
|
267
|
-
}
|
|
268
|
-
/**
|
|
269
|
-
* Validate batch size for bulk operations
|
|
270
|
-
*/
|
|
271
|
-
export function validateBatchSize(batchSize) {
|
|
272
|
-
if (!Number.isInteger(batchSize)) {
|
|
273
|
-
throw new ValidationError('Batch size must be an integer', 'INVALID_BATCH_SIZE_TYPE', 'batchSize');
|
|
274
|
-
}
|
|
275
|
-
if (batchSize < 1 || batchSize > SECURITY_LIMITS.MAX_BATCH_SIZE) {
|
|
276
|
-
throw new ValidationError(`Batch size must be between 1 and ${SECURITY_LIMITS.MAX_BATCH_SIZE}`, 'BATCH_SIZE_OUT_OF_BOUNDS', 'batchSize');
|
|
277
|
-
}
|
|
278
|
-
return batchSize;
|
|
279
|
-
}
|
|
280
|
-
/**
|
|
281
|
-
* Validate vector count doesn't exceed limits
|
|
282
|
-
*/
|
|
283
|
-
export function validateVectorCount(count) {
|
|
284
|
-
if (count > SECURITY_LIMITS.MAX_VECTORS) {
|
|
285
|
-
throw new ValidationError(`Vector count exceeds maximum (${SECURITY_LIMITS.MAX_VECTORS})`, 'TOO_MANY_VECTORS', 'vectorCount');
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
/**
|
|
289
|
-
* Safe logging that doesn't expose vectors or sensitive data
|
|
290
|
-
*/
|
|
291
|
-
export function safeLog(message, data) {
|
|
292
|
-
if (!data) {
|
|
293
|
-
console.log(message);
|
|
294
|
-
return;
|
|
295
|
-
}
|
|
296
|
-
if (typeof data === 'object') {
|
|
297
|
-
const safe = { ...data };
|
|
298
|
-
// Remove sensitive fields
|
|
299
|
-
delete safe.embedding;
|
|
300
|
-
delete safe.vector;
|
|
301
|
-
delete safe.metadata;
|
|
302
|
-
delete safe.password;
|
|
303
|
-
delete safe.token;
|
|
304
|
-
delete safe.apiKey;
|
|
305
|
-
// Truncate IDs if they're arrays
|
|
306
|
-
if (Array.isArray(safe.ids) && safe.ids.length > 5) {
|
|
307
|
-
safe.ids = `[${safe.ids.length} IDs...]`;
|
|
308
|
-
}
|
|
309
|
-
console.log(message, safe);
|
|
310
|
-
}
|
|
311
|
-
else {
|
|
312
|
-
console.log(message, data);
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
//# sourceMappingURL=validation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/security/validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,WAAW,EAAE,UAAU,EAAS,kBAAkB;IAClD,aAAa,EAAE,IAAI,EAAa,2BAA2B;IAC3D,cAAc,EAAE,MAAM,EAAU,qBAAqB;IACrD,KAAK,EAAE,MAAM,EAAmB,sBAAsB;IACtD,gBAAgB,EAAE,MAAM,EAAQ,oBAAoB;IACpD,aAAa,EAAE,MAAM,EAAW,oBAAoB;IACpD,aAAa,EAAE,GAAG,EAAc,mBAAmB;IACnD,iBAAiB,EAAE,MAAM,EAAO,2BAA2B;IAC3D,gBAAgB,EAAE,GAAG,EAAW,0BAA0B;IAC1D,uBAAuB,EAAE,GAAG,EAAI,sBAAsB;IACtD,iBAAiB,EAAE,GAAG,EAAU,4BAA4B;IAC5D,aAAa,EAAE,CAAC,EAAgB,2BAA2B;IAC3D,KAAK,EAAE,CAAC,EAAwB,yBAAyB;IACzD,aAAa,EAAE,GAAG,EAAc,+BAA+B;IAC/D,aAAa,EAAE,GAAG,EAAc,+BAA+B;IAC/D,aAAa,EAAE,CAAC,EAAgB,wBAAwB;IACxD,aAAa,EAAE,IAAI,EAAa,wBAAwB;IACxD,mBAAmB,EAAE,CAAC,EAAU,8BAA8B;IAC9D,mBAAmB,EAAE,GAAG,EAAQ,8BAA8B;IAC9D,KAAK,EAAE,EAAE,EAAuB,2BAA2B;IAC3D,KAAK,EAAE,CAAC,EAAwB,2BAA2B;CACnD,CAAC;AAEX;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,SAAkC,EAClC,WAAmB,EACnB,YAAoB,QAAQ;IAE5B,4BAA4B;IAC5B,IAAI,WAAW,GAAG,eAAe,CAAC,aAAa,IAAI,WAAW,GAAG,eAAe,CAAC,aAAa,EAAE,CAAC;QAC/F,MAAM,IAAI,eAAe,CACvB,+BAA+B,WAAW,qBAAqB,eAAe,CAAC,aAAa,QAAQ,eAAe,CAAC,aAAa,GAAG,EACpI,mBAAmB,EACnB,SAAS,CACV,CAAC;IACJ,CAAC;IAED,4BAA4B;IAC5B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,eAAe,CACvB,GAAG,SAAS,cAAc,EAC1B,gBAAgB,EAChB,SAAS,CACV,CAAC;IACJ,CAAC;IAED,2BAA2B;IAC3B,IAAI,SAAS,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACrC,MAAM,IAAI,eAAe,CACvB,WAAW,SAAS,wBAAwB,WAAW,SAAS,SAAS,CAAC,MAAM,EAAE,EAClF,oBAAoB,EACpB,SAAS,CACV,CAAC;IACJ,CAAC;IAED,2CAA2C;IAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAE3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,eAAe,CACvB,oBAAoB,SAAS,aAAa,CAAC,KAAK,KAAK,gCAAgC,EACrF,sBAAsB,EACtB,GAAG,SAAS,IAAI,CAAC,GAAG,CACrB,CAAC;QACJ,CAAC;QAED,gEAAgE;QAChE,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC;YAC3B,MAAM,IAAI,eAAe,CACvB,oBAAoB,SAAS,aAAa,CAAC,KAAK,KAAK,wBAAwB,EAC7E,sBAAsB,EACtB,GAAG,SAAS,IAAI,CAAC,GAAG,CACrB,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAU,EAAE,YAAoB,IAAI;IACnE,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,eAAe,CACvB,GAAG,SAAS,mBAAmB,EAC/B,iBAAiB,EACjB,SAAS,CACV,CAAC;IACJ,CAAC;IAED,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,eAAe,CACvB,GAAG,SAAS,kBAAkB,EAC9B,UAAU,EACV,SAAS,CACV,CAAC;IACJ,CAAC;IAED,IAAI,EAAE,CAAC,MAAM,GAAG,eAAe,CAAC,aAAa,EAAE,CAAC;QAC9C,MAAM,IAAI,eAAe,CACvB,GAAG,SAAS,4BAA4B,eAAe,CAAC,aAAa,SAAS,EAC9E,aAAa,EACb,SAAS,CACV,CAAC;IACJ,CAAC;IAED,iCAAiC;IACjC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,eAAe,CACvB,GAAG,SAAS,8CAA8C,EAC1D,wBAAwB,EACxB,SAAS,CACV,CAAC;IACJ,CAAC;IAED,4CAA4C;IAC5C,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,eAAe,CACvB,GAAG,SAAS,8BAA8B,EAC1C,oBAAoB,EACpB,SAAS,CACV,CAAC;IACJ,CAAC;IAED,mEAAmE;IACnE,MAAM,oBAAoB,GAAG,eAAe,CAAC;IAC7C,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,eAAe,CACvB,GAAG,SAAS,8DAA8D,EAC1E,yBAAyB,EACzB,SAAS,CACV,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAeD,MAAM,UAAU,qBAAqB,CAAC,OAAsB;IAC1D,MAAM,SAAS,GAAkB,EAAE,CAAC;IAEpC,uBAAuB;IACvB,IAAI,OAAO,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,eAAe,CACvB,sBAAsB,EACtB,gBAAgB,EAChB,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,EAAE,CAAC;YAC3E,MAAM,IAAI,eAAe,CACvB,qBAAqB,eAAe,CAAC,KAAK,QAAQ,eAAe,CAAC,KAAK,EAAE,EACzE,iBAAiB,EACjB,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,SAAS,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED,+BAA+B;IAC/B,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACpC,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,eAAe,CACvB,4BAA4B,EAC5B,wBAAwB,EACxB,WAAW,CACZ,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,eAAe,CACvB,mCAAmC,EACnC,sBAAsB,EACtB,WAAW,CACZ,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,CAAC,SAAS,GAAG,eAAe,CAAC,aAAa;YACjD,OAAO,CAAC,SAAS,GAAG,eAAe,CAAC,aAAa,EAAE,CAAC;YACtD,MAAM,IAAI,eAAe,CACvB,6BAA6B,eAAe,CAAC,aAAa,QAAQ,eAAe,CAAC,aAAa,EAAE,EACjG,yBAAyB,EACzB,WAAW,CACZ,CAAC;QACJ,CAAC;QAED,SAAS,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAC1C,CAAC;IAED,8CAA8C;IAC9C,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,eAAe,CACvB,6BAA6B,EAC7B,uBAAuB,EACvB,UAAU,CACX,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,GAAG,eAAe,CAAC,aAAa;YAChD,OAAO,CAAC,QAAQ,GAAG,eAAe,CAAC,aAAa,EAAE,CAAC;YACrD,MAAM,IAAI,eAAe,CACvB,4BAA4B,eAAe,CAAC,aAAa,QAAQ,eAAe,CAAC,aAAa,EAAE,EAChG,wBAAwB,EACxB,UAAU,CACX,CAAC;QACJ,CAAC;QAED,SAAS,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IACxC,CAAC;IAED,yBAAyB;IACzB,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YAClE,MAAM,IAAI,eAAe,CACvB,0BAA0B,EAC1B,qBAAqB,EACrB,QAAQ,CACT,CAAC;QACJ,CAAC;QAED,SAAS,CAAC,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;IAED,qBAAqB;IACrB,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QAC1C,SAAS,CAAC,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACzC,SAAS,CAAC,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAWD,MAAM,UAAU,kBAAkB,CAAC,MAAkB;IACnD,MAAM,SAAS,GAAe,EAAE,CAAC;IAEjC,IAAI,MAAM,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,eAAe,CACvB,sBAAsB,EACtB,gBAAgB,EAChB,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,EAAE,CAAC;YACzE,MAAM,IAAI,eAAe,CACvB,qBAAqB,eAAe,CAAC,KAAK,QAAQ,eAAe,CAAC,KAAK,EAAE,EACzE,iBAAiB,EACjB,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,eAAe,CACvB,mCAAmC,EACnC,6BAA6B,EAC7B,gBAAgB,CACjB,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,cAAc,GAAG,eAAe,CAAC,mBAAmB;YAC3D,MAAM,CAAC,cAAc,GAAG,eAAe,CAAC,mBAAmB,EAAE,CAAC;YAChE,MAAM,IAAI,eAAe,CACvB,kCAAkC,eAAe,CAAC,mBAAmB,QAAQ,eAAe,CAAC,mBAAmB,EAAE,EAClH,8BAA8B,EAC9B,gBAAgB,CACjB,CAAC;QACJ,CAAC;QAED,SAAS,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;IACnD,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,qBAAqB,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxE,SAAS,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;IAC3C,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAA6B;IAE7B,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC9C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,SAAS,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;IAElC,mDAAmD;IACnD,MAAM,iBAAiB,GAAG;QACxB,WAAW;QACX,SAAS;QACT,QAAQ;QACR,MAAM;QACN,aAAa;QACb,cAAc;QACd,OAAO;QACP,UAAU;QACV,MAAM;QACN,sBAAsB;QACtB,kBAAkB;QAClB,kBAAkB;QAClB,MAAM;QACN,MAAM;KACP,CAAC;IAEF,sBAAsB;IACtB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,WAAW,CAAC,MAAM,GAAG,eAAe,CAAC,iBAAiB,EAAE,CAAC;QAC3D,MAAM,IAAI,eAAe,CACvB,kCAAkC,eAAe,CAAC,iBAAiB,SAAS,EAC5E,oBAAoB,EACpB,UAAU,CACX,CAAC;IACJ,CAAC;IAED,0BAA0B;IAC1B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACzC,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACzD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,4DAA4D,GAAG,EAAE,CAAC,CAAC;QAClF,CAAC;QAED,+BAA+B;QAC/B,IAAI,GAAG,CAAC,MAAM,GAAG,eAAe,CAAC,uBAAuB,EAAE,CAAC;YACzD,MAAM,IAAI,eAAe,CACvB,iDAAiD,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,EAC1E,uBAAuB,EACvB,UAAU,CACX,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAA2B;IAE3B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,eAAe,CAAC,iBAAiB,EAAE,CAAC;QACnE,MAAM,IAAI,eAAe,CACvB,mCAAmC,eAAe,CAAC,iBAAiB,GAAG,EACvE,iBAAiB,EACjB,cAAc,CACf,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAwB,EAAE,CAAC;IAE1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,oEAAoE;QACpE,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,eAAe,CACvB,kCAAkC,GAAG,0CAA0C,EAC/E,oBAAoB,EACpB,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,kDAAkD;QAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;YACtD,MAAM,IAAI,eAAe,CACvB,oCAAoC,GAAG,EAAE,EACzC,sBAAsB,EACtB,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,0CAA0C;QAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,eAAe,CACvB,yCAAyC,GAAG,EAAE,EAC9C,oBAAoB,EACpB,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,eAAe,CACvB,wBAAwB,EACxB,oBAAoB,EACpB,OAAO,CACR,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,eAAe,CACvB,uBAAuB,EACvB,aAAa,EACb,OAAO,CACR,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,GAAG,eAAe,CAAC,gBAAgB,EAAE,CAAC;QACpD,MAAM,IAAI,eAAe,CACvB,iCAAiC,eAAe,CAAC,gBAAgB,SAAS,EAC1E,gBAAgB,EAChB,OAAO,CACR,CAAC;IACJ,CAAC;IAED,wDAAwD;IACxD,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,eAAe,CACvB,iFAAiF,EACjF,sBAAsB,EACtB,OAAO,CACR,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,eAAe,CACvB,+BAA+B,EAC/B,yBAAyB,EACzB,WAAW,CACZ,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,GAAG,eAAe,CAAC,cAAc,EAAE,CAAC;QAChE,MAAM,IAAI,eAAe,CACvB,oCAAoC,eAAe,CAAC,cAAc,EAAE,EACpE,0BAA0B,EAC1B,WAAW,CACZ,CAAC;IACJ,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,IAAI,KAAK,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,IAAI,eAAe,CACvB,iCAAiC,eAAe,CAAC,WAAW,GAAG,EAC/D,kBAAkB,EAClB,aAAa,CACd,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,OAAe,EAAE,IAAU;IACjD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;QAEzB,0BAA0B;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC;QAEnB,iCAAiC;QACjC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,UAAU,CAAC;QAC3C,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC"}
|