@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
@@ -54,6 +54,17 @@ export class RESTEndpointHandler {
54
54
  this.options = options;
55
55
  this.setupRoutes();
56
56
  }
57
+
58
+ /**
59
+ * Helper to safely extract a string from Express route params
60
+ * Express 5.x types params as string | string[] | undefined
61
+ */
62
+ private getStringParam(param: string | string[] | undefined): string {
63
+ if (Array.isArray(param)) {
64
+ return param[0] || '';
65
+ }
66
+ return param || '';
67
+ }
57
68
 
58
69
  /**
59
70
  * Determines if an entity is allowed based on include/exclude lists
@@ -190,13 +201,13 @@ export class RESTEndpointHandler {
190
201
  * Middleware to check entity access based on include/exclude lists
191
202
  */
192
203
  private checkEntityAccess(req: express.Request, res: express.Response, next: express.NextFunction): void {
193
- const entityName = req.params.entityName;
194
-
204
+ const entityName = this.getStringParam(req.params.entityName);
205
+
195
206
  if (!entityName) {
196
207
  next();
197
208
  return;
198
209
  }
199
-
210
+
200
211
  if (!this.isEntityAllowed(entityName)) {
201
212
  res.status(403).json({
202
213
  error: `Access to entity '${entityName}' is not allowed through the REST API`,
@@ -284,7 +295,7 @@ export class RESTEndpointHandler {
284
295
  */
285
296
  private async getEntityList(req: express.Request, res: express.Response): Promise<void> {
286
297
  try {
287
- const { entityName } = req.params;
298
+ const entityName = this.getStringParam(req.params.entityName);
288
299
  const { filter, orderBy, fields, maxRows, startRow } = req.query;
289
300
 
290
301
  const user = req['mjUser'];
@@ -312,12 +323,13 @@ export class RESTEndpointHandler {
312
323
  */
313
324
  private async getEntity(req: express.Request, res: express.Response): Promise<void> {
314
325
  try {
315
- const { entityName, id } = req.params;
326
+ const entityName = this.getStringParam(req.params.entityName);
327
+ const id = this.getStringParam(req.params.id);
316
328
  const { include } = req.query; // Optional related entities to include
317
-
329
+
318
330
  const user = req['mjUser'];
319
331
  const relatedEntities = include ? (include as string).split(',') : null;
320
-
332
+
321
333
  const result = await EntityCRUDHandler.getEntity(entityName, id, relatedEntities, user);
322
334
 
323
335
  if (result.success) {
@@ -336,7 +348,7 @@ export class RESTEndpointHandler {
336
348
  */
337
349
  private async createEntity(req: express.Request, res: express.Response): Promise<void> {
338
350
  try {
339
- const { entityName } = req.params;
351
+ const entityName = this.getStringParam(req.params.entityName);
340
352
  const entityData = req.body;
341
353
 
342
354
  const user = req['mjUser'];
@@ -362,11 +374,12 @@ export class RESTEndpointHandler {
362
374
  */
363
375
  private async updateEntity(req: express.Request, res: express.Response): Promise<void> {
364
376
  try {
365
- const { entityName, id } = req.params;
377
+ const entityName = this.getStringParam(req.params.entityName);
378
+ const id = this.getStringParam(req.params.id);
366
379
  const updateData = req.body;
367
-
380
+
368
381
  const user = req['mjUser'];
369
-
382
+
370
383
  const result = await EntityCRUDHandler.updateEntity(entityName, id, updateData, user);
371
384
 
372
385
  if (result.success) {
@@ -388,7 +401,8 @@ export class RESTEndpointHandler {
388
401
  */
389
402
  private async deleteEntity(req: express.Request, res: express.Response): Promise<void> {
390
403
  try {
391
- const { entityName, id } = req.params;
404
+ const entityName = this.getStringParam(req.params.entityName);
405
+ const id = this.getStringParam(req.params.id);
392
406
  const options = req.query.options ? JSON.parse(req.query.options as string) : {};
393
407
 
394
408
  const user = req['mjUser'];
@@ -417,13 +431,14 @@ export class RESTEndpointHandler {
417
431
  */
418
432
  private async getRecordChanges(req: express.Request, res: express.Response): Promise<void> {
419
433
  try {
420
- const { entityName, id } = req.params;
434
+ const entityName = this.getStringParam(req.params.entityName);
435
+ const id = this.getStringParam(req.params.id);
421
436
  const user = req['mjUser'];
422
-
437
+
423
438
  // Get the entity object
424
439
  const md = new Metadata();
425
440
  const entity = await md.GetEntityObject(entityName, user);
426
-
441
+
427
442
  // Create a composite key
428
443
  const compositeKey = this.createCompositeKey(entity.EntityInfo, id);
429
444
 
@@ -444,13 +459,14 @@ export class RESTEndpointHandler {
444
459
  */
445
460
  private async getRecordDependencies(req: express.Request, res: express.Response): Promise<void> {
446
461
  try {
447
- const { entityName, id } = req.params;
462
+ const entityName = this.getStringParam(req.params.entityName);
463
+ const id = this.getStringParam(req.params.id);
448
464
  const user = req['mjUser'];
449
-
465
+
450
466
  // Get the entity object
451
467
  const md = new Metadata();
452
468
  const entity = await md.GetEntityObject(entityName, user);
453
-
469
+
454
470
  // Create a composite key
455
471
  const compositeKey = this.createCompositeKey(entity.EntityInfo, id);
456
472
 
@@ -471,13 +487,14 @@ export class RESTEndpointHandler {
471
487
  */
472
488
  private async getEntityRecordName(req: express.Request, res: express.Response): Promise<void> {
473
489
  try {
474
- const { entityName, id } = req.params;
490
+ const entityName = this.getStringParam(req.params.entityName);
491
+ const id = this.getStringParam(req.params.id);
475
492
  const user = req['mjUser'];
476
-
493
+
477
494
  // Get the entity object
478
495
  const md = new Metadata();
479
496
  const entity = await md.GetEntityObject(entityName, user);
480
-
497
+
481
498
  // Create a composite key
482
499
  const compositeKey = this.createCompositeKey(entity.EntityInfo, id);
483
500
 
@@ -497,7 +514,7 @@ export class RESTEndpointHandler {
497
514
  */
498
515
  private async runView(req: express.Request, res: express.Response): Promise<void> {
499
516
  try {
500
- const { entityName } = req.params;
517
+ const entityName = this.getStringParam(req.params.entityName);
501
518
  const viewParams = req.body;
502
519
 
503
520
  const user = req['mjUser'];
@@ -627,8 +644,8 @@ export class RESTEndpointHandler {
627
644
  */
628
645
  private async getEntityFieldMetadata(req: express.Request, res: express.Response): Promise<void> {
629
646
  try {
630
- const { entityName } = req.params;
631
-
647
+ const entityName = this.getStringParam(req.params.entityName);
648
+
632
649
  const user = req['mjUser'];
633
650
 
634
651
  const md = new Metadata();
@@ -671,8 +688,8 @@ export class RESTEndpointHandler {
671
688
  */
672
689
  private async getViewsMetadata(req: express.Request, res: express.Response): Promise<void> {
673
690
  try {
674
- const { entityName } = req.params;
675
-
691
+ const entityName = this.getStringParam(req.params.entityName);
692
+
676
693
  const user = req['mjUser'];
677
694
 
678
695
  // This would need to be implemented to retrieve available views
@@ -691,13 +708,15 @@ export class RESTEndpointHandler {
691
708
  */
692
709
  private async getRecordFavoriteStatus(req: express.Request, res: express.Response): Promise<void> {
693
710
  try {
694
- const { userId, entityName, id } = req.params;
711
+ const userId = this.getStringParam(req.params.userId);
712
+ const entityName = this.getStringParam(req.params.entityName);
713
+ const id = this.getStringParam(req.params.id);
695
714
  const user = req['mjUser'];
696
-
715
+
697
716
  // Get the entity object
698
717
  const md = new Metadata();
699
718
  const entity = await md.GetEntityObject(entityName, user);
700
-
719
+
701
720
  // Create a composite key
702
721
  const compositeKey = this.createCompositeKey(entity.EntityInfo, id);
703
722
 
@@ -717,13 +736,15 @@ export class RESTEndpointHandler {
717
736
  */
718
737
  private async setRecordFavoriteStatus(req: express.Request, res: express.Response): Promise<void> {
719
738
  try {
720
- const { userId, entityName, id } = req.params;
739
+ const userId = this.getStringParam(req.params.userId);
740
+ const entityName = this.getStringParam(req.params.entityName);
741
+ const id = this.getStringParam(req.params.id);
721
742
  const user = req['mjUser'];
722
-
743
+
723
744
  // Get the entity object
724
745
  const md = new Metadata();
725
746
  const entity = await md.GetEntityObject(entityName, user);
726
-
747
+
727
748
  // Create a composite key
728
749
  const compositeKey = this.createCompositeKey(entity.EntityInfo, id);
729
750
 
@@ -743,13 +764,15 @@ export class RESTEndpointHandler {
743
764
  */
744
765
  private async removeRecordFavoriteStatus(req: express.Request, res: express.Response): Promise<void> {
745
766
  try {
746
- const { userId, entityName, id } = req.params;
767
+ const userId = this.getStringParam(req.params.userId);
768
+ const entityName = this.getStringParam(req.params.entityName);
769
+ const id = this.getStringParam(req.params.id);
747
770
  const user = req['mjUser'];
748
-
771
+
749
772
  // Get the entity object
750
773
  const md = new Metadata();
751
774
  const entity = await md.GetEntityObject(entityName, user);
752
-
775
+
753
776
  // Create a composite key
754
777
  const compositeKey = this.createCompositeKey(entity.EntityInfo, id);
755
778
 
package/src/rest/index.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './RESTEndpointHandler.js';
2
2
  export * from './EntityCRUDHandler.js';
3
3
  export * from './ViewOperationsHandler.js';
4
- export * from './setupRESTEndpoints.js';
4
+ export * from './setupRESTEndpoints.js';
5
+ export * from './OAuthCallbackHandler.js';
@@ -1,6 +1,5 @@
1
1
  import express from 'express';
2
2
  import { RESTEndpointHandler } from './RESTEndpointHandler.js';
3
-
4
3
 
5
4
  export const ___REST_API_BASE_PATH = '/api/v1';
6
5
 
@@ -9,17 +8,17 @@ export const ___REST_API_BASE_PATH = '/api/v1';
9
8
  */
10
9
  export interface RESTApiOptions {
11
10
  /**
12
- * Whether to enable REST API endpoints (default: true)
11
+ * Whether to enable REST API endpoints (default: false)
13
12
  */
14
13
  enabled: boolean;
15
-
14
+
16
15
  /**
17
16
  * Array of entity names to include in the API (case-insensitive)
18
17
  * If provided, only these entities will be accessible through the REST API
19
18
  * Supports wildcards using '*' (e.g., 'User*' matches 'User', 'UserRole', etc.)
20
19
  */
21
20
  includeEntities?: string[];
22
-
21
+
23
22
  /**
24
23
  * Array of entity names to exclude from the API (case-insensitive)
25
24
  * These entities will not be accessible through the REST API
@@ -27,13 +26,13 @@ export interface RESTApiOptions {
27
26
  * Note: Exclude patterns always override include patterns
28
27
  */
29
28
  excludeEntities?: string[];
30
-
29
+
31
30
  /**
32
31
  * Array of schema names to include in the API (case-insensitive)
33
32
  * If provided, only entities in these schemas will be accessible through the REST API
34
33
  */
35
34
  includeSchemas?: string[];
36
-
35
+
37
36
  /**
38
37
  * Array of schema names to exclude from the API (case-insensitive)
39
38
  * Entities in these schemas will not be accessible through the REST API
@@ -56,19 +55,21 @@ export const DEFAULT_REST_API_OPTIONS: RESTApiOptions = {
56
55
  * @param authMiddleware Optional authentication middleware to use
57
56
  */
58
57
  export function setupRESTEndpoints(
59
- app: express.Application,
58
+ app: express.Application,
60
59
  options?: Partial<RESTApiOptions>,
61
60
  authMiddleware?: express.RequestHandler
62
61
  ): void {
63
62
  // Merge with default options
64
63
  const config = { ...DEFAULT_REST_API_OPTIONS, ...options };
65
-
64
+
66
65
  // Skip setup if REST API is disabled
67
66
  if (!config.enabled) {
68
67
  console.log('REST API endpoints are disabled');
69
68
  return;
70
69
  }
71
-
70
+
71
+ const basePath = ___REST_API_BASE_PATH;
72
+
72
73
  // Create REST endpoint handler with entity and schema filters
73
74
  const restHandler = new RESTEndpointHandler({
74
75
  includeEntities: config.includeEntities ? config.includeEntities.map(e => e.toLowerCase()) : undefined,
@@ -76,14 +77,14 @@ export function setupRESTEndpoints(
76
77
  includeSchemas: config.includeSchemas ? config.includeSchemas.map(s => s.toLowerCase()) : undefined,
77
78
  excludeSchemas: config.excludeSchemas ? config.excludeSchemas.map(s => s.toLowerCase()) : undefined
78
79
  });
79
-
80
+
80
81
  // Mount REST API at the specified base path with authentication
81
- const basePath = ___REST_API_BASE_PATH;
82
+ // This must come AFTER OAuth routes so they take precedence
82
83
  if (authMiddleware) {
83
84
  app.use(basePath, authMiddleware, restHandler.getRouter());
84
85
  } else {
85
86
  app.use(basePath, restHandler.getRouter());
86
87
  }
87
-
88
+
88
89
  console.log(`REST API endpoints have been set up at ${basePath}`);
89
90
  }