@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,14 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema Cache for FreshGuard Core Phase 2
|
|
3
|
+
*
|
|
4
|
+
* Caches table metadata with expiry for improved query analysis performance
|
|
5
|
+
* and reduced database load from repeated schema queries.
|
|
6
|
+
*
|
|
7
|
+
* @license MIT
|
|
8
|
+
*/
|
|
1
9
|
import { createComponentLogger } from '../observability/logger.js';
|
|
2
10
|
import { createComponentMetrics } from '../observability/metrics.js';
|
|
11
|
+
// ==============================================
|
|
12
|
+
// Default Configuration
|
|
13
|
+
// ==============================================
|
|
14
|
+
/**
|
|
15
|
+
* Default schema cache configuration
|
|
16
|
+
*/
|
|
3
17
|
const DEFAULT_CONFIG = {
|
|
4
|
-
defaultTTL: 300000,
|
|
18
|
+
defaultTTL: 300000, // 5 minutes
|
|
5
19
|
maxEntries: 1000,
|
|
6
|
-
cleanupInterval: 60000,
|
|
20
|
+
cleanupInterval: 60000, // 1 minute
|
|
7
21
|
enableAutoRefresh: true,
|
|
8
|
-
autoRefreshThreshold: 0.8,
|
|
9
|
-
enableCompression: false,
|
|
22
|
+
autoRefreshThreshold: 0.8, // Refresh at 80% of TTL
|
|
23
|
+
enableCompression: false, // Disabled for simplicity
|
|
10
24
|
enableStats: true
|
|
11
25
|
};
|
|
26
|
+
// ==============================================
|
|
27
|
+
// Schema Cache Implementation
|
|
28
|
+
// ==============================================
|
|
29
|
+
/**
|
|
30
|
+
* High-performance schema cache with TTL and LRU eviction
|
|
31
|
+
*/
|
|
12
32
|
export class SchemaCache {
|
|
13
33
|
cache = new Map();
|
|
14
34
|
config;
|
|
@@ -23,6 +43,7 @@ export class SchemaCache {
|
|
|
23
43
|
...config
|
|
24
44
|
};
|
|
25
45
|
this.logger = this.config.logger;
|
|
46
|
+
// Initialize statistics
|
|
26
47
|
this.stats = {
|
|
27
48
|
totalEntries: 0,
|
|
28
49
|
hits: 0,
|
|
@@ -33,6 +54,7 @@ export class SchemaCache {
|
|
|
33
54
|
averageAge: 0,
|
|
34
55
|
lastResetTime: new Date()
|
|
35
56
|
};
|
|
57
|
+
// Start cleanup timer
|
|
36
58
|
this.startCleanupTimer();
|
|
37
59
|
this.logger.info('Schema cache initialized', {
|
|
38
60
|
defaultTTL: this.config.defaultTTL,
|
|
@@ -41,6 +63,9 @@ export class SchemaCache {
|
|
|
41
63
|
autoRefresh: this.config.enableAutoRefresh
|
|
42
64
|
});
|
|
43
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Get cached table schema
|
|
68
|
+
*/
|
|
44
69
|
get(database, tableName) {
|
|
45
70
|
const key = this.makeKey(database, tableName);
|
|
46
71
|
const entry = this.cache.get(key);
|
|
@@ -48,6 +73,7 @@ export class SchemaCache {
|
|
|
48
73
|
this.recordMiss();
|
|
49
74
|
return null;
|
|
50
75
|
}
|
|
76
|
+
// Check if entry has expired
|
|
51
77
|
const now = new Date();
|
|
52
78
|
if (now > entry.schema.expiresAt) {
|
|
53
79
|
this.cache.delete(key);
|
|
@@ -55,6 +81,7 @@ export class SchemaCache {
|
|
|
55
81
|
this.logger.debug('Cache entry expired', { database, tableName });
|
|
56
82
|
return null;
|
|
57
83
|
}
|
|
84
|
+
// Check if entry needs refresh (auto-refresh)
|
|
58
85
|
if (this.config.enableAutoRefresh) {
|
|
59
86
|
const ageRatio = (now.getTime() - entry.schema.cachedAt.getTime()) /
|
|
60
87
|
(entry.schema.expiresAt.getTime() - entry.schema.cachedAt.getTime());
|
|
@@ -67,12 +94,16 @@ export class SchemaCache {
|
|
|
67
94
|
});
|
|
68
95
|
}
|
|
69
96
|
}
|
|
97
|
+
// Update access metadata
|
|
70
98
|
entry.lastAccessed = now;
|
|
71
99
|
entry.accessCount++;
|
|
72
100
|
this.recordHit();
|
|
73
101
|
this.logger.debug('Cache hit', { database, tableName, accessCount: entry.accessCount });
|
|
74
|
-
return { ...entry.schema };
|
|
102
|
+
return { ...entry.schema }; // Return copy to prevent mutations
|
|
75
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* Store table schema in cache
|
|
106
|
+
*/
|
|
76
107
|
set(schema) {
|
|
77
108
|
const now = new Date();
|
|
78
109
|
const expiresAt = new Date(now.getTime() + this.config.defaultTTL);
|
|
@@ -82,9 +113,11 @@ export class SchemaCache {
|
|
|
82
113
|
expiresAt
|
|
83
114
|
};
|
|
84
115
|
const key = this.makeKey(schema.database, schema.tableName);
|
|
116
|
+
// Check if we need to evict entries
|
|
85
117
|
if (this.cache.size >= this.config.maxEntries && !this.cache.has(key)) {
|
|
86
118
|
this.evictLRU();
|
|
87
119
|
}
|
|
120
|
+
// Store the entry
|
|
88
121
|
const entry = {
|
|
89
122
|
schema: cachedSchema,
|
|
90
123
|
lastAccessed: now,
|
|
@@ -102,6 +135,9 @@ export class SchemaCache {
|
|
|
102
135
|
expiresAt: expiresAt.toISOString()
|
|
103
136
|
});
|
|
104
137
|
}
|
|
138
|
+
/**
|
|
139
|
+
* Remove table schema from cache
|
|
140
|
+
*/
|
|
105
141
|
delete(database, tableName) {
|
|
106
142
|
const key = this.makeKey(database, tableName);
|
|
107
143
|
const deleted = this.cache.delete(key);
|
|
@@ -111,12 +147,16 @@ export class SchemaCache {
|
|
|
111
147
|
}
|
|
112
148
|
return deleted;
|
|
113
149
|
}
|
|
150
|
+
/**
|
|
151
|
+
* Check if table schema exists in cache and is valid
|
|
152
|
+
*/
|
|
114
153
|
has(database, tableName) {
|
|
115
154
|
const key = this.makeKey(database, tableName);
|
|
116
155
|
const entry = this.cache.get(key);
|
|
117
156
|
if (!entry) {
|
|
118
157
|
return false;
|
|
119
158
|
}
|
|
159
|
+
// Check expiry
|
|
120
160
|
const now = new Date();
|
|
121
161
|
if (now > entry.schema.expiresAt) {
|
|
122
162
|
this.cache.delete(key);
|
|
@@ -124,6 +164,9 @@ export class SchemaCache {
|
|
|
124
164
|
}
|
|
125
165
|
return true;
|
|
126
166
|
}
|
|
167
|
+
/**
|
|
168
|
+
* Get entries that need refresh
|
|
169
|
+
*/
|
|
127
170
|
getEntriesNeedingRefresh() {
|
|
128
171
|
const needingRefresh = [];
|
|
129
172
|
for (const [key, entry] of this.cache) {
|
|
@@ -134,6 +177,9 @@ export class SchemaCache {
|
|
|
134
177
|
}
|
|
135
178
|
return needingRefresh;
|
|
136
179
|
}
|
|
180
|
+
/**
|
|
181
|
+
* Mark entry as refreshed
|
|
182
|
+
*/
|
|
137
183
|
markAsRefreshed(database, tableName) {
|
|
138
184
|
const key = this.makeKey(database, tableName);
|
|
139
185
|
const entry = this.cache.get(key);
|
|
@@ -142,6 +188,9 @@ export class SchemaCache {
|
|
|
142
188
|
this.logger.debug('Cache entry marked as refreshed', { database, tableName });
|
|
143
189
|
}
|
|
144
190
|
}
|
|
191
|
+
/**
|
|
192
|
+
* Get all cached table names for a database
|
|
193
|
+
*/
|
|
145
194
|
getTablesForDatabase(database) {
|
|
146
195
|
const tables = [];
|
|
147
196
|
for (const [key, entry] of this.cache) {
|
|
@@ -152,6 +201,9 @@ export class SchemaCache {
|
|
|
152
201
|
}
|
|
153
202
|
return tables.sort();
|
|
154
203
|
}
|
|
204
|
+
/**
|
|
205
|
+
* Clear all cache entries
|
|
206
|
+
*/
|
|
155
207
|
clear() {
|
|
156
208
|
const entriesCleared = this.cache.size;
|
|
157
209
|
this.cache.clear();
|
|
@@ -162,6 +214,9 @@ export class SchemaCache {
|
|
|
162
214
|
};
|
|
163
215
|
this.logger.info('Schema cache cleared', { entriesCleared });
|
|
164
216
|
}
|
|
217
|
+
/**
|
|
218
|
+
* Clear expired entries
|
|
219
|
+
*/
|
|
165
220
|
clearExpired() {
|
|
166
221
|
const now = new Date();
|
|
167
222
|
let expiredCount = 0;
|
|
@@ -178,10 +233,16 @@ export class SchemaCache {
|
|
|
178
233
|
}
|
|
179
234
|
return expiredCount;
|
|
180
235
|
}
|
|
236
|
+
/**
|
|
237
|
+
* Get cache statistics
|
|
238
|
+
*/
|
|
181
239
|
getStats() {
|
|
182
240
|
this.updateStats();
|
|
183
241
|
return { ...this.stats };
|
|
184
242
|
}
|
|
243
|
+
/**
|
|
244
|
+
* Reset cache statistics
|
|
245
|
+
*/
|
|
185
246
|
resetStats() {
|
|
186
247
|
this.stats = {
|
|
187
248
|
totalEntries: this.cache.size,
|
|
@@ -195,6 +256,9 @@ export class SchemaCache {
|
|
|
195
256
|
};
|
|
196
257
|
this.logger.info('Cache statistics reset');
|
|
197
258
|
}
|
|
259
|
+
/**
|
|
260
|
+
* Stop cache cleanup timer
|
|
261
|
+
*/
|
|
198
262
|
stop() {
|
|
199
263
|
if (this.cleanupTimer) {
|
|
200
264
|
clearInterval(this.cleanupTimer);
|
|
@@ -202,6 +266,9 @@ export class SchemaCache {
|
|
|
202
266
|
}
|
|
203
267
|
this.logger.info('Schema cache stopped');
|
|
204
268
|
}
|
|
269
|
+
/**
|
|
270
|
+
* Export cache data for persistence
|
|
271
|
+
*/
|
|
205
272
|
export() {
|
|
206
273
|
const schemas = [];
|
|
207
274
|
for (const entry of this.cache.values()) {
|
|
@@ -209,10 +276,14 @@ export class SchemaCache {
|
|
|
209
276
|
}
|
|
210
277
|
return schemas;
|
|
211
278
|
}
|
|
279
|
+
/**
|
|
280
|
+
* Import cache data from persistence
|
|
281
|
+
*/
|
|
212
282
|
import(schemas) {
|
|
213
283
|
let importedCount = 0;
|
|
214
284
|
const now = new Date();
|
|
215
285
|
for (const schema of schemas) {
|
|
286
|
+
// Only import non-expired entries
|
|
216
287
|
if (now <= schema.expiresAt) {
|
|
217
288
|
const key = this.makeKey(schema.database, schema.tableName);
|
|
218
289
|
const entry = {
|
|
@@ -229,27 +300,48 @@ export class SchemaCache {
|
|
|
229
300
|
this.logger.info('Cache data imported', { importedCount, totalSchemas: schemas.length });
|
|
230
301
|
return importedCount;
|
|
231
302
|
}
|
|
303
|
+
// ==============================================
|
|
304
|
+
// Private Methods
|
|
305
|
+
// ==============================================
|
|
306
|
+
/**
|
|
307
|
+
* Create cache key from database and table name
|
|
308
|
+
*/
|
|
232
309
|
makeKey(database, tableName) {
|
|
233
310
|
return `${database}:${tableName}`;
|
|
234
311
|
}
|
|
312
|
+
/**
|
|
313
|
+
* Parse cache key back to database and table name
|
|
314
|
+
*/
|
|
235
315
|
parseKey(key) {
|
|
236
316
|
const parts = key.split(':', 2);
|
|
237
317
|
const database = parts[0] ?? '';
|
|
238
318
|
const tableName = parts[1] ?? '';
|
|
239
319
|
return { database, tableName };
|
|
240
320
|
}
|
|
321
|
+
/**
|
|
322
|
+
* Record cache hit
|
|
323
|
+
*/
|
|
241
324
|
recordHit() {
|
|
242
325
|
this.stats.hits++;
|
|
243
326
|
this.updateHitRate();
|
|
244
327
|
}
|
|
328
|
+
/**
|
|
329
|
+
* Record cache miss
|
|
330
|
+
*/
|
|
245
331
|
recordMiss() {
|
|
246
332
|
this.stats.misses++;
|
|
247
333
|
this.updateHitRate();
|
|
248
334
|
}
|
|
335
|
+
/**
|
|
336
|
+
* Update hit rate calculation
|
|
337
|
+
*/
|
|
249
338
|
updateHitRate() {
|
|
250
339
|
const total = this.stats.hits + this.stats.misses;
|
|
251
340
|
this.stats.hitRate = total > 0 ? (this.stats.hits / total) * 100 : 0;
|
|
252
341
|
}
|
|
342
|
+
/**
|
|
343
|
+
* Evict least recently used entry
|
|
344
|
+
*/
|
|
253
345
|
evictLRU() {
|
|
254
346
|
let oldestKey = null;
|
|
255
347
|
let oldestTime = new Date();
|
|
@@ -270,19 +362,29 @@ export class SchemaCache {
|
|
|
270
362
|
});
|
|
271
363
|
}
|
|
272
364
|
}
|
|
365
|
+
/**
|
|
366
|
+
* Update cache statistics
|
|
367
|
+
*/
|
|
273
368
|
updateStats() {
|
|
274
369
|
this.stats.totalEntries = this.cache.size;
|
|
275
370
|
this.stats.memoryUsage = this.estimateMemoryUsage();
|
|
276
371
|
this.stats.averageAge = this.calculateAverageAge();
|
|
277
372
|
}
|
|
373
|
+
/**
|
|
374
|
+
* Estimate memory usage of cache
|
|
375
|
+
*/
|
|
278
376
|
estimateMemoryUsage() {
|
|
279
377
|
let totalSize = 0;
|
|
280
378
|
for (const entry of this.cache.values()) {
|
|
281
|
-
|
|
282
|
-
totalSize +=
|
|
379
|
+
// Rough estimation of schema object size
|
|
380
|
+
totalSize += JSON.stringify(entry.schema).length * 2; // Rough byte estimate
|
|
381
|
+
totalSize += 200; // Overhead for entry metadata
|
|
283
382
|
}
|
|
284
383
|
return totalSize;
|
|
285
384
|
}
|
|
385
|
+
/**
|
|
386
|
+
* Calculate average age of cache entries
|
|
387
|
+
*/
|
|
286
388
|
calculateAverageAge() {
|
|
287
389
|
if (this.cache.size === 0)
|
|
288
390
|
return 0;
|
|
@@ -293,6 +395,9 @@ export class SchemaCache {
|
|
|
293
395
|
}
|
|
294
396
|
return totalAge / this.cache.size;
|
|
295
397
|
}
|
|
398
|
+
/**
|
|
399
|
+
* Start cleanup timer for expired entries
|
|
400
|
+
*/
|
|
296
401
|
startCleanupTimer() {
|
|
297
402
|
if (this.cleanupTimer) {
|
|
298
403
|
clearInterval(this.cleanupTimer);
|
|
@@ -302,6 +407,12 @@ export class SchemaCache {
|
|
|
302
407
|
}, this.config.cleanupInterval);
|
|
303
408
|
}
|
|
304
409
|
}
|
|
410
|
+
// ==============================================
|
|
411
|
+
// Utility Functions
|
|
412
|
+
// ==============================================
|
|
413
|
+
/**
|
|
414
|
+
* Generate structure hash for change detection
|
|
415
|
+
*/
|
|
305
416
|
export function generateStructureHash(columns, indexes) {
|
|
306
417
|
const structure = {
|
|
307
418
|
columns: columns.map(c => ({ name: c.name, type: c.type, nullable: c.nullable })),
|
|
@@ -309,6 +420,9 @@ export function generateStructureHash(columns, indexes) {
|
|
|
309
420
|
};
|
|
310
421
|
return hashString(JSON.stringify(structure));
|
|
311
422
|
}
|
|
423
|
+
/**
|
|
424
|
+
* Simple string hash function
|
|
425
|
+
*/
|
|
312
426
|
function hashString(str) {
|
|
313
427
|
let hash = 0;
|
|
314
428
|
if (str.length === 0)
|
|
@@ -316,29 +430,47 @@ function hashString(str) {
|
|
|
316
430
|
for (let i = 0; i < str.length; i++) {
|
|
317
431
|
const char = str.charCodeAt(i);
|
|
318
432
|
hash = ((hash << 5) - hash) + char;
|
|
319
|
-
hash = hash & hash;
|
|
433
|
+
hash = hash & hash; // Convert to 32-bit integer
|
|
320
434
|
}
|
|
321
435
|
return Math.abs(hash).toString(16);
|
|
322
436
|
}
|
|
437
|
+
// ==============================================
|
|
438
|
+
// Factory Functions
|
|
439
|
+
// ==============================================
|
|
440
|
+
/**
|
|
441
|
+
* Create a schema cache with default configuration
|
|
442
|
+
*/
|
|
323
443
|
export function createSchemaCache(config) {
|
|
324
444
|
return new SchemaCache(config);
|
|
325
445
|
}
|
|
446
|
+
/**
|
|
447
|
+
* Create a high-capacity cache for large deployments
|
|
448
|
+
*/
|
|
326
449
|
export function createHighCapacityCache() {
|
|
327
450
|
return new SchemaCache({
|
|
328
|
-
defaultTTL: 600000,
|
|
451
|
+
defaultTTL: 600000, // 10 minutes
|
|
329
452
|
maxEntries: 5000,
|
|
330
|
-
cleanupInterval: 120000,
|
|
453
|
+
cleanupInterval: 120000, // 2 minutes
|
|
331
454
|
enableAutoRefresh: true,
|
|
332
455
|
autoRefreshThreshold: 0.7
|
|
333
456
|
});
|
|
334
457
|
}
|
|
458
|
+
/**
|
|
459
|
+
* Create a fast cache for development/testing
|
|
460
|
+
*/
|
|
335
461
|
export function createFastCache() {
|
|
336
462
|
return new SchemaCache({
|
|
337
|
-
defaultTTL: 60000,
|
|
463
|
+
defaultTTL: 60000, // 1 minute
|
|
338
464
|
maxEntries: 100,
|
|
339
|
-
cleanupInterval: 15000,
|
|
465
|
+
cleanupInterval: 15000, // 15 seconds
|
|
340
466
|
enableAutoRefresh: false
|
|
341
467
|
});
|
|
342
468
|
}
|
|
469
|
+
// ==============================================
|
|
470
|
+
// Default Cache Instance
|
|
471
|
+
// ==============================================
|
|
472
|
+
/**
|
|
473
|
+
* Default schema cache instance
|
|
474
|
+
*/
|
|
343
475
|
export const defaultSchemaCache = createSchemaCache();
|
|
344
476
|
//# sourceMappingURL=schema-cache.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-cache.js","sourceRoot":"","sources":["../../src/security/schema-cache.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schema-cache.js","sourceRoot":"","sources":["../../src/security/schema-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AA0HrE,iDAAiD;AACjD,wBAAwB;AACxB,iDAAiD;AAEjD;;GAEG;AACH,MAAM,cAAc,GAA4D;IAC9E,UAAU,EAAE,MAAM,EAAE,YAAY;IAChC,UAAU,EAAE,IAAI;IAChB,eAAe,EAAE,KAAK,EAAE,WAAW;IACnC,iBAAiB,EAAE,IAAI;IACvB,oBAAoB,EAAE,GAAG,EAAE,wBAAwB;IACnD,iBAAiB,EAAE,KAAK,EAAE,0BAA0B;IACpD,WAAW,EAAE,IAAI;CAClB,CAAC;AAoBF,iDAAiD;AACjD,8BAA8B;AAC9B,iDAAiD;AAEjD;;GAEG;AACH,MAAM,OAAO,WAAW;IACL,KAAK,GAAG,IAAI,GAAG,EAAwB,CAAC;IACxC,MAAM,CAA8B;IACpC,MAAM,CAAmB;IAClC,YAAY,CAAkB;IAC9B,KAAK,CAAa;IAE1B,YAAY,SAAqC,EAAE;QACjD,IAAI,CAAC,MAAM,GAAG;YACZ,GAAG,cAAc;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,qBAAqB,CAAC,cAAc,CAAC;YAC9D,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,sBAAsB,CAAC,cAAc,CAAC;YACjE,GAAG,MAAM;SACV,CAAC;QAEF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAEjC,wBAAwB;QACxB,IAAI,CAAC,KAAK,GAAG;YACX,YAAY,EAAE,CAAC;YACf,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,CAAC;YACV,SAAS,EAAE,CAAC;YACZ,WAAW,EAAE,CAAC;YACd,UAAU,EAAE,CAAC;YACb,aAAa,EAAE,IAAI,IAAI,EAAE;SAC1B,CAAC;QAEF,sBAAsB;QACtB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE;YAC3C,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;YAClC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;YAClC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe;YAC5C,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB;SAC3C,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,QAAgB,EAAE,SAAiB;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAElC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,6BAA6B;QAC7B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;YAClE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,8CAA8C;QAC9C,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBAClD,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;YAErF,IAAI,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;gBACjD,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE;oBAClD,QAAQ;oBACR,SAAS;oBACT,QAAQ;iBACT,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC;QACzB,KAAK,CAAC,WAAW,EAAE,CAAC;QAEpB,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QAExF,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,mCAAmC;IACjE,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,MAAyD;QAC3D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAEnE,MAAM,YAAY,GAAsB;YACtC,GAAG,MAAM;YACT,QAAQ,EAAE,GAAG;YACb,SAAS;SACV,CAAC;QAEF,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAE5D,oCAAoC;QACpC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACtE,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC;QAED,kBAAkB;QAClB,MAAM,KAAK,GAAe;YACxB,MAAM,EAAE,YAAY;YACpB,YAAY,EAAE,GAAG;YACjB,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,KAAK;SACpB,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE;YACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;YAC9B,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;YAC9B,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE;SACnC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,QAAgB,EAAE,SAAiB;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAEvC,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,QAAgB,EAAE,SAAiB;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAElC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,KAAK,CAAC;QACf,CAAC;QAED,eAAe;QACf,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,wBAAwB;QACtB,MAAM,cAAc,GAA8C,EAAE,CAAC;QAErE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACtC,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;gBACvB,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACnD,cAAc,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,QAAgB,EAAE,SAAiB;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAElC,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,QAAgB;QACnC,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBACzE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG;YACX,GAAG,IAAI,CAAC,KAAK;YACb,YAAY,EAAE,CAAC;YACf,WAAW,EAAE,CAAC;SACf,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,YAAY;QACV,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACtC,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBACjC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACvB,YAAY,EAAE,CAAC;YACjB,CAAC;QACH,CAAC;QAED,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,YAAY,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;QACvE,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,KAAK,GAAG;YACX,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;YAC7B,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,CAAC;YACV,SAAS,EAAE,CAAC;YACZ,WAAW,EAAE,IAAI,CAAC,mBAAmB,EAAE;YACvC,UAAU,EAAE,IAAI,CAAC,mBAAmB,EAAE;YACtC,aAAa,EAAE,IAAI,IAAI,EAAE;SAC1B,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACjC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;QAChC,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,MAAM,OAAO,GAAwB,EAAE,CAAC;QAExC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACpC,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAA4B;QACjC,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,kCAAkC;YAClC,IAAI,GAAG,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC5D,MAAM,KAAK,GAAe;oBACxB,MAAM;oBACN,YAAY,EAAE,GAAG;oBACjB,WAAW,EAAE,CAAC;oBACd,YAAY,EAAE,KAAK;iBACpB,CAAC;gBAEF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC3B,aAAa,EAAE,CAAC;YAClB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAEzF,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,iDAAiD;IACjD,kBAAkB;IAClB,iDAAiD;IAEjD;;OAEG;IACK,OAAO,CAAC,QAAgB,EAAE,SAAiB;QACjD,OAAO,GAAG,QAAQ,IAAI,SAAS,EAAE,CAAC;IACpC,CAAC;IAED;;OAEG;IACK,QAAQ,CAAC,GAAa;QAC5B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACjC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACK,SAAS;QACf,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAClB,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,UAAU;QAChB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACpB,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,aAAa;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAClD,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IAED;;OAEG;IACK,QAAQ;QACd,IAAI,SAAS,GAAoB,IAAI,CAAC;QACtC,IAAI,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;QAE5B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACtC,IAAI,KAAK,CAAC,YAAY,GAAG,UAAU,EAAE,CAAC;gBACpC,UAAU,GAAG,KAAK,CAAC,YAAY,CAAC;gBAChC,SAAS,GAAG,GAAG,CAAC;YAClB,CAAC;QACH,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACzD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YAEvB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE;gBAC3C,QAAQ;gBACR,SAAS;gBACT,YAAY,EAAE,UAAU,CAAC,WAAW,EAAE;aACvC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACK,WAAW;QACjB,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACpD,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;IACrD,CAAC;IAED;;OAEG;IACK,mBAAmB;QACzB,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACxC,yCAAyC;YACzC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,sBAAsB;YAC5E,SAAS,IAAI,GAAG,CAAC,CAAC,8BAA8B;QAClD,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,mBAAmB;QACzB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAEpC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,QAAQ,GAAG,CAAC,CAAC;QAEjB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACxC,QAAQ,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACpD,CAAC;QAED,OAAO,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACpC,CAAC;IAED;;OAEG;IACK,iBAAiB;QACvB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;YACnC,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IAClC,CAAC;CACF;AAED,iDAAiD;AACjD,oBAAoB;AACpB,iDAAiD;AAEjD;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAA2B,EAAE,OAA0B;IAC3F,MAAM,SAAS,GAAG;QAChB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QACjF,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;KACpF,CAAC;IAEF,OAAO,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAE7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;QACnC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,4BAA4B;IAClD,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,iDAAiD;AACjD,oBAAoB;AACpB,iDAAiD;AAEjD;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAmC;IACnE,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,IAAI,WAAW,CAAC;QACrB,UAAU,EAAE,MAAM,EAAE,aAAa;QACjC,UAAU,EAAE,IAAI;QAChB,eAAe,EAAE,MAAM,EAAE,YAAY;QACrC,iBAAiB,EAAE,IAAI;QACvB,oBAAoB,EAAE,GAAG;KAC1B,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,WAAW,CAAC;QACrB,UAAU,EAAE,KAAK,EAAE,WAAW;QAC9B,UAAU,EAAE,GAAG;QACf,eAAe,EAAE,KAAK,EAAE,aAAa;QACrC,iBAAiB,EAAE,KAAK;KACzB,CAAC,CAAC;AACL,CAAC;AAED,iDAAiD;AACjD,yBAAyB;AACzB,iDAAiD;AAEjD;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,iBAAiB,EAAE,CAAC"}
|
|
@@ -1,15 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security-focused connector type definitions for FreshGuard Core
|
|
3
|
+
*
|
|
4
|
+
* These types enforce security best practices for database connections,
|
|
5
|
+
* including read-only operations, query validation, and proper error handling.
|
|
6
|
+
*
|
|
7
|
+
* @license MIT
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Secure connector configuration with validated credentials
|
|
11
|
+
* Deployer provides these securely (from env/vault)
|
|
12
|
+
*/
|
|
1
13
|
export interface ConnectorConfig {
|
|
14
|
+
/** Database host (required) */
|
|
2
15
|
host: string;
|
|
16
|
+
/** Database port (required) */
|
|
3
17
|
port: number;
|
|
18
|
+
/** Database name (required) */
|
|
4
19
|
database: string;
|
|
20
|
+
/** Username - should be read-only service account (required) */
|
|
5
21
|
username: string;
|
|
22
|
+
/** Password - should be from secure store (required) */
|
|
6
23
|
password: string;
|
|
24
|
+
/** Enable SSL/TLS (defaults to true for security) */
|
|
7
25
|
ssl?: boolean;
|
|
26
|
+
/** Connection timeout in milliseconds (default: 30000) */
|
|
8
27
|
timeout?: number;
|
|
28
|
+
/** Query timeout in milliseconds (default: 10000) */
|
|
9
29
|
queryTimeout?: number;
|
|
30
|
+
/** Maximum rows returned by queries (default: 1000) */
|
|
10
31
|
maxRows?: number;
|
|
32
|
+
/** Application name for connection identification */
|
|
11
33
|
applicationName?: string;
|
|
12
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Table schema information
|
|
37
|
+
*/
|
|
13
38
|
export interface TableSchema {
|
|
14
39
|
table: string;
|
|
15
40
|
columns: {
|
|
@@ -18,16 +43,31 @@ export interface TableSchema {
|
|
|
18
43
|
nullable: boolean;
|
|
19
44
|
}[];
|
|
20
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Secure connector interface - only allows read-only operations
|
|
48
|
+
* Core uses only these methods - no arbitrary data access
|
|
49
|
+
*/
|
|
21
50
|
export interface Connector {
|
|
51
|
+
/** Test database connection */
|
|
22
52
|
testConnection(): Promise<boolean>;
|
|
53
|
+
/** List available tables */
|
|
23
54
|
listTables(): Promise<string[]>;
|
|
55
|
+
/** Get table schema information */
|
|
24
56
|
getTableSchema(table: string): Promise<TableSchema>;
|
|
57
|
+
/** Get row count for a table */
|
|
25
58
|
getRowCount(table: string): Promise<number>;
|
|
59
|
+
/** Get maximum timestamp value from a column */
|
|
26
60
|
getMaxTimestamp(table: string, column: string): Promise<Date | null>;
|
|
61
|
+
/** Get minimum timestamp value from a column */
|
|
27
62
|
getMinTimestamp(table: string, column: string): Promise<Date | null>;
|
|
63
|
+
/** Get last modified timestamp for a table */
|
|
28
64
|
getLastModified(table: string): Promise<Date | null>;
|
|
65
|
+
/** Close the connection */
|
|
29
66
|
close(): Promise<void>;
|
|
30
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* Freshness check result with security-safe error messages
|
|
70
|
+
*/
|
|
31
71
|
export interface FreshnessResult {
|
|
32
72
|
table: string;
|
|
33
73
|
column: string;
|
|
@@ -35,8 +75,12 @@ export interface FreshnessResult {
|
|
|
35
75
|
rowCount: number;
|
|
36
76
|
isStale: boolean;
|
|
37
77
|
staleSince?: Date;
|
|
78
|
+
/** Sanitized error message - no database version leaks */
|
|
38
79
|
error?: string;
|
|
39
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Volume anomaly detection result
|
|
83
|
+
*/
|
|
40
84
|
export interface AnomalyResult {
|
|
41
85
|
table: string;
|
|
42
86
|
currentRowCount?: number;
|
|
@@ -44,22 +88,45 @@ export interface AnomalyResult {
|
|
|
44
88
|
deviationPercent?: number;
|
|
45
89
|
isAnomaly: boolean;
|
|
46
90
|
direction?: 'increase' | 'decrease';
|
|
91
|
+
/** Sanitized error message */
|
|
47
92
|
error?: string;
|
|
48
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* Security settings for connectors
|
|
96
|
+
*/
|
|
49
97
|
export interface SecurityConfig {
|
|
98
|
+
/** Connection timeout in milliseconds */
|
|
50
99
|
connectionTimeout: number;
|
|
100
|
+
/** Query timeout in milliseconds */
|
|
51
101
|
queryTimeout: number;
|
|
102
|
+
/** Maximum rows returned by any query */
|
|
52
103
|
maxRows: number;
|
|
104
|
+
/** Require SSL/TLS connections */
|
|
53
105
|
requireSSL: boolean;
|
|
106
|
+
/** Allowed query patterns (regex) */
|
|
54
107
|
allowedQueryPatterns: RegExp[];
|
|
108
|
+
/** Blocked SQL keywords */
|
|
55
109
|
blockedKeywords: string[];
|
|
110
|
+
/** Enable detailed logging for debugging */
|
|
56
111
|
enableDetailedLogging?: boolean;
|
|
112
|
+
/** Enable query complexity analysis */
|
|
57
113
|
enableQueryAnalysis?: boolean;
|
|
114
|
+
/** Maximum query risk score to allow (0-100) */
|
|
58
115
|
maxQueryRiskScore?: number;
|
|
116
|
+
/** Maximum query complexity score to allow (0-100) */
|
|
59
117
|
maxQueryComplexityScore?: number;
|
|
60
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* Default security configuration
|
|
121
|
+
*/
|
|
61
122
|
export declare const DEFAULT_SECURITY_CONFIG: SecurityConfig;
|
|
62
|
-
|
|
123
|
+
/**
|
|
124
|
+
* Database connector types supported by FreshGuard Core
|
|
125
|
+
*/
|
|
126
|
+
export type ConnectorType = 'postgres' | 'duckdb' | 'bigquery' | 'snowflake' | 'mysql' | 'redshift' | 'mssql' | 'azure_sql' | 'synapse';
|
|
127
|
+
/**
|
|
128
|
+
* Connector factory configuration
|
|
129
|
+
*/
|
|
63
130
|
export interface ConnectorFactoryConfig {
|
|
64
131
|
type: ConnectorType;
|
|
65
132
|
config: ConnectorConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../../src/types/connector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../../src/types/connector.ts"],"names":[],"mappings":"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"}
|
package/dist/types/connector.js
CHANGED
|
@@ -1,23 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security-focused connector type definitions for FreshGuard Core
|
|
3
|
+
*
|
|
4
|
+
* These types enforce security best practices for database connections,
|
|
5
|
+
* including read-only operations, query validation, and proper error handling.
|
|
6
|
+
*
|
|
7
|
+
* @license MIT
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Default security configuration
|
|
11
|
+
*/
|
|
1
12
|
export const DEFAULT_SECURITY_CONFIG = {
|
|
2
|
-
connectionTimeout: 30000,
|
|
3
|
-
queryTimeout: 10000,
|
|
13
|
+
connectionTimeout: 30000, // 30 seconds
|
|
14
|
+
queryTimeout: 10000, // 10 seconds
|
|
4
15
|
maxRows: 1000,
|
|
5
16
|
requireSSL: true,
|
|
17
|
+
/* eslint-disable security/detect-unsafe-regex -- These are SQL query validation patterns, intentionally complex */
|
|
6
18
|
allowedQueryPatterns: [
|
|
7
|
-
|
|
8
|
-
/^SELECT\s+
|
|
9
|
-
/^SELECT\s+
|
|
10
|
-
/^
|
|
11
|
-
|
|
12
|
-
/^
|
|
13
|
-
/^
|
|
14
|
-
|
|
15
|
-
/^SELECT\s
|
|
16
|
-
/^SELECT\s
|
|
17
|
-
/^SELECT\s
|
|
18
|
-
|
|
19
|
-
/^SELECT\s+
|
|
19
|
+
// FreshGuard Core monitoring patterns (v0.9.1+) - Updated to handle all whitespace and quoted identifiers
|
|
20
|
+
/^SELECT\s+COUNT\(\*\)(?:\s+as\s+\w+)?\s+FROM\s+[`"]?\w+[`"]?$/is, // getRowCount: SELECT COUNT(*) [as alias] FROM table
|
|
21
|
+
/^SELECT\s+MAX\([`"]?\w+[`"]?\)(?:\s+as\s+\w+)?\s+FROM\s+[`"]?\w+[`"]?$/is, // getMaxTimestamp: SELECT MAX(column) [as alias] FROM table
|
|
22
|
+
/^SELECT\s+MIN\([`"]?\w+[`"]?\)(?:\s+as\s+\w+)?\s+FROM\s+[`"]?\w+[`"]?$/is, // getMinTimestamp: SELECT MIN(column) [as alias] FROM table
|
|
23
|
+
// Schema introspection queries
|
|
24
|
+
/^DESCRIBE\s+[`"]?\w+[`"]?$/i, // DESCRIBE table
|
|
25
|
+
/^SHOW\s+(TABLES|COLUMNS)(?:\s+FROM\s+[`"]?\w+[`"]?)?$/i, // SHOW TABLES, SHOW COLUMNS FROM table
|
|
26
|
+
// Information schema queries (cross-database compatibility)
|
|
27
|
+
/^SELECT\s+.+?\s+FROM\s+information_schema\.\w+/is, // PostgreSQL/MySQL information_schema
|
|
28
|
+
/^SELECT[\s\S]+?FROM[\s\S]+?information_schema\.\w+/is, // Multi-line information_schema queries
|
|
29
|
+
/^SELECT[\s\S]+?FROM[\s\S]*`[^`]*\.INFORMATION_SCHEMA\.\w+`/is, // BigQuery INFORMATION_SCHEMA (backticks)
|
|
30
|
+
// MySQL-specific patterns with backticks
|
|
31
|
+
/^SELECT\s+table_name\s+FROM\s+information_schema\.tables\s+WHERE\s+table_schema\s*=\s*\?/is, // MySQL table listing
|
|
32
|
+
/^SELECT\s+column_name,\s*data_type,\s*is_nullable\s+FROM\s+information_schema\.columns/is, // MySQL schema query
|
|
33
|
+
// Redshift-specific patterns (PostgreSQL compatibility)
|
|
34
|
+
/^SELECT\s+tablename\s+FROM\s+pg_tables/is, // Redshift table listing using pg_tables
|
|
35
|
+
/^SELECT\s+[\s\S]*?FROM\s+svv_table_info/is, // Redshift system view queries
|
|
36
|
+
// MSSQL/Azure SQL/Synapse patterns
|
|
37
|
+
/^SELECT\s+.+?\s+FROM\s+INFORMATION_SCHEMA\.\w+/is, // MSSQL INFORMATION_SCHEMA (uppercase)
|
|
38
|
+
/^SELECT\s+.+?\s+FROM\s+sys\.\w+/is, // MSSQL system views
|
|
39
|
+
/^SELECT\s+.+?\s+FROM\s+sys\.dm_\w+/is, // MSSQL dynamic management views
|
|
40
|
+
// Test connection queries
|
|
41
|
+
/^SELECT\s+1(?:\s+as\s+\w+)?$/i, // SELECT 1 [as alias] (connection test)
|
|
20
42
|
],
|
|
43
|
+
/* eslint-enable security/detect-unsafe-regex */
|
|
21
44
|
blockedKeywords: [
|
|
22
45
|
'INSERT', 'UPDATE', 'DELETE', 'DROP', 'ALTER', 'CREATE', 'TRUNCATE',
|
|
23
46
|
'--', '/*', '*/', 'EXEC', 'EXECUTE', 'xp_', 'sp_'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connector.js","sourceRoot":"","sources":["../../src/types/connector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"connector.js","sourceRoot":"","sources":["../../src/types/connector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA+IH;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAmB;IACrD,iBAAiB,EAAE,KAAK,EAAG,aAAa;IACxC,YAAY,EAAE,KAAK,EAAQ,aAAa;IACxC,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,IAAI;IAChB,mHAAmH;IACnH,oBAAoB,EAAE;QACpB,0GAA0G;QAC1G,iEAAiE,EAAqB,qDAAqD;QAC3I,0EAA0E,EAAY,4DAA4D;QAClJ,0EAA0E,EAAY,4DAA4D;QAElJ,+BAA+B;QAC/B,6BAA6B,EAA0D,iBAAiB;QACxG,wDAAwD,EAA6B,uCAAuC;QAE5H,4DAA4D;QAC5D,kDAAkD,EAAmC,sCAAsC;QAC3H,sDAAsD,EAA+B,wCAAwC;QAC7H,8DAA8D,EAAuB,0CAA0C;QAE/H,yCAAyC;QACzC,4FAA4F,EAAE,sBAAsB;QACpH,0FAA0F,EAAI,qBAAqB;QAEnH,wDAAwD;QACxD,0CAA0C,EAA2C,yCAAyC;QAC9H,2CAA2C,EAA0C,+BAA+B;QAEpH,mCAAmC;QACnC,kDAAkD,EAAoC,uCAAuC;QAC7H,mCAAmC,EAAoD,qBAAqB;QAC5G,sCAAsC,EAAiD,iCAAiC;QAExH,0BAA0B;QAC1B,+BAA+B,EAAsD,wCAAwC;KAC9H;IACD,gDAAgD;IAChD,eAAe,EAAE;QACf,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU;QACnE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK;KAClD;CACF,CAAC"}
|