@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.
- package/LICENSE +21 -0
- package/README.md +644 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +350 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/connectors/base-connector.d.ts +62 -0
- package/dist/connectors/base-connector.d.ts.map +1 -0
- package/dist/connectors/base-connector.js +549 -0
- package/dist/connectors/base-connector.js.map +1 -0
- package/dist/connectors/bigquery.d.ts +38 -0
- package/dist/connectors/bigquery.d.ts.map +1 -0
- package/dist/connectors/bigquery.js +406 -0
- package/dist/connectors/bigquery.js.map +1 -0
- package/dist/connectors/duckdb.d.ts +36 -0
- package/dist/connectors/duckdb.d.ts.map +1 -0
- package/dist/connectors/duckdb.js +364 -0
- package/dist/connectors/duckdb.js.map +1 -0
- package/dist/connectors/index.d.ts +7 -0
- package/dist/connectors/index.d.ts.map +1 -0
- package/dist/connectors/index.js +7 -0
- package/dist/connectors/index.js.map +1 -0
- package/dist/connectors/mysql.d.ts +32 -0
- package/dist/connectors/mysql.d.ts.map +1 -0
- package/dist/connectors/mysql.js +348 -0
- package/dist/connectors/mysql.js.map +1 -0
- package/dist/connectors/postgres.d.ts +31 -0
- package/dist/connectors/postgres.d.ts.map +1 -0
- package/dist/connectors/postgres.js +326 -0
- package/dist/connectors/postgres.js.map +1 -0
- package/dist/connectors/redshift.d.ts +32 -0
- package/dist/connectors/redshift.d.ts.map +1 -0
- package/dist/connectors/redshift.js +366 -0
- package/dist/connectors/redshift.js.map +1 -0
- package/dist/connectors/snowflake.d.ts +43 -0
- package/dist/connectors/snowflake.d.ts.map +1 -0
- package/dist/connectors/snowflake.js +442 -0
- package/dist/connectors/snowflake.js.map +1 -0
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +10 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/migrate.d.ts +12 -0
- package/dist/db/migrate.d.ts.map +1 -0
- package/dist/db/migrate.js +114 -0
- package/dist/db/migrate.js.map +1 -0
- package/dist/db/schema.d.ts +2053 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +164 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/errors/debug-factory.d.ts +23 -0
- package/dist/errors/debug-factory.d.ts.map +1 -0
- package/dist/errors/debug-factory.js +149 -0
- package/dist/errors/debug-factory.js.map +1 -0
- package/dist/errors/index.d.ts +119 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +341 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/metadata/duckdb-storage.d.ts +31 -0
- package/dist/metadata/duckdb-storage.d.ts.map +1 -0
- package/dist/metadata/duckdb-storage.js +230 -0
- package/dist/metadata/duckdb-storage.js.map +1 -0
- package/dist/metadata/factory.d.ts +4 -0
- package/dist/metadata/factory.d.ts.map +1 -0
- package/dist/metadata/factory.js +23 -0
- package/dist/metadata/factory.js.map +1 -0
- package/dist/metadata/index.d.ts +6 -0
- package/dist/metadata/index.d.ts.map +1 -0
- package/dist/metadata/index.js +4 -0
- package/dist/metadata/index.js.map +1 -0
- package/dist/metadata/interface.d.ts +26 -0
- package/dist/metadata/interface.d.ts.map +1 -0
- package/dist/metadata/interface.js +2 -0
- package/dist/metadata/interface.js.map +1 -0
- package/dist/metadata/postgresql-storage.d.ts +32 -0
- package/dist/metadata/postgresql-storage.d.ts.map +1 -0
- package/dist/metadata/postgresql-storage.js +242 -0
- package/dist/metadata/postgresql-storage.js.map +1 -0
- package/dist/metadata/schema-config.d.ts +30 -0
- package/dist/metadata/schema-config.d.ts.map +1 -0
- package/dist/metadata/schema-config.js +94 -0
- package/dist/metadata/schema-config.js.map +1 -0
- package/dist/metadata/types.d.ts +35 -0
- package/dist/metadata/types.d.ts.map +1 -0
- package/dist/metadata/types.js +2 -0
- package/dist/metadata/types.js.map +1 -0
- package/dist/monitor/baseline-calculator.d.ts +30 -0
- package/dist/monitor/baseline-calculator.d.ts.map +1 -0
- package/dist/monitor/baseline-calculator.js +192 -0
- package/dist/monitor/baseline-calculator.js.map +1 -0
- package/dist/monitor/baseline-config.d.ts +37 -0
- package/dist/monitor/baseline-config.d.ts.map +1 -0
- package/dist/monitor/baseline-config.js +156 -0
- package/dist/monitor/baseline-config.js.map +1 -0
- package/dist/monitor/freshness.d.ts +5 -0
- package/dist/monitor/freshness.d.ts.map +1 -0
- package/dist/monitor/freshness.js +239 -0
- package/dist/monitor/freshness.js.map +1 -0
- package/dist/monitor/index.d.ts +5 -0
- package/dist/monitor/index.d.ts.map +1 -0
- package/dist/monitor/index.js +5 -0
- package/dist/monitor/index.js.map +1 -0
- package/dist/monitor/schema-baseline.d.ts +22 -0
- package/dist/monitor/schema-baseline.d.ts.map +1 -0
- package/dist/monitor/schema-baseline.js +211 -0
- package/dist/monitor/schema-baseline.js.map +1 -0
- package/dist/monitor/schema-changes.d.ts +5 -0
- package/dist/monitor/schema-changes.d.ts.map +1 -0
- package/dist/monitor/schema-changes.js +289 -0
- package/dist/monitor/schema-changes.js.map +1 -0
- package/dist/monitor/volume.d.ts +5 -0
- package/dist/monitor/volume.d.ts.map +1 -0
- package/dist/monitor/volume.js +262 -0
- package/dist/monitor/volume.js.map +1 -0
- package/dist/observability/logger.d.ts +63 -0
- package/dist/observability/logger.d.ts.map +1 -0
- package/dist/observability/logger.js +282 -0
- package/dist/observability/logger.js.map +1 -0
- package/dist/observability/metrics.d.ts +106 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +441 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/query-analyzer.js +526 -0
- package/dist/resilience/circuit-breaker.d.ts +94 -0
- package/dist/resilience/circuit-breaker.d.ts.map +1 -0
- package/dist/resilience/circuit-breaker.js +379 -0
- package/dist/resilience/circuit-breaker.js.map +1 -0
- package/dist/resilience/index.d.ts +7 -0
- package/dist/resilience/index.d.ts.map +1 -0
- package/dist/resilience/index.js +7 -0
- package/dist/resilience/index.js.map +1 -0
- package/dist/resilience/retry-policy.d.ts +87 -0
- package/dist/resilience/retry-policy.d.ts.map +1 -0
- package/dist/resilience/retry-policy.js +423 -0
- package/dist/resilience/retry-policy.js.map +1 -0
- package/dist/resilience/timeout-manager.d.ts +97 -0
- package/dist/resilience/timeout-manager.d.ts.map +1 -0
- package/dist/resilience/timeout-manager.js +339 -0
- package/dist/resilience/timeout-manager.js.map +1 -0
- package/dist/security/query-analyzer.d.ts +82 -0
- package/dist/security/query-analyzer.d.ts.map +1 -0
- package/dist/security/query-analyzer.js +381 -0
- package/dist/security/query-analyzer.js.map +1 -0
- package/dist/security/schema-cache.d.ts +95 -0
- package/dist/security/schema-cache.d.ts.map +1 -0
- package/dist/security/schema-cache.js +344 -0
- package/dist/security/schema-cache.js.map +1 -0
- package/dist/types/connector.d.ts +68 -0
- package/dist/types/connector.d.ts.map +1 -0
- package/dist/types/connector.js +26 -0
- package/dist/types/connector.js.map +1 -0
- package/dist/types.d.ts +244 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/validation/index.d.ts +7 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +5 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/runtime-validator.d.ts +70 -0
- package/dist/validation/runtime-validator.d.ts.map +1 -0
- package/dist/validation/runtime-validator.js +206 -0
- package/dist/validation/runtime-validator.js.map +1 -0
- package/dist/validation/sanitizers.d.ts +56 -0
- package/dist/validation/sanitizers.d.ts.map +1 -0
- package/dist/validation/sanitizers.js +264 -0
- package/dist/validation/sanitizers.js.map +1 -0
- package/dist/validation/schemas.d.ts +224 -0
- package/dist/validation/schemas.d.ts.map +1 -0
- package/dist/validation/schemas.js +263 -0
- package/dist/validation/schemas.js.map +1 -0
- package/dist/validators/index.d.ts +18 -0
- package/dist/validators/index.d.ts.map +1 -0
- package/dist/validators/index.js +209 -0
- package/dist/validators/index.js.map +1 -0
- package/package.json +91 -0
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
import postgres from 'postgres';
|
|
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 PostgresConnector extends BaseConnector {
|
|
6
|
+
client = null;
|
|
7
|
+
connected = false;
|
|
8
|
+
constructor(config, securityConfig) {
|
|
9
|
+
validateConnectorConfig(config);
|
|
10
|
+
super(config, securityConfig);
|
|
11
|
+
}
|
|
12
|
+
async connect() {
|
|
13
|
+
if (this.connected && this.client) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
const sslConfig = this.requireSSL ? { rejectUnauthorized: true } : false;
|
|
18
|
+
this.client = postgres({
|
|
19
|
+
host: this.config.host,
|
|
20
|
+
port: this.config.port || 5432,
|
|
21
|
+
database: this.config.database,
|
|
22
|
+
username: this.config.username,
|
|
23
|
+
password: this.config.password,
|
|
24
|
+
ssl: this.config.ssl !== false ? sslConfig : false,
|
|
25
|
+
connection: {
|
|
26
|
+
application_name: this.config.applicationName || 'freshguard-core'
|
|
27
|
+
},
|
|
28
|
+
transform: {
|
|
29
|
+
undefined: null
|
|
30
|
+
},
|
|
31
|
+
connect_timeout: this.connectionTimeout / 1000,
|
|
32
|
+
max: 1,
|
|
33
|
+
idle_timeout: 30,
|
|
34
|
+
max_lifetime: 60 * 60
|
|
35
|
+
});
|
|
36
|
+
this.connected = true;
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
throw new ConnectionError('Failed to connect to PostgreSQL', this.config.host, this.config.port, error instanceof Error ? error : undefined);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async executeQuery(sql) {
|
|
43
|
+
return this.executeParameterizedQuery(sql, []);
|
|
44
|
+
}
|
|
45
|
+
async executeParameterizedQuery(sql, parameters = []) {
|
|
46
|
+
await this.connect();
|
|
47
|
+
if (!this.client) {
|
|
48
|
+
throw new ConnectionError('Database connection not available');
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
const result = await this.executeWithTimeout(async () => parameters.length > 0
|
|
52
|
+
? await this.client.unsafe(sql, parameters)
|
|
53
|
+
: await this.client.unsafe(sql), 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 = `pg-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.client) {
|
|
77
|
+
this.logDebugError(mergedDebugConfig, debugId, 'Connection test', {
|
|
78
|
+
error: 'Client 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(() => this.client.unsafe(sql), this.connectionTimeout);
|
|
85
|
+
const duration = performance.now() - startTime;
|
|
86
|
+
if (mergedDebugConfig?.enabled) {
|
|
87
|
+
console.log(`[DEBUG-${debugId}] Connection test completed:`, {
|
|
88
|
+
success: true,
|
|
89
|
+
duration,
|
|
90
|
+
host: this.config.host,
|
|
91
|
+
database: this.config.database
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
const duration = performance.now() - startTime;
|
|
98
|
+
this.logDebugError(mergedDebugConfig, debugId, 'Connection test', {
|
|
99
|
+
host: this.config.host,
|
|
100
|
+
port: this.config.port,
|
|
101
|
+
database: this.config.database,
|
|
102
|
+
error: mergedDebugConfig?.exposeRawErrors && error instanceof Error ? error.message : 'Connection failed',
|
|
103
|
+
duration,
|
|
104
|
+
suggestion: this.generateConnectionSuggestion(error)
|
|
105
|
+
});
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
mergeDebugConfig(debugConfig) {
|
|
110
|
+
return {
|
|
111
|
+
enabled: debugConfig?.enabled ?? (process.env.NODE_ENV === 'development'),
|
|
112
|
+
exposeQueries: debugConfig?.exposeQueries ?? true,
|
|
113
|
+
exposeRawErrors: debugConfig?.exposeRawErrors ?? true,
|
|
114
|
+
logLevel: debugConfig?.logLevel ?? 'debug'
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
generateConnectionSuggestion(error) {
|
|
118
|
+
if (!(error instanceof Error)) {
|
|
119
|
+
return 'Check database connection configuration';
|
|
120
|
+
}
|
|
121
|
+
const message = error.message.toLowerCase();
|
|
122
|
+
if (message.includes('connection refused')) {
|
|
123
|
+
return `PostgreSQL server at ${this.config.host}:${this.config.port} is not accepting connections. Verify the server is running and accessible.`;
|
|
124
|
+
}
|
|
125
|
+
if (message.includes('timeout')) {
|
|
126
|
+
return `Connection timeout to ${this.config.host}:${this.config.port}. Check network connectivity and server responsiveness.`;
|
|
127
|
+
}
|
|
128
|
+
if (message.includes('authentication failed')) {
|
|
129
|
+
return `Authentication failed for database '${this.config.database}'. Verify username, password, and database name.`;
|
|
130
|
+
}
|
|
131
|
+
if (message.includes('database') && message.includes('does not exist')) {
|
|
132
|
+
return `Database '${this.config.database}' not found on server. Check database name and create if necessary.`;
|
|
133
|
+
}
|
|
134
|
+
if (message.includes('ssl') || message.includes('tls')) {
|
|
135
|
+
return `SSL/TLS connection issue. Check SSL configuration and server certificate settings.`;
|
|
136
|
+
}
|
|
137
|
+
return `Connection failed to ${this.config.host}:${this.config.port}. Check host, port, credentials, and network connectivity.`;
|
|
138
|
+
}
|
|
139
|
+
async listTables() {
|
|
140
|
+
const sql = `
|
|
141
|
+
SELECT table_name
|
|
142
|
+
FROM information_schema.tables
|
|
143
|
+
WHERE table_schema = $1
|
|
144
|
+
ORDER BY table_name
|
|
145
|
+
LIMIT $2
|
|
146
|
+
`;
|
|
147
|
+
this.validateQuery(sql);
|
|
148
|
+
try {
|
|
149
|
+
const result = await this.executeParameterizedQuery(sql, ['public', this.maxRows]);
|
|
150
|
+
return result.map((row) => row.table_name).filter(Boolean);
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
throw new QueryError('Failed to list tables', 'table_listing', undefined, error instanceof Error ? error : undefined);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
async getTableSchema(table) {
|
|
157
|
+
this.escapeIdentifier(table);
|
|
158
|
+
const sql = `
|
|
159
|
+
SELECT
|
|
160
|
+
column_name,
|
|
161
|
+
data_type,
|
|
162
|
+
is_nullable
|
|
163
|
+
FROM information_schema.columns
|
|
164
|
+
WHERE table_schema = $1
|
|
165
|
+
AND table_name = $2
|
|
166
|
+
ORDER BY ordinal_position
|
|
167
|
+
LIMIT $3
|
|
168
|
+
`;
|
|
169
|
+
this.validateQuery(sql);
|
|
170
|
+
try {
|
|
171
|
+
const result = await this.executeParameterizedQuery(sql, ['public', table, this.maxRows]);
|
|
172
|
+
if (result.length === 0) {
|
|
173
|
+
throw QueryError.tableNotFound(table);
|
|
174
|
+
}
|
|
175
|
+
return {
|
|
176
|
+
table,
|
|
177
|
+
columns: result.map(row => ({
|
|
178
|
+
name: row.column_name,
|
|
179
|
+
type: this.mapPostgresType(row.data_type),
|
|
180
|
+
nullable: row.is_nullable === 'YES'
|
|
181
|
+
}))
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
if (error instanceof QueryError) {
|
|
186
|
+
throw error;
|
|
187
|
+
}
|
|
188
|
+
throw new QueryError('Failed to get table schema', 'schema_query', table, error instanceof Error ? error : undefined);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
async getLastModified(table) {
|
|
192
|
+
const timestampColumns = ['updated_at', 'modified_at', 'last_modified', 'timestamp'];
|
|
193
|
+
for (const column of timestampColumns) {
|
|
194
|
+
try {
|
|
195
|
+
const result = await this.getMaxTimestamp(table, column);
|
|
196
|
+
if (result) {
|
|
197
|
+
return result;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
try {
|
|
205
|
+
const sql = `
|
|
206
|
+
SELECT GREATEST(
|
|
207
|
+
pg_stat_get_last_analyze_time(c.oid),
|
|
208
|
+
pg_stat_get_last_autoanalyze_time(c.oid)
|
|
209
|
+
) as last_modified
|
|
210
|
+
FROM pg_class c
|
|
211
|
+
JOIN pg_namespace n ON n.oid = c.relnamespace
|
|
212
|
+
WHERE n.nspname = $1 AND c.relname = $2
|
|
213
|
+
`;
|
|
214
|
+
this.validateQuery(sql);
|
|
215
|
+
const result = await this.executeParameterizedQuery(sql, ['public', table]);
|
|
216
|
+
if (result.length > 0 && result[0].last_modified) {
|
|
217
|
+
return new Date(result[0].last_modified);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
}
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
async close() {
|
|
225
|
+
if (this.client) {
|
|
226
|
+
try {
|
|
227
|
+
await this.client.end();
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
console.warn('Warning: Error closing PostgreSQL connection:', ErrorHandler.getUserMessage(error));
|
|
231
|
+
}
|
|
232
|
+
finally {
|
|
233
|
+
this.client = null;
|
|
234
|
+
this.connected = false;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
mapPostgresType(pgType) {
|
|
239
|
+
const typeMap = {
|
|
240
|
+
'bigint': 'bigint',
|
|
241
|
+
'bigserial': 'bigint',
|
|
242
|
+
'integer': 'integer',
|
|
243
|
+
'smallint': 'integer',
|
|
244
|
+
'serial': 'integer',
|
|
245
|
+
'text': 'text',
|
|
246
|
+
'varchar': 'text',
|
|
247
|
+
'character varying': 'text',
|
|
248
|
+
'char': 'text',
|
|
249
|
+
'character': 'text',
|
|
250
|
+
'date': 'date',
|
|
251
|
+
'timestamp': 'timestamp',
|
|
252
|
+
'timestamp without time zone': 'timestamp',
|
|
253
|
+
'timestamp with time zone': 'timestamptz',
|
|
254
|
+
'timestamptz': 'timestamptz',
|
|
255
|
+
'time': 'time',
|
|
256
|
+
'time without time zone': 'time',
|
|
257
|
+
'time with time zone': 'timetz',
|
|
258
|
+
'boolean': 'boolean',
|
|
259
|
+
'numeric': 'decimal',
|
|
260
|
+
'decimal': 'decimal',
|
|
261
|
+
'real': 'float',
|
|
262
|
+
'double precision': 'float',
|
|
263
|
+
'json': 'json',
|
|
264
|
+
'jsonb': 'json',
|
|
265
|
+
'uuid': 'uuid'
|
|
266
|
+
};
|
|
267
|
+
return typeMap[pgType.toLowerCase()] || 'unknown';
|
|
268
|
+
}
|
|
269
|
+
async connectLegacy(credentials) {
|
|
270
|
+
console.warn('Warning: connectLegacy is deprecated. Use constructor with ConnectorConfig instead.');
|
|
271
|
+
const config = {
|
|
272
|
+
host: credentials.host || '',
|
|
273
|
+
port: credentials.port || 5432,
|
|
274
|
+
database: credentials.database || '',
|
|
275
|
+
username: credentials.username || '',
|
|
276
|
+
password: credentials.password || '',
|
|
277
|
+
ssl: credentials.sslMode !== 'disable'
|
|
278
|
+
};
|
|
279
|
+
validateConnectorConfig(config);
|
|
280
|
+
this.config = { ...this.config, ...config };
|
|
281
|
+
await this.connect();
|
|
282
|
+
}
|
|
283
|
+
async testConnectionLegacy() {
|
|
284
|
+
console.warn('Warning: testConnectionLegacy is deprecated. Use testConnection() instead.');
|
|
285
|
+
try {
|
|
286
|
+
const success = await this.testConnection();
|
|
287
|
+
if (success) {
|
|
288
|
+
const tables = await this.listTables();
|
|
289
|
+
return {
|
|
290
|
+
success: true,
|
|
291
|
+
tableCount: tables.length
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
return {
|
|
296
|
+
success: false,
|
|
297
|
+
error: 'Connection test failed'
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
catch (error) {
|
|
302
|
+
return {
|
|
303
|
+
success: false,
|
|
304
|
+
error: ErrorHandler.getUserMessage(error)
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
async getTableMetadata(tableName, timestampColumn = 'updated_at') {
|
|
309
|
+
console.warn('Warning: getTableMetadata is deprecated. Use getRowCount() and getMaxTimestamp() instead.');
|
|
310
|
+
try {
|
|
311
|
+
const rowCount = await this.getRowCount(tableName);
|
|
312
|
+
const lastUpdate = await this.getMaxTimestamp(tableName, timestampColumn);
|
|
313
|
+
return {
|
|
314
|
+
rowCount,
|
|
315
|
+
lastUpdate: lastUpdate || undefined
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
catch (error) {
|
|
319
|
+
throw new QueryError('Failed to get table metadata', 'metadata_query', tableName, error instanceof Error ? error : undefined);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
async query(_sql) {
|
|
323
|
+
throw new Error('Direct SQL queries are not allowed for security reasons. Use specific methods like getRowCount(), getMaxTimestamp(), etc.');
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
//# sourceMappingURL=postgres.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/connectors/postgres.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 RedshiftConnector 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 mapRedshiftType;
|
|
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=redshift.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redshift.d.ts","sourceRoot":"","sources":["../../src/connectors/redshift.ts"],"names":[],"mappings":"AASA,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;AAoBrD,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;cA8CL,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;IAqC9B,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;IA8DpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB5B,OAAO,CAAC,eAAe;IA2DvB,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"}
|