sql-preview 0.5.11 → 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,63 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DaemonMcpServer = void 0;
4
- const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
5
- class DaemonMcpServer {
6
- constructor(server, sessionManager, toolManager) {
7
- this.server = server;
8
- this.sessionManager = sessionManager;
9
- this.toolManager = toolManager;
10
- this.setupHandlers();
11
- }
12
- setupHandlers() {
13
- this.server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
14
- return {
15
- tools: this.toolManager.getTools(),
16
- };
17
- });
18
- this.server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
19
- return await this.toolManager.handleToolCall(request.params.name, request.params.arguments);
20
- });
21
- this.server.setRequestHandler(types_js_1.ListResourcesRequestSchema, async () => {
22
- const sessions = this.sessionManager.getAllSessions();
23
- // Flatten all tabs from all sessions
24
- const resources = sessions.flatMap(session => Array.from(session.tabs.values()).map(tab => ({
25
- uri: `sql-preview://sessions/${session.id}/tabs/${tab.id}`,
26
- name: `${session.displayName} - ${tab.title}`,
27
- mimeType: 'application/json',
28
- description: `Query: ${tab.query}`,
29
- })));
30
- return { resources };
31
- });
32
- this.server.setRequestHandler(types_js_1.ReadResourceRequestSchema, async (request) => {
33
- const uri = request.params.uri;
34
- // Format: sql-preview://sessions/{sessionId}/tabs/{tabId}
35
- // Simple regex parse
36
- const match = uri.match(/sql-preview:\/\/sessions\/([^/]+)\/tabs\/([^/]+)/);
37
- if (!match || !match[1] || !match[2]) {
38
- throw new Error('Invalid resource URI');
39
- }
40
- const sessionId = match[1];
41
- const tabId = match[2];
42
- const session = this.sessionManager.getSession(sessionId);
43
- if (!session) {
44
- throw new Error('Session not found');
45
- }
46
- const tab = session.tabs.get(tabId);
47
- if (!tab) {
48
- throw new Error('Tab not found');
49
- }
50
- return {
51
- contents: [
52
- {
53
- uri: uri,
54
- mimeType: 'application/json',
55
- text: JSON.stringify(tab, null, 2),
56
- },
57
- ],
58
- };
59
- });
60
- }
61
- }
62
- exports.DaemonMcpServer = DaemonMcpServer;
63
- //# sourceMappingURL=DaemonMcpServer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DaemonMcpServer.js","sourceRoot":"","sources":["../../src/server/DaemonMcpServer.ts"],"names":[],"mappings":"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"}
@@ -1,433 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DaemonMcpToolManager = void 0;
4
- const ConsoleLogger_1 = require("./ConsoleLogger");
5
- class DaemonMcpToolManager {
6
- constructor(sessionManager, queryExecutor) {
7
- this.sessionManager = sessionManager;
8
- this.queryExecutor = queryExecutor;
9
- }
10
- getTools() {
11
- return [
12
- {
13
- name: 'run_query',
14
- description: 'Execute a SQL query for a specific session. Returns a tab ID immediately; use get_tab_info to check status and retrieve results. If the session does not exist, it will be auto-registered.',
15
- inputSchema: {
16
- type: 'object',
17
- properties: {
18
- sql: { type: 'string', description: 'The SQL query to execute' },
19
- session: {
20
- type: 'string',
21
- description: 'The Session ID to run this query in. Use list_sessions to discover existing sessions, or provide a new ID to auto-create a session.',
22
- },
23
- displayName: {
24
- type: 'string',
25
- description: 'Display name for a new session (only used when auto-registering). Defaults to "MCP Client".',
26
- },
27
- newTab: {
28
- type: 'boolean',
29
- description: 'Whether to open in a new tab (default: true)',
30
- },
31
- connectionProfile: {
32
- type: 'object',
33
- description: 'Optional connection profile override (includes credentials)',
34
- },
35
- tabId: {
36
- type: 'string',
37
- description: 'Optional Tab ID to use for the result. If provided, the daemon will use this ID instead of generating a new one.',
38
- },
39
- },
40
- required: ['sql', 'session'],
41
- },
42
- },
43
- {
44
- name: 'get_tab_info',
45
- description: 'Get information about a result tab in a session. Defaults to a "preview" mode with metadata and a small sample. Use mode="page" to retrieve full pages of rows.',
46
- inputSchema: {
47
- type: 'object',
48
- properties: {
49
- session: {
50
- type: 'string',
51
- description: 'The Session ID. Use list_sessions to discover available sessions.',
52
- },
53
- tabId: {
54
- type: 'string',
55
- description: 'The Tab ID to retrieve (optional, defaults to the most recently active tab in the session)',
56
- },
57
- mode: {
58
- type: 'string',
59
- enum: ['preview', 'page'],
60
- description: 'Retrieval mode. "preview" (default) returns stats + 10 rows. "page" returns specific rows defined by offset/limit.',
61
- },
62
- offset: {
63
- type: 'number',
64
- description: 'Row offset for "page" mode (default: 0)',
65
- },
66
- limit: {
67
- type: 'number',
68
- description: 'Number of rows to return. Default: 100 for "page" mode, 10 for "preview" mode.',
69
- },
70
- },
71
- required: ['session'],
72
- },
73
- },
74
- {
75
- name: 'list_sessions',
76
- description: 'List all active sessions managed by the daemon. Use this first to discover existing session IDs before running queries or checking results.',
77
- inputSchema: {
78
- type: 'object',
79
- properties: {},
80
- },
81
- },
82
- {
83
- name: 'cancel_query',
84
- description: 'Cancel a running query. Use get_tab_info first to check if a query is still in "loading" state before cancelling.',
85
- inputSchema: {
86
- type: 'object',
87
- properties: {
88
- session: { type: 'string', description: 'The Session ID' },
89
- tabId: { type: 'string', description: 'The Tab ID to cancel' },
90
- },
91
- required: ['session', 'tabId'],
92
- },
93
- },
94
- /*
95
- {
96
- name: 'close_tab',
97
- description: 'Close a tab and remove it from the session.',
98
- inputSchema: {
99
- type: 'object',
100
- properties: {
101
- session: { type: 'string', description: 'The Session ID' },
102
- tabId: { type: 'string', description: 'The Tab ID to close' },
103
- },
104
- required: ['session', 'tabId'],
105
- },
106
- },
107
- */
108
- ];
109
- }
110
- async handleToolCall(name, args) {
111
- switch (name) {
112
- case 'run_query':
113
- return this.handleRunQuery(args);
114
- case 'get_tab_info':
115
- return this.handleGetTabInfo(args);
116
- case 'list_sessions':
117
- return this.handleListSessions();
118
- case 'cancel_query':
119
- return this.handleCancelQuery(args);
120
- case 'close_tab':
121
- return this.handleCloseTab(args);
122
- default:
123
- throw new Error('Unknown tool');
124
- }
125
- }
126
- async handleCloseTab(args) {
127
- const typedArgs = args;
128
- const sessionId = typedArgs?.session;
129
- const tabId = typedArgs?.tabId;
130
- if (!sessionId || !tabId) {
131
- throw new Error('Session ID and Tab ID required');
132
- }
133
- const session = this.sessionManager.getSession(sessionId);
134
- if (!session) {
135
- throw new Error('Session not found');
136
- }
137
- this.sessionManager.removeTab(sessionId, tabId);
138
- session.lastActivityAt = new Date();
139
- return {
140
- content: [{ type: 'text', text: `Tab ${tabId} closed` }],
141
- };
142
- }
143
- async handleCancelQuery(args) {
144
- const typedArgs = args;
145
- const sessionId = typedArgs?.session;
146
- const tabId = typedArgs?.tabId;
147
- if (!sessionId || !tabId) {
148
- throw new Error('Session ID and Tab ID required');
149
- }
150
- const session = this.sessionManager.getSession(sessionId);
151
- if (!session) {
152
- throw new Error('Session not found');
153
- }
154
- const tab = session.tabs.get(tabId);
155
- if (tab) {
156
- tab.status = 'error';
157
- tab.error = 'Query cancelled by user';
158
- // Abort execution
159
- const controller = session.abortControllers.get(tabId);
160
- if (controller) {
161
- ConsoleLogger_1.logger.info(`Aborting query for tab ${tabId}`);
162
- controller.abort();
163
- }
164
- }
165
- return {
166
- content: [{ type: 'text', text: `Query cancelled for tab ${tabId}` }],
167
- };
168
- }
169
- handleListSessions() {
170
- const sessions = this.sessionManager.getAllSessions();
171
- return {
172
- content: [
173
- {
174
- type: 'text',
175
- text: JSON.stringify(sessions.map(s => ({
176
- id: s.id,
177
- displayName: s.displayName,
178
- clientType: s.clientType,
179
- tabs: Array.from(s.tabs.values()).map(t => ({
180
- tabId: t.id,
181
- title: t.title,
182
- status: t.status,
183
- query: t.query,
184
- })),
185
- })), null, 2),
186
- },
187
- ],
188
- };
189
- }
190
- async handleRunQuery(args) {
191
- try {
192
- const typedArgs = args;
193
- const sql = typedArgs?.sql?.trim();
194
- const sessionId = typedArgs?.session;
195
- const displayName = typedArgs?.displayName || 'MCP Client';
196
- const connectionProfile = typedArgs?.connectionProfile;
197
- const providedTabId = typedArgs?.tabId;
198
- if (!sql) {
199
- throw new Error('SQL query is required');
200
- }
201
- if (!sessionId) {
202
- throw new Error('Session ID is required');
203
- }
204
- // Lazy session registration: auto-create if not found
205
- let session = this.sessionManager.getSession(sessionId);
206
- if (!session) {
207
- this.sessionManager.registerSession(sessionId, displayName, 'standalone');
208
- session = this.sessionManager.getSession(sessionId);
209
- if (!session) {
210
- throw new Error(`Failed to auto-register session: ${sessionId}`);
211
- }
212
- }
213
- // 3. Determine Tab
214
- const shouldCreateNewTab = typedArgs?.newTab !== false; // Default to true
215
- let tabId;
216
- let tabTitle;
217
- let tab;
218
- if (providedTabId) {
219
- // Use provided Tab ID
220
- tabId = providedTabId;
221
- tab = session.tabs.get(tabId);
222
- if (tab) {
223
- // Reset existing tab if it was already there (weird case but possible)
224
- tab.status = 'loading';
225
- tab.query = sql;
226
- tab.rows = [];
227
- tab.columns = [];
228
- tab.error = undefined;
229
- tabTitle = tab.title;
230
- }
231
- else {
232
- // Create new with this ID
233
- tabTitle = `Result ${session.tabs.size + 1}`;
234
- }
235
- }
236
- else if (!shouldCreateNewTab && session.activeTabId) {
237
- // Reuse existing active tab
238
- tabId = session.activeTabId;
239
- tab = session.tabs.get(tabId);
240
- if (tab) {
241
- // Reset tab state for new query
242
- tab.status = 'loading';
243
- tab.query = sql;
244
- tab.rows = [];
245
- tab.columns = [];
246
- tab.error = undefined;
247
- tabTitle = tab.title; // Keep existing title
248
- }
249
- else {
250
- // Fallback if active tab ID is stale
251
- tabId = `t${Math.random().toString(36).substring(2, 10)}`;
252
- tabTitle = `Result ${session.tabs.size + 1}`;
253
- }
254
- }
255
- else {
256
- // Create New with generated ID
257
- tabId = `t${Math.random().toString(36).substring(2, 10)}`;
258
- tabTitle = `Result ${session.tabs.size + 1}`;
259
- }
260
- if (!tab) {
261
- tab = {
262
- id: tabId,
263
- title: tabTitle,
264
- query: sql,
265
- columns: [],
266
- rows: [],
267
- status: 'loading',
268
- };
269
- this.sessionManager.addTab(sessionId, tab);
270
- }
271
- else {
272
- // Just update existing
273
- this.sessionManager.updateTab(sessionId, tabId, {
274
- status: 'loading',
275
- query: sql,
276
- rows: [],
277
- columns: [],
278
- error: undefined,
279
- });
280
- }
281
- session.activeTabId = tabId;
282
- session.lastActivityAt = new Date();
283
- // Start Execution in Background
284
- const controller = new AbortController();
285
- session.abortControllers.set(tabId, controller);
286
- this.executeAndStore(sessionId, tabId, sql, connectionProfile, controller.signal).finally(() => {
287
- session.abortControllers.delete(tabId);
288
- });
289
- return {
290
- content: [
291
- {
292
- type: 'text',
293
- text: `Query submitted to Session '${session.displayName}'. Tab ID: ${tabId}. Status: Loading.`,
294
- },
295
- ],
296
- };
297
- }
298
- catch (error) {
299
- const message = error instanceof Error ? error.message : String(error);
300
- return {
301
- isError: true,
302
- content: [{ type: 'text', text: `Error running query: ${message}` }],
303
- };
304
- }
305
- }
306
- async executeAndStore(sessionId, tabId, sql, connectionProfile, signal) {
307
- const session = this.sessionManager.getSession(sessionId);
308
- if (!session) {
309
- return;
310
- }
311
- const tab = session.tabs.get(tabId);
312
- if (!tab) {
313
- return;
314
- }
315
- try {
316
- const generator = this.queryExecutor.execute(sql, sessionId, undefined, signal, connectionProfile);
317
- let columns = [];
318
- // Ensure rows is initialized
319
- if (!tab.rows) {
320
- tab.rows = [];
321
- }
322
- for await (const page of generator) {
323
- if (page.columns) {
324
- columns = page.columns;
325
- tab.columns = columns;
326
- }
327
- if (page.data && page.data.length > 0) {
328
- this.sessionManager.updateTab(sessionId, tabId, {
329
- columns: page.columns ? page.columns : tab.columns,
330
- rows: page.data && page.data.length > 0 ? [...tab.rows, ...page.data] : tab.rows,
331
- status: 'loading',
332
- });
333
- }
334
- if (page.supportsPagination !== undefined) {
335
- tab.supportsPagination = page.supportsPagination;
336
- }
337
- // Update status to keep UI alive/informed?
338
- // Actually 'loading' is fine until done.
339
- }
340
- this.sessionManager.updateTab(sessionId, tabId, {
341
- status: 'success',
342
- totalRowsInFirstBatch: tab.rows.length,
343
- });
344
- tab.totalRowsInFirstBatch = tab.rows.length;
345
- }
346
- catch (err) {
347
- this.sessionManager.updateTab(sessionId, tabId, {
348
- status: 'error',
349
- error: signal?.aborted
350
- ? 'Query cancelled by user'
351
- : err instanceof Error
352
- ? err.message
353
- : String(err),
354
- });
355
- }
356
- }
357
- async handleGetTabInfo(args) {
358
- const typedArgs = args;
359
- const sessionId = typedArgs?.session;
360
- if (!sessionId) {
361
- throw new Error('Session ID required');
362
- }
363
- const session = this.sessionManager.getSession(sessionId);
364
- if (!session) {
365
- throw new Error('Session not found');
366
- }
367
- const tabId = typedArgs?.tabId || session.activeTabId;
368
- if (!tabId) {
369
- return { content: [{ type: 'text', text: 'No active tab in session.' }] };
370
- }
371
- const tab = session.tabs.get(tabId);
372
- if (!tab) {
373
- return { content: [{ type: 'text', text: 'Tab not found.' }] };
374
- }
375
- const mode = typedArgs?.mode || 'preview';
376
- const totalRows = tab.rows?.length ?? 0;
377
- const resourceUri = `sql-preview://sessions/${sessionId}/tabs/${tabId}`;
378
- if (mode === 'preview') {
379
- // Smart Summary Mode
380
- const previewLimit = typedArgs?.limit || 10;
381
- const previewRows = tab.rows ? tab.rows.slice(0, previewLimit) : [];
382
- return {
383
- content: [
384
- {
385
- type: 'text',
386
- text: JSON.stringify({
387
- status: tab.status,
388
- meta: {
389
- totalRows: totalRows,
390
- columns: tab.columns,
391
- },
392
- preview: previewRows,
393
- message: `Showing ${previewRows.length} of ${totalRows} rows. Use mode='page' for pagination or read_resource for full data.`,
394
- resourceUri: resourceUri,
395
- error: tab.error,
396
- }, null, 2),
397
- },
398
- ],
399
- };
400
- }
401
- else {
402
- // Page Mode (Legacy / Explicit Fetch)
403
- const offset = typedArgs?.offset || 0;
404
- const limit = typedArgs?.limit ?? 100;
405
- const rows = tab.rows ? tab.rows.slice(offset, offset + limit) : [];
406
- const hasMore = offset + rows.length < totalRows;
407
- return {
408
- content: [
409
- {
410
- type: 'text',
411
- text: JSON.stringify({
412
- id: tab.id,
413
- title: tab.title,
414
- status: tab.status,
415
- meta: {
416
- totalRows: totalRows,
417
- columns: tab.columns,
418
- },
419
- rows: rows,
420
- offset: offset,
421
- limit: limit,
422
- hasMore: hasMore,
423
- resourceUri: resourceUri,
424
- error: tab.error,
425
- }, null, 2),
426
- },
427
- ],
428
- };
429
- }
430
- }
431
- }
432
- exports.DaemonMcpToolManager = DaemonMcpToolManager;
433
- //# sourceMappingURL=DaemonMcpToolManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DaemonMcpToolManager.js","sourceRoot":"","sources":["../../src/server/DaemonMcpToolManager.ts"],"names":[],"mappings":";;;AAGA,mDAAyC;AAEzC,MAAa,oBAAoB;IAC/B,YACmB,cAA8B,EAC9B,aAAkC;QADlC,mBAAc,GAAd,cAAc,CAAgB;QAC9B,kBAAa,GAAb,aAAa,CAAqB;IAClD,CAAC;IAEG,QAAQ;QACb,OAAO;YACL;gBACE,IAAI,EAAE,WAAW;gBACjB,WAAW,EACT,6LAA6L;gBAC/L,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE;wBAChE,OAAO,EAAE;4BACP,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,qIAAqI;yBACxI;wBACD,WAAW,EAAE;4BACX,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,6FAA6F;yBAChG;wBACD,MAAM,EAAE;4BACN,IAAI,EAAE,SAAS;4BACf,WAAW,EAAE,8CAA8C;yBAC5D;wBACD,iBAAiB,EAAE;4BACjB,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,6DAA6D;yBAC3E;wBACD,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,kHAAkH;yBACrH;qBACF;oBACD,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC;iBAC7B;aACF;YACD;gBACE,IAAI,EAAE,cAAc;gBACpB,WAAW,EACT,iKAAiK;gBACnK,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,OAAO,EAAE;4BACP,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,mEAAmE;yBACjF;wBACD,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,4FAA4F;yBAC/F;wBACD,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ;4BACd,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC;4BACzB,WAAW,EACT,oHAAoH;yBACvH;wBACD,MAAM,EAAE;4BACN,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,yCAAyC;yBACvD;wBACD,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,gFAAgF;yBACnF;qBACF;oBACD,QAAQ,EAAE,CAAC,SAAS,CAAC;iBACtB;aACF;YACD;gBACE,IAAI,EAAE,eAAe;gBACrB,WAAW,EACT,6IAA6I;gBAC/I,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,EAAE;iBACf;aACF;YACD;gBACE,IAAI,EAAE,cAAc;gBACpB,WAAW,EACT,mHAAmH;gBACrH,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE;wBAC1D,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE;qBAC/D;oBACD,QAAQ,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC;iBAC/B;aACF;YACD;;;;;;;;;;;;;cAaE;SACH,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,IAAY,EAAE,IAAa;QACrD,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,WAAW;gBACd,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACnC,KAAK,cAAc;gBACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACrC,KAAK,eAAe;gBAClB,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACnC,KAAK,cAAc;gBACjB,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACtC,KAAK,WAAW;gBACd,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACnC;gBACE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,IAAa;QACxC,MAAM,SAAS,GAAG,IAAwD,CAAC;QAC3E,MAAM,SAAS,GAAG,SAAS,EAAE,OAAO,CAAC;QACrC,MAAM,KAAK,GAAG,SAAS,EAAE,KAAK,CAAC;QAE/B,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC1D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAChD,OAAO,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC;QAEpC,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,SAAS,EAAE,CAAC;SACzD,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,IAAa;QAC3C,MAAM,SAAS,GAAG,IAAwD,CAAC;QAC3E,MAAM,SAAS,GAAG,SAAS,EAAE,OAAO,CAAC;QACrC,MAAM,KAAK,GAAG,SAAS,EAAE,KAAK,CAAC;QAE/B,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC1D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,GAAG,EAAE,CAAC;YACR,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC;YACrB,GAAG,CAAC,KAAK,GAAG,yBAAyB,CAAC;YAEtC,kBAAkB;YAClB,MAAM,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACvD,IAAI,UAAU,EAAE,CAAC;gBACf,sBAAM,CAAC,IAAI,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAC;gBAC/C,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,2BAA2B,KAAK,EAAE,EAAE,CAAC;SACtE,CAAC;IACJ,CAAC;IAEO,kBAAkB;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC;QACtD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACjB,EAAE,EAAE,CAAC,CAAC,EAAE;wBACR,WAAW,EAAE,CAAC,CAAC,WAAW;wBAC1B,UAAU,EAAE,CAAC,CAAC,UAAU;wBACxB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;4BAC1C,KAAK,EAAE,CAAC,CAAC,EAAE;4BACX,KAAK,EAAE,CAAC,CAAC,KAAK;4BACd,MAAM,EAAE,CAAC,CAAC,MAAM;4BAChB,KAAK,EAAE,CAAC,CAAC,KAAK;yBACf,CAAC,CAAC;qBACJ,CAAC,CAAC,EACH,IAAI,EACJ,CAAC,CACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,IAAa;QACxC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IASL,CAAC;YACd,MAAM,GAAG,GAAG,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;YACnC,MAAM,SAAS,GAAG,SAAS,EAAE,OAAO,CAAC;YACrC,MAAM,WAAW,GAAG,SAAS,EAAE,WAAW,IAAI,YAAY,CAAC;YAC3D,MAAM,iBAAiB,GAAG,SAAS,EAAE,iBAAiB,CAAC;YACvD,MAAM,aAAa,GAAG,SAAS,EAAE,KAAK,CAAC;YAEvC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;YAC3C,CAAC;YACD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAC5C,CAAC;YAED,sDAAsD;YACtD,IAAI,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YACxD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;gBAC1E,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;gBACpD,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,IAAI,KAAK,CAAC,oCAAoC,SAAS,EAAE,CAAC,CAAC;gBACnE,CAAC;YACH,CAAC;YAED,mBAAmB;YACnB,MAAM,kBAAkB,GAAG,SAAS,EAAE,MAAM,KAAK,KAAK,CAAC,CAAC,kBAAkB;YAC1E,IAAI,KAAa,CAAC;YAClB,IAAI,QAAgB,CAAC;YACrB,IAAI,GAAwB,CAAC;YAE7B,IAAI,aAAa,EAAE,CAAC;gBAClB,sBAAsB;gBACtB,KAAK,GAAG,aAAa,CAAC;gBACtB,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAE9B,IAAI,GAAG,EAAE,CAAC;oBACR,uEAAuE;oBACvE,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC;oBACvB,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC;oBAChB,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;oBACd,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC;oBACjB,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC;oBACtB,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACN,0BAA0B;oBAC1B,QAAQ,GAAG,UAAU,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBAC/C,CAAC;YACH,CAAC;iBAAM,IAAI,CAAC,kBAAkB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;gBACtD,4BAA4B;gBAC5B,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC;gBAC5B,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC9B,IAAI,GAAG,EAAE,CAAC;oBACR,gCAAgC;oBAChC,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC;oBACvB,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC;oBAChB,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;oBACd,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC;oBACjB,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC;oBACtB,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,sBAAsB;gBAC9C,CAAC;qBAAM,CAAC;oBACN,qCAAqC;oBACrC,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;oBAC1D,QAAQ,GAAG,UAAU,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBAC/C,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,+BAA+B;gBAC/B,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;gBAC1D,QAAQ,GAAG,UAAU,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC/C,CAAC;YAED,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,GAAG,GAAG;oBACJ,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE,QAAQ;oBACf,KAAK,EAAE,GAAG;oBACV,OAAO,EAAE,EAAE;oBACX,IAAI,EAAE,EAAE;oBACR,MAAM,EAAE,SAAS;iBAClB,CAAC;gBACF,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACN,uBAAuB;gBACvB,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE;oBAC9C,MAAM,EAAE,SAAS;oBACjB,KAAK,EAAE,GAAG;oBACV,IAAI,EAAE,EAAE;oBACR,OAAO,EAAE,EAAE;oBACX,KAAK,EAAE,SAAS;iBACjB,CAAC,CAAC;YACL,CAAC;YAED,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC;YAC5B,OAAO,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC;YAEpC,gCAAgC;YAChC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YAEhD,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,iBAAiB,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CACvF,GAAG,EAAE;gBACH,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzC,CAAC,CACF,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,+BAA+B,OAAO,CAAC,WAAW,cAAc,KAAK,oBAAoB;qBAChG;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,OAAO,EAAE,EAAE,CAAC;aACrE,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe,CAC3B,SAAiB,EACjB,KAAa,EACb,GAAW,EACX,iBAA2B,EAC3B,MAAoB;QAEpB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC1D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAC1C,GAAG,EACH,SAAS,EACT,SAAS,EACT,MAAM,EACN,iBAAsC,CACvC,CAAC;YAEF,IAAI,OAAO,GAA0C,EAAE,CAAC;YAExD,6BAA6B;YAC7B,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBACd,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;YAChB,CAAC;YAED,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;gBACnC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;oBACvB,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;gBACxB,CAAC;gBACD,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE;wBAC9C,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO;wBAClD,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI;wBAChF,MAAM,EAAE,SAAS;qBAClB,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;oBAC1C,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBACnD,CAAC;gBACD,2CAA2C;gBAC3C,yCAAyC;YAC3C,CAAC;YAED,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE;gBAC9C,MAAM,EAAE,SAAS;gBACjB,qBAAqB,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM;aACvC,CAAC,CAAC;YACH,GAAG,CAAC,qBAAqB,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QAC9C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE;gBAC9C,MAAM,EAAE,OAAO;gBACf,KAAK,EAAE,MAAM,EAAE,OAAO;oBACpB,CAAC,CAAC,yBAAyB;oBAC3B,CAAC,CAAC,GAAG,YAAY,KAAK;wBACpB,CAAC,CAAC,GAAG,CAAC,OAAO;wBACb,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,IAAa;QAC1C,MAAM,SAAS,GAAG,IAQL,CAAC;QACd,MAAM,SAAS,GAAG,SAAS,EAAE,OAAO,CAAC;QACrC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC1D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,KAAK,GAAG,SAAS,EAAE,KAAK,IAAI,OAAO,CAAC,WAAW,CAAC;QACtD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,2BAA2B,EAAE,CAAC,EAAE,CAAC;QAC5E,CAAC;QAED,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;QACjE,CAAC;QAED,MAAM,IAAI,GAAG,SAAS,EAAE,IAAI,IAAI,SAAS,CAAC;QAC1C,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC;QACxC,MAAM,WAAW,GAAG,0BAA0B,SAAS,SAAS,KAAK,EAAE,CAAC;QAExE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,qBAAqB;YACrB,MAAM,YAAY,GAAG,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC;YAC5C,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAEpE,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,MAAM,EAAE,GAAG,CAAC,MAAM;4BAClB,IAAI,EAAE;gCACJ,SAAS,EAAE,SAAS;gCACpB,OAAO,EAAE,GAAG,CAAC,OAAO;6BACrB;4BACD,OAAO,EAAE,WAAW;4BACpB,OAAO,EAAE,WAAW,WAAW,CAAC,MAAM,OAAO,SAAS,uEAAuE;4BAC7H,WAAW,EAAE,WAAW;4BACxB,KAAK,EAAE,GAAG,CAAC,KAAK;yBACjB,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,sCAAsC;YACtC,MAAM,MAAM,GAAG,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC;YACtC,MAAM,KAAK,GAAG,SAAS,EAAE,KAAK,IAAI,GAAG,CAAC;YACtC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,MAAM,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YAEjD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,EAAE,EAAE,GAAG,CAAC,EAAE;4BACV,KAAK,EAAE,GAAG,CAAC,KAAK;4BAChB,MAAM,EAAE,GAAG,CAAC,MAAM;4BAClB,IAAI,EAAE;gCACJ,SAAS,EAAE,SAAS;gCACpB,OAAO,EAAE,GAAG,CAAC,OAAO;6BACrB;4BACD,IAAI,EAAE,IAAI;4BACV,MAAM,EAAE,MAAM;4BACd,KAAK,EAAE,KAAK;4BACZ,OAAO,EAAE,OAAO;4BAChB,WAAW,EAAE,WAAW;4BACxB,KAAK,EAAE,GAAG,CAAC,KAAK;yBACjB,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AA/fD,oDA+fC"}
@@ -1,96 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DaemonQueryExecutor = void 0;
4
- const ConsoleLogger_1 = require("./ConsoleLogger");
5
- class DaemonQueryExecutor {
6
- constructor(connectorRegistry, connectionManager) {
7
- this.connectorRegistry = connectorRegistry;
8
- this.connectionManager = connectionManager;
9
- this.logger = ConsoleLogger_1.ConsoleLogger.getInstance();
10
- }
11
- getConnector(type) {
12
- const connector = this.connectorRegistry.get(type);
13
- if (!connector) {
14
- throw new Error(`Connector '${type}' not registered`);
15
- }
16
- return connector;
17
- }
18
- /**
19
- * Orchestrates the query execution.
20
- */
21
- async *execute(query, sessionId, connectionId, abortSignal, connectionOverride) {
22
- this.logger.info(`Starting query execution for session ${sessionId}`, { query });
23
- let profile;
24
- if (connectionOverride) {
25
- profile = connectionOverride;
26
- }
27
- else if (connectionId) {
28
- profile = await this.connectionManager.getConnection(connectionId);
29
- }
30
- else {
31
- // Fallback to first available connection
32
- const connections = await this.connectionManager.getConnections();
33
- if (connections.length > 0 && connections[0]) {
34
- // Need to fetch full profile including password
35
- profile = await this.connectionManager.getConnection(connections[0].id);
36
- }
37
- }
38
- if (!profile) {
39
- throw new Error('No valid connection profile found.');
40
- }
41
- // Generic Config Construction
42
- const connectorConfig = {
43
- ...profile,
44
- maxRows: 1000, // TODO: Get from Daemon Config
45
- sslVerify: 'sslVerify' in profile && profile.sslVerify !== undefined ? profile.sslVerify : true,
46
- };
47
- // Validation
48
- const connector = this.getConnector(profile.type);
49
- const validationError = connector.validateConfig(connectorConfig);
50
- if (validationError) {
51
- this.logger.error(`Configuration validation failed`, { error: validationError });
52
- throw new Error(`Configuration Error: ${validationError}`);
53
- }
54
- let authHeader;
55
- if ('password' in profile && profile.password && 'user' in profile) {
56
- authHeader = 'Basic ' + Buffer.from(`${profile.user}:${profile.password}`).toString('base64');
57
- }
58
- try {
59
- const generator = connector.runQuery(query, connectorConfig, authHeader, abortSignal);
60
- for await (const page of generator) {
61
- yield {
62
- ...page,
63
- supportsPagination: connector.supportsPagination,
64
- };
65
- }
66
- this.logger.info(`Query execution completed for session ${sessionId}`);
67
- }
68
- catch (e) {
69
- this.logger.error(`Query execution failed`, e);
70
- throw e;
71
- }
72
- }
73
- /**
74
- * Tests connectivity
75
- */
76
- async testConnection(type, config, authHeader) {
77
- try {
78
- const connector = this.getConnector(type);
79
- // Validate before running
80
- const valError = connector.validateConfig(config);
81
- if (valError) {
82
- return { success: false, error: valError };
83
- }
84
- const iterator = connector.runQuery('SELECT 1', config, authHeader);
85
- // Attempt to fetch first page to validate connection & auth
86
- await iterator.next();
87
- return { success: true };
88
- }
89
- catch (e) {
90
- const message = e instanceof Error ? e.message : String(e);
91
- return { success: false, error: message };
92
- }
93
- }
94
- }
95
- exports.DaemonQueryExecutor = DaemonQueryExecutor;
96
- //# sourceMappingURL=DaemonQueryExecutor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DaemonQueryExecutor.js","sourceRoot":"","sources":["../../src/server/DaemonQueryExecutor.ts"],"names":[],"mappings":";;;AAIA,mDAAgD;AAEhD,MAAa,mBAAmB;IAG9B,YACmB,iBAAoC,EACpC,iBAAwC;QADxC,sBAAiB,GAAjB,iBAAiB,CAAmB;QACpC,sBAAiB,GAAjB,iBAAiB,CAAuB;QAJnD,WAAM,GAAG,6BAAa,CAAC,WAAW,EAAE,CAAC;IAK1C,CAAC;IAEI,YAAY,CAAC,IAAY;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,kBAAkB,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,CAAC,OAAO,CACZ,KAAa,EACb,SAAiB,EACjB,YAAqB,EACrB,WAAyB,EACzB,kBAAsC;QAEtC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wCAAwC,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAEjF,IAAI,OAAsC,CAAC;QAE3C,IAAI,kBAAkB,EAAE,CAAC;YACvB,OAAO,GAAG,kBAAkB,CAAC;QAC/B,CAAC;aAAM,IAAI,YAAY,EAAE,CAAC;YACxB,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACN,yCAAyC;YACzC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,CAAC;YAClE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7C,gDAAgD;gBAChD,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,8BAA8B;QAC9B,MAAM,eAAe,GAAoB;YACvC,GAAG,OAAO;YACV,OAAO,EAAE,IAAI,EAAE,+BAA+B;YAC9C,SAAS,EACP,WAAW,IAAI,OAAO,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;SACvF,CAAC;QAEF,aAAa;QACb,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,eAAe,GAAG,SAAS,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;QAClE,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;YACjF,MAAM,IAAI,KAAK,CAAC,wBAAwB,eAAe,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,UAA8B,CAAC;QACnC,IAAI,UAAU,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;YACnE,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChG,CAAC;QAED,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;YACtF,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;gBACnC,MAAM;oBACJ,GAAG,IAAI;oBACP,kBAAkB,EAAE,SAAS,CAAC,kBAAkB;iBACjD,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,SAAS,EAAE,CAAC,CAAC;QACzE,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,cAAc,CACzB,IAAY,EACZ,MAAuB,EACvB,UAAmB;QAEnB,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAC1C,0BAA0B;YAC1B,MAAM,QAAQ,GAAG,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAClD,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;YAC7C,CAAC;YAED,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;YACpE,4DAA4D;YAC5D,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACtB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC5C,CAAC;IACH,CAAC;CACF;AA5GD,kDA4GC"}