@memberjunction/server 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.
Files changed (250) hide show
  1. package/dist/agents/skip-agent.d.ts +4 -4
  2. package/dist/agents/skip-agent.d.ts.map +1 -1
  3. package/dist/agents/skip-agent.js +808 -951
  4. package/dist/agents/skip-agent.js.map +1 -1
  5. package/dist/agents/skip-sdk.d.ts +1 -1
  6. package/dist/agents/skip-sdk.d.ts.map +1 -1
  7. package/dist/agents/skip-sdk.js +53 -43
  8. package/dist/agents/skip-sdk.js.map +1 -1
  9. package/dist/apolloServer/index.js +1 -1
  10. package/dist/auth/AuthProviderFactory.d.ts +1 -1
  11. package/dist/auth/AuthProviderFactory.d.ts.map +1 -1
  12. package/dist/auth/AuthProviderFactory.js +1 -3
  13. package/dist/auth/AuthProviderFactory.js.map +1 -1
  14. package/dist/auth/BaseAuthProvider.d.ts +1 -1
  15. package/dist/auth/BaseAuthProvider.d.ts.map +1 -1
  16. package/dist/auth/BaseAuthProvider.js +3 -2
  17. package/dist/auth/BaseAuthProvider.js.map +1 -1
  18. package/dist/auth/IAuthProvider.d.ts +1 -1
  19. package/dist/auth/IAuthProvider.d.ts.map +1 -1
  20. package/dist/auth/exampleNewUserSubClass.d.ts.map +1 -1
  21. package/dist/auth/exampleNewUserSubClass.js +1 -1
  22. package/dist/auth/exampleNewUserSubClass.js.map +1 -1
  23. package/dist/auth/index.d.ts +1 -1
  24. package/dist/auth/index.d.ts.map +1 -1
  25. package/dist/auth/index.js +6 -6
  26. package/dist/auth/index.js.map +1 -1
  27. package/dist/auth/initializeProviders.js +1 -1
  28. package/dist/auth/initializeProviders.js.map +1 -1
  29. package/dist/auth/newUsers.d.ts +1 -1
  30. package/dist/auth/newUsers.d.ts.map +1 -1
  31. package/dist/auth/newUsers.js +7 -7
  32. package/dist/auth/newUsers.js.map +1 -1
  33. package/dist/auth/providers/Auth0Provider.d.ts +1 -1
  34. package/dist/auth/providers/Auth0Provider.d.ts.map +1 -1
  35. package/dist/auth/providers/Auth0Provider.js +1 -1
  36. package/dist/auth/providers/Auth0Provider.js.map +1 -1
  37. package/dist/auth/providers/CognitoProvider.d.ts +1 -1
  38. package/dist/auth/providers/CognitoProvider.d.ts.map +1 -1
  39. package/dist/auth/providers/CognitoProvider.js +3 -6
  40. package/dist/auth/providers/CognitoProvider.js.map +1 -1
  41. package/dist/auth/providers/GoogleProvider.d.ts +1 -1
  42. package/dist/auth/providers/GoogleProvider.d.ts.map +1 -1
  43. package/dist/auth/providers/GoogleProvider.js +1 -1
  44. package/dist/auth/providers/GoogleProvider.js.map +1 -1
  45. package/dist/auth/providers/MSALProvider.d.ts +1 -1
  46. package/dist/auth/providers/MSALProvider.d.ts.map +1 -1
  47. package/dist/auth/providers/MSALProvider.js +1 -1
  48. package/dist/auth/providers/MSALProvider.js.map +1 -1
  49. package/dist/auth/providers/OktaProvider.d.ts +1 -1
  50. package/dist/auth/providers/OktaProvider.d.ts.map +1 -1
  51. package/dist/auth/providers/OktaProvider.js +1 -1
  52. package/dist/auth/providers/OktaProvider.js.map +1 -1
  53. package/dist/config.d.ts.map +1 -1
  54. package/dist/config.js +22 -10
  55. package/dist/config.js.map +1 -1
  56. package/dist/context.d.ts +1 -1
  57. package/dist/context.d.ts.map +1 -1
  58. package/dist/context.js +9 -7
  59. package/dist/context.js.map +1 -1
  60. package/dist/entitySubclasses/entityPermissions.server.d.ts +1 -1
  61. package/dist/entitySubclasses/entityPermissions.server.d.ts.map +1 -1
  62. package/dist/entitySubclasses/entityPermissions.server.js +1 -1
  63. package/dist/entitySubclasses/entityPermissions.server.js.map +1 -1
  64. package/dist/generated/generated.d.ts +648 -648
  65. package/dist/generated/generated.d.ts.map +1 -1
  66. package/dist/generated/generated.js +2986 -1133
  67. package/dist/generated/generated.js.map +1 -1
  68. package/dist/generic/KeyInputOutputTypes.d.ts +1 -1
  69. package/dist/generic/KeyInputOutputTypes.d.ts.map +1 -1
  70. package/dist/generic/KeyInputOutputTypes.js +1 -1
  71. package/dist/generic/KeyInputOutputTypes.js.map +1 -1
  72. package/dist/generic/ResolverBase.d.ts +1 -1
  73. package/dist/generic/ResolverBase.d.ts.map +1 -1
  74. package/dist/generic/ResolverBase.js +15 -10
  75. package/dist/generic/ResolverBase.js.map +1 -1
  76. package/dist/generic/RunViewResolver.d.ts +1 -1
  77. package/dist/generic/RunViewResolver.d.ts.map +1 -1
  78. package/dist/generic/RunViewResolver.js +15 -15
  79. package/dist/generic/RunViewResolver.js.map +1 -1
  80. package/dist/index.d.ts.map +1 -1
  81. package/dist/index.js +18 -9
  82. package/dist/index.js.map +1 -1
  83. package/dist/resolvers/ActionResolver.d.ts +2 -2
  84. package/dist/resolvers/ActionResolver.d.ts.map +1 -1
  85. package/dist/resolvers/ActionResolver.js +28 -30
  86. package/dist/resolvers/ActionResolver.js.map +1 -1
  87. package/dist/resolvers/AskSkipResolver.d.ts +2 -2
  88. package/dist/resolvers/AskSkipResolver.d.ts.map +1 -1
  89. package/dist/resolvers/AskSkipResolver.js +60 -50
  90. package/dist/resolvers/AskSkipResolver.js.map +1 -1
  91. package/dist/resolvers/ComponentRegistryResolver.d.ts.map +1 -1
  92. package/dist/resolvers/ComponentRegistryResolver.js +36 -38
  93. package/dist/resolvers/ComponentRegistryResolver.js.map +1 -1
  94. package/dist/resolvers/CreateQueryResolver.d.ts +1 -1
  95. package/dist/resolvers/CreateQueryResolver.d.ts.map +1 -1
  96. package/dist/resolvers/CreateQueryResolver.js +43 -40
  97. package/dist/resolvers/CreateQueryResolver.js.map +1 -1
  98. package/dist/resolvers/DatasetResolver.d.ts.map +1 -1
  99. package/dist/resolvers/DatasetResolver.js +1 -1
  100. package/dist/resolvers/DatasetResolver.js.map +1 -1
  101. package/dist/resolvers/EntityRecordNameResolver.d.ts +1 -1
  102. package/dist/resolvers/EntityRecordNameResolver.d.ts.map +1 -1
  103. package/dist/resolvers/EntityRecordNameResolver.js +1 -1
  104. package/dist/resolvers/EntityRecordNameResolver.js.map +1 -1
  105. package/dist/resolvers/EntityResolver.d.ts.map +1 -1
  106. package/dist/resolvers/EntityResolver.js +1 -1
  107. package/dist/resolvers/EntityResolver.js.map +1 -1
  108. package/dist/resolvers/FileCategoryResolver.js +1 -1
  109. package/dist/resolvers/FileCategoryResolver.js.map +1 -1
  110. package/dist/resolvers/FileResolver.js +1 -1
  111. package/dist/resolvers/FileResolver.js.map +1 -1
  112. package/dist/resolvers/GetDataContextDataResolver.d.ts +1 -1
  113. package/dist/resolvers/GetDataContextDataResolver.d.ts.map +1 -1
  114. package/dist/resolvers/GetDataContextDataResolver.js +5 -5
  115. package/dist/resolvers/GetDataContextDataResolver.js.map +1 -1
  116. package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
  117. package/dist/resolvers/GetDataResolver.js +8 -6
  118. package/dist/resolvers/GetDataResolver.js.map +1 -1
  119. package/dist/resolvers/MergeRecordsResolver.d.ts +3 -3
  120. package/dist/resolvers/MergeRecordsResolver.d.ts.map +1 -1
  121. package/dist/resolvers/MergeRecordsResolver.js +3 -3
  122. package/dist/resolvers/MergeRecordsResolver.js.map +1 -1
  123. package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts +1 -1
  124. package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts.map +1 -1
  125. package/dist/resolvers/PotentialDuplicateRecordResolver.js +1 -1
  126. package/dist/resolvers/PotentialDuplicateRecordResolver.js.map +1 -1
  127. package/dist/resolvers/QueryResolver.d.ts.map +1 -1
  128. package/dist/resolvers/QueryResolver.js +11 -11
  129. package/dist/resolvers/QueryResolver.js.map +1 -1
  130. package/dist/resolvers/ReportResolver.js +1 -1
  131. package/dist/resolvers/ReportResolver.js.map +1 -1
  132. package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
  133. package/dist/resolvers/RunAIAgentResolver.js +27 -28
  134. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  135. package/dist/resolvers/RunAIPromptResolver.d.ts.map +1 -1
  136. package/dist/resolvers/RunAIPromptResolver.js +31 -31
  137. package/dist/resolvers/RunAIPromptResolver.js.map +1 -1
  138. package/dist/resolvers/RunTemplateResolver.d.ts.map +1 -1
  139. package/dist/resolvers/RunTemplateResolver.js +9 -9
  140. package/dist/resolvers/RunTemplateResolver.js.map +1 -1
  141. package/dist/resolvers/SqlLoggingConfigResolver.d.ts.map +1 -1
  142. package/dist/resolvers/SqlLoggingConfigResolver.js +10 -10
  143. package/dist/resolvers/SqlLoggingConfigResolver.js.map +1 -1
  144. package/dist/resolvers/SyncDataResolver.d.ts +1 -1
  145. package/dist/resolvers/SyncDataResolver.d.ts.map +1 -1
  146. package/dist/resolvers/SyncDataResolver.js +15 -14
  147. package/dist/resolvers/SyncDataResolver.js.map +1 -1
  148. package/dist/resolvers/SyncRolesUsersResolver.d.ts +1 -1
  149. package/dist/resolvers/SyncRolesUsersResolver.d.ts.map +1 -1
  150. package/dist/resolvers/SyncRolesUsersResolver.js +48 -44
  151. package/dist/resolvers/SyncRolesUsersResolver.js.map +1 -1
  152. package/dist/resolvers/TaskResolver.d.ts.map +1 -1
  153. package/dist/resolvers/TaskResolver.js +7 -7
  154. package/dist/resolvers/TaskResolver.js.map +1 -1
  155. package/dist/resolvers/TransactionGroupResolver.d.ts +1 -1
  156. package/dist/resolvers/TransactionGroupResolver.d.ts.map +1 -1
  157. package/dist/resolvers/TransactionGroupResolver.js +12 -12
  158. package/dist/resolvers/TransactionGroupResolver.js.map +1 -1
  159. package/dist/resolvers/UserFavoriteResolver.d.ts +1 -1
  160. package/dist/resolvers/UserFavoriteResolver.d.ts.map +1 -1
  161. package/dist/resolvers/UserFavoriteResolver.js +1 -1
  162. package/dist/resolvers/UserFavoriteResolver.js.map +1 -1
  163. package/dist/resolvers/UserViewResolver.d.ts.map +1 -1
  164. package/dist/resolvers/UserViewResolver.js.map +1 -1
  165. package/dist/rest/EntityCRUDHandler.d.ts +1 -1
  166. package/dist/rest/EntityCRUDHandler.d.ts.map +1 -1
  167. package/dist/rest/EntityCRUDHandler.js +14 -16
  168. package/dist/rest/EntityCRUDHandler.js.map +1 -1
  169. package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
  170. package/dist/rest/RESTEndpointHandler.js +23 -25
  171. package/dist/rest/RESTEndpointHandler.js.map +1 -1
  172. package/dist/rest/ViewOperationsHandler.d.ts +1 -1
  173. package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
  174. package/dist/rest/ViewOperationsHandler.js +17 -21
  175. package/dist/rest/ViewOperationsHandler.js.map +1 -1
  176. package/dist/scheduler/LearningCycleScheduler.d.ts.map +1 -1
  177. package/dist/scheduler/LearningCycleScheduler.js.map +1 -1
  178. package/dist/services/ScheduledJobsService.d.ts.map +1 -1
  179. package/dist/services/ScheduledJobsService.js +4 -6
  180. package/dist/services/ScheduledJobsService.js.map +1 -1
  181. package/dist/services/TaskOrchestrator.d.ts +1 -1
  182. package/dist/services/TaskOrchestrator.d.ts.map +1 -1
  183. package/dist/services/TaskOrchestrator.js +30 -30
  184. package/dist/services/TaskOrchestrator.js.map +1 -1
  185. package/dist/types.d.ts +3 -3
  186. package/dist/types.d.ts.map +1 -1
  187. package/dist/types.js +0 -1
  188. package/dist/types.js.map +1 -1
  189. package/dist/util.d.ts +1 -1
  190. package/dist/util.d.ts.map +1 -1
  191. package/dist/util.js +2 -2
  192. package/dist/util.js.map +1 -1
  193. package/package.json +36 -37
  194. package/src/agents/skip-agent.ts +1067 -1200
  195. package/src/agents/skip-sdk.ts +877 -851
  196. package/src/apolloServer/index.ts +2 -2
  197. package/src/auth/AuthProviderFactory.ts +8 -14
  198. package/src/auth/BaseAuthProvider.ts +5 -4
  199. package/src/auth/IAuthProvider.ts +2 -2
  200. package/src/auth/exampleNewUserSubClass.ts +9 -2
  201. package/src/auth/index.ts +31 -26
  202. package/src/auth/initializeProviders.ts +3 -3
  203. package/src/auth/newUsers.ts +166 -134
  204. package/src/auth/providers/Auth0Provider.ts +5 -5
  205. package/src/auth/providers/CognitoProvider.ts +7 -10
  206. package/src/auth/providers/GoogleProvider.ts +4 -5
  207. package/src/auth/providers/MSALProvider.ts +5 -5
  208. package/src/auth/providers/OktaProvider.ts +6 -7
  209. package/src/config.ts +63 -54
  210. package/src/context.ts +42 -30
  211. package/src/entitySubclasses/entityPermissions.server.ts +3 -3
  212. package/src/generated/generated.ts +48130 -39930
  213. package/src/generic/KeyInputOutputTypes.ts +3 -6
  214. package/src/generic/ResolverBase.ts +119 -78
  215. package/src/generic/RunViewResolver.ts +27 -23
  216. package/src/index.ts +66 -42
  217. package/src/resolvers/ActionResolver.ts +46 -57
  218. package/src/resolvers/AskSkipResolver.ts +607 -533
  219. package/src/resolvers/ComponentRegistryResolver.ts +547 -562
  220. package/src/resolvers/CreateQueryResolver.ts +683 -655
  221. package/src/resolvers/DatasetResolver.ts +5 -6
  222. package/src/resolvers/EntityCommunicationsResolver.ts +1 -1
  223. package/src/resolvers/EntityRecordNameResolver.ts +9 -5
  224. package/src/resolvers/EntityResolver.ts +9 -7
  225. package/src/resolvers/FileCategoryResolver.ts +2 -2
  226. package/src/resolvers/FileResolver.ts +4 -4
  227. package/src/resolvers/GetDataContextDataResolver.ts +106 -118
  228. package/src/resolvers/GetDataResolver.ts +194 -205
  229. package/src/resolvers/MergeRecordsResolver.ts +5 -5
  230. package/src/resolvers/PotentialDuplicateRecordResolver.ts +1 -1
  231. package/src/resolvers/QueryResolver.ts +95 -78
  232. package/src/resolvers/ReportResolver.ts +2 -2
  233. package/src/resolvers/RunAIAgentResolver.ts +818 -828
  234. package/src/resolvers/RunAIPromptResolver.ts +693 -709
  235. package/src/resolvers/RunTemplateResolver.ts +105 -103
  236. package/src/resolvers/SqlLoggingConfigResolver.ts +69 -72
  237. package/src/resolvers/SyncDataResolver.ts +386 -352
  238. package/src/resolvers/SyncRolesUsersResolver.ts +387 -350
  239. package/src/resolvers/TaskResolver.ts +110 -115
  240. package/src/resolvers/TransactionGroupResolver.ts +143 -138
  241. package/src/resolvers/UserFavoriteResolver.ts +17 -8
  242. package/src/resolvers/UserViewResolver.ts +17 -12
  243. package/src/rest/EntityCRUDHandler.ts +291 -268
  244. package/src/rest/RESTEndpointHandler.ts +782 -776
  245. package/src/rest/ViewOperationsHandler.ts +191 -195
  246. package/src/scheduler/LearningCycleScheduler.ts +8 -52
  247. package/src/services/ScheduledJobsService.ts +129 -132
  248. package/src/services/TaskOrchestrator.ts +792 -776
  249. package/src/types.ts +15 -9
  250. 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
- * Run a view and return results
13
- */
14
- static async runView(params: RunViewParams, user: UserInfo): Promise<{ success: boolean, result?: RunViewResult, error?: string }> {
15
- try {
16
- // Validate entity exists
17
- const md = new Metadata();
18
- const entity = md.Entities.find(e => e.Name === params.EntityName);
19
- if (!entity) {
20
- return {
21
- success: false,
22
- error: `Entity '${params.EntityName}' not found`
23
- };
24
- }
25
-
26
- // Check read permission
27
- const permissions = entity.GetUserPermisions(user);
28
- if (!permissions.CanRead) {
29
- return {
30
- success: false,
31
- error: `User ${user.Name} does not have permission to read ${params.EntityName} records`
32
- };
33
- }
34
-
35
- // Sanitize and validate parameters
36
- this.sanitizeRunViewParams(params);
37
-
38
- // Execute the view
39
- const runView = new RunView();
40
- const result = await runView.RunView(params, user);
41
-
42
- return { success: true, result };
43
- } catch (error) {
44
- LogError(error);
45
- return { success: false, error: (error as Error)?.message || 'Unknown error' };
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
- * Run multiple views in batch
51
- */
52
- static async runViews(paramsArray: RunViewParams[], user: UserInfo): 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
- };
64
- }
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
- };
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
- * 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;
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
- * 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
- }
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
- * 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'
192
- ? parseInt(params.MaxRows as string)
193
- : params.MaxRows;
194
- }
195
-
196
- if (params.StartRow !== undefined) {
197
- params.StartRow = typeof params.StartRow === 'string'
198
- ? parseInt(params.StartRow as string)
199
- : params.StartRow;
200
- }
201
-
202
- // Default ResultType if not provided
203
- if (!params.ResultType) {
204
- params.ResultType = 'simple';
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
+ }