@memberjunction/core-actions 2.106.0 → 2.107.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config.d.ts +112 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +34 -2
- package/dist/config.js.map +1 -1
- package/dist/custom/ai/summarize-content.action.d.ts +72 -0
- package/dist/custom/ai/summarize-content.action.d.ts.map +1 -0
- package/dist/custom/ai/summarize-content.action.js +388 -0
- package/dist/custom/ai/summarize-content.action.js.map +1 -0
- package/dist/custom/data/execute-research-query.action.d.ts +96 -0
- package/dist/custom/data/execute-research-query.action.d.ts.map +1 -0
- package/dist/custom/data/execute-research-query.action.js +413 -0
- package/dist/custom/data/execute-research-query.action.js.map +1 -0
- package/dist/custom/data/explore-database-schema.action.d.ts +91 -0
- package/dist/custom/data/explore-database-schema.action.d.ts.map +1 -0
- package/dist/custom/data/explore-database-schema.action.js +406 -0
- package/dist/custom/data/explore-database-schema.action.js.map +1 -0
- package/dist/custom/files/index.d.ts +2 -0
- package/dist/custom/files/index.d.ts.map +1 -1
- package/dist/custom/files/index.js +5 -1
- package/dist/custom/files/index.js.map +1 -1
- package/dist/custom/files/list-storage-providers.action.d.ts +52 -0
- package/dist/custom/files/list-storage-providers.action.d.ts.map +1 -0
- package/dist/custom/files/list-storage-providers.action.js +175 -0
- package/dist/custom/files/list-storage-providers.action.js.map +1 -0
- package/dist/custom/files/search-storage-files.action.d.ts +61 -0
- package/dist/custom/files/search-storage-files.action.d.ts.map +1 -0
- package/dist/custom/files/search-storage-files.action.js +183 -0
- package/dist/custom/files/search-storage-files.action.js.map +1 -0
- package/dist/custom/web/google-custom-search.action.d.ts +55 -0
- package/dist/custom/web/google-custom-search.action.d.ts.map +1 -0
- package/dist/custom/web/google-custom-search.action.js +310 -0
- package/dist/custom/web/google-custom-search.action.js.map +1 -0
- package/dist/generated/action_subclasses.d.ts +51 -3
- package/dist/generated/action_subclasses.d.ts.map +1 -1
- package/dist/generated/action_subclasses.js +174 -90
- package/dist/generated/action_subclasses.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -1
- package/package.json +13 -11
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summarize-content.action.js","sourceRoot":"","sources":["../../../src/custom/ai/summarize-content.action.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { ActionResultSimple, RunActionParams } from "@memberjunction/actions-base";
|
|
2
|
+
import { BaseAction } from "@memberjunction/actions";
|
|
3
|
+
/**
|
|
4
|
+
* Action that executes read-only SQL SELECT queries for research purposes with
|
|
5
|
+
* comprehensive security validation.
|
|
6
|
+
*
|
|
7
|
+
* Security Features:
|
|
8
|
+
* - SQL syntax validation using node-sql-parser
|
|
9
|
+
* - SELECT-only enforcement (rejects INSERT, UPDATE, DELETE, DROP, etc.)
|
|
10
|
+
* - Dangerous operation detection (EXEC, xp_, sp_, dynamic SQL, etc.)
|
|
11
|
+
* - Query timeout protection
|
|
12
|
+
* - Audit logging of all queries
|
|
13
|
+
* - Result size limiting
|
|
14
|
+
*
|
|
15
|
+
* Performance Features:
|
|
16
|
+
* - Configurable row limits to prevent overwhelming results
|
|
17
|
+
* - Optional execution plan for performance analysis
|
|
18
|
+
* - Execution time tracking
|
|
19
|
+
* - Validation warnings for potentially slow queries
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* // Simple SELECT query
|
|
24
|
+
* await runAction({
|
|
25
|
+
* ActionName: 'Execute Research Query',
|
|
26
|
+
* Params: [{
|
|
27
|
+
* Name: 'Query',
|
|
28
|
+
* Value: 'SELECT TOP 100 * FROM Customers WHERE Country = @Country'
|
|
29
|
+
* }]
|
|
30
|
+
* });
|
|
31
|
+
*
|
|
32
|
+
* // Query with timeout and execution plan
|
|
33
|
+
* await runAction({
|
|
34
|
+
* ActionName: 'Execute Research Query',
|
|
35
|
+
* Params: [{
|
|
36
|
+
* Name: 'Query',
|
|
37
|
+
* Value: 'SELECT COUNT(*) FROM Orders GROUP BY CustomerID'
|
|
38
|
+
* }, {
|
|
39
|
+
* Name: 'Timeout',
|
|
40
|
+
* Value: 60
|
|
41
|
+
* }, {
|
|
42
|
+
* Name: 'IncludeExecutionPlan',
|
|
43
|
+
* Value: true
|
|
44
|
+
* }]
|
|
45
|
+
* });
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export declare class ExecuteResearchQueryAction extends BaseAction {
|
|
49
|
+
private readonly parser;
|
|
50
|
+
/**
|
|
51
|
+
* List of dangerous SQL keywords and patterns that should be blocked
|
|
52
|
+
*/
|
|
53
|
+
private readonly DANGEROUS_PATTERNS;
|
|
54
|
+
protected InternalRunAction(params: RunActionParams): Promise<ActionResultSimple>;
|
|
55
|
+
/**
|
|
56
|
+
* Validates query for security concerns
|
|
57
|
+
*/
|
|
58
|
+
private validateQuerySecurity;
|
|
59
|
+
/**
|
|
60
|
+
* Validates SQL syntax using node-sql-parser
|
|
61
|
+
*/
|
|
62
|
+
private validateQuerySyntax;
|
|
63
|
+
/**
|
|
64
|
+
* Ensures query has a row limit to prevent overwhelming results
|
|
65
|
+
*/
|
|
66
|
+
private ensureRowLimit;
|
|
67
|
+
/**
|
|
68
|
+
* Generates validation warnings for potentially problematic queries
|
|
69
|
+
*/
|
|
70
|
+
private generateValidationWarnings;
|
|
71
|
+
/**
|
|
72
|
+
* Formats results as CSV string
|
|
73
|
+
*/
|
|
74
|
+
private formatAsCSV;
|
|
75
|
+
/**
|
|
76
|
+
* Formats results as ASCII table
|
|
77
|
+
*/
|
|
78
|
+
private formatAsTable;
|
|
79
|
+
/**
|
|
80
|
+
* Helper to get string parameter value
|
|
81
|
+
*/
|
|
82
|
+
private getStringParam;
|
|
83
|
+
/**
|
|
84
|
+
* Helper to get numeric parameter value
|
|
85
|
+
*/
|
|
86
|
+
private getNumericParam;
|
|
87
|
+
/**
|
|
88
|
+
* Helper to get boolean parameter value
|
|
89
|
+
*/
|
|
90
|
+
private getBooleanParam;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Load function to ensure the class is registered and not tree-shaken
|
|
94
|
+
*/
|
|
95
|
+
export declare function LoadExecuteResearchQueryAction(): void;
|
|
96
|
+
//# sourceMappingURL=execute-research-query.action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute-research-query.action.d.ts","sourceRoot":"","sources":["../../../src/custom/data/execute-research-query.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEnF,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAMrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,qBACa,0BAA2B,SAAQ,UAAU;IAEtD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IAEvC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAwBjC;cAEc,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAiKvF;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA4B7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAc3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAiBtB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA8BlC;;OAEG;IACH,OAAO,CAAC,WAAW;IAuBnB;;OAEG;IACH,OAAO,CAAC,aAAa;IA4BrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;IACH,OAAO,CAAC,eAAe;CAY1B;AAED;;GAEG;AACH,wBAAgB,8BAA8B,SAE7C"}
|
|
@@ -0,0 +1,413 @@
|
|
|
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.LoadExecuteResearchQueryAction = exports.ExecuteResearchQueryAction = void 0;
|
|
10
|
+
const global_1 = require("@memberjunction/global");
|
|
11
|
+
const actions_1 = require("@memberjunction/actions");
|
|
12
|
+
const global_2 = require("@memberjunction/global");
|
|
13
|
+
const core_1 = require("@memberjunction/core");
|
|
14
|
+
const node_sql_parser_1 = require("node-sql-parser");
|
|
15
|
+
/**
|
|
16
|
+
* Action that executes read-only SQL SELECT queries for research purposes with
|
|
17
|
+
* comprehensive security validation.
|
|
18
|
+
*
|
|
19
|
+
* Security Features:
|
|
20
|
+
* - SQL syntax validation using node-sql-parser
|
|
21
|
+
* - SELECT-only enforcement (rejects INSERT, UPDATE, DELETE, DROP, etc.)
|
|
22
|
+
* - Dangerous operation detection (EXEC, xp_, sp_, dynamic SQL, etc.)
|
|
23
|
+
* - Query timeout protection
|
|
24
|
+
* - Audit logging of all queries
|
|
25
|
+
* - Result size limiting
|
|
26
|
+
*
|
|
27
|
+
* Performance Features:
|
|
28
|
+
* - Configurable row limits to prevent overwhelming results
|
|
29
|
+
* - Optional execution plan for performance analysis
|
|
30
|
+
* - Execution time tracking
|
|
31
|
+
* - Validation warnings for potentially slow queries
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* // Simple SELECT query
|
|
36
|
+
* await runAction({
|
|
37
|
+
* ActionName: 'Execute Research Query',
|
|
38
|
+
* Params: [{
|
|
39
|
+
* Name: 'Query',
|
|
40
|
+
* Value: 'SELECT TOP 100 * FROM Customers WHERE Country = @Country'
|
|
41
|
+
* }]
|
|
42
|
+
* });
|
|
43
|
+
*
|
|
44
|
+
* // Query with timeout and execution plan
|
|
45
|
+
* await runAction({
|
|
46
|
+
* ActionName: 'Execute Research Query',
|
|
47
|
+
* Params: [{
|
|
48
|
+
* Name: 'Query',
|
|
49
|
+
* Value: 'SELECT COUNT(*) FROM Orders GROUP BY CustomerID'
|
|
50
|
+
* }, {
|
|
51
|
+
* Name: 'Timeout',
|
|
52
|
+
* Value: 60
|
|
53
|
+
* }, {
|
|
54
|
+
* Name: 'IncludeExecutionPlan',
|
|
55
|
+
* Value: true
|
|
56
|
+
* }]
|
|
57
|
+
* });
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
let ExecuteResearchQueryAction = class ExecuteResearchQueryAction extends actions_1.BaseAction {
|
|
61
|
+
parser = new node_sql_parser_1.Parser();
|
|
62
|
+
/**
|
|
63
|
+
* List of dangerous SQL keywords and patterns that should be blocked
|
|
64
|
+
*/
|
|
65
|
+
DANGEROUS_PATTERNS = [
|
|
66
|
+
/\bEXEC\b/i,
|
|
67
|
+
/\bEXECUTE\b/i,
|
|
68
|
+
/\bsp_/i,
|
|
69
|
+
/\bxp_/i,
|
|
70
|
+
/\bOPENROWSET\b/i,
|
|
71
|
+
/\bOPENQUERY\b/i,
|
|
72
|
+
/\bOPENDATASOURCE\b/i,
|
|
73
|
+
/\bINSERT\b/i,
|
|
74
|
+
/\bUPDATE\b/i,
|
|
75
|
+
/\bDELETE\b/i,
|
|
76
|
+
/\bDROP\b/i,
|
|
77
|
+
/\bCREATE\b/i,
|
|
78
|
+
/\bALTER\b/i,
|
|
79
|
+
/\bTRUNCATE\b/i,
|
|
80
|
+
/\bGRANT\b/i,
|
|
81
|
+
/\bREVOKE\b/i,
|
|
82
|
+
/\bDENY\b/i,
|
|
83
|
+
/\bBACKUP\b/i,
|
|
84
|
+
/\bRESTORE\b/i,
|
|
85
|
+
/\bSHUTDOWN\b/i,
|
|
86
|
+
/\bDBCC\b/i,
|
|
87
|
+
/--\+/, // SQL hints
|
|
88
|
+
/\/\*\+/ // Oracle-style hints
|
|
89
|
+
];
|
|
90
|
+
async InternalRunAction(params) {
|
|
91
|
+
const startTime = Date.now();
|
|
92
|
+
try {
|
|
93
|
+
// Extract parameters
|
|
94
|
+
const query = this.getStringParam(params, "query");
|
|
95
|
+
if (!query) {
|
|
96
|
+
return {
|
|
97
|
+
Success: false,
|
|
98
|
+
ResultCode: "MISSING_QUERY",
|
|
99
|
+
Message: "Query parameter is required"
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
const maxRows = this.getNumericParam(params, "maxrows", 1000);
|
|
103
|
+
const timeout = this.getNumericParam(params, "timeout", 30);
|
|
104
|
+
const includeExecutionPlan = this.getBooleanParam(params, "includeexecutionplan", false);
|
|
105
|
+
const resultFormat = this.getStringParam(params, "resultformat") || 'json';
|
|
106
|
+
// Validate query security
|
|
107
|
+
const securityValidation = this.validateQuerySecurity(query);
|
|
108
|
+
if (!securityValidation.isValid) {
|
|
109
|
+
return {
|
|
110
|
+
Success: false,
|
|
111
|
+
ResultCode: securityValidation.resultCode,
|
|
112
|
+
Message: securityValidation.message
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
// Parse and validate SQL syntax
|
|
116
|
+
const syntaxValidation = this.validateQuerySyntax(query);
|
|
117
|
+
if (!syntaxValidation.isValid) {
|
|
118
|
+
return {
|
|
119
|
+
Success: false,
|
|
120
|
+
ResultCode: "INVALID_SQL_SYNTAX",
|
|
121
|
+
Message: syntaxValidation.message
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
// Ensure query returns limited results
|
|
125
|
+
const limitedQuery = this.ensureRowLimit(query, maxRows);
|
|
126
|
+
const dataProvider = core_1.BaseEntity.Provider;
|
|
127
|
+
let executionPlanData = undefined;
|
|
128
|
+
try {
|
|
129
|
+
// Get execution plan if requested
|
|
130
|
+
if (includeExecutionPlan) {
|
|
131
|
+
const planQuery = `SET SHOWPLAN_XML ON;\n${limitedQuery}\nSET SHOWPLAN_XML OFF;`;
|
|
132
|
+
try {
|
|
133
|
+
const planResult = await dataProvider.ExecuteSQL(planQuery, null, {
|
|
134
|
+
description: 'Execute Research Query - Get Execution Plan',
|
|
135
|
+
ignoreLogging: false
|
|
136
|
+
}, params.ContextUser);
|
|
137
|
+
if (planResult.recordset && planResult.recordset.length > 0) {
|
|
138
|
+
executionPlanData = planResult.recordset[0];
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch (planError) {
|
|
142
|
+
// Execution plan is optional, log error but continue
|
|
143
|
+
(0, core_1.LogError)(`Failed to retrieve execution plan: ${planError}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// Execute the query with timeout
|
|
147
|
+
// Note: SQL Server timeout is in seconds for request.timeout
|
|
148
|
+
const queryStartTime = Date.now();
|
|
149
|
+
const result = await Promise.race([
|
|
150
|
+
dataProvider.ExecuteSQL(limitedQuery, null, {
|
|
151
|
+
description: 'Execute Research Query',
|
|
152
|
+
ignoreLogging: false,
|
|
153
|
+
isMutation: false
|
|
154
|
+
}, params.ContextUser),
|
|
155
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Query timeout exceeded')), timeout * 1000))
|
|
156
|
+
]);
|
|
157
|
+
const executionTimeMs = Date.now() - queryStartTime;
|
|
158
|
+
const results = result.recordset || [];
|
|
159
|
+
// Get column metadata
|
|
160
|
+
const columns = result.recordset && result.recordset.columns
|
|
161
|
+
? Object.entries(result.recordset.columns).map(([name, col]) => ({
|
|
162
|
+
ColumnName: name,
|
|
163
|
+
DataType: col.type?.name || 'unknown',
|
|
164
|
+
IsNullable: col.nullable !== false
|
|
165
|
+
}))
|
|
166
|
+
: [];
|
|
167
|
+
const wasTruncated = results.length >= maxRows;
|
|
168
|
+
// Generate validation warnings
|
|
169
|
+
const warnings = this.generateValidationWarnings(query, results.length, executionTimeMs);
|
|
170
|
+
// Format results based on requested format
|
|
171
|
+
let formattedResults = results;
|
|
172
|
+
if (resultFormat === 'csv') {
|
|
173
|
+
formattedResults = this.formatAsCSV(results);
|
|
174
|
+
}
|
|
175
|
+
else if (resultFormat === 'table') {
|
|
176
|
+
formattedResults = this.formatAsTable(results);
|
|
177
|
+
}
|
|
178
|
+
const totalExecutionTime = Date.now() - startTime;
|
|
179
|
+
return {
|
|
180
|
+
Success: true,
|
|
181
|
+
ResultCode: "SUCCESS",
|
|
182
|
+
Message: `Query executed successfully, returned ${results.length} row(s) in ${executionTimeMs}ms`,
|
|
183
|
+
Results: formattedResults,
|
|
184
|
+
Columns: columns,
|
|
185
|
+
RowCount: results.length,
|
|
186
|
+
ExecutionTimeMs: executionTimeMs,
|
|
187
|
+
TotalTimeMs: totalExecutionTime,
|
|
188
|
+
WasTruncated: wasTruncated,
|
|
189
|
+
ExecutionPlan: executionPlanData,
|
|
190
|
+
ValidationWarnings: warnings,
|
|
191
|
+
Query: limitedQuery
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
catch (queryError) {
|
|
195
|
+
// Handle query timeout
|
|
196
|
+
if (queryError.message && queryError.message.includes('timeout')) {
|
|
197
|
+
return {
|
|
198
|
+
Success: false,
|
|
199
|
+
ResultCode: "QUERY_TIMEOUT",
|
|
200
|
+
Message: `Query execution exceeded ${timeout} second timeout. Consider optimizing query or increasing timeout parameter.`
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
// Handle permission errors
|
|
204
|
+
if (queryError.message &&
|
|
205
|
+
(queryError.message.toLowerCase().includes('permission') ||
|
|
206
|
+
queryError.message.toLowerCase().includes('denied'))) {
|
|
207
|
+
return {
|
|
208
|
+
Success: false,
|
|
209
|
+
ResultCode: "PERMISSION_DENIED",
|
|
210
|
+
Message: `Insufficient permissions to execute query: ${queryError.message}`
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
// Handle other database errors
|
|
214
|
+
return {
|
|
215
|
+
Success: false,
|
|
216
|
+
ResultCode: "DATABASE_ERROR",
|
|
217
|
+
Message: `Database error occurred: ${queryError.message || String(queryError)}`
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
223
|
+
return {
|
|
224
|
+
Success: false,
|
|
225
|
+
ResultCode: "QUERY_EXECUTION_FAILED",
|
|
226
|
+
Message: `Query execution failed: ${errorMessage}`
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Validates query for security concerns
|
|
232
|
+
*/
|
|
233
|
+
validateQuerySecurity(query) {
|
|
234
|
+
// Check for dangerous patterns
|
|
235
|
+
for (const pattern of this.DANGEROUS_PATTERNS) {
|
|
236
|
+
if (pattern.test(query)) {
|
|
237
|
+
return {
|
|
238
|
+
isValid: false,
|
|
239
|
+
message: `Query contains potentially dangerous operation: ${pattern.source}. Only SELECT queries are allowed.`,
|
|
240
|
+
resultCode: 'DANGEROUS_QUERY'
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
// Check if query starts with SELECT (allowing for whitespace and comments)
|
|
245
|
+
const trimmedQuery = query.trim();
|
|
246
|
+
const cleanQuery = trimmedQuery.replace(/^\/\*[\s\S]*?\*\//, '').replace(/^--.*$/gm, '').trim();
|
|
247
|
+
if (!cleanQuery.toUpperCase().startsWith('SELECT') &&
|
|
248
|
+
!cleanQuery.toUpperCase().startsWith('WITH')) { // Allow CTEs
|
|
249
|
+
return {
|
|
250
|
+
isValid: false,
|
|
251
|
+
message: 'Only SELECT queries are allowed. Query must start with SELECT or WITH (for Common Table Expressions).',
|
|
252
|
+
resultCode: 'NOT_SELECT_STATEMENT'
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
return { isValid: true };
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Validates SQL syntax using node-sql-parser
|
|
259
|
+
*/
|
|
260
|
+
validateQuerySyntax(query) {
|
|
261
|
+
try {
|
|
262
|
+
// Parse the query to validate syntax
|
|
263
|
+
// node-sql-parser will throw if syntax is invalid
|
|
264
|
+
this.parser.astify(query, { database: 'mssql' });
|
|
265
|
+
return { isValid: true };
|
|
266
|
+
}
|
|
267
|
+
catch (parseError) {
|
|
268
|
+
return {
|
|
269
|
+
isValid: false,
|
|
270
|
+
message: `SQL syntax error: ${parseError.message || String(parseError)}`
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Ensures query has a row limit to prevent overwhelming results
|
|
276
|
+
*/
|
|
277
|
+
ensureRowLimit(query, maxRows) {
|
|
278
|
+
// Check if query already has TOP clause
|
|
279
|
+
const hasTop = /SELECT\s+TOP\s+\d+/i.test(query);
|
|
280
|
+
if (hasTop) {
|
|
281
|
+
return query;
|
|
282
|
+
}
|
|
283
|
+
// Check if query has OFFSET-FETCH (SQL Server 2012+)
|
|
284
|
+
const hasOffsetFetch = /OFFSET\s+\d+\s+ROWS\s+FETCH/i.test(query);
|
|
285
|
+
if (hasOffsetFetch) {
|
|
286
|
+
return query;
|
|
287
|
+
}
|
|
288
|
+
// Add TOP clause
|
|
289
|
+
return query.replace(/^(\s*SELECT\s+)/i, `$1TOP ${maxRows} `);
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Generates validation warnings for potentially problematic queries
|
|
293
|
+
*/
|
|
294
|
+
generateValidationWarnings(query, rowCount, executionTimeMs) {
|
|
295
|
+
const warnings = [];
|
|
296
|
+
// Warn about slow queries
|
|
297
|
+
if (executionTimeMs > 5000) {
|
|
298
|
+
warnings.push(`Query took ${executionTimeMs}ms to execute. Consider adding indexes or optimizing query.`);
|
|
299
|
+
}
|
|
300
|
+
// Warn about SELECT *
|
|
301
|
+
if (/SELECT\s+\*/i.test(query)) {
|
|
302
|
+
warnings.push('Query uses SELECT *. Specifying explicit columns improves performance and clarity.');
|
|
303
|
+
}
|
|
304
|
+
// Warn about missing WHERE clause on large result sets
|
|
305
|
+
if (rowCount > 100 && !/WHERE/i.test(query)) {
|
|
306
|
+
warnings.push('Query returned many rows without WHERE clause. Consider adding filters for better performance.');
|
|
307
|
+
}
|
|
308
|
+
// Warn about potential Cartesian products
|
|
309
|
+
const fromCount = (query.match(/FROM/gi) || []).length;
|
|
310
|
+
const joinCount = (query.match(/JOIN/gi) || []).length;
|
|
311
|
+
const whereCount = (query.match(/WHERE/gi) || []).length;
|
|
312
|
+
if (fromCount > 1 && joinCount === 0 && whereCount === 0) {
|
|
313
|
+
warnings.push('Query may contain Cartesian product (multiple tables without JOIN or WHERE). This can be very slow.');
|
|
314
|
+
}
|
|
315
|
+
return warnings;
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Formats results as CSV string
|
|
319
|
+
*/
|
|
320
|
+
formatAsCSV(results) {
|
|
321
|
+
if (results.length === 0)
|
|
322
|
+
return '';
|
|
323
|
+
const headers = Object.keys(results[0]);
|
|
324
|
+
const csvRows = [headers.join(',')];
|
|
325
|
+
for (const row of results) {
|
|
326
|
+
const values = headers.map(header => {
|
|
327
|
+
const value = row[header];
|
|
328
|
+
if (value == null)
|
|
329
|
+
return '';
|
|
330
|
+
// Escape quotes and wrap in quotes if contains comma or quote
|
|
331
|
+
const stringValue = String(value);
|
|
332
|
+
if (stringValue.includes(',') || stringValue.includes('"') || stringValue.includes('\n')) {
|
|
333
|
+
return `"${stringValue.replace(/"/g, '""')}"`;
|
|
334
|
+
}
|
|
335
|
+
return stringValue;
|
|
336
|
+
});
|
|
337
|
+
csvRows.push(values.join(','));
|
|
338
|
+
}
|
|
339
|
+
return csvRows.join('\n');
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Formats results as ASCII table
|
|
343
|
+
*/
|
|
344
|
+
formatAsTable(results) {
|
|
345
|
+
if (results.length === 0)
|
|
346
|
+
return 'No results';
|
|
347
|
+
const headers = Object.keys(results[0]);
|
|
348
|
+
// Calculate column widths
|
|
349
|
+
const widths = headers.map(header => {
|
|
350
|
+
const valueWidths = results.map(row => String(row[header] ?? '').length);
|
|
351
|
+
return Math.max(header.length, ...valueWidths, 3);
|
|
352
|
+
});
|
|
353
|
+
// Build separator
|
|
354
|
+
const separator = '+' + widths.map(w => '-'.repeat(w + 2)).join('+') + '+';
|
|
355
|
+
// Build header row
|
|
356
|
+
const headerRow = '|' + headers.map((h, i) => ` ${h.padEnd(widths[i])} `).join('|') + '|';
|
|
357
|
+
// Build data rows
|
|
358
|
+
const dataRows = results.map(row => {
|
|
359
|
+
return '|' + headers.map((h, i) => {
|
|
360
|
+
const value = String(row[h] ?? '').substring(0, widths[i]);
|
|
361
|
+
return ` ${value.padEnd(widths[i])} `;
|
|
362
|
+
}).join('|') + '|';
|
|
363
|
+
});
|
|
364
|
+
return [separator, headerRow, separator, ...dataRows, separator].join('\n');
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Helper to get string parameter value
|
|
368
|
+
*/
|
|
369
|
+
getStringParam(params, paramName) {
|
|
370
|
+
const param = params.Params.find(p => p.Name.toLowerCase() === paramName.toLowerCase() &&
|
|
371
|
+
p.Type === 'Input');
|
|
372
|
+
return param?.Value ? String(param.Value) : undefined;
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Helper to get numeric parameter value
|
|
376
|
+
*/
|
|
377
|
+
getNumericParam(params, paramName, defaultValue) {
|
|
378
|
+
const param = params.Params.find(p => p.Name.toLowerCase() === paramName.toLowerCase() &&
|
|
379
|
+
p.Type === 'Input');
|
|
380
|
+
if (param?.Value != null) {
|
|
381
|
+
const num = Number(param.Value);
|
|
382
|
+
return isNaN(num) ? defaultValue : num;
|
|
383
|
+
}
|
|
384
|
+
return defaultValue;
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Helper to get boolean parameter value
|
|
388
|
+
*/
|
|
389
|
+
getBooleanParam(params, paramName, defaultValue) {
|
|
390
|
+
const param = params.Params.find(p => p.Name.toLowerCase() === paramName.toLowerCase() &&
|
|
391
|
+
p.Type === 'Input');
|
|
392
|
+
if (param?.Value != null) {
|
|
393
|
+
const val = String(param.Value).toLowerCase();
|
|
394
|
+
if (val === 'true' || val === '1' || val === 'yes')
|
|
395
|
+
return true;
|
|
396
|
+
if (val === 'false' || val === '0' || val === 'no')
|
|
397
|
+
return false;
|
|
398
|
+
}
|
|
399
|
+
return defaultValue;
|
|
400
|
+
}
|
|
401
|
+
};
|
|
402
|
+
exports.ExecuteResearchQueryAction = ExecuteResearchQueryAction;
|
|
403
|
+
exports.ExecuteResearchQueryAction = ExecuteResearchQueryAction = __decorate([
|
|
404
|
+
(0, global_1.RegisterClass)(actions_1.BaseAction, "Execute Research Query")
|
|
405
|
+
], ExecuteResearchQueryAction);
|
|
406
|
+
/**
|
|
407
|
+
* Load function to ensure the class is registered and not tree-shaken
|
|
408
|
+
*/
|
|
409
|
+
function LoadExecuteResearchQueryAction() {
|
|
410
|
+
global_2.MJGlobal.Instance.ClassFactory.GetRegistration(actions_1.BaseAction, "Execute Research Query");
|
|
411
|
+
}
|
|
412
|
+
exports.LoadExecuteResearchQueryAction = LoadExecuteResearchQueryAction;
|
|
413
|
+
//# sourceMappingURL=execute-research-query.action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute-research-query.action.js","sourceRoot":"","sources":["../../../src/custom/data/execute-research-query.action.ts"],"names":[],"mappings":";;;;;;;;;AACA,mDAAuD;AACvD,qDAAqD;AACrD,mDAAkD;AAClD,+CAA4D;AAE5D,qDAAyC;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEI,IAAM,0BAA0B,GAAhC,MAAM,0BAA2B,SAAQ,oBAAU;IAErC,MAAM,GAAG,IAAI,wBAAM,EAAE,CAAC;IAEvC;;OAEG;IACc,kBAAkB,GAAG;QAClC,WAAW;QACX,cAAc;QACd,QAAQ;QACR,QAAQ;QACR,iBAAiB;QACjB,gBAAgB;QAChB,qBAAqB;QACrB,aAAa;QACb,aAAa;QACb,aAAa;QACb,WAAW;QACX,aAAa;QACb,YAAY;QACZ,eAAe;QACf,YAAY;QACZ,aAAa;QACb,WAAW;QACX,aAAa;QACb,cAAc;QACd,eAAe;QACf,WAAW;QACX,MAAM,EAAG,YAAY;QACrB,QAAQ,CAAE,qBAAqB;KAClC,CAAC;IAEQ,KAAK,CAAC,iBAAiB,CAAC,MAAuB;QACrD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC;YACD,qBAAqB;YACrB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACnD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACT,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,UAAU,EAAE,eAAe;oBAC3B,OAAO,EAAE,6BAA6B;iBACnB,CAAC;YAC5B,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;YAC5D,MAAM,oBAAoB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,sBAAsB,EAAE,KAAK,CAAC,CAAC;YACzF,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,MAAM,CAAC;YAE3E,0BAA0B;YAC1B,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC7D,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;gBAC9B,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,UAAU,EAAE,kBAAkB,CAAC,UAAW;oBAC1C,OAAO,EAAE,kBAAkB,CAAC,OAAQ;iBACjB,CAAC;YAC5B,CAAC;YAED,gCAAgC;YAChC,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACzD,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;gBAC5B,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,UAAU,EAAE,oBAAoB;oBAChC,OAAO,EAAE,gBAAgB,CAAC,OAAQ;iBACf,CAAC;YAC5B,CAAC;YAED,uCAAuC;YACvC,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAEzD,MAAM,YAAY,GAAG,iBAAU,CAAC,QAAiC,CAAC;YAElE,IAAI,iBAAiB,GAAQ,SAAS,CAAC;YAEvC,IAAI,CAAC;gBACD,kCAAkC;gBAClC,IAAI,oBAAoB,EAAE,CAAC;oBACvB,MAAM,SAAS,GAAG,yBAAyB,YAAY,yBAAyB,CAAC;oBACjF,IAAI,CAAC;wBACD,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,EAAE;4BAC9D,WAAW,EAAE,6CAA6C;4BAC1D,aAAa,EAAE,KAAK;yBACvB,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;wBAEvB,IAAI,UAAU,CAAC,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BAC1D,iBAAiB,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;wBAChD,CAAC;oBACL,CAAC;oBAAC,OAAO,SAAS,EAAE,CAAC;wBACjB,qDAAqD;wBACrD,IAAA,eAAQ,EAAC,sCAAsC,SAAS,EAAE,CAAC,CAAC;oBAChE,CAAC;gBACL,CAAC;gBAED,iCAAiC;gBACjC,6DAA6D;gBAC7D,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAElC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;oBAC9B,YAAY,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,EAAE;wBACxC,WAAW,EAAE,wBAAwB;wBACrC,aAAa,EAAE,KAAK;wBACpB,UAAU,EAAE,KAAK;qBACpB,EAAE,MAAM,CAAC,WAAW,CAAC;oBACtB,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CACtB,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,CAChF;iBACJ,CAAQ,CAAC;gBAEV,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC;gBACpD,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;gBAEvC,sBAAsB;gBACtB,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO;oBACxD,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAgB,EAAE,EAAE,CAAC,CAAC;wBAC5E,UAAU,EAAE,IAAI;wBAChB,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,SAAS;wBACrC,UAAU,EAAE,GAAG,CAAC,QAAQ,KAAK,KAAK;qBACrC,CAAC,CAAC;oBACH,CAAC,CAAC,EAAE,CAAC;gBAET,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC;gBAE/C,+BAA+B;gBAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;gBAEzF,2CAA2C;gBAC3C,IAAI,gBAAgB,GAAQ,OAAO,CAAC;gBACpC,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;oBACzB,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBACjD,CAAC;qBAAM,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;oBAClC,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBACnD,CAAC;gBAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;gBAElD,OAAO;oBACH,OAAO,EAAE,IAAI;oBACb,UAAU,EAAE,SAAS;oBACrB,OAAO,EAAE,yCAAyC,OAAO,CAAC,MAAM,cAAc,eAAe,IAAI;oBACjG,OAAO,EAAE,gBAAgB;oBACzB,OAAO,EAAE,OAAO;oBAChB,QAAQ,EAAE,OAAO,CAAC,MAAM;oBACxB,eAAe,EAAE,eAAe;oBAChC,WAAW,EAAE,kBAAkB;oBAC/B,YAAY,EAAE,YAAY;oBAC1B,aAAa,EAAE,iBAAiB;oBAChC,kBAAkB,EAAE,QAAQ;oBAC5B,KAAK,EAAE,YAAY;iBACA,CAAC;YAE5B,CAAC;YAAC,OAAO,UAAe,EAAE,CAAC;gBACvB,uBAAuB;gBACvB,IAAI,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC/D,OAAO;wBACH,OAAO,EAAE,KAAK;wBACd,UAAU,EAAE,eAAe;wBAC3B,OAAO,EAAE,4BAA4B,OAAO,6EAA6E;qBACtG,CAAC;gBAC5B,CAAC;gBAED,2BAA2B;gBAC3B,IAAI,UAAU,CAAC,OAAO;oBAClB,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;wBACvD,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;oBACxD,OAAO;wBACH,OAAO,EAAE,KAAK;wBACd,UAAU,EAAE,mBAAmB;wBAC/B,OAAO,EAAE,8CAA8C,UAAU,CAAC,OAAO,EAAE;qBACxD,CAAC;gBAC5B,CAAC;gBAED,+BAA+B;gBAC/B,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,UAAU,EAAE,gBAAgB;oBAC5B,OAAO,EAAE,4BAA4B,UAAU,CAAC,OAAO,IAAI,MAAM,CAAC,UAAU,CAAC,EAAE;iBAC5D,CAAC;YAC5B,CAAC;QAEL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,UAAU,EAAE,wBAAwB;gBACpC,OAAO,EAAE,2BAA2B,YAAY,EAAE;aAC/B,CAAC;QAC5B,CAAC;IACL,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,KAAa;QACvC,+BAA+B;QAC/B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5C,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,mDAAmD,OAAO,CAAC,MAAM,oCAAoC;oBAC9G,UAAU,EAAE,iBAAiB;iBAChC,CAAC;YACN,CAAC;QACL,CAAC;QAED,2EAA2E;QAC3E,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAEhG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC9C,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAE,aAAa;YAC9D,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,uGAAuG;gBAChH,UAAU,EAAE,sBAAsB;aACrC,CAAC;QACN,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,KAAa;QACrC,IAAI,CAAC;YACD,qCAAqC;YACrC,kDAAkD;YAClD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;YACjD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC7B,CAAC;QAAC,OAAO,UAAe,EAAE,CAAC;YACvB,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,qBAAqB,UAAU,CAAC,OAAO,IAAI,MAAM,CAAC,UAAU,CAAC,EAAE;aAC3E,CAAC;QACN,CAAC;IACL,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,KAAa,EAAE,OAAe;QACjD,wCAAwC;QACxC,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,MAAM,EAAE,CAAC;YACT,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,qDAAqD;QACrD,MAAM,cAAc,GAAG,8BAA8B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClE,IAAI,cAAc,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,iBAAiB;QACjB,OAAO,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,SAAS,OAAO,GAAG,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACK,0BAA0B,CAAC,KAAa,EAAE,QAAgB,EAAE,eAAuB;QACvF,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,0BAA0B;QAC1B,IAAI,eAAe,GAAG,IAAI,EAAE,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC,cAAc,eAAe,6DAA6D,CAAC,CAAC;QAC9G,CAAC;QAED,sBAAsB;QACtB,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC,oFAAoF,CAAC,CAAC;QACxG,CAAC;QAED,uDAAuD;QACvD,IAAI,QAAQ,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1C,QAAQ,CAAC,IAAI,CAAC,gGAAgG,CAAC,CAAC;QACpH,CAAC;QAED,0CAA0C;QAC1C,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACvD,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACvD,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QAEzD,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,KAAK,CAAC,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;YACvD,QAAQ,CAAC,IAAI,CAAC,qGAAqG,CAAC,CAAC;QACzH,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,OAAc;QAC9B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEpC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAEpC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;gBAChC,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC1B,IAAI,KAAK,IAAI,IAAI;oBAAE,OAAO,EAAE,CAAC;gBAC7B,8DAA8D;gBAC9D,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;gBAClC,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBACvF,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;gBAClD,CAAC;gBACD,OAAO,WAAW,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,CAAC;QAED,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,OAAc;QAChC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,YAAY,CAAC;QAE9C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAExC,0BAA0B;QAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YAChC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;YACzE,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,kBAAkB;QAClB,MAAM,SAAS,GAAG,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAE3E,mBAAmB;QACnB,MAAM,SAAS,GAAG,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAE1F,kBAAkB;QAClB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC/B,OAAO,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3D,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC1C,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,QAAQ,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChF,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,MAAuB,EAAE,SAAiB;QAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CACjC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE;YAChD,CAAC,CAAC,IAAI,KAAK,OAAO,CACrB,CAAC;QACF,OAAO,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1D,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,MAAuB,EAAE,SAAiB,EAAE,YAAoB;QACpF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CACjC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE;YAChD,CAAC,CAAC,IAAI,KAAK,OAAO,CACrB,CAAC;QACF,IAAI,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAChC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC;QAC3C,CAAC;QACD,OAAO,YAAY,CAAC;IACxB,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,MAAuB,EAAE,SAAiB,EAAE,YAAqB;QACrF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CACjC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE;YAChD,CAAC,CAAC,IAAI,KAAK,OAAO,CACrB,CAAC;QACF,IAAI,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;YAC9C,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,KAAK;gBAAE,OAAO,IAAI,CAAC;YAChE,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC;QACrE,CAAC;QACD,OAAO,YAAY,CAAC;IACxB,CAAC;CACJ,CAAA;AAzYY,gEAA0B;qCAA1B,0BAA0B;IADtC,IAAA,sBAAa,EAAC,oBAAU,EAAE,wBAAwB,CAAC;GACvC,0BAA0B,CAyYtC;AAED;;GAEG;AACH,SAAgB,8BAA8B;IAC1C,iBAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,eAAe,CAAC,oBAAU,EAAE,wBAAwB,CAAC,CAAC;AACzF,CAAC;AAFD,wEAEC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { ActionResultSimple, RunActionParams } from "@memberjunction/actions-base";
|
|
2
|
+
import { BaseAction } from "@memberjunction/actions";
|
|
3
|
+
/**
|
|
4
|
+
* Action that retrieves comprehensive database schema information using MemberJunction's
|
|
5
|
+
* rich metadata layer instead of raw INFORMATION_SCHEMA queries.
|
|
6
|
+
*
|
|
7
|
+
* This action provides research agents with deep understanding of the data model including:
|
|
8
|
+
* - Business context (descriptions, display names)
|
|
9
|
+
* - Field metadata (types, defaults, value lists, related entities)
|
|
10
|
+
* - Semantic relationships (not just foreign keys)
|
|
11
|
+
* - Virtual entities (logical, not physical)
|
|
12
|
+
* - API permissions and settings
|
|
13
|
+
* - Audit configuration
|
|
14
|
+
* - UI display preferences
|
|
15
|
+
*
|
|
16
|
+
* Features:
|
|
17
|
+
* - Entity name pattern filtering with wildcards
|
|
18
|
+
* - Schema filtering (focus on specific schemas)
|
|
19
|
+
* - Optional field details with rich metadata
|
|
20
|
+
* - Optional relationship information with semantic meaning
|
|
21
|
+
* - Optional permission information
|
|
22
|
+
* - Virtual entity support
|
|
23
|
+
* - Scope-based filtering
|
|
24
|
+
* - Configurable output size limits
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* // Get all customer-related entities with full metadata
|
|
29
|
+
* await runAction({
|
|
30
|
+
* ActionName: 'Explore Database Schema',
|
|
31
|
+
* Params: [{
|
|
32
|
+
* Name: 'EntityPattern',
|
|
33
|
+
* Value: '%Customer%'
|
|
34
|
+
* }, {
|
|
35
|
+
* Name: 'IncludeFields',
|
|
36
|
+
* Value: true
|
|
37
|
+
* }, {
|
|
38
|
+
* Name: 'IncludeRelationships',
|
|
39
|
+
* Value: true
|
|
40
|
+
* }]
|
|
41
|
+
* });
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare class ExploreDatabaseSchemaAction extends BaseAction {
|
|
45
|
+
protected InternalRunAction(params: RunActionParams): Promise<ActionResultSimple>;
|
|
46
|
+
/**
|
|
47
|
+
* Filter entities based on parameters
|
|
48
|
+
*/
|
|
49
|
+
private filterEntities;
|
|
50
|
+
/**
|
|
51
|
+
* Check if entity name matches pattern (supports % and * wildcards)
|
|
52
|
+
*/
|
|
53
|
+
private matchesPattern;
|
|
54
|
+
/**
|
|
55
|
+
* Format EntityInfo into research-friendly structure
|
|
56
|
+
*/
|
|
57
|
+
private formatEntityInfo;
|
|
58
|
+
/**
|
|
59
|
+
* Format EntityFieldInfo into research-friendly structure
|
|
60
|
+
*/
|
|
61
|
+
private formatFieldInfo;
|
|
62
|
+
/**
|
|
63
|
+
* Format EntityRelationshipInfo into research-friendly structure
|
|
64
|
+
*/
|
|
65
|
+
private formatRelationshipInfo;
|
|
66
|
+
/**
|
|
67
|
+
* Group entities by schema name
|
|
68
|
+
*/
|
|
69
|
+
private groupBySchema;
|
|
70
|
+
/**
|
|
71
|
+
* Calculate summary statistics
|
|
72
|
+
*/
|
|
73
|
+
private calculateSummary;
|
|
74
|
+
/**
|
|
75
|
+
* Helper to get string parameter value
|
|
76
|
+
*/
|
|
77
|
+
private getStringParam;
|
|
78
|
+
/**
|
|
79
|
+
* Helper to get numeric parameter value
|
|
80
|
+
*/
|
|
81
|
+
private getNumericParam;
|
|
82
|
+
/**
|
|
83
|
+
* Helper to get boolean parameter value
|
|
84
|
+
*/
|
|
85
|
+
private getBooleanParam;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Load function to ensure the class is registered and not tree-shaken
|
|
89
|
+
*/
|
|
90
|
+
export declare function LoadExploreDatabaseSchemaAction(): void;
|
|
91
|
+
//# sourceMappingURL=explore-database-schema.action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explore-database-schema.action.d.ts","sourceRoot":"","sources":["../../../src/custom/data/explore-database-schema.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEnF,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAIrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,qBACa,2BAA4B,SAAQ,UAAU;cAEvC,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAiFvF;;OAEG;IACH,OAAO,CAAC,cAAc;IA2CtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAYtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgFxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAwDvB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAiB9B;;OAEG;IACH,OAAO,CAAC,aAAa;IA+BrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA4BxB;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;IACH,OAAO,CAAC,eAAe;CAY1B;AAED;;GAEG;AACH,wBAAgB,+BAA+B,SAE9C"}
|