@selentar/analitoly 0.1.1

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 (186) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +93 -0
  3. package/api/dist/dashboards/dash_1775220041958_v1r8io.json +829 -0
  4. package/api/dist/dashboards/dash_1775222037264_1rrsrd.json +309 -0
  5. package/api/dist/src/agent/agent.controller.d.ts +26 -0
  6. package/api/dist/src/agent/agent.controller.js +124 -0
  7. package/api/dist/src/agent/agent.controller.js.map +1 -0
  8. package/api/dist/src/agent/agent.module.d.ts +2 -0
  9. package/api/dist/src/agent/agent.module.js +23 -0
  10. package/api/dist/src/agent/agent.module.js.map +1 -0
  11. package/api/dist/src/agent/agent.service.d.ts +39 -0
  12. package/api/dist/src/agent/agent.service.js +389 -0
  13. package/api/dist/src/agent/agent.service.js.map +1 -0
  14. package/api/dist/src/agent/mcp-config.d.ts +9 -0
  15. package/api/dist/src/agent/mcp-config.js +51 -0
  16. package/api/dist/src/agent/mcp-config.js.map +1 -0
  17. package/api/dist/src/app.module.d.ts +2 -0
  18. package/api/dist/src/app.module.js +52 -0
  19. package/api/dist/src/app.module.js.map +1 -0
  20. package/api/dist/src/chart/chart.controller.d.ts +8 -0
  21. package/api/dist/src/chart/chart.controller.js +38 -0
  22. package/api/dist/src/chart/chart.controller.js.map +1 -0
  23. package/api/dist/src/chart/chart.module.d.ts +2 -0
  24. package/api/dist/src/chart/chart.module.js +24 -0
  25. package/api/dist/src/chart/chart.module.js.map +1 -0
  26. package/api/dist/src/chart/chart.service.d.ts +32 -0
  27. package/api/dist/src/chart/chart.service.js +106 -0
  28. package/api/dist/src/chart/chart.service.js.map +1 -0
  29. package/api/dist/src/chat/chat.controller.d.ts +14 -0
  30. package/api/dist/src/chat/chat.controller.js +73 -0
  31. package/api/dist/src/chat/chat.controller.js.map +1 -0
  32. package/api/dist/src/chat/chat.module.d.ts +2 -0
  33. package/api/dist/src/chat/chat.module.js +22 -0
  34. package/api/dist/src/chat/chat.module.js.map +1 -0
  35. package/api/dist/src/chat/chat.service.d.ts +25 -0
  36. package/api/dist/src/chat/chat.service.js +168 -0
  37. package/api/dist/src/chat/chat.service.js.map +1 -0
  38. package/api/dist/src/connection/connection.controller.d.ts +46 -0
  39. package/api/dist/src/connection/connection.controller.js +189 -0
  40. package/api/dist/src/connection/connection.controller.js.map +1 -0
  41. package/api/dist/src/connection/connection.model.d.ts +116 -0
  42. package/api/dist/src/connection/connection.model.js +23 -0
  43. package/api/dist/src/connection/connection.model.js.map +1 -0
  44. package/api/dist/src/connection/connection.module.d.ts +2 -0
  45. package/api/dist/src/connection/connection.module.js +31 -0
  46. package/api/dist/src/connection/connection.module.js.map +1 -0
  47. package/api/dist/src/connection/connection.repository.d.ts +16 -0
  48. package/api/dist/src/connection/connection.repository.js +195 -0
  49. package/api/dist/src/connection/connection.repository.js.map +1 -0
  50. package/api/dist/src/connection/connection.service.d.ts +50 -0
  51. package/api/dist/src/connection/connection.service.js +343 -0
  52. package/api/dist/src/connection/connection.service.js.map +1 -0
  53. package/api/dist/src/context/context.controller.d.ts +13 -0
  54. package/api/dist/src/context/context.controller.js +86 -0
  55. package/api/dist/src/context/context.controller.js.map +1 -0
  56. package/api/dist/src/context/context.module.d.ts +2 -0
  57. package/api/dist/src/context/context.module.js +39 -0
  58. package/api/dist/src/context/context.module.js.map +1 -0
  59. package/api/dist/src/context/context.service.d.ts +32 -0
  60. package/api/dist/src/context/context.service.js +177 -0
  61. package/api/dist/src/context/context.service.js.map +1 -0
  62. package/api/dist/src/dashboard/dashboard.controller.d.ts +21 -0
  63. package/api/dist/src/dashboard/dashboard.controller.js +109 -0
  64. package/api/dist/src/dashboard/dashboard.controller.js.map +1 -0
  65. package/api/dist/src/dashboard/dashboard.model.d.ts +15 -0
  66. package/api/dist/src/dashboard/dashboard.model.js +3 -0
  67. package/api/dist/src/dashboard/dashboard.model.js.map +1 -0
  68. package/api/dist/src/dashboard/dashboard.module.d.ts +2 -0
  69. package/api/dist/src/dashboard/dashboard.module.js +24 -0
  70. package/api/dist/src/dashboard/dashboard.module.js.map +1 -0
  71. package/api/dist/src/dashboard/dashboard.repository.d.ts +9 -0
  72. package/api/dist/src/dashboard/dashboard.repository.js +72 -0
  73. package/api/dist/src/dashboard/dashboard.repository.js.map +1 -0
  74. package/api/dist/src/dashboard/dashboard.service.d.ts +14 -0
  75. package/api/dist/src/dashboard/dashboard.service.js +87 -0
  76. package/api/dist/src/dashboard/dashboard.service.js.map +1 -0
  77. package/api/dist/src/datasource/connectors/connector.interface.d.ts +6 -0
  78. package/api/dist/src/datasource/connectors/connector.interface.js +3 -0
  79. package/api/dist/src/datasource/connectors/connector.interface.js.map +1 -0
  80. package/api/dist/src/datasource/connectors/mongo.connector.d.ts +30 -0
  81. package/api/dist/src/datasource/connectors/mongo.connector.js +167 -0
  82. package/api/dist/src/datasource/connectors/mongo.connector.js.map +1 -0
  83. package/api/dist/src/datasource/connectors/mongo.connector.test.d.ts +1 -0
  84. package/api/dist/src/datasource/connectors/mongo.connector.test.js +179 -0
  85. package/api/dist/src/datasource/connectors/mongo.connector.test.js.map +1 -0
  86. package/api/dist/src/datasource/connectors/postgres.connector.d.ts +50 -0
  87. package/api/dist/src/datasource/connectors/postgres.connector.js +213 -0
  88. package/api/dist/src/datasource/connectors/postgres.connector.js.map +1 -0
  89. package/api/dist/src/datasource/connectors/postgres.connector.test.d.ts +1 -0
  90. package/api/dist/src/datasource/connectors/postgres.connector.test.js +197 -0
  91. package/api/dist/src/datasource/connectors/postgres.connector.test.js.map +1 -0
  92. package/api/dist/src/datasource/datasource.controller.d.ts +16 -0
  93. package/api/dist/src/datasource/datasource.controller.js +79 -0
  94. package/api/dist/src/datasource/datasource.controller.js.map +1 -0
  95. package/api/dist/src/datasource/datasource.model.d.ts +26 -0
  96. package/api/dist/src/datasource/datasource.model.js +3 -0
  97. package/api/dist/src/datasource/datasource.model.js.map +1 -0
  98. package/api/dist/src/datasource/datasource.module.d.ts +2 -0
  99. package/api/dist/src/datasource/datasource.module.js +31 -0
  100. package/api/dist/src/datasource/datasource.module.js.map +1 -0
  101. package/api/dist/src/datasource/datasource.repository.d.ts +11 -0
  102. package/api/dist/src/datasource/datasource.repository.js +61 -0
  103. package/api/dist/src/datasource/datasource.repository.js.map +1 -0
  104. package/api/dist/src/datasource/datasource.service.d.ts +28 -0
  105. package/api/dist/src/datasource/datasource.service.js +95 -0
  106. package/api/dist/src/datasource/datasource.service.js.map +1 -0
  107. package/api/dist/src/example/example.controller.d.ts +10 -0
  108. package/api/dist/src/example/example.controller.js +43 -0
  109. package/api/dist/src/example/example.controller.js.map +1 -0
  110. package/api/dist/src/example/example.model.d.ts +6 -0
  111. package/api/dist/src/example/example.model.js +3 -0
  112. package/api/dist/src/example/example.model.js.map +1 -0
  113. package/api/dist/src/example/example.module.d.ts +2 -0
  114. package/api/dist/src/example/example.module.js +23 -0
  115. package/api/dist/src/example/example.module.js.map +1 -0
  116. package/api/dist/src/example/example.repository.d.ts +6 -0
  117. package/api/dist/src/example/example.repository.js +30 -0
  118. package/api/dist/src/example/example.repository.js.map +1 -0
  119. package/api/dist/src/example/example.service.d.ts +10 -0
  120. package/api/dist/src/example/example.service.js +31 -0
  121. package/api/dist/src/example/example.service.js.map +1 -0
  122. package/api/dist/src/integration/integration.controller.d.ts +15 -0
  123. package/api/dist/src/integration/integration.controller.js +69 -0
  124. package/api/dist/src/integration/integration.controller.js.map +1 -0
  125. package/api/dist/src/integration/integration.model.d.ts +17 -0
  126. package/api/dist/src/integration/integration.model.js +3 -0
  127. package/api/dist/src/integration/integration.model.js.map +1 -0
  128. package/api/dist/src/integration/integration.module.d.ts +2 -0
  129. package/api/dist/src/integration/integration.module.js +24 -0
  130. package/api/dist/src/integration/integration.module.js.map +1 -0
  131. package/api/dist/src/integration/integration.repository.d.ts +6 -0
  132. package/api/dist/src/integration/integration.repository.js +45 -0
  133. package/api/dist/src/integration/integration.repository.js.map +1 -0
  134. package/api/dist/src/integration/integration.service.d.ts +12 -0
  135. package/api/dist/src/integration/integration.service.js +78 -0
  136. package/api/dist/src/integration/integration.service.js.map +1 -0
  137. package/api/dist/src/main.d.ts +1 -0
  138. package/api/dist/src/main.js +19 -0
  139. package/api/dist/src/main.js.map +1 -0
  140. package/api/dist/src/mcp/grafana.mcp.d.ts +1 -0
  141. package/api/dist/src/mcp/grafana.mcp.js +95 -0
  142. package/api/dist/src/mcp/grafana.mcp.js.map +1 -0
  143. package/api/dist/src/mcp/graylog.mcp.d.ts +1 -0
  144. package/api/dist/src/mcp/graylog.mcp.js +241 -0
  145. package/api/dist/src/mcp/graylog.mcp.js.map +1 -0
  146. package/api/dist/src/mcp/mcp-server.d.ts +1 -0
  147. package/api/dist/src/mcp/mcp-server.js +336 -0
  148. package/api/dist/src/mcp/mcp-server.js.map +1 -0
  149. package/api/dist/src/paths.d.ts +8 -0
  150. package/api/dist/src/paths.js +50 -0
  151. package/api/dist/src/paths.js.map +1 -0
  152. package/api/dist/src/paths.test.d.ts +1 -0
  153. package/api/dist/src/paths.test.js +60 -0
  154. package/api/dist/src/paths.test.js.map +1 -0
  155. package/api/dist/src/project/project.controller.d.ts +44 -0
  156. package/api/dist/src/project/project.controller.js +79 -0
  157. package/api/dist/src/project/project.controller.js.map +1 -0
  158. package/api/dist/src/project/project.model.d.ts +19 -0
  159. package/api/dist/src/project/project.model.js +3 -0
  160. package/api/dist/src/project/project.model.js.map +1 -0
  161. package/api/dist/src/project/project.module.d.ts +2 -0
  162. package/api/dist/src/project/project.module.js +24 -0
  163. package/api/dist/src/project/project.module.js.map +1 -0
  164. package/api/dist/src/project/project.repository.d.ts +6 -0
  165. package/api/dist/src/project/project.repository.js +52 -0
  166. package/api/dist/src/project/project.repository.js.map +1 -0
  167. package/api/dist/src/project/project.service.d.ts +17 -0
  168. package/api/dist/src/project/project.service.js +163 -0
  169. package/api/dist/src/project/project.service.js.map +1 -0
  170. package/api/dist/tsconfig.tsbuildinfo +1 -0
  171. package/api/dist/vitest.config.d.ts +2 -0
  172. package/api/dist/vitest.config.js +10 -0
  173. package/api/dist/vitest.config.js.map +1 -0
  174. package/api/public/dist/Analitoly.png +0 -0
  175. package/api/public/dist/AnalitolyShort.png +0 -0
  176. package/api/public/dist/Gitlab.png +0 -0
  177. package/api/public/dist/Grafana.png +0 -0
  178. package/api/public/dist/Graylog.png +0 -0
  179. package/api/public/dist/Mongodb.png +0 -0
  180. package/api/public/dist/PostgreSQL.png +0 -0
  181. package/api/public/dist/assets/index-BPB3ckw4.js +222 -0
  182. package/api/public/dist/assets/index-CSAGa0SG.js +227 -0
  183. package/api/public/dist/index.html +12 -0
  184. package/bin/analitoly-mcp.js +18 -0
  185. package/bin/analitoly.js +38 -0
  186. package/package.json +54 -0
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.MongoConnector = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const mongodb_1 = require("mongodb");
12
+ const bson_1 = require("bson");
13
+ const DANGEROUS_OPERATORS = ['$where', '$accumulator', '$function'];
14
+ function sanitizeFilter(obj) {
15
+ if (obj === null || typeof obj !== 'object')
16
+ return;
17
+ for (const key of Object.keys(obj)) {
18
+ if (DANGEROUS_OPERATORS.includes(key)) {
19
+ throw new Error(`Operator "${key}" is not allowed`);
20
+ }
21
+ sanitizeFilter(obj[key]);
22
+ }
23
+ }
24
+ let MongoConnector = class MongoConnector {
25
+ async testConnection(config) {
26
+ const client = this.createClient(config);
27
+ try {
28
+ await client.connect();
29
+ await client.db(config.database).command({ ping: 1 });
30
+ return true;
31
+ }
32
+ catch (err) {
33
+ throw new Error(err instanceof Error ? err.message : String(err));
34
+ }
35
+ finally {
36
+ await client.close();
37
+ }
38
+ }
39
+ async getSchema(config) {
40
+ const client = this.createClient(config);
41
+ try {
42
+ await client.connect();
43
+ const db = client.db(config.database);
44
+ const collections = await db.listCollections().toArray();
45
+ const tables = await Promise.all(collections.map(async (col) => {
46
+ const sample = await db
47
+ .collection(col.name)
48
+ .aggregate([{ $sample: { size: 100 } }])
49
+ .toArray();
50
+ const fieldTypes = new Map();
51
+ for (const doc of sample) {
52
+ for (const [key, value] of Object.entries(doc)) {
53
+ if (!fieldTypes.has(key))
54
+ fieldTypes.set(key, new Set());
55
+ fieldTypes.get(key).add(value === null ? 'null' : typeof value);
56
+ }
57
+ }
58
+ return {
59
+ name: col.name,
60
+ fields: Array.from(fieldTypes.entries()).map(([name, types]) => ({
61
+ name,
62
+ type: Array.from(types).join(' | '),
63
+ nullable: types.has('null') || types.has('undefined'),
64
+ })),
65
+ };
66
+ }));
67
+ return { type: 'mongodb', tables };
68
+ }
69
+ finally {
70
+ await client.close();
71
+ }
72
+ }
73
+ async executeQuery(config, query) {
74
+ let params;
75
+ try {
76
+ params = bson_1.EJSON.deserialize(JSON.parse(query));
77
+ }
78
+ catch {
79
+ throw new Error('MongoDB query must be JSON: { "collection": "name", "filter"?: {}, "limit"?: 100 } or { "collection": "name", "pipeline": [...] }');
80
+ }
81
+ const client = this.createClient(config);
82
+ try {
83
+ await client.connect();
84
+ const db = client.db(config.database);
85
+ if (params.pipeline) {
86
+ for (const stage of params.pipeline) {
87
+ sanitizeFilter(stage);
88
+ }
89
+ return await db.collection(params.collection).aggregate(params.pipeline).toArray();
90
+ }
91
+ const filter = params.filter ?? {};
92
+ sanitizeFilter(filter);
93
+ return await db
94
+ .collection(params.collection)
95
+ .find(filter)
96
+ .limit(params.limit ?? 100)
97
+ .toArray();
98
+ }
99
+ finally {
100
+ await client.close();
101
+ }
102
+ }
103
+ async explainQuery(config, collection, filter = {}, verbosity = 'queryPlanner') {
104
+ sanitizeFilter(filter);
105
+ const client = this.createClient(config);
106
+ try {
107
+ await client.connect();
108
+ const db = client.db(config.database);
109
+ const result = await db.collection(collection).find(filter).explain(verbosity);
110
+ return result;
111
+ }
112
+ finally {
113
+ await client.close();
114
+ }
115
+ }
116
+ async countDocuments(config, collection, filter = {}) {
117
+ sanitizeFilter(filter);
118
+ const client = this.createClient(config);
119
+ try {
120
+ await client.connect();
121
+ const db = client.db(config.database);
122
+ const count = await db.collection(collection).countDocuments(filter);
123
+ return { collection, count };
124
+ }
125
+ finally {
126
+ await client.close();
127
+ }
128
+ }
129
+ async getStats(config, collection) {
130
+ const client = this.createClient(config);
131
+ try {
132
+ await client.connect();
133
+ const db = client.db(config.database);
134
+ if (collection) {
135
+ const stats = await db.command({ collStats: collection });
136
+ return { level: 'collection', stats };
137
+ }
138
+ const stats = await db.stats();
139
+ return { level: 'database', stats };
140
+ }
141
+ finally {
142
+ await client.close();
143
+ }
144
+ }
145
+ async listIndexes(config, collection) {
146
+ const client = this.createClient(config);
147
+ try {
148
+ await client.connect();
149
+ const db = client.db(config.database);
150
+ return await db.collection(collection).indexes();
151
+ }
152
+ finally {
153
+ await client.close();
154
+ }
155
+ }
156
+ createClient(config) {
157
+ const auth = config.username ? `${config.username}:${config.password}@` : '';
158
+ const db = config.database ? `/${config.database}` : '';
159
+ const uri = `mongodb://${auth}${config.host}:${config.port}${db}`;
160
+ return new mongodb_1.MongoClient(uri, { serverSelectionTimeoutMS: 60000 });
161
+ }
162
+ };
163
+ exports.MongoConnector = MongoConnector;
164
+ exports.MongoConnector = MongoConnector = __decorate([
165
+ (0, common_1.Injectable)()
166
+ ], MongoConnector);
167
+ //# sourceMappingURL=mongo.connector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongo.connector.js","sourceRoot":"","sources":["../../../../src/datasource/connectors/mongo.connector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const mongodb_1 = require("mongodb");
5
+ const mongo_connector_1 = require("./mongo.connector");
6
+ vitest_1.vi.mock('mongodb', () => {
7
+ const MockMongoClient = vitest_1.vi.fn();
8
+ return { MongoClient: MockMongoClient };
9
+ });
10
+ (0, vitest_1.describe)('explainQuery', () => {
11
+ let connector;
12
+ const config = { type: 'mongodb', host: 'localhost', port: 27017, database: 'test' };
13
+ const fakePlan = {
14
+ queryPlanner: { winningPlan: { stage: 'COLLSCAN' } },
15
+ executionStats: { totalDocsExamined: 100, executionTimeMillis: 5 },
16
+ };
17
+ (0, vitest_1.beforeEach)(() => {
18
+ connector = new mongo_connector_1.MongoConnector();
19
+ vitest_1.vi.mocked(mongodb_1.MongoClient).mockImplementation(function () {
20
+ return {
21
+ connect: vitest_1.vi.fn().mockResolvedValue(undefined),
22
+ close: vitest_1.vi.fn().mockResolvedValue(undefined),
23
+ db: vitest_1.vi.fn(() => ({
24
+ collection: vitest_1.vi.fn(() => ({
25
+ find: vitest_1.vi.fn(() => ({
26
+ explain: vitest_1.vi.fn().mockResolvedValue(fakePlan),
27
+ })),
28
+ })),
29
+ })),
30
+ };
31
+ });
32
+ });
33
+ (0, vitest_1.it)('returns explain result with queryPlanner verbosity by default', async () => {
34
+ const result = await connector.explainQuery(config, 'users');
35
+ (0, vitest_1.expect)(result).toHaveProperty('queryPlanner');
36
+ });
37
+ (0, vitest_1.it)('passes verbosity to explain()', async () => {
38
+ const mockExplain = vitest_1.vi.fn().mockResolvedValue(fakePlan);
39
+ vitest_1.vi.mocked(mongodb_1.MongoClient).mockImplementation(function () {
40
+ return {
41
+ connect: vitest_1.vi.fn().mockResolvedValue(undefined),
42
+ close: vitest_1.vi.fn().mockResolvedValue(undefined),
43
+ db: vitest_1.vi.fn(() => ({
44
+ collection: vitest_1.vi.fn(() => ({
45
+ find: vitest_1.vi.fn(() => ({ explain: mockExplain })),
46
+ })),
47
+ })),
48
+ };
49
+ });
50
+ await connector.explainQuery(config, 'users', {}, 'executionStats');
51
+ (0, vitest_1.expect)(mockExplain).toHaveBeenCalledWith('executionStats');
52
+ });
53
+ (0, vitest_1.it)('sanitizes the filter', async () => {
54
+ await (0, vitest_1.expect)(connector.explainQuery(config, 'users', { $where: 'malicious' })).rejects.toThrow('Operator "$where" is not allowed');
55
+ });
56
+ });
57
+ (0, vitest_1.describe)('countDocuments', () => {
58
+ let connector;
59
+ const config = { type: 'mongodb', host: 'localhost', port: 27017, database: 'test' };
60
+ (0, vitest_1.beforeEach)(() => {
61
+ connector = new mongo_connector_1.MongoConnector();
62
+ vitest_1.vi.mocked(mongodb_1.MongoClient).mockImplementation(function () {
63
+ return {
64
+ connect: vitest_1.vi.fn().mockResolvedValue(undefined),
65
+ close: vitest_1.vi.fn().mockResolvedValue(undefined),
66
+ db: vitest_1.vi.fn(() => ({
67
+ collection: vitest_1.vi.fn(() => ({
68
+ countDocuments: vitest_1.vi.fn().mockResolvedValue(42),
69
+ })),
70
+ })),
71
+ };
72
+ });
73
+ });
74
+ (0, vitest_1.it)('returns collection name and count', async () => {
75
+ const result = await connector.countDocuments(config, 'users');
76
+ (0, vitest_1.expect)(result).toEqual({ collection: 'users', count: 42 });
77
+ });
78
+ (0, vitest_1.it)('passes filter to countDocuments', async () => {
79
+ const mockCount = vitest_1.vi.fn().mockResolvedValue(10);
80
+ vitest_1.vi.mocked(mongodb_1.MongoClient).mockImplementation(function () {
81
+ return {
82
+ connect: vitest_1.vi.fn().mockResolvedValue(undefined),
83
+ close: vitest_1.vi.fn().mockResolvedValue(undefined),
84
+ db: vitest_1.vi.fn(() => ({
85
+ collection: vitest_1.vi.fn(() => ({ countDocuments: mockCount })),
86
+ })),
87
+ };
88
+ });
89
+ await connector.countDocuments(config, 'users', { active: true });
90
+ (0, vitest_1.expect)(mockCount).toHaveBeenCalledWith({ active: true });
91
+ });
92
+ (0, vitest_1.it)('sanitizes the filter', async () => {
93
+ await (0, vitest_1.expect)(connector.countDocuments(config, 'users', { $where: 'malicious' })).rejects.toThrow('Operator "$where" is not allowed');
94
+ });
95
+ });
96
+ (0, vitest_1.describe)('getStats', () => {
97
+ let connector;
98
+ const config = { type: 'mongodb', host: 'localhost', port: 27017, database: 'test' };
99
+ (0, vitest_1.it)('returns database-level stats when no collection specified', async () => {
100
+ connector = new mongo_connector_1.MongoConnector();
101
+ const fakeDbStats = { db: 'test', collections: 5, dataSize: 1024 };
102
+ vitest_1.vi.mocked(mongodb_1.MongoClient).mockImplementation(function () {
103
+ return {
104
+ connect: vitest_1.vi.fn().mockResolvedValue(undefined),
105
+ close: vitest_1.vi.fn().mockResolvedValue(undefined),
106
+ db: vitest_1.vi.fn(() => ({ stats: vitest_1.vi.fn().mockResolvedValue(fakeDbStats) })),
107
+ };
108
+ });
109
+ const result = await connector.getStats(config);
110
+ (0, vitest_1.expect)(result).toEqual({ level: 'database', stats: fakeDbStats });
111
+ });
112
+ (0, vitest_1.it)('returns collection-level stats when collection specified', async () => {
113
+ connector = new mongo_connector_1.MongoConnector();
114
+ const fakeCollStats = { ns: 'test.users', count: 100, avgObjSize: 256 };
115
+ vitest_1.vi.mocked(mongodb_1.MongoClient).mockImplementation(function () {
116
+ return {
117
+ connect: vitest_1.vi.fn().mockResolvedValue(undefined),
118
+ close: vitest_1.vi.fn().mockResolvedValue(undefined),
119
+ db: vitest_1.vi.fn(() => ({ command: vitest_1.vi.fn().mockResolvedValue(fakeCollStats) })),
120
+ };
121
+ });
122
+ const result = await connector.getStats(config, 'users');
123
+ (0, vitest_1.expect)(result).toEqual({ level: 'collection', stats: fakeCollStats });
124
+ });
125
+ (0, vitest_1.it)('passes collStats command with collection name', async () => {
126
+ connector = new mongo_connector_1.MongoConnector();
127
+ const mockCommand = vitest_1.vi.fn().mockResolvedValue({});
128
+ vitest_1.vi.mocked(mongodb_1.MongoClient).mockImplementation(function () {
129
+ return {
130
+ connect: vitest_1.vi.fn().mockResolvedValue(undefined),
131
+ close: vitest_1.vi.fn().mockResolvedValue(undefined),
132
+ db: vitest_1.vi.fn(() => ({ command: mockCommand })),
133
+ };
134
+ });
135
+ await connector.getStats(config, 'orders');
136
+ (0, vitest_1.expect)(mockCommand).toHaveBeenCalledWith({ collStats: 'orders' });
137
+ });
138
+ });
139
+ (0, vitest_1.describe)('listIndexes', () => {
140
+ let connector;
141
+ const config = { type: 'mongodb', host: 'localhost', port: 27017, database: 'test' };
142
+ const fakeIndexes = [
143
+ { v: 2, key: { _id: 1 }, name: '_id_' },
144
+ { v: 2, key: { email: 1 }, name: 'email_1', unique: true },
145
+ ];
146
+ (0, vitest_1.beforeEach)(() => {
147
+ connector = new mongo_connector_1.MongoConnector();
148
+ vitest_1.vi.mocked(mongodb_1.MongoClient).mockImplementation(function () {
149
+ return {
150
+ connect: vitest_1.vi.fn().mockResolvedValue(undefined),
151
+ close: vitest_1.vi.fn().mockResolvedValue(undefined),
152
+ db: vitest_1.vi.fn(() => ({
153
+ collection: vitest_1.vi.fn(() => ({
154
+ indexes: vitest_1.vi.fn().mockResolvedValue(fakeIndexes),
155
+ })),
156
+ })),
157
+ };
158
+ });
159
+ });
160
+ (0, vitest_1.it)('returns indexes for a collection', async () => {
161
+ const result = await connector.listIndexes(config, 'users');
162
+ (0, vitest_1.expect)(result).toEqual(fakeIndexes);
163
+ });
164
+ (0, vitest_1.it)('calls indexes() on the correct collection', async () => {
165
+ const mockIndexes = vitest_1.vi.fn().mockResolvedValue([]);
166
+ vitest_1.vi.mocked(mongodb_1.MongoClient).mockImplementation(function () {
167
+ return {
168
+ connect: vitest_1.vi.fn().mockResolvedValue(undefined),
169
+ close: vitest_1.vi.fn().mockResolvedValue(undefined),
170
+ db: vitest_1.vi.fn(() => ({
171
+ collection: vitest_1.vi.fn(() => ({ indexes: mockIndexes })),
172
+ })),
173
+ };
174
+ });
175
+ await connector.listIndexes(config, 'orders');
176
+ (0, vitest_1.expect)(mockIndexes).toHaveBeenCalled();
177
+ });
178
+ });
179
+ //# sourceMappingURL=mongo.connector.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongo.connector.test.js","sourceRoot":"","sources":["../../../../src/datasource/connectors/mongo.connector.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { IDatabaseConnector } from './connector.interface';
2
+ import { DataSourceConfig, DatabaseSchema } from '../datasource.model';
3
+ export interface ExplainResult {
4
+ plan: object;
5
+ executionTime?: number;
6
+ }
7
+ export interface TopQuery {
8
+ query: string;
9
+ calls: number;
10
+ mean_exec_time: number;
11
+ total_exec_time: number;
12
+ rows: number;
13
+ }
14
+ export type TopQueriesResult = TopQuery[] | {
15
+ error: string;
16
+ };
17
+ export interface DbHealthResult {
18
+ duplicateIndexes: {
19
+ table: string;
20
+ index1: string;
21
+ index2: string;
22
+ }[];
23
+ unusedIndexes: {
24
+ table: string;
25
+ index: string;
26
+ size: string;
27
+ }[];
28
+ connections: {
29
+ active: number;
30
+ max: number;
31
+ usagePct: number;
32
+ };
33
+ vacuumNeeded: {
34
+ table: string;
35
+ deadTuples: number;
36
+ }[];
37
+ invalidConstraints: {
38
+ table: string;
39
+ constraint: string;
40
+ }[];
41
+ }
42
+ export declare class PostgresConnector implements IDatabaseConnector {
43
+ testConnection(config: DataSourceConfig): Promise<boolean>;
44
+ getSchema(config: DataSourceConfig): Promise<DatabaseSchema>;
45
+ executeQuery(config: DataSourceConfig, query: string): Promise<unknown[]>;
46
+ explainQuery(config: DataSourceConfig, sql: string, analyze?: boolean): Promise<ExplainResult>;
47
+ getTopQueries(config: DataSourceConfig, limit?: number, sortBy?: 'mean_exec_time' | 'total_exec_time' | 'calls'): Promise<TopQueriesResult>;
48
+ getDbHealth(config: DataSourceConfig): Promise<DbHealthResult>;
49
+ private createPool;
50
+ }
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.PostgresConnector = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const pg_1 = require("pg");
12
+ const pgsql_ast_parser_1 = require("pgsql-ast-parser");
13
+ function validateReadOnly(query) {
14
+ let stmts;
15
+ try {
16
+ stmts = (0, pgsql_ast_parser_1.parse)(query);
17
+ }
18
+ catch (e) {
19
+ throw new Error(`Invalid SQL: ${e.message}`);
20
+ }
21
+ const READ_ONLY_TYPES = new Set(['select', 'with', 'union', 'union all']);
22
+ if (stmts.length !== 1 || !READ_ONLY_TYPES.has(stmts[0].type)) {
23
+ throw new Error('Only SELECT queries are allowed');
24
+ }
25
+ }
26
+ let PostgresConnector = class PostgresConnector {
27
+ async testConnection(config) {
28
+ const pool = this.createPool(config);
29
+ try {
30
+ await pool.query('SELECT 1');
31
+ return true;
32
+ }
33
+ catch {
34
+ return false;
35
+ }
36
+ finally {
37
+ await pool.end();
38
+ }
39
+ }
40
+ async getSchema(config) {
41
+ const pool = this.createPool(config);
42
+ try {
43
+ let schemas;
44
+ if (config.schema) {
45
+ schemas = [config.schema];
46
+ }
47
+ else {
48
+ const schemaResult = await pool.query(`
49
+ SELECT DISTINCT table_schema
50
+ FROM information_schema.tables
51
+ WHERE table_type = 'BASE TABLE'
52
+ AND table_schema NOT IN ('pg_catalog', 'information_schema', 'pg_toast')
53
+ ORDER BY table_schema
54
+ `);
55
+ schemas = schemaResult.rows.map((r) => r.table_schema);
56
+ if (schemas.length === 0)
57
+ schemas = ['public'];
58
+ }
59
+ const tables = [];
60
+ for (const schema of schemas) {
61
+ const tablesResult = await pool.query(`SELECT table_name
62
+ FROM information_schema.tables
63
+ WHERE table_schema = $1 AND table_type = 'BASE TABLE'
64
+ ORDER BY table_name`, [schema]);
65
+ for (const row of tablesResult.rows) {
66
+ const columnsResult = await pool.query(`SELECT column_name, data_type, is_nullable
67
+ FROM information_schema.columns
68
+ WHERE table_schema = $1 AND table_name = $2
69
+ ORDER BY ordinal_position`, [schema, row.table_name]);
70
+ const prefix = schemas.length > 1 || schema !== 'public' ? `${schema}.` : '';
71
+ tables.push({
72
+ name: `${prefix}${row.table_name}`,
73
+ fields: columnsResult.rows.map((col) => ({
74
+ name: col.column_name,
75
+ type: col.data_type,
76
+ nullable: col.is_nullable === 'YES',
77
+ })),
78
+ });
79
+ }
80
+ }
81
+ return { type: 'postgresql', tables };
82
+ }
83
+ finally {
84
+ await pool.end();
85
+ }
86
+ }
87
+ async executeQuery(config, query) {
88
+ validateReadOnly(query);
89
+ const pool = this.createPool(config);
90
+ const client = await pool.connect();
91
+ try {
92
+ await client.query('BEGIN');
93
+ await client.query('SET TRANSACTION READ ONLY');
94
+ const result = await client.query(query);
95
+ await client.query('COMMIT');
96
+ return result.rows;
97
+ }
98
+ catch (err) {
99
+ await client.query('ROLLBACK').catch(() => { });
100
+ throw err;
101
+ }
102
+ finally {
103
+ client.release();
104
+ await pool.end();
105
+ }
106
+ }
107
+ async explainQuery(config, sql, analyze = false) {
108
+ validateReadOnly(sql);
109
+ const pool = this.createPool(config);
110
+ try {
111
+ const opts = analyze ? 'FORMAT JSON, ANALYZE, BUFFERS' : 'FORMAT JSON';
112
+ const result = await pool.query(`EXPLAIN (${opts}) ${sql}`);
113
+ const plan = result.rows[0]['QUERY PLAN'];
114
+ const executionTime = analyze ? plan[0]?.['Execution Time'] : undefined;
115
+ return executionTime !== undefined ? { plan, executionTime } : { plan };
116
+ }
117
+ finally {
118
+ await pool.end();
119
+ }
120
+ }
121
+ async getTopQueries(config, limit = 10, sortBy = 'mean_exec_time') {
122
+ const pool = this.createPool(config);
123
+ try {
124
+ const result = await pool.query(`
125
+ SELECT query, calls, mean_exec_time, total_exec_time, rows
126
+ FROM pg_stat_statements
127
+ ORDER BY ${sortBy} DESC
128
+ LIMIT ${limit}
129
+ `);
130
+ return result.rows;
131
+ }
132
+ catch (err) {
133
+ if (err?.code === '42P01' || err?.message?.includes('pg_stat_statements')) {
134
+ return { error: 'pg_stat_statements not enabled. Run: CREATE EXTENSION pg_stat_statements' };
135
+ }
136
+ throw err;
137
+ }
138
+ finally {
139
+ await pool.end();
140
+ }
141
+ }
142
+ async getDbHealth(config) {
143
+ const pool = this.createPool(config);
144
+ const q = (sql) => pool.query(sql).then((r) => r.rows);
145
+ const safeQ = async (sql, fallback) => {
146
+ try {
147
+ return (await q(sql));
148
+ }
149
+ catch {
150
+ return fallback;
151
+ }
152
+ };
153
+ try {
154
+ const [duplicateIndexes, unusedIndexes, connectionRows, vacuumNeeded, invalidConstraints] = await Promise.all([
155
+ safeQ(`SELECT i1.schemaname || '.' || i1.tablename AS table,
156
+ i1.indexname AS index1, i2.indexname AS index2
157
+ FROM pg_indexes i1
158
+ JOIN pg_indexes i2
159
+ ON i1.tablename = i2.tablename
160
+ AND i1.schemaname = i2.schemaname
161
+ AND i1.indexdef = i2.indexdef
162
+ AND i1.indexname < i2.indexname
163
+ WHERE i1.schemaname NOT IN ('pg_catalog', 'information_schema', 'pg_toast')`, []),
164
+ safeQ(`SELECT schemaname || '.' || relname AS table,
165
+ indexrelname AS index,
166
+ pg_size_pretty(pg_relation_size(indexrelid)) AS size
167
+ FROM pg_stat_user_indexes
168
+ WHERE idx_scan = 0 AND pg_relation_size(indexrelid) > 0
169
+ ORDER BY pg_relation_size(indexrelid) DESC`, []),
170
+ safeQ(`SELECT count(*) AS active,
171
+ (SELECT setting FROM pg_settings WHERE name = 'max_connections') AS max
172
+ FROM pg_stat_activity WHERE state IS NOT NULL`, []),
173
+ safeQ(`SELECT schemaname || '.' || relname AS table, n_dead_tup AS "deadTuples"
174
+ FROM pg_stat_user_tables
175
+ WHERE n_dead_tup > 1000
176
+ ORDER BY n_dead_tup DESC`, []),
177
+ safeQ(`SELECT t.relname AS table, c.conname AS constraint
178
+ FROM pg_constraint c
179
+ JOIN pg_class t ON c.conrelid = t.oid
180
+ WHERE NOT c.convalidated`, []),
181
+ ]);
182
+ const active = parseInt(connectionRows[0]?.active ?? '0', 10);
183
+ const max = parseInt(connectionRows[0]?.max ?? '100', 10);
184
+ return {
185
+ duplicateIndexes,
186
+ unusedIndexes,
187
+ connections: { active, max, usagePct: Math.round((active / max) * 100) },
188
+ vacuumNeeded,
189
+ invalidConstraints,
190
+ };
191
+ }
192
+ finally {
193
+ await pool.end();
194
+ }
195
+ }
196
+ createPool(config) {
197
+ const schema = config.schema;
198
+ return new pg_1.Pool({
199
+ host: config.host,
200
+ port: config.port,
201
+ database: config.database,
202
+ user: config.username,
203
+ password: config.password,
204
+ connectionTimeoutMillis: 60000,
205
+ ...(schema ? { options: `-c search_path=${schema},public` } : {}),
206
+ });
207
+ }
208
+ };
209
+ exports.PostgresConnector = PostgresConnector;
210
+ exports.PostgresConnector = PostgresConnector = __decorate([
211
+ (0, common_1.Injectable)()
212
+ ], PostgresConnector);
213
+ //# sourceMappingURL=postgres.connector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres.connector.js","sourceRoot":"","sources":["../../../../src/datasource/connectors/postgres.connector.ts"],"names":[],"mappings":"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"}