@memberjunction/core-actions 2.111.0 → 2.112.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.map +1 -1
- package/dist/config.js +11 -7
- package/dist/config.js.map +1 -1
- package/dist/custom/ai/execute-ai-prompt.action.d.ts +2 -2
- package/dist/custom/ai/execute-ai-prompt.action.d.ts.map +1 -1
- package/dist/custom/ai/execute-ai-prompt.action.js +22 -22
- package/dist/custom/ai/execute-ai-prompt.action.js.map +1 -1
- package/dist/custom/ai/find-candidate-actions.action.d.ts +2 -2
- package/dist/custom/ai/find-candidate-actions.action.d.ts.map +1 -1
- package/dist/custom/ai/find-candidate-actions.action.js +21 -21
- package/dist/custom/ai/find-candidate-actions.action.js.map +1 -1
- package/dist/custom/ai/summarize-content.action.d.ts +2 -2
- package/dist/custom/ai/summarize-content.action.d.ts.map +1 -1
- package/dist/custom/ai/summarize-content.action.js +51 -50
- package/dist/custom/ai/summarize-content.action.js.map +1 -1
- package/dist/custom/code-execution/execute-code.action.d.ts.map +1 -1
- package/dist/custom/code-execution/execute-code.action.js +27 -27
- package/dist/custom/code-execution/execute-code.action.js.map +1 -1
- package/dist/custom/crud/base-record-mutation.action.d.ts +3 -3
- package/dist/custom/crud/base-record-mutation.action.d.ts.map +1 -1
- package/dist/custom/crud/base-record-mutation.action.js +28 -32
- package/dist/custom/crud/base-record-mutation.action.js.map +1 -1
- package/dist/custom/crud/update-record.action.d.ts +2 -2
- package/dist/custom/crud/update-record.action.d.ts.map +1 -1
- package/dist/custom/crud/update-record.action.js +7 -7
- package/dist/custom/crud/update-record.action.js.map +1 -1
- package/dist/custom/data/execute-research-query.action.d.ts +2 -2
- package/dist/custom/data/execute-research-query.action.d.ts.map +1 -1
- package/dist/custom/data/execute-research-query.action.js +52 -56
- package/dist/custom/data/execute-research-query.action.js.map +1 -1
- package/dist/custom/data/explore-database-schema.action.d.ts +2 -2
- package/dist/custom/data/explore-database-schema.action.d.ts.map +1 -1
- package/dist/custom/data/explore-database-schema.action.js +50 -51
- package/dist/custom/data/explore-database-schema.action.js.map +1 -1
- package/dist/custom/data/get-entity-details.action.d.ts +2 -2
- package/dist/custom/data/get-entity-details.action.d.ts.map +1 -1
- package/dist/custom/data/get-entity-details.action.js +30 -39
- package/dist/custom/data/get-entity-details.action.js.map +1 -1
- package/dist/custom/data/get-entity-list.action.d.ts +2 -2
- package/dist/custom/data/get-entity-list.action.d.ts.map +1 -1
- package/dist/custom/data/get-entity-list.action.js +25 -25
- package/dist/custom/data/get-entity-list.action.js.map +1 -1
- package/dist/custom/files/base-file-storage.action.d.ts +5 -5
- package/dist/custom/files/base-file-storage.action.d.ts.map +1 -1
- package/dist/custom/files/base-file-storage.action.js +12 -12
- package/dist/custom/files/base-file-storage.action.js.map +1 -1
- package/dist/custom/files/list-storage-providers.action.d.ts +2 -2
- package/dist/custom/files/list-storage-providers.action.d.ts.map +1 -1
- package/dist/custom/files/list-storage-providers.action.js +22 -22
- package/dist/custom/files/list-storage-providers.action.js.map +1 -1
- package/dist/custom/user-management/assign-user-roles.action.d.ts +1 -1
- package/dist/custom/user-management/assign-user-roles.action.d.ts.map +1 -1
- package/dist/custom/user-management/assign-user-roles.action.js +29 -27
- package/dist/custom/user-management/assign-user-roles.action.js.map +1 -1
- package/dist/custom/user-management/check-user-permission.action.d.ts +1 -1
- package/dist/custom/user-management/check-user-permission.action.d.ts.map +1 -1
- package/dist/custom/user-management/check-user-permission.action.js +25 -26
- package/dist/custom/user-management/check-user-permission.action.js.map +1 -1
- package/dist/custom/user-management/create-employee.action.d.ts +2 -2
- package/dist/custom/user-management/create-employee.action.d.ts.map +1 -1
- package/dist/custom/user-management/create-employee.action.js +25 -25
- package/dist/custom/user-management/create-employee.action.js.map +1 -1
- package/dist/custom/user-management/create-user.action.d.ts +2 -2
- package/dist/custom/user-management/create-user.action.d.ts.map +1 -1
- package/dist/custom/user-management/create-user.action.js +23 -23
- package/dist/custom/user-management/create-user.action.js.map +1 -1
- package/dist/custom/utilities/base-file-handler.d.ts +2 -2
- package/dist/custom/utilities/base-file-handler.d.ts.map +1 -1
- package/dist/custom/utilities/base-file-handler.js +11 -11
- package/dist/custom/utilities/base-file-handler.js.map +1 -1
- package/dist/custom/utilities/external-change-detection.action.d.ts +2 -2
- package/dist/custom/utilities/external-change-detection.action.d.ts.map +1 -1
- package/dist/custom/utilities/external-change-detection.action.js +11 -11
- package/dist/custom/utilities/external-change-detection.action.js.map +1 -1
- package/dist/custom/utilities/vectorize-entity.action.d.ts +2 -2
- package/dist/custom/utilities/vectorize-entity.action.d.ts.map +1 -1
- package/dist/custom/utilities/vectorize-entity.action.js +9 -9
- package/dist/custom/utilities/vectorize-entity.action.js.map +1 -1
- package/dist/generated/action_subclasses.d.ts +5 -5
- package/dist/generated/action_subclasses.d.ts.map +1 -1
- package/dist/generated/action_subclasses.js +64 -64
- package/dist/generated/action_subclasses.js.map +1 -1
- package/package.json +16 -17
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.BaseRecordMutationAction = void 0;
|
|
4
4
|
const actions_1 = require("@memberjunction/actions");
|
|
5
|
-
const
|
|
5
|
+
const global_1 = require("@memberjunction/global");
|
|
6
6
|
/**
|
|
7
7
|
* Abstract base class for record mutation actions (Create, Update, Delete).
|
|
8
8
|
* This class provides common functionality for validating parameters,
|
|
@@ -15,14 +15,14 @@ class BaseRecordMutationAction extends actions_1.BaseAction {
|
|
|
15
15
|
* Extract and validate the EntityName parameter
|
|
16
16
|
*/
|
|
17
17
|
getEntityNameParam(params) {
|
|
18
|
-
const entityNameParam = params.Params.find(p => p.Name.trim().toLowerCase() === 'entityname');
|
|
18
|
+
const entityNameParam = params.Params.find((p) => p.Name.trim().toLowerCase() === 'entityname');
|
|
19
19
|
if (!entityNameParam || !entityNameParam.Value) {
|
|
20
20
|
return {
|
|
21
21
|
error: {
|
|
22
22
|
Success: false,
|
|
23
23
|
ResultCode: 'VALIDATION_ERROR',
|
|
24
|
-
Message: 'EntityName parameter is required'
|
|
25
|
-
}
|
|
24
|
+
Message: 'EntityName parameter is required',
|
|
25
|
+
},
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
28
|
return { value: entityNameParam.Value };
|
|
@@ -31,14 +31,14 @@ class BaseRecordMutationAction extends actions_1.BaseAction {
|
|
|
31
31
|
* Extract and validate the PrimaryKey parameter
|
|
32
32
|
*/
|
|
33
33
|
getPrimaryKeyParam(params) {
|
|
34
|
-
const primaryKeyParam = params.Params.find(p => p.Name.trim().toLowerCase() === 'primarykey');
|
|
34
|
+
const primaryKeyParam = params.Params.find((p) => p.Name.trim().toLowerCase() === 'primarykey');
|
|
35
35
|
if (!primaryKeyParam || !primaryKeyParam.Value) {
|
|
36
36
|
return {
|
|
37
37
|
error: {
|
|
38
38
|
Success: false,
|
|
39
39
|
ResultCode: 'VALIDATION_ERROR',
|
|
40
|
-
Message: 'PrimaryKey parameter is required'
|
|
41
|
-
}
|
|
40
|
+
Message: 'PrimaryKey parameter is required',
|
|
41
|
+
},
|
|
42
42
|
};
|
|
43
43
|
}
|
|
44
44
|
return { value: primaryKeyParam.Value };
|
|
@@ -47,14 +47,14 @@ class BaseRecordMutationAction extends actions_1.BaseAction {
|
|
|
47
47
|
* Extract and validate the Fields parameter
|
|
48
48
|
*/
|
|
49
49
|
getFieldsParam(params) {
|
|
50
|
-
const fieldsParam = params.Params.find(p => p.Name.trim().toLowerCase() === 'fields');
|
|
50
|
+
const fieldsParam = params.Params.find((p) => p.Name.trim().toLowerCase() === 'fields');
|
|
51
51
|
if (!fieldsParam || !fieldsParam.Value) {
|
|
52
52
|
return {
|
|
53
53
|
error: {
|
|
54
54
|
Success: false,
|
|
55
55
|
ResultCode: 'VALIDATION_ERROR',
|
|
56
|
-
Message: 'Fields parameter is required'
|
|
57
|
-
}
|
|
56
|
+
Message: 'Fields parameter is required',
|
|
57
|
+
},
|
|
58
58
|
};
|
|
59
59
|
}
|
|
60
60
|
return { value: fieldsParam.Value };
|
|
@@ -63,15 +63,15 @@ class BaseRecordMutationAction extends actions_1.BaseAction {
|
|
|
63
63
|
* Get entity metadata and create entity object
|
|
64
64
|
*/
|
|
65
65
|
async getEntityObject(entityName, contextUser) {
|
|
66
|
-
const md = new
|
|
66
|
+
const md = new global_1.Metadata();
|
|
67
67
|
const entityInfo = md.EntityByName(entityName);
|
|
68
68
|
if (!entityInfo) {
|
|
69
69
|
return {
|
|
70
70
|
error: {
|
|
71
71
|
Success: false,
|
|
72
72
|
ResultCode: 'ENTITY_NOT_FOUND',
|
|
73
|
-
Message: `Entity '${entityName}' not found in metadata
|
|
74
|
-
}
|
|
73
|
+
Message: `Entity '${entityName}' not found in metadata`,
|
|
74
|
+
},
|
|
75
75
|
};
|
|
76
76
|
}
|
|
77
77
|
const entity = await md.GetEntityObject(entityName, contextUser);
|
|
@@ -80,8 +80,8 @@ class BaseRecordMutationAction extends actions_1.BaseAction {
|
|
|
80
80
|
error: {
|
|
81
81
|
Success: false,
|
|
82
82
|
ResultCode: 'FAILED',
|
|
83
|
-
Message: `Failed to create entity object for '${entityName}'
|
|
84
|
-
}
|
|
83
|
+
Message: `Failed to create entity object for '${entityName}'`,
|
|
84
|
+
},
|
|
85
85
|
};
|
|
86
86
|
}
|
|
87
87
|
return { entity, entityInfo };
|
|
@@ -99,22 +99,21 @@ class BaseRecordMutationAction extends actions_1.BaseAction {
|
|
|
99
99
|
error: {
|
|
100
100
|
Success: false,
|
|
101
101
|
ResultCode: 'VALIDATION_ERROR',
|
|
102
|
-
Message: `Primary key field '${pk.Name}' not provided
|
|
103
|
-
}
|
|
102
|
+
Message: `Primary key field '${pk.Name}' not provided`,
|
|
103
|
+
},
|
|
104
104
|
};
|
|
105
105
|
}
|
|
106
106
|
keyData[pk.Name] = primaryKey[pk.Name];
|
|
107
107
|
}
|
|
108
108
|
// Load the record using LoadFromData which works for both single and composite keys
|
|
109
|
-
const pkey =
|
|
109
|
+
const pkey = global_1.CompositeKey.FromObject(keyData);
|
|
110
110
|
const loadResult = await entity.InnerLoad(pkey);
|
|
111
111
|
if (!loadResult) {
|
|
112
112
|
// Check if it's a permission issue or record not found
|
|
113
113
|
const latestResult = entity.LatestResult;
|
|
114
114
|
let resultCode = 'RECORD_NOT_FOUND';
|
|
115
115
|
let message = `${entityName} record not found`;
|
|
116
|
-
if (latestResult?.Message?.toLowerCase().includes('permission') ||
|
|
117
|
-
latestResult?.Message?.toLowerCase().includes('denied')) {
|
|
116
|
+
if (latestResult?.Message?.toLowerCase().includes('permission') || latestResult?.Message?.toLowerCase().includes('denied')) {
|
|
118
117
|
resultCode = 'PERMISSION_DENIED';
|
|
119
118
|
message = `Permission denied accessing ${entityName} record`;
|
|
120
119
|
}
|
|
@@ -123,8 +122,8 @@ class BaseRecordMutationAction extends actions_1.BaseAction {
|
|
|
123
122
|
error: {
|
|
124
123
|
Success: false,
|
|
125
124
|
ResultCode: resultCode,
|
|
126
|
-
Message: message
|
|
127
|
-
}
|
|
125
|
+
Message: message,
|
|
126
|
+
},
|
|
128
127
|
};
|
|
129
128
|
}
|
|
130
129
|
return { success: true };
|
|
@@ -138,7 +137,7 @@ class BaseRecordMutationAction extends actions_1.BaseAction {
|
|
|
138
137
|
entity.Set(fieldName, fieldValue);
|
|
139
138
|
}
|
|
140
139
|
else {
|
|
141
|
-
(0,
|
|
140
|
+
(0, global_1.LogError)(`Field '${fieldName}' does not exist on entity '${entityName}'`);
|
|
142
141
|
}
|
|
143
142
|
}
|
|
144
143
|
}
|
|
@@ -154,17 +153,14 @@ class BaseRecordMutationAction extends actions_1.BaseAction {
|
|
|
154
153
|
message += `: ${latestResult.Message}`;
|
|
155
154
|
}
|
|
156
155
|
// Check for specific error types
|
|
157
|
-
if (latestResult.Message?.toLowerCase().includes('permission') ||
|
|
158
|
-
latestResult.Message?.toLowerCase().includes('denied')) {
|
|
156
|
+
if (latestResult.Message?.toLowerCase().includes('permission') || latestResult.Message?.toLowerCase().includes('denied')) {
|
|
159
157
|
resultCode = 'PERMISSION_DENIED';
|
|
160
158
|
}
|
|
161
|
-
else if (latestResult.Message?.toLowerCase().includes('validation') ||
|
|
162
|
-
latestResult.Message?.toLowerCase().includes('required')) {
|
|
159
|
+
else if (latestResult.Message?.toLowerCase().includes('validation') || latestResult.Message?.toLowerCase().includes('required')) {
|
|
163
160
|
resultCode = 'VALIDATION_ERROR';
|
|
164
161
|
}
|
|
165
162
|
else if (operation === 'update' &&
|
|
166
|
-
(latestResult.Message?.toLowerCase().includes('concurrent') ||
|
|
167
|
-
latestResult.Message?.toLowerCase().includes('modified'))) {
|
|
163
|
+
(latestResult.Message?.toLowerCase().includes('concurrent') || latestResult.Message?.toLowerCase().includes('modified'))) {
|
|
168
164
|
resultCode = 'CONCURRENT_UPDATE';
|
|
169
165
|
}
|
|
170
166
|
else if (operation === 'delete') {
|
|
@@ -183,18 +179,18 @@ class BaseRecordMutationAction extends actions_1.BaseAction {
|
|
|
183
179
|
return {
|
|
184
180
|
Success: false,
|
|
185
181
|
ResultCode: resultCode,
|
|
186
|
-
Message: message
|
|
182
|
+
Message: message,
|
|
187
183
|
};
|
|
188
184
|
}
|
|
189
185
|
/**
|
|
190
186
|
* Handle generic errors with consistent formatting
|
|
191
187
|
*/
|
|
192
188
|
handleError(e, operation) {
|
|
193
|
-
(0,
|
|
189
|
+
(0, global_1.LogError)(e);
|
|
194
190
|
return {
|
|
195
191
|
Success: false,
|
|
196
192
|
ResultCode: 'FAILED',
|
|
197
|
-
Message: `Error ${operation} record: ${e.message}
|
|
193
|
+
Message: `Error ${operation} record: ${e.message}`,
|
|
198
194
|
};
|
|
199
195
|
}
|
|
200
196
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-record-mutation.action.js","sourceRoot":"","sources":["../../../src/custom/crud/base-record-mutation.action.ts"],"names":[],"mappings":";;;AACA,qDAAqD;AACrD
|
|
1
|
+
{"version":3,"file":"base-record-mutation.action.js","sourceRoot":"","sources":["../../../src/custom/crud/base-record-mutation.action.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ActionResultSimple, RunActionParams } from
|
|
2
|
-
import { BaseRecordMutationAction } from
|
|
1
|
+
import { ActionResultSimple, RunActionParams } from '@memberjunction/actions-base';
|
|
2
|
+
import { BaseRecordMutationAction } from './base-record-mutation.action';
|
|
3
3
|
/**
|
|
4
4
|
* Generic action for updating existing entity records in the database.
|
|
5
5
|
* This action provides a flexible way to update records for any entity type
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-record.action.d.ts","sourceRoot":"","sources":["../../../src/custom/crud/update-record.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGnF,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAGzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBACa,kBAAmB,SAAQ,wBAAwB;
|
|
1
|
+
{"version":3,"file":"update-record.action.d.ts","sourceRoot":"","sources":["../../../src/custom/crud/update-record.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGnF,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAGzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBACa,kBAAmB,SAAQ,wBAAwB;IAC9D;;;;;;;;;;;;;;OAcG;IACG,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;CA8E9E;AAED,wBAAgB,sBAAsB,SAGrC"}
|
|
@@ -8,7 +8,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.LoadUpdateRecordAction = exports.UpdateRecordAction = void 0;
|
|
10
10
|
const global_1 = require("@memberjunction/global");
|
|
11
|
-
const
|
|
11
|
+
const global_2 = require("@memberjunction/global");
|
|
12
12
|
const base_record_mutation_action_1 = require("./base-record-mutation.action");
|
|
13
13
|
const actions_1 = require("@memberjunction/actions");
|
|
14
14
|
/**
|
|
@@ -93,13 +93,13 @@ let UpdateRecordAction = class UpdateRecordAction extends base_record_mutation_a
|
|
|
93
93
|
entity.Set(fieldName, fieldValue);
|
|
94
94
|
updatedFields[fieldName] = {
|
|
95
95
|
oldValue: currentValue,
|
|
96
|
-
newValue: fieldValue
|
|
96
|
+
newValue: fieldValue,
|
|
97
97
|
};
|
|
98
98
|
hasChanges = true;
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
101
|
else {
|
|
102
|
-
(0,
|
|
102
|
+
(0, global_2.LogError)(`Field '${fieldName}' does not exist on entity '${entityName}'`);
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
105
|
// Check if there are any changes to save
|
|
@@ -107,7 +107,7 @@ let UpdateRecordAction = class UpdateRecordAction extends base_record_mutation_a
|
|
|
107
107
|
return {
|
|
108
108
|
Success: true,
|
|
109
109
|
ResultCode: 'NO_CHANGES',
|
|
110
|
-
Message: 'No fields were modified'
|
|
110
|
+
Message: 'No fields were modified',
|
|
111
111
|
};
|
|
112
112
|
}
|
|
113
113
|
// Save the record
|
|
@@ -117,13 +117,13 @@ let UpdateRecordAction = class UpdateRecordAction extends base_record_mutation_a
|
|
|
117
117
|
params.Params.push({
|
|
118
118
|
Name: 'UpdatedFields',
|
|
119
119
|
Value: updatedFields,
|
|
120
|
-
Type: 'Output'
|
|
120
|
+
Type: 'Output',
|
|
121
121
|
});
|
|
122
122
|
return {
|
|
123
123
|
Success: true,
|
|
124
124
|
ResultCode: 'SUCCESS',
|
|
125
125
|
Message: `Successfully updated ${entityName} record`,
|
|
126
|
-
Params: params.Params
|
|
126
|
+
Params: params.Params,
|
|
127
127
|
};
|
|
128
128
|
}
|
|
129
129
|
else {
|
|
@@ -137,7 +137,7 @@ let UpdateRecordAction = class UpdateRecordAction extends base_record_mutation_a
|
|
|
137
137
|
};
|
|
138
138
|
exports.UpdateRecordAction = UpdateRecordAction;
|
|
139
139
|
exports.UpdateRecordAction = UpdateRecordAction = __decorate([
|
|
140
|
-
(0, global_1.RegisterClass)(actions_1.BaseAction,
|
|
140
|
+
(0, global_1.RegisterClass)(actions_1.BaseAction, 'UpdateRecordAction')
|
|
141
141
|
], UpdateRecordAction);
|
|
142
142
|
function LoadUpdateRecordAction() {
|
|
143
143
|
// This function exists to prevent tree shaking from removing the action class
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-record.action.js","sourceRoot":"","sources":["../../../src/custom/crud/update-record.action.ts"],"names":[],"mappings":";;;;;;;;;AACA,mDAAuD;AACvD
|
|
1
|
+
{"version":3,"file":"update-record.action.js","sourceRoot":"","sources":["../../../src/custom/crud/update-record.action.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ActionResultSimple, RunActionParams } from
|
|
2
|
-
import { BaseAction } from
|
|
1
|
+
import { ActionResultSimple, RunActionParams } from '@memberjunction/actions-base';
|
|
2
|
+
import { BaseAction } from '@memberjunction/actions';
|
|
3
3
|
/**
|
|
4
4
|
* Action that executes read-only SQL SELECT queries for research purposes with
|
|
5
5
|
* security validation.
|
|
@@ -1 +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;AASrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,qBACa,0BAA2B,SAAQ,UAAU;
|
|
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;AASrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,qBACa,0BAA2B,SAAQ,UAAU;IACxD;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAwBjC;cAEc,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA8KvF;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA+B7B;;OAEG;IACH,OAAO,CAAC,cAAc;IAiBtB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA8BlC;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAwBnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAetB;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAczB;;OAEG;YACW,gBAAgB;IA0D9B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAOlC;;OAEG;IACH,OAAO,CAAC,cAAc;IAKtB;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;OAEG;IACH,OAAO,CAAC,oBAAoB;CA0E7B;AAED;;GAEG;AACH,wBAAgB,8BAA8B,SAE7C"}
|
|
@@ -10,7 +10,7 @@ exports.LoadExecuteResearchQueryAction = exports.ExecuteResearchQueryAction = vo
|
|
|
10
10
|
const global_1 = require("@memberjunction/global");
|
|
11
11
|
const actions_1 = require("@memberjunction/actions");
|
|
12
12
|
const global_2 = require("@memberjunction/global");
|
|
13
|
-
const
|
|
13
|
+
const global_3 = require("@memberjunction/global");
|
|
14
14
|
const ai_prompts_1 = require("@memberjunction/ai-prompts");
|
|
15
15
|
const ai_core_plus_1 = require("@memberjunction/ai-core-plus");
|
|
16
16
|
const aiengine_1 = require("@memberjunction/aiengine");
|
|
@@ -84,57 +84,56 @@ let ExecuteResearchQueryAction = class ExecuteResearchQueryAction extends action
|
|
|
84
84
|
/\bSHUTDOWN\b/i,
|
|
85
85
|
/\bDBCC\b/i,
|
|
86
86
|
/--\+/, // SQL hints
|
|
87
|
-
|
|
87
|
+
/\/\*\+/, // Oracle-style hints
|
|
88
88
|
];
|
|
89
89
|
async InternalRunAction(params) {
|
|
90
90
|
const startTime = Date.now();
|
|
91
91
|
try {
|
|
92
92
|
// Extract parameters
|
|
93
|
-
const query = this.getStringParam(params,
|
|
93
|
+
const query = this.getStringParam(params, 'query');
|
|
94
94
|
if (!query) {
|
|
95
95
|
return {
|
|
96
96
|
Success: false,
|
|
97
|
-
ResultCode:
|
|
98
|
-
Message:
|
|
97
|
+
ResultCode: 'MISSING_QUERY',
|
|
98
|
+
Message: 'Query parameter is required',
|
|
99
99
|
};
|
|
100
100
|
}
|
|
101
|
-
const maxRows = this.getNumericParam(params,
|
|
102
|
-
const timeout = this.getNumericParam(params,
|
|
103
|
-
const dataFormat = this.getStringParam(params,
|
|
104
|
-
const analysisRequest = this.getStringParam(params,
|
|
105
|
-
const returnType = this.getStringParam(params,
|
|
106
|
-
|
|
107
|
-
const columnMaxLength = this.getNumericParam(params, "columnmaxlength", 50); // Default: 50 chars, 0 = no limit
|
|
101
|
+
const maxRows = this.getNumericParam(params, 'maxrows', 1000);
|
|
102
|
+
const timeout = this.getNumericParam(params, 'timeout', 30);
|
|
103
|
+
const dataFormat = this.getStringParam(params, 'dataformat') || 'csv';
|
|
104
|
+
const analysisRequest = this.getStringParam(params, 'analysisrequest');
|
|
105
|
+
const returnType = this.getStringParam(params, 'returntype') || (analysisRequest ? 'data and analysis' : 'data only');
|
|
106
|
+
const columnMaxLength = this.getNumericParam(params, 'columnmaxlength', 50); // Default: 50 chars, 0 = no limit
|
|
108
107
|
// Validate query security
|
|
109
108
|
const securityValidation = this.validateQuerySecurity(query);
|
|
110
109
|
if (!securityValidation.isValid) {
|
|
111
110
|
return {
|
|
112
111
|
Success: false,
|
|
113
112
|
ResultCode: securityValidation.resultCode,
|
|
114
|
-
Message: securityValidation.message
|
|
113
|
+
Message: securityValidation.message,
|
|
115
114
|
};
|
|
116
115
|
}
|
|
117
116
|
// Ensure query returns limited results
|
|
118
117
|
const limitedQuery = this.ensureRowLimit(query, maxRows);
|
|
119
|
-
const dataProvider =
|
|
118
|
+
const dataProvider = global_3.BaseEntity.Provider;
|
|
120
119
|
try {
|
|
121
120
|
// Execute the query with timeout
|
|
122
121
|
const queryStartTime = Date.now();
|
|
123
|
-
const results = await Promise.race([
|
|
122
|
+
const results = (await Promise.race([
|
|
124
123
|
dataProvider.ExecuteSQL(limitedQuery, null, {
|
|
125
124
|
description: 'Execute Research Query',
|
|
126
125
|
ignoreLogging: false,
|
|
127
|
-
isMutation: false
|
|
126
|
+
isMutation: false,
|
|
128
127
|
}, params.ContextUser),
|
|
129
|
-
new Promise((_, reject) => setTimeout(() => reject(new Error('Query timeout exceeded')), timeout * 1000))
|
|
130
|
-
]);
|
|
128
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Query timeout exceeded')), timeout * 1000)),
|
|
129
|
+
]));
|
|
131
130
|
const executionTimeMs = Date.now() - queryStartTime;
|
|
132
131
|
// Get column metadata
|
|
133
132
|
const columns = results && results.columns
|
|
134
133
|
? Object.entries(results.columns).map(([name, col]) => ({
|
|
135
134
|
ColumnName: name,
|
|
136
135
|
DataType: col.type?.name || 'unknown',
|
|
137
|
-
IsNullable: col.nullable !== false
|
|
136
|
+
IsNullable: col.nullable !== false,
|
|
138
137
|
}))
|
|
139
138
|
: [];
|
|
140
139
|
const wasTruncated = results.length >= maxRows;
|
|
@@ -146,9 +145,7 @@ let ExecuteResearchQueryAction = class ExecuteResearchQueryAction extends action
|
|
|
146
145
|
formattedData = this.formatAsCSV(results, columnMaxLength);
|
|
147
146
|
}
|
|
148
147
|
else if (dataFormat === 'json') {
|
|
149
|
-
const trimmedResults = columnMaxLength > 0
|
|
150
|
-
? this.trimResultColumns(results, columnMaxLength)
|
|
151
|
-
: results;
|
|
148
|
+
const trimmedResults = columnMaxLength > 0 ? this.trimResultColumns(results, columnMaxLength) : results;
|
|
152
149
|
formattedData = JSON.stringify(trimmedResults, null, 2);
|
|
153
150
|
}
|
|
154
151
|
// Perform analysis if requested
|
|
@@ -164,7 +161,7 @@ let ExecuteResearchQueryAction = class ExecuteResearchQueryAction extends action
|
|
|
164
161
|
analysis = analysisResult.analysis;
|
|
165
162
|
}
|
|
166
163
|
else {
|
|
167
|
-
(0,
|
|
164
|
+
(0, global_3.LogError)(`Failed to analyze query data: ${analysisResult.error}`);
|
|
168
165
|
}
|
|
169
166
|
}
|
|
170
167
|
}
|
|
@@ -174,7 +171,7 @@ let ExecuteResearchQueryAction = class ExecuteResearchQueryAction extends action
|
|
|
174
171
|
// Build result object based on return type
|
|
175
172
|
const resultData = {
|
|
176
173
|
Success: true,
|
|
177
|
-
ResultCode:
|
|
174
|
+
ResultCode: 'SUCCESS',
|
|
178
175
|
Message: message,
|
|
179
176
|
Columns: columns,
|
|
180
177
|
RowCount: results.length,
|
|
@@ -182,7 +179,7 @@ let ExecuteResearchQueryAction = class ExecuteResearchQueryAction extends action
|
|
|
182
179
|
TotalTimeMs: totalExecutionTime,
|
|
183
180
|
WasTruncated: wasTruncated,
|
|
184
181
|
ValidationWarnings: warnings,
|
|
185
|
-
Query: limitedQuery
|
|
182
|
+
Query: limitedQuery,
|
|
186
183
|
};
|
|
187
184
|
// Add data and/or analysis to results based on returnType
|
|
188
185
|
if (returnType === 'data only' || returnType === 'data and analysis') {
|
|
@@ -198,25 +195,24 @@ let ExecuteResearchQueryAction = class ExecuteResearchQueryAction extends action
|
|
|
198
195
|
if (queryError.message && queryError.message.includes('timeout')) {
|
|
199
196
|
return {
|
|
200
197
|
Success: false,
|
|
201
|
-
ResultCode:
|
|
202
|
-
Message: `Query execution exceeded ${timeout} second timeout. Consider optimizing query or increasing timeout parameter
|
|
198
|
+
ResultCode: 'QUERY_TIMEOUT',
|
|
199
|
+
Message: `Query execution exceeded ${timeout} second timeout. Consider optimizing query or increasing timeout parameter.`,
|
|
203
200
|
};
|
|
204
201
|
}
|
|
205
202
|
// Handle permission errors
|
|
206
203
|
if (queryError.message &&
|
|
207
|
-
(queryError.message.toLowerCase().includes('permission') ||
|
|
208
|
-
queryError.message.toLowerCase().includes('denied'))) {
|
|
204
|
+
(queryError.message.toLowerCase().includes('permission') || queryError.message.toLowerCase().includes('denied'))) {
|
|
209
205
|
return {
|
|
210
206
|
Success: false,
|
|
211
|
-
ResultCode:
|
|
212
|
-
Message: `Insufficient permissions to execute query: ${queryError.message}
|
|
207
|
+
ResultCode: 'PERMISSION_DENIED',
|
|
208
|
+
Message: `Insufficient permissions to execute query: ${queryError.message}`,
|
|
213
209
|
};
|
|
214
210
|
}
|
|
215
211
|
// Handle other database errors
|
|
216
212
|
return {
|
|
217
213
|
Success: false,
|
|
218
|
-
ResultCode:
|
|
219
|
-
Message: `Database error occurred: ${queryError.message || String(queryError)}
|
|
214
|
+
ResultCode: 'DATABASE_ERROR',
|
|
215
|
+
Message: `Database error occurred: ${queryError.message || String(queryError)}`,
|
|
220
216
|
};
|
|
221
217
|
}
|
|
222
218
|
}
|
|
@@ -224,8 +220,8 @@ let ExecuteResearchQueryAction = class ExecuteResearchQueryAction extends action
|
|
|
224
220
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
225
221
|
return {
|
|
226
222
|
Success: false,
|
|
227
|
-
ResultCode:
|
|
228
|
-
Message: `Query execution failed: ${errorMessage}
|
|
223
|
+
ResultCode: 'QUERY_EXECUTION_FAILED',
|
|
224
|
+
Message: `Query execution failed: ${errorMessage}`,
|
|
229
225
|
};
|
|
230
226
|
}
|
|
231
227
|
}
|
|
@@ -239,19 +235,22 @@ let ExecuteResearchQueryAction = class ExecuteResearchQueryAction extends action
|
|
|
239
235
|
return {
|
|
240
236
|
isValid: false,
|
|
241
237
|
message: `Query contains potentially dangerous operation: ${pattern.source}. Only SELECT queries are allowed.`,
|
|
242
|
-
resultCode: 'DANGEROUS_QUERY'
|
|
238
|
+
resultCode: 'DANGEROUS_QUERY',
|
|
243
239
|
};
|
|
244
240
|
}
|
|
245
241
|
}
|
|
246
242
|
// Check if query starts with SELECT (allowing for whitespace and comments)
|
|
247
243
|
const trimmedQuery = query.trim();
|
|
248
|
-
const cleanQuery = trimmedQuery
|
|
249
|
-
|
|
250
|
-
|
|
244
|
+
const cleanQuery = trimmedQuery
|
|
245
|
+
.replace(/^\/\*[\s\S]*?\*\//, '')
|
|
246
|
+
.replace(/^--.*$/gm, '')
|
|
247
|
+
.trim();
|
|
248
|
+
if (!cleanQuery.toUpperCase().startsWith('SELECT') && !cleanQuery.toUpperCase().startsWith('WITH')) {
|
|
249
|
+
// Allow CTEs
|
|
251
250
|
return {
|
|
252
251
|
isValid: false,
|
|
253
252
|
message: 'Only SELECT queries are allowed. Query must start with SELECT or WITH (for Common Table Expressions).',
|
|
254
|
-
resultCode: 'NOT_SELECT_STATEMENT'
|
|
253
|
+
resultCode: 'NOT_SELECT_STATEMENT',
|
|
255
254
|
};
|
|
256
255
|
}
|
|
257
256
|
return { isValid: true };
|
|
@@ -310,7 +309,7 @@ let ExecuteResearchQueryAction = class ExecuteResearchQueryAction extends action
|
|
|
310
309
|
const headers = Object.keys(results[0]);
|
|
311
310
|
const csvRows = [this.formatCSVRow(headers)];
|
|
312
311
|
for (const row of results) {
|
|
313
|
-
const values = headers.map(header => {
|
|
312
|
+
const values = headers.map((header) => {
|
|
314
313
|
let value = row[header];
|
|
315
314
|
// Apply column length limit if specified
|
|
316
315
|
if (columnMaxLength > 0 && value != null) {
|
|
@@ -329,7 +328,7 @@ let ExecuteResearchQueryAction = class ExecuteResearchQueryAction extends action
|
|
|
329
328
|
* Formats a single CSV row (for headers)
|
|
330
329
|
*/
|
|
331
330
|
formatCSVRow(values) {
|
|
332
|
-
return values.map(value => this.formatCSVValue(value)).join(',');
|
|
331
|
+
return values.map((value) => this.formatCSVValue(value)).join(',');
|
|
333
332
|
}
|
|
334
333
|
/**
|
|
335
334
|
* Formats a single CSV value with proper escaping
|
|
@@ -356,7 +355,7 @@ let ExecuteResearchQueryAction = class ExecuteResearchQueryAction extends action
|
|
|
356
355
|
* @returns New array with trimmed values
|
|
357
356
|
*/
|
|
358
357
|
trimResultColumns(results, maxLength) {
|
|
359
|
-
return results.map(row => {
|
|
358
|
+
return results.map((row) => {
|
|
360
359
|
const trimmedRow = {};
|
|
361
360
|
for (const [key, value] of Object.entries(row)) {
|
|
362
361
|
if (value != null && typeof value === 'string' && value.length > maxLength) {
|
|
@@ -381,7 +380,7 @@ let ExecuteResearchQueryAction = class ExecuteResearchQueryAction extends action
|
|
|
381
380
|
if (!prompt) {
|
|
382
381
|
return {
|
|
383
382
|
success: false,
|
|
384
|
-
error: "Prompt 'Analyze Query Data' not found. Ensure metadata has been synced."
|
|
383
|
+
error: "Prompt 'Analyze Query Data' not found. Ensure metadata has been synced.",
|
|
385
384
|
};
|
|
386
385
|
}
|
|
387
386
|
// Format data as CSV for more efficient token usage
|
|
@@ -394,7 +393,7 @@ let ExecuteResearchQueryAction = class ExecuteResearchQueryAction extends action
|
|
|
394
393
|
data: dataCSV,
|
|
395
394
|
columns: columns,
|
|
396
395
|
rowCount: results.length,
|
|
397
|
-
analysisRequest: analysisRequest
|
|
396
|
+
analysisRequest: analysisRequest,
|
|
398
397
|
};
|
|
399
398
|
promptParams.contextUser = params.ContextUser;
|
|
400
399
|
// Execute the prompt
|
|
@@ -403,18 +402,18 @@ let ExecuteResearchQueryAction = class ExecuteResearchQueryAction extends action
|
|
|
403
402
|
if (!result.success) {
|
|
404
403
|
return {
|
|
405
404
|
success: false,
|
|
406
|
-
error: result.errorMessage ||
|
|
405
|
+
error: result.errorMessage || 'Prompt execution failed',
|
|
407
406
|
};
|
|
408
407
|
}
|
|
409
408
|
return {
|
|
410
409
|
success: true,
|
|
411
|
-
analysis: result.result?.analysis || String(result.result)
|
|
410
|
+
analysis: result.result?.analysis || String(result.result),
|
|
412
411
|
};
|
|
413
412
|
}
|
|
414
413
|
catch (error) {
|
|
415
414
|
return {
|
|
416
415
|
success: false,
|
|
417
|
-
error: error instanceof Error ? error.message : String(error)
|
|
416
|
+
error: error instanceof Error ? error.message : String(error),
|
|
418
417
|
};
|
|
419
418
|
}
|
|
420
419
|
}
|
|
@@ -422,23 +421,20 @@ let ExecuteResearchQueryAction = class ExecuteResearchQueryAction extends action
|
|
|
422
421
|
* Get prompt by name and category from AIEngine
|
|
423
422
|
*/
|
|
424
423
|
getPromptByNameAndCategory(name, category) {
|
|
425
|
-
return aiengine_1.AIEngine.Instance.Prompts.find(p => p.Name.trim().toLowerCase() === name.trim().toLowerCase() &&
|
|
426
|
-
p.Category?.trim().toLowerCase() === category?.trim().toLowerCase());
|
|
424
|
+
return aiengine_1.AIEngine.Instance.Prompts.find((p) => p.Name.trim().toLowerCase() === name.trim().toLowerCase() && p.Category?.trim().toLowerCase() === category?.trim().toLowerCase());
|
|
427
425
|
}
|
|
428
426
|
/**
|
|
429
427
|
* Helper to get string parameter value
|
|
430
428
|
*/
|
|
431
429
|
getStringParam(params, paramName) {
|
|
432
|
-
const param = params.Params.find(p => p.Name.toLowerCase() === paramName.toLowerCase() &&
|
|
433
|
-
p.Type === 'Input');
|
|
430
|
+
const param = params.Params.find((p) => p.Name.toLowerCase() === paramName.toLowerCase() && p.Type === 'Input');
|
|
434
431
|
return param?.Value ? String(param.Value) : undefined;
|
|
435
432
|
}
|
|
436
433
|
/**
|
|
437
434
|
* Helper to get numeric parameter value
|
|
438
435
|
*/
|
|
439
436
|
getNumericParam(params, paramName, defaultValue) {
|
|
440
|
-
const param = params.Params.find(p => p.Name.toLowerCase() === paramName.toLowerCase() &&
|
|
441
|
-
p.Type === 'Input');
|
|
437
|
+
const param = params.Params.find((p) => p.Name.toLowerCase() === paramName.toLowerCase() && p.Type === 'Input');
|
|
442
438
|
if (param?.Value != null) {
|
|
443
439
|
const num = Number(param.Value);
|
|
444
440
|
return isNaN(num) ? defaultValue : num;
|
|
@@ -508,13 +504,13 @@ let ExecuteResearchQueryAction = class ExecuteResearchQueryAction extends action
|
|
|
508
504
|
};
|
|
509
505
|
exports.ExecuteResearchQueryAction = ExecuteResearchQueryAction;
|
|
510
506
|
exports.ExecuteResearchQueryAction = ExecuteResearchQueryAction = __decorate([
|
|
511
|
-
(0, global_1.RegisterClass)(actions_1.BaseAction,
|
|
507
|
+
(0, global_1.RegisterClass)(actions_1.BaseAction, 'Execute Research Query')
|
|
512
508
|
], ExecuteResearchQueryAction);
|
|
513
509
|
/**
|
|
514
510
|
* Load function to ensure the class is registered and not tree-shaken
|
|
515
511
|
*/
|
|
516
512
|
function LoadExecuteResearchQueryAction() {
|
|
517
|
-
global_2.MJGlobal.Instance.ClassFactory.GetRegistration(actions_1.BaseAction,
|
|
513
|
+
global_2.MJGlobal.Instance.ClassFactory.GetRegistration(actions_1.BaseAction, 'Execute Research Query');
|
|
518
514
|
}
|
|
519
515
|
exports.LoadExecuteResearchQueryAction = LoadExecuteResearchQueryAction;
|
|
520
516
|
//# sourceMappingURL=execute-research-query.action.js.map
|