@freshguard/freshguard-core 0.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +644 -0
  3. package/dist/cli/index.d.ts +3 -0
  4. package/dist/cli/index.d.ts.map +1 -0
  5. package/dist/cli/index.js +350 -0
  6. package/dist/cli/index.js.map +1 -0
  7. package/dist/connectors/base-connector.d.ts +62 -0
  8. package/dist/connectors/base-connector.d.ts.map +1 -0
  9. package/dist/connectors/base-connector.js +549 -0
  10. package/dist/connectors/base-connector.js.map +1 -0
  11. package/dist/connectors/bigquery.d.ts +38 -0
  12. package/dist/connectors/bigquery.d.ts.map +1 -0
  13. package/dist/connectors/bigquery.js +406 -0
  14. package/dist/connectors/bigquery.js.map +1 -0
  15. package/dist/connectors/duckdb.d.ts +36 -0
  16. package/dist/connectors/duckdb.d.ts.map +1 -0
  17. package/dist/connectors/duckdb.js +364 -0
  18. package/dist/connectors/duckdb.js.map +1 -0
  19. package/dist/connectors/index.d.ts +7 -0
  20. package/dist/connectors/index.d.ts.map +1 -0
  21. package/dist/connectors/index.js +7 -0
  22. package/dist/connectors/index.js.map +1 -0
  23. package/dist/connectors/mysql.d.ts +32 -0
  24. package/dist/connectors/mysql.d.ts.map +1 -0
  25. package/dist/connectors/mysql.js +348 -0
  26. package/dist/connectors/mysql.js.map +1 -0
  27. package/dist/connectors/postgres.d.ts +31 -0
  28. package/dist/connectors/postgres.d.ts.map +1 -0
  29. package/dist/connectors/postgres.js +326 -0
  30. package/dist/connectors/postgres.js.map +1 -0
  31. package/dist/connectors/redshift.d.ts +32 -0
  32. package/dist/connectors/redshift.d.ts.map +1 -0
  33. package/dist/connectors/redshift.js +366 -0
  34. package/dist/connectors/redshift.js.map +1 -0
  35. package/dist/connectors/snowflake.d.ts +43 -0
  36. package/dist/connectors/snowflake.d.ts.map +1 -0
  37. package/dist/connectors/snowflake.js +442 -0
  38. package/dist/connectors/snowflake.js.map +1 -0
  39. package/dist/db/index.d.ts +9 -0
  40. package/dist/db/index.d.ts.map +1 -0
  41. package/dist/db/index.js +10 -0
  42. package/dist/db/index.js.map +1 -0
  43. package/dist/db/migrate.d.ts +12 -0
  44. package/dist/db/migrate.d.ts.map +1 -0
  45. package/dist/db/migrate.js +114 -0
  46. package/dist/db/migrate.js.map +1 -0
  47. package/dist/db/schema.d.ts +2053 -0
  48. package/dist/db/schema.d.ts.map +1 -0
  49. package/dist/db/schema.js +164 -0
  50. package/dist/db/schema.js.map +1 -0
  51. package/dist/errors/debug-factory.d.ts +23 -0
  52. package/dist/errors/debug-factory.d.ts.map +1 -0
  53. package/dist/errors/debug-factory.js +149 -0
  54. package/dist/errors/debug-factory.js.map +1 -0
  55. package/dist/errors/index.d.ts +119 -0
  56. package/dist/errors/index.d.ts.map +1 -0
  57. package/dist/errors/index.js +341 -0
  58. package/dist/errors/index.js.map +1 -0
  59. package/dist/index.d.ts +9 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +6 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/metadata/duckdb-storage.d.ts +31 -0
  64. package/dist/metadata/duckdb-storage.d.ts.map +1 -0
  65. package/dist/metadata/duckdb-storage.js +230 -0
  66. package/dist/metadata/duckdb-storage.js.map +1 -0
  67. package/dist/metadata/factory.d.ts +4 -0
  68. package/dist/metadata/factory.d.ts.map +1 -0
  69. package/dist/metadata/factory.js +23 -0
  70. package/dist/metadata/factory.js.map +1 -0
  71. package/dist/metadata/index.d.ts +6 -0
  72. package/dist/metadata/index.d.ts.map +1 -0
  73. package/dist/metadata/index.js +4 -0
  74. package/dist/metadata/index.js.map +1 -0
  75. package/dist/metadata/interface.d.ts +26 -0
  76. package/dist/metadata/interface.d.ts.map +1 -0
  77. package/dist/metadata/interface.js +2 -0
  78. package/dist/metadata/interface.js.map +1 -0
  79. package/dist/metadata/postgresql-storage.d.ts +32 -0
  80. package/dist/metadata/postgresql-storage.d.ts.map +1 -0
  81. package/dist/metadata/postgresql-storage.js +242 -0
  82. package/dist/metadata/postgresql-storage.js.map +1 -0
  83. package/dist/metadata/schema-config.d.ts +30 -0
  84. package/dist/metadata/schema-config.d.ts.map +1 -0
  85. package/dist/metadata/schema-config.js +94 -0
  86. package/dist/metadata/schema-config.js.map +1 -0
  87. package/dist/metadata/types.d.ts +35 -0
  88. package/dist/metadata/types.d.ts.map +1 -0
  89. package/dist/metadata/types.js +2 -0
  90. package/dist/metadata/types.js.map +1 -0
  91. package/dist/monitor/baseline-calculator.d.ts +30 -0
  92. package/dist/monitor/baseline-calculator.d.ts.map +1 -0
  93. package/dist/monitor/baseline-calculator.js +192 -0
  94. package/dist/monitor/baseline-calculator.js.map +1 -0
  95. package/dist/monitor/baseline-config.d.ts +37 -0
  96. package/dist/monitor/baseline-config.d.ts.map +1 -0
  97. package/dist/monitor/baseline-config.js +156 -0
  98. package/dist/monitor/baseline-config.js.map +1 -0
  99. package/dist/monitor/freshness.d.ts +5 -0
  100. package/dist/monitor/freshness.d.ts.map +1 -0
  101. package/dist/monitor/freshness.js +239 -0
  102. package/dist/monitor/freshness.js.map +1 -0
  103. package/dist/monitor/index.d.ts +5 -0
  104. package/dist/monitor/index.d.ts.map +1 -0
  105. package/dist/monitor/index.js +5 -0
  106. package/dist/monitor/index.js.map +1 -0
  107. package/dist/monitor/schema-baseline.d.ts +22 -0
  108. package/dist/monitor/schema-baseline.d.ts.map +1 -0
  109. package/dist/monitor/schema-baseline.js +211 -0
  110. package/dist/monitor/schema-baseline.js.map +1 -0
  111. package/dist/monitor/schema-changes.d.ts +5 -0
  112. package/dist/monitor/schema-changes.d.ts.map +1 -0
  113. package/dist/monitor/schema-changes.js +289 -0
  114. package/dist/monitor/schema-changes.js.map +1 -0
  115. package/dist/monitor/volume.d.ts +5 -0
  116. package/dist/monitor/volume.d.ts.map +1 -0
  117. package/dist/monitor/volume.js +262 -0
  118. package/dist/monitor/volume.js.map +1 -0
  119. package/dist/observability/logger.d.ts +63 -0
  120. package/dist/observability/logger.d.ts.map +1 -0
  121. package/dist/observability/logger.js +282 -0
  122. package/dist/observability/logger.js.map +1 -0
  123. package/dist/observability/metrics.d.ts +106 -0
  124. package/dist/observability/metrics.d.ts.map +1 -0
  125. package/dist/observability/metrics.js +441 -0
  126. package/dist/observability/metrics.js.map +1 -0
  127. package/dist/query-analyzer.js +526 -0
  128. package/dist/resilience/circuit-breaker.d.ts +94 -0
  129. package/dist/resilience/circuit-breaker.d.ts.map +1 -0
  130. package/dist/resilience/circuit-breaker.js +379 -0
  131. package/dist/resilience/circuit-breaker.js.map +1 -0
  132. package/dist/resilience/index.d.ts +7 -0
  133. package/dist/resilience/index.d.ts.map +1 -0
  134. package/dist/resilience/index.js +7 -0
  135. package/dist/resilience/index.js.map +1 -0
  136. package/dist/resilience/retry-policy.d.ts +87 -0
  137. package/dist/resilience/retry-policy.d.ts.map +1 -0
  138. package/dist/resilience/retry-policy.js +423 -0
  139. package/dist/resilience/retry-policy.js.map +1 -0
  140. package/dist/resilience/timeout-manager.d.ts +97 -0
  141. package/dist/resilience/timeout-manager.d.ts.map +1 -0
  142. package/dist/resilience/timeout-manager.js +339 -0
  143. package/dist/resilience/timeout-manager.js.map +1 -0
  144. package/dist/security/query-analyzer.d.ts +82 -0
  145. package/dist/security/query-analyzer.d.ts.map +1 -0
  146. package/dist/security/query-analyzer.js +381 -0
  147. package/dist/security/query-analyzer.js.map +1 -0
  148. package/dist/security/schema-cache.d.ts +95 -0
  149. package/dist/security/schema-cache.d.ts.map +1 -0
  150. package/dist/security/schema-cache.js +344 -0
  151. package/dist/security/schema-cache.js.map +1 -0
  152. package/dist/types/connector.d.ts +68 -0
  153. package/dist/types/connector.d.ts.map +1 -0
  154. package/dist/types/connector.js +26 -0
  155. package/dist/types/connector.js.map +1 -0
  156. package/dist/types.d.ts +244 -0
  157. package/dist/types.d.ts.map +1 -0
  158. package/dist/types.js +2 -0
  159. package/dist/types.js.map +1 -0
  160. package/dist/validation/index.d.ts +7 -0
  161. package/dist/validation/index.d.ts.map +1 -0
  162. package/dist/validation/index.js +5 -0
  163. package/dist/validation/index.js.map +1 -0
  164. package/dist/validation/runtime-validator.d.ts +70 -0
  165. package/dist/validation/runtime-validator.d.ts.map +1 -0
  166. package/dist/validation/runtime-validator.js +206 -0
  167. package/dist/validation/runtime-validator.js.map +1 -0
  168. package/dist/validation/sanitizers.d.ts +56 -0
  169. package/dist/validation/sanitizers.d.ts.map +1 -0
  170. package/dist/validation/sanitizers.js +264 -0
  171. package/dist/validation/sanitizers.js.map +1 -0
  172. package/dist/validation/schemas.d.ts +224 -0
  173. package/dist/validation/schemas.d.ts.map +1 -0
  174. package/dist/validation/schemas.js +263 -0
  175. package/dist/validation/schemas.js.map +1 -0
  176. package/dist/validators/index.d.ts +18 -0
  177. package/dist/validators/index.d.ts.map +1 -0
  178. package/dist/validators/index.js +209 -0
  179. package/dist/validators/index.js.map +1 -0
  180. package/package.json +91 -0
@@ -0,0 +1,244 @@
1
+ export type DataSourceType = 'postgres' | 'duckdb' | 'bigquery' | 'snowflake';
2
+ export type RuleType = 'freshness' | 'volume_anomaly' | 'schema_change' | 'custom_sql';
3
+ export type CheckStatus = 'ok' | 'alert' | 'failed' | 'pending';
4
+ export type AlertDestinationType = 'slack' | 'email' | 'pagerduty' | 'webhook';
5
+ export type SeverityLevel = 'low' | 'medium' | 'high' | 'critical';
6
+ export interface SourceCredentials {
7
+ host?: string;
8
+ port?: number;
9
+ database?: string;
10
+ username?: string;
11
+ password?: string;
12
+ connectionString?: string;
13
+ sslMode?: 'disable' | 'require' | 'verify-ca' | 'verify-full';
14
+ additionalOptions?: Record<string, unknown>;
15
+ }
16
+ export interface DataSource {
17
+ id: string;
18
+ name: string;
19
+ type: DataSourceType;
20
+ credentials: SourceCredentials;
21
+ isActive: boolean;
22
+ lastTestedAt?: Date;
23
+ lastTestSuccess?: boolean;
24
+ lastError?: string;
25
+ tableCount?: number;
26
+ estimatedSizeBytes?: number;
27
+ createdAt: Date;
28
+ updatedAt: Date;
29
+ }
30
+ export interface MonitoringRule {
31
+ id: string;
32
+ sourceId: string;
33
+ name: string;
34
+ description?: string;
35
+ tableName: string;
36
+ ruleType: RuleType;
37
+ expectedFrequency?: string;
38
+ toleranceMinutes?: number;
39
+ timestampColumn?: string;
40
+ baselineWindowDays?: number;
41
+ deviationThresholdPercent?: number;
42
+ minimumRowCount?: number;
43
+ baselineConfig?: {
44
+ windowDays?: number;
45
+ minimumDataPoints?: number;
46
+ timeoutSeconds?: number;
47
+ excludeWeekends?: boolean;
48
+ calculationMethod?: 'mean' | 'median' | 'trimmed_mean';
49
+ trimmedMeanPercentile?: number;
50
+ seasonalAdjustment?: boolean;
51
+ };
52
+ trackColumnChanges?: boolean;
53
+ trackTableChanges?: boolean;
54
+ schemaChangeConfig?: {
55
+ adaptationMode?: 'auto' | 'manual' | 'alert_only';
56
+ monitoringMode?: 'full' | 'partial';
57
+ trackedColumns?: {
58
+ columns?: string[];
59
+ alertLevel?: 'low' | 'medium' | 'high';
60
+ trackTypes?: boolean;
61
+ trackNullability?: boolean;
62
+ };
63
+ baselineRefreshDays?: number;
64
+ };
65
+ customSql?: string;
66
+ expectedResult?: unknown;
67
+ checkIntervalMinutes: number;
68
+ timezone?: string;
69
+ isActive: boolean;
70
+ lastCheckAt?: Date;
71
+ lastStatus?: CheckStatus;
72
+ consecutiveFailures?: number;
73
+ createdAt: Date;
74
+ updatedAt: Date;
75
+ }
76
+ export interface AlertDestination {
77
+ id: string;
78
+ ruleId: string;
79
+ destinationType: AlertDestinationType;
80
+ destinationAddress: string;
81
+ severityLevel?: SeverityLevel;
82
+ alertOnRecovery?: boolean;
83
+ cooldownMinutes?: number;
84
+ messageTemplate?: string;
85
+ includeQueryResults?: boolean;
86
+ isActive: boolean;
87
+ createdAt: Date;
88
+ }
89
+ export interface DebugInfo {
90
+ query?: string;
91
+ params?: unknown[];
92
+ rawError?: string;
93
+ suggestion?: string;
94
+ duration?: number;
95
+ debugId?: string;
96
+ context?: Record<string, unknown>;
97
+ }
98
+ export interface DebugConfig {
99
+ enabled?: boolean;
100
+ exposeQueries?: boolean;
101
+ exposeRawErrors?: boolean;
102
+ logLevel?: 'error' | 'warn' | 'info' | 'debug';
103
+ correlationId?: string;
104
+ }
105
+ export interface CheckResult {
106
+ status: CheckStatus;
107
+ rowCount?: number;
108
+ lastUpdate?: Date;
109
+ lagMinutes?: number;
110
+ deviation?: number;
111
+ baselineAverage?: number;
112
+ schemaChanges?: SchemaChanges;
113
+ error?: string;
114
+ queryExecuted?: string;
115
+ executionDurationMs?: number;
116
+ executedAt: Date;
117
+ nextCheckAt?: Date;
118
+ debugId?: string;
119
+ debug?: DebugInfo;
120
+ }
121
+ export interface CheckExecution {
122
+ id: string;
123
+ ruleId: string;
124
+ sourceId: string;
125
+ status: CheckStatus;
126
+ errorMessage?: string;
127
+ queryExecuted?: string;
128
+ executionDurationMs?: number;
129
+ rowCount?: number;
130
+ lastUpdate?: Date;
131
+ lagMinutes?: number;
132
+ baselineAverage?: number;
133
+ currentDeviationPercent?: number;
134
+ schemaChanges?: unknown;
135
+ executedAt: Date;
136
+ nextCheckAt?: Date;
137
+ }
138
+ export interface ColumnChange {
139
+ columnName: string;
140
+ changeType: 'added' | 'removed' | 'type_changed' | 'nullability_changed';
141
+ oldValue?: string;
142
+ newValue?: string;
143
+ impact: 'safe' | 'warning' | 'breaking';
144
+ }
145
+ export interface SchemaChanges {
146
+ hasChanges: boolean;
147
+ addedColumns: ColumnChange[];
148
+ removedColumns: ColumnChange[];
149
+ modifiedColumns: ColumnChange[];
150
+ summary: string;
151
+ changeCount: number;
152
+ severity: 'low' | 'medium' | 'high';
153
+ }
154
+ export interface SchemaBaseline {
155
+ ruleId: string;
156
+ tableName: string;
157
+ schema: import('./types/connector.js').TableSchema;
158
+ capturedAt: Date;
159
+ schemaHash: string;
160
+ }
161
+ export interface AlertLogEntry {
162
+ id: string;
163
+ executionId: string;
164
+ ruleId: string;
165
+ alertType: string;
166
+ destinationType: AlertDestinationType;
167
+ destinationAddress: string;
168
+ subject?: string;
169
+ messageContent?: string;
170
+ alertSeverity: SeverityLevel;
171
+ status: 'pending' | 'sent' | 'failed';
172
+ deliveryAttempts: number;
173
+ lastAttemptAt?: Date;
174
+ errorMessage?: string;
175
+ externalId?: string;
176
+ sentAt?: Date;
177
+ createdAt: Date;
178
+ }
179
+ export interface CreateSourceRequest {
180
+ name: string;
181
+ type: DataSourceType;
182
+ credentials: SourceCredentials;
183
+ }
184
+ export interface TestConnectionResponse {
185
+ success: boolean;
186
+ tableCount?: number;
187
+ tables?: string[];
188
+ error?: string;
189
+ }
190
+ export interface CreateRuleRequest {
191
+ sourceId: string;
192
+ name: string;
193
+ description?: string;
194
+ tableName: string;
195
+ ruleType: RuleType;
196
+ toleranceMinutes?: number;
197
+ timestampColumn?: string;
198
+ baselineWindowDays?: number;
199
+ deviationThresholdPercent?: number;
200
+ minimumRowCount?: number;
201
+ checkIntervalMinutes: number;
202
+ alertDestinations?: Omit<AlertDestination, 'id' | 'ruleId' | 'createdAt'>[];
203
+ }
204
+ export interface UpdateRuleRequest {
205
+ name?: string;
206
+ description?: string;
207
+ isActive?: boolean;
208
+ toleranceMinutes?: number;
209
+ deviationThresholdPercent?: number;
210
+ checkIntervalMinutes?: number;
211
+ }
212
+ export interface TriggerCheckRequest {
213
+ ruleId: string;
214
+ }
215
+ export interface TriggerCheckResponse {
216
+ executionId: string;
217
+ result: CheckResult;
218
+ }
219
+ export interface FreshGuardConfig {
220
+ sources: Record<string, {
221
+ type: DataSourceType;
222
+ url?: string;
223
+ credentials?: SourceCredentials;
224
+ }>;
225
+ rules: {
226
+ id: string;
227
+ sourceId: string;
228
+ table: string;
229
+ type: RuleType;
230
+ frequency: number;
231
+ tolerance?: number;
232
+ alerts: {
233
+ type: AlertDestinationType;
234
+ address: string;
235
+ }[];
236
+ }[];
237
+ scheduler?: {
238
+ enabled: boolean;
239
+ timezone?: string;
240
+ };
241
+ timeoutMs?: number;
242
+ debug?: DebugConfig;
243
+ }
244
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ export * from './schemas.js';
2
+ export * from './runtime-validator.js';
3
+ export * from './sanitizers.js';
4
+ export { validateTableName, validateColumnName, validateDatabaseIdentifier, validateConnectorConfig, sanitizeString, validateLimit, validateConnectionString } from './runtime-validator.js';
5
+ export type { ValidationError, ValidationResult } from './runtime-validator.js';
6
+ export type { SanitizationPolicy, SanitizationResult } from './sanitizers.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AAUA,cAAc,cAAc,CAAC;AAG7B,cAAc,wBAAwB,CAAC;AAGvC,cAAc,iBAAiB,CAAC;AAGhC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,0BAA0B,EAC1B,uBAAuB,EACvB,cAAc,EACd,aAAa,EACb,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAGhC,YAAY,EACV,eAAe,EACf,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAGhC,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './schemas.js';
2
+ export * from './runtime-validator.js';
3
+ export * from './sanitizers.js';
4
+ export { validateTableName, validateColumnName, validateDatabaseIdentifier, validateConnectorConfig, sanitizeString, validateLimit, validateConnectionString } from './runtime-validator.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AAUA,cAAc,cAAc,CAAC;AAG7B,cAAc,wBAAwB,CAAC;AAGvC,cAAc,iBAAiB,CAAC;AAGhC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,0BAA0B,EAC1B,uBAAuB,EACvB,cAAc,EACd,aAAa,EACb,wBAAwB,EACzB,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,70 @@
1
+ import { z } from 'zod';
2
+ import { schemas } from './schemas.js';
3
+ export interface ValidationError {
4
+ field: string;
5
+ code: string;
6
+ message: string;
7
+ value?: unknown;
8
+ }
9
+ export type ValidationResult<T> = {
10
+ success: true;
11
+ data: T;
12
+ } | {
13
+ success: false;
14
+ errors: ValidationError[];
15
+ };
16
+ export declare class ValidationException extends Error {
17
+ readonly errors: ValidationError[];
18
+ readonly timestamp: Date;
19
+ constructor(errors: ValidationError[], message?: string);
20
+ getFormattedErrors(): string;
21
+ toJSON(): {
22
+ name: string;
23
+ message: string;
24
+ errors: ValidationError[];
25
+ timestamp: Date;
26
+ };
27
+ }
28
+ export declare class RuntimeValidator {
29
+ private readonly schemaCache;
30
+ private validationStats;
31
+ constructor();
32
+ validate<T>(schema: z.ZodSchema<T>, data: unknown): ValidationResult<T>;
33
+ validateOrThrow<T>(schema: z.ZodSchema<T>, data: unknown, context?: string): T;
34
+ validateTableName(name: unknown): ValidationResult<string>;
35
+ validateColumnName(name: unknown): ValidationResult<string>;
36
+ validateDatabaseIdentifier(identifier: unknown, type?: 'table' | 'column'): ValidationResult<string>;
37
+ validateConnectorConfig(config: unknown, type?: 'postgres' | 'duckdb' | 'bigquery' | 'snowflake'): ValidationResult<any>;
38
+ validateSanitizedString(input: unknown): ValidationResult<string>;
39
+ validateLimit(limit: unknown): ValidationResult<number>;
40
+ validateConnectionString(connectionString: unknown): ValidationResult<string>;
41
+ validateFreshnessRule(rule: unknown): ValidationResult<z.infer<typeof schemas.FreshnessRuleSchema>>;
42
+ validateVolumeRule(rule: unknown): ValidationResult<z.infer<typeof schemas.VolumeRuleSchema>>;
43
+ validateBatch<T>(schema: z.ZodSchema<T>, items: unknown[]): {
44
+ valid: T[];
45
+ invalid: {
46
+ index: number;
47
+ errors: ValidationError[];
48
+ }[];
49
+ };
50
+ getStats(): {
51
+ successRate: string;
52
+ total: number;
53
+ successes: number;
54
+ failures: number;
55
+ };
56
+ resetStats(): void;
57
+ clearCache(): void;
58
+ }
59
+ declare const globalValidator: RuntimeValidator;
60
+ export declare function validateTableName(name: unknown): string;
61
+ export declare function validateColumnName(name: unknown): string;
62
+ export declare function validateDatabaseIdentifier(identifier: unknown, type?: 'table' | 'column'): string;
63
+ export declare function validateConnectorConfig(config: unknown, type?: 'postgres' | 'duckdb' | 'bigquery' | 'snowflake'): any;
64
+ export declare function sanitizeString(input: unknown): string;
65
+ export declare function validateLimit(limit: unknown): number;
66
+ export declare function validateConnectionString(connectionString: unknown): string;
67
+ export declare function createValidationMiddleware<T>(schema: z.ZodSchema<T>): (data: unknown) => T;
68
+ export declare function createAsyncValidationMiddleware<T>(schema: z.ZodSchema<T>): (data: unknown) => Promise<T>;
69
+ export { globalValidator as validator, schemas };
70
+ //# sourceMappingURL=runtime-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-validator.d.ts","sourceRoot":"","sources":["../../src/validation/runtime-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,206 @@
1
+ import { z } from 'zod';
2
+ import { schemas } from './schemas.js';
3
+ export class ValidationException extends Error {
4
+ errors;
5
+ timestamp;
6
+ constructor(errors, message) {
7
+ const defaultMessage = `Validation failed with ${errors.length} error${errors.length === 1 ? '' : 's'}`;
8
+ super(message || defaultMessage);
9
+ this.name = 'ValidationException';
10
+ this.errors = errors;
11
+ this.timestamp = new Date();
12
+ }
13
+ getFormattedErrors() {
14
+ return this.errors
15
+ .map(error => `${error.field}: ${error.message}`)
16
+ .join(', ');
17
+ }
18
+ toJSON() {
19
+ return {
20
+ name: this.name,
21
+ message: this.message,
22
+ errors: this.errors,
23
+ timestamp: this.timestamp
24
+ };
25
+ }
26
+ }
27
+ function formatZodErrors(zodError) {
28
+ return zodError.issues.map((issue) => ({
29
+ field: issue.path.join('.') || 'root',
30
+ code: issue.code,
31
+ message: issue.message,
32
+ value: issue.path.length > 0 ? undefined : issue.received
33
+ }));
34
+ }
35
+ export class RuntimeValidator {
36
+ schemaCache = new Map();
37
+ validationStats = {
38
+ total: 0,
39
+ successes: 0,
40
+ failures: 0
41
+ };
42
+ constructor() {
43
+ this.schemaCache.set('TableName', schemas.TableNameSchema);
44
+ this.schemaCache.set('ColumnName', schemas.ColumnNameSchema);
45
+ this.schemaCache.set('BaseConnectorConfig', schemas.BaseConnectorConfigSchema);
46
+ this.schemaCache.set('PostgresConnectorConfig', schemas.PostgresConnectorConfigSchema);
47
+ this.schemaCache.set('DuckDBConnectorConfig', schemas.DuckDBConnectorConfigSchema);
48
+ this.schemaCache.set('BigQueryConnectorConfig', schemas.BigQueryConnectorConfigSchema);
49
+ this.schemaCache.set('SnowflakeConnectorConfig', schemas.SnowflakeConnectorConfigSchema);
50
+ }
51
+ validate(schema, data) {
52
+ this.validationStats.total++;
53
+ try {
54
+ const result = schema.parse(data);
55
+ this.validationStats.successes++;
56
+ return {
57
+ success: true,
58
+ data: result
59
+ };
60
+ }
61
+ catch (error) {
62
+ this.validationStats.failures++;
63
+ if (error instanceof z.ZodError) {
64
+ const validationErrors = formatZodErrors(error);
65
+ return {
66
+ success: false,
67
+ errors: validationErrors
68
+ };
69
+ }
70
+ return {
71
+ success: false,
72
+ errors: [{
73
+ field: 'unknown',
74
+ code: 'unknown_error',
75
+ message: error instanceof Error ? error.message : 'Unknown validation error'
76
+ }]
77
+ };
78
+ }
79
+ }
80
+ validateOrThrow(schema, data, context) {
81
+ const result = this.validate(schema, data);
82
+ if (!result.success) {
83
+ const message = context
84
+ ? `Validation failed for ${context}`
85
+ : 'Validation failed';
86
+ throw new ValidationException(result.errors, message);
87
+ }
88
+ return result.data;
89
+ }
90
+ validateTableName(name) {
91
+ return this.validate(schemas.TableNameSchema, name);
92
+ }
93
+ validateColumnName(name) {
94
+ return this.validate(schemas.ColumnNameSchema, name);
95
+ }
96
+ validateDatabaseIdentifier(identifier, type = 'table') {
97
+ const schema = type === 'table' ? schemas.TableNameSchema : schemas.ColumnNameSchema;
98
+ return this.validate(schema, identifier);
99
+ }
100
+ validateConnectorConfig(config, type) {
101
+ let schema;
102
+ switch (type) {
103
+ case 'postgres':
104
+ schema = schemas.PostgresConnectorConfigSchema;
105
+ break;
106
+ case 'duckdb':
107
+ schema = schemas.DuckDBConnectorConfigSchema;
108
+ break;
109
+ case 'bigquery':
110
+ schema = schemas.BigQueryConnectorConfigSchema;
111
+ break;
112
+ case 'snowflake':
113
+ schema = schemas.SnowflakeConnectorConfigSchema;
114
+ break;
115
+ default:
116
+ schema = schemas.BaseConnectorConfigSchema;
117
+ }
118
+ return this.validate(schema, config);
119
+ }
120
+ validateSanitizedString(input) {
121
+ return this.validate(schemas.SanitizedStringSchema, input);
122
+ }
123
+ validateLimit(limit) {
124
+ return this.validate(schemas.LimitSchema, limit);
125
+ }
126
+ validateConnectionString(connectionString) {
127
+ return this.validate(schemas.ConnectionStringSchema, connectionString);
128
+ }
129
+ validateFreshnessRule(rule) {
130
+ return this.validate(schemas.FreshnessRuleSchema, rule);
131
+ }
132
+ validateVolumeRule(rule) {
133
+ return this.validate(schemas.VolumeRuleSchema, rule);
134
+ }
135
+ validateBatch(schema, items) {
136
+ const valid = [];
137
+ const invalid = [];
138
+ items.forEach((item, index) => {
139
+ const result = this.validate(schema, item);
140
+ if (result.success) {
141
+ valid.push(result.data);
142
+ }
143
+ else {
144
+ invalid.push({ index, errors: result.errors });
145
+ }
146
+ });
147
+ return { valid, invalid };
148
+ }
149
+ getStats() {
150
+ return {
151
+ ...this.validationStats,
152
+ successRate: this.validationStats.total > 0
153
+ ? (this.validationStats.successes / this.validationStats.total * 100).toFixed(2) + '%'
154
+ : '0%'
155
+ };
156
+ }
157
+ resetStats() {
158
+ this.validationStats = {
159
+ total: 0,
160
+ successes: 0,
161
+ failures: 0
162
+ };
163
+ }
164
+ clearCache() {
165
+ this.schemaCache.clear();
166
+ }
167
+ }
168
+ const globalValidator = new RuntimeValidator();
169
+ export function validateTableName(name) {
170
+ return globalValidator.validateOrThrow(schemas.TableNameSchema, name, 'table name');
171
+ }
172
+ export function validateColumnName(name) {
173
+ return globalValidator.validateOrThrow(schemas.ColumnNameSchema, name, 'column name');
174
+ }
175
+ export function validateDatabaseIdentifier(identifier, type = 'table') {
176
+ const schema = type === 'table' ? schemas.TableNameSchema : schemas.ColumnNameSchema;
177
+ return globalValidator.validateOrThrow(schema, identifier, `${type} identifier`);
178
+ }
179
+ export function validateConnectorConfig(config, type) {
180
+ const result = globalValidator.validateConnectorConfig(config, type);
181
+ if (!result.success) {
182
+ throw new ValidationException(result.errors, `Invalid ${type || 'base'} connector configuration`);
183
+ }
184
+ return result.data;
185
+ }
186
+ export function sanitizeString(input) {
187
+ return globalValidator.validateOrThrow(schemas.SanitizedStringSchema, input, 'string input');
188
+ }
189
+ export function validateLimit(limit) {
190
+ return globalValidator.validateOrThrow(schemas.LimitSchema, limit, 'LIMIT value');
191
+ }
192
+ export function validateConnectionString(connectionString) {
193
+ return globalValidator.validateOrThrow(schemas.ConnectionStringSchema, connectionString, 'connection string');
194
+ }
195
+ export function createValidationMiddleware(schema) {
196
+ return (data) => {
197
+ return globalValidator.validateOrThrow(schema, data);
198
+ };
199
+ }
200
+ export function createAsyncValidationMiddleware(schema) {
201
+ return async (data) => {
202
+ return globalValidator.validateOrThrow(schema, data);
203
+ };
204
+ }
205
+ export { globalValidator as validator, schemas };
206
+ //# sourceMappingURL=runtime-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-validator.js","sourceRoot":"","sources":["../../src/validation/runtime-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ export interface SanitizationPolicy {
2
+ removeControlCharacters: boolean;
3
+ removeSqlComments: boolean;
4
+ removeSqlOperators: boolean;
5
+ maxLength: number;
6
+ throwOnEmpty: boolean;
7
+ customPatterns?: RegExp[];
8
+ allowUnicode: boolean;
9
+ }
10
+ export interface SanitizationResult {
11
+ value: string;
12
+ wasModified: boolean;
13
+ modifications: string[];
14
+ originalLength: number;
15
+ finalLength: number;
16
+ }
17
+ export declare function sanitizeString(input: unknown, policy?: Partial<SanitizationPolicy>): SanitizationResult;
18
+ export declare function sanitizeIdentifier(input: unknown): SanitizationResult;
19
+ export declare function sanitizeUserInput(input: unknown, maxLength?: number): SanitizationResult;
20
+ export declare function sanitizePath(input: unknown): SanitizationResult;
21
+ export declare function sanitizeEmail(input: unknown): SanitizationResult;
22
+ export declare function sanitizeUrl(input: unknown): SanitizationResult;
23
+ export declare function sanitizeJson(input: unknown): SanitizationResult;
24
+ export declare function sanitizeBatch(inputs: unknown[], policy?: Partial<SanitizationPolicy>): {
25
+ results: SanitizationResult[];
26
+ summary: {
27
+ total: number;
28
+ modified: number;
29
+ errors: number;
30
+ };
31
+ };
32
+ export declare function containsDangerousPatterns(input: string): {
33
+ isDangerous: boolean;
34
+ patterns: string[];
35
+ };
36
+ export declare function escapeForSql(input: string): string;
37
+ export declare function createLogSafeString(input: string, maxLength?: number): string;
38
+ export declare const sanitizers: {
39
+ readonly sanitizeString: typeof sanitizeString;
40
+ readonly sanitizeIdentifier: typeof sanitizeIdentifier;
41
+ readonly sanitizeUserInput: typeof sanitizeUserInput;
42
+ readonly sanitizePath: typeof sanitizePath;
43
+ readonly sanitizeEmail: typeof sanitizeEmail;
44
+ readonly sanitizeUrl: typeof sanitizeUrl;
45
+ readonly sanitizeJson: typeof sanitizeJson;
46
+ readonly sanitizeBatch: typeof sanitizeBatch;
47
+ readonly containsDangerousPatterns: typeof containsDangerousPatterns;
48
+ readonly escapeForSql: typeof escapeForSql;
49
+ readonly createLogSafeString: typeof createLogSafeString;
50
+ };
51
+ export declare const policies: {
52
+ readonly DEFAULT_POLICY: SanitizationPolicy;
53
+ readonly LENIENT_POLICY: SanitizationPolicy;
54
+ readonly STRICT_POLICY: SanitizationPolicy;
55
+ };
56
+ //# sourceMappingURL=sanitizers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitizers.d.ts","sourceRoot":"","sources":["../../src/validation/sanitizers.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,kBAAkB;IAEjC,uBAAuB,EAAE,OAAO,CAAC;IAEjC,iBAAiB,EAAE,OAAO,CAAC;IAE3B,kBAAkB,EAAE,OAAO,CAAC;IAE5B,SAAS,EAAE,MAAM,CAAC;IAElB,YAAY,EAAE,OAAO,CAAC;IAEtB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1B,YAAY,EAAE,OAAO,CAAC;CACvB;AAiDD,MAAM,WAAW,kBAAkB;IAEjC,KAAK,EAAE,MAAM,CAAC;IAEd,WAAW,EAAE,OAAO,CAAC;IAErB,aAAa,EAAE,MAAM,EAAE,CAAC;IAExB,cAAc,EAAE,MAAM,CAAC;IAEvB,WAAW,EAAE,MAAM,CAAC;CACrB;AASD,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,MAAM,GAAE,OAAO,CAAC,kBAAkB,CAAM,GACvC,kBAAkB,CAiFpB;AAKD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,CAErE;AAKD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,SAAO,GAAG,kBAAkB,CAKtF;AAKD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,CAiB/D;AASD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,CAqBhE;AAKD,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,CAuB9D;AAKD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,CAsB/D;AASD,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;AASD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG;IACxD,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB,CAqBA;AAKD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQlD;AAKD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,MAAM,CAc1E;AAMD,eAAO,MAAM,UAAU;;;;;;;;;;;;CAYb,CAAC;AAEX,eAAO,MAAM,QAAQ;;;;CAIX,CAAC"}