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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/optimizations/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAChE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/optimizations/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Input Validation and Sanitization for AgentDB Security
|
|
3
|
-
*
|
|
4
|
-
* Provides comprehensive validation to prevent SQL injection and other attacks:
|
|
5
|
-
* - Whitelist-based validation for identifiers (tables, columns, PRAGMA commands)
|
|
6
|
-
* - Input sanitization for user data
|
|
7
|
-
* - Type validation and constraints
|
|
8
|
-
* - Error handling that doesn't leak sensitive information
|
|
9
|
-
*/
|
|
10
|
-
/**
|
|
11
|
-
* Validation error with safe error messages
|
|
12
|
-
*/
|
|
13
|
-
export declare class ValidationError extends Error {
|
|
14
|
-
readonly code: string;
|
|
15
|
-
readonly field?: string;
|
|
16
|
-
constructor(message: string, code?: string, field?: string);
|
|
17
|
-
/**
|
|
18
|
-
* Get safe error message (doesn't leak sensitive info)
|
|
19
|
-
*/
|
|
20
|
-
getSafeMessage(): string;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Validate task string (NEW - for MCP tool optimization)
|
|
24
|
-
*/
|
|
25
|
-
export declare function validateTaskString(task: unknown, fieldName?: string): string;
|
|
26
|
-
/**
|
|
27
|
-
* Validate numeric range (NEW - for MCP tool optimization)
|
|
28
|
-
*/
|
|
29
|
-
export declare function validateNumericRange(value: unknown, fieldName: string, min: number, max: number): number;
|
|
30
|
-
/**
|
|
31
|
-
* Validate array length (NEW - for MCP tool optimization)
|
|
32
|
-
*/
|
|
33
|
-
export declare function validateArrayLength<T>(arr: unknown, fieldName: string, minLength: number, maxLength: number): T[];
|
|
34
|
-
/**
|
|
35
|
-
* Validate object (NEW - for MCP tool optimization)
|
|
36
|
-
*/
|
|
37
|
-
export declare function validateObject(obj: unknown, fieldName: string, required?: boolean): Record<string, any>;
|
|
38
|
-
/**
|
|
39
|
-
* Validate boolean (NEW - for MCP tool optimization)
|
|
40
|
-
*/
|
|
41
|
-
export declare function validateBoolean(value: unknown, fieldName: string, defaultValue?: boolean): boolean;
|
|
42
|
-
/**
|
|
43
|
-
* Validate enum value (NEW - for MCP tool optimization)
|
|
44
|
-
*/
|
|
45
|
-
export declare function validateEnum<T extends string>(value: unknown, fieldName: string, allowedValues: readonly T[]): T;
|
|
46
|
-
/**
|
|
47
|
-
* Validate table name against whitelist
|
|
48
|
-
*/
|
|
49
|
-
export declare function validateTableName(tableName: string): string;
|
|
50
|
-
/**
|
|
51
|
-
* Validate column name against whitelist
|
|
52
|
-
*/
|
|
53
|
-
export declare function validateColumnName(tableName: string, columnName: string): string;
|
|
54
|
-
/**
|
|
55
|
-
* Validate PRAGMA command against whitelist
|
|
56
|
-
*/
|
|
57
|
-
export declare function validatePragmaCommand(pragma: string): string;
|
|
58
|
-
/**
|
|
59
|
-
* Validate and sanitize session ID
|
|
60
|
-
*/
|
|
61
|
-
export declare function validateSessionId(sessionId: string): string;
|
|
62
|
-
/**
|
|
63
|
-
* Validate numeric ID
|
|
64
|
-
*/
|
|
65
|
-
export declare function validateId(id: any, fieldName?: string): number;
|
|
66
|
-
/**
|
|
67
|
-
* Validate timestamp
|
|
68
|
-
*/
|
|
69
|
-
export declare function validateTimestamp(timestamp: any, fieldName?: string): number;
|
|
70
|
-
/**
|
|
71
|
-
* Validate reward value (0-1)
|
|
72
|
-
*/
|
|
73
|
-
export declare function validateReward(reward: any): number;
|
|
74
|
-
/**
|
|
75
|
-
* Validate success flag
|
|
76
|
-
*/
|
|
77
|
-
export declare function validateSuccess(success: any): boolean;
|
|
78
|
-
/**
|
|
79
|
-
* Sanitize text input (prevent extremely long strings, null bytes, etc.)
|
|
80
|
-
*/
|
|
81
|
-
export declare function sanitizeText(text: string, maxLength?: number, fieldName?: string): string;
|
|
82
|
-
/**
|
|
83
|
-
* Build safe WHERE clause with parameterized values
|
|
84
|
-
* Returns both the SQL clause and the parameter values
|
|
85
|
-
*/
|
|
86
|
-
export declare function buildSafeWhereClause(tableName: string, conditions: Record<string, any>): {
|
|
87
|
-
clause: string;
|
|
88
|
-
values: any[];
|
|
89
|
-
};
|
|
90
|
-
/**
|
|
91
|
-
* Build safe SET clause for UPDATE statements
|
|
92
|
-
*/
|
|
93
|
-
export declare function buildSafeSetClause(tableName: string, updates: Record<string, any>): {
|
|
94
|
-
clause: string;
|
|
95
|
-
values: any[];
|
|
96
|
-
};
|
|
97
|
-
/**
|
|
98
|
-
* Validate JSON data
|
|
99
|
-
*/
|
|
100
|
-
export declare function validateJSON(data: any, fieldName?: string): string;
|
|
101
|
-
/**
|
|
102
|
-
* Validate array of tags
|
|
103
|
-
*/
|
|
104
|
-
export declare function validateTags(tags: any): string[];
|
|
105
|
-
/**
|
|
106
|
-
* Safe error handler that doesn't leak sensitive information
|
|
107
|
-
*/
|
|
108
|
-
export declare function handleSecurityError(error: any): string;
|
|
109
|
-
//# sourceMappingURL=input-validation.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"input-validation.d.ts","sourceRoot":"","sources":["../../src/security/input-validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,398 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Input Validation and Sanitization for AgentDB Security
|
|
3
|
-
*
|
|
4
|
-
* Provides comprehensive validation to prevent SQL injection and other attacks:
|
|
5
|
-
* - Whitelist-based validation for identifiers (tables, columns, PRAGMA commands)
|
|
6
|
-
* - Input sanitization for user data
|
|
7
|
-
* - Type validation and constraints
|
|
8
|
-
* - Error handling that doesn't leak sensitive information
|
|
9
|
-
*/
|
|
10
|
-
/**
|
|
11
|
-
* Allowed table names in AgentDB (whitelist)
|
|
12
|
-
*/
|
|
13
|
-
const ALLOWED_TABLES = new Set([
|
|
14
|
-
'episodes',
|
|
15
|
-
'episode_embeddings',
|
|
16
|
-
'skills',
|
|
17
|
-
'skill_embeddings',
|
|
18
|
-
'causal_edges',
|
|
19
|
-
'causal_experiments',
|
|
20
|
-
'causal_observations',
|
|
21
|
-
'provenance_certificates',
|
|
22
|
-
'reasoning_patterns',
|
|
23
|
-
'pattern_embeddings',
|
|
24
|
-
'rl_sessions',
|
|
25
|
-
'rl_experiences',
|
|
26
|
-
'rl_policies',
|
|
27
|
-
'rl_q_values',
|
|
28
|
-
]);
|
|
29
|
-
/**
|
|
30
|
-
* Allowed column names by table (whitelist)
|
|
31
|
-
*/
|
|
32
|
-
const ALLOWED_COLUMNS = {
|
|
33
|
-
episodes: new Set([
|
|
34
|
-
'id', 'ts', 'session_id', 'task', 'input', 'output', 'critique',
|
|
35
|
-
'reward', 'success', 'latency_ms', 'tokens_used', 'tags', 'metadata'
|
|
36
|
-
]),
|
|
37
|
-
skills: new Set([
|
|
38
|
-
'id', 'ts', 'name', 'description', 'signature', 'code',
|
|
39
|
-
'success_rate', 'uses', 'avg_reward', 'avg_latency_ms', 'tags', 'metadata'
|
|
40
|
-
]),
|
|
41
|
-
causal_edges: new Set([
|
|
42
|
-
'id', 'ts', 'from_memory_id', 'from_memory_type', 'to_memory_id',
|
|
43
|
-
'to_memory_type', 'similarity', 'uplift', 'confidence', 'sample_size', 'evidence_ids'
|
|
44
|
-
]),
|
|
45
|
-
// Add more as needed
|
|
46
|
-
};
|
|
47
|
-
/**
|
|
48
|
-
* Allowed PRAGMA commands (whitelist)
|
|
49
|
-
*/
|
|
50
|
-
const ALLOWED_PRAGMAS = new Set([
|
|
51
|
-
'journal_mode',
|
|
52
|
-
'synchronous',
|
|
53
|
-
'cache_size',
|
|
54
|
-
'page_size',
|
|
55
|
-
'page_count',
|
|
56
|
-
'user_version',
|
|
57
|
-
'foreign_keys',
|
|
58
|
-
'temp_store',
|
|
59
|
-
'mmap_size',
|
|
60
|
-
'wal_autocheckpoint',
|
|
61
|
-
]);
|
|
62
|
-
/**
|
|
63
|
-
* Validation error with safe error messages
|
|
64
|
-
*/
|
|
65
|
-
export class ValidationError extends Error {
|
|
66
|
-
code;
|
|
67
|
-
field;
|
|
68
|
-
constructor(message, code = 'VALIDATION_ERROR', field) {
|
|
69
|
-
super(message);
|
|
70
|
-
this.name = 'ValidationError';
|
|
71
|
-
this.code = code;
|
|
72
|
-
this.field = field;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Get safe error message (doesn't leak sensitive info)
|
|
76
|
-
*/
|
|
77
|
-
getSafeMessage() {
|
|
78
|
-
return `Invalid input: ${this.field || 'unknown field'}`;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Validate task string (NEW - for MCP tool optimization)
|
|
83
|
-
*/
|
|
84
|
-
export function validateTaskString(task, fieldName = 'task') {
|
|
85
|
-
if (task === null || task === undefined) {
|
|
86
|
-
throw new ValidationError(`${fieldName} is required`, 'MISSING_REQUIRED_FIELD', fieldName);
|
|
87
|
-
}
|
|
88
|
-
if (typeof task !== 'string') {
|
|
89
|
-
throw new ValidationError(`${fieldName} must be a string`, 'INVALID_TYPE', fieldName);
|
|
90
|
-
}
|
|
91
|
-
const trimmed = task.trim();
|
|
92
|
-
if (trimmed.length === 0) {
|
|
93
|
-
throw new ValidationError(`${fieldName} cannot be empty`, 'EMPTY_STRING', fieldName);
|
|
94
|
-
}
|
|
95
|
-
if (trimmed.length > 10000) {
|
|
96
|
-
throw new ValidationError(`${fieldName} exceeds maximum length of 10000 characters`, 'STRING_TOO_LONG', fieldName);
|
|
97
|
-
}
|
|
98
|
-
// Check for potentially malicious patterns
|
|
99
|
-
const suspiciousPatterns = [
|
|
100
|
-
/<script/i,
|
|
101
|
-
/javascript:/i,
|
|
102
|
-
/on\w+\s*=/i, // onclick=, onload=, etc.
|
|
103
|
-
/\x00/, // Null bytes
|
|
104
|
-
];
|
|
105
|
-
for (const pattern of suspiciousPatterns) {
|
|
106
|
-
if (pattern.test(trimmed)) {
|
|
107
|
-
throw new ValidationError(`${fieldName} contains potentially malicious content`, 'SUSPICIOUS_CONTENT', fieldName);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
return trimmed;
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Validate numeric range (NEW - for MCP tool optimization)
|
|
114
|
-
*/
|
|
115
|
-
export function validateNumericRange(value, fieldName, min, max) {
|
|
116
|
-
if (value === null || value === undefined) {
|
|
117
|
-
throw new ValidationError(`${fieldName} is required`, 'MISSING_REQUIRED_FIELD', fieldName);
|
|
118
|
-
}
|
|
119
|
-
if (typeof value !== 'number' || isNaN(value) || !isFinite(value)) {
|
|
120
|
-
throw new ValidationError(`${fieldName} must be a valid number`, 'INVALID_NUMBER', fieldName);
|
|
121
|
-
}
|
|
122
|
-
if (value < min || value > max) {
|
|
123
|
-
throw new ValidationError(`${fieldName} must be between ${min} and ${max} (got ${value})`, 'OUT_OF_RANGE', fieldName);
|
|
124
|
-
}
|
|
125
|
-
return value;
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Validate array length (NEW - for MCP tool optimization)
|
|
129
|
-
*/
|
|
130
|
-
export function validateArrayLength(arr, fieldName, minLength, maxLength) {
|
|
131
|
-
if (arr === null || arr === undefined) {
|
|
132
|
-
throw new ValidationError(`${fieldName} is required`, 'MISSING_REQUIRED_FIELD', fieldName);
|
|
133
|
-
}
|
|
134
|
-
if (!Array.isArray(arr)) {
|
|
135
|
-
throw new ValidationError(`${fieldName} must be an array`, 'INVALID_ARRAY', fieldName);
|
|
136
|
-
}
|
|
137
|
-
if (arr.length < minLength || arr.length > maxLength) {
|
|
138
|
-
throw new ValidationError(`${fieldName} must contain between ${minLength} and ${maxLength} items (got ${arr.length})`, 'ARRAY_LENGTH_INVALID', fieldName);
|
|
139
|
-
}
|
|
140
|
-
return arr;
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Validate object (NEW - for MCP tool optimization)
|
|
144
|
-
*/
|
|
145
|
-
export function validateObject(obj, fieldName, required = true) {
|
|
146
|
-
if (obj === null || obj === undefined) {
|
|
147
|
-
if (required) {
|
|
148
|
-
throw new ValidationError(`${fieldName} is required`, 'MISSING_REQUIRED_FIELD', fieldName);
|
|
149
|
-
}
|
|
150
|
-
return {};
|
|
151
|
-
}
|
|
152
|
-
if (typeof obj !== 'object' || Array.isArray(obj)) {
|
|
153
|
-
throw new ValidationError(`${fieldName} must be an object`, 'INVALID_OBJECT', fieldName);
|
|
154
|
-
}
|
|
155
|
-
return obj;
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Validate boolean (NEW - for MCP tool optimization)
|
|
159
|
-
*/
|
|
160
|
-
export function validateBoolean(value, fieldName, defaultValue) {
|
|
161
|
-
if (value === null || value === undefined) {
|
|
162
|
-
if (defaultValue !== undefined) {
|
|
163
|
-
return defaultValue;
|
|
164
|
-
}
|
|
165
|
-
throw new ValidationError(`${fieldName} is required`, 'MISSING_REQUIRED_FIELD', fieldName);
|
|
166
|
-
}
|
|
167
|
-
if (typeof value !== 'boolean') {
|
|
168
|
-
throw new ValidationError(`${fieldName} must be a boolean`, 'INVALID_BOOLEAN', fieldName);
|
|
169
|
-
}
|
|
170
|
-
return value;
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Validate enum value (NEW - for MCP tool optimization)
|
|
174
|
-
*/
|
|
175
|
-
export function validateEnum(value, fieldName, allowedValues) {
|
|
176
|
-
if (value === null || value === undefined) {
|
|
177
|
-
throw new ValidationError(`${fieldName} is required`, 'MISSING_REQUIRED_FIELD', fieldName);
|
|
178
|
-
}
|
|
179
|
-
if (typeof value !== 'string') {
|
|
180
|
-
throw new ValidationError(`${fieldName} must be a string`, 'INVALID_TYPE', fieldName);
|
|
181
|
-
}
|
|
182
|
-
if (!allowedValues.includes(value)) {
|
|
183
|
-
throw new ValidationError(`${fieldName} must be one of: ${allowedValues.join(', ')} (got "${value}")`, 'INVALID_ENUM_VALUE', fieldName);
|
|
184
|
-
}
|
|
185
|
-
return value;
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* Validate table name against whitelist
|
|
189
|
-
*/
|
|
190
|
-
export function validateTableName(tableName) {
|
|
191
|
-
if (!tableName || typeof tableName !== 'string') {
|
|
192
|
-
throw new ValidationError('Table name must be a non-empty string', 'INVALID_TABLE', 'tableName');
|
|
193
|
-
}
|
|
194
|
-
const sanitized = tableName.trim().toLowerCase();
|
|
195
|
-
if (!ALLOWED_TABLES.has(sanitized)) {
|
|
196
|
-
throw new ValidationError(`Invalid table name: ${sanitized}. Allowed tables: ${Array.from(ALLOWED_TABLES).join(', ')}`, 'INVALID_TABLE', 'tableName');
|
|
197
|
-
}
|
|
198
|
-
return sanitized;
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* Validate column name against whitelist
|
|
202
|
-
*/
|
|
203
|
-
export function validateColumnName(tableName, columnName) {
|
|
204
|
-
if (!columnName || typeof columnName !== 'string') {
|
|
205
|
-
throw new ValidationError('Column name must be a non-empty string', 'INVALID_COLUMN', 'columnName');
|
|
206
|
-
}
|
|
207
|
-
const sanitized = columnName.trim().toLowerCase();
|
|
208
|
-
const validatedTable = validateTableName(tableName);
|
|
209
|
-
const allowedColumns = ALLOWED_COLUMNS[validatedTable];
|
|
210
|
-
if (allowedColumns && !allowedColumns.has(sanitized)) {
|
|
211
|
-
throw new ValidationError(`Invalid column name for table ${validatedTable}: ${sanitized}`, 'INVALID_COLUMN', 'columnName');
|
|
212
|
-
}
|
|
213
|
-
return sanitized;
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Validate PRAGMA command against whitelist
|
|
217
|
-
*/
|
|
218
|
-
export function validatePragmaCommand(pragma) {
|
|
219
|
-
if (!pragma || typeof pragma !== 'string') {
|
|
220
|
-
throw new ValidationError('PRAGMA command must be a non-empty string', 'INVALID_PRAGMA', 'pragma');
|
|
221
|
-
}
|
|
222
|
-
// Extract the pragma name (before any = or space)
|
|
223
|
-
const pragmaName = pragma.trim().toLowerCase().split(/[=\s]/)[0];
|
|
224
|
-
if (!ALLOWED_PRAGMAS.has(pragmaName)) {
|
|
225
|
-
throw new ValidationError(`Invalid PRAGMA command: ${pragmaName}. Allowed: ${Array.from(ALLOWED_PRAGMAS).join(', ')}`, 'INVALID_PRAGMA', 'pragma');
|
|
226
|
-
}
|
|
227
|
-
// Return the full pragma for execution (e.g., "journal_mode = WAL")
|
|
228
|
-
return pragma.trim();
|
|
229
|
-
}
|
|
230
|
-
/**
|
|
231
|
-
* Validate and sanitize session ID
|
|
232
|
-
*/
|
|
233
|
-
export function validateSessionId(sessionId) {
|
|
234
|
-
if (!sessionId || typeof sessionId !== 'string') {
|
|
235
|
-
throw new ValidationError('Session ID must be a non-empty string', 'INVALID_SESSION_ID', 'sessionId');
|
|
236
|
-
}
|
|
237
|
-
// Allow alphanumeric, hyphens, underscores (max 255 chars)
|
|
238
|
-
const sanitized = sessionId.trim();
|
|
239
|
-
if (sanitized.length > 255) {
|
|
240
|
-
throw new ValidationError('Session ID exceeds maximum length (255)', 'INVALID_SESSION_ID', 'sessionId');
|
|
241
|
-
}
|
|
242
|
-
if (!/^[a-zA-Z0-9_-]+$/.test(sanitized)) {
|
|
243
|
-
throw new ValidationError('Session ID must contain only alphanumeric characters, hyphens, and underscores', 'INVALID_SESSION_ID', 'sessionId');
|
|
244
|
-
}
|
|
245
|
-
return sanitized;
|
|
246
|
-
}
|
|
247
|
-
/**
|
|
248
|
-
* Validate numeric ID
|
|
249
|
-
*/
|
|
250
|
-
export function validateId(id, fieldName = 'id') {
|
|
251
|
-
const numId = Number(id);
|
|
252
|
-
if (!Number.isFinite(numId) || numId < 0 || !Number.isInteger(numId)) {
|
|
253
|
-
throw new ValidationError(`${fieldName} must be a non-negative integer`, 'INVALID_ID', fieldName);
|
|
254
|
-
}
|
|
255
|
-
return numId;
|
|
256
|
-
}
|
|
257
|
-
/**
|
|
258
|
-
* Validate timestamp
|
|
259
|
-
*/
|
|
260
|
-
export function validateTimestamp(timestamp, fieldName = 'timestamp') {
|
|
261
|
-
const numTs = Number(timestamp);
|
|
262
|
-
if (!Number.isFinite(numTs) || numTs < 0) {
|
|
263
|
-
throw new ValidationError(`${fieldName} must be a non-negative number`, 'INVALID_TIMESTAMP', fieldName);
|
|
264
|
-
}
|
|
265
|
-
// Reasonable timestamp bounds (2000-01-01 to 2100-01-01)
|
|
266
|
-
const MIN_TIMESTAMP = 946684800; // 2000-01-01
|
|
267
|
-
const MAX_TIMESTAMP = 4102444800; // 2100-01-01
|
|
268
|
-
if (numTs < MIN_TIMESTAMP || numTs > MAX_TIMESTAMP) {
|
|
269
|
-
throw new ValidationError(`${fieldName} is out of valid range (2000-2100)`, 'INVALID_TIMESTAMP', fieldName);
|
|
270
|
-
}
|
|
271
|
-
return numTs;
|
|
272
|
-
}
|
|
273
|
-
/**
|
|
274
|
-
* Validate reward value (0-1)
|
|
275
|
-
*/
|
|
276
|
-
export function validateReward(reward) {
|
|
277
|
-
const numReward = Number(reward);
|
|
278
|
-
if (!Number.isFinite(numReward)) {
|
|
279
|
-
throw new ValidationError('Reward must be a number', 'INVALID_REWARD', 'reward');
|
|
280
|
-
}
|
|
281
|
-
if (numReward < 0 || numReward > 1) {
|
|
282
|
-
throw new ValidationError('Reward must be between 0 and 1', 'INVALID_REWARD', 'reward');
|
|
283
|
-
}
|
|
284
|
-
return numReward;
|
|
285
|
-
}
|
|
286
|
-
/**
|
|
287
|
-
* Validate success flag
|
|
288
|
-
*/
|
|
289
|
-
export function validateSuccess(success) {
|
|
290
|
-
if (typeof success === 'boolean') {
|
|
291
|
-
return success;
|
|
292
|
-
}
|
|
293
|
-
if (typeof success === 'number') {
|
|
294
|
-
return success !== 0;
|
|
295
|
-
}
|
|
296
|
-
if (typeof success === 'string') {
|
|
297
|
-
const lower = success.toLowerCase();
|
|
298
|
-
if (lower === 'true' || lower === '1' || lower === 'yes')
|
|
299
|
-
return true;
|
|
300
|
-
if (lower === 'false' || lower === '0' || lower === 'no')
|
|
301
|
-
return false;
|
|
302
|
-
}
|
|
303
|
-
throw new ValidationError('Success must be a boolean value', 'INVALID_BOOLEAN', 'success');
|
|
304
|
-
}
|
|
305
|
-
/**
|
|
306
|
-
* Sanitize text input (prevent extremely long strings, null bytes, etc.)
|
|
307
|
-
*/
|
|
308
|
-
export function sanitizeText(text, maxLength = 100000, fieldName = 'text') {
|
|
309
|
-
if (typeof text !== 'string') {
|
|
310
|
-
throw new ValidationError(`${fieldName} must be a string`, 'INVALID_TEXT', fieldName);
|
|
311
|
-
}
|
|
312
|
-
// Remove null bytes
|
|
313
|
-
const sanitized = text.replace(/\0/g, '');
|
|
314
|
-
if (sanitized.length > maxLength) {
|
|
315
|
-
throw new ValidationError(`${fieldName} exceeds maximum length (${maxLength})`, 'TEXT_TOO_LONG', fieldName);
|
|
316
|
-
}
|
|
317
|
-
return sanitized;
|
|
318
|
-
}
|
|
319
|
-
/**
|
|
320
|
-
* Build safe WHERE clause with parameterized values
|
|
321
|
-
* Returns both the SQL clause and the parameter values
|
|
322
|
-
*/
|
|
323
|
-
export function buildSafeWhereClause(tableName, conditions) {
|
|
324
|
-
const validatedTable = validateTableName(tableName);
|
|
325
|
-
if (!conditions || typeof conditions !== 'object' || Object.keys(conditions).length === 0) {
|
|
326
|
-
throw new ValidationError('Conditions must be a non-empty object', 'INVALID_CONDITIONS', 'conditions');
|
|
327
|
-
}
|
|
328
|
-
const clauses = [];
|
|
329
|
-
const values = [];
|
|
330
|
-
for (const [column, value] of Object.entries(conditions)) {
|
|
331
|
-
const validatedColumn = validateColumnName(validatedTable, column);
|
|
332
|
-
clauses.push(`${validatedColumn} = ?`);
|
|
333
|
-
values.push(value);
|
|
334
|
-
}
|
|
335
|
-
return {
|
|
336
|
-
clause: clauses.join(' AND '),
|
|
337
|
-
values,
|
|
338
|
-
};
|
|
339
|
-
}
|
|
340
|
-
/**
|
|
341
|
-
* Build safe SET clause for UPDATE statements
|
|
342
|
-
*/
|
|
343
|
-
export function buildSafeSetClause(tableName, updates) {
|
|
344
|
-
const validatedTable = validateTableName(tableName);
|
|
345
|
-
if (!updates || typeof updates !== 'object' || Object.keys(updates).length === 0) {
|
|
346
|
-
throw new ValidationError('Updates must be a non-empty object', 'INVALID_UPDATES', 'updates');
|
|
347
|
-
}
|
|
348
|
-
const clauses = [];
|
|
349
|
-
const values = [];
|
|
350
|
-
for (const [column, value] of Object.entries(updates)) {
|
|
351
|
-
const validatedColumn = validateColumnName(validatedTable, column);
|
|
352
|
-
clauses.push(`${validatedColumn} = ?`);
|
|
353
|
-
values.push(value);
|
|
354
|
-
}
|
|
355
|
-
return {
|
|
356
|
-
clause: clauses.join(', '),
|
|
357
|
-
values,
|
|
358
|
-
};
|
|
359
|
-
}
|
|
360
|
-
/**
|
|
361
|
-
* Validate JSON data
|
|
362
|
-
*/
|
|
363
|
-
export function validateJSON(data, fieldName = 'json') {
|
|
364
|
-
try {
|
|
365
|
-
return JSON.stringify(data);
|
|
366
|
-
}
|
|
367
|
-
catch (error) {
|
|
368
|
-
throw new ValidationError(`${fieldName} is not valid JSON`, 'INVALID_JSON', fieldName);
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
/**
|
|
372
|
-
* Validate array of tags
|
|
373
|
-
*/
|
|
374
|
-
export function validateTags(tags) {
|
|
375
|
-
if (!Array.isArray(tags)) {
|
|
376
|
-
throw new ValidationError('Tags must be an array', 'INVALID_TAGS', 'tags');
|
|
377
|
-
}
|
|
378
|
-
const sanitized = tags.map((tag, i) => {
|
|
379
|
-
if (typeof tag !== 'string') {
|
|
380
|
-
throw new ValidationError(`Tag at index ${i} must be a string`, 'INVALID_TAG', `tags[${i}]`);
|
|
381
|
-
}
|
|
382
|
-
return sanitizeText(tag, 100, `tags[${i}]`);
|
|
383
|
-
});
|
|
384
|
-
return sanitized;
|
|
385
|
-
}
|
|
386
|
-
/**
|
|
387
|
-
* Safe error handler that doesn't leak sensitive information
|
|
388
|
-
*/
|
|
389
|
-
export function handleSecurityError(error) {
|
|
390
|
-
if (error instanceof ValidationError) {
|
|
391
|
-
// Safe to return validation errors
|
|
392
|
-
return error.message;
|
|
393
|
-
}
|
|
394
|
-
// For other errors, return generic message and log details internally
|
|
395
|
-
console.error('Security error:', error);
|
|
396
|
-
return 'An error occurred while processing your request. Please check your input and try again.';
|
|
397
|
-
}
|
|
398
|
-
//# sourceMappingURL=input-validation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"input-validation.js","sourceRoot":"","sources":["../../src/security/input-validation.ts"],"names":[],"mappings":"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"}
|