@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,348 @@
1
+ import mysql from 'mysql2/promise';
2
+ import { BaseConnector } from './base-connector.js';
3
+ import { ConnectionError, TimeoutError, QueryError, ErrorHandler } from '../errors/index.js';
4
+ import { validateConnectorConfig } from '../validators/index.js';
5
+ export class MySQLConnector extends BaseConnector {
6
+ connection = null;
7
+ connected = false;
8
+ constructor(config, securityConfig) {
9
+ validateConnectorConfig(config);
10
+ super(config, securityConfig);
11
+ }
12
+ async connect() {
13
+ if (this.connected && this.connection) {
14
+ return;
15
+ }
16
+ try {
17
+ const connectionConfig = {
18
+ host: this.config.host,
19
+ port: this.config.port || 3306,
20
+ database: this.config.database,
21
+ user: this.config.username,
22
+ password: this.config.password,
23
+ connectTimeout: this.connectionTimeout,
24
+ timeout: this.queryTimeout,
25
+ charset: 'utf8mb4',
26
+ timezone: 'Z',
27
+ dateStrings: false,
28
+ supportBigNumbers: true,
29
+ bigNumberStrings: false
30
+ };
31
+ if (this.requireSSL && this.config.ssl !== false) {
32
+ connectionConfig.ssl = { rejectUnauthorized: true };
33
+ }
34
+ this.connection = await mysql.createConnection(connectionConfig);
35
+ this.connected = true;
36
+ }
37
+ catch (error) {
38
+ throw new ConnectionError('Failed to connect to MySQL', this.config.host, this.config.port, error instanceof Error ? error : undefined);
39
+ }
40
+ }
41
+ async executeQuery(sql) {
42
+ return this.executeParameterizedQuery(sql, []);
43
+ }
44
+ async executeParameterizedQuery(sql, parameters = []) {
45
+ await this.connect();
46
+ if (!this.connection) {
47
+ throw new ConnectionError('Database connection not available');
48
+ }
49
+ try {
50
+ const result = await this.executeWithTimeout(async () => {
51
+ const [rows] = await this.connection.execute(sql, parameters);
52
+ return Array.isArray(rows) ? rows : [rows];
53
+ }, this.queryTimeout);
54
+ this.validateResultSize(result);
55
+ return result;
56
+ }
57
+ catch (error) {
58
+ if (error instanceof TimeoutError) {
59
+ throw error;
60
+ }
61
+ throw new QueryError(ErrorHandler.getUserMessage(error), 'query_execution', undefined, error instanceof Error ? error : undefined);
62
+ }
63
+ }
64
+ async testConnection(debugConfig) {
65
+ const mergedDebugConfig = this.mergeDebugConfig(debugConfig);
66
+ const debugId = `mysql-test-${Date.now().toString(36)}-${Math.random().toString(36).substr(2, 5)}`;
67
+ const startTime = performance.now();
68
+ try {
69
+ this.logDebugInfo(mergedDebugConfig, debugId, 'Starting connection test', {
70
+ host: this.config.host,
71
+ port: this.config.port,
72
+ database: this.config.database,
73
+ ssl: this.config.ssl
74
+ });
75
+ await this.connect();
76
+ if (!this.connection) {
77
+ this.logDebugError(mergedDebugConfig, debugId, 'Connection test', {
78
+ error: 'Connection not available after connect',
79
+ duration: performance.now() - startTime
80
+ });
81
+ return false;
82
+ }
83
+ const sql = 'SELECT 1 as test';
84
+ await this.executeWithTimeout(async () => {
85
+ const [rows] = await this.connection.execute(sql);
86
+ return rows;
87
+ }, this.connectionTimeout);
88
+ const duration = performance.now() - startTime;
89
+ if (mergedDebugConfig?.enabled) {
90
+ console.log(`[DEBUG-${debugId}] Connection test completed:`, {
91
+ success: true,
92
+ duration,
93
+ host: this.config.host,
94
+ database: this.config.database
95
+ });
96
+ }
97
+ return true;
98
+ }
99
+ catch (error) {
100
+ const duration = performance.now() - startTime;
101
+ this.logDebugError(mergedDebugConfig, debugId, 'Connection test', {
102
+ host: this.config.host,
103
+ port: this.config.port,
104
+ database: this.config.database,
105
+ error: mergedDebugConfig?.exposeRawErrors && error instanceof Error ? error.message : 'Connection failed',
106
+ duration,
107
+ suggestion: this.generateConnectionSuggestion(error)
108
+ });
109
+ return false;
110
+ }
111
+ }
112
+ mergeDebugConfig(debugConfig) {
113
+ return {
114
+ enabled: debugConfig?.enabled ?? (process.env.NODE_ENV === 'development'),
115
+ exposeQueries: debugConfig?.exposeQueries ?? true,
116
+ exposeRawErrors: debugConfig?.exposeRawErrors ?? true,
117
+ logLevel: debugConfig?.logLevel ?? 'debug'
118
+ };
119
+ }
120
+ generateConnectionSuggestion(error) {
121
+ if (!(error instanceof Error)) {
122
+ return 'Check database connection configuration';
123
+ }
124
+ const message = error.message.toLowerCase();
125
+ if (message.includes('connect econnrefused') || message.includes('connection refused')) {
126
+ return `MySQL server at ${this.config.host}:${this.config.port} is not accepting connections. Verify the server is running and accessible.`;
127
+ }
128
+ if (message.includes('timeout')) {
129
+ return `Connection timeout to ${this.config.host}:${this.config.port}. Check network connectivity and server responsiveness.`;
130
+ }
131
+ if (message.includes('access denied') || message.includes('authentication failed')) {
132
+ return `Authentication failed for database '${this.config.database}'. Verify username, password, and database name.`;
133
+ }
134
+ if (message.includes('unknown database')) {
135
+ return `Database '${this.config.database}' not found on server. Check database name and create if necessary.`;
136
+ }
137
+ if (message.includes('ssl') || message.includes('tls')) {
138
+ return `SSL/TLS connection issue. Check SSL configuration and server certificate settings.`;
139
+ }
140
+ return `Connection failed to ${this.config.host}:${this.config.port}. Check host, port, credentials, and network connectivity.`;
141
+ }
142
+ async listTables() {
143
+ const sql = `
144
+ SELECT table_name
145
+ FROM information_schema.tables
146
+ WHERE table_schema = ?
147
+ ORDER BY table_name
148
+ LIMIT ?
149
+ `;
150
+ this.validateQuery(sql);
151
+ try {
152
+ const result = await this.executeParameterizedQuery(sql, [this.config.database, this.maxRows]);
153
+ return result.map((row) => row.table_name || row.TABLE_NAME).filter(Boolean);
154
+ }
155
+ catch (error) {
156
+ throw new QueryError('Failed to list tables', 'table_listing', undefined, error instanceof Error ? error : undefined);
157
+ }
158
+ }
159
+ async getTableSchema(table) {
160
+ this.escapeIdentifier(table);
161
+ const sql = `
162
+ SELECT
163
+ column_name,
164
+ data_type,
165
+ is_nullable
166
+ FROM information_schema.columns
167
+ WHERE table_schema = ?
168
+ AND table_name = ?
169
+ ORDER BY ordinal_position
170
+ LIMIT ?
171
+ `;
172
+ this.validateQuery(sql);
173
+ try {
174
+ const result = await this.executeParameterizedQuery(sql, [this.config.database, table, this.maxRows]);
175
+ if (result.length === 0) {
176
+ throw QueryError.tableNotFound(table);
177
+ }
178
+ return {
179
+ table,
180
+ columns: result.map(row => ({
181
+ name: row.column_name || row.COLUMN_NAME,
182
+ type: this.mapMySQLType(row.data_type || row.DATA_TYPE),
183
+ nullable: (row.is_nullable || row.IS_NULLABLE) === 'YES'
184
+ }))
185
+ };
186
+ }
187
+ catch (error) {
188
+ if (error instanceof QueryError) {
189
+ throw error;
190
+ }
191
+ throw new QueryError('Failed to get table schema', 'schema_query', table, error instanceof Error ? error : undefined);
192
+ }
193
+ }
194
+ async getLastModified(table) {
195
+ const timestampColumns = ['updated_at', 'modified_at', 'last_modified', 'timestamp'];
196
+ for (const column of timestampColumns) {
197
+ try {
198
+ const result = await this.getMaxTimestamp(table, column);
199
+ if (result) {
200
+ return result;
201
+ }
202
+ }
203
+ catch {
204
+ continue;
205
+ }
206
+ }
207
+ try {
208
+ const sql = `
209
+ SELECT update_time as last_modified
210
+ FROM information_schema.tables
211
+ WHERE table_schema = ? AND table_name = ?
212
+ `;
213
+ this.validateQuery(sql);
214
+ const result = await this.executeParameterizedQuery(sql, [this.config.database, table]);
215
+ if (result.length > 0 && result[0].last_modified) {
216
+ return new Date(result[0].last_modified);
217
+ }
218
+ }
219
+ catch {
220
+ }
221
+ return null;
222
+ }
223
+ async close() {
224
+ if (this.connection) {
225
+ try {
226
+ await this.connection.end();
227
+ }
228
+ catch (error) {
229
+ console.warn('Warning: Error closing MySQL connection:', ErrorHandler.getUserMessage(error));
230
+ }
231
+ finally {
232
+ this.connection = null;
233
+ this.connected = false;
234
+ }
235
+ }
236
+ }
237
+ mapMySQLType(mysqlType) {
238
+ const typeMap = {
239
+ 'tinyint': 'integer',
240
+ 'smallint': 'integer',
241
+ 'mediumint': 'integer',
242
+ 'int': 'integer',
243
+ 'integer': 'integer',
244
+ 'bigint': 'bigint',
245
+ 'decimal': 'decimal',
246
+ 'numeric': 'decimal',
247
+ 'float': 'float',
248
+ 'double': 'float',
249
+ 'real': 'float',
250
+ 'bit': 'integer',
251
+ 'char': 'text',
252
+ 'varchar': 'text',
253
+ 'binary': 'text',
254
+ 'varbinary': 'text',
255
+ 'tinyblob': 'text',
256
+ 'tinytext': 'text',
257
+ 'text': 'text',
258
+ 'blob': 'text',
259
+ 'mediumtext': 'text',
260
+ 'mediumblob': 'text',
261
+ 'longtext': 'text',
262
+ 'longblob': 'text',
263
+ 'enum': 'text',
264
+ 'set': 'text',
265
+ 'date': 'date',
266
+ 'time': 'time',
267
+ 'datetime': 'timestamp',
268
+ 'timestamp': 'timestamp',
269
+ 'year': 'integer',
270
+ 'json': 'json',
271
+ 'geometry': 'text',
272
+ 'point': 'text',
273
+ 'linestring': 'text',
274
+ 'polygon': 'text',
275
+ 'multipoint': 'text',
276
+ 'multilinestring': 'text',
277
+ 'multipolygon': 'text',
278
+ 'geometrycollection': 'text'
279
+ };
280
+ return typeMap[mysqlType.toLowerCase()] || 'unknown';
281
+ }
282
+ escapeIdentifier(identifier) {
283
+ if (!/^[a-zA-Z0-9_\.]+$/.test(identifier)) {
284
+ throw new Error(`Invalid identifier: ${identifier}`);
285
+ }
286
+ if (identifier.length > 256) {
287
+ throw new Error('Identifier too long');
288
+ }
289
+ return `\`${identifier}\``;
290
+ }
291
+ async connectLegacy(credentials) {
292
+ console.warn('Warning: connectLegacy is deprecated. Use constructor with ConnectorConfig instead.');
293
+ const config = {
294
+ host: credentials.host || '',
295
+ port: credentials.port || 3306,
296
+ database: credentials.database || '',
297
+ username: credentials.username || '',
298
+ password: credentials.password || '',
299
+ ssl: credentials.sslMode !== 'disable'
300
+ };
301
+ validateConnectorConfig(config);
302
+ this.config = { ...this.config, ...config };
303
+ await this.connect();
304
+ }
305
+ async testConnectionLegacy() {
306
+ console.warn('Warning: testConnectionLegacy is deprecated. Use testConnection() instead.');
307
+ try {
308
+ const success = await this.testConnection();
309
+ if (success) {
310
+ const tables = await this.listTables();
311
+ return {
312
+ success: true,
313
+ tableCount: tables.length
314
+ };
315
+ }
316
+ else {
317
+ return {
318
+ success: false,
319
+ error: 'Connection test failed'
320
+ };
321
+ }
322
+ }
323
+ catch (error) {
324
+ return {
325
+ success: false,
326
+ error: ErrorHandler.getUserMessage(error)
327
+ };
328
+ }
329
+ }
330
+ async getTableMetadata(tableName, timestampColumn = 'updated_at') {
331
+ console.warn('Warning: getTableMetadata is deprecated. Use getRowCount() and getMaxTimestamp() instead.');
332
+ try {
333
+ const rowCount = await this.getRowCount(tableName);
334
+ const lastUpdate = await this.getMaxTimestamp(tableName, timestampColumn);
335
+ return {
336
+ rowCount,
337
+ lastUpdate: lastUpdate || undefined
338
+ };
339
+ }
340
+ catch (error) {
341
+ throw new QueryError('Failed to get table metadata', 'metadata_query', tableName, error instanceof Error ? error : undefined);
342
+ }
343
+ }
344
+ async query(_sql) {
345
+ throw new Error('Direct SQL queries are not allowed for security reasons. Use specific methods like getRowCount(), getMaxTimestamp(), etc.');
346
+ }
347
+ }
348
+ //# sourceMappingURL=mysql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql.js","sourceRoot":"","sources":["../../src/connectors/mysql.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
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 PostgresConnector extends BaseConnector {
5
+ private client;
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 mapPostgresType;
19
+ connectLegacy(credentials: SourceCredentials): Promise<void>;
20
+ testConnectionLegacy(): Promise<{
21
+ success: boolean;
22
+ tableCount?: number;
23
+ error?: string;
24
+ }>;
25
+ getTableMetadata(tableName: string, timestampColumn?: string): Promise<{
26
+ rowCount: number;
27
+ lastUpdate?: Date;
28
+ }>;
29
+ query<T = unknown>(_sql: string): Promise<T[]>;
30
+ }
31
+ //# sourceMappingURL=postgres.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/connectors/postgres.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,iBAAkB,SAAQ,aAAa;IAClD,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,eAAe,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC;YAS/D,OAAO;cA4CL,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;IAqCxF,cAAc,CAAC,WAAW,CAAC,EAAE,OAAO,aAAa,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IA+DvF,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;IA4CpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB5B,OAAO,CAAC,eAAe;IAyCjB,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"}