@freshguard/freshguard-core 0.13.2 → 0.15.0
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/CHANGELOG.md +15 -1
- package/README.md +74 -1
- package/SKILL.md +229 -0
- package/dist/cli/index.d.ts +13 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +74 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/connectors/azure-sql.d.ts +121 -0
- package/dist/connectors/azure-sql.d.ts.map +1 -0
- package/dist/connectors/azure-sql.js +489 -0
- package/dist/connectors/azure-sql.js.map +1 -0
- package/dist/connectors/base-connector.d.ts +139 -0
- package/dist/connectors/base-connector.d.ts.map +1 -1
- package/dist/connectors/base-connector.js +160 -3
- package/dist/connectors/base-connector.js.map +1 -1
- package/dist/connectors/bigquery.d.ts +100 -0
- package/dist/connectors/bigquery.d.ts.map +1 -1
- package/dist/connectors/bigquery.js +143 -2
- package/dist/connectors/bigquery.js.map +1 -1
- package/dist/connectors/duckdb.d.ts +96 -0
- package/dist/connectors/duckdb.d.ts.map +1 -1
- package/dist/connectors/duckdb.js +144 -7
- package/dist/connectors/duckdb.js.map +1 -1
- package/dist/connectors/index.d.ts +28 -0
- package/dist/connectors/index.d.ts.map +1 -1
- package/dist/connectors/index.js +28 -0
- package/dist/connectors/index.js.map +1 -1
- package/dist/connectors/mssql.d.ts +119 -0
- package/dist/connectors/mssql.d.ts.map +1 -0
- package/dist/connectors/mssql.js +483 -0
- package/dist/connectors/mssql.js.map +1 -0
- package/dist/connectors/mysql.d.ts +85 -0
- package/dist/connectors/mysql.d.ts.map +1 -1
- package/dist/connectors/mysql.js +118 -3
- package/dist/connectors/mysql.js.map +1 -1
- package/dist/connectors/postgres.d.ts +85 -0
- package/dist/connectors/postgres.d.ts.map +1 -1
- package/dist/connectors/postgres.js +113 -6
- package/dist/connectors/postgres.js.map +1 -1
- package/dist/connectors/redshift.d.ts +90 -0
- package/dist/connectors/redshift.d.ts.map +1 -1
- package/dist/connectors/redshift.js +131 -7
- package/dist/connectors/redshift.js.map +1 -1
- package/dist/connectors/snowflake.d.ts +108 -0
- package/dist/connectors/snowflake.d.ts.map +1 -1
- package/dist/connectors/snowflake.js +137 -3
- package/dist/connectors/snowflake.js.map +1 -1
- package/dist/connectors/synapse.d.ts +123 -0
- package/dist/connectors/synapse.d.ts.map +1 -0
- package/dist/connectors/synapse.js +495 -0
- package/dist/connectors/synapse.js.map +1 -0
- package/dist/db/index.d.ts +25 -0
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +23 -0
- package/dist/db/index.js.map +1 -1
- package/dist/db/migrate.d.ts +23 -0
- package/dist/db/migrate.d.ts.map +1 -1
- package/dist/db/migrate.js +38 -0
- package/dist/db/migrate.js.map +1 -1
- package/dist/db/schema.d.ts +11 -0
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +70 -0
- package/dist/db/schema.js.map +1 -1
- package/dist/errors/debug-factory.d.ts +38 -0
- package/dist/errors/debug-factory.d.ts.map +1 -1
- package/dist/errors/debug-factory.js +40 -0
- package/dist/errors/debug-factory.js.map +1 -1
- package/dist/errors/index.d.ts +59 -0
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +110 -7
- package/dist/errors/index.js.map +1 -1
- package/dist/index.d.ts +32 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -1
- package/dist/index.js.map +1 -1
- package/dist/metadata/duckdb-storage.d.ts +3 -0
- package/dist/metadata/duckdb-storage.d.ts.map +1 -1
- package/dist/metadata/duckdb-storage.js +6 -0
- package/dist/metadata/duckdb-storage.js.map +1 -1
- package/dist/metadata/factory.d.ts +30 -0
- package/dist/metadata/factory.d.ts.map +1 -1
- package/dist/metadata/factory.js +31 -0
- package/dist/metadata/factory.js.map +1 -1
- package/dist/metadata/index.d.ts +26 -0
- package/dist/metadata/index.d.ts.map +1 -1
- package/dist/metadata/index.js +26 -0
- package/dist/metadata/index.js.map +1 -1
- package/dist/metadata/interface.d.ts +33 -0
- package/dist/metadata/interface.d.ts.map +1 -1
- package/dist/metadata/interface.js +3 -0
- package/dist/metadata/interface.js.map +1 -1
- package/dist/metadata/postgresql-storage.d.ts +3 -0
- package/dist/metadata/postgresql-storage.d.ts.map +1 -1
- package/dist/metadata/postgresql-storage.js +12 -2
- package/dist/metadata/postgresql-storage.js.map +1 -1
- package/dist/metadata/schema-config.d.ts +53 -0
- package/dist/metadata/schema-config.d.ts.map +1 -1
- package/dist/metadata/schema-config.js +64 -0
- package/dist/metadata/schema-config.js.map +1 -1
- package/dist/metadata/types.d.ts +3 -0
- package/dist/metadata/types.d.ts.map +1 -1
- package/dist/metadata/types.js +3 -0
- package/dist/metadata/types.js.map +1 -1
- package/dist/monitor/baseline-calculator.d.ts +56 -0
- package/dist/monitor/baseline-calculator.d.ts.map +1 -1
- package/dist/monitor/baseline-calculator.js +72 -0
- package/dist/monitor/baseline-calculator.js.map +1 -1
- package/dist/monitor/baseline-config.d.ts +77 -0
- package/dist/monitor/baseline-config.d.ts.map +1 -1
- package/dist/monitor/baseline-config.js +79 -1
- package/dist/monitor/baseline-config.js.map +1 -1
- package/dist/monitor/freshness.d.ts +40 -0
- package/dist/monitor/freshness.d.ts.map +1 -1
- package/dist/monitor/freshness.js +82 -3
- package/dist/monitor/freshness.js.map +1 -1
- package/dist/monitor/index.d.ts +29 -0
- package/dist/monitor/index.d.ts.map +1 -1
- package/dist/monitor/index.js +29 -0
- package/dist/monitor/index.js.map +1 -1
- package/dist/monitor/schema-baseline.d.ts +45 -0
- package/dist/monitor/schema-baseline.d.ts.map +1 -1
- package/dist/monitor/schema-baseline.js +63 -5
- package/dist/monitor/schema-baseline.js.map +1 -1
- package/dist/monitor/schema-changes.d.ts +45 -0
- package/dist/monitor/schema-changes.d.ts.map +1 -1
- package/dist/monitor/schema-changes.js +85 -0
- package/dist/monitor/schema-changes.js.map +1 -1
- package/dist/monitor/volume.d.ts +43 -0
- package/dist/monitor/volume.d.ts.map +1 -1
- package/dist/monitor/volume.js +89 -0
- package/dist/monitor/volume.js.map +1 -1
- package/dist/observability/logger.d.ts +91 -0
- package/dist/observability/logger.d.ts.map +1 -1
- package/dist/observability/logger.js +108 -0
- package/dist/observability/logger.js.map +1 -1
- package/dist/observability/metrics.d.ts +140 -0
- package/dist/observability/metrics.d.ts.map +1 -1
- package/dist/observability/metrics.js +184 -7
- package/dist/observability/metrics.js.map +1 -1
- package/dist/resilience/circuit-breaker.d.ts +112 -2
- package/dist/resilience/circuit-breaker.d.ts.map +1 -1
- package/dist/resilience/circuit-breaker.js +140 -6
- package/dist/resilience/circuit-breaker.js.map +1 -1
- package/dist/resilience/index.d.ts +9 -0
- package/dist/resilience/index.d.ts.map +1 -1
- package/dist/resilience/index.js +13 -0
- package/dist/resilience/index.js.map +1 -1
- package/dist/resilience/retry-policy.d.ts +105 -0
- package/dist/resilience/retry-policy.d.ts.map +1 -1
- package/dist/resilience/retry-policy.js +158 -7
- package/dist/resilience/retry-policy.js.map +1 -1
- package/dist/resilience/timeout-manager.d.ts +137 -0
- package/dist/resilience/timeout-manager.d.ts.map +1 -1
- package/dist/resilience/timeout-manager.js +151 -4
- package/dist/resilience/timeout-manager.js.map +1 -1
- package/dist/security/query-analyzer.d.ts +124 -0
- package/dist/security/query-analyzer.d.ts.map +1 -1
- package/dist/security/query-analyzer.js +150 -9
- package/dist/security/query-analyzer.js.map +1 -1
- package/dist/security/schema-cache.d.ts +152 -0
- package/dist/security/schema-cache.d.ts.map +1 -1
- package/dist/security/schema-cache.js +144 -12
- package/dist/security/schema-cache.js.map +1 -1
- package/dist/types/connector.d.ts +68 -1
- package/dist/types/connector.d.ts.map +1 -1
- package/dist/types/connector.js +38 -15
- package/dist/types/connector.js.map +1 -1
- package/dist/types/driver-results.d.ts +28 -0
- package/dist/types/driver-results.d.ts.map +1 -1
- package/dist/types/driver-results.js +12 -0
- package/dist/types/driver-results.js.map +1 -1
- package/dist/types.d.ts +113 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -1
- package/dist/validation/index.d.ts +8 -0
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +12 -0
- package/dist/validation/index.js.map +1 -1
- package/dist/validation/runtime-validator.d.ts +98 -0
- package/dist/validation/runtime-validator.d.ts.map +1 -1
- package/dist/validation/runtime-validator.js +114 -1
- package/dist/validation/runtime-validator.js.map +1 -1
- package/dist/validation/sanitizers.d.ts +59 -0
- package/dist/validation/sanitizers.d.ts.map +1 -1
- package/dist/validation/sanitizers.js +104 -20
- package/dist/validation/sanitizers.js.map +1 -1
- package/dist/validation/schemas.d.ts +73 -0
- package/dist/validation/schemas.d.ts.map +1 -1
- package/dist/validation/schemas.js +132 -5
- package/dist/validation/schemas.js.map +1 -1
- package/dist/validators/index.d.ts +54 -0
- package/dist/validators/index.d.ts.map +1 -1
- package/dist/validators/index.js +93 -2
- package/dist/validators/index.js.map +1 -1
- package/package.json +6 -2
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secure Azure SQL Database connector for FreshGuard Core
|
|
3
|
+
* Extends BaseConnector with security built-in
|
|
4
|
+
* Uses mssql driver with Azure-specific connection configuration
|
|
5
|
+
*
|
|
6
|
+
* @module @freshguard/freshguard-core/connectors/azure-sql
|
|
7
|
+
*/
|
|
8
|
+
import { BaseConnector } from './base-connector.js';
|
|
9
|
+
import type { ConnectorConfig, TableSchema, SecurityConfig } from '../types/connector.js';
|
|
10
|
+
import { type QueryResultRow } from '../types/driver-results.js';
|
|
11
|
+
import type { SourceCredentials } from '../types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Secure Azure SQL Database connector
|
|
14
|
+
*
|
|
15
|
+
* SSL is always enforced (Azure requirement).
|
|
16
|
+
*
|
|
17
|
+
* Features:
|
|
18
|
+
* - SQL injection prevention
|
|
19
|
+
* - Connection timeouts
|
|
20
|
+
* - SSL always enforced (Azure requirement)
|
|
21
|
+
* - Azure AD token-based authentication support
|
|
22
|
+
* - Read-only query patterns
|
|
23
|
+
* - Secure error handling
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* import { AzureSQLConnector } from '@freshguard/freshguard-core';
|
|
28
|
+
*
|
|
29
|
+
* const connector = new AzureSQLConnector({
|
|
30
|
+
* host: 'myserver.database.windows.net', port: 1433,
|
|
31
|
+
* database: 'analytics',
|
|
32
|
+
* username: 'readonly',
|
|
33
|
+
* password: process.env.AZURE_SQL_PASSWORD!,
|
|
34
|
+
* });
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare class AzureSQLConnector extends BaseConnector {
|
|
38
|
+
private pool;
|
|
39
|
+
private connected;
|
|
40
|
+
/**
|
|
41
|
+
* @param config - Database connection settings (host, port, database, credentials)
|
|
42
|
+
* @param securityConfig - Optional overrides for query timeouts, max rows, and blocked keywords
|
|
43
|
+
*/
|
|
44
|
+
constructor(config: ConnectorConfig, securityConfig?: Partial<SecurityConfig>);
|
|
45
|
+
/**
|
|
46
|
+
* Connect to Azure SQL Database with security validation
|
|
47
|
+
*/
|
|
48
|
+
private connect;
|
|
49
|
+
/**
|
|
50
|
+
* Execute a validated SQL query with security measures
|
|
51
|
+
*/
|
|
52
|
+
protected executeQuery(sql: string): Promise<QueryResultRow[]>;
|
|
53
|
+
/**
|
|
54
|
+
* Execute a parameterized SQL query using prepared statements
|
|
55
|
+
*/
|
|
56
|
+
protected executeParameterizedQuery(sql: string, parameters?: unknown[]): Promise<QueryResultRow[]>;
|
|
57
|
+
/**
|
|
58
|
+
* Test database connection with security validation
|
|
59
|
+
*/
|
|
60
|
+
testConnection(debugConfig?: import('../types.js').DebugConfig): Promise<boolean>;
|
|
61
|
+
/**
|
|
62
|
+
* Helper method to merge debug configuration
|
|
63
|
+
*/
|
|
64
|
+
private mergeDebugConfig;
|
|
65
|
+
/**
|
|
66
|
+
* Generate connection suggestions based on error (Azure-specific)
|
|
67
|
+
*/
|
|
68
|
+
private generateConnectionSuggestion;
|
|
69
|
+
/**
|
|
70
|
+
* List all tables in the database
|
|
71
|
+
*/
|
|
72
|
+
listTables(): Promise<string[]>;
|
|
73
|
+
/**
|
|
74
|
+
* Get table schema information securely
|
|
75
|
+
*/
|
|
76
|
+
getTableSchema(table: string): Promise<TableSchema>;
|
|
77
|
+
/**
|
|
78
|
+
* Get last modified timestamp using SQL Server-specific methods
|
|
79
|
+
*/
|
|
80
|
+
getLastModified(table: string): Promise<Date | null>;
|
|
81
|
+
/**
|
|
82
|
+
* Close the database connection
|
|
83
|
+
*/
|
|
84
|
+
close(): Promise<void>;
|
|
85
|
+
/**
|
|
86
|
+
* Map SQL Server/Azure SQL data types to standard types
|
|
87
|
+
*/
|
|
88
|
+
private mapMSSQLType;
|
|
89
|
+
/**
|
|
90
|
+
* Override escapeIdentifier for SQL Server bracket notation
|
|
91
|
+
*/
|
|
92
|
+
protected escapeIdentifier(identifier: string): string;
|
|
93
|
+
/**
|
|
94
|
+
* Legacy connect method for backward compatibility
|
|
95
|
+
* @deprecated Use constructor with ConnectorConfig instead
|
|
96
|
+
*/
|
|
97
|
+
connectLegacy(credentials: SourceCredentials): Promise<void>;
|
|
98
|
+
/**
|
|
99
|
+
* Legacy test connection method for backward compatibility
|
|
100
|
+
* @deprecated Use testConnection() instead
|
|
101
|
+
*/
|
|
102
|
+
testConnectionLegacy(): Promise<{
|
|
103
|
+
success: boolean;
|
|
104
|
+
tableCount?: number;
|
|
105
|
+
error?: string;
|
|
106
|
+
}>;
|
|
107
|
+
/**
|
|
108
|
+
* Legacy get table metadata method for backward compatibility
|
|
109
|
+
* @deprecated Use getRowCount() and getMaxTimestamp() instead
|
|
110
|
+
*/
|
|
111
|
+
getTableMetadata(tableName: string, timestampColumn?: string): Promise<{
|
|
112
|
+
rowCount: number;
|
|
113
|
+
lastUpdate?: Date;
|
|
114
|
+
}>;
|
|
115
|
+
/**
|
|
116
|
+
* Legacy query method for backward compatibility
|
|
117
|
+
* @deprecated Direct SQL queries are not allowed for security reasons
|
|
118
|
+
*/
|
|
119
|
+
query<T = unknown>(_sql: string): Promise<T[]>;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=azure-sql.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"azure-sql.d.ts","sourceRoot":"","sources":["../../src/connectors/azure-sql.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EAAE,KAAK,cAAc,EAAa,MAAM,4BAA4B,CAAC;AAC5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AASrD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,iBAAkB,SAAQ,aAAa;IAClD,OAAO,CAAC,IAAI,CAAqC;IACjD,OAAO,CAAC,SAAS,CAAS;IAE1B;;;OAGG;gBACS,MAAM,EAAE,eAAe,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC;IAM7E;;OAEG;YACW,OAAO;IAyCrB;;OAEG;cACa,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAIpE;;OAEG;cACa,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAoD7G;;OAEG;IACG,cAAc,CAAC,WAAW,CAAC,EAAE,OAAO,aAAa,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAgEvF;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAsCpC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IA2BrC;;OAEG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA+CzD;;OAEG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAsC1D;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAc5B;;OAEG;IACH,OAAO,CAAC,YAAY;IAmDpB;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAmBtD;;;OAGG;IACG,aAAa,CAAC,WAAW,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBlE;;;OAGG;IACG,oBAAoB,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IA2BhG;;;OAGG;IACG,gBAAgB,CACpB,SAAS,EAAE,MAAM,EACjB,eAAe,SAAe,GAC7B,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,IAAI,CAAA;KAAE,CAAC;IAqBnD;;;OAGG;IAEG,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;CAKrD"}
|
|
@@ -0,0 +1,489 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secure Azure SQL Database connector for FreshGuard Core
|
|
3
|
+
* Extends BaseConnector with security built-in
|
|
4
|
+
* Uses mssql driver with Azure-specific connection configuration
|
|
5
|
+
*
|
|
6
|
+
* @module @freshguard/freshguard-core/connectors/azure-sql
|
|
7
|
+
*/
|
|
8
|
+
import * as mssql from 'mssql';
|
|
9
|
+
import { BaseConnector } from './base-connector.js';
|
|
10
|
+
import { rowString } from '../types/driver-results.js';
|
|
11
|
+
import { ConnectionError, TimeoutError, QueryError, ErrorHandler } from '../errors/index.js';
|
|
12
|
+
import { validateConnectorConfig } from '../validators/index.js';
|
|
13
|
+
/**
|
|
14
|
+
* Secure Azure SQL Database connector
|
|
15
|
+
*
|
|
16
|
+
* SSL is always enforced (Azure requirement).
|
|
17
|
+
*
|
|
18
|
+
* Features:
|
|
19
|
+
* - SQL injection prevention
|
|
20
|
+
* - Connection timeouts
|
|
21
|
+
* - SSL always enforced (Azure requirement)
|
|
22
|
+
* - Azure AD token-based authentication support
|
|
23
|
+
* - Read-only query patterns
|
|
24
|
+
* - Secure error handling
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* import { AzureSQLConnector } from '@freshguard/freshguard-core';
|
|
29
|
+
*
|
|
30
|
+
* const connector = new AzureSQLConnector({
|
|
31
|
+
* host: 'myserver.database.windows.net', port: 1433,
|
|
32
|
+
* database: 'analytics',
|
|
33
|
+
* username: 'readonly',
|
|
34
|
+
* password: process.env.AZURE_SQL_PASSWORD!,
|
|
35
|
+
* });
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export class AzureSQLConnector extends BaseConnector {
|
|
39
|
+
pool = null;
|
|
40
|
+
connected = false;
|
|
41
|
+
/**
|
|
42
|
+
* @param config - Database connection settings (host, port, database, credentials)
|
|
43
|
+
* @param securityConfig - Optional overrides for query timeouts, max rows, and blocked keywords
|
|
44
|
+
*/
|
|
45
|
+
constructor(config, securityConfig) {
|
|
46
|
+
// Validate configuration before proceeding
|
|
47
|
+
validateConnectorConfig(config);
|
|
48
|
+
super(config, securityConfig);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Connect to Azure SQL Database with security validation
|
|
52
|
+
*/
|
|
53
|
+
async connect() {
|
|
54
|
+
if (this.connected && this.pool) {
|
|
55
|
+
return; // Already connected
|
|
56
|
+
}
|
|
57
|
+
try {
|
|
58
|
+
const poolConfig = {
|
|
59
|
+
server: this.config.host,
|
|
60
|
+
port: this.config.port ?? 1433,
|
|
61
|
+
database: this.config.database,
|
|
62
|
+
user: this.config.username,
|
|
63
|
+
password: this.config.password,
|
|
64
|
+
options: {
|
|
65
|
+
// Azure SQL always requires encryption
|
|
66
|
+
encrypt: true,
|
|
67
|
+
trustServerCertificate: false,
|
|
68
|
+
connectTimeout: this.connectionTimeout,
|
|
69
|
+
requestTimeout: this.queryTimeout,
|
|
70
|
+
appName: this.config.applicationName ?? 'freshguard-core'
|
|
71
|
+
},
|
|
72
|
+
pool: {
|
|
73
|
+
max: 1, // Single connection for monitoring
|
|
74
|
+
min: 0,
|
|
75
|
+
idleTimeoutMillis: 30000
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
this.pool = new mssql.ConnectionPool(poolConfig);
|
|
79
|
+
await this.pool.connect();
|
|
80
|
+
this.connected = true;
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
throw new ConnectionError('Failed to connect to Azure SQL Database', this.config.host, this.config.port, error instanceof Error ? error : undefined);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Execute a validated SQL query with security measures
|
|
88
|
+
*/
|
|
89
|
+
async executeQuery(sql) {
|
|
90
|
+
return this.executeParameterizedQuery(sql, []);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Execute a parameterized SQL query using prepared statements
|
|
94
|
+
*/
|
|
95
|
+
async executeParameterizedQuery(sql, parameters = []) {
|
|
96
|
+
await this.connect();
|
|
97
|
+
if (!this.pool) {
|
|
98
|
+
throw new ConnectionError('Database connection not available');
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
const result = await this.executeWithTimeout(async () => {
|
|
102
|
+
if (!this.pool)
|
|
103
|
+
throw new ConnectionError('Database connection not available');
|
|
104
|
+
const request = this.pool.request();
|
|
105
|
+
// Bind positional parameters as @p1, @p2, etc.
|
|
106
|
+
for (let i = 0; i < parameters.length; i++) {
|
|
107
|
+
request.input(`p${i + 1}`, parameters[i]);
|
|
108
|
+
}
|
|
109
|
+
// Replace $N placeholders with @pN for MSSQL
|
|
110
|
+
let mssqlSql = sql;
|
|
111
|
+
for (let i = parameters.length; i >= 1; i--) {
|
|
112
|
+
mssqlSql = mssqlSql.replace(new RegExp(`\\$${i}`, 'g'), `@p${i}`);
|
|
113
|
+
}
|
|
114
|
+
// Also replace ? placeholders with @pN
|
|
115
|
+
let paramIndex = 0;
|
|
116
|
+
mssqlSql = mssqlSql.replace(/\?/g, () => `@p${++paramIndex}`);
|
|
117
|
+
const res = await request.query(mssqlSql);
|
|
118
|
+
return (res.recordset ?? []);
|
|
119
|
+
}, this.queryTimeout);
|
|
120
|
+
// Validate result size for security
|
|
121
|
+
this.validateResultSize(result);
|
|
122
|
+
return result;
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
if (error instanceof TimeoutError) {
|
|
126
|
+
throw error;
|
|
127
|
+
}
|
|
128
|
+
// Sanitize and re-throw as QueryError
|
|
129
|
+
throw new QueryError(ErrorHandler.getUserMessage(error), 'query_execution', undefined, error instanceof Error ? error : undefined);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Test database connection with security validation
|
|
134
|
+
*/
|
|
135
|
+
async testConnection(debugConfig) {
|
|
136
|
+
const mergedDebugConfig = this.mergeDebugConfig(debugConfig);
|
|
137
|
+
const debugId = `azuresql-test-${Date.now().toString(36)}-${Math.random().toString(36).substr(2, 5)}`;
|
|
138
|
+
const startTime = performance.now();
|
|
139
|
+
try {
|
|
140
|
+
this.logDebugInfo(mergedDebugConfig, debugId, 'Starting connection test', {
|
|
141
|
+
host: this.config.host,
|
|
142
|
+
port: this.config.port,
|
|
143
|
+
database: this.config.database,
|
|
144
|
+
ssl: this.config.ssl
|
|
145
|
+
});
|
|
146
|
+
await this.connect();
|
|
147
|
+
if (!this.pool) {
|
|
148
|
+
this.logDebugError(mergedDebugConfig, debugId, 'Connection test', {
|
|
149
|
+
error: 'Connection not available after connect',
|
|
150
|
+
duration: performance.now() - startTime
|
|
151
|
+
});
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
// Test with a simple, safe query (skip validation for connection test)
|
|
155
|
+
const sql = 'SELECT 1 AS test';
|
|
156
|
+
await this.executeWithTimeout(async () => {
|
|
157
|
+
if (!this.pool)
|
|
158
|
+
throw new ConnectionError('Database connection not available');
|
|
159
|
+
const request = this.pool.request();
|
|
160
|
+
return request.query(sql);
|
|
161
|
+
}, this.connectionTimeout);
|
|
162
|
+
const duration = performance.now() - startTime;
|
|
163
|
+
if (mergedDebugConfig?.enabled) {
|
|
164
|
+
console.log(`[DEBUG-${debugId}] Connection test completed:`, {
|
|
165
|
+
success: true,
|
|
166
|
+
duration,
|
|
167
|
+
host: this.config.host,
|
|
168
|
+
database: this.config.database
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
return true;
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
const duration = performance.now() - startTime;
|
|
175
|
+
this.logDebugError(mergedDebugConfig, debugId, 'Connection test', {
|
|
176
|
+
host: this.config.host,
|
|
177
|
+
port: this.config.port,
|
|
178
|
+
database: this.config.database,
|
|
179
|
+
error: mergedDebugConfig?.exposeRawErrors && error instanceof Error ? error.message : 'Connection failed',
|
|
180
|
+
duration,
|
|
181
|
+
suggestion: this.generateConnectionSuggestion(error)
|
|
182
|
+
});
|
|
183
|
+
// Don't throw - this method should return boolean
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Helper method to merge debug configuration
|
|
189
|
+
*/
|
|
190
|
+
mergeDebugConfig(debugConfig) {
|
|
191
|
+
return {
|
|
192
|
+
enabled: debugConfig?.enabled ?? (process.env.NODE_ENV === 'development'),
|
|
193
|
+
exposeQueries: debugConfig?.exposeQueries ?? true,
|
|
194
|
+
exposeRawErrors: debugConfig?.exposeRawErrors ?? true,
|
|
195
|
+
logLevel: debugConfig?.logLevel ?? 'debug'
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Generate connection suggestions based on error (Azure-specific)
|
|
200
|
+
*/
|
|
201
|
+
generateConnectionSuggestion(error) {
|
|
202
|
+
if (!(error instanceof Error)) {
|
|
203
|
+
return 'Check database connection configuration';
|
|
204
|
+
}
|
|
205
|
+
const message = error.message.toLowerCase();
|
|
206
|
+
if (message.includes('connect econnrefused') || message.includes('connection refused')) {
|
|
207
|
+
return `Azure SQL Database at ${this.config.host}:${this.config.port} is not accepting connections. Verify the server name and check Azure SQL firewall rules.`;
|
|
208
|
+
}
|
|
209
|
+
if (message.includes('timeout') || message.includes('connect timeout')) {
|
|
210
|
+
return `Connection timeout to ${this.config.host}:${this.config.port}. Check Azure SQL firewall rules, network connectivity, and ensure your IP is allowed.`;
|
|
211
|
+
}
|
|
212
|
+
if (message.includes('login failed') || message.includes('authentication failed')) {
|
|
213
|
+
return `Authentication failed for database '${this.config.database}'. Verify username, password, and Azure AD configuration if using AAD auth.`;
|
|
214
|
+
}
|
|
215
|
+
if (message.includes('cannot open database') || (message.includes('database') && message.includes('not exist'))) {
|
|
216
|
+
return `Database '${this.config.database}' not found. Check database name on your Azure SQL server.`;
|
|
217
|
+
}
|
|
218
|
+
if (message.includes('ssl') || message.includes('tls') || message.includes('encrypt')) {
|
|
219
|
+
return `SSL/TLS connection issue. Azure SQL requires encryption - check SSL certificate configuration.`;
|
|
220
|
+
}
|
|
221
|
+
if (message.includes('firewall')) {
|
|
222
|
+
return `Connection blocked by Azure SQL firewall. Add your client IP address to the server's firewall rules in the Azure portal.`;
|
|
223
|
+
}
|
|
224
|
+
if (message.includes('azure active directory') || message.includes('aad')) {
|
|
225
|
+
return `Azure AD authentication issue. Verify Azure AD admin is configured and the user has proper permissions.`;
|
|
226
|
+
}
|
|
227
|
+
return `Connection failed to ${this.config.host}:${this.config.port}. Check host, port, credentials, firewall rules, and network connectivity.`;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* List all tables in the database
|
|
231
|
+
*/
|
|
232
|
+
async listTables() {
|
|
233
|
+
const sql = `
|
|
234
|
+
SELECT TABLE_NAME as table_name
|
|
235
|
+
FROM INFORMATION_SCHEMA.TABLES
|
|
236
|
+
WHERE TABLE_TYPE = 'BASE TABLE'
|
|
237
|
+
AND TABLE_SCHEMA = 'dbo'
|
|
238
|
+
ORDER BY TABLE_NAME
|
|
239
|
+
`;
|
|
240
|
+
await this.validateQuery(sql);
|
|
241
|
+
try {
|
|
242
|
+
const result = await this.executeQuery(sql);
|
|
243
|
+
return result
|
|
244
|
+
.slice(0, this.maxRows)
|
|
245
|
+
.map((row) => rowString(row.table_name ?? row.TABLE_NAME ?? row.tablename))
|
|
246
|
+
.filter(Boolean);
|
|
247
|
+
}
|
|
248
|
+
catch (error) {
|
|
249
|
+
throw new QueryError('Failed to list tables', 'table_listing', undefined, error instanceof Error ? error : undefined);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Get table schema information securely
|
|
254
|
+
*/
|
|
255
|
+
async getTableSchema(table) {
|
|
256
|
+
// Validate table name (identifiers cannot be parameterized)
|
|
257
|
+
this.escapeIdentifier(table);
|
|
258
|
+
const sql = `
|
|
259
|
+
SELECT
|
|
260
|
+
COLUMN_NAME as column_name,
|
|
261
|
+
DATA_TYPE as data_type,
|
|
262
|
+
IS_NULLABLE as is_nullable
|
|
263
|
+
FROM INFORMATION_SCHEMA.COLUMNS
|
|
264
|
+
WHERE TABLE_SCHEMA = 'dbo'
|
|
265
|
+
AND TABLE_NAME = '${table}'
|
|
266
|
+
ORDER BY ORDINAL_POSITION
|
|
267
|
+
`;
|
|
268
|
+
await this.validateQuery(sql);
|
|
269
|
+
try {
|
|
270
|
+
const result = await this.executeQuery(sql);
|
|
271
|
+
const limited = result.slice(0, this.maxRows);
|
|
272
|
+
if (limited.length === 0) {
|
|
273
|
+
throw QueryError.tableNotFound(table);
|
|
274
|
+
}
|
|
275
|
+
return {
|
|
276
|
+
table,
|
|
277
|
+
columns: limited.map(row => ({
|
|
278
|
+
name: rowString(row.column_name ?? row.COLUMN_NAME),
|
|
279
|
+
type: this.mapMSSQLType(rowString(row.data_type ?? row.DATA_TYPE)),
|
|
280
|
+
nullable: (row.is_nullable ?? row.IS_NULLABLE) === 'YES'
|
|
281
|
+
}))
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
catch (error) {
|
|
285
|
+
if (error instanceof QueryError) {
|
|
286
|
+
throw error;
|
|
287
|
+
}
|
|
288
|
+
throw new QueryError('Failed to get table schema', 'schema_query', table, error instanceof Error ? error : undefined);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Get last modified timestamp using SQL Server-specific methods
|
|
293
|
+
*/
|
|
294
|
+
async getLastModified(table) {
|
|
295
|
+
// Try common timestamp columns
|
|
296
|
+
const timestampColumns = ['updated_at', 'modified_at', 'last_modified', 'timestamp'];
|
|
297
|
+
for (const column of timestampColumns) {
|
|
298
|
+
try {
|
|
299
|
+
const result = await this.getMaxTimestamp(table, column);
|
|
300
|
+
if (result) {
|
|
301
|
+
return result;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
catch {
|
|
305
|
+
// Column doesn't exist, try next one
|
|
306
|
+
continue;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
// Fallback: use SQL Server DMV for index usage stats
|
|
310
|
+
try {
|
|
311
|
+
const sql = `
|
|
312
|
+
SELECT MAX(last_user_update) as last_modified
|
|
313
|
+
FROM sys.dm_db_index_usage_stats
|
|
314
|
+
WHERE database_id = DB_ID()
|
|
315
|
+
AND object_id = OBJECT_ID('dbo.${this.escapeIdentifier(table).replace(/\[|\]/g, '')}')
|
|
316
|
+
`;
|
|
317
|
+
await this.validateQuery(sql);
|
|
318
|
+
const result = await this.executeQuery(sql);
|
|
319
|
+
if (result.length > 0 && result[0]?.last_modified) {
|
|
320
|
+
return new Date(rowString(result[0].last_modified));
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
catch {
|
|
324
|
+
// DMV query failed, return null
|
|
325
|
+
}
|
|
326
|
+
return null;
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Close the database connection
|
|
330
|
+
*/
|
|
331
|
+
async close() {
|
|
332
|
+
if (this.pool) {
|
|
333
|
+
try {
|
|
334
|
+
await this.pool.close();
|
|
335
|
+
}
|
|
336
|
+
catch (error) {
|
|
337
|
+
// Log error but don't throw - closing should be safe
|
|
338
|
+
console.warn('Warning: Error closing Azure SQL connection:', ErrorHandler.getUserMessage(error));
|
|
339
|
+
}
|
|
340
|
+
finally {
|
|
341
|
+
this.pool = null;
|
|
342
|
+
this.connected = false;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Map SQL Server/Azure SQL data types to standard types
|
|
348
|
+
*/
|
|
349
|
+
mapMSSQLType(mssqlType) {
|
|
350
|
+
const typeMap = {
|
|
351
|
+
// Numeric types
|
|
352
|
+
'tinyint': 'integer',
|
|
353
|
+
'smallint': 'integer',
|
|
354
|
+
'int': 'integer',
|
|
355
|
+
'integer': 'integer',
|
|
356
|
+
'bigint': 'bigint',
|
|
357
|
+
'decimal': 'decimal',
|
|
358
|
+
'numeric': 'decimal',
|
|
359
|
+
'money': 'decimal',
|
|
360
|
+
'smallmoney': 'decimal',
|
|
361
|
+
'float': 'float',
|
|
362
|
+
'real': 'float',
|
|
363
|
+
'bit': 'boolean',
|
|
364
|
+
// String types
|
|
365
|
+
'char': 'text',
|
|
366
|
+
'varchar': 'text',
|
|
367
|
+
'text': 'text',
|
|
368
|
+
'nchar': 'text',
|
|
369
|
+
'nvarchar': 'text',
|
|
370
|
+
'ntext': 'text',
|
|
371
|
+
// Date/time types
|
|
372
|
+
'date': 'date',
|
|
373
|
+
'time': 'time',
|
|
374
|
+
'datetime': 'timestamp',
|
|
375
|
+
'datetime2': 'timestamp',
|
|
376
|
+
'smalldatetime': 'timestamp',
|
|
377
|
+
'datetimeoffset': 'timestamptz',
|
|
378
|
+
// Binary types
|
|
379
|
+
'binary': 'text',
|
|
380
|
+
'varbinary': 'text',
|
|
381
|
+
'image': 'text',
|
|
382
|
+
// Special types
|
|
383
|
+
'uniqueidentifier': 'text',
|
|
384
|
+
'xml': 'text',
|
|
385
|
+
'sql_variant': 'text',
|
|
386
|
+
'hierarchyid': 'text',
|
|
387
|
+
'geometry': 'text',
|
|
388
|
+
'geography': 'text',
|
|
389
|
+
'timestamp': 'text',
|
|
390
|
+
'rowversion': 'text'
|
|
391
|
+
};
|
|
392
|
+
return typeMap[mssqlType.toLowerCase()] ?? 'unknown';
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Override escapeIdentifier for SQL Server bracket notation
|
|
396
|
+
*/
|
|
397
|
+
escapeIdentifier(identifier) {
|
|
398
|
+
// Only allow alphanumeric, underscore, and dot (for schema.table)
|
|
399
|
+
if (!/^[a-zA-Z0-9_.]+$/.test(identifier)) {
|
|
400
|
+
throw new Error(`Invalid identifier: ${identifier}`);
|
|
401
|
+
}
|
|
402
|
+
// Additional length check
|
|
403
|
+
if (identifier.length > 256) {
|
|
404
|
+
throw new Error('Identifier too long');
|
|
405
|
+
}
|
|
406
|
+
// Return with brackets for SQL Server
|
|
407
|
+
return `[${identifier}]`;
|
|
408
|
+
}
|
|
409
|
+
// ==============================================
|
|
410
|
+
// Legacy API compatibility methods
|
|
411
|
+
// ==============================================
|
|
412
|
+
/**
|
|
413
|
+
* Legacy connect method for backward compatibility
|
|
414
|
+
* @deprecated Use constructor with ConnectorConfig instead
|
|
415
|
+
*/
|
|
416
|
+
async connectLegacy(credentials) {
|
|
417
|
+
console.warn('Warning: connectLegacy is deprecated. Use constructor with ConnectorConfig instead.');
|
|
418
|
+
// Convert legacy credentials to new format
|
|
419
|
+
const config = {
|
|
420
|
+
host: credentials.host ?? '',
|
|
421
|
+
port: credentials.port ?? 1433,
|
|
422
|
+
database: credentials.database ?? '',
|
|
423
|
+
username: credentials.username ?? '',
|
|
424
|
+
password: credentials.password ?? '',
|
|
425
|
+
ssl: credentials.sslMode !== 'disable'
|
|
426
|
+
};
|
|
427
|
+
// Validate and reconnect
|
|
428
|
+
validateConnectorConfig(config);
|
|
429
|
+
this.config = { ...this.config, ...config };
|
|
430
|
+
await this.connect();
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Legacy test connection method for backward compatibility
|
|
434
|
+
* @deprecated Use testConnection() instead
|
|
435
|
+
*/
|
|
436
|
+
async testConnectionLegacy() {
|
|
437
|
+
console.warn('Warning: testConnectionLegacy is deprecated. Use testConnection() instead.');
|
|
438
|
+
try {
|
|
439
|
+
const success = await this.testConnection();
|
|
440
|
+
if (success) {
|
|
441
|
+
// Get table count for legacy compatibility
|
|
442
|
+
const tables = await this.listTables();
|
|
443
|
+
return {
|
|
444
|
+
success: true,
|
|
445
|
+
tableCount: tables.length
|
|
446
|
+
};
|
|
447
|
+
}
|
|
448
|
+
else {
|
|
449
|
+
return {
|
|
450
|
+
success: false,
|
|
451
|
+
error: 'Connection test failed'
|
|
452
|
+
};
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
catch (error) {
|
|
456
|
+
return {
|
|
457
|
+
success: false,
|
|
458
|
+
error: ErrorHandler.getUserMessage(error)
|
|
459
|
+
};
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
/**
|
|
463
|
+
* Legacy get table metadata method for backward compatibility
|
|
464
|
+
* @deprecated Use getRowCount() and getMaxTimestamp() instead
|
|
465
|
+
*/
|
|
466
|
+
async getTableMetadata(tableName, timestampColumn = 'updated_at') {
|
|
467
|
+
console.warn('Warning: getTableMetadata is deprecated. Use getRowCount() and getMaxTimestamp() instead.');
|
|
468
|
+
try {
|
|
469
|
+
const rowCount = await this.getRowCount(tableName);
|
|
470
|
+
const lastUpdate = await this.getMaxTimestamp(tableName, timestampColumn);
|
|
471
|
+
return {
|
|
472
|
+
rowCount,
|
|
473
|
+
lastUpdate: lastUpdate ?? undefined
|
|
474
|
+
};
|
|
475
|
+
}
|
|
476
|
+
catch (error) {
|
|
477
|
+
throw new QueryError('Failed to get table metadata', 'metadata_query', tableName, error instanceof Error ? error : undefined);
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
/**
|
|
481
|
+
* Legacy query method for backward compatibility
|
|
482
|
+
* @deprecated Direct SQL queries are not allowed for security reasons
|
|
483
|
+
*/
|
|
484
|
+
// eslint-disable-next-line @typescript-eslint/require-await -- deprecated stub that always throws
|
|
485
|
+
async query(_sql) {
|
|
486
|
+
throw new Error('Direct SQL queries are not allowed for security reasons. Use specific methods like getRowCount(), getMaxTimestamp(), etc.');
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
//# sourceMappingURL=azure-sql.js.map
|