@memberjunction/server 2.111.1 → 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/agents/skip-agent.d.ts +4 -4
- package/dist/agents/skip-agent.d.ts.map +1 -1
- package/dist/agents/skip-agent.js +808 -951
- package/dist/agents/skip-agent.js.map +1 -1
- package/dist/agents/skip-sdk.d.ts +1 -1
- package/dist/agents/skip-sdk.d.ts.map +1 -1
- package/dist/agents/skip-sdk.js +53 -43
- package/dist/agents/skip-sdk.js.map +1 -1
- package/dist/apolloServer/index.js +1 -1
- package/dist/auth/AuthProviderFactory.d.ts +1 -1
- package/dist/auth/AuthProviderFactory.d.ts.map +1 -1
- package/dist/auth/AuthProviderFactory.js +1 -3
- package/dist/auth/AuthProviderFactory.js.map +1 -1
- package/dist/auth/BaseAuthProvider.d.ts +1 -1
- package/dist/auth/BaseAuthProvider.d.ts.map +1 -1
- package/dist/auth/BaseAuthProvider.js +3 -2
- package/dist/auth/BaseAuthProvider.js.map +1 -1
- package/dist/auth/IAuthProvider.d.ts +1 -1
- package/dist/auth/IAuthProvider.d.ts.map +1 -1
- package/dist/auth/exampleNewUserSubClass.d.ts.map +1 -1
- package/dist/auth/exampleNewUserSubClass.js +1 -1
- package/dist/auth/exampleNewUserSubClass.js.map +1 -1
- package/dist/auth/index.d.ts +1 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +6 -6
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/initializeProviders.js +1 -1
- package/dist/auth/initializeProviders.js.map +1 -1
- package/dist/auth/newUsers.d.ts +1 -1
- package/dist/auth/newUsers.d.ts.map +1 -1
- package/dist/auth/newUsers.js +7 -7
- package/dist/auth/newUsers.js.map +1 -1
- package/dist/auth/providers/Auth0Provider.d.ts +1 -1
- package/dist/auth/providers/Auth0Provider.d.ts.map +1 -1
- package/dist/auth/providers/Auth0Provider.js +1 -1
- package/dist/auth/providers/Auth0Provider.js.map +1 -1
- package/dist/auth/providers/CognitoProvider.d.ts +1 -1
- package/dist/auth/providers/CognitoProvider.d.ts.map +1 -1
- package/dist/auth/providers/CognitoProvider.js +3 -6
- package/dist/auth/providers/CognitoProvider.js.map +1 -1
- package/dist/auth/providers/GoogleProvider.d.ts +1 -1
- package/dist/auth/providers/GoogleProvider.d.ts.map +1 -1
- package/dist/auth/providers/GoogleProvider.js +1 -1
- package/dist/auth/providers/GoogleProvider.js.map +1 -1
- package/dist/auth/providers/MSALProvider.d.ts +1 -1
- package/dist/auth/providers/MSALProvider.d.ts.map +1 -1
- package/dist/auth/providers/MSALProvider.js +1 -1
- package/dist/auth/providers/MSALProvider.js.map +1 -1
- package/dist/auth/providers/OktaProvider.d.ts +1 -1
- package/dist/auth/providers/OktaProvider.d.ts.map +1 -1
- package/dist/auth/providers/OktaProvider.js +1 -1
- package/dist/auth/providers/OktaProvider.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +22 -10
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +1 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +9 -7
- package/dist/context.js.map +1 -1
- package/dist/entitySubclasses/entityPermissions.server.d.ts +1 -1
- package/dist/entitySubclasses/entityPermissions.server.d.ts.map +1 -1
- package/dist/entitySubclasses/entityPermissions.server.js +1 -1
- package/dist/entitySubclasses/entityPermissions.server.js.map +1 -1
- package/dist/generated/generated.d.ts +648 -648
- package/dist/generated/generated.d.ts.map +1 -1
- package/dist/generated/generated.js +2986 -1133
- package/dist/generated/generated.js.map +1 -1
- package/dist/generic/KeyInputOutputTypes.d.ts +1 -1
- package/dist/generic/KeyInputOutputTypes.d.ts.map +1 -1
- package/dist/generic/KeyInputOutputTypes.js +1 -1
- package/dist/generic/KeyInputOutputTypes.js.map +1 -1
- package/dist/generic/ResolverBase.d.ts +1 -1
- package/dist/generic/ResolverBase.d.ts.map +1 -1
- package/dist/generic/ResolverBase.js +15 -10
- package/dist/generic/ResolverBase.js.map +1 -1
- package/dist/generic/RunViewResolver.d.ts +1 -1
- package/dist/generic/RunViewResolver.d.ts.map +1 -1
- package/dist/generic/RunViewResolver.js +15 -15
- package/dist/generic/RunViewResolver.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -9
- package/dist/index.js.map +1 -1
- package/dist/resolvers/ActionResolver.d.ts +2 -2
- package/dist/resolvers/ActionResolver.d.ts.map +1 -1
- package/dist/resolvers/ActionResolver.js +28 -30
- package/dist/resolvers/ActionResolver.js.map +1 -1
- package/dist/resolvers/AskSkipResolver.d.ts +2 -2
- package/dist/resolvers/AskSkipResolver.d.ts.map +1 -1
- package/dist/resolvers/AskSkipResolver.js +60 -50
- package/dist/resolvers/AskSkipResolver.js.map +1 -1
- package/dist/resolvers/ComponentRegistryResolver.d.ts.map +1 -1
- package/dist/resolvers/ComponentRegistryResolver.js +36 -38
- package/dist/resolvers/ComponentRegistryResolver.js.map +1 -1
- package/dist/resolvers/CreateQueryResolver.d.ts +1 -1
- package/dist/resolvers/CreateQueryResolver.d.ts.map +1 -1
- package/dist/resolvers/CreateQueryResolver.js +43 -40
- package/dist/resolvers/CreateQueryResolver.js.map +1 -1
- package/dist/resolvers/DatasetResolver.d.ts.map +1 -1
- package/dist/resolvers/DatasetResolver.js +1 -1
- package/dist/resolvers/DatasetResolver.js.map +1 -1
- package/dist/resolvers/EntityRecordNameResolver.d.ts +1 -1
- package/dist/resolvers/EntityRecordNameResolver.d.ts.map +1 -1
- package/dist/resolvers/EntityRecordNameResolver.js +1 -1
- package/dist/resolvers/EntityRecordNameResolver.js.map +1 -1
- package/dist/resolvers/EntityResolver.d.ts.map +1 -1
- package/dist/resolvers/EntityResolver.js +1 -1
- package/dist/resolvers/EntityResolver.js.map +1 -1
- package/dist/resolvers/FileCategoryResolver.js +1 -1
- package/dist/resolvers/FileCategoryResolver.js.map +1 -1
- package/dist/resolvers/FileResolver.js +1 -1
- package/dist/resolvers/FileResolver.js.map +1 -1
- package/dist/resolvers/GetDataContextDataResolver.d.ts +1 -1
- package/dist/resolvers/GetDataContextDataResolver.d.ts.map +1 -1
- package/dist/resolvers/GetDataContextDataResolver.js +5 -5
- package/dist/resolvers/GetDataContextDataResolver.js.map +1 -1
- package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
- package/dist/resolvers/GetDataResolver.js +8 -6
- package/dist/resolvers/GetDataResolver.js.map +1 -1
- package/dist/resolvers/MergeRecordsResolver.d.ts +3 -3
- package/dist/resolvers/MergeRecordsResolver.d.ts.map +1 -1
- package/dist/resolvers/MergeRecordsResolver.js +3 -3
- package/dist/resolvers/MergeRecordsResolver.js.map +1 -1
- package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts +1 -1
- package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts.map +1 -1
- package/dist/resolvers/PotentialDuplicateRecordResolver.js +1 -1
- package/dist/resolvers/PotentialDuplicateRecordResolver.js.map +1 -1
- package/dist/resolvers/QueryResolver.d.ts.map +1 -1
- package/dist/resolvers/QueryResolver.js +11 -11
- package/dist/resolvers/QueryResolver.js.map +1 -1
- package/dist/resolvers/ReportResolver.js +1 -1
- package/dist/resolvers/ReportResolver.js.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.js +27 -28
- package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
- package/dist/resolvers/RunAIPromptResolver.d.ts.map +1 -1
- package/dist/resolvers/RunAIPromptResolver.js +31 -31
- package/dist/resolvers/RunAIPromptResolver.js.map +1 -1
- package/dist/resolvers/RunTemplateResolver.d.ts.map +1 -1
- package/dist/resolvers/RunTemplateResolver.js +9 -9
- package/dist/resolvers/RunTemplateResolver.js.map +1 -1
- package/dist/resolvers/SqlLoggingConfigResolver.d.ts.map +1 -1
- package/dist/resolvers/SqlLoggingConfigResolver.js +10 -10
- package/dist/resolvers/SqlLoggingConfigResolver.js.map +1 -1
- package/dist/resolvers/SyncDataResolver.d.ts +1 -1
- package/dist/resolvers/SyncDataResolver.d.ts.map +1 -1
- package/dist/resolvers/SyncDataResolver.js +15 -14
- package/dist/resolvers/SyncDataResolver.js.map +1 -1
- package/dist/resolvers/SyncRolesUsersResolver.d.ts +1 -1
- package/dist/resolvers/SyncRolesUsersResolver.d.ts.map +1 -1
- package/dist/resolvers/SyncRolesUsersResolver.js +48 -44
- package/dist/resolvers/SyncRolesUsersResolver.js.map +1 -1
- package/dist/resolvers/TaskResolver.d.ts.map +1 -1
- package/dist/resolvers/TaskResolver.js +7 -7
- package/dist/resolvers/TaskResolver.js.map +1 -1
- package/dist/resolvers/TransactionGroupResolver.d.ts +1 -1
- package/dist/resolvers/TransactionGroupResolver.d.ts.map +1 -1
- package/dist/resolvers/TransactionGroupResolver.js +12 -12
- package/dist/resolvers/TransactionGroupResolver.js.map +1 -1
- package/dist/resolvers/UserFavoriteResolver.d.ts +1 -1
- package/dist/resolvers/UserFavoriteResolver.d.ts.map +1 -1
- package/dist/resolvers/UserFavoriteResolver.js +1 -1
- package/dist/resolvers/UserFavoriteResolver.js.map +1 -1
- package/dist/resolvers/UserViewResolver.d.ts.map +1 -1
- package/dist/resolvers/UserViewResolver.js.map +1 -1
- package/dist/rest/EntityCRUDHandler.d.ts +1 -1
- package/dist/rest/EntityCRUDHandler.d.ts.map +1 -1
- package/dist/rest/EntityCRUDHandler.js +14 -16
- package/dist/rest/EntityCRUDHandler.js.map +1 -1
- package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
- package/dist/rest/RESTEndpointHandler.js +23 -25
- package/dist/rest/RESTEndpointHandler.js.map +1 -1
- package/dist/rest/ViewOperationsHandler.d.ts +1 -1
- package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
- package/dist/rest/ViewOperationsHandler.js +17 -21
- package/dist/rest/ViewOperationsHandler.js.map +1 -1
- package/dist/scheduler/LearningCycleScheduler.d.ts.map +1 -1
- package/dist/scheduler/LearningCycleScheduler.js.map +1 -1
- package/dist/services/ScheduledJobsService.d.ts.map +1 -1
- package/dist/services/ScheduledJobsService.js +4 -6
- package/dist/services/ScheduledJobsService.js.map +1 -1
- package/dist/services/TaskOrchestrator.d.ts +1 -1
- package/dist/services/TaskOrchestrator.d.ts.map +1 -1
- package/dist/services/TaskOrchestrator.js +30 -30
- package/dist/services/TaskOrchestrator.js.map +1 -1
- package/dist/types.d.ts +3 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -1
- package/dist/types.js.map +1 -1
- package/dist/util.d.ts +1 -1
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +2 -2
- package/dist/util.js.map +1 -1
- package/package.json +36 -37
- package/src/agents/skip-agent.ts +1067 -1200
- package/src/agents/skip-sdk.ts +877 -851
- package/src/apolloServer/index.ts +2 -2
- package/src/auth/AuthProviderFactory.ts +8 -14
- package/src/auth/BaseAuthProvider.ts +5 -4
- package/src/auth/IAuthProvider.ts +2 -2
- package/src/auth/exampleNewUserSubClass.ts +9 -2
- package/src/auth/index.ts +31 -26
- package/src/auth/initializeProviders.ts +3 -3
- package/src/auth/newUsers.ts +166 -134
- package/src/auth/providers/Auth0Provider.ts +5 -5
- package/src/auth/providers/CognitoProvider.ts +7 -10
- package/src/auth/providers/GoogleProvider.ts +4 -5
- package/src/auth/providers/MSALProvider.ts +5 -5
- package/src/auth/providers/OktaProvider.ts +6 -7
- package/src/config.ts +63 -54
- package/src/context.ts +42 -30
- package/src/entitySubclasses/entityPermissions.server.ts +3 -3
- package/src/generated/generated.ts +48130 -39930
- package/src/generic/KeyInputOutputTypes.ts +3 -6
- package/src/generic/ResolverBase.ts +119 -78
- package/src/generic/RunViewResolver.ts +27 -23
- package/src/index.ts +66 -42
- package/src/resolvers/ActionResolver.ts +46 -57
- package/src/resolvers/AskSkipResolver.ts +607 -533
- package/src/resolvers/ComponentRegistryResolver.ts +547 -562
- package/src/resolvers/CreateQueryResolver.ts +683 -655
- package/src/resolvers/DatasetResolver.ts +5 -6
- package/src/resolvers/EntityCommunicationsResolver.ts +1 -1
- package/src/resolvers/EntityRecordNameResolver.ts +9 -5
- package/src/resolvers/EntityResolver.ts +9 -7
- package/src/resolvers/FileCategoryResolver.ts +2 -2
- package/src/resolvers/FileResolver.ts +4 -4
- package/src/resolvers/GetDataContextDataResolver.ts +106 -118
- package/src/resolvers/GetDataResolver.ts +194 -205
- package/src/resolvers/MergeRecordsResolver.ts +5 -5
- package/src/resolvers/PotentialDuplicateRecordResolver.ts +1 -1
- package/src/resolvers/QueryResolver.ts +95 -78
- package/src/resolvers/ReportResolver.ts +2 -2
- package/src/resolvers/RunAIAgentResolver.ts +818 -828
- package/src/resolvers/RunAIPromptResolver.ts +693 -709
- package/src/resolvers/RunTemplateResolver.ts +105 -103
- package/src/resolvers/SqlLoggingConfigResolver.ts +69 -72
- package/src/resolvers/SyncDataResolver.ts +386 -352
- package/src/resolvers/SyncRolesUsersResolver.ts +387 -350
- package/src/resolvers/TaskResolver.ts +110 -115
- package/src/resolvers/TransactionGroupResolver.ts +143 -138
- package/src/resolvers/UserFavoriteResolver.ts +17 -8
- package/src/resolvers/UserViewResolver.ts +17 -12
- package/src/rest/EntityCRUDHandler.ts +291 -268
- package/src/rest/RESTEndpointHandler.ts +782 -776
- package/src/rest/ViewOperationsHandler.ts +191 -195
- package/src/scheduler/LearningCycleScheduler.ts +8 -52
- package/src/services/ScheduledJobsService.ts +129 -132
- package/src/services/TaskOrchestrator.ts +792 -776
- package/src/types.ts +15 -9
- package/src/util.ts +112 -109
|
@@ -1,207 +1,203 @@
|
|
|
1
|
-
import {
|
|
2
|
-
LogError, Metadata, RunView, RunViewParams,
|
|
3
|
-
RunViewResult, UserInfo
|
|
4
|
-
} from '@memberjunction/core';
|
|
1
|
+
import { LogError, Metadata, RunView, RunViewParams, RunViewResult, UserInfo } from '@memberjunction/global';
|
|
5
2
|
|
|
6
3
|
/**
|
|
7
4
|
* View Operations Implementation for REST endpoints
|
|
8
5
|
* These functions handle running views through the REST API
|
|
9
6
|
*/
|
|
10
7
|
export class ViewOperationsHandler {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
8
|
+
/**
|
|
9
|
+
* Run a view and return results
|
|
10
|
+
*/
|
|
11
|
+
static async runView(params: RunViewParams, user: UserInfo): Promise<{ success: boolean; result?: RunViewResult; error?: string }> {
|
|
12
|
+
try {
|
|
13
|
+
// Validate entity exists
|
|
14
|
+
const md = new Metadata();
|
|
15
|
+
const entity = md.Entities.find((e) => e.Name === params.EntityName);
|
|
16
|
+
if (!entity) {
|
|
17
|
+
return {
|
|
18
|
+
success: false,
|
|
19
|
+
error: `Entity '${params.EntityName}' not found`,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Check read permission
|
|
24
|
+
const permissions = entity.GetUserPermisions(user);
|
|
25
|
+
if (!permissions.CanRead) {
|
|
26
|
+
return {
|
|
27
|
+
success: false,
|
|
28
|
+
error: `User ${user.Name} does not have permission to read ${params.EntityName} records`,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Sanitize and validate parameters
|
|
33
|
+
this.sanitizeRunViewParams(params);
|
|
34
|
+
|
|
35
|
+
// Execute the view
|
|
36
|
+
const runView = new RunView();
|
|
37
|
+
const result = await runView.RunView(params, user);
|
|
38
|
+
|
|
39
|
+
return { success: true, result };
|
|
40
|
+
} catch (error) {
|
|
41
|
+
LogError(error);
|
|
42
|
+
return { success: false, error: (error as Error)?.message || 'Unknown error' };
|
|
47
43
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
if (!permissions.CanRead) {
|
|
69
|
-
return {
|
|
70
|
-
success: false,
|
|
71
|
-
error: `User ${user.Name} does not have permission to read ${params.EntityName} records`
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// Sanitize parameters
|
|
76
|
-
this.sanitizeRunViewParams(params);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// Execute the views
|
|
80
|
-
const runView = new RunView();
|
|
81
|
-
const results = await runView.RunViews(paramsArray, user);
|
|
82
|
-
|
|
83
|
-
return { success: true, results };
|
|
84
|
-
} catch (error) {
|
|
85
|
-
LogError(error);
|
|
86
|
-
return { success: false, error: (error as Error)?.message || 'Unknown error' };
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Run multiple views in batch
|
|
48
|
+
*/
|
|
49
|
+
static async runViews(
|
|
50
|
+
paramsArray: RunViewParams[],
|
|
51
|
+
user: UserInfo
|
|
52
|
+
): Promise<{ success: boolean; results?: RunViewResult[]; error?: string }> {
|
|
53
|
+
try {
|
|
54
|
+
// Validate and sanitize each set of parameters
|
|
55
|
+
const md = new Metadata();
|
|
56
|
+
for (const params of paramsArray) {
|
|
57
|
+
// Validate entity exists
|
|
58
|
+
const entity = md.Entities.find((e) => e.Name === params.EntityName);
|
|
59
|
+
if (!entity) {
|
|
60
|
+
return {
|
|
61
|
+
success: false,
|
|
62
|
+
error: `Entity '${params.EntityName}' not found`,
|
|
63
|
+
};
|
|
87
64
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
const md = new Metadata();
|
|
97
|
-
const entity = md.Entities.find(e => e.Name === params.EntityName);
|
|
98
|
-
if (!entity) {
|
|
99
|
-
throw new Error(`Entity '${params.EntityName}' not found`);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
const permissions = entity.GetUserPermisions(user);
|
|
103
|
-
if (!permissions.CanRead) {
|
|
104
|
-
throw new Error(`User ${user.Name} does not have permission to read ${params.EntityName} records`);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
// Sanitize and validate parameters
|
|
108
|
-
this.sanitizeRunViewParams(params);
|
|
109
|
-
|
|
110
|
-
// Execute the view
|
|
111
|
-
const runView = new RunView();
|
|
112
|
-
return await runView.RunView(params, user);
|
|
113
|
-
} catch (error) {
|
|
114
|
-
LogError(error);
|
|
115
|
-
throw error;
|
|
65
|
+
|
|
66
|
+
// Check read permission
|
|
67
|
+
const permissions = entity.GetUserPermisions(user);
|
|
68
|
+
if (!permissions.CanRead) {
|
|
69
|
+
return {
|
|
70
|
+
success: false,
|
|
71
|
+
error: `User ${user.Name} does not have permission to read ${params.EntityName} records`,
|
|
72
|
+
};
|
|
116
73
|
}
|
|
74
|
+
|
|
75
|
+
// Sanitize parameters
|
|
76
|
+
this.sanitizeRunViewParams(params);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Execute the views
|
|
80
|
+
const runView = new RunView();
|
|
81
|
+
const results = await runView.RunViews(paramsArray, user);
|
|
82
|
+
|
|
83
|
+
return { success: true, results };
|
|
84
|
+
} catch (error) {
|
|
85
|
+
LogError(error);
|
|
86
|
+
return { success: false, error: (error as Error)?.message || 'Unknown error' };
|
|
117
87
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
ExtraFilter: `Entity = '${entityName}'`
|
|
147
|
-
};
|
|
148
|
-
|
|
149
|
-
const runView = new RunView();
|
|
150
|
-
const result = await runView.RunView(params, user);
|
|
151
|
-
|
|
152
|
-
if (!result.Success) {
|
|
153
|
-
return {
|
|
154
|
-
success: false,
|
|
155
|
-
error: result.ErrorMessage || 'Failed to retrieve views'
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
// Format the view data
|
|
160
|
-
const views = result.Results.map(view => ({
|
|
161
|
-
ID: view.ID,
|
|
162
|
-
Name: view.Name,
|
|
163
|
-
Description: view.Description,
|
|
164
|
-
IsShared: view.IsShared,
|
|
165
|
-
CreatedAt: view.CreatedAt
|
|
166
|
-
}));
|
|
167
|
-
|
|
168
|
-
return { success: true, views };
|
|
169
|
-
} catch (error) {
|
|
170
|
-
LogError(error);
|
|
171
|
-
return { success: false, error: (error as Error)?.message || 'Unknown error' };
|
|
172
|
-
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* List entities with optional filtering
|
|
92
|
+
*/
|
|
93
|
+
static async listEntities(params: RunViewParams, user: UserInfo): Promise<RunViewResult> {
|
|
94
|
+
try {
|
|
95
|
+
// Check entity exists and user has permission
|
|
96
|
+
const md = new Metadata();
|
|
97
|
+
const entity = md.Entities.find((e) => e.Name === params.EntityName);
|
|
98
|
+
if (!entity) {
|
|
99
|
+
throw new Error(`Entity '${params.EntityName}' not found`);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const permissions = entity.GetUserPermisions(user);
|
|
103
|
+
if (!permissions.CanRead) {
|
|
104
|
+
throw new Error(`User ${user.Name} does not have permission to read ${params.EntityName} records`);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Sanitize and validate parameters
|
|
108
|
+
this.sanitizeRunViewParams(params);
|
|
109
|
+
|
|
110
|
+
// Execute the view
|
|
111
|
+
const runView = new RunView();
|
|
112
|
+
return await runView.RunView(params, user);
|
|
113
|
+
} catch (error) {
|
|
114
|
+
LogError(error);
|
|
115
|
+
throw error;
|
|
173
116
|
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Get available views for an entity
|
|
121
|
+
*/
|
|
122
|
+
static async getEntityViews(entityName: string, user: UserInfo): Promise<{ success: boolean; views?: any[]; error?: string }> {
|
|
123
|
+
try {
|
|
124
|
+
// Validate entity exists
|
|
125
|
+
const md = new Metadata();
|
|
126
|
+
const entity = md.Entities.find((e) => e.Name === entityName);
|
|
127
|
+
if (!entity) {
|
|
128
|
+
return {
|
|
129
|
+
success: false,
|
|
130
|
+
error: `Entity '${entityName}' not found`,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Check read permission
|
|
135
|
+
const permissions = entity.GetUserPermisions(user);
|
|
136
|
+
if (!permissions.CanRead) {
|
|
137
|
+
return {
|
|
138
|
+
success: false,
|
|
139
|
+
error: `User ${user.Name} does not have permission to read ${entityName} records`,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// Run a view to get the available views
|
|
144
|
+
const params: RunViewParams = {
|
|
145
|
+
EntityName: 'User Views',
|
|
146
|
+
ExtraFilter: `Entity = '${entityName}'`,
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
const runView = new RunView();
|
|
150
|
+
const result = await runView.RunView(params, user);
|
|
151
|
+
|
|
152
|
+
if (!result.Success) {
|
|
153
|
+
return {
|
|
154
|
+
success: false,
|
|
155
|
+
error: result.ErrorMessage || 'Failed to retrieve views',
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// Format the view data
|
|
160
|
+
const views = result.Results.map((view) => ({
|
|
161
|
+
ID: view.ID,
|
|
162
|
+
Name: view.Name,
|
|
163
|
+
Description: view.Description,
|
|
164
|
+
IsShared: view.IsShared,
|
|
165
|
+
CreatedAt: view.CreatedAt,
|
|
166
|
+
}));
|
|
167
|
+
|
|
168
|
+
return { success: true, views };
|
|
169
|
+
} catch (error) {
|
|
170
|
+
LogError(error);
|
|
171
|
+
return { success: false, error: (error as Error)?.message || 'Unknown error' };
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Sanitize and validate RunViewParams
|
|
177
|
+
*/
|
|
178
|
+
private static sanitizeRunViewParams(params: RunViewParams): void {
|
|
179
|
+
// Ensure EntityName is provided
|
|
180
|
+
if (!params.EntityName) {
|
|
181
|
+
throw new Error('EntityName is required');
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// Convert string arrays if they came in as comma-separated strings
|
|
185
|
+
if (params.Fields && typeof params.Fields === 'string') {
|
|
186
|
+
params.Fields = (params.Fields as string).split(',');
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// Sanitize numeric values
|
|
190
|
+
if (params.MaxRows !== undefined) {
|
|
191
|
+
params.MaxRows = typeof params.MaxRows === 'string' ? parseInt(params.MaxRows as string) : params.MaxRows;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
if (params.StartRow !== undefined) {
|
|
195
|
+
params.StartRow = typeof params.StartRow === 'string' ? parseInt(params.StartRow as string) : params.StartRow;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// Default ResultType if not provided
|
|
199
|
+
if (!params.ResultType) {
|
|
200
|
+
params.ResultType = 'simple';
|
|
206
201
|
}
|
|
207
|
-
}
|
|
202
|
+
}
|
|
203
|
+
}
|