agentdb 2.0.0-alpha.2 → 2.0.0-alpha.2.2

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.
Files changed (317) hide show
  1. package/dist/agentdb.min.js +4 -4
  2. package/dist/simulation/cli.js +0 -0
  3. package/dist/src/cli/agentdb-cli.d.ts.map +1 -1
  4. package/dist/src/cli/agentdb-cli.js +78 -0
  5. package/dist/src/cli/agentdb-cli.js.map +1 -1
  6. package/dist/src/cli/commands/init.js +3 -3
  7. package/dist/src/cli/commands/init.js.map +1 -1
  8. package/package.json +3 -3
  9. package/src/cli/agentdb-cli.ts +78 -0
  10. package/src/cli/commands/init.ts +3 -3
  11. package/dist/agentdb-advanced.js +0 -2110
  12. package/dist/agentdb-advanced.min.js +0 -1
  13. package/dist/backends/GraphBackend.d.ts +0 -196
  14. package/dist/backends/GraphBackend.d.ts.map +0 -1
  15. package/dist/backends/GraphBackend.js +0 -33
  16. package/dist/backends/GraphBackend.js.map +0 -1
  17. package/dist/backends/LearningBackend.d.ts +0 -148
  18. package/dist/backends/LearningBackend.d.ts.map +0 -1
  19. package/dist/backends/LearningBackend.js +0 -27
  20. package/dist/backends/LearningBackend.js.map +0 -1
  21. package/dist/backends/VectorBackend.d.ts +0 -119
  22. package/dist/backends/VectorBackend.d.ts.map +0 -1
  23. package/dist/backends/VectorBackend.js +0 -14
  24. package/dist/backends/VectorBackend.js.map +0 -1
  25. package/dist/backends/detector.d.ts +0 -81
  26. package/dist/backends/detector.d.ts.map +0 -1
  27. package/dist/backends/detector.js +0 -192
  28. package/dist/backends/detector.js.map +0 -1
  29. package/dist/backends/factory.d.ts +0 -50
  30. package/dist/backends/factory.d.ts.map +0 -1
  31. package/dist/backends/factory.js +0 -161
  32. package/dist/backends/factory.js.map +0 -1
  33. package/dist/backends/graph/GraphDatabaseAdapter.d.ts +0 -139
  34. package/dist/backends/graph/GraphDatabaseAdapter.d.ts.map +0 -1
  35. package/dist/backends/graph/GraphDatabaseAdapter.js +0 -194
  36. package/dist/backends/graph/GraphDatabaseAdapter.js.map +0 -1
  37. package/dist/backends/hnswlib/HNSWLibBackend.d.ts +0 -92
  38. package/dist/backends/hnswlib/HNSWLibBackend.d.ts.map +0 -1
  39. package/dist/backends/hnswlib/HNSWLibBackend.js +0 -316
  40. package/dist/backends/hnswlib/HNSWLibBackend.js.map +0 -1
  41. package/dist/backends/hnswlib/index.d.ts +0 -7
  42. package/dist/backends/hnswlib/index.d.ts.map +0 -1
  43. package/dist/backends/hnswlib/index.js +0 -7
  44. package/dist/backends/hnswlib/index.js.map +0 -1
  45. package/dist/backends/index.d.ts +0 -14
  46. package/dist/backends/index.d.ts.map +0 -1
  47. package/dist/backends/index.js +0 -13
  48. package/dist/backends/index.js.map +0 -1
  49. package/dist/backends/ruvector/RuVectorBackend.d.ts +0 -75
  50. package/dist/backends/ruvector/RuVectorBackend.d.ts.map +0 -1
  51. package/dist/backends/ruvector/RuVectorBackend.js +0 -198
  52. package/dist/backends/ruvector/RuVectorBackend.js.map +0 -1
  53. package/dist/backends/ruvector/RuVectorLearning.d.ts +0 -104
  54. package/dist/backends/ruvector/RuVectorLearning.d.ts.map +0 -1
  55. package/dist/backends/ruvector/RuVectorLearning.js +0 -177
  56. package/dist/backends/ruvector/RuVectorLearning.js.map +0 -1
  57. package/dist/backends/ruvector/index.d.ts +0 -9
  58. package/dist/backends/ruvector/index.d.ts.map +0 -1
  59. package/dist/backends/ruvector/index.js +0 -8
  60. package/dist/backends/ruvector/index.js.map +0 -1
  61. package/dist/benchmarks/wasm-vector-benchmark.d.ts +0 -10
  62. package/dist/benchmarks/wasm-vector-benchmark.d.ts.map +0 -1
  63. package/dist/benchmarks/wasm-vector-benchmark.js +0 -196
  64. package/dist/benchmarks/wasm-vector-benchmark.js.map +0 -1
  65. package/dist/browser/AdvancedFeatures.d.ts +0 -144
  66. package/dist/browser/AdvancedFeatures.d.ts.map +0 -1
  67. package/dist/browser/AdvancedFeatures.js +0 -430
  68. package/dist/browser/AdvancedFeatures.js.map +0 -1
  69. package/dist/browser/HNSWIndex.d.ts +0 -117
  70. package/dist/browser/HNSWIndex.d.ts.map +0 -1
  71. package/dist/browser/HNSWIndex.js +0 -402
  72. package/dist/browser/HNSWIndex.js.map +0 -1
  73. package/dist/browser/ProductQuantization.d.ts +0 -107
  74. package/dist/browser/ProductQuantization.d.ts.map +0 -1
  75. package/dist/browser/ProductQuantization.js +0 -337
  76. package/dist/browser/ProductQuantization.js.map +0 -1
  77. package/dist/browser/browser/AdvancedFeatures.d.ts +0 -144
  78. package/dist/browser/browser/AdvancedFeatures.d.ts.map +0 -1
  79. package/dist/browser/browser/AdvancedFeatures.js +0 -427
  80. package/dist/browser/browser/HNSWIndex.d.ts +0 -117
  81. package/dist/browser/browser/HNSWIndex.d.ts.map +0 -1
  82. package/dist/browser/browser/HNSWIndex.js +0 -402
  83. package/dist/browser/browser/ProductQuantization.d.ts +0 -107
  84. package/dist/browser/browser/ProductQuantization.d.ts.map +0 -1
  85. package/dist/browser/browser/ProductQuantization.js +0 -348
  86. package/dist/browser/browser/index.d.ts +0 -223
  87. package/dist/browser/browser/index.d.ts.map +0 -1
  88. package/dist/browser/browser/index.js +0 -233
  89. package/dist/browser/index.d.ts +0 -223
  90. package/dist/browser/index.d.ts.map +0 -1
  91. package/dist/browser/index.js +0 -225
  92. package/dist/browser/index.js.map +0 -1
  93. package/dist/cli/agentdb-cli.d.ts +0 -154
  94. package/dist/cli/agentdb-cli.d.ts.map +0 -1
  95. package/dist/cli/agentdb-cli.js +0 -2273
  96. package/dist/cli/agentdb-cli.js.map +0 -1
  97. package/dist/cli/agentdb.db +0 -0
  98. package/dist/cli/commands/init.d.ts +0 -12
  99. package/dist/cli/commands/init.d.ts.map +0 -1
  100. package/dist/cli/commands/init.js +0 -115
  101. package/dist/cli/commands/init.js.map +0 -1
  102. package/dist/cli/commands/install-embeddings.d.ts +0 -10
  103. package/dist/cli/commands/install-embeddings.d.ts.map +0 -1
  104. package/dist/cli/commands/install-embeddings.js +0 -68
  105. package/dist/cli/commands/install-embeddings.js.map +0 -1
  106. package/dist/cli/commands/migrate.d.ts +0 -15
  107. package/dist/cli/commands/migrate.d.ts.map +0 -1
  108. package/dist/cli/commands/migrate.js +0 -425
  109. package/dist/cli/commands/migrate.js.map +0 -1
  110. package/dist/cli/commands/status.d.ts +0 -10
  111. package/dist/cli/commands/status.d.ts.map +0 -1
  112. package/dist/cli/commands/status.js +0 -129
  113. package/dist/cli/commands/status.js.map +0 -1
  114. package/dist/controllers/CausalMemoryGraph.d.ts +0 -126
  115. package/dist/controllers/CausalMemoryGraph.d.ts.map +0 -1
  116. package/dist/controllers/CausalMemoryGraph.js +0 -323
  117. package/dist/controllers/CausalMemoryGraph.js.map +0 -1
  118. package/dist/controllers/CausalRecall.d.ts +0 -139
  119. package/dist/controllers/CausalRecall.d.ts.map +0 -1
  120. package/dist/controllers/CausalRecall.js +0 -356
  121. package/dist/controllers/CausalRecall.js.map +0 -1
  122. package/dist/controllers/ContextSynthesizer.d.ts +0 -65
  123. package/dist/controllers/ContextSynthesizer.d.ts.map +0 -1
  124. package/dist/controllers/ContextSynthesizer.js +0 -208
  125. package/dist/controllers/ContextSynthesizer.js.map +0 -1
  126. package/dist/controllers/EmbeddingService.d.ts +0 -37
  127. package/dist/controllers/EmbeddingService.d.ts.map +0 -1
  128. package/dist/controllers/EmbeddingService.js +0 -136
  129. package/dist/controllers/EmbeddingService.js.map +0 -1
  130. package/dist/controllers/EnhancedEmbeddingService.d.ts +0 -50
  131. package/dist/controllers/EnhancedEmbeddingService.d.ts.map +0 -1
  132. package/dist/controllers/EnhancedEmbeddingService.js +0 -119
  133. package/dist/controllers/EnhancedEmbeddingService.js.map +0 -1
  134. package/dist/controllers/ExplainableRecall.d.ts +0 -163
  135. package/dist/controllers/ExplainableRecall.d.ts.map +0 -1
  136. package/dist/controllers/ExplainableRecall.js +0 -485
  137. package/dist/controllers/ExplainableRecall.js.map +0 -1
  138. package/dist/controllers/HNSWIndex.d.ts +0 -128
  139. package/dist/controllers/HNSWIndex.d.ts.map +0 -1
  140. package/dist/controllers/HNSWIndex.js +0 -361
  141. package/dist/controllers/HNSWIndex.js.map +0 -1
  142. package/dist/controllers/LearningSystem.d.ts +0 -195
  143. package/dist/controllers/LearningSystem.d.ts.map +0 -1
  144. package/dist/controllers/LearningSystem.js +0 -929
  145. package/dist/controllers/LearningSystem.js.map +0 -1
  146. package/dist/controllers/MMRDiversityRanker.d.ts +0 -50
  147. package/dist/controllers/MMRDiversityRanker.d.ts.map +0 -1
  148. package/dist/controllers/MMRDiversityRanker.js +0 -130
  149. package/dist/controllers/MMRDiversityRanker.js.map +0 -1
  150. package/dist/controllers/MetadataFilter.d.ts +0 -70
  151. package/dist/controllers/MetadataFilter.d.ts.map +0 -1
  152. package/dist/controllers/MetadataFilter.js +0 -243
  153. package/dist/controllers/MetadataFilter.js.map +0 -1
  154. package/dist/controllers/NightlyLearner.d.ts +0 -114
  155. package/dist/controllers/NightlyLearner.d.ts.map +0 -1
  156. package/dist/controllers/NightlyLearner.js +0 -394
  157. package/dist/controllers/NightlyLearner.js.map +0 -1
  158. package/dist/controllers/QUICClient.d.ts +0 -109
  159. package/dist/controllers/QUICClient.d.ts.map +0 -1
  160. package/dist/controllers/QUICClient.js +0 -299
  161. package/dist/controllers/QUICClient.js.map +0 -1
  162. package/dist/controllers/QUICServer.d.ts +0 -121
  163. package/dist/controllers/QUICServer.d.ts.map +0 -1
  164. package/dist/controllers/QUICServer.js +0 -383
  165. package/dist/controllers/QUICServer.js.map +0 -1
  166. package/dist/controllers/ReasoningBank.d.ts +0 -196
  167. package/dist/controllers/ReasoningBank.d.ts.map +0 -1
  168. package/dist/controllers/ReasoningBank.js +0 -494
  169. package/dist/controllers/ReasoningBank.js.map +0 -1
  170. package/dist/controllers/ReflexionMemory.d.ts +0 -125
  171. package/dist/controllers/ReflexionMemory.d.ts.map +0 -1
  172. package/dist/controllers/ReflexionMemory.js +0 -521
  173. package/dist/controllers/ReflexionMemory.js.map +0 -1
  174. package/dist/controllers/SkillLibrary.d.ts +0 -149
  175. package/dist/controllers/SkillLibrary.d.ts.map +0 -1
  176. package/dist/controllers/SkillLibrary.js +0 -547
  177. package/dist/controllers/SkillLibrary.js.map +0 -1
  178. package/dist/controllers/SyncCoordinator.d.ts +0 -120
  179. package/dist/controllers/SyncCoordinator.d.ts.map +0 -1
  180. package/dist/controllers/SyncCoordinator.js +0 -441
  181. package/dist/controllers/SyncCoordinator.js.map +0 -1
  182. package/dist/controllers/WASMVectorSearch.d.ts +0 -89
  183. package/dist/controllers/WASMVectorSearch.d.ts.map +0 -1
  184. package/dist/controllers/WASMVectorSearch.js +0 -234
  185. package/dist/controllers/WASMVectorSearch.js.map +0 -1
  186. package/dist/controllers/frontier-index.d.ts +0 -14
  187. package/dist/controllers/frontier-index.d.ts.map +0 -1
  188. package/dist/controllers/frontier-index.js +0 -10
  189. package/dist/controllers/frontier-index.js.map +0 -1
  190. package/dist/controllers/index.d.ts +0 -30
  191. package/dist/controllers/index.d.ts.map +0 -1
  192. package/dist/controllers/index.js +0 -18
  193. package/dist/controllers/index.js.map +0 -1
  194. package/dist/db-fallback.d.ts +0 -26
  195. package/dist/db-fallback.d.ts.map +0 -1
  196. package/dist/db-fallback.js +0 -264
  197. package/dist/db-fallback.js.map +0 -1
  198. package/dist/db-test.d.ts +0 -13
  199. package/dist/db-test.d.ts.map +0 -1
  200. package/dist/db-test.js +0 -55
  201. package/dist/db-test.js.map +0 -1
  202. package/dist/db-unified.d.ts +0 -76
  203. package/dist/db-unified.d.ts.map +0 -1
  204. package/dist/db-unified.js +0 -278
  205. package/dist/db-unified.js.map +0 -1
  206. package/dist/examples/quic-sync-example.d.ts +0 -9
  207. package/dist/examples/quic-sync-example.d.ts.map +0 -1
  208. package/dist/examples/quic-sync-example.js +0 -169
  209. package/dist/examples/quic-sync-example.js.map +0 -1
  210. package/dist/examples/wasm-vector-usage.d.ts +0 -12
  211. package/dist/examples/wasm-vector-usage.d.ts.map +0 -1
  212. package/dist/examples/wasm-vector-usage.js +0 -190
  213. package/dist/examples/wasm-vector-usage.js.map +0 -1
  214. package/dist/index.d.ts +0 -28
  215. package/dist/index.d.ts.map +0 -1
  216. package/dist/index.js +0 -35
  217. package/dist/index.js.map +0 -1
  218. package/dist/malp/core/ccc.d.ts +0 -99
  219. package/dist/malp/core/ccc.d.ts.map +0 -1
  220. package/dist/malp/core/ccc.js +0 -181
  221. package/dist/malp/core/ccc.js.map +0 -1
  222. package/dist/malp/core/index.d.ts +0 -9
  223. package/dist/malp/core/index.d.ts.map +0 -1
  224. package/dist/malp/core/index.js +0 -9
  225. package/dist/malp/core/index.js.map +0 -1
  226. package/dist/malp/core/linalg.d.ts +0 -101
  227. package/dist/malp/core/linalg.d.ts.map +0 -1
  228. package/dist/malp/core/linalg.js +0 -278
  229. package/dist/malp/core/linalg.js.map +0 -1
  230. package/dist/malp/core/optimizer.d.ts +0 -68
  231. package/dist/malp/core/optimizer.d.ts.map +0 -1
  232. package/dist/malp/core/optimizer.js +0 -160
  233. package/dist/malp/core/optimizer.js.map +0 -1
  234. package/dist/malp/index.d.ts +0 -33
  235. package/dist/malp/index.d.ts.map +0 -1
  236. package/dist/malp/index.js +0 -37
  237. package/dist/malp/index.js.map +0 -1
  238. package/dist/malp/metrics/agreement.d.ts +0 -106
  239. package/dist/malp/metrics/agreement.d.ts.map +0 -1
  240. package/dist/malp/metrics/agreement.js +0 -199
  241. package/dist/malp/metrics/agreement.js.map +0 -1
  242. package/dist/malp/metrics/comparison.d.ts +0 -93
  243. package/dist/malp/metrics/comparison.d.ts.map +0 -1
  244. package/dist/malp/metrics/comparison.js +0 -256
  245. package/dist/malp/metrics/comparison.js.map +0 -1
  246. package/dist/malp/metrics/index.d.ts +0 -8
  247. package/dist/malp/metrics/index.d.ts.map +0 -1
  248. package/dist/malp/metrics/index.js +0 -8
  249. package/dist/malp/metrics/index.js.map +0 -1
  250. package/dist/malp/metrics/performance.d.ts +0 -61
  251. package/dist/malp/metrics/performance.d.ts.map +0 -1
  252. package/dist/malp/metrics/performance.js +0 -190
  253. package/dist/malp/metrics/performance.js.map +0 -1
  254. package/dist/malp/models/index.d.ts +0 -7
  255. package/dist/malp/models/index.d.ts.map +0 -1
  256. package/dist/malp/models/index.js +0 -7
  257. package/dist/malp/models/index.js.map +0 -1
  258. package/dist/malp/models/malp.d.ts +0 -116
  259. package/dist/malp/models/malp.d.ts.map +0 -1
  260. package/dist/malp/models/malp.js +0 -206
  261. package/dist/malp/models/malp.js.map +0 -1
  262. package/dist/malp/models/regressor.d.ts +0 -80
  263. package/dist/malp/models/regressor.d.ts.map +0 -1
  264. package/dist/malp/models/regressor.js +0 -229
  265. package/dist/malp/models/regressor.js.map +0 -1
  266. package/dist/malp/reasoningbank_validator.d.ts +0 -187
  267. package/dist/malp/reasoningbank_validator.d.ts.map +0 -1
  268. package/dist/malp/reasoningbank_validator.js +0 -246
  269. package/dist/malp/reasoningbank_validator.js.map +0 -1
  270. package/dist/malp/wasm_bindings.d.ts +0 -344
  271. package/dist/malp/wasm_bindings.d.ts.map +0 -1
  272. package/dist/malp/wasm_bindings.js +0 -9
  273. package/dist/malp/wasm_bindings.js.map +0 -1
  274. package/dist/mcp/agentdb-mcp-server.d.ts +0 -8
  275. package/dist/mcp/agentdb-mcp-server.d.ts.map +0 -1
  276. package/dist/mcp/agentdb-mcp-server.js +0 -2116
  277. package/dist/mcp/agentdb-mcp-server.js.map +0 -1
  278. package/dist/mcp/learning-tools-handlers.d.ts +0 -16
  279. package/dist/mcp/learning-tools-handlers.d.ts.map +0 -1
  280. package/dist/mcp/learning-tools-handlers.js +0 -105
  281. package/dist/mcp/learning-tools-handlers.js.map +0 -1
  282. package/dist/optimizations/BatchOperations.d.ts +0 -109
  283. package/dist/optimizations/BatchOperations.d.ts.map +0 -1
  284. package/dist/optimizations/BatchOperations.js +0 -407
  285. package/dist/optimizations/BatchOperations.js.map +0 -1
  286. package/dist/optimizations/QueryOptimizer.d.ts +0 -83
  287. package/dist/optimizations/QueryOptimizer.d.ts.map +0 -1
  288. package/dist/optimizations/QueryOptimizer.js +0 -228
  289. package/dist/optimizations/QueryOptimizer.js.map +0 -1
  290. package/dist/optimizations/ToolCache.d.ts +0 -137
  291. package/dist/optimizations/ToolCache.d.ts.map +0 -1
  292. package/dist/optimizations/ToolCache.js +0 -281
  293. package/dist/optimizations/ToolCache.js.map +0 -1
  294. package/dist/optimizations/index.d.ts +0 -10
  295. package/dist/optimizations/index.d.ts.map +0 -1
  296. package/dist/optimizations/index.js +0 -8
  297. package/dist/optimizations/index.js.map +0 -1
  298. package/dist/security/input-validation.d.ts +0 -109
  299. package/dist/security/input-validation.d.ts.map +0 -1
  300. package/dist/security/input-validation.js +0 -398
  301. package/dist/security/input-validation.js.map +0 -1
  302. package/dist/security/limits.d.ts +0 -150
  303. package/dist/security/limits.d.ts.map +0 -1
  304. package/dist/security/limits.js +0 -288
  305. package/dist/security/limits.js.map +0 -1
  306. package/dist/security/path-security.d.ts +0 -100
  307. package/dist/security/path-security.d.ts.map +0 -1
  308. package/dist/security/path-security.js +0 -337
  309. package/dist/security/path-security.js.map +0 -1
  310. package/dist/security/validation.d.ts +0 -95
  311. package/dist/security/validation.d.ts.map +0 -1
  312. package/dist/security/validation.js +0 -315
  313. package/dist/security/validation.js.map +0 -1
  314. package/dist/types/quic.d.ts +0 -518
  315. package/dist/types/quic.d.ts.map +0 -1
  316. package/dist/types/quic.js +0 -272
  317. 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"}