@memberjunction/server 3.4.0 → 4.1.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 (269) hide show
  1. package/README.md +689 -513
  2. package/dist/agents/skip-agent.d.ts +65 -0
  3. package/dist/agents/skip-agent.d.ts.map +1 -1
  4. package/dist/agents/skip-agent.js +63 -5
  5. package/dist/agents/skip-agent.js.map +1 -1
  6. package/dist/agents/skip-sdk.d.ts +163 -0
  7. package/dist/agents/skip-sdk.d.ts.map +1 -1
  8. package/dist/agents/skip-sdk.js +143 -12
  9. package/dist/agents/skip-sdk.js.map +1 -1
  10. package/dist/apolloServer/index.d.ts +0 -1
  11. package/dist/apolloServer/index.d.ts.map +1 -1
  12. package/dist/auth/APIKeyScopeAuth.d.ts +82 -0
  13. package/dist/auth/APIKeyScopeAuth.d.ts.map +1 -1
  14. package/dist/auth/APIKeyScopeAuth.js +78 -0
  15. package/dist/auth/APIKeyScopeAuth.js.map +1 -1
  16. package/dist/auth/AuthProviderFactory.d.ts +35 -0
  17. package/dist/auth/AuthProviderFactory.d.ts.map +1 -1
  18. package/dist/auth/AuthProviderFactory.js +51 -4
  19. package/dist/auth/AuthProviderFactory.js.map +1 -1
  20. package/dist/auth/BaseAuthProvider.d.ts +21 -0
  21. package/dist/auth/BaseAuthProvider.d.ts.map +1 -1
  22. package/dist/auth/BaseAuthProvider.js +24 -9
  23. package/dist/auth/BaseAuthProvider.js.map +1 -1
  24. package/dist/auth/IAuthProvider.d.ts +32 -0
  25. package/dist/auth/IAuthProvider.d.ts.map +1 -1
  26. package/dist/auth/exampleNewUserSubClass.d.ts +5 -1
  27. package/dist/auth/exampleNewUserSubClass.d.ts.map +1 -1
  28. package/dist/auth/exampleNewUserSubClass.js +21 -6
  29. package/dist/auth/exampleNewUserSubClass.js.map +1 -1
  30. package/dist/auth/index.d.ts +14 -0
  31. package/dist/auth/index.d.ts.map +1 -1
  32. package/dist/auth/index.js +35 -22
  33. package/dist/auth/index.js.map +1 -1
  34. package/dist/auth/initializeProviders.d.ts +3 -0
  35. package/dist/auth/initializeProviders.d.ts.map +1 -1
  36. package/dist/auth/initializeProviders.js +6 -0
  37. package/dist/auth/initializeProviders.js.map +1 -1
  38. package/dist/auth/newUsers.d.ts.map +1 -1
  39. package/dist/auth/newUsers.js +14 -3
  40. package/dist/auth/newUsers.js.map +1 -1
  41. package/dist/auth/providers/Auth0Provider.d.ts +9 -0
  42. package/dist/auth/providers/Auth0Provider.d.ts.map +1 -1
  43. package/dist/auth/providers/Auth0Provider.js +10 -0
  44. package/dist/auth/providers/Auth0Provider.js.map +1 -1
  45. package/dist/auth/providers/CognitoProvider.d.ts +9 -0
  46. package/dist/auth/providers/CognitoProvider.d.ts.map +1 -1
  47. package/dist/auth/providers/CognitoProvider.js +10 -0
  48. package/dist/auth/providers/CognitoProvider.js.map +1 -1
  49. package/dist/auth/providers/GoogleProvider.d.ts +9 -0
  50. package/dist/auth/providers/GoogleProvider.d.ts.map +1 -1
  51. package/dist/auth/providers/GoogleProvider.js +11 -1
  52. package/dist/auth/providers/GoogleProvider.js.map +1 -1
  53. package/dist/auth/providers/MSALProvider.d.ts +9 -0
  54. package/dist/auth/providers/MSALProvider.d.ts.map +1 -1
  55. package/dist/auth/providers/MSALProvider.js +10 -0
  56. package/dist/auth/providers/MSALProvider.js.map +1 -1
  57. package/dist/auth/providers/OktaProvider.d.ts +9 -0
  58. package/dist/auth/providers/OktaProvider.d.ts.map +1 -1
  59. package/dist/auth/providers/OktaProvider.js +10 -0
  60. package/dist/auth/providers/OktaProvider.js.map +1 -1
  61. package/dist/config.d.ts +12 -0
  62. package/dist/config.d.ts.map +1 -1
  63. package/dist/config.js +42 -8
  64. package/dist/config.js.map +1 -1
  65. package/dist/context.d.ts +8 -1
  66. package/dist/context.d.ts.map +1 -1
  67. package/dist/context.js +26 -4
  68. package/dist/context.js.map +1 -1
  69. package/dist/directives/Public.js +2 -0
  70. package/dist/directives/Public.js.map +1 -1
  71. package/dist/entitySubclasses/entityPermissions.server.d.ts +7 -2
  72. package/dist/entitySubclasses/entityPermissions.server.d.ts.map +1 -1
  73. package/dist/entitySubclasses/entityPermissions.server.js +26 -8
  74. package/dist/entitySubclasses/entityPermissions.server.js.map +1 -1
  75. package/dist/generated/generated.d.ts +539 -2
  76. package/dist/generated/generated.d.ts.map +1 -1
  77. package/dist/generated/generated.js +9985 -14951
  78. package/dist/generated/generated.js.map +1 -1
  79. package/dist/generic/DeleteOptionsInput.d.ts +3 -0
  80. package/dist/generic/DeleteOptionsInput.d.ts.map +1 -1
  81. package/dist/generic/DeleteOptionsInput.js +3 -2
  82. package/dist/generic/DeleteOptionsInput.js.map +1 -1
  83. package/dist/generic/KeyInputOutputTypes.js +0 -6
  84. package/dist/generic/KeyInputOutputTypes.js.map +1 -1
  85. package/dist/generic/KeyValuePairInput.d.ts +4 -0
  86. package/dist/generic/KeyValuePairInput.d.ts.map +1 -1
  87. package/dist/generic/KeyValuePairInput.js +4 -2
  88. package/dist/generic/KeyValuePairInput.js.map +1 -1
  89. package/dist/generic/PushStatusResolver.js +0 -3
  90. package/dist/generic/PushStatusResolver.js.map +1 -1
  91. package/dist/generic/ResolverBase.d.ts +58 -0
  92. package/dist/generic/ResolverBase.d.ts.map +1 -1
  93. package/dist/generic/ResolverBase.js +203 -18
  94. package/dist/generic/ResolverBase.js.map +1 -1
  95. package/dist/generic/RunViewResolver.d.ts +22 -0
  96. package/dist/generic/RunViewResolver.d.ts.map +1 -1
  97. package/dist/generic/RunViewResolver.js +42 -108
  98. package/dist/generic/RunViewResolver.js.map +1 -1
  99. package/dist/index.d.ts +12 -0
  100. package/dist/index.d.ts.map +1 -1
  101. package/dist/index.js +94 -37
  102. package/dist/index.js.map +1 -1
  103. package/dist/orm.d.ts.map +1 -1
  104. package/dist/orm.js +2 -1
  105. package/dist/orm.js.map +1 -1
  106. package/dist/resolvers/APIKeyResolver.d.ts +74 -0
  107. package/dist/resolvers/APIKeyResolver.d.ts.map +1 -1
  108. package/dist/resolvers/APIKeyResolver.js +49 -10
  109. package/dist/resolvers/APIKeyResolver.js.map +1 -1
  110. package/dist/resolvers/ActionResolver.d.ts +189 -0
  111. package/dist/resolvers/ActionResolver.d.ts.map +1 -1
  112. package/dist/resolvers/ActionResolver.js +152 -21
  113. package/dist/resolvers/ActionResolver.js.map +1 -1
  114. package/dist/resolvers/ColorResolver.js +0 -5
  115. package/dist/resolvers/ColorResolver.js.map +1 -1
  116. package/dist/resolvers/ComponentRegistryResolver.d.ts +65 -0
  117. package/dist/resolvers/ComponentRegistryResolver.d.ts.map +1 -1
  118. package/dist/resolvers/ComponentRegistryResolver.js +118 -40
  119. package/dist/resolvers/ComponentRegistryResolver.js.map +1 -1
  120. package/dist/resolvers/CreateQueryResolver.d.ts +47 -0
  121. package/dist/resolvers/CreateQueryResolver.d.ts.map +1 -1
  122. package/dist/resolvers/CreateQueryResolver.js +92 -116
  123. package/dist/resolvers/CreateQueryResolver.js.map +1 -1
  124. package/dist/resolvers/DatasetResolver.js +2 -14
  125. package/dist/resolvers/DatasetResolver.js.map +1 -1
  126. package/dist/resolvers/EntityCommunicationsResolver.d.ts +40 -0
  127. package/dist/resolvers/EntityCommunicationsResolver.d.ts.map +1 -1
  128. package/dist/resolvers/EntityCommunicationsResolver.js +2 -36
  129. package/dist/resolvers/EntityCommunicationsResolver.js.map +1 -1
  130. package/dist/resolvers/EntityRecordNameResolver.js +0 -7
  131. package/dist/resolvers/EntityRecordNameResolver.js.map +1 -1
  132. package/dist/resolvers/FileCategoryResolver.d.ts +1 -1
  133. package/dist/resolvers/FileCategoryResolver.d.ts.map +1 -1
  134. package/dist/resolvers/FileCategoryResolver.js +15 -3
  135. package/dist/resolvers/FileCategoryResolver.js.map +1 -1
  136. package/dist/resolvers/FileResolver.d.ts +16 -0
  137. package/dist/resolvers/FileResolver.d.ts.map +1 -1
  138. package/dist/resolvers/FileResolver.js +59 -74
  139. package/dist/resolvers/FileResolver.js.map +1 -1
  140. package/dist/resolvers/GetDataContextDataResolver.d.ts +18 -1
  141. package/dist/resolvers/GetDataContextDataResolver.d.ts.map +1 -1
  142. package/dist/resolvers/GetDataContextDataResolver.js +17 -9
  143. package/dist/resolvers/GetDataContextDataResolver.js.map +1 -1
  144. package/dist/resolvers/GetDataResolver.d.ts +19 -0
  145. package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
  146. package/dist/resolvers/GetDataResolver.js +35 -35
  147. package/dist/resolvers/GetDataResolver.js.map +1 -1
  148. package/dist/resolvers/InfoResolver.d.ts +2 -2
  149. package/dist/resolvers/InfoResolver.d.ts.map +1 -1
  150. package/dist/resolvers/InfoResolver.js +17 -20
  151. package/dist/resolvers/InfoResolver.js.map +1 -1
  152. package/dist/resolvers/MCPResolver.d.ts +325 -1
  153. package/dist/resolvers/MCPResolver.d.ts.map +1 -1
  154. package/dist/resolvers/MCPResolver.js +931 -24
  155. package/dist/resolvers/MCPResolver.js.map +1 -1
  156. package/dist/resolvers/MergeRecordsResolver.js +3 -29
  157. package/dist/resolvers/MergeRecordsResolver.js.map +1 -1
  158. package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts.map +1 -1
  159. package/dist/resolvers/PotentialDuplicateRecordResolver.js +0 -3
  160. package/dist/resolvers/PotentialDuplicateRecordResolver.js.map +1 -1
  161. package/dist/resolvers/QueryResolver.d.ts +20 -0
  162. package/dist/resolvers/QueryResolver.d.ts.map +1 -1
  163. package/dist/resolvers/QueryResolver.js +44 -36
  164. package/dist/resolvers/QueryResolver.js.map +1 -1
  165. package/dist/resolvers/ReportResolver.d.ts +3 -0
  166. package/dist/resolvers/ReportResolver.d.ts.map +1 -1
  167. package/dist/resolvers/ReportResolver.js +9 -10
  168. package/dist/resolvers/ReportResolver.js.map +1 -1
  169. package/dist/resolvers/RunAIAgentResolver.d.ts +54 -0
  170. package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
  171. package/dist/resolvers/RunAIAgentResolver.js +116 -40
  172. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  173. package/dist/resolvers/RunAIPromptResolver.d.ts +42 -0
  174. package/dist/resolvers/RunAIPromptResolver.d.ts.map +1 -1
  175. package/dist/resolvers/RunAIPromptResolver.js +95 -22
  176. package/dist/resolvers/RunAIPromptResolver.js.map +1 -1
  177. package/dist/resolvers/RunTemplateResolver.js +9 -6
  178. package/dist/resolvers/RunTemplateResolver.js.map +1 -1
  179. package/dist/resolvers/RunTestResolver.d.ts +12 -0
  180. package/dist/resolvers/RunTestResolver.d.ts.map +1 -1
  181. package/dist/resolvers/RunTestResolver.js +35 -21
  182. package/dist/resolvers/RunTestResolver.js.map +1 -1
  183. package/dist/resolvers/SqlLoggingConfigResolver.d.ts +312 -0
  184. package/dist/resolvers/SqlLoggingConfigResolver.d.ts.map +1 -1
  185. package/dist/resolvers/SqlLoggingConfigResolver.js +295 -45
  186. package/dist/resolvers/SqlLoggingConfigResolver.js.map +1 -1
  187. package/dist/resolvers/SyncDataResolver.d.ts +21 -0
  188. package/dist/resolvers/SyncDataResolver.d.ts.map +1 -1
  189. package/dist/resolvers/SyncDataResolver.js +36 -22
  190. package/dist/resolvers/SyncDataResolver.js.map +1 -1
  191. package/dist/resolvers/SyncRolesUsersResolver.d.ts +14 -0
  192. package/dist/resolvers/SyncRolesUsersResolver.d.ts.map +1 -1
  193. package/dist/resolvers/SyncRolesUsersResolver.js +54 -21
  194. package/dist/resolvers/SyncRolesUsersResolver.js.map +1 -1
  195. package/dist/resolvers/TaskResolver.d.ts +13 -0
  196. package/dist/resolvers/TaskResolver.d.ts.map +1 -1
  197. package/dist/resolvers/TaskResolver.js +22 -7
  198. package/dist/resolvers/TaskResolver.js.map +1 -1
  199. package/dist/resolvers/TelemetryResolver.d.ts +22 -0
  200. package/dist/resolvers/TelemetryResolver.d.ts.map +1 -1
  201. package/dist/resolvers/TelemetryResolver.js +45 -79
  202. package/dist/resolvers/TelemetryResolver.js.map +1 -1
  203. package/dist/resolvers/TransactionGroupResolver.js +11 -13
  204. package/dist/resolvers/TransactionGroupResolver.js.map +1 -1
  205. package/dist/resolvers/UserFavoriteResolver.js +3 -12
  206. package/dist/resolvers/UserFavoriteResolver.js.map +1 -1
  207. package/dist/resolvers/UserResolver.js +10 -0
  208. package/dist/resolvers/UserResolver.js.map +1 -1
  209. package/dist/resolvers/UserViewResolver.js +4 -0
  210. package/dist/resolvers/UserViewResolver.js.map +1 -1
  211. package/dist/resolvers/VersionHistoryResolver.d.ts +39 -0
  212. package/dist/resolvers/VersionHistoryResolver.d.ts.map +1 -0
  213. package/dist/resolvers/VersionHistoryResolver.js +208 -0
  214. package/dist/resolvers/VersionHistoryResolver.js.map +1 -0
  215. package/dist/rest/EntityCRUDHandler.d.ts +19 -0
  216. package/dist/rest/EntityCRUDHandler.d.ts.map +1 -1
  217. package/dist/rest/EntityCRUDHandler.js +55 -0
  218. package/dist/rest/EntityCRUDHandler.js.map +1 -1
  219. package/dist/rest/OAuthCallbackHandler.d.ts +143 -0
  220. package/dist/rest/OAuthCallbackHandler.d.ts.map +1 -0
  221. package/dist/rest/OAuthCallbackHandler.js +634 -0
  222. package/dist/rest/OAuthCallbackHandler.js.map +1 -0
  223. package/dist/rest/RESTEndpointHandler.d.ts +120 -0
  224. package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
  225. package/dist/rest/RESTEndpointHandler.js +213 -24
  226. package/dist/rest/RESTEndpointHandler.js.map +1 -1
  227. package/dist/rest/ViewOperationsHandler.d.ts +19 -0
  228. package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
  229. package/dist/rest/ViewOperationsHandler.js +39 -0
  230. package/dist/rest/ViewOperationsHandler.js.map +1 -1
  231. package/dist/rest/index.d.ts +1 -0
  232. package/dist/rest/index.d.ts.map +1 -1
  233. package/dist/rest/index.js +1 -0
  234. package/dist/rest/index.js.map +1 -1
  235. package/dist/rest/setupRESTEndpoints.d.ts +35 -0
  236. package/dist/rest/setupRESTEndpoints.d.ts.map +1 -1
  237. package/dist/rest/setupRESTEndpoints.js +15 -1
  238. package/dist/rest/setupRESTEndpoints.js.map +1 -1
  239. package/dist/services/ScheduledJobsService.d.ts +31 -0
  240. package/dist/services/ScheduledJobsService.d.ts.map +1 -1
  241. package/dist/services/ScheduledJobsService.js +38 -4
  242. package/dist/services/ScheduledJobsService.js.map +1 -1
  243. package/dist/services/TaskOrchestrator.d.ts +73 -0
  244. package/dist/services/TaskOrchestrator.d.ts.map +1 -1
  245. package/dist/services/TaskOrchestrator.js +137 -15
  246. package/dist/services/TaskOrchestrator.js.map +1 -1
  247. package/dist/types.d.ts +14 -0
  248. package/dist/types.d.ts.map +1 -1
  249. package/dist/types.js +0 -13
  250. package/dist/types.js.map +1 -1
  251. package/dist/util.d.ts +37 -1
  252. package/dist/util.d.ts.map +1 -1
  253. package/dist/util.js +55 -8
  254. package/dist/util.js.map +1 -1
  255. package/package.json +83 -78
  256. package/src/auth/exampleNewUserSubClass.ts +1 -5
  257. package/src/auth/newUsers.ts +4 -2
  258. package/src/entitySubclasses/entityPermissions.server.ts +1 -3
  259. package/src/generated/generated.ts +4707 -2664
  260. package/src/index.ts +73 -62
  261. package/src/resolvers/FileCategoryResolver.ts +1 -1
  262. package/src/resolvers/InfoResolver.ts +10 -6
  263. package/src/resolvers/MCPResolver.ts +910 -10
  264. package/src/resolvers/PotentialDuplicateRecordResolver.ts +0 -4
  265. package/src/resolvers/VersionHistoryResolver.ts +177 -0
  266. package/src/rest/OAuthCallbackHandler.ts +766 -0
  267. package/src/rest/RESTEndpointHandler.ts +58 -35
  268. package/src/rest/index.ts +2 -1
  269. package/src/rest/setupRESTEndpoints.ts +13 -12
@@ -1,16 +1,27 @@
1
1
  import { CompositeKey, EntityPermissionType, EntitySaveOptions, LogError, Metadata } from '@memberjunction/core';
2
+ /**
3
+ * Entity CRUD Implementation Functions for REST endpoints
4
+ * These functions contain the detailed implementation for entity operations
5
+ */
2
6
  export class EntityCRUDHandler {
7
+ /**
8
+ * Create a new entity
9
+ */
3
10
  static async createEntity(entityName, data, user) {
4
11
  try {
12
+ // Get entity object
5
13
  const md = new Metadata();
6
14
  const entity = await md.GetEntityObject(entityName, user);
15
+ // Check permissions
7
16
  if (!entity.CheckPermissions(EntityPermissionType.Create, false)) {
8
17
  return {
9
18
  success: false,
10
19
  error: `User ${user.Name} does not have permission to create ${entityName} records`
11
20
  };
12
21
  }
22
+ // Create new record
13
23
  entity.NewRecord();
24
+ // Extract save options if provided
14
25
  const options = new EntitySaveOptions();
15
26
  if (data.options) {
16
27
  const { IgnoreDirtyState, SkipEntityAIActions, SkipEntityActions, ReplayOnly, SkipOldValuesCheck } = data.options;
@@ -24,11 +35,14 @@ export class EntityCRUDHandler {
24
35
  options.ReplayOnly = !!ReplayOnly;
25
36
  if (SkipOldValuesCheck !== undefined)
26
37
  options.SkipOldValuesCheck = !!SkipOldValuesCheck;
38
+ // Remove options from data
27
39
  delete data.options;
28
40
  }
41
+ // Set values on the entity
29
42
  for (const key in data) {
30
43
  entity.Set(key, data[key]);
31
44
  }
45
+ // Validate entity
32
46
  const validationResult = entity.Validate();
33
47
  if (!validationResult.Success) {
34
48
  return {
@@ -37,6 +51,7 @@ export class EntityCRUDHandler {
37
51
  validationErrors: validationResult.Errors
38
52
  };
39
53
  }
54
+ // Save entity
40
55
  const saveSuccess = await entity.Save(options);
41
56
  if (!saveSuccess) {
42
57
  const latestResult = entity.LatestResult;
@@ -46,6 +61,7 @@ export class EntityCRUDHandler {
46
61
  details: latestResult
47
62
  };
48
63
  }
64
+ // Get entity data for response
49
65
  const entityData = await entity.GetDataObject();
50
66
  return { success: true, entity: entityData };
51
67
  }
@@ -54,17 +70,24 @@ export class EntityCRUDHandler {
54
70
  return { success: false, error: error?.message || 'Unknown error' };
55
71
  }
56
72
  }
73
+ /**
74
+ * Read an entity by ID
75
+ */
57
76
  static async getEntity(entityName, id, relatedEntities = null, user) {
58
77
  try {
78
+ // Get entity object
59
79
  const md = new Metadata();
60
80
  const entity = await md.GetEntityObject(entityName, user);
81
+ // Check permissions
61
82
  if (!entity.CheckPermissions(EntityPermissionType.Read, false)) {
62
83
  return {
63
84
  success: false,
64
85
  error: `User ${user.Name} does not have permission to read ${entityName} records`
65
86
  };
66
87
  }
88
+ // Create composite key
67
89
  const compositeKey = this.createCompositeKeyFromId(entity, id);
90
+ // Load entity
68
91
  const loadSuccess = await entity.InnerLoad(compositeKey, relatedEntities);
69
92
  if (!loadSuccess) {
70
93
  return {
@@ -72,6 +95,7 @@ export class EntityCRUDHandler {
72
95
  error: `${entityName} with ID ${id} not found`
73
96
  };
74
97
  }
98
+ // Get entity data for response
75
99
  const entityData = await entity.GetDataObject();
76
100
  return { success: true, entity: entityData };
77
101
  }
@@ -80,17 +104,24 @@ export class EntityCRUDHandler {
80
104
  return { success: false, error: error?.message || 'Unknown error' };
81
105
  }
82
106
  }
107
+ /**
108
+ * Update an existing entity
109
+ */
83
110
  static async updateEntity(entityName, id, data, user) {
84
111
  try {
112
+ // Get entity object
85
113
  const md = new Metadata();
86
114
  const entity = await md.GetEntityObject(entityName, user);
115
+ // Check permissions
87
116
  if (!entity.CheckPermissions(EntityPermissionType.Update, false)) {
88
117
  return {
89
118
  success: false,
90
119
  error: `User ${user.Name} does not have permission to update ${entityName} records`
91
120
  };
92
121
  }
122
+ // Create composite key
93
123
  const compositeKey = this.createCompositeKeyFromId(entity, id);
124
+ // Load entity
94
125
  const loadSuccess = await entity.InnerLoad(compositeKey);
95
126
  if (!loadSuccess) {
96
127
  return {
@@ -98,6 +129,7 @@ export class EntityCRUDHandler {
98
129
  error: `${entityName} with ID ${id} not found`
99
130
  };
100
131
  }
132
+ // Extract save options if provided
101
133
  const options = new EntitySaveOptions();
102
134
  if (data.options) {
103
135
  const { IgnoreDirtyState, SkipEntityAIActions, SkipEntityActions, ReplayOnly, SkipOldValuesCheck } = data.options;
@@ -111,15 +143,20 @@ export class EntityCRUDHandler {
111
143
  options.ReplayOnly = !!ReplayOnly;
112
144
  if (SkipOldValuesCheck !== undefined)
113
145
  options.SkipOldValuesCheck = !!SkipOldValuesCheck;
146
+ // Remove options from data
114
147
  delete data.options;
115
148
  }
149
+ // Update entity with new values
116
150
  for (const key in data) {
117
151
  entity.Set(key, data[key]);
118
152
  }
153
+ // Check if entity is dirty
119
154
  if (!entity.Dirty && !options.IgnoreDirtyState) {
155
+ // Nothing changed, return success
120
156
  const entityData = await entity.GetDataObject();
121
157
  return { success: true, entity: entityData };
122
158
  }
159
+ // Validate entity
123
160
  const validationResult = entity.Validate();
124
161
  if (!validationResult.Success) {
125
162
  return {
@@ -128,6 +165,7 @@ export class EntityCRUDHandler {
128
165
  validationErrors: validationResult.Errors
129
166
  };
130
167
  }
168
+ // Save entity
131
169
  const saveSuccess = await entity.Save(options);
132
170
  if (!saveSuccess) {
133
171
  const latestResult = entity.LatestResult;
@@ -137,6 +175,7 @@ export class EntityCRUDHandler {
137
175
  details: latestResult
138
176
  };
139
177
  }
178
+ // Get entity data for response
140
179
  const entityData = await entity.GetDataObject();
141
180
  return { success: true, entity: entityData };
142
181
  }
@@ -145,17 +184,24 @@ export class EntityCRUDHandler {
145
184
  return { success: false, error: error?.message || 'Unknown error' };
146
185
  }
147
186
  }
187
+ /**
188
+ * Delete an entity
189
+ */
148
190
  static async deleteEntity(entityName, id, options, user) {
149
191
  try {
192
+ // Get entity object
150
193
  const md = new Metadata();
151
194
  const entity = await md.GetEntityObject(entityName, user);
195
+ // Check permissions
152
196
  if (!entity.CheckPermissions(EntityPermissionType.Delete, false)) {
153
197
  return {
154
198
  success: false,
155
199
  error: `User ${user.Name} does not have permission to delete ${entityName} records`
156
200
  };
157
201
  }
202
+ // Create composite key
158
203
  const compositeKey = this.createCompositeKeyFromId(entity, id);
204
+ // Load entity
159
205
  const loadSuccess = await entity.InnerLoad(compositeKey);
160
206
  if (!loadSuccess) {
161
207
  return {
@@ -163,6 +209,7 @@ export class EntityCRUDHandler {
163
209
  error: `${entityName} with ID ${id} not found`
164
210
  };
165
211
  }
212
+ // Delete the entity
166
213
  const deleteSuccess = await entity.Delete(options);
167
214
  if (!deleteSuccess) {
168
215
  const latestResult = entity.LatestResult;
@@ -179,17 +226,25 @@ export class EntityCRUDHandler {
179
226
  return { success: false, error: error?.message || 'Unknown error' };
180
227
  }
181
228
  }
229
+ /**
230
+ * Helper method to create a composite key from an ID
231
+ */
182
232
  static createCompositeKeyFromId(entity, id) {
183
233
  if (entity.EntityInfo.PrimaryKeys.length === 1) {
234
+ // Single primary key
184
235
  const primaryKeyField = entity.EntityInfo.PrimaryKeys[0].Name;
185
236
  const compositeKey = new CompositeKey();
186
237
  const strId = id.toString();
238
+ // Use key-value pairs instead of SetValue
187
239
  compositeKey.KeyValuePairs = [
188
240
  { FieldName: primaryKeyField, Value: strId }
189
241
  ];
190
242
  return compositeKey;
191
243
  }
192
244
  else {
245
+ // Composite primary key - this is a simplification
246
+ // In a real implementation, you would need to parse a composite ID string
247
+ // or accept an object with all primary key values
193
248
  throw new Error('Composite primary keys are not supported in this simplified implementation');
194
249
  }
195
250
  }
@@ -1 +1 @@
1
- {"version":3,"file":"EntityCRUDHandler.js","sourceRoot":"","sources":["../../src/rest/EntityCRUDHandler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EntityCRUDHandler.js","sourceRoot":"","sources":["../../src/rest/EntityCRUDHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * @fileoverview OAuth Callback Handler for MCP OAuth flows
3
+ *
4
+ * Handles OAuth authorization callbacks from external authorization servers.
5
+ * This endpoint is unauthenticated since it's called by the auth server after user consent.
6
+ *
7
+ * Endpoints:
8
+ * - GET /api/v1/oauth/callback - Authorization callback
9
+ * - GET /api/v1/oauth/status/:stateParameter - Poll for authorization status (authenticated)
10
+ * - POST /api/v1/oauth/initiate - Initiate OAuth flow (authenticated)
11
+ *
12
+ * @module @memberjunction/server/rest/OAuthCallbackHandler
13
+ */
14
+ import express from 'express';
15
+ /**
16
+ * Configuration for OAuth callback handler
17
+ */
18
+ export interface OAuthCallbackHandlerOptions {
19
+ /** Base URL for this MJAPI instance (for redirects) */
20
+ publicUrl: string;
21
+ /** URL to redirect to after successful authorization */
22
+ successRedirectUrl?: string;
23
+ /** URL to redirect to after failed authorization */
24
+ errorRedirectUrl?: string;
25
+ }
26
+ /**
27
+ * Handles OAuth callbacks and related endpoints for MCP server authentication.
28
+ *
29
+ * The callback endpoint is unauthenticated because it's called by external auth servers.
30
+ * It uses the state parameter to look up the authorization context and validate the flow.
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * const oauthHandler = new OAuthCallbackHandler({
35
+ * publicUrl: 'https://api.example.com'
36
+ * });
37
+ *
38
+ * // Mount unauthenticated callback route
39
+ * app.use('/api/v1/oauth', oauthHandler.getCallbackRouter());
40
+ *
41
+ * // Mount authenticated routes
42
+ * app.use('/api/v1/oauth', authMiddleware, oauthHandler.getAuthenticatedRouter());
43
+ * ```
44
+ */
45
+ export declare class OAuthCallbackHandler {
46
+ private readonly options;
47
+ private readonly oauthManager;
48
+ private readonly callbackRouter;
49
+ private readonly authenticatedRouter;
50
+ constructor(options: OAuthCallbackHandlerOptions);
51
+ /**
52
+ * Sets up all routes for OAuth handling.
53
+ */
54
+ private setupRoutes;
55
+ /**
56
+ * Renders a success page after OAuth authorization completes.
57
+ */
58
+ private handleSuccessPage;
59
+ /**
60
+ * Renders an error page when OAuth authorization fails.
61
+ */
62
+ private handleErrorPage;
63
+ /**
64
+ * Handles the OAuth authorization callback.
65
+ *
66
+ * This endpoint is unauthenticated - the auth server redirects here after user consent.
67
+ * We validate the state parameter and exchange the code for tokens.
68
+ *
69
+ * @param req - Express request
70
+ * @param res - Express response
71
+ */
72
+ private handleCallback;
73
+ /**
74
+ * Gets the status of an OAuth authorization flow.
75
+ *
76
+ * Authenticated endpoint for polling authorization status.
77
+ *
78
+ * @param req - Express request
79
+ * @param res - Express response
80
+ */
81
+ private getStatus;
82
+ /**
83
+ * Initiates a new OAuth authorization flow.
84
+ *
85
+ * Authenticated endpoint for starting OAuth authorization.
86
+ *
87
+ * @param req - Express request
88
+ * @param res - Express response
89
+ */
90
+ private initiateFlow;
91
+ /**
92
+ * Exchanges an authorization code for tokens.
93
+ *
94
+ * This endpoint is used when the frontend handles the OAuth callback.
95
+ * The frontend receives the code and state from the OAuth provider redirect,
96
+ * then calls this authenticated endpoint to complete the token exchange.
97
+ *
98
+ * @param req - Express request with { code, state } in body
99
+ * @param res - Express response
100
+ */
101
+ private handleExchange;
102
+ /**
103
+ * Gets the system user from cache.
104
+ */
105
+ private getSystemUser;
106
+ /**
107
+ * Loads authorization state from database.
108
+ */
109
+ private loadAuthorizationState;
110
+ /**
111
+ * Loads connection and server OAuth configuration.
112
+ */
113
+ private loadConnectionConfig;
114
+ /**
115
+ * Redirects to success page with state info.
116
+ * If a frontend return URL is provided, redirects there instead of the default success page.
117
+ */
118
+ private redirectToSuccess;
119
+ /**
120
+ * Redirects to error page with error info.
121
+ * If a frontend return URL is provided, redirects there instead of the default error page.
122
+ */
123
+ private redirectToError;
124
+ /**
125
+ * Gets the router for unauthenticated callback endpoint.
126
+ */
127
+ getCallbackRouter(): express.Router;
128
+ /**
129
+ * Gets the router for authenticated OAuth endpoints.
130
+ */
131
+ getAuthenticatedRouter(): express.Router;
132
+ }
133
+ /**
134
+ * Creates and configures the OAuth callback handler.
135
+ *
136
+ * @param options - Handler configuration
137
+ * @returns Object with callback and authenticated routers
138
+ */
139
+ export declare function createOAuthCallbackHandler(options: OAuthCallbackHandlerOptions): {
140
+ callbackRouter: express.Router;
141
+ authenticatedRouter: express.Router;
142
+ };
143
+ //# sourceMappingURL=OAuthCallbackHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OAuthCallbackHandler.d.ts","sourceRoot":"","sources":["../../src/rest/OAuthCallbackHandler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;AAe9B;;GAEG;AACH,MAAM,WAAW,2BAA2B;IACxC,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oDAAoD;IACpD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,oBAAoB;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;IACtD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAiB;gBAEzC,OAAO,EAAE,2BAA2B;IAYhD;;OAEG;IACH,OAAO,CAAC,WAAW;IAcnB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA8BzB;;OAEG;IACH,OAAO,CAAC,eAAe;IAmCvB;;;;;;;;OAQG;YACW,cAAc;IAkF5B;;;;;;;OAOG;YACW,SAAS;IA0EvB;;;;;;;OAOG;YACW,YAAY;IA2F1B;;;;;;;;;OASG;YACW,cAAc;IA+F5B;;OAEG;IACH,OAAO,CAAC,aAAa;IAQrB;;OAEG;YACW,sBAAsB;IAoDpC;;OAEG;YACW,oBAAoB;IAmElC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAwBzB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAwBvB;;OAEG;IACI,iBAAiB,IAAI,OAAO,CAAC,MAAM;IAI1C;;OAEG;IACI,sBAAsB,IAAI,OAAO,CAAC,MAAM;CAGlD;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,2BAA2B,GAAG;IAC9E,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC;IAC/B,mBAAmB,EAAE,OAAO,CAAC,MAAM,CAAC;CACvC,CAMA"}