@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,364 @@
1
+ import { DuckDBInstance } from '@duckdb/node-api';
2
+ import { BaseConnector } from './base-connector.js';
3
+ import { ConnectionError, TimeoutError, QueryError, ConfigurationError, ErrorHandler } from '../errors/index.js';
4
+ import { validateDatabaseIdentifier } from '../validators/index.js';
5
+ import { existsSync } from 'fs';
6
+ import { resolve } from 'path';
7
+ export class DuckDBConnector extends BaseConnector {
8
+ instance = null;
9
+ connection = null;
10
+ databasePath = '';
11
+ connected = false;
12
+ constructor(config, securityConfig) {
13
+ DuckDBConnector.validateDuckDBConfig(config);
14
+ super(config, securityConfig);
15
+ this.databasePath = config.database === ':memory:' ? ':memory:' : resolve(config.database);
16
+ }
17
+ static validateDuckDBConfig(config) {
18
+ if (!config.database) {
19
+ throw new ConfigurationError('Database path is required for DuckDB');
20
+ }
21
+ if (config.database !== ':memory:') {
22
+ const resolvedPath = resolve(config.database);
23
+ if (config.database.includes('..')) {
24
+ throw new ConfigurationError('Database path cannot contain directory traversal patterns');
25
+ }
26
+ const systemPaths = ['/etc', '/sys', '/proc', '/dev', '/root', '/var/log'];
27
+ if (systemPaths.some(sysPath => resolvedPath.startsWith(sysPath))) {
28
+ throw new ConfigurationError('Database path cannot access system directories');
29
+ }
30
+ }
31
+ }
32
+ async connect() {
33
+ if (this.connected && this.instance && this.connection) {
34
+ return;
35
+ }
36
+ try {
37
+ if (this.databasePath !== ':memory:') {
38
+ const dirPath = this.databasePath.substring(0, this.databasePath.lastIndexOf('/'));
39
+ if (dirPath && !existsSync(dirPath)) {
40
+ throw new ConnectionError('Database directory does not exist');
41
+ }
42
+ }
43
+ this.instance = await this.executeWithTimeout(() => this.databasePath === ':memory:'
44
+ ? DuckDBInstance.create()
45
+ : DuckDBInstance.create(this.databasePath), this.connectionTimeout);
46
+ this.connection = await this.executeWithTimeout(() => this.instance.connect(), this.connectionTimeout);
47
+ this.connected = true;
48
+ }
49
+ catch (error) {
50
+ if (error instanceof TimeoutError) {
51
+ throw error;
52
+ }
53
+ throw new ConnectionError('Failed to connect to DuckDB', 'localhost', undefined, error instanceof Error ? error : undefined);
54
+ }
55
+ }
56
+ async executeQuery(sql) {
57
+ return this.executeParameterizedQuery(sql, []);
58
+ }
59
+ async executeParameterizedQuery(sql, parameters = []) {
60
+ await this.connect();
61
+ if (!this.connection) {
62
+ throw new ConnectionError('DuckDB connection not available');
63
+ }
64
+ try {
65
+ let finalSql = sql;
66
+ if (parameters.length > 0) {
67
+ for (let i = 0; i < parameters.length; i++) {
68
+ const param = parameters[i];
69
+ const placeholder = `$${i + 1}`;
70
+ if (typeof param === 'number') {
71
+ finalSql = finalSql.replace(placeholder, param.toString());
72
+ }
73
+ else if (typeof param === 'string') {
74
+ const escapedParam = param.replace(/'/g, "''");
75
+ finalSql = finalSql.replace(placeholder, `'${escapedParam}'`);
76
+ }
77
+ else {
78
+ throw new Error(`Unsupported parameter type: ${typeof param}`);
79
+ }
80
+ }
81
+ }
82
+ const reader = await this.executeWithTimeout(() => this.connection.runAndReadAll(finalSql), this.queryTimeout);
83
+ const rows = reader.getRowObjects();
84
+ this.validateResultSize(rows);
85
+ return rows;
86
+ }
87
+ catch (error) {
88
+ if (error instanceof TimeoutError) {
89
+ throw error;
90
+ }
91
+ throw new QueryError(ErrorHandler.getUserMessage(error), 'query_execution', undefined, error instanceof Error ? error : undefined);
92
+ }
93
+ }
94
+ async testConnection(debugConfig) {
95
+ const mergedDebugConfig = this.mergeDebugConfig(debugConfig);
96
+ const debugId = `duck-test-${Date.now().toString(36)}-${Math.random().toString(36).substr(2, 5)}`;
97
+ const startTime = performance.now();
98
+ try {
99
+ this.logDebugInfo(mergedDebugConfig, debugId, 'Starting DuckDB connection test', {
100
+ databasePath: this.databasePath,
101
+ isFileDatabase: this.databasePath !== ':memory:' && !this.databasePath.startsWith('md:'),
102
+ isMemoryDatabase: this.databasePath === ':memory:'
103
+ });
104
+ await this.connect();
105
+ if (!this.connection) {
106
+ this.logDebugError(mergedDebugConfig, debugId, 'DuckDB connection test', {
107
+ error: 'Connection not available after connect',
108
+ duration: performance.now() - startTime
109
+ });
110
+ return false;
111
+ }
112
+ const sql = 'SELECT 1 as test';
113
+ await this.executeWithTimeout(() => this.connection.run(sql), this.connectionTimeout);
114
+ const duration = performance.now() - startTime;
115
+ if (mergedDebugConfig?.enabled) {
116
+ console.log(`[DEBUG-${debugId}] DuckDB connection test completed:`, {
117
+ success: true,
118
+ duration,
119
+ databasePath: this.databasePath,
120
+ type: this.databasePath === ':memory:' ? 'in-memory' : 'file'
121
+ });
122
+ }
123
+ return true;
124
+ }
125
+ catch (error) {
126
+ const duration = performance.now() - startTime;
127
+ this.logDebugError(mergedDebugConfig, debugId, 'DuckDB connection test', {
128
+ databasePath: this.databasePath,
129
+ error: mergedDebugConfig?.exposeRawErrors && error instanceof Error ? error.message : 'Connection failed',
130
+ duration,
131
+ suggestion: this.generateDuckDBConnectionSuggestion(error)
132
+ });
133
+ return false;
134
+ }
135
+ }
136
+ mergeDebugConfig(debugConfig) {
137
+ return {
138
+ enabled: debugConfig?.enabled ?? (process.env.NODE_ENV === 'development'),
139
+ exposeQueries: debugConfig?.exposeQueries ?? true,
140
+ exposeRawErrors: debugConfig?.exposeRawErrors ?? true,
141
+ logLevel: debugConfig?.logLevel ?? 'debug'
142
+ };
143
+ }
144
+ generateDuckDBConnectionSuggestion(error) {
145
+ if (!(error instanceof Error)) {
146
+ return 'Check DuckDB database configuration';
147
+ }
148
+ const message = error.message.toLowerCase();
149
+ if (message.includes('no such file') || message.includes('file not found')) {
150
+ return `Database file '${this.databasePath}' not found. Check file path and ensure file exists with read permissions.`;
151
+ }
152
+ if (message.includes('permission denied') || message.includes('access denied')) {
153
+ return `Permission denied accessing '${this.databasePath}'. Check file permissions and directory access rights.`;
154
+ }
155
+ if (message.includes('database is locked') || message.includes('locked')) {
156
+ return `Database '${this.databasePath}' is locked by another process. Close other connections or wait for release.`;
157
+ }
158
+ if (message.includes('disk') || message.includes('space')) {
159
+ return `Disk space issue with database '${this.databasePath}'. Check available disk space and permissions.`;
160
+ }
161
+ if (message.includes('corrupt') || message.includes('malformed')) {
162
+ return `Database file '${this.databasePath}' appears to be corrupted. Consider restoring from backup or recreating.`;
163
+ }
164
+ if (message.includes('read-only') || message.includes('readonly')) {
165
+ return `Database '${this.databasePath}' is read-only. Check file permissions or mount options.`;
166
+ }
167
+ if (message.includes('too many connections')) {
168
+ return `Too many connections to database '${this.databasePath}'. Close unused connections and retry.`;
169
+ }
170
+ if (this.databasePath === ':memory:') {
171
+ return `In-memory database connection failed. This may indicate a DuckDB installation or memory issue.`;
172
+ }
173
+ if (this.databasePath.includes('/') || this.databasePath.includes('\\')) {
174
+ return `File path issue with '${this.databasePath}'. Verify directory exists and has proper permissions.`;
175
+ }
176
+ return `DuckDB connection failed for database '${this.databasePath}'. Check file path, permissions, and disk space.`;
177
+ }
178
+ async listTables() {
179
+ const sql = `
180
+ SELECT table_name
181
+ FROM information_schema.tables
182
+ WHERE table_schema NOT IN ('information_schema', 'pg_catalog')
183
+ ORDER BY table_name
184
+ LIMIT $1
185
+ `;
186
+ this.validateQuery(sql);
187
+ try {
188
+ const result = await this.executeParameterizedQuery(sql, [this.maxRows]);
189
+ return result.map((row) => row.table_name).filter(Boolean);
190
+ }
191
+ catch (error) {
192
+ throw new QueryError('Failed to list tables', 'table_listing', undefined, error instanceof Error ? error : undefined);
193
+ }
194
+ }
195
+ async getTableSchema(table) {
196
+ this.escapeIdentifier(table);
197
+ const sql = `
198
+ SELECT
199
+ column_name,
200
+ data_type,
201
+ is_nullable
202
+ FROM information_schema.columns
203
+ WHERE table_name = $1
204
+ AND table_schema NOT IN ('information_schema', 'pg_catalog')
205
+ ORDER BY ordinal_position
206
+ LIMIT $2
207
+ `;
208
+ this.validateQuery(sql);
209
+ try {
210
+ const result = await this.executeParameterizedQuery(sql, [table, this.maxRows]);
211
+ if (result.length === 0) {
212
+ throw QueryError.tableNotFound(table);
213
+ }
214
+ return {
215
+ table,
216
+ columns: result.map(row => ({
217
+ name: row.column_name,
218
+ type: this.mapDuckDBType(row.data_type),
219
+ nullable: row.is_nullable === 'YES'
220
+ }))
221
+ };
222
+ }
223
+ catch (error) {
224
+ if (error instanceof QueryError) {
225
+ throw error;
226
+ }
227
+ throw new QueryError('Failed to get table schema', 'schema_query', table, error instanceof Error ? error : undefined);
228
+ }
229
+ }
230
+ async getLastModified(table) {
231
+ const timestampColumns = [
232
+ 'updated_at', 'modified_at', 'last_modified', 'timestamp',
233
+ 'created_at', 'date_modified', 'last_update'
234
+ ];
235
+ for (const column of timestampColumns) {
236
+ try {
237
+ const result = await this.getMaxTimestamp(table, column);
238
+ if (result) {
239
+ return result;
240
+ }
241
+ }
242
+ catch {
243
+ continue;
244
+ }
245
+ }
246
+ return null;
247
+ }
248
+ async close() {
249
+ try {
250
+ if (this.connection) {
251
+ this.connection.closeSync();
252
+ this.connection = null;
253
+ }
254
+ if (this.instance) {
255
+ this.instance = null;
256
+ }
257
+ this.connected = false;
258
+ }
259
+ catch (error) {
260
+ console.warn('Warning: Error closing DuckDB connection:', ErrorHandler.getUserMessage(error));
261
+ }
262
+ finally {
263
+ this.connection = null;
264
+ this.instance = null;
265
+ this.connected = false;
266
+ }
267
+ }
268
+ mapDuckDBType(duckdbType) {
269
+ const typeMap = {
270
+ 'BIGINT': 'bigint',
271
+ 'INTEGER': 'integer',
272
+ 'SMALLINT': 'integer',
273
+ 'TINYINT': 'integer',
274
+ 'UBIGINT': 'bigint',
275
+ 'UINTEGER': 'integer',
276
+ 'USMALLINT': 'integer',
277
+ 'UTINYINT': 'integer',
278
+ 'VARCHAR': 'text',
279
+ 'TEXT': 'text',
280
+ 'BLOB': 'binary',
281
+ 'DATE': 'date',
282
+ 'TIME': 'time',
283
+ 'TIMESTAMP': 'timestamp',
284
+ 'TIMESTAMP WITH TIME ZONE': 'timestamptz',
285
+ 'TIMESTAMPTZ': 'timestamptz',
286
+ 'BOOLEAN': 'boolean',
287
+ 'REAL': 'float',
288
+ 'DOUBLE': 'float',
289
+ 'DECIMAL': 'decimal',
290
+ 'NUMERIC': 'decimal',
291
+ 'JSON': 'json',
292
+ 'UUID': 'uuid',
293
+ 'INTERVAL': 'interval'
294
+ };
295
+ return typeMap[duckdbType.toUpperCase()] || 'unknown';
296
+ }
297
+ async connectLegacy(credentials) {
298
+ console.warn('Warning: connectLegacy is deprecated. Use constructor with ConnectorConfig instead.');
299
+ const dbPath = credentials.connectionString || credentials.database || ':memory:';
300
+ const config = {
301
+ host: 'localhost',
302
+ port: 0,
303
+ database: dbPath,
304
+ username: 'duckdb',
305
+ password: 'duckdb',
306
+ ssl: false
307
+ };
308
+ DuckDBConnector.validateDuckDBConfig(config);
309
+ this.config = { ...this.config, ...config };
310
+ this.databasePath = config.database === ':memory:' ? ':memory:' : resolve(config.database);
311
+ await this.connect();
312
+ }
313
+ async testConnectionLegacy() {
314
+ console.warn('Warning: testConnectionLegacy is deprecated. Use testConnection() instead.');
315
+ try {
316
+ const success = await this.testConnection();
317
+ if (success) {
318
+ const tables = await this.listTables();
319
+ return {
320
+ success: true,
321
+ tableCount: tables.length
322
+ };
323
+ }
324
+ else {
325
+ return {
326
+ success: false,
327
+ error: 'Connection test failed'
328
+ };
329
+ }
330
+ }
331
+ catch (error) {
332
+ return {
333
+ success: false,
334
+ error: ErrorHandler.getUserMessage(error)
335
+ };
336
+ }
337
+ }
338
+ async getTableMetadata(tableName, timestampColumn = 'updated_at') {
339
+ console.warn('Warning: getTableMetadata is deprecated. Use getRowCount() and getMaxTimestamp() instead.');
340
+ try {
341
+ validateDatabaseIdentifier(tableName, 'table');
342
+ validateDatabaseIdentifier(timestampColumn, 'column');
343
+ const rowCount = await this.getRowCount(tableName);
344
+ const lastUpdate = await this.getMaxTimestamp(tableName, timestampColumn);
345
+ return {
346
+ rowCount,
347
+ lastUpdate: lastUpdate || undefined
348
+ };
349
+ }
350
+ catch (error) {
351
+ throw new QueryError('Failed to get table metadata', 'metadata_query', tableName, error instanceof Error ? error : undefined);
352
+ }
353
+ }
354
+ async query(_sql) {
355
+ throw new Error('Direct SQL queries are not allowed for security reasons. Use specific methods like getRowCount(), getMaxTimestamp(), etc.');
356
+ }
357
+ getDatabasePath() {
358
+ return this.databasePath;
359
+ }
360
+ isInMemory() {
361
+ return this.databasePath === ':memory:';
362
+ }
363
+ }
364
+ //# sourceMappingURL=duckdb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duckdb.js","sourceRoot":"","sources":["../../src/connectors/duckdb.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export { PostgresConnector } from './postgres.js';
2
+ export { DuckDBConnector } from './duckdb.js';
3
+ export { BigQueryConnector } from './bigquery.js';
4
+ export { SnowflakeConnector } from './snowflake.js';
5
+ export { MySQLConnector } from './mysql.js';
6
+ export { RedshiftConnector } from './redshift.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/connectors/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { PostgresConnector } from './postgres.js';
2
+ export { DuckDBConnector } from './duckdb.js';
3
+ export { BigQueryConnector } from './bigquery.js';
4
+ export { SnowflakeConnector } from './snowflake.js';
5
+ export { MySQLConnector } from './mysql.js';
6
+ export { RedshiftConnector } from './redshift.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/connectors/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { BaseConnector } from './base-connector.js';
2
+ import type { ConnectorConfig, TableSchema, SecurityConfig } from '../types/connector.js';
3
+ import type { SourceCredentials } from '../types.js';
4
+ export declare class MySQLConnector extends BaseConnector {
5
+ private connection;
6
+ private connected;
7
+ constructor(config: ConnectorConfig, securityConfig?: Partial<SecurityConfig>);
8
+ private connect;
9
+ protected executeQuery(sql: string): Promise<any[]>;
10
+ protected executeParameterizedQuery(sql: string, parameters?: any[]): Promise<any[]>;
11
+ testConnection(debugConfig?: import('../types.js').DebugConfig): Promise<boolean>;
12
+ private mergeDebugConfig;
13
+ private generateConnectionSuggestion;
14
+ listTables(): Promise<string[]>;
15
+ getTableSchema(table: string): Promise<TableSchema>;
16
+ getLastModified(table: string): Promise<Date | null>;
17
+ close(): Promise<void>;
18
+ private mapMySQLType;
19
+ protected escapeIdentifier(identifier: string): string;
20
+ connectLegacy(credentials: SourceCredentials): Promise<void>;
21
+ testConnectionLegacy(): Promise<{
22
+ success: boolean;
23
+ tableCount?: number;
24
+ error?: string;
25
+ }>;
26
+ getTableMetadata(tableName: string, timestampColumn?: string): Promise<{
27
+ rowCount: number;
28
+ lastUpdate?: Date;
29
+ }>;
30
+ query<T = unknown>(_sql: string): Promise<T[]>;
31
+ }
32
+ //# sourceMappingURL=mysql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql.d.ts","sourceRoot":"","sources":["../../src/connectors/mysql.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAmBrD,qBAAa,cAAe,SAAQ,aAAa;IAC/C,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,eAAe,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC;YAS/D,OAAO;cA6CL,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;cAOzC,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,GAAE,GAAG,EAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAuCxF,cAAc,CAAC,WAAW,CAAC,EAAE,OAAO,aAAa,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAkEvF,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,4BAA4B;IAiC9B,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IA2B/B,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAkDnD,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAwCpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB5B,OAAO,CAAC,YAAY;IAyDpB,SAAS,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAuBhD,aAAa,CAAC,WAAW,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB5D,oBAAoB,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IA+B1F,gBAAgB,CACpB,SAAS,EAAE,MAAM,EACjB,eAAe,SAAe,GAC7B,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,IAAI,CAAA;KAAE,CAAC;IAyB7C,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;CAKrD"}