@freshguard/freshguard-core 0.13.2 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -1
- package/README.md +74 -1
- package/SKILL.md +229 -0
- package/dist/cli/index.d.ts +13 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +74 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/connectors/azure-sql.d.ts +121 -0
- package/dist/connectors/azure-sql.d.ts.map +1 -0
- package/dist/connectors/azure-sql.js +489 -0
- package/dist/connectors/azure-sql.js.map +1 -0
- package/dist/connectors/base-connector.d.ts +139 -0
- package/dist/connectors/base-connector.d.ts.map +1 -1
- package/dist/connectors/base-connector.js +160 -3
- package/dist/connectors/base-connector.js.map +1 -1
- package/dist/connectors/bigquery.d.ts +100 -0
- package/dist/connectors/bigquery.d.ts.map +1 -1
- package/dist/connectors/bigquery.js +143 -2
- package/dist/connectors/bigquery.js.map +1 -1
- package/dist/connectors/duckdb.d.ts +96 -0
- package/dist/connectors/duckdb.d.ts.map +1 -1
- package/dist/connectors/duckdb.js +144 -7
- package/dist/connectors/duckdb.js.map +1 -1
- package/dist/connectors/index.d.ts +28 -0
- package/dist/connectors/index.d.ts.map +1 -1
- package/dist/connectors/index.js +28 -0
- package/dist/connectors/index.js.map +1 -1
- package/dist/connectors/mssql.d.ts +119 -0
- package/dist/connectors/mssql.d.ts.map +1 -0
- package/dist/connectors/mssql.js +483 -0
- package/dist/connectors/mssql.js.map +1 -0
- package/dist/connectors/mysql.d.ts +85 -0
- package/dist/connectors/mysql.d.ts.map +1 -1
- package/dist/connectors/mysql.js +118 -3
- package/dist/connectors/mysql.js.map +1 -1
- package/dist/connectors/postgres.d.ts +85 -0
- package/dist/connectors/postgres.d.ts.map +1 -1
- package/dist/connectors/postgres.js +113 -6
- package/dist/connectors/postgres.js.map +1 -1
- package/dist/connectors/redshift.d.ts +90 -0
- package/dist/connectors/redshift.d.ts.map +1 -1
- package/dist/connectors/redshift.js +131 -7
- package/dist/connectors/redshift.js.map +1 -1
- package/dist/connectors/snowflake.d.ts +108 -0
- package/dist/connectors/snowflake.d.ts.map +1 -1
- package/dist/connectors/snowflake.js +137 -3
- package/dist/connectors/snowflake.js.map +1 -1
- package/dist/connectors/synapse.d.ts +123 -0
- package/dist/connectors/synapse.d.ts.map +1 -0
- package/dist/connectors/synapse.js +495 -0
- package/dist/connectors/synapse.js.map +1 -0
- package/dist/db/index.d.ts +25 -0
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +23 -0
- package/dist/db/index.js.map +1 -1
- package/dist/db/migrate.d.ts +23 -0
- package/dist/db/migrate.d.ts.map +1 -1
- package/dist/db/migrate.js +38 -0
- package/dist/db/migrate.js.map +1 -1
- package/dist/db/schema.d.ts +11 -0
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +70 -0
- package/dist/db/schema.js.map +1 -1
- package/dist/errors/debug-factory.d.ts +38 -0
- package/dist/errors/debug-factory.d.ts.map +1 -1
- package/dist/errors/debug-factory.js +40 -0
- package/dist/errors/debug-factory.js.map +1 -1
- package/dist/errors/index.d.ts +59 -0
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +110 -7
- package/dist/errors/index.js.map +1 -1
- package/dist/index.d.ts +32 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -1
- package/dist/index.js.map +1 -1
- package/dist/metadata/duckdb-storage.d.ts +3 -0
- package/dist/metadata/duckdb-storage.d.ts.map +1 -1
- package/dist/metadata/duckdb-storage.js +6 -0
- package/dist/metadata/duckdb-storage.js.map +1 -1
- package/dist/metadata/factory.d.ts +30 -0
- package/dist/metadata/factory.d.ts.map +1 -1
- package/dist/metadata/factory.js +31 -0
- package/dist/metadata/factory.js.map +1 -1
- package/dist/metadata/index.d.ts +26 -0
- package/dist/metadata/index.d.ts.map +1 -1
- package/dist/metadata/index.js +26 -0
- package/dist/metadata/index.js.map +1 -1
- package/dist/metadata/interface.d.ts +33 -0
- package/dist/metadata/interface.d.ts.map +1 -1
- package/dist/metadata/interface.js +3 -0
- package/dist/metadata/interface.js.map +1 -1
- package/dist/metadata/postgresql-storage.d.ts +3 -0
- package/dist/metadata/postgresql-storage.d.ts.map +1 -1
- package/dist/metadata/postgresql-storage.js +12 -2
- package/dist/metadata/postgresql-storage.js.map +1 -1
- package/dist/metadata/schema-config.d.ts +53 -0
- package/dist/metadata/schema-config.d.ts.map +1 -1
- package/dist/metadata/schema-config.js +64 -0
- package/dist/metadata/schema-config.js.map +1 -1
- package/dist/metadata/types.d.ts +3 -0
- package/dist/metadata/types.d.ts.map +1 -1
- package/dist/metadata/types.js +3 -0
- package/dist/metadata/types.js.map +1 -1
- package/dist/monitor/baseline-calculator.d.ts +56 -0
- package/dist/monitor/baseline-calculator.d.ts.map +1 -1
- package/dist/monitor/baseline-calculator.js +72 -0
- package/dist/monitor/baseline-calculator.js.map +1 -1
- package/dist/monitor/baseline-config.d.ts +77 -0
- package/dist/monitor/baseline-config.d.ts.map +1 -1
- package/dist/monitor/baseline-config.js +79 -1
- package/dist/monitor/baseline-config.js.map +1 -1
- package/dist/monitor/freshness.d.ts +40 -0
- package/dist/monitor/freshness.d.ts.map +1 -1
- package/dist/monitor/freshness.js +82 -3
- package/dist/monitor/freshness.js.map +1 -1
- package/dist/monitor/index.d.ts +29 -0
- package/dist/monitor/index.d.ts.map +1 -1
- package/dist/monitor/index.js +29 -0
- package/dist/monitor/index.js.map +1 -1
- package/dist/monitor/schema-baseline.d.ts +45 -0
- package/dist/monitor/schema-baseline.d.ts.map +1 -1
- package/dist/monitor/schema-baseline.js +63 -5
- package/dist/monitor/schema-baseline.js.map +1 -1
- package/dist/monitor/schema-changes.d.ts +45 -0
- package/dist/monitor/schema-changes.d.ts.map +1 -1
- package/dist/monitor/schema-changes.js +85 -0
- package/dist/monitor/schema-changes.js.map +1 -1
- package/dist/monitor/volume.d.ts +43 -0
- package/dist/monitor/volume.d.ts.map +1 -1
- package/dist/monitor/volume.js +89 -0
- package/dist/monitor/volume.js.map +1 -1
- package/dist/observability/logger.d.ts +91 -0
- package/dist/observability/logger.d.ts.map +1 -1
- package/dist/observability/logger.js +108 -0
- package/dist/observability/logger.js.map +1 -1
- package/dist/observability/metrics.d.ts +140 -0
- package/dist/observability/metrics.d.ts.map +1 -1
- package/dist/observability/metrics.js +184 -7
- package/dist/observability/metrics.js.map +1 -1
- package/dist/resilience/circuit-breaker.d.ts +112 -2
- package/dist/resilience/circuit-breaker.d.ts.map +1 -1
- package/dist/resilience/circuit-breaker.js +140 -6
- package/dist/resilience/circuit-breaker.js.map +1 -1
- package/dist/resilience/index.d.ts +9 -0
- package/dist/resilience/index.d.ts.map +1 -1
- package/dist/resilience/index.js +13 -0
- package/dist/resilience/index.js.map +1 -1
- package/dist/resilience/retry-policy.d.ts +105 -0
- package/dist/resilience/retry-policy.d.ts.map +1 -1
- package/dist/resilience/retry-policy.js +158 -7
- package/dist/resilience/retry-policy.js.map +1 -1
- package/dist/resilience/timeout-manager.d.ts +137 -0
- package/dist/resilience/timeout-manager.d.ts.map +1 -1
- package/dist/resilience/timeout-manager.js +151 -4
- package/dist/resilience/timeout-manager.js.map +1 -1
- package/dist/security/query-analyzer.d.ts +124 -0
- package/dist/security/query-analyzer.d.ts.map +1 -1
- package/dist/security/query-analyzer.js +150 -9
- package/dist/security/query-analyzer.js.map +1 -1
- package/dist/security/schema-cache.d.ts +152 -0
- package/dist/security/schema-cache.d.ts.map +1 -1
- package/dist/security/schema-cache.js +144 -12
- package/dist/security/schema-cache.js.map +1 -1
- package/dist/types/connector.d.ts +68 -1
- package/dist/types/connector.d.ts.map +1 -1
- package/dist/types/connector.js +38 -15
- package/dist/types/connector.js.map +1 -1
- package/dist/types/driver-results.d.ts +28 -0
- package/dist/types/driver-results.d.ts.map +1 -1
- package/dist/types/driver-results.js +12 -0
- package/dist/types/driver-results.js.map +1 -1
- package/dist/types.d.ts +113 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -1
- package/dist/validation/index.d.ts +8 -0
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +12 -0
- package/dist/validation/index.js.map +1 -1
- package/dist/validation/runtime-validator.d.ts +98 -0
- package/dist/validation/runtime-validator.d.ts.map +1 -1
- package/dist/validation/runtime-validator.js +114 -1
- package/dist/validation/runtime-validator.js.map +1 -1
- package/dist/validation/sanitizers.d.ts +59 -0
- package/dist/validation/sanitizers.d.ts.map +1 -1
- package/dist/validation/sanitizers.js +104 -20
- package/dist/validation/sanitizers.js.map +1 -1
- package/dist/validation/schemas.d.ts +73 -0
- package/dist/validation/schemas.d.ts.map +1 -1
- package/dist/validation/schemas.js +132 -5
- package/dist/validation/schemas.js.map +1 -1
- package/dist/validators/index.d.ts +54 -0
- package/dist/validators/index.d.ts.map +1 -1
- package/dist/validators/index.js +93 -2
- package/dist/validators/index.js.map +1 -1
- package/package.json +6 -2
|
@@ -1,5 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime validation utilities for FreshGuard Core Phase 2
|
|
3
|
+
*
|
|
4
|
+
* Provides structured error handling and runtime validation using Zod schemas
|
|
5
|
+
* with enhanced error formatting and type safety.
|
|
6
|
+
*
|
|
7
|
+
* @license MIT
|
|
8
|
+
*/
|
|
1
9
|
import { z } from 'zod';
|
|
2
10
|
import { schemas } from './schemas.js';
|
|
11
|
+
/**
|
|
12
|
+
* Enhanced error class for validation failures
|
|
13
|
+
*/
|
|
3
14
|
export class ValidationException extends Error {
|
|
4
15
|
errors;
|
|
5
16
|
timestamp;
|
|
@@ -10,11 +21,17 @@ export class ValidationException extends Error {
|
|
|
10
21
|
this.errors = errors;
|
|
11
22
|
this.timestamp = new Date();
|
|
12
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Get error messages as a formatted string
|
|
26
|
+
*/
|
|
13
27
|
getFormattedErrors() {
|
|
14
28
|
return this.errors
|
|
15
29
|
.map(error => `${error.field}: ${error.message}`)
|
|
16
30
|
.join(', ');
|
|
17
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Convert to JSON for logging/API responses
|
|
34
|
+
*/
|
|
18
35
|
toJSON() {
|
|
19
36
|
return {
|
|
20
37
|
name: this.name,
|
|
@@ -24,14 +41,26 @@ export class ValidationException extends Error {
|
|
|
24
41
|
};
|
|
25
42
|
}
|
|
26
43
|
}
|
|
44
|
+
// ==============================================
|
|
45
|
+
// Error Formatting Utilities
|
|
46
|
+
// ==============================================
|
|
47
|
+
/**
|
|
48
|
+
* Format Zod errors into structured validation errors
|
|
49
|
+
*/
|
|
27
50
|
function formatZodErrors(zodError) {
|
|
28
51
|
return zodError.issues.map((issue) => ({
|
|
29
52
|
field: issue.path.join('.') || 'root',
|
|
30
53
|
code: issue.code,
|
|
31
54
|
message: issue.message,
|
|
32
|
-
value: issue.path.length > 0 ? undefined : ('received' in issue ? issue.received : undefined)
|
|
55
|
+
value: issue.path.length > 0 ? undefined : ('received' in issue ? issue.received : undefined) // Don't include sensitive values
|
|
33
56
|
}));
|
|
34
57
|
}
|
|
58
|
+
// ==============================================
|
|
59
|
+
// Runtime Validator Class
|
|
60
|
+
// ==============================================
|
|
61
|
+
/**
|
|
62
|
+
* Runtime validator with structured error handling and caching
|
|
63
|
+
*/
|
|
35
64
|
export class RuntimeValidator {
|
|
36
65
|
schemaCache = new Map();
|
|
37
66
|
validationStats = {
|
|
@@ -40,6 +69,7 @@ export class RuntimeValidator {
|
|
|
40
69
|
failures: 0
|
|
41
70
|
};
|
|
42
71
|
constructor() {
|
|
72
|
+
// Pre-populate schema cache with commonly used schemas
|
|
43
73
|
this.schemaCache.set('TableName', schemas.TableNameSchema);
|
|
44
74
|
this.schemaCache.set('ColumnName', schemas.ColumnNameSchema);
|
|
45
75
|
this.schemaCache.set('BaseConnectorConfig', schemas.BaseConnectorConfigSchema);
|
|
@@ -48,6 +78,9 @@ export class RuntimeValidator {
|
|
|
48
78
|
this.schemaCache.set('BigQueryConnectorConfig', schemas.BigQueryConnectorConfigSchema);
|
|
49
79
|
this.schemaCache.set('SnowflakeConnectorConfig', schemas.SnowflakeConnectorConfigSchema);
|
|
50
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Validate data against a Zod schema with structured error handling
|
|
83
|
+
*/
|
|
51
84
|
validate(schema, data) {
|
|
52
85
|
this.validationStats.total++;
|
|
53
86
|
try {
|
|
@@ -67,6 +100,7 @@ export class RuntimeValidator {
|
|
|
67
100
|
errors: validationErrors
|
|
68
101
|
};
|
|
69
102
|
}
|
|
103
|
+
// Handle non-Zod errors
|
|
70
104
|
return {
|
|
71
105
|
success: false,
|
|
72
106
|
errors: [{
|
|
@@ -77,6 +111,9 @@ export class RuntimeValidator {
|
|
|
77
111
|
};
|
|
78
112
|
}
|
|
79
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* Validate and throw exception on failure (for convenience)
|
|
116
|
+
*/
|
|
80
117
|
validateOrThrow(schema, data, context) {
|
|
81
118
|
const result = this.validate(schema, data);
|
|
82
119
|
if (!result.success) {
|
|
@@ -87,16 +124,28 @@ export class RuntimeValidator {
|
|
|
87
124
|
}
|
|
88
125
|
return result.data;
|
|
89
126
|
}
|
|
127
|
+
/**
|
|
128
|
+
* Validate table name
|
|
129
|
+
*/
|
|
90
130
|
validateTableName(name) {
|
|
91
131
|
return this.validate(schemas.TableNameSchema, name);
|
|
92
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* Validate column name
|
|
135
|
+
*/
|
|
93
136
|
validateColumnName(name) {
|
|
94
137
|
return this.validate(schemas.ColumnNameSchema, name);
|
|
95
138
|
}
|
|
139
|
+
/**
|
|
140
|
+
* Validate database identifier (table or column)
|
|
141
|
+
*/
|
|
96
142
|
validateDatabaseIdentifier(identifier, type = 'table') {
|
|
97
143
|
const schema = type === 'table' ? schemas.TableNameSchema : schemas.ColumnNameSchema;
|
|
98
144
|
return this.validate(schema, identifier);
|
|
99
145
|
}
|
|
146
|
+
/**
|
|
147
|
+
* Validate connector configuration
|
|
148
|
+
*/
|
|
100
149
|
validateConnectorConfig(config, type) {
|
|
101
150
|
let schema;
|
|
102
151
|
switch (type) {
|
|
@@ -117,21 +166,39 @@ export class RuntimeValidator {
|
|
|
117
166
|
}
|
|
118
167
|
return this.validate(schema, config);
|
|
119
168
|
}
|
|
169
|
+
/**
|
|
170
|
+
* Validate and sanitize string input
|
|
171
|
+
*/
|
|
120
172
|
validateSanitizedString(input) {
|
|
121
173
|
return this.validate(schemas.SanitizedStringSchema, input);
|
|
122
174
|
}
|
|
175
|
+
/**
|
|
176
|
+
* Validate SQL LIMIT value
|
|
177
|
+
*/
|
|
123
178
|
validateLimit(limit) {
|
|
124
179
|
return this.validate(schemas.LimitSchema, limit);
|
|
125
180
|
}
|
|
181
|
+
/**
|
|
182
|
+
* Validate connection string
|
|
183
|
+
*/
|
|
126
184
|
validateConnectionString(connectionString) {
|
|
127
185
|
return this.validate(schemas.ConnectionStringSchema, connectionString);
|
|
128
186
|
}
|
|
187
|
+
/**
|
|
188
|
+
* Validate freshness monitoring rule
|
|
189
|
+
*/
|
|
129
190
|
validateFreshnessRule(rule) {
|
|
130
191
|
return this.validate(schemas.FreshnessRuleSchema, rule);
|
|
131
192
|
}
|
|
193
|
+
/**
|
|
194
|
+
* Validate volume anomaly monitoring rule
|
|
195
|
+
*/
|
|
132
196
|
validateVolumeRule(rule) {
|
|
133
197
|
return this.validate(schemas.VolumeRuleSchema, rule);
|
|
134
198
|
}
|
|
199
|
+
/**
|
|
200
|
+
* Validate multiple values at once
|
|
201
|
+
*/
|
|
135
202
|
validateBatch(schema, items) {
|
|
136
203
|
const valid = [];
|
|
137
204
|
const invalid = [];
|
|
@@ -146,6 +213,9 @@ export class RuntimeValidator {
|
|
|
146
213
|
});
|
|
147
214
|
return { valid, invalid };
|
|
148
215
|
}
|
|
216
|
+
/**
|
|
217
|
+
* Get validation statistics
|
|
218
|
+
*/
|
|
149
219
|
getStats() {
|
|
150
220
|
return {
|
|
151
221
|
...this.validationStats,
|
|
@@ -154,6 +224,9 @@ export class RuntimeValidator {
|
|
|
154
224
|
: '0%'
|
|
155
225
|
};
|
|
156
226
|
}
|
|
227
|
+
/**
|
|
228
|
+
* Reset validation statistics
|
|
229
|
+
*/
|
|
157
230
|
resetStats() {
|
|
158
231
|
this.validationStats = {
|
|
159
232
|
total: 0,
|
|
@@ -161,21 +234,40 @@ export class RuntimeValidator {
|
|
|
161
234
|
failures: 0
|
|
162
235
|
};
|
|
163
236
|
}
|
|
237
|
+
/**
|
|
238
|
+
* Clear schema cache
|
|
239
|
+
*/
|
|
164
240
|
clearCache() {
|
|
165
241
|
this.schemaCache.clear();
|
|
166
242
|
}
|
|
167
243
|
}
|
|
244
|
+
// ==============================================
|
|
245
|
+
// Convenience Functions
|
|
246
|
+
// ==============================================
|
|
247
|
+
// Global validator instance (can be replaced with DI in production)
|
|
168
248
|
const globalValidator = new RuntimeValidator();
|
|
249
|
+
/**
|
|
250
|
+
* Validate table name (convenience function)
|
|
251
|
+
*/
|
|
169
252
|
export function validateTableName(name) {
|
|
170
253
|
return globalValidator.validateOrThrow(schemas.TableNameSchema, name, 'table name');
|
|
171
254
|
}
|
|
255
|
+
/**
|
|
256
|
+
* Validate column name (convenience function)
|
|
257
|
+
*/
|
|
172
258
|
export function validateColumnName(name) {
|
|
173
259
|
return globalValidator.validateOrThrow(schemas.ColumnNameSchema, name, 'column name');
|
|
174
260
|
}
|
|
261
|
+
/**
|
|
262
|
+
* Validate database identifier (convenience function)
|
|
263
|
+
*/
|
|
175
264
|
export function validateDatabaseIdentifier(identifier, type = 'table') {
|
|
176
265
|
const schema = type === 'table' ? schemas.TableNameSchema : schemas.ColumnNameSchema;
|
|
177
266
|
return globalValidator.validateOrThrow(schema, identifier, `${type} identifier`);
|
|
178
267
|
}
|
|
268
|
+
/**
|
|
269
|
+
* Validate connector configuration (convenience function)
|
|
270
|
+
*/
|
|
179
271
|
export function validateConnectorConfig(config, type) {
|
|
180
272
|
const result = globalValidator.validateConnectorConfig(config, type);
|
|
181
273
|
if (!result.success) {
|
|
@@ -183,24 +275,45 @@ export function validateConnectorConfig(config, type) {
|
|
|
183
275
|
}
|
|
184
276
|
return result.data;
|
|
185
277
|
}
|
|
278
|
+
/**
|
|
279
|
+
* Sanitize string input (convenience function)
|
|
280
|
+
*/
|
|
186
281
|
export function sanitizeString(input) {
|
|
187
282
|
return globalValidator.validateOrThrow(schemas.SanitizedStringSchema, input, 'string input');
|
|
188
283
|
}
|
|
284
|
+
/**
|
|
285
|
+
* Validate SQL LIMIT value (convenience function)
|
|
286
|
+
*/
|
|
189
287
|
export function validateLimit(limit) {
|
|
190
288
|
return globalValidator.validateOrThrow(schemas.LimitSchema, limit, 'LIMIT value');
|
|
191
289
|
}
|
|
290
|
+
/**
|
|
291
|
+
* Validate connection string (convenience function)
|
|
292
|
+
*/
|
|
192
293
|
export function validateConnectionString(connectionString) {
|
|
193
294
|
return globalValidator.validateOrThrow(schemas.ConnectionStringSchema, connectionString, 'connection string');
|
|
194
295
|
}
|
|
296
|
+
// ==============================================
|
|
297
|
+
// Middleware Functions
|
|
298
|
+
// ==============================================
|
|
299
|
+
/**
|
|
300
|
+
* Create validation middleware for automatic validation
|
|
301
|
+
*/
|
|
195
302
|
export function createValidationMiddleware(schema) {
|
|
196
303
|
return (data) => {
|
|
197
304
|
return globalValidator.validateOrThrow(schema, data);
|
|
198
305
|
};
|
|
199
306
|
}
|
|
307
|
+
/**
|
|
308
|
+
* Create async validation middleware
|
|
309
|
+
*/
|
|
200
310
|
export function createAsyncValidationMiddleware(schema) {
|
|
201
311
|
return (data) => {
|
|
202
312
|
return Promise.resolve(globalValidator.validateOrThrow(schema, data));
|
|
203
313
|
};
|
|
204
314
|
}
|
|
315
|
+
// ==============================================
|
|
316
|
+
// Export everything
|
|
317
|
+
// ==============================================
|
|
205
318
|
export { globalValidator as validator, schemas };
|
|
206
319
|
//# sourceMappingURL=runtime-validator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-validator.js","sourceRoot":"","sources":["../../src/validation/runtime-validator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime-validator.js","sourceRoot":"","sources":["../../src/validation/runtime-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Input sanitization utilities for FreshGuard Core Phase 2
|
|
3
|
+
*
|
|
4
|
+
* Provides advanced sanitization functions for secure input handling
|
|
5
|
+
* with configurable security policies and logging.
|
|
6
|
+
*
|
|
7
|
+
* @license MIT
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Sanitization policy configuration
|
|
11
|
+
*/
|
|
1
12
|
export interface SanitizationPolicy {
|
|
13
|
+
/** Remove control characters (0x00-0x1F, 0x7F) */
|
|
2
14
|
removeControlCharacters: boolean;
|
|
15
|
+
/** Remove SQL comment patterns (-- and /* *\/) */
|
|
3
16
|
removeSqlComments: boolean;
|
|
17
|
+
/** Remove dangerous SQL operators (;, etc.) */
|
|
4
18
|
removeSqlOperators: boolean;
|
|
19
|
+
/** Maximum allowed length */
|
|
5
20
|
maxLength: number;
|
|
21
|
+
/** Whether to throw on empty result after sanitization */
|
|
6
22
|
throwOnEmpty: boolean;
|
|
23
|
+
/** Custom patterns to remove */
|
|
7
24
|
customPatterns?: RegExp[];
|
|
25
|
+
/** Allow Unicode characters */
|
|
8
26
|
allowUnicode: boolean;
|
|
9
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* Result of sanitization operation
|
|
30
|
+
*/
|
|
10
31
|
export interface SanitizationResult {
|
|
32
|
+
/** The sanitized value */
|
|
11
33
|
value: string;
|
|
34
|
+
/** Whether any changes were made */
|
|
12
35
|
wasModified: boolean;
|
|
36
|
+
/** List of modifications made */
|
|
13
37
|
modifications: string[];
|
|
38
|
+
/** Original length */
|
|
14
39
|
originalLength: number;
|
|
40
|
+
/** Final length */
|
|
15
41
|
finalLength: number;
|
|
16
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Sanitize string input with configurable policy
|
|
45
|
+
*/
|
|
17
46
|
export declare function sanitizeString(input: unknown, policy?: Partial<SanitizationPolicy>): SanitizationResult;
|
|
47
|
+
/**
|
|
48
|
+
* Sanitize SQL identifier (table name, column name)
|
|
49
|
+
*/
|
|
18
50
|
export declare function sanitizeIdentifier(input: unknown): SanitizationResult;
|
|
51
|
+
/**
|
|
52
|
+
* Sanitize user input (lenient approach)
|
|
53
|
+
*/
|
|
19
54
|
export declare function sanitizeUserInput(input: unknown, maxLength?: number): SanitizationResult;
|
|
55
|
+
/**
|
|
56
|
+
* Sanitize filename/path (prevent directory traversal)
|
|
57
|
+
*/
|
|
20
58
|
export declare function sanitizePath(input: unknown): SanitizationResult;
|
|
59
|
+
/**
|
|
60
|
+
* Sanitize email address
|
|
61
|
+
*/
|
|
21
62
|
export declare function sanitizeEmail(input: unknown): SanitizationResult;
|
|
63
|
+
/**
|
|
64
|
+
* Sanitize URL
|
|
65
|
+
*/
|
|
22
66
|
export declare function sanitizeUrl(input: unknown): SanitizationResult;
|
|
67
|
+
/**
|
|
68
|
+
* Sanitize JSON string (for configuration)
|
|
69
|
+
*/
|
|
23
70
|
export declare function sanitizeJson(input: unknown): SanitizationResult;
|
|
71
|
+
/**
|
|
72
|
+
* Sanitize multiple strings with the same policy
|
|
73
|
+
*/
|
|
24
74
|
export declare function sanitizeBatch(inputs: unknown[], policy?: Partial<SanitizationPolicy>): {
|
|
25
75
|
results: SanitizationResult[];
|
|
26
76
|
summary: {
|
|
@@ -29,11 +79,20 @@ export declare function sanitizeBatch(inputs: unknown[], policy?: Partial<Saniti
|
|
|
29
79
|
errors: number;
|
|
30
80
|
};
|
|
31
81
|
};
|
|
82
|
+
/**
|
|
83
|
+
* Check if string contains dangerous patterns
|
|
84
|
+
*/
|
|
32
85
|
export declare function containsDangerousPatterns(input: string): {
|
|
33
86
|
isDangerous: boolean;
|
|
34
87
|
patterns: string[];
|
|
35
88
|
};
|
|
89
|
+
/**
|
|
90
|
+
* Escape string for use in SQL queries (additional safety)
|
|
91
|
+
*/
|
|
36
92
|
export declare function escapeForSql(input: string): string;
|
|
93
|
+
/**
|
|
94
|
+
* Create safe string for logging (redact sensitive info)
|
|
95
|
+
*/
|
|
37
96
|
export declare function createLogSafeString(input: string, maxLength?: number): string;
|
|
38
97
|
export declare const sanitizers: {
|
|
39
98
|
readonly sanitizeString: typeof sanitizeString;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitizers.d.ts","sourceRoot":"","sources":["../../src/validation/sanitizers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sanitizers.d.ts","sourceRoot":"","sources":["../../src/validation/sanitizers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,kDAAkD;IAClD,uBAAuB,EAAE,OAAO,CAAC;IACjC,kDAAkD;IAClD,iBAAiB,EAAE,OAAO,CAAC;IAC3B,+CAA+C;IAC/C,kBAAkB,EAAE,OAAO,CAAC;IAC5B,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,YAAY,EAAE,OAAO,CAAC;IACtB,gCAAgC;IAChC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,+BAA+B;IAC/B,YAAY,EAAE,OAAO,CAAC;CACvB;AA8CD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,WAAW,EAAE,OAAO,CAAC;IACrB,iCAAiC;IACjC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,sBAAsB;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,MAAM,GAAE,OAAO,CAAC,kBAAkB,CAAM,GACvC,kBAAkB,CA2FpB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,CAErE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,SAAO,GAAG,kBAAkB,CAKtF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,CAiB/D;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,CAqBhE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,CAuB9D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,CAsB/D;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,OAAO,EAAE,EACjB,MAAM,GAAE,OAAO,CAAC,kBAAkB,CAAM,GACvC;IACD,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;CACF,CAiCA;AAMD;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG;IACxD,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB,CAqBA;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUlD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,MAAM,CAc1E;AAMD,eAAO,MAAM,UAAU;;;;;;;;;;;;CAYb,CAAC;AAEX,eAAO,MAAM,QAAQ;;;;CAIX,CAAC"}
|