@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.
Files changed (196) hide show
  1. package/CHANGELOG.md +15 -1
  2. package/README.md +74 -1
  3. package/SKILL.md +229 -0
  4. package/dist/cli/index.d.ts +13 -0
  5. package/dist/cli/index.d.ts.map +1 -1
  6. package/dist/cli/index.js +74 -1
  7. package/dist/cli/index.js.map +1 -1
  8. package/dist/connectors/azure-sql.d.ts +121 -0
  9. package/dist/connectors/azure-sql.d.ts.map +1 -0
  10. package/dist/connectors/azure-sql.js +489 -0
  11. package/dist/connectors/azure-sql.js.map +1 -0
  12. package/dist/connectors/base-connector.d.ts +139 -0
  13. package/dist/connectors/base-connector.d.ts.map +1 -1
  14. package/dist/connectors/base-connector.js +160 -3
  15. package/dist/connectors/base-connector.js.map +1 -1
  16. package/dist/connectors/bigquery.d.ts +100 -0
  17. package/dist/connectors/bigquery.d.ts.map +1 -1
  18. package/dist/connectors/bigquery.js +143 -2
  19. package/dist/connectors/bigquery.js.map +1 -1
  20. package/dist/connectors/duckdb.d.ts +96 -0
  21. package/dist/connectors/duckdb.d.ts.map +1 -1
  22. package/dist/connectors/duckdb.js +144 -7
  23. package/dist/connectors/duckdb.js.map +1 -1
  24. package/dist/connectors/index.d.ts +28 -0
  25. package/dist/connectors/index.d.ts.map +1 -1
  26. package/dist/connectors/index.js +28 -0
  27. package/dist/connectors/index.js.map +1 -1
  28. package/dist/connectors/mssql.d.ts +119 -0
  29. package/dist/connectors/mssql.d.ts.map +1 -0
  30. package/dist/connectors/mssql.js +483 -0
  31. package/dist/connectors/mssql.js.map +1 -0
  32. package/dist/connectors/mysql.d.ts +85 -0
  33. package/dist/connectors/mysql.d.ts.map +1 -1
  34. package/dist/connectors/mysql.js +118 -3
  35. package/dist/connectors/mysql.js.map +1 -1
  36. package/dist/connectors/postgres.d.ts +85 -0
  37. package/dist/connectors/postgres.d.ts.map +1 -1
  38. package/dist/connectors/postgres.js +113 -6
  39. package/dist/connectors/postgres.js.map +1 -1
  40. package/dist/connectors/redshift.d.ts +90 -0
  41. package/dist/connectors/redshift.d.ts.map +1 -1
  42. package/dist/connectors/redshift.js +131 -7
  43. package/dist/connectors/redshift.js.map +1 -1
  44. package/dist/connectors/snowflake.d.ts +108 -0
  45. package/dist/connectors/snowflake.d.ts.map +1 -1
  46. package/dist/connectors/snowflake.js +137 -3
  47. package/dist/connectors/snowflake.js.map +1 -1
  48. package/dist/connectors/synapse.d.ts +123 -0
  49. package/dist/connectors/synapse.d.ts.map +1 -0
  50. package/dist/connectors/synapse.js +495 -0
  51. package/dist/connectors/synapse.js.map +1 -0
  52. package/dist/db/index.d.ts +25 -0
  53. package/dist/db/index.d.ts.map +1 -1
  54. package/dist/db/index.js +23 -0
  55. package/dist/db/index.js.map +1 -1
  56. package/dist/db/migrate.d.ts +23 -0
  57. package/dist/db/migrate.d.ts.map +1 -1
  58. package/dist/db/migrate.js +38 -0
  59. package/dist/db/migrate.js.map +1 -1
  60. package/dist/db/schema.d.ts +11 -0
  61. package/dist/db/schema.d.ts.map +1 -1
  62. package/dist/db/schema.js +70 -0
  63. package/dist/db/schema.js.map +1 -1
  64. package/dist/errors/debug-factory.d.ts +38 -0
  65. package/dist/errors/debug-factory.d.ts.map +1 -1
  66. package/dist/errors/debug-factory.js +40 -0
  67. package/dist/errors/debug-factory.js.map +1 -1
  68. package/dist/errors/index.d.ts +59 -0
  69. package/dist/errors/index.d.ts.map +1 -1
  70. package/dist/errors/index.js +110 -7
  71. package/dist/errors/index.js.map +1 -1
  72. package/dist/index.d.ts +32 -1
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +37 -1
  75. package/dist/index.js.map +1 -1
  76. package/dist/metadata/duckdb-storage.d.ts +3 -0
  77. package/dist/metadata/duckdb-storage.d.ts.map +1 -1
  78. package/dist/metadata/duckdb-storage.js +6 -0
  79. package/dist/metadata/duckdb-storage.js.map +1 -1
  80. package/dist/metadata/factory.d.ts +30 -0
  81. package/dist/metadata/factory.d.ts.map +1 -1
  82. package/dist/metadata/factory.js +31 -0
  83. package/dist/metadata/factory.js.map +1 -1
  84. package/dist/metadata/index.d.ts +26 -0
  85. package/dist/metadata/index.d.ts.map +1 -1
  86. package/dist/metadata/index.js +26 -0
  87. package/dist/metadata/index.js.map +1 -1
  88. package/dist/metadata/interface.d.ts +33 -0
  89. package/dist/metadata/interface.d.ts.map +1 -1
  90. package/dist/metadata/interface.js +3 -0
  91. package/dist/metadata/interface.js.map +1 -1
  92. package/dist/metadata/postgresql-storage.d.ts +3 -0
  93. package/dist/metadata/postgresql-storage.d.ts.map +1 -1
  94. package/dist/metadata/postgresql-storage.js +12 -2
  95. package/dist/metadata/postgresql-storage.js.map +1 -1
  96. package/dist/metadata/schema-config.d.ts +53 -0
  97. package/dist/metadata/schema-config.d.ts.map +1 -1
  98. package/dist/metadata/schema-config.js +64 -0
  99. package/dist/metadata/schema-config.js.map +1 -1
  100. package/dist/metadata/types.d.ts +3 -0
  101. package/dist/metadata/types.d.ts.map +1 -1
  102. package/dist/metadata/types.js +3 -0
  103. package/dist/metadata/types.js.map +1 -1
  104. package/dist/monitor/baseline-calculator.d.ts +56 -0
  105. package/dist/monitor/baseline-calculator.d.ts.map +1 -1
  106. package/dist/monitor/baseline-calculator.js +72 -0
  107. package/dist/monitor/baseline-calculator.js.map +1 -1
  108. package/dist/monitor/baseline-config.d.ts +77 -0
  109. package/dist/monitor/baseline-config.d.ts.map +1 -1
  110. package/dist/monitor/baseline-config.js +79 -1
  111. package/dist/monitor/baseline-config.js.map +1 -1
  112. package/dist/monitor/freshness.d.ts +40 -0
  113. package/dist/monitor/freshness.d.ts.map +1 -1
  114. package/dist/monitor/freshness.js +82 -3
  115. package/dist/monitor/freshness.js.map +1 -1
  116. package/dist/monitor/index.d.ts +29 -0
  117. package/dist/monitor/index.d.ts.map +1 -1
  118. package/dist/monitor/index.js +29 -0
  119. package/dist/monitor/index.js.map +1 -1
  120. package/dist/monitor/schema-baseline.d.ts +45 -0
  121. package/dist/monitor/schema-baseline.d.ts.map +1 -1
  122. package/dist/monitor/schema-baseline.js +63 -5
  123. package/dist/monitor/schema-baseline.js.map +1 -1
  124. package/dist/monitor/schema-changes.d.ts +45 -0
  125. package/dist/monitor/schema-changes.d.ts.map +1 -1
  126. package/dist/monitor/schema-changes.js +85 -0
  127. package/dist/monitor/schema-changes.js.map +1 -1
  128. package/dist/monitor/volume.d.ts +43 -0
  129. package/dist/monitor/volume.d.ts.map +1 -1
  130. package/dist/monitor/volume.js +89 -0
  131. package/dist/monitor/volume.js.map +1 -1
  132. package/dist/observability/logger.d.ts +91 -0
  133. package/dist/observability/logger.d.ts.map +1 -1
  134. package/dist/observability/logger.js +108 -0
  135. package/dist/observability/logger.js.map +1 -1
  136. package/dist/observability/metrics.d.ts +140 -0
  137. package/dist/observability/metrics.d.ts.map +1 -1
  138. package/dist/observability/metrics.js +184 -7
  139. package/dist/observability/metrics.js.map +1 -1
  140. package/dist/resilience/circuit-breaker.d.ts +112 -2
  141. package/dist/resilience/circuit-breaker.d.ts.map +1 -1
  142. package/dist/resilience/circuit-breaker.js +140 -6
  143. package/dist/resilience/circuit-breaker.js.map +1 -1
  144. package/dist/resilience/index.d.ts +9 -0
  145. package/dist/resilience/index.d.ts.map +1 -1
  146. package/dist/resilience/index.js +13 -0
  147. package/dist/resilience/index.js.map +1 -1
  148. package/dist/resilience/retry-policy.d.ts +105 -0
  149. package/dist/resilience/retry-policy.d.ts.map +1 -1
  150. package/dist/resilience/retry-policy.js +158 -7
  151. package/dist/resilience/retry-policy.js.map +1 -1
  152. package/dist/resilience/timeout-manager.d.ts +137 -0
  153. package/dist/resilience/timeout-manager.d.ts.map +1 -1
  154. package/dist/resilience/timeout-manager.js +151 -4
  155. package/dist/resilience/timeout-manager.js.map +1 -1
  156. package/dist/security/query-analyzer.d.ts +124 -0
  157. package/dist/security/query-analyzer.d.ts.map +1 -1
  158. package/dist/security/query-analyzer.js +150 -9
  159. package/dist/security/query-analyzer.js.map +1 -1
  160. package/dist/security/schema-cache.d.ts +152 -0
  161. package/dist/security/schema-cache.d.ts.map +1 -1
  162. package/dist/security/schema-cache.js +144 -12
  163. package/dist/security/schema-cache.js.map +1 -1
  164. package/dist/types/connector.d.ts +68 -1
  165. package/dist/types/connector.d.ts.map +1 -1
  166. package/dist/types/connector.js +38 -15
  167. package/dist/types/connector.js.map +1 -1
  168. package/dist/types/driver-results.d.ts +28 -0
  169. package/dist/types/driver-results.d.ts.map +1 -1
  170. package/dist/types/driver-results.js +12 -0
  171. package/dist/types/driver-results.js.map +1 -1
  172. package/dist/types.d.ts +113 -1
  173. package/dist/types.d.ts.map +1 -1
  174. package/dist/types.js +8 -0
  175. package/dist/types.js.map +1 -1
  176. package/dist/validation/index.d.ts +8 -0
  177. package/dist/validation/index.d.ts.map +1 -1
  178. package/dist/validation/index.js +12 -0
  179. package/dist/validation/index.js.map +1 -1
  180. package/dist/validation/runtime-validator.d.ts +98 -0
  181. package/dist/validation/runtime-validator.d.ts.map +1 -1
  182. package/dist/validation/runtime-validator.js +114 -1
  183. package/dist/validation/runtime-validator.js.map +1 -1
  184. package/dist/validation/sanitizers.d.ts +59 -0
  185. package/dist/validation/sanitizers.d.ts.map +1 -1
  186. package/dist/validation/sanitizers.js +104 -20
  187. package/dist/validation/sanitizers.js.map +1 -1
  188. package/dist/validation/schemas.d.ts +73 -0
  189. package/dist/validation/schemas.d.ts.map +1 -1
  190. package/dist/validation/schemas.js +132 -5
  191. package/dist/validation/schemas.js.map +1 -1
  192. package/dist/validators/index.d.ts +54 -0
  193. package/dist/validators/index.d.ts.map +1 -1
  194. package/dist/validators/index.js +93 -2
  195. package/dist/validators/index.js.map +1 -1
  196. package/package.json +6 -2
@@ -1,37 +1,133 @@
1
+ /**
2
+ * Secure DuckDB connector for FreshGuard Core
3
+ * Extends BaseConnector with security built-in
4
+ *
5
+ * @module @freshguard/freshguard-core/connectors/duckdb
6
+ */
1
7
  import { BaseConnector } from './base-connector.js';
2
8
  import type { ConnectorConfig, TableSchema, SecurityConfig } from '../types/connector.js';
3
9
  import { type QueryResultRow } from '../types/driver-results.js';
4
10
  import type { SourceCredentials } from '../types.js';
11
+ /**
12
+ * Secure DuckDB connector
13
+ *
14
+ * Uses a local DuckDB file (or `:memory:`) for lightweight, embedded analytics.
15
+ *
16
+ * Features:
17
+ * - SQL injection prevention
18
+ * - File path validation
19
+ * - Read-only query patterns
20
+ * - Connection timeouts
21
+ * - Secure error handling
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * import { DuckDBConnector } from '@freshguard/freshguard-core';
26
+ *
27
+ * const connector = new DuckDBConnector({
28
+ * host: 'local', port: 0,
29
+ * database: './warehouse.duckdb', // or ':memory:'
30
+ * username: '', password: '',
31
+ * });
32
+ *
33
+ * const tables = await connector.listTables();
34
+ * ```
35
+ */
5
36
  export declare class DuckDBConnector extends BaseConnector {
6
37
  private instance;
7
38
  private connection;
8
39
  private databasePath;
9
40
  private connected;
41
+ /**
42
+ * @param config - Connection config; `database` is the DuckDB file path or `':memory:'`
43
+ * @param securityConfig - Optional overrides for query timeouts, max rows, and blocked keywords
44
+ */
10
45
  constructor(config: ConnectorConfig, securityConfig?: Partial<SecurityConfig>);
46
+ /**
47
+ * Validate DuckDB-specific configuration
48
+ */
11
49
  private static validateDuckDBConfig;
50
+ /**
51
+ * Connect to DuckDB database with security validation
52
+ */
12
53
  private connect;
54
+ /**
55
+ * Execute a validated SQL query with security measures
56
+ */
13
57
  protected executeQuery(sql: string): Promise<QueryResultRow[]>;
58
+ /**
59
+ * Execute a parameterized SQL query (DuckDB with manual parameter substitution)
60
+ * Note: DuckDB node API has limited prepared statement support, so we use safe parameter substitution
61
+ */
14
62
  protected executeParameterizedQuery(sql: string, parameters?: unknown[]): Promise<QueryResultRow[]>;
63
+ /**
64
+ * Test database connection with security validation
65
+ */
15
66
  testConnection(debugConfig?: import('../types.js').DebugConfig): Promise<boolean>;
67
+ /**
68
+ * Helper method to merge debug configuration
69
+ */
16
70
  private mergeDebugConfig;
71
+ /**
72
+ * Generate DuckDB-specific connection suggestions based on error
73
+ */
17
74
  private generateDuckDBConnectionSuggestion;
75
+ /**
76
+ * List all tables in the database (excluding system schemas)
77
+ */
18
78
  listTables(): Promise<string[]>;
79
+ /**
80
+ * Get table schema information securely
81
+ */
19
82
  getTableSchema(table: string): Promise<TableSchema>;
83
+ /**
84
+ * Get last modified timestamp for DuckDB
85
+ * Since DuckDB doesn't have built-in table modification timestamps,
86
+ * we'll look for common timestamp columns
87
+ */
20
88
  getLastModified(table: string): Promise<Date | null>;
89
+ /**
90
+ * Close the database connection
91
+ */
21
92
  close(): Promise<void>;
93
+ /**
94
+ * Map DuckDB data types to standard types
95
+ */
22
96
  private mapDuckDBType;
97
+ /**
98
+ * Legacy connect method for backward compatibility
99
+ * @deprecated Use constructor with ConnectorConfig instead
100
+ */
23
101
  connectLegacy(credentials: SourceCredentials): Promise<void>;
102
+ /**
103
+ * Legacy test connection method for backward compatibility
104
+ * @deprecated Use testConnection() instead
105
+ */
24
106
  testConnectionLegacy(): Promise<{
25
107
  success: boolean;
26
108
  tableCount?: number;
27
109
  error?: string;
28
110
  }>;
111
+ /**
112
+ * Legacy get table metadata method for backward compatibility
113
+ * @deprecated Use getRowCount() and getMaxTimestamp() instead
114
+ */
29
115
  getTableMetadata(tableName: string, timestampColumn?: string): Promise<{
30
116
  rowCount: number;
31
117
  lastUpdate?: Date;
32
118
  }>;
119
+ /**
120
+ * Legacy query method for backward compatibility
121
+ * @deprecated Direct SQL queries are not allowed for security reasons
122
+ */
33
123
  query<T = unknown>(_sql: string): Promise<T[]>;
124
+ /**
125
+ * Get database file path (DuckDB-specific utility)
126
+ */
34
127
  getDatabasePath(): string;
128
+ /**
129
+ * Check if database is in-memory
130
+ */
35
131
  isInMemory(): boolean;
36
132
  }
37
133
  //# sourceMappingURL=duckdb.d.ts.map
@@ -1 +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,EAAE,KAAK,cAAc,EAAa,MAAM,4BAA4B,CAAC;AAC5E,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;cAoDL,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;cAQpD,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IA+DvG,cAAc,CAAC,WAAW,CAAC,EAAE,OAAO,aAAa,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IA+DvF,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;IA2BpD,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;IA6B7C,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IASpD,eAAe,IAAI,MAAM;IAOzB,UAAU,IAAI,OAAO;CAGtB"}
1
+ {"version":3,"file":"duckdb.d.ts","sourceRoot":"","sources":["../../src/connectors/duckdb.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,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;AAYrD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,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;IAE1B;;;OAGG;gBACS,MAAM,EAAE,eAAe,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC;IAS7E;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IA2BnC;;OAEG;YACW,OAAO;IAiDrB;;OAEG;cACa,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAIpE;;;OAGG;cACa,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IA4D7G;;OAEG;IACG,cAAc,CAAC,WAAW,CAAC,EAAE,OAAO,aAAa,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IA4DvF;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB;;OAEG;IACH,OAAO,CAAC,kCAAkC;IA8C1C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAwBrC;;OAEG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA+CzD;;;;OAIG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAuB1D;;OAEG;IAEG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyB5B;;OAEG;IACH,OAAO,CAAC,aAAa;IAmCrB;;;OAGG;IACG,aAAa,CAAC,WAAW,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBlE;;;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;IAwBnD;;;OAGG;IAEG,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAMpD;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,UAAU,IAAI,OAAO;CAGtB"}
@@ -1,3 +1,9 @@
1
+ /**
2
+ * Secure DuckDB connector for FreshGuard Core
3
+ * Extends BaseConnector with security built-in
4
+ *
5
+ * @module @freshguard/freshguard-core/connectors/duckdb
6
+ */
1
7
  import { DuckDBInstance } from '@duckdb/node-api';
2
8
  import { BaseConnector } from './base-connector.js';
3
9
  import { rowString } from '../types/driver-results.js';
@@ -5,45 +11,95 @@ import { ConnectionError, TimeoutError, QueryError, ConfigurationError, ErrorHan
5
11
  import { validateDatabaseIdentifier } from '../validators/index.js';
6
12
  import { existsSync } from 'fs';
7
13
  import { resolve } from 'path';
14
+ /**
15
+ * Secure DuckDB connector
16
+ *
17
+ * Uses a local DuckDB file (or `:memory:`) for lightweight, embedded analytics.
18
+ *
19
+ * Features:
20
+ * - SQL injection prevention
21
+ * - File path validation
22
+ * - Read-only query patterns
23
+ * - Connection timeouts
24
+ * - Secure error handling
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * import { DuckDBConnector } from '@freshguard/freshguard-core';
29
+ *
30
+ * const connector = new DuckDBConnector({
31
+ * host: 'local', port: 0,
32
+ * database: './warehouse.duckdb', // or ':memory:'
33
+ * username: '', password: '',
34
+ * });
35
+ *
36
+ * const tables = await connector.listTables();
37
+ * ```
38
+ */
8
39
  export class DuckDBConnector extends BaseConnector {
9
40
  instance = null;
10
41
  connection = null;
11
42
  databasePath = '';
12
43
  connected = false;
44
+ /**
45
+ * @param config - Connection config; `database` is the DuckDB file path or `':memory:'`
46
+ * @param securityConfig - Optional overrides for query timeouts, max rows, and blocked keywords
47
+ */
13
48
  constructor(config, securityConfig) {
49
+ // Validate DuckDB-specific configuration
14
50
  DuckDBConnector.validateDuckDBConfig(config);
15
51
  super(config, securityConfig);
52
+ // For DuckDB, database field contains the file path
16
53
  this.databasePath = config.database === ':memory:' ? ':memory:' : resolve(config.database);
17
54
  }
55
+ /**
56
+ * Validate DuckDB-specific configuration
57
+ */
18
58
  static validateDuckDBConfig(config) {
19
59
  if (!config.database) {
20
60
  throw new ConfigurationError('Database path is required for DuckDB');
21
61
  }
62
+ // DuckDB doesn't use traditional host/port/username/password for file-based databases
63
+ // But we still require them for consistency with the interface
22
64
  if (config.database !== ':memory:') {
65
+ // Validate file path security
23
66
  const resolvedPath = resolve(config.database);
67
+ // Prevent directory traversal attacks
24
68
  if (config.database.includes('..')) {
25
69
  throw new ConfigurationError('Database path cannot contain directory traversal patterns');
26
70
  }
71
+ // Ensure path doesn't access system directories
27
72
  const systemPaths = ['/etc', '/sys', '/proc', '/dev', '/root', '/var/log'];
28
73
  if (systemPaths.some(sysPath => resolvedPath.startsWith(sysPath))) {
29
74
  throw new ConfigurationError('Database path cannot access system directories');
30
75
  }
76
+ // For production, we could add more restrictions like only allowing specific directories
77
+ // This would be configurable based on deployment environment
31
78
  }
32
79
  }
80
+ /**
81
+ * Connect to DuckDB database with security validation
82
+ */
33
83
  async connect() {
34
84
  if (this.connected && this.instance && this.connection) {
35
- return;
85
+ return; // Already connected
36
86
  }
37
87
  try {
88
+ // Validate file access before connecting
38
89
  if (this.databasePath !== ':memory:') {
90
+ // For file-based databases, check if file exists and is accessible
91
+ // Note: DuckDB will create the file if it doesn't exist, but we want to validate the directory
39
92
  const dirPath = this.databasePath.substring(0, this.databasePath.lastIndexOf('/'));
93
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- dirPath is derived from validated databasePath config
40
94
  if (dirPath && !existsSync(dirPath)) {
41
95
  throw new ConnectionError('Database directory does not exist');
42
96
  }
43
97
  }
98
+ // Create DuckDB instance with timeout protection
44
99
  this.instance = await this.executeWithTimeout(() => this.databasePath === ':memory:'
45
100
  ? DuckDBInstance.create()
46
101
  : DuckDBInstance.create(this.databasePath), this.connectionTimeout);
102
+ // Get a connection from the instance
47
103
  this.connection = await this.executeWithTimeout(() => {
48
104
  if (!this.instance)
49
105
  throw new ConnectionError('DuckDB instance not available');
@@ -55,27 +111,40 @@ export class DuckDBConnector extends BaseConnector {
55
111
  if (error instanceof TimeoutError) {
56
112
  throw error;
57
113
  }
58
- throw new ConnectionError('Failed to connect to DuckDB', 'localhost', undefined, error instanceof Error ? error : undefined);
114
+ throw new ConnectionError('Failed to connect to DuckDB', 'localhost', // DuckDB is always local
115
+ undefined, error instanceof Error ? error : undefined);
59
116
  }
60
117
  }
118
+ /**
119
+ * Execute a validated SQL query with security measures
120
+ */
61
121
  async executeQuery(sql) {
62
122
  return this.executeParameterizedQuery(sql, []);
63
123
  }
124
+ /**
125
+ * Execute a parameterized SQL query (DuckDB with manual parameter substitution)
126
+ * Note: DuckDB node API has limited prepared statement support, so we use safe parameter substitution
127
+ */
64
128
  async executeParameterizedQuery(sql, parameters = []) {
65
129
  await this.connect();
66
130
  if (!this.connection) {
67
131
  throw new ConnectionError('DuckDB connection not available');
68
132
  }
69
133
  try {
134
+ // DuckDB doesn't have robust parameterized query support in node API
135
+ // Use safe parameter substitution for numeric values, keep string validation strict
70
136
  let finalSql = sql;
71
137
  if (parameters.length > 0) {
138
+ // Replace $1, $2, etc. with properly escaped parameters
72
139
  for (let i = 0; i < parameters.length; i++) {
73
140
  const param = parameters[i];
74
141
  const placeholder = `$${i + 1}`;
75
142
  if (typeof param === 'number') {
143
+ // Safe for numeric parameters
76
144
  finalSql = finalSql.replace(placeholder, param.toString());
77
145
  }
78
146
  else if (typeof param === 'string') {
147
+ // For string parameters, use single quotes and escape internal quotes
79
148
  const escapedParam = param.replace(/'/g, "''");
80
149
  finalSql = finalSql.replace(placeholder, `'${escapedParam}'`);
81
150
  }
@@ -90,6 +159,7 @@ export class DuckDBConnector extends BaseConnector {
90
159
  return this.connection.runAndReadAll(finalSql);
91
160
  }, this.queryTimeout);
92
161
  const rows = reader.getRowObjects();
162
+ // Validate result size for security
93
163
  this.validateResultSize(rows);
94
164
  return rows;
95
165
  }
@@ -97,9 +167,13 @@ export class DuckDBConnector extends BaseConnector {
97
167
  if (error instanceof TimeoutError) {
98
168
  throw error;
99
169
  }
170
+ // Sanitize and re-throw as QueryError
100
171
  throw new QueryError(ErrorHandler.getUserMessage(error), 'query_execution', undefined, error instanceof Error ? error : undefined);
101
172
  }
102
173
  }
174
+ /**
175
+ * Test database connection with security validation
176
+ */
103
177
  async testConnection(debugConfig) {
104
178
  const mergedDebugConfig = this.mergeDebugConfig(debugConfig);
105
179
  const debugId = `duck-test-${Date.now().toString(36)}-${Math.random().toString(36).substr(2, 5)}`;
@@ -118,6 +192,7 @@ export class DuckDBConnector extends BaseConnector {
118
192
  });
119
193
  return false;
120
194
  }
195
+ // Test with a simple, safe query (skip validation for connection test)
121
196
  const sql = 'SELECT 1 as test';
122
197
  await this.executeWithTimeout(() => {
123
198
  if (!this.connection)
@@ -143,9 +218,13 @@ export class DuckDBConnector extends BaseConnector {
143
218
  duration,
144
219
  suggestion: this.generateDuckDBConnectionSuggestion(error)
145
220
  });
221
+ // Don't throw - this method should return boolean
146
222
  return false;
147
223
  }
148
224
  }
225
+ /**
226
+ * Helper method to merge debug configuration
227
+ */
149
228
  mergeDebugConfig(debugConfig) {
150
229
  return {
151
230
  enabled: debugConfig?.enabled ?? (process.env.NODE_ENV === 'development'),
@@ -154,6 +233,9 @@ export class DuckDBConnector extends BaseConnector {
154
233
  logLevel: debugConfig?.logLevel ?? 'debug'
155
234
  };
156
235
  }
236
+ /**
237
+ * Generate DuckDB-specific connection suggestions based on error
238
+ */
157
239
  generateDuckDBConnectionSuggestion(error) {
158
240
  if (!(error instanceof Error)) {
159
241
  return 'Check DuckDB database configuration';
@@ -188,6 +270,9 @@ export class DuckDBConnector extends BaseConnector {
188
270
  }
189
271
  return `DuckDB connection failed for database '${this.databasePath}'. Check file path, permissions, and disk space.`;
190
272
  }
273
+ /**
274
+ * List all tables in the database (excluding system schemas)
275
+ */
191
276
  async listTables() {
192
277
  const sql = `
193
278
  SELECT table_name
@@ -205,7 +290,11 @@ export class DuckDBConnector extends BaseConnector {
205
290
  throw new QueryError('Failed to list tables', 'table_listing', undefined, error instanceof Error ? error : undefined);
206
291
  }
207
292
  }
293
+ /**
294
+ * Get table schema information securely
295
+ */
208
296
  async getTableSchema(table) {
297
+ // Validate table name (identifiers cannot be parameterized)
209
298
  this.escapeIdentifier(table);
210
299
  const sql = `
211
300
  SELECT
@@ -240,7 +329,13 @@ export class DuckDBConnector extends BaseConnector {
240
329
  throw new QueryError('Failed to get table schema', 'schema_query', table, error instanceof Error ? error : undefined);
241
330
  }
242
331
  }
332
+ /**
333
+ * Get last modified timestamp for DuckDB
334
+ * Since DuckDB doesn't have built-in table modification timestamps,
335
+ * we'll look for common timestamp columns
336
+ */
243
337
  async getLastModified(table) {
338
+ // Try common timestamp columns
244
339
  const timestampColumns = [
245
340
  'updated_at', 'modified_at', 'last_modified', 'timestamp',
246
341
  'created_at', 'date_modified', 'last_update'
@@ -253,31 +348,44 @@ export class DuckDBConnector extends BaseConnector {
253
348
  }
254
349
  }
255
350
  catch {
351
+ // Column doesn't exist, try next one
256
352
  continue;
257
353
  }
258
354
  }
355
+ // No timestamp columns found
259
356
  return null;
260
357
  }
358
+ /**
359
+ * Close the database connection
360
+ */
361
+ // eslint-disable-next-line @typescript-eslint/require-await -- must match abstract close(): Promise<void>
261
362
  async close() {
262
363
  try {
364
+ // Close connection first
263
365
  if (this.connection) {
264
366
  this.connection.closeSync();
265
367
  this.connection = null;
266
368
  }
369
+ // Clean up instance reference
267
370
  if (this.instance) {
268
371
  this.instance = null;
269
372
  }
270
373
  this.connected = false;
271
374
  }
272
375
  catch (error) {
376
+ // Log error but don't throw - closing should be safe
273
377
  console.warn('Warning: Error closing DuckDB connection:', ErrorHandler.getUserMessage(error));
274
378
  }
275
379
  finally {
380
+ // Ensure cleanup even if error occurs
276
381
  this.connection = null;
277
382
  this.instance = null;
278
383
  this.connected = false;
279
384
  }
280
385
  }
386
+ /**
387
+ * Map DuckDB data types to standard types
388
+ */
281
389
  mapDuckDBType(duckdbType) {
282
390
  const typeMap = {
283
391
  'BIGINT': 'bigint',
@@ -307,27 +415,41 @@ export class DuckDBConnector extends BaseConnector {
307
415
  };
308
416
  return typeMap[duckdbType.toUpperCase()] ?? 'unknown';
309
417
  }
418
+ // ==============================================
419
+ // Legacy API compatibility methods
420
+ // ==============================================
421
+ /**
422
+ * Legacy connect method for backward compatibility
423
+ * @deprecated Use constructor with ConnectorConfig instead
424
+ */
310
425
  async connectLegacy(credentials) {
311
426
  console.warn('Warning: connectLegacy is deprecated. Use constructor with ConnectorConfig instead.');
427
+ // Convert legacy credentials to new format
312
428
  const dbPath = credentials.connectionString ?? credentials.database ?? ':memory:';
313
429
  const config = {
314
- host: 'localhost',
315
- port: 0,
430
+ host: 'localhost', // DuckDB is always local
431
+ port: 0, // Not used for DuckDB
316
432
  database: dbPath,
317
- username: 'duckdb',
318
- password: 'duckdb',
319
- ssl: false
433
+ username: 'duckdb', // Default for compatibility
434
+ password: 'duckdb', // Not used for file-based DuckDB
435
+ ssl: false // Not applicable for DuckDB
320
436
  };
437
+ // Validate and reconnect
321
438
  DuckDBConnector.validateDuckDBConfig(config);
322
439
  this.config = { ...this.config, ...config };
323
440
  this.databasePath = config.database === ':memory:' ? ':memory:' : resolve(config.database);
324
441
  await this.connect();
325
442
  }
443
+ /**
444
+ * Legacy test connection method for backward compatibility
445
+ * @deprecated Use testConnection() instead
446
+ */
326
447
  async testConnectionLegacy() {
327
448
  console.warn('Warning: testConnectionLegacy is deprecated. Use testConnection() instead.');
328
449
  try {
329
450
  const success = await this.testConnection();
330
451
  if (success) {
452
+ // Get table count for legacy compatibility
331
453
  const tables = await this.listTables();
332
454
  return {
333
455
  success: true,
@@ -348,6 +470,10 @@ export class DuckDBConnector extends BaseConnector {
348
470
  };
349
471
  }
350
472
  }
473
+ /**
474
+ * Legacy get table metadata method for backward compatibility
475
+ * @deprecated Use getRowCount() and getMaxTimestamp() instead
476
+ */
351
477
  async getTableMetadata(tableName, timestampColumn = 'updated_at') {
352
478
  console.warn('Warning: getTableMetadata is deprecated. Use getRowCount() and getMaxTimestamp() instead.');
353
479
  try {
@@ -364,12 +490,23 @@ export class DuckDBConnector extends BaseConnector {
364
490
  throw new QueryError('Failed to get table metadata', 'metadata_query', tableName, error instanceof Error ? error : undefined);
365
491
  }
366
492
  }
493
+ /**
494
+ * Legacy query method for backward compatibility
495
+ * @deprecated Direct SQL queries are not allowed for security reasons
496
+ */
497
+ // eslint-disable-next-line @typescript-eslint/require-await -- deprecated stub that always throws
367
498
  async query(_sql) {
368
499
  throw new Error('Direct SQL queries are not allowed for security reasons. Use specific methods like getRowCount(), getMaxTimestamp(), etc.');
369
500
  }
501
+ /**
502
+ * Get database file path (DuckDB-specific utility)
503
+ */
370
504
  getDatabasePath() {
371
505
  return this.databasePath;
372
506
  }
507
+ /**
508
+ * Check if database is in-memory
509
+ */
373
510
  isInMemory() {
374
511
  return this.databasePath === ':memory:';
375
512
  }
@@ -1 +1 @@
1
- {"version":3,"file":"duckdb.js","sourceRoot":"","sources":["../../src/connectors/duckdb.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"duckdb.js","sourceRoot":"","sources":["../../src/connectors/duckdb.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,35 @@
1
+ /**
2
+ * Database connectors for FreshGuard Core
3
+ *
4
+ * Each connector extends {@link BaseConnector} and implements the read-only
5
+ * {@link Connector} interface with built-in SQL-injection prevention, query
6
+ * timeouts, and error sanitization.
7
+ *
8
+ * Pick the connector that matches your data warehouse, instantiate it with a
9
+ * {@link ConnectorConfig}, and pass it to any monitoring function
10
+ * (`checkFreshness`, `checkVolumeAnomaly`, `checkSchemaChanges`).
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * import { PostgresConnector, checkFreshness } from '@freshguard/freshguard-core';
15
+ *
16
+ * const pg = new PostgresConnector({
17
+ * host: 'localhost', port: 5432,
18
+ * database: 'analytics', username: 'reader', password: 'secret', ssl: true,
19
+ * });
20
+ *
21
+ * const result = await checkFreshness(pg, rule);
22
+ * ```
23
+ *
24
+ * @module @freshguard/freshguard-core/connectors
25
+ */
1
26
  export { PostgresConnector } from './postgres.js';
2
27
  export { DuckDBConnector } from './duckdb.js';
3
28
  export { BigQueryConnector } from './bigquery.js';
4
29
  export { SnowflakeConnector } from './snowflake.js';
5
30
  export { MySQLConnector } from './mysql.js';
6
31
  export { RedshiftConnector } from './redshift.js';
32
+ export { MSSQLConnector } from './mssql.js';
33
+ export { AzureSQLConnector } from './azure-sql.js';
34
+ export { SynapseConnector } from './synapse.js';
7
35
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/connectors/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/connectors/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
@@ -1,7 +1,35 @@
1
+ /**
2
+ * Database connectors for FreshGuard Core
3
+ *
4
+ * Each connector extends {@link BaseConnector} and implements the read-only
5
+ * {@link Connector} interface with built-in SQL-injection prevention, query
6
+ * timeouts, and error sanitization.
7
+ *
8
+ * Pick the connector that matches your data warehouse, instantiate it with a
9
+ * {@link ConnectorConfig}, and pass it to any monitoring function
10
+ * (`checkFreshness`, `checkVolumeAnomaly`, `checkSchemaChanges`).
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * import { PostgresConnector, checkFreshness } from '@freshguard/freshguard-core';
15
+ *
16
+ * const pg = new PostgresConnector({
17
+ * host: 'localhost', port: 5432,
18
+ * database: 'analytics', username: 'reader', password: 'secret', ssl: true,
19
+ * });
20
+ *
21
+ * const result = await checkFreshness(pg, rule);
22
+ * ```
23
+ *
24
+ * @module @freshguard/freshguard-core/connectors
25
+ */
1
26
  export { PostgresConnector } from './postgres.js';
2
27
  export { DuckDBConnector } from './duckdb.js';
3
28
  export { BigQueryConnector } from './bigquery.js';
4
29
  export { SnowflakeConnector } from './snowflake.js';
5
30
  export { MySQLConnector } from './mysql.js';
6
31
  export { RedshiftConnector } from './redshift.js';
32
+ export { MSSQLConnector } from './mssql.js';
33
+ export { AzureSQLConnector } from './azure-sql.js';
34
+ export { SynapseConnector } from './synapse.js';
7
35
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/connectors/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/connectors/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}