@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,406 @@
1
+ import { BigQuery } from '@google-cloud/bigquery';
2
+ import { BaseConnector } from './base-connector.js';
3
+ import { ConnectionError, TimeoutError, QueryError, ConfigurationError, SecurityError, ErrorHandler } from '../errors/index.js';
4
+ import { validateDatabaseIdentifier } from '../validators/index.js';
5
+ export class BigQueryConnector extends BaseConnector {
6
+ client = null;
7
+ projectId = '';
8
+ location = 'US';
9
+ connected = false;
10
+ constructor(config, securityConfig) {
11
+ BigQueryConnector.validateBigQueryConfig(config);
12
+ super(config, securityConfig);
13
+ this.projectId = config.database;
14
+ }
15
+ static validateBigQueryConfig(config) {
16
+ if (!config.database) {
17
+ throw new ConfigurationError('Project ID is required for BigQuery (use database field)');
18
+ }
19
+ const projectIdPattern = /^[a-z][a-z0-9\-]*[a-z0-9]$/;
20
+ if (!projectIdPattern.test(config.database)) {
21
+ throw new ConfigurationError('Invalid BigQuery project ID format');
22
+ }
23
+ if (!config.password && !config.username) {
24
+ throw new ConfigurationError('Service account credentials required for BigQuery');
25
+ }
26
+ if (config.password) {
27
+ try {
28
+ const credentials = JSON.parse(config.password);
29
+ if (!credentials.type || credentials.type !== 'service_account') {
30
+ throw new SecurityError('Invalid service account credentials format');
31
+ }
32
+ if (!credentials.project_id || credentials.project_id !== config.database) {
33
+ throw new SecurityError('Service account project ID does not match specified project');
34
+ }
35
+ }
36
+ catch (error) {
37
+ if (error instanceof SecurityError) {
38
+ throw error;
39
+ }
40
+ throw new ConfigurationError('Invalid service account JSON in password field');
41
+ }
42
+ }
43
+ }
44
+ async connect() {
45
+ if (this.connected && this.client) {
46
+ return;
47
+ }
48
+ try {
49
+ const bigqueryOptions = {
50
+ projectId: this.projectId,
51
+ location: this.location,
52
+ queryTimeoutMs: this.queryTimeout,
53
+ };
54
+ if (this.config.password) {
55
+ const credentials = JSON.parse(this.config.password);
56
+ bigqueryOptions.credentials = credentials;
57
+ }
58
+ else {
59
+ console.warn('No service account provided, using Application Default Credentials');
60
+ }
61
+ this.client = await this.executeWithTimeout(() => new Promise((resolve) => {
62
+ const client = new BigQuery(bigqueryOptions);
63
+ resolve(client);
64
+ }), this.connectionTimeout);
65
+ await this.executeWithTimeout(() => this.client.getDatasets({ maxResults: 1 }), this.connectionTimeout);
66
+ this.connected = true;
67
+ }
68
+ catch (error) {
69
+ if (error instanceof TimeoutError || error instanceof SecurityError) {
70
+ throw error;
71
+ }
72
+ throw new ConnectionError('Failed to connect to BigQuery', 'bigquery.googleapis.com', 443, error instanceof Error ? error : undefined);
73
+ }
74
+ }
75
+ async executeParameterizedQuery(sql, parameters = []) {
76
+ await this.connect();
77
+ if (!this.client) {
78
+ throw new ConnectionError('BigQuery client not available');
79
+ }
80
+ try {
81
+ let finalSql = sql;
82
+ const namedParams = {};
83
+ if (parameters.length > 0) {
84
+ for (let i = 0; i < parameters.length; i++) {
85
+ const placeholder = `$${i + 1}`;
86
+ const namedParam = `param${i + 1}`;
87
+ finalSql = finalSql.replace(new RegExp(`\\${placeholder}\\b`, 'g'), `@${namedParam}`);
88
+ namedParams[namedParam] = parameters[i];
89
+ }
90
+ }
91
+ const queryOptions = {
92
+ query: finalSql,
93
+ location: this.location,
94
+ maxResults: this.maxRows,
95
+ jobTimeoutMs: this.queryTimeout,
96
+ useLegacySql: false,
97
+ };
98
+ if (Object.keys(namedParams).length > 0) {
99
+ queryOptions.params = namedParams;
100
+ }
101
+ const [rows] = await this.executeWithTimeout(() => this.client.query(queryOptions), this.queryTimeout);
102
+ this.validateResultSize(rows);
103
+ return rows;
104
+ }
105
+ catch (error) {
106
+ if (error instanceof TimeoutError) {
107
+ throw error;
108
+ }
109
+ throw new QueryError(ErrorHandler.getUserMessage(error), 'query_execution', undefined, error instanceof Error ? error : undefined);
110
+ }
111
+ }
112
+ async executeQuery(sql) {
113
+ return this.executeParameterizedQuery(sql, []);
114
+ }
115
+ async testConnection(debugConfig) {
116
+ const mergedDebugConfig = this.mergeDebugConfig(debugConfig);
117
+ const debugId = `bq-test-${Date.now().toString(36)}-${Math.random().toString(36).substr(2, 5)}`;
118
+ const startTime = performance.now();
119
+ try {
120
+ this.logDebugInfo(mergedDebugConfig, debugId, 'Starting BigQuery connection test', {
121
+ projectId: this.projectId,
122
+ location: this.location
123
+ });
124
+ await this.connect();
125
+ if (!this.client) {
126
+ this.logDebugError(mergedDebugConfig, debugId, 'BigQuery connection test', {
127
+ error: 'Client not available after connect',
128
+ duration: performance.now() - startTime
129
+ });
130
+ return false;
131
+ }
132
+ const sql = 'SELECT 1 as test';
133
+ await this.executeWithTimeout(() => this.client.query({ query: sql, location: this.location }), this.connectionTimeout);
134
+ const duration = performance.now() - startTime;
135
+ if (mergedDebugConfig?.enabled) {
136
+ console.log(`[DEBUG-${debugId}] BigQuery connection test completed:`, {
137
+ success: true,
138
+ duration,
139
+ projectId: this.projectId,
140
+ location: this.location
141
+ });
142
+ }
143
+ return true;
144
+ }
145
+ catch (error) {
146
+ const duration = performance.now() - startTime;
147
+ this.logDebugError(mergedDebugConfig, debugId, 'BigQuery connection test', {
148
+ projectId: this.projectId,
149
+ location: this.location,
150
+ error: mergedDebugConfig?.exposeRawErrors && error instanceof Error ? error.message : 'Connection failed',
151
+ duration,
152
+ suggestion: this.generateBigQueryConnectionSuggestion(error)
153
+ });
154
+ return false;
155
+ }
156
+ }
157
+ mergeDebugConfig(debugConfig) {
158
+ return {
159
+ enabled: debugConfig?.enabled ?? (process.env.NODE_ENV === 'development'),
160
+ exposeQueries: debugConfig?.exposeQueries ?? true,
161
+ exposeRawErrors: debugConfig?.exposeRawErrors ?? true,
162
+ logLevel: debugConfig?.logLevel ?? 'debug'
163
+ };
164
+ }
165
+ generateBigQueryConnectionSuggestion(error) {
166
+ if (!(error instanceof Error)) {
167
+ return 'Check BigQuery project configuration and permissions';
168
+ }
169
+ const message = error.message.toLowerCase();
170
+ if (message.includes('project not found') || message.includes('invalid project')) {
171
+ return `Project '${this.projectId}' not found or inaccessible. Verify project ID and ensure proper access permissions.`;
172
+ }
173
+ if (message.includes('permission denied') || message.includes('access denied')) {
174
+ return `Permission denied for project '${this.projectId}'. Ensure service account has BigQuery Data Viewer or Editor role.`;
175
+ }
176
+ if (message.includes('authentication') || message.includes('credentials')) {
177
+ return `Authentication failed. Check service account key file or default application credentials (gcloud auth).`;
178
+ }
179
+ if (message.includes('quota') || message.includes('limit')) {
180
+ return `BigQuery quota exceeded for project '${this.projectId}'. Check project quotas in GCP Console.`;
181
+ }
182
+ if (message.includes('dataset') && message.includes('not found')) {
183
+ return `Dataset not found in project '${this.projectId}'. Verify dataset name and location are correct.`;
184
+ }
185
+ if (message.includes('location') || message.includes('region')) {
186
+ return `Location/region issue. Ensure dataset location '${this.location}' is correct and accessible.`;
187
+ }
188
+ if (message.includes('billing')) {
189
+ return `Billing not enabled for project '${this.projectId}'. Enable billing in GCP Console to use BigQuery.`;
190
+ }
191
+ return `BigQuery connection failed for project '${this.projectId}'. Check project ID, credentials, and billing status.`;
192
+ }
193
+ async listTables() {
194
+ const sql = `
195
+ SELECT
196
+ CONCAT(table_schema, '.', table_name) as table_name
197
+ FROM \`$1.INFORMATION_SCHEMA.TABLES\`
198
+ WHERE table_type = 'BASE_TABLE'
199
+ ORDER BY table_schema, table_name
200
+ LIMIT $2
201
+ `;
202
+ this.validateQuery(sql);
203
+ try {
204
+ const result = await this.executeParameterizedQuery(sql, [this.projectId, this.maxRows]);
205
+ return result.map((row) => row.table_name).filter(Boolean);
206
+ }
207
+ catch (error) {
208
+ throw new QueryError('Failed to list tables', 'table_listing', undefined, error instanceof Error ? error : undefined);
209
+ }
210
+ }
211
+ async getTableSchema(table) {
212
+ const parsedTable = this.parseTableName(table);
213
+ const tableParts = parsedTable.split('.');
214
+ if (tableParts.length !== 3) {
215
+ throw new QueryError('Invalid table name format. Expected: project.dataset.table', 'invalid_table_name');
216
+ }
217
+ const [projectId, datasetId, tableName] = tableParts;
218
+ const sql = `
219
+ SELECT
220
+ column_name,
221
+ data_type,
222
+ is_nullable
223
+ FROM \`$1.$2.INFORMATION_SCHEMA.COLUMNS\`
224
+ WHERE table_name = $3
225
+ ORDER BY ordinal_position
226
+ LIMIT $4
227
+ `;
228
+ this.validateQuery(sql);
229
+ try {
230
+ const result = await this.executeParameterizedQuery(sql, [projectId, datasetId, tableName, this.maxRows]);
231
+ if (result.length === 0) {
232
+ throw QueryError.tableNotFound(table);
233
+ }
234
+ return {
235
+ table,
236
+ columns: result.map(row => ({
237
+ name: row.column_name,
238
+ type: this.mapBigQueryType(row.data_type),
239
+ nullable: row.is_nullable === 'YES'
240
+ }))
241
+ };
242
+ }
243
+ catch (error) {
244
+ if (error instanceof QueryError) {
245
+ throw error;
246
+ }
247
+ throw new QueryError('Failed to get table schema', 'schema_query', table, error instanceof Error ? error : undefined);
248
+ }
249
+ }
250
+ async getLastModified(table) {
251
+ const parsedTable = this.parseTableName(table);
252
+ try {
253
+ const [dataset, tableId] = parsedTable.split('.').slice(-2);
254
+ if (this.client && dataset && tableId) {
255
+ const tableRef = this.client.dataset(dataset).table(tableId);
256
+ const [metadata] = await tableRef.getMetadata();
257
+ if (metadata.lastModifiedTime) {
258
+ return new Date(parseInt(metadata.lastModifiedTime));
259
+ }
260
+ }
261
+ }
262
+ catch {
263
+ }
264
+ const timestampColumns = ['updated_at', 'modified_at', 'last_modified', 'timestamp', '_airbyte_extracted_at'];
265
+ for (const column of timestampColumns) {
266
+ try {
267
+ const result = await this.getMaxTimestamp(table, column);
268
+ if (result) {
269
+ return result;
270
+ }
271
+ }
272
+ catch {
273
+ continue;
274
+ }
275
+ }
276
+ return null;
277
+ }
278
+ async close() {
279
+ try {
280
+ this.client = null;
281
+ this.connected = false;
282
+ }
283
+ catch (error) {
284
+ console.warn('Warning: Error closing BigQuery connection:', ErrorHandler.getUserMessage(error));
285
+ }
286
+ }
287
+ mapBigQueryType(bqType) {
288
+ const typeMap = {
289
+ 'STRING': 'text',
290
+ 'BYTES': 'binary',
291
+ 'INTEGER': 'bigint',
292
+ 'INT64': 'bigint',
293
+ 'FLOAT': 'float',
294
+ 'FLOAT64': 'float',
295
+ 'NUMERIC': 'decimal',
296
+ 'DECIMAL': 'decimal',
297
+ 'BIGNUMERIC': 'decimal',
298
+ 'BOOLEAN': 'boolean',
299
+ 'TIMESTAMP': 'timestamptz',
300
+ 'DATE': 'date',
301
+ 'TIME': 'time',
302
+ 'DATETIME': 'timestamp',
303
+ 'JSON': 'json',
304
+ 'ARRAY': 'array',
305
+ 'STRUCT': 'object',
306
+ 'RECORD': 'object',
307
+ 'GEOGRAPHY': 'geography'
308
+ };
309
+ return typeMap[bqType.toUpperCase()] || 'unknown';
310
+ }
311
+ parseTableName(tableName) {
312
+ validateDatabaseIdentifier(tableName, 'table');
313
+ const parts = tableName.split('.');
314
+ if (parts.length === 3) {
315
+ const [project, _dataset, _table] = parts;
316
+ if (project !== this.projectId) {
317
+ throw new SecurityError('Table project does not match configured project');
318
+ }
319
+ return tableName;
320
+ }
321
+ else if (parts.length === 2) {
322
+ return `${this.projectId}.${tableName}`;
323
+ }
324
+ else if (parts.length === 1) {
325
+ throw new QueryError('Table name must include dataset (format: dataset.table)', 'invalid_table_name');
326
+ }
327
+ else {
328
+ throw new QueryError('Invalid table name format', 'invalid_table_name');
329
+ }
330
+ }
331
+ async connectLegacy(credentials) {
332
+ console.warn('Warning: connectLegacy is deprecated. Use constructor with ConnectorConfig instead.');
333
+ const options = credentials.additionalOptions || {};
334
+ const projectId = options.projectId || credentials.database || '';
335
+ if (!projectId) {
336
+ throw new ConfigurationError('BigQuery project ID is required');
337
+ }
338
+ const config = {
339
+ host: 'bigquery.googleapis.com',
340
+ port: 443,
341
+ database: projectId,
342
+ username: credentials.username || 'bigquery',
343
+ password: credentials.password || '',
344
+ ssl: true
345
+ };
346
+ if (options.location) {
347
+ this.location = options.location;
348
+ }
349
+ BigQueryConnector.validateBigQueryConfig(config);
350
+ this.config = { ...this.config, ...config };
351
+ this.projectId = config.database;
352
+ await this.connect();
353
+ }
354
+ async testConnectionLegacy() {
355
+ console.warn('Warning: testConnectionLegacy is deprecated. Use testConnection() instead.');
356
+ try {
357
+ const success = await this.testConnection();
358
+ if (success) {
359
+ const tables = await this.listTables();
360
+ return {
361
+ success: true,
362
+ tableCount: tables.length
363
+ };
364
+ }
365
+ else {
366
+ return {
367
+ success: false,
368
+ error: 'Connection test failed'
369
+ };
370
+ }
371
+ }
372
+ catch (error) {
373
+ return {
374
+ success: false,
375
+ error: ErrorHandler.getUserMessage(error)
376
+ };
377
+ }
378
+ }
379
+ async getTableMetadata(tableName, timestampColumn = 'updated_at') {
380
+ console.warn('Warning: getTableMetadata is deprecated. Use getRowCount() and getMaxTimestamp() instead.');
381
+ try {
382
+ const rowCount = await this.getRowCount(tableName);
383
+ const lastUpdate = await this.getMaxTimestamp(tableName, timestampColumn);
384
+ return {
385
+ rowCount,
386
+ lastUpdate: lastUpdate || undefined
387
+ };
388
+ }
389
+ catch (error) {
390
+ throw new QueryError('Failed to get table metadata', 'metadata_query', tableName, error instanceof Error ? error : undefined);
391
+ }
392
+ }
393
+ async query(_sql) {
394
+ throw new Error('Direct SQL queries are not allowed for security reasons. Use specific methods like getRowCount(), getMaxTimestamp(), etc.');
395
+ }
396
+ getProjectId() {
397
+ return this.projectId;
398
+ }
399
+ setLocation(location) {
400
+ this.location = location;
401
+ }
402
+ getLocation() {
403
+ return this.location;
404
+ }
405
+ }
406
+ //# sourceMappingURL=bigquery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bigquery.js","sourceRoot":"","sources":["../../src/connectors/bigquery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
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 DuckDBConnector extends BaseConnector {
5
+ private instance;
6
+ private connection;
7
+ private databasePath;
8
+ private connected;
9
+ constructor(config: ConnectorConfig, securityConfig?: Partial<SecurityConfig>);
10
+ private static validateDuckDBConfig;
11
+ private connect;
12
+ protected executeQuery(sql: string): Promise<any[]>;
13
+ protected executeParameterizedQuery(sql: string, parameters?: any[]): Promise<any[]>;
14
+ testConnection(debugConfig?: import('../types.js').DebugConfig): Promise<boolean>;
15
+ private mergeDebugConfig;
16
+ private generateDuckDBConnectionSuggestion;
17
+ listTables(): Promise<string[]>;
18
+ getTableSchema(table: string): Promise<TableSchema>;
19
+ getLastModified(table: string): Promise<Date | null>;
20
+ close(): Promise<void>;
21
+ private mapDuckDBType;
22
+ connectLegacy(credentials: SourceCredentials): Promise<void>;
23
+ testConnectionLegacy(): Promise<{
24
+ success: boolean;
25
+ tableCount?: number;
26
+ error?: string;
27
+ }>;
28
+ getTableMetadata(tableName: string, timestampColumn?: string): Promise<{
29
+ rowCount: number;
30
+ lastUpdate?: Date;
31
+ }>;
32
+ query<T = unknown>(_sql: string): Promise<T[]>;
33
+ getDatabasePath(): string;
34
+ isInMemory(): boolean;
35
+ }
36
+ //# sourceMappingURL=duckdb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duckdb.d.ts","sourceRoot":"","sources":["../../src/connectors/duckdb.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;AAsBrD,qBAAa,eAAgB,SAAQ,aAAa;IAChD,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,eAAe,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC;IAY7E,OAAO,CAAC,MAAM,CAAC,oBAAoB;YA8BrB,OAAO;cAgDL,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;cAQzC,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,GAAE,GAAG,EAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IA4DxF,cAAc,CAAC,WAAW,CAAC,EAAE,OAAO,aAAa,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IA4DvF,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,kCAAkC;IAiDpC,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IA2B/B,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAoDnD,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IA0BpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA4B5B,OAAO,CAAC,aAAa;IAuCf,aAAa,CAAC,WAAW,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B5D,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;IA4B7C,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IASpD,eAAe,IAAI,MAAM;IAOzB,UAAU,IAAI,OAAO;CAGtB"}