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