@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 @@
1
+ {"version":3,"file":"freshness.js","sourceRoot":"","sources":["../../src/monitor/freshness.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { checkFreshness } from './freshness.js';
2
+ export { checkVolumeAnomaly } from './volume.js';
3
+ export { checkSchemaChanges } from './schema-changes.js';
4
+ export { SchemaBaselineManager, SchemaComparer } from './schema-baseline.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/monitor/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { checkFreshness } from './freshness.js';
2
+ export { checkVolumeAnomaly } from './volume.js';
3
+ export { checkSchemaChanges } from './schema-changes.js';
4
+ export { SchemaBaselineManager, SchemaComparer } from './schema-baseline.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/monitor/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { SchemaBaseline, SchemaChanges } from '../types.js';
2
+ import type { TableSchema } from '../types/connector.js';
3
+ import type { MetadataStorage } from '../metadata/interface.js';
4
+ export declare class SchemaBaselineManager {
5
+ storeBaseline(metadataStorage: MetadataStorage, ruleId: string, tableName: string, schema: TableSchema, adaptationReason?: string): Promise<void>;
6
+ getBaseline(metadataStorage: MetadataStorage, ruleId: string): Promise<SchemaBaseline | null>;
7
+ updateBaseline(metadataStorage: MetadataStorage, ruleId: string, newSchema: TableSchema, adaptationReason: string): Promise<void>;
8
+ private generateSchemaHash;
9
+ }
10
+ export declare class SchemaComparer {
11
+ compareSchemas(baseline: TableSchema, current: TableSchema, config?: {
12
+ trackTypes?: boolean;
13
+ trackNullability?: boolean;
14
+ trackedColumns?: string[];
15
+ monitoringMode?: 'full' | 'partial';
16
+ }): SchemaChanges;
17
+ private normalizeType;
18
+ private determineTypeChangeImpact;
19
+ private calculateSeverity;
20
+ private generateSummary;
21
+ }
22
+ //# sourceMappingURL=schema-baseline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-baseline.d.ts","sourceRoot":"","sources":["../../src/monitor/schema-baseline.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAgB,MAAM,aAAa,CAAC;AAC/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAOhE,qBAAa,qBAAqB;IAI1B,aAAa,CACjB,eAAe,EAAE,eAAe,EAChC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,EACnB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,IAAI,CAAC;IAyCV,WAAW,CAAC,eAAe,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAwB7F,cAAc,CAClB,eAAe,EAAE,eAAe,EAChC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,WAAW,EACtB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,IAAI,CAAC;IAehB,OAAO,CAAC,kBAAkB;CAW3B;AAKD,qBAAa,cAAc;IAIzB,cAAc,CACZ,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,WAAW,EACpB,MAAM,GAAE;QACN,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAC1B,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAChC,GACL,aAAa;IAsGhB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,yBAAyB;IA0CjC,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,eAAe;CA6BxB"}
@@ -0,0 +1,211 @@
1
+ import { ConfigurationError, MetadataStorageError } from '../errors/index.js';
2
+ import { createHash } from 'crypto';
3
+ export class SchemaBaselineManager {
4
+ async storeBaseline(metadataStorage, ruleId, tableName, schema, adaptationReason) {
5
+ if (!metadataStorage) {
6
+ throw new ConfigurationError('Metadata storage is required for schema baseline management');
7
+ }
8
+ if (!ruleId || typeof ruleId !== 'string') {
9
+ throw new ConfigurationError('Rule ID is required and must be a string');
10
+ }
11
+ if (!tableName || typeof tableName !== 'string') {
12
+ throw new ConfigurationError('Table name is required and must be a string');
13
+ }
14
+ if (!schema?.table || !Array.isArray(schema.columns)) {
15
+ throw new ConfigurationError('Valid table schema is required');
16
+ }
17
+ try {
18
+ const schemaHash = this.generateSchemaHash(schema);
19
+ const baseline = {
20
+ ruleId,
21
+ tableName,
22
+ schema,
23
+ capturedAt: new Date(),
24
+ schemaHash
25
+ };
26
+ await metadataStorage.storeSchemaBaseline(baseline, adaptationReason);
27
+ }
28
+ catch (error) {
29
+ throw new MetadataStorageError('Failed to store schema baseline', 'schema_baseline_storage', undefined, error instanceof Error ? error : undefined);
30
+ }
31
+ }
32
+ async getBaseline(metadataStorage, ruleId) {
33
+ if (!metadataStorage) {
34
+ throw new ConfigurationError('Metadata storage is required for schema baseline management');
35
+ }
36
+ if (!ruleId || typeof ruleId !== 'string') {
37
+ throw new ConfigurationError('Rule ID is required and must be a string');
38
+ }
39
+ try {
40
+ return await metadataStorage.getSchemaBaseline(ruleId);
41
+ }
42
+ catch (error) {
43
+ throw new MetadataStorageError('Failed to retrieve schema baseline', 'schema_baseline_retrieval', undefined, error instanceof Error ? error : undefined);
44
+ }
45
+ }
46
+ async updateBaseline(metadataStorage, ruleId, newSchema, adaptationReason) {
47
+ if (!metadataStorage) {
48
+ throw new ConfigurationError('Metadata storage is required for schema baseline management');
49
+ }
50
+ if (!adaptationReason || typeof adaptationReason !== 'string') {
51
+ throw new ConfigurationError('Adaptation reason is required for baseline updates');
52
+ }
53
+ await this.storeBaseline(metadataStorage, ruleId, newSchema.table, newSchema, adaptationReason);
54
+ }
55
+ generateSchemaHash(schema) {
56
+ const normalizedColumns = schema.columns
57
+ .slice()
58
+ .sort((a, b) => a.name.localeCompare(b.name))
59
+ .map(col => `${col.name}:${col.type.toLowerCase()}:${col.nullable ? 'null' : 'notnull'}`)
60
+ .join('|');
61
+ const schemaString = `${schema.table}:${normalizedColumns}`;
62
+ return createHash('sha256').update(schemaString).digest('hex');
63
+ }
64
+ }
65
+ export class SchemaComparer {
66
+ compareSchemas(baseline, current, config = {}) {
67
+ if (!baseline || !current) {
68
+ throw new ConfigurationError('Both baseline and current schemas are required for comparison');
69
+ }
70
+ const trackTypes = config.trackTypes !== false;
71
+ const trackNullability = config.trackNullability === true;
72
+ const monitoringMode = config.monitoringMode || 'full';
73
+ const baselineColumns = new Map(baseline.columns.map(col => [col.name, col]));
74
+ const currentColumns = new Map(current.columns.map(col => [col.name, col]));
75
+ const addedColumns = [];
76
+ const removedColumns = [];
77
+ const modifiedColumns = [];
78
+ const columnsToCheck = monitoringMode === 'partial' && config.trackedColumns
79
+ ? config.trackedColumns
80
+ : Array.from(new Set([...baselineColumns.keys(), ...currentColumns.keys()]));
81
+ for (const [columnName, column] of currentColumns) {
82
+ if (!columnsToCheck.includes(columnName))
83
+ continue;
84
+ if (!baselineColumns.has(columnName)) {
85
+ addedColumns.push({
86
+ columnName,
87
+ changeType: 'added',
88
+ newValue: `${column.type}${column.nullable ? ' NULL' : ' NOT NULL'}`,
89
+ impact: 'safe'
90
+ });
91
+ }
92
+ }
93
+ for (const [columnName, baselineColumn] of baselineColumns) {
94
+ if (!columnsToCheck.includes(columnName))
95
+ continue;
96
+ const currentColumn = currentColumns.get(columnName);
97
+ if (!currentColumn) {
98
+ removedColumns.push({
99
+ columnName,
100
+ changeType: 'removed',
101
+ oldValue: `${baselineColumn.type}${baselineColumn.nullable ? ' NULL' : ' NOT NULL'}`,
102
+ impact: 'breaking'
103
+ });
104
+ }
105
+ else if (trackTypes || trackNullability) {
106
+ const changes = [];
107
+ if (trackTypes && this.normalizeType(baselineColumn.type) !== this.normalizeType(currentColumn.type)) {
108
+ changes.push({
109
+ columnName,
110
+ changeType: 'type_changed',
111
+ oldValue: baselineColumn.type,
112
+ newValue: currentColumn.type,
113
+ impact: this.determineTypeChangeImpact(baselineColumn.type, currentColumn.type)
114
+ });
115
+ }
116
+ if (trackNullability && baselineColumn.nullable !== currentColumn.nullable) {
117
+ changes.push({
118
+ columnName,
119
+ changeType: 'nullability_changed',
120
+ oldValue: baselineColumn.nullable ? 'NULL' : 'NOT NULL',
121
+ newValue: currentColumn.nullable ? 'NULL' : 'NOT NULL',
122
+ impact: currentColumn.nullable ? 'safe' : 'breaking'
123
+ });
124
+ }
125
+ modifiedColumns.push(...changes);
126
+ }
127
+ }
128
+ const changeCount = addedColumns.length + removedColumns.length + modifiedColumns.length;
129
+ const hasChanges = changeCount > 0;
130
+ const severity = this.calculateSeverity(addedColumns, removedColumns, modifiedColumns);
131
+ const summary = this.generateSummary(addedColumns, removedColumns, modifiedColumns);
132
+ return {
133
+ hasChanges,
134
+ addedColumns,
135
+ removedColumns,
136
+ modifiedColumns,
137
+ summary,
138
+ changeCount,
139
+ severity
140
+ };
141
+ }
142
+ normalizeType(type) {
143
+ return type.toLowerCase()
144
+ .replace(/varchar\(\d+\)/g, 'varchar')
145
+ .replace(/char\(\d+\)/g, 'char')
146
+ .replace(/decimal\(\d+,?\d*\)/g, 'decimal')
147
+ .replace(/numeric\(\d+,?\d*\)/g, 'numeric')
148
+ .trim();
149
+ }
150
+ determineTypeChangeImpact(oldType, newType) {
151
+ const normalizedOld = this.normalizeType(oldType);
152
+ const normalizedNew = this.normalizeType(newType);
153
+ const safeChanges = [
154
+ ['varchar', 'text'],
155
+ ['int', 'bigint'],
156
+ ['integer', 'bigint'],
157
+ ['int', 'numeric'],
158
+ ['integer', 'numeric'],
159
+ ['smallint', 'int'],
160
+ ['smallint', 'integer'],
161
+ ['smallint', 'bigint']
162
+ ];
163
+ for (const [from, to] of safeChanges) {
164
+ if (normalizedOld === from && normalizedNew === to) {
165
+ return 'safe';
166
+ }
167
+ }
168
+ const warningChanges = [
169
+ ['bigint', 'int'],
170
+ ['numeric', 'int'],
171
+ ['text', 'varchar']
172
+ ];
173
+ for (const [from, to] of warningChanges) {
174
+ if (normalizedOld === from && normalizedNew === to) {
175
+ return 'warning';
176
+ }
177
+ }
178
+ return 'breaking';
179
+ }
180
+ calculateSeverity(addedColumns, removedColumns, modifiedColumns) {
181
+ const allChanges = [...addedColumns, ...removedColumns, ...modifiedColumns];
182
+ if (allChanges.some(change => change.impact === 'breaking')) {
183
+ return 'high';
184
+ }
185
+ if (allChanges.some(change => change.impact === 'warning') || removedColumns.length > 0) {
186
+ return 'medium';
187
+ }
188
+ return 'low';
189
+ }
190
+ generateSummary(addedColumns, removedColumns, modifiedColumns) {
191
+ const parts = [];
192
+ if (addedColumns.length > 0) {
193
+ parts.push(`${addedColumns.length} column${addedColumns.length === 1 ? '' : 's'} added`);
194
+ }
195
+ if (removedColumns.length > 0) {
196
+ parts.push(`${removedColumns.length} column${removedColumns.length === 1 ? '' : 's'} removed`);
197
+ }
198
+ if (modifiedColumns.length > 0) {
199
+ const typeChanges = modifiedColumns.filter(c => c.changeType === 'type_changed').length;
200
+ const nullabilityChanges = modifiedColumns.filter(c => c.changeType === 'nullability_changed').length;
201
+ if (typeChanges > 0) {
202
+ parts.push(`${typeChanges} type change${typeChanges === 1 ? '' : 's'}`);
203
+ }
204
+ if (nullabilityChanges > 0) {
205
+ parts.push(`${nullabilityChanges} nullability change${nullabilityChanges === 1 ? '' : 's'}`);
206
+ }
207
+ }
208
+ return parts.length > 0 ? parts.join(', ') : 'No changes detected';
209
+ }
210
+ }
211
+ //# sourceMappingURL=schema-baseline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-baseline.js","sourceRoot":"","sources":["../../src/monitor/schema-baseline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { CheckResult, MonitoringRule, FreshGuardConfig } from '../types.js';
2
+ import type { Connector } from '../types/connector.js';
3
+ import type { MetadataStorage } from '../metadata/interface.js';
4
+ export declare function checkSchemaChanges(connector: Connector, rule: MonitoringRule, metadataStorage?: MetadataStorage, config?: FreshGuardConfig): Promise<CheckResult>;
5
+ //# sourceMappingURL=schema-changes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-changes.d.ts","sourceRoot":"","sources":["../../src/monitor/schema-changes.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAA8B,MAAM,aAAa,CAAC;AAC7G,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAqBhE,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,cAAc,EACpB,eAAe,CAAC,EAAE,eAAe,EACjC,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,WAAW,CAAC,CAoOtB"}
@@ -0,0 +1,289 @@
1
+ import { validateTableName } from '../validators/index.js';
2
+ import { QueryError, TimeoutError, ConfigurationError, ErrorHandler } from '../errors/index.js';
3
+ import { DebugErrorFactory, mergeDebugConfig } from '../errors/debug-factory.js';
4
+ import { SchemaBaselineManager, SchemaComparer } from './schema-baseline.js';
5
+ export async function checkSchemaChanges(connector, rule, metadataStorage, config) {
6
+ const startTime = Date.now();
7
+ const debugConfig = mergeDebugConfig(config?.debug);
8
+ const debugFactory = new DebugErrorFactory(debugConfig);
9
+ const debugId = `fg-schema-${Date.now().toString(36)}-${Math.random().toString(36).substr(2, 5)}`;
10
+ try {
11
+ if (debugConfig.enabled) {
12
+ console.log(`[DEBUG-${debugId}] Starting schema change check:`, {
13
+ table: rule.tableName,
14
+ ruleId: rule.id,
15
+ timestamp: new Date().toISOString()
16
+ });
17
+ }
18
+ validateSchemaChangeRule(rule);
19
+ validateTableName(rule.tableName);
20
+ const baselineManager = new SchemaBaselineManager();
21
+ const schemaComparer = new SchemaComparer();
22
+ const schemaConfig = rule.schemaChangeConfig || {};
23
+ const adaptationMode = schemaConfig.adaptationMode || 'manual';
24
+ const monitoringMode = schemaConfig.monitoringMode || 'full';
25
+ const trackTypes = schemaConfig.trackedColumns?.trackTypes !== false;
26
+ const trackNullability = schemaConfig.trackedColumns?.trackNullability === true;
27
+ const currentSchema = await executeWithTimeout(() => executeSchemaQuery(connector, rule.tableName, debugConfig, debugFactory), config?.timeoutMs || 30000, 'Schema introspection query timeout');
28
+ if (!currentSchema) {
29
+ throw new QueryError('Failed to retrieve current schema', 'schema_query', rule.tableName);
30
+ }
31
+ let baseline = null;
32
+ if (metadataStorage) {
33
+ baseline = await baselineManager.getBaseline(metadataStorage, rule.id);
34
+ }
35
+ if (!baseline) {
36
+ if (debugConfig.enabled) {
37
+ console.log(`[DEBUG-${debugId}] No baseline found, capturing initial schema`);
38
+ }
39
+ if (metadataStorage) {
40
+ await baselineManager.storeBaseline(metadataStorage, rule.id, rule.tableName, currentSchema, 'Initial baseline capture');
41
+ }
42
+ const executedAt = new Date();
43
+ const executionDurationMs = Date.now() - startTime;
44
+ await saveExecutionResult(metadataStorage, {
45
+ ruleId: rule.id,
46
+ status: 'ok',
47
+ executionDurationMs,
48
+ executedAt,
49
+ schemaChanges: {
50
+ hasChanges: false,
51
+ addedColumns: [],
52
+ removedColumns: [],
53
+ modifiedColumns: [],
54
+ summary: 'Initial baseline captured',
55
+ changeCount: 0,
56
+ severity: 'low'
57
+ }
58
+ }, debugConfig);
59
+ return createSecureCheckResult('ok', {
60
+ executionDurationMs,
61
+ executedAt,
62
+ schemaChanges: {
63
+ hasChanges: false,
64
+ addedColumns: [],
65
+ removedColumns: [],
66
+ modifiedColumns: [],
67
+ summary: 'Initial baseline captured',
68
+ changeCount: 0,
69
+ severity: 'low'
70
+ }
71
+ });
72
+ }
73
+ const schemaChanges = schemaComparer.compareSchemas(baseline.schema, currentSchema, {
74
+ trackTypes,
75
+ trackNullability,
76
+ trackedColumns: schemaConfig.trackedColumns?.columns,
77
+ monitoringMode
78
+ });
79
+ let shouldAlert = schemaChanges.hasChanges;
80
+ let shouldUpdateBaseline = false;
81
+ let adaptationReason = '';
82
+ if (schemaChanges.hasChanges) {
83
+ switch (adaptationMode) {
84
+ case 'auto':
85
+ const hasSafeChangesOnly = [...schemaChanges.addedColumns, ...schemaChanges.modifiedColumns]
86
+ .every(change => change.impact === 'safe') && schemaChanges.removedColumns.length === 0;
87
+ if (hasSafeChangesOnly) {
88
+ shouldAlert = false;
89
+ shouldUpdateBaseline = true;
90
+ adaptationReason = `Auto-adaptation: ${schemaChanges.summary}`;
91
+ }
92
+ break;
93
+ case 'alert_only':
94
+ shouldAlert = true;
95
+ shouldUpdateBaseline = false;
96
+ break;
97
+ case 'manual':
98
+ default:
99
+ shouldAlert = true;
100
+ shouldUpdateBaseline = false;
101
+ break;
102
+ }
103
+ }
104
+ if (shouldUpdateBaseline && metadataStorage) {
105
+ await baselineManager.updateBaseline(metadataStorage, rule.id, currentSchema, adaptationReason);
106
+ }
107
+ const status = shouldAlert ? 'alert' : 'ok';
108
+ const executedAt = new Date();
109
+ const executionDurationMs = Date.now() - startTime;
110
+ await saveExecutionResult(metadataStorage, {
111
+ ruleId: rule.id,
112
+ status,
113
+ executionDurationMs,
114
+ executedAt,
115
+ schemaChanges
116
+ }, debugConfig);
117
+ if (debugConfig.enabled) {
118
+ console.log(`[DEBUG-${debugId}] Schema check completed:`, {
119
+ status,
120
+ hasChanges: schemaChanges.hasChanges,
121
+ changeCount: schemaChanges.changeCount,
122
+ summary: schemaChanges.summary,
123
+ adaptationMode,
124
+ baselineUpdated: shouldUpdateBaseline
125
+ });
126
+ }
127
+ return createSecureCheckResult(status, {
128
+ executionDurationMs,
129
+ executedAt,
130
+ schemaChanges,
131
+ debugId
132
+ });
133
+ }
134
+ catch (error) {
135
+ const userMessage = ErrorHandler.getUserMessage(error);
136
+ const executedAt = new Date();
137
+ const executionDurationMs = Date.now() - startTime;
138
+ if (debugConfig.enabled) {
139
+ console.error(`[DEBUG-${debugId}] Schema change check failed:`, {
140
+ table: rule.tableName,
141
+ ruleId: rule.id,
142
+ error: userMessage,
143
+ rawError: debugConfig.exposeRawErrors && error instanceof Error ? error.message : undefined,
144
+ duration: executionDurationMs
145
+ });
146
+ }
147
+ if (rule?.id) {
148
+ await saveExecutionResult(metadataStorage, {
149
+ ruleId: rule.id,
150
+ status: 'failed',
151
+ executionDurationMs,
152
+ executedAt,
153
+ error: userMessage
154
+ }, debugConfig);
155
+ }
156
+ const result = createSecureCheckResult('failed', {
157
+ error: userMessage,
158
+ executionDurationMs,
159
+ executedAt,
160
+ debugId
161
+ });
162
+ if (debugConfig.enabled && error instanceof Error && 'debug' in error) {
163
+ result.debug = error.debug;
164
+ }
165
+ return result;
166
+ }
167
+ }
168
+ async function saveExecutionResult(metadataStorage, execution, debugConfig) {
169
+ if (!metadataStorage)
170
+ return;
171
+ try {
172
+ await metadataStorage.saveExecution({
173
+ ruleId: execution.ruleId,
174
+ status: execution.status,
175
+ executionDurationMs: execution.executionDurationMs,
176
+ executedAt: execution.executedAt,
177
+ schemaChanges: execution.schemaChanges,
178
+ error: execution.error
179
+ });
180
+ }
181
+ catch (error) {
182
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
183
+ if (debugConfig?.enabled) {
184
+ console.error('[DEBUG] Failed to save schema check execution history:', {
185
+ ruleId: execution.ruleId,
186
+ error: errorMessage,
187
+ rawError: debugConfig.exposeRawErrors ? errorMessage : undefined
188
+ });
189
+ }
190
+ else {
191
+ console.warn(`Failed to save execution history for rule ${execution.ruleId}: ${errorMessage}`);
192
+ }
193
+ }
194
+ }
195
+ function validateSchemaChangeRule(rule) {
196
+ if (!rule) {
197
+ throw new ConfigurationError('Monitoring rule is required');
198
+ }
199
+ if (!rule.tableName || typeof rule.tableName !== 'string') {
200
+ throw new ConfigurationError('Table name is required and must be a string');
201
+ }
202
+ if (rule.tableName.length > 256) {
203
+ throw new ConfigurationError('Table name too long (max 256 characters)');
204
+ }
205
+ if (rule.ruleType !== 'schema_change') {
206
+ throw new ConfigurationError('Rule type must be "schema_change" for schema change checks');
207
+ }
208
+ const config = rule.schemaChangeConfig;
209
+ if (config) {
210
+ if (config.adaptationMode && !['auto', 'manual', 'alert_only'].includes(config.adaptationMode)) {
211
+ throw new ConfigurationError('Invalid adaptation mode. Must be auto, manual, or alert_only');
212
+ }
213
+ if (config.monitoringMode && !['full', 'partial'].includes(config.monitoringMode)) {
214
+ throw new ConfigurationError('Invalid monitoring mode. Must be full or partial');
215
+ }
216
+ if (config.trackedColumns?.columns && !Array.isArray(config.trackedColumns.columns)) {
217
+ throw new ConfigurationError('Tracked columns must be an array');
218
+ }
219
+ if (config.baselineRefreshDays && (typeof config.baselineRefreshDays !== 'number' || config.baselineRefreshDays < 1)) {
220
+ throw new ConfigurationError('Baseline refresh days must be a positive number');
221
+ }
222
+ }
223
+ }
224
+ async function executeSchemaQuery(connector, tableName, debugConfig, debugFactory) {
225
+ const startTime = performance.now();
226
+ const queryContext = {
227
+ sql: `connector.getTableSchema('${tableName}')`,
228
+ params: [],
229
+ table: tableName,
230
+ operation: 'schema_query'
231
+ };
232
+ try {
233
+ if (debugConfig.enabled) {
234
+ console.log(`[DEBUG] Executing schema introspection via connector:`, {
235
+ table: tableName,
236
+ operation: debugConfig.exposeQueries
237
+ ? `getTableSchema('${tableName}')`
238
+ : '[Schema introspection operation hidden]'
239
+ });
240
+ }
241
+ const schema = await connector.getTableSchema(tableName);
242
+ queryContext.duration = performance.now() - startTime;
243
+ if (!schema || typeof schema !== 'object') {
244
+ throw debugFactory.createQueryError('Invalid schema returned from connector', undefined, queryContext);
245
+ }
246
+ if (!schema.table || typeof schema.table !== 'string') {
247
+ throw debugFactory.createQueryError('Schema missing table name', undefined, queryContext);
248
+ }
249
+ if (!Array.isArray(schema.columns) || schema.columns.length === 0) {
250
+ throw debugFactory.createQueryError('Schema missing or empty columns array', undefined, queryContext);
251
+ }
252
+ for (const column of schema.columns) {
253
+ if (!column.name || typeof column.name !== 'string') {
254
+ throw debugFactory.createQueryError('Invalid column name in schema', undefined, queryContext);
255
+ }
256
+ if (!column.type || typeof column.type !== 'string') {
257
+ throw debugFactory.createQueryError('Invalid column type in schema', undefined, queryContext);
258
+ }
259
+ if (typeof column.nullable !== 'boolean') {
260
+ throw debugFactory.createQueryError('Invalid column nullable flag in schema', undefined, queryContext);
261
+ }
262
+ }
263
+ return schema;
264
+ }
265
+ catch (error) {
266
+ queryContext.duration = performance.now() - startTime;
267
+ throw debugFactory.createQueryError('Failed to execute schema introspection via connector', error instanceof Error ? error : undefined, queryContext);
268
+ }
269
+ }
270
+ async function executeWithTimeout(operation, timeoutMs, timeoutMessage) {
271
+ return new Promise((resolve, reject) => {
272
+ const timer = setTimeout(() => {
273
+ reject(new TimeoutError(timeoutMessage, 'schema_check', timeoutMs));
274
+ }, timeoutMs);
275
+ operation()
276
+ .then(resolve)
277
+ .catch(reject)
278
+ .finally(() => clearTimeout(timer));
279
+ });
280
+ }
281
+ function createSecureCheckResult(status, data) {
282
+ return {
283
+ status,
284
+ executedAt: data.executedAt || new Date(),
285
+ executionDurationMs: data.executionDurationMs,
286
+ ...data
287
+ };
288
+ }
289
+ //# sourceMappingURL=schema-changes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-changes.js","sourceRoot":"","sources":["../../src/monitor/schema-changes.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEjF,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAW7E,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,SAAoB,EACpB,IAAoB,EACpB,eAAiC,EACjC,MAAyB;IAEzB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,WAAW,GAAG,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,IAAI,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,aAAa,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAElG,IAAI,CAAC;QAEH,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,UAAU,OAAO,iCAAiC,EAAE;gBAC9D,KAAK,EAAE,IAAI,CAAC,SAAS;gBACrB,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,CAAC;QACL,CAAC;QAGD,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAC/B,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAGlC,MAAM,eAAe,GAAG,IAAI,qBAAqB,EAAE,CAAC;QACpD,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;QAG5C,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,IAAI,EAAE,CAAC;QACnD,MAAM,cAAc,GAAG,YAAY,CAAC,cAAc,IAAI,QAAQ,CAAC;QAC/D,MAAM,cAAc,GAAG,YAAY,CAAC,cAAc,IAAI,MAAM,CAAC;QAC7D,MAAM,UAAU,GAAG,YAAY,CAAC,cAAc,EAAE,UAAU,KAAK,KAAK,CAAC;QACrE,MAAM,gBAAgB,GAAG,YAAY,CAAC,cAAc,EAAE,gBAAgB,KAAK,IAAI,CAAC;QAGhF,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAC5C,GAAG,EAAE,CAAC,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC,EAC9E,MAAM,EAAE,SAAS,IAAI,KAAK,EAC1B,oCAAoC,CACrC,CAAC;QAEF,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,UAAU,CAAC,mCAAmC,EAAE,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5F,CAAC;QAGD,IAAI,QAAQ,GAAgD,IAAI,CAAC;QACjE,IAAI,eAAe,EAAE,CAAC;YACpB,QAAQ,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC;QAGD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,UAAU,OAAO,+CAA+C,CAAC,CAAC;YAChF,CAAC;YAED,IAAI,eAAe,EAAE,CAAC;gBACpB,MAAM,eAAe,CAAC,aAAa,CACjC,eAAe,EACf,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,SAAS,EACd,aAAa,EACb,0BAA0B,CAC3B,CAAC;YACJ,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;YAC9B,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAEnD,MAAM,mBAAmB,CAAC,eAAe,EAAE;gBACzC,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,MAAM,EAAE,IAAI;gBACZ,mBAAmB;gBACnB,UAAU;gBACV,aAAa,EAAE;oBACb,UAAU,EAAE,KAAK;oBACjB,YAAY,EAAE,EAAE;oBAChB,cAAc,EAAE,EAAE;oBAClB,eAAe,EAAE,EAAE;oBACnB,OAAO,EAAE,2BAA2B;oBACpC,WAAW,EAAE,CAAC;oBACd,QAAQ,EAAE,KAAc;iBACzB;aACF,EAAE,WAAW,CAAC,CAAC;YAEhB,OAAO,uBAAuB,CAAC,IAAI,EAAE;gBACnC,mBAAmB;gBACnB,UAAU;gBACV,aAAa,EAAE;oBACb,UAAU,EAAE,KAAK;oBACjB,YAAY,EAAE,EAAE;oBAChB,cAAc,EAAE,EAAE;oBAClB,eAAe,EAAE,EAAE;oBACnB,OAAO,EAAE,2BAA2B;oBACpC,WAAW,EAAE,CAAC;oBACd,QAAQ,EAAE,KAAc;iBACzB;aACF,CAAC,CAAC;QACL,CAAC;QAGD,MAAM,aAAa,GAAG,cAAc,CAAC,cAAc,CACjD,QAAQ,CAAC,MAAM,EACf,aAAa,EACb;YACE,UAAU;YACV,gBAAgB;YAChB,cAAc,EAAE,YAAY,CAAC,cAAc,EAAE,OAAO;YACpD,cAAc;SACf,CACF,CAAC;QAGF,IAAI,WAAW,GAAG,aAAa,CAAC,UAAU,CAAC;QAC3C,IAAI,oBAAoB,GAAG,KAAK,CAAC;QACjC,IAAI,gBAAgB,GAAG,EAAE,CAAC;QAE1B,IAAI,aAAa,CAAC,UAAU,EAAE,CAAC;YAC7B,QAAQ,cAAc,EAAE,CAAC;gBACvB,KAAK,MAAM;oBAET,MAAM,kBAAkB,GAAG,CAAC,GAAG,aAAa,CAAC,YAAY,EAAE,GAAG,aAAa,CAAC,eAAe,CAAC;yBACzF,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,aAAa,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC;oBAE1F,IAAI,kBAAkB,EAAE,CAAC;wBACvB,WAAW,GAAG,KAAK,CAAC;wBACpB,oBAAoB,GAAG,IAAI,CAAC;wBAC5B,gBAAgB,GAAG,oBAAoB,aAAa,CAAC,OAAO,EAAE,CAAC;oBACjE,CAAC;oBACD,MAAM;gBAER,KAAK,YAAY;oBAEf,WAAW,GAAG,IAAI,CAAC;oBACnB,oBAAoB,GAAG,KAAK,CAAC;oBAC7B,MAAM;gBAER,KAAK,QAAQ,CAAC;gBACd;oBAEE,WAAW,GAAG,IAAI,CAAC;oBACnB,oBAAoB,GAAG,KAAK,CAAC;oBAC7B,MAAM;YACV,CAAC;QACH,CAAC;QAGD,IAAI,oBAAoB,IAAI,eAAe,EAAE,CAAC;YAC5C,MAAM,eAAe,CAAC,cAAc,CAClC,eAAe,EACf,IAAI,CAAC,EAAE,EACP,aAAa,EACb,gBAAgB,CACjB,CAAC;QACJ,CAAC;QAGD,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5C,MAAM,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;QAC9B,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAGnD,MAAM,mBAAmB,CAAC,eAAe,EAAE;YACzC,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,MAAM;YACN,mBAAmB;YACnB,UAAU;YACV,aAAa;SACd,EAAE,WAAW,CAAC,CAAC;QAEhB,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,UAAU,OAAO,2BAA2B,EAAE;gBACxD,MAAM;gBACN,UAAU,EAAE,aAAa,CAAC,UAAU;gBACpC,WAAW,EAAE,aAAa,CAAC,WAAW;gBACtC,OAAO,EAAE,aAAa,CAAC,OAAO;gBAC9B,cAAc;gBACd,eAAe,EAAE,oBAAoB;aACtC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,uBAAuB,CAAC,MAAM,EAAE;YACrC,mBAAmB;YACnB,UAAU;YACV,aAAa;YACb,OAAO;SACR,CAAC,CAAC;IAEL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAEf,MAAM,WAAW,GAAG,YAAY,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACvD,MAAM,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;QAC9B,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAGnD,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,+BAA+B,EAAE;gBAC9D,KAAK,EAAE,IAAI,CAAC,SAAS;gBACrB,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,KAAK,EAAE,WAAW;gBAClB,QAAQ,EAAE,WAAW,CAAC,eAAe,IAAI,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;gBAC3F,QAAQ,EAAE,mBAAmB;aAC9B,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,EAAE,EAAE,EAAE,CAAC;YACb,MAAM,mBAAmB,CAAC,eAAe,EAAE;gBACzC,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,MAAM,EAAE,QAAQ;gBAChB,mBAAmB;gBACnB,UAAU;gBACV,KAAK,EAAE,WAAW;aACnB,EAAE,WAAW,CAAC,CAAC;QAClB,CAAC;QAGD,MAAM,MAAM,GAAG,uBAAuB,CAAC,QAAQ,EAAE;YAC/C,KAAK,EAAE,WAAW;YAClB,mBAAmB;YACnB,UAAU;YACV,OAAO;SACR,CAAC,CAAC;QAGH,IAAI,WAAW,CAAC,OAAO,IAAI,KAAK,YAAY,KAAK,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;YACtE,MAAM,CAAC,KAAK,GAAI,KAAa,CAAC,KAAK,CAAC;QACtC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC;AAKD,KAAK,UAAU,mBAAmB,CAChC,eAA4C,EAC5C,SAOC,EACD,WAAyB;IAEzB,IAAI,CAAC,eAAe;QAAE,OAAO;IAE7B,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,aAAa,CAAC;YAClC,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,mBAAmB,EAAE,SAAS,CAAC,mBAAmB;YAClD,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,aAAa,EAAE,SAAS,CAAC,aAAa;YACtC,KAAK,EAAE,SAAS,CAAC,KAAK;SACvB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QAE9E,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,wDAAwD,EAAE;gBACtE,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,KAAK,EAAE,YAAY;gBACnB,QAAQ,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;aACjE,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,6CAA6C,SAAS,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC,CAAC;QACjG,CAAC;IACH,CAAC;AACH,CAAC;AAKD,SAAS,wBAAwB,CAAC,IAAoB;IACpD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,kBAAkB,CAAC,6BAA6B,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC1D,MAAM,IAAI,kBAAkB,CAAC,6CAA6C,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QAChC,MAAM,IAAI,kBAAkB,CAAC,0CAA0C,CAAC,CAAC;IAC3E,CAAC;IAGD,IAAI,IAAI,CAAC,QAAQ,KAAK,eAAe,EAAE,CAAC;QACtC,MAAM,IAAI,kBAAkB,CAAC,4DAA4D,CAAC,CAAC;IAC7F,CAAC;IAGD,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC;IACvC,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;YAC/F,MAAM,IAAI,kBAAkB,CAAC,8DAA8D,CAAC,CAAC;QAC/F,CAAC;QAED,IAAI,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;YAClF,MAAM,IAAI,kBAAkB,CAAC,kDAAkD,CAAC,CAAC;QACnF,CAAC;QAED,IAAI,MAAM,CAAC,cAAc,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YACpF,MAAM,IAAI,kBAAkB,CAAC,kCAAkC,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,MAAM,CAAC,mBAAmB,IAAI,CAAC,OAAO,MAAM,CAAC,mBAAmB,KAAK,QAAQ,IAAI,MAAM,CAAC,mBAAmB,GAAG,CAAC,CAAC,EAAE,CAAC;YACrH,MAAM,IAAI,kBAAkB,CAAC,iDAAiD,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;AACH,CAAC;AAKD,KAAK,UAAU,kBAAkB,CAC/B,SAAoB,EACpB,SAAiB,EACjB,WAAwB,EACxB,YAA+B;IAE/B,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IAEpC,MAAM,YAAY,GAAiB;QACjC,GAAG,EAAE,6BAA6B,SAAS,IAAI;QAC/C,MAAM,EAAE,EAAE;QACV,KAAK,EAAE,SAAS;QAChB,SAAS,EAAE,cAAc;KAC1B,CAAC;IAEF,IAAI,CAAC;QAEH,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,uDAAuD,EAAE;gBACnE,KAAK,EAAE,SAAS;gBAChB,SAAS,EAAE,WAAW,CAAC,aAAa;oBAClC,CAAC,CAAC,mBAAmB,SAAS,IAAI;oBAClC,CAAC,CAAC,yCAAyC;aAC9C,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAEzD,YAAY,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAGtD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,YAAY,CAAC,gBAAgB,CACjC,wCAAwC,EACxC,SAAS,EACT,YAAY,CACb,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACtD,MAAM,YAAY,CAAC,gBAAgB,CACjC,2BAA2B,EAC3B,SAAS,EACT,YAAY,CACb,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClE,MAAM,YAAY,CAAC,gBAAgB,CACjC,uCAAuC,EACvC,SAAS,EACT,YAAY,CACb,CAAC;QACJ,CAAC;QAGD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACpD,MAAM,YAAY,CAAC,gBAAgB,CACjC,+BAA+B,EAC/B,SAAS,EACT,YAAY,CACb,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACpD,MAAM,YAAY,CAAC,gBAAgB,CACjC,+BAA+B,EAC/B,SAAS,EACT,YAAY,CACb,CAAC;YACJ,CAAC;YAED,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACzC,MAAM,YAAY,CAAC,gBAAgB,CACjC,wCAAwC,EACxC,SAAS,EACT,YAAY,CACb,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,YAAY,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAGtD,MAAM,YAAY,CAAC,gBAAgB,CACjC,sDAAsD,EACtD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAC1C,YAAY,CACb,CAAC;IACJ,CAAC;AACH,CAAC;AAKD,KAAK,UAAU,kBAAkB,CAC/B,SAA2B,EAC3B,SAAiB,EACjB,cAAsB;IAEtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,MAAM,CAAC,IAAI,YAAY,CAAC,cAAc,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC;QACtE,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,SAAS,EAAE;aACR,IAAI,CAAC,OAAO,CAAC;aACb,KAAK,CAAC,MAAM,CAAC;aACb,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC;AAKD,SAAS,uBAAuB,CAAC,MAA6B,EAAE,IAA0B;IACxF,OAAO;QACL,MAAM;QACN,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE;QACzC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;QAC7C,GAAG,IAAI;KACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { CheckResult, MonitoringRule, FreshGuardConfig } from '../types.js';
2
+ import type { Connector } from '../types/connector.js';
3
+ import type { MetadataStorage } from '../metadata/interface.js';
4
+ export declare function checkVolumeAnomaly(connector: Connector, rule: MonitoringRule, metadataStorage?: MetadataStorage, config?: FreshGuardConfig): Promise<CheckResult>;
5
+ //# sourceMappingURL=volume.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"volume.d.ts","sourceRoot":"","sources":["../../src/monitor/volume.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAAe,MAAM,aAAa,CAAC;AAC9F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAqBhE,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,cAAc,EACpB,eAAe,CAAC,EAAE,eAAe,EACjC,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,WAAW,CAAC,CA+LtB"}