@memberjunction/server 3.4.0 → 4.0.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 +65 -0
- package/dist/agents/skip-agent.d.ts.map +1 -1
- package/dist/agents/skip-agent.js +63 -5
- package/dist/agents/skip-agent.js.map +1 -1
- package/dist/agents/skip-sdk.d.ts +163 -0
- package/dist/agents/skip-sdk.d.ts.map +1 -1
- package/dist/agents/skip-sdk.js +143 -12
- package/dist/agents/skip-sdk.js.map +1 -1
- package/dist/apolloServer/TransactionPlugin.d.ts +4 -0
- package/dist/apolloServer/TransactionPlugin.d.ts.map +1 -0
- package/dist/apolloServer/TransactionPlugin.js +46 -0
- package/dist/apolloServer/TransactionPlugin.js.map +1 -0
- package/dist/apolloServer/index.d.ts +0 -1
- package/dist/apolloServer/index.d.ts.map +1 -1
- package/dist/auth/APIKeyScopeAuth.d.ts +82 -0
- package/dist/auth/APIKeyScopeAuth.d.ts.map +1 -1
- package/dist/auth/APIKeyScopeAuth.js +78 -0
- package/dist/auth/APIKeyScopeAuth.js.map +1 -1
- package/dist/auth/AuthProviderFactory.d.ts +35 -0
- package/dist/auth/AuthProviderFactory.d.ts.map +1 -1
- package/dist/auth/AuthProviderFactory.js +51 -4
- package/dist/auth/AuthProviderFactory.js.map +1 -1
- package/dist/auth/BaseAuthProvider.d.ts +21 -0
- package/dist/auth/BaseAuthProvider.d.ts.map +1 -1
- package/dist/auth/BaseAuthProvider.js +24 -9
- package/dist/auth/BaseAuthProvider.js.map +1 -1
- package/dist/auth/IAuthProvider.d.ts +32 -0
- package/dist/auth/IAuthProvider.d.ts.map +1 -1
- package/dist/auth/__tests__/backward-compatibility.test.d.ts +2 -0
- package/dist/auth/__tests__/backward-compatibility.test.d.ts.map +1 -0
- package/dist/auth/__tests__/backward-compatibility.test.js +135 -0
- package/dist/auth/__tests__/backward-compatibility.test.js.map +1 -0
- package/dist/auth/exampleNewUserSubClass.d.ts +5 -1
- package/dist/auth/exampleNewUserSubClass.d.ts.map +1 -1
- package/dist/auth/exampleNewUserSubClass.js +21 -6
- package/dist/auth/exampleNewUserSubClass.js.map +1 -1
- package/dist/auth/index.d.ts +14 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +35 -22
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/initializeProviders.d.ts +3 -0
- package/dist/auth/initializeProviders.d.ts.map +1 -1
- package/dist/auth/initializeProviders.js +6 -0
- package/dist/auth/initializeProviders.js.map +1 -1
- package/dist/auth/newUsers.js +11 -2
- package/dist/auth/newUsers.js.map +1 -1
- package/dist/auth/providers/Auth0Provider.d.ts +9 -0
- package/dist/auth/providers/Auth0Provider.d.ts.map +1 -1
- package/dist/auth/providers/Auth0Provider.js +10 -0
- package/dist/auth/providers/Auth0Provider.js.map +1 -1
- package/dist/auth/providers/CognitoProvider.d.ts +9 -0
- package/dist/auth/providers/CognitoProvider.d.ts.map +1 -1
- package/dist/auth/providers/CognitoProvider.js +10 -0
- package/dist/auth/providers/CognitoProvider.js.map +1 -1
- package/dist/auth/providers/GoogleProvider.d.ts +9 -0
- package/dist/auth/providers/GoogleProvider.d.ts.map +1 -1
- package/dist/auth/providers/GoogleProvider.js +11 -1
- package/dist/auth/providers/GoogleProvider.js.map +1 -1
- package/dist/auth/providers/MSALProvider.d.ts +9 -0
- package/dist/auth/providers/MSALProvider.d.ts.map +1 -1
- package/dist/auth/providers/MSALProvider.js +10 -0
- package/dist/auth/providers/MSALProvider.js.map +1 -1
- package/dist/auth/providers/OktaProvider.d.ts +9 -0
- package/dist/auth/providers/OktaProvider.d.ts.map +1 -1
- package/dist/auth/providers/OktaProvider.js +10 -0
- package/dist/auth/providers/OktaProvider.js.map +1 -1
- package/dist/config.d.ts +12 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +42 -8
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +8 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +26 -4
- package/dist/context.js.map +1 -1
- package/dist/directives/Public.js +2 -0
- package/dist/directives/Public.js.map +1 -1
- package/dist/entitySubclasses/entityPermissions.server.d.ts +7 -2
- package/dist/entitySubclasses/entityPermissions.server.d.ts.map +1 -1
- package/dist/entitySubclasses/entityPermissions.server.js +26 -8
- package/dist/entitySubclasses/entityPermissions.server.js.map +1 -1
- package/dist/generated/generated.d.ts +529 -6
- package/dist/generated/generated.d.ts.map +1 -1
- package/dist/generated/generated.js +10054 -15076
- package/dist/generated/generated.js.map +1 -1
- package/dist/generic/DeleteOptionsInput.d.ts +3 -0
- package/dist/generic/DeleteOptionsInput.d.ts.map +1 -1
- package/dist/generic/DeleteOptionsInput.js +3 -2
- package/dist/generic/DeleteOptionsInput.js.map +1 -1
- package/dist/generic/KeyInputOutputTypes.js +0 -6
- package/dist/generic/KeyInputOutputTypes.js.map +1 -1
- package/dist/generic/KeyValuePairInput.d.ts +4 -0
- package/dist/generic/KeyValuePairInput.d.ts.map +1 -1
- package/dist/generic/KeyValuePairInput.js +4 -2
- package/dist/generic/KeyValuePairInput.js.map +1 -1
- package/dist/generic/PushStatusResolver.js +0 -3
- package/dist/generic/PushStatusResolver.js.map +1 -1
- package/dist/generic/ResolverBase.d.ts +58 -0
- package/dist/generic/ResolverBase.d.ts.map +1 -1
- package/dist/generic/ResolverBase.js +203 -18
- package/dist/generic/ResolverBase.js.map +1 -1
- package/dist/generic/RunViewResolver.d.ts +22 -0
- package/dist/generic/RunViewResolver.d.ts.map +1 -1
- package/dist/generic/RunViewResolver.js +42 -108
- package/dist/generic/RunViewResolver.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +82 -37
- package/dist/index.js.map +1 -1
- package/dist/orm.d.ts.map +1 -1
- package/dist/orm.js +2 -1
- package/dist/orm.js.map +1 -1
- package/dist/resolvers/APIKeyResolver.d.ts +74 -0
- package/dist/resolvers/APIKeyResolver.d.ts.map +1 -1
- package/dist/resolvers/APIKeyResolver.js +49 -10
- package/dist/resolvers/APIKeyResolver.js.map +1 -1
- package/dist/resolvers/ActionResolver.d.ts +189 -0
- package/dist/resolvers/ActionResolver.d.ts.map +1 -1
- package/dist/resolvers/ActionResolver.js +152 -21
- package/dist/resolvers/ActionResolver.js.map +1 -1
- package/dist/resolvers/AskSkipResolver.d.ts +123 -0
- package/dist/resolvers/AskSkipResolver.d.ts.map +1 -0
- package/dist/resolvers/AskSkipResolver.js +1788 -0
- package/dist/resolvers/AskSkipResolver.js.map +1 -0
- package/dist/resolvers/ColorResolver.js +0 -5
- package/dist/resolvers/ColorResolver.js.map +1 -1
- package/dist/resolvers/ComponentRegistryResolver.d.ts +65 -0
- package/dist/resolvers/ComponentRegistryResolver.d.ts.map +1 -1
- package/dist/resolvers/ComponentRegistryResolver.js +118 -40
- package/dist/resolvers/ComponentRegistryResolver.js.map +1 -1
- package/dist/resolvers/CreateQueryResolver.d.ts +47 -0
- package/dist/resolvers/CreateQueryResolver.d.ts.map +1 -1
- package/dist/resolvers/CreateQueryResolver.js +92 -116
- package/dist/resolvers/CreateQueryResolver.js.map +1 -1
- package/dist/resolvers/DatasetResolver.js +2 -14
- package/dist/resolvers/DatasetResolver.js.map +1 -1
- package/dist/resolvers/EntityCommunicationsResolver.d.ts +40 -0
- package/dist/resolvers/EntityCommunicationsResolver.d.ts.map +1 -1
- package/dist/resolvers/EntityCommunicationsResolver.js +2 -36
- package/dist/resolvers/EntityCommunicationsResolver.js.map +1 -1
- package/dist/resolvers/EntityRecordNameResolver.js +0 -7
- package/dist/resolvers/EntityRecordNameResolver.js.map +1 -1
- package/dist/resolvers/FileCategoryResolver.js +13 -1
- package/dist/resolvers/FileCategoryResolver.js.map +1 -1
- package/dist/resolvers/FileResolver.d.ts +16 -0
- package/dist/resolvers/FileResolver.d.ts.map +1 -1
- package/dist/resolvers/FileResolver.js +59 -74
- package/dist/resolvers/FileResolver.js.map +1 -1
- package/dist/resolvers/GetDataContextDataResolver.d.ts +18 -1
- package/dist/resolvers/GetDataContextDataResolver.d.ts.map +1 -1
- package/dist/resolvers/GetDataContextDataResolver.js +17 -9
- package/dist/resolvers/GetDataContextDataResolver.js.map +1 -1
- package/dist/resolvers/GetDataResolver.d.ts +19 -0
- package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
- package/dist/resolvers/GetDataResolver.js +35 -35
- package/dist/resolvers/GetDataResolver.js.map +1 -1
- package/dist/resolvers/InfoResolver.d.ts.map +1 -1
- package/dist/resolvers/InfoResolver.js +4 -7
- package/dist/resolvers/InfoResolver.js.map +1 -1
- package/dist/resolvers/MCPResolver.d.ts +325 -1
- package/dist/resolvers/MCPResolver.d.ts.map +1 -1
- package/dist/resolvers/MCPResolver.js +931 -24
- package/dist/resolvers/MCPResolver.js.map +1 -1
- package/dist/resolvers/MergeRecordsResolver.js +3 -29
- package/dist/resolvers/MergeRecordsResolver.js.map +1 -1
- package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts.map +1 -1
- package/dist/resolvers/PotentialDuplicateRecordResolver.js +0 -3
- package/dist/resolvers/PotentialDuplicateRecordResolver.js.map +1 -1
- package/dist/resolvers/QueryResolver.d.ts +20 -0
- package/dist/resolvers/QueryResolver.d.ts.map +1 -1
- package/dist/resolvers/QueryResolver.js +44 -36
- package/dist/resolvers/QueryResolver.js.map +1 -1
- package/dist/resolvers/ReportResolver.d.ts +3 -0
- package/dist/resolvers/ReportResolver.d.ts.map +1 -1
- package/dist/resolvers/ReportResolver.js +9 -10
- package/dist/resolvers/ReportResolver.js.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.d.ts +54 -0
- package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.js +116 -40
- package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
- package/dist/resolvers/RunAIPromptResolver.d.ts +42 -0
- package/dist/resolvers/RunAIPromptResolver.d.ts.map +1 -1
- package/dist/resolvers/RunAIPromptResolver.js +95 -22
- package/dist/resolvers/RunAIPromptResolver.js.map +1 -1
- package/dist/resolvers/RunTemplateResolver.js +9 -6
- package/dist/resolvers/RunTemplateResolver.js.map +1 -1
- package/dist/resolvers/RunTestResolver.d.ts +12 -0
- package/dist/resolvers/RunTestResolver.d.ts.map +1 -1
- package/dist/resolvers/RunTestResolver.js +35 -21
- package/dist/resolvers/RunTestResolver.js.map +1 -1
- package/dist/resolvers/SqlLoggingConfigResolver.d.ts +312 -0
- package/dist/resolvers/SqlLoggingConfigResolver.d.ts.map +1 -1
- package/dist/resolvers/SqlLoggingConfigResolver.js +295 -45
- package/dist/resolvers/SqlLoggingConfigResolver.js.map +1 -1
- package/dist/resolvers/SyncDataResolver.d.ts +21 -0
- package/dist/resolvers/SyncDataResolver.d.ts.map +1 -1
- package/dist/resolvers/SyncDataResolver.js +36 -22
- package/dist/resolvers/SyncDataResolver.js.map +1 -1
- package/dist/resolvers/SyncRolesUsersResolver.d.ts +14 -0
- package/dist/resolvers/SyncRolesUsersResolver.d.ts.map +1 -1
- package/dist/resolvers/SyncRolesUsersResolver.js +54 -21
- package/dist/resolvers/SyncRolesUsersResolver.js.map +1 -1
- package/dist/resolvers/TaskResolver.d.ts +13 -0
- package/dist/resolvers/TaskResolver.d.ts.map +1 -1
- package/dist/resolvers/TaskResolver.js +22 -7
- package/dist/resolvers/TaskResolver.js.map +1 -1
- package/dist/resolvers/TelemetryResolver.d.ts +22 -0
- package/dist/resolvers/TelemetryResolver.d.ts.map +1 -1
- package/dist/resolvers/TelemetryResolver.js +45 -79
- package/dist/resolvers/TelemetryResolver.js.map +1 -1
- package/dist/resolvers/TransactionGroupResolver.js +11 -13
- package/dist/resolvers/TransactionGroupResolver.js.map +1 -1
- package/dist/resolvers/UserFavoriteResolver.js +3 -12
- package/dist/resolvers/UserFavoriteResolver.js.map +1 -1
- package/dist/resolvers/UserResolver.js +10 -0
- package/dist/resolvers/UserResolver.js.map +1 -1
- package/dist/resolvers/UserViewResolver.js +4 -0
- package/dist/resolvers/UserViewResolver.js.map +1 -1
- package/dist/resolvers/VersionHistoryResolver.d.ts +39 -0
- package/dist/resolvers/VersionHistoryResolver.d.ts.map +1 -0
- package/dist/resolvers/VersionHistoryResolver.js +208 -0
- package/dist/resolvers/VersionHistoryResolver.js.map +1 -0
- package/dist/rest/EntityCRUDHandler.d.ts +19 -0
- package/dist/rest/EntityCRUDHandler.d.ts.map +1 -1
- package/dist/rest/EntityCRUDHandler.js +55 -0
- package/dist/rest/EntityCRUDHandler.js.map +1 -1
- package/dist/rest/OAuthCallbackHandler.d.ts +143 -0
- package/dist/rest/OAuthCallbackHandler.d.ts.map +1 -0
- package/dist/rest/OAuthCallbackHandler.js +634 -0
- package/dist/rest/OAuthCallbackHandler.js.map +1 -0
- package/dist/rest/RESTEndpointHandler.d.ts +120 -0
- package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
- package/dist/rest/RESTEndpointHandler.js +213 -24
- package/dist/rest/RESTEndpointHandler.js.map +1 -1
- package/dist/rest/ViewOperationsHandler.d.ts +19 -0
- package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
- package/dist/rest/ViewOperationsHandler.js +39 -0
- package/dist/rest/ViewOperationsHandler.js.map +1 -1
- package/dist/rest/index.d.ts +1 -0
- package/dist/rest/index.d.ts.map +1 -1
- package/dist/rest/index.js +1 -0
- package/dist/rest/index.js.map +1 -1
- package/dist/rest/setupRESTEndpoints.d.ts +35 -0
- package/dist/rest/setupRESTEndpoints.d.ts.map +1 -1
- package/dist/rest/setupRESTEndpoints.js +15 -1
- package/dist/rest/setupRESTEndpoints.js.map +1 -1
- package/dist/scheduler/LearningCycleScheduler.d.ts +4 -0
- package/dist/scheduler/LearningCycleScheduler.d.ts.map +1 -0
- package/dist/scheduler/LearningCycleScheduler.js +4 -0
- package/dist/scheduler/LearningCycleScheduler.js.map +1 -0
- package/dist/services/ScheduledJobsService.d.ts +31 -0
- package/dist/services/ScheduledJobsService.d.ts.map +1 -1
- package/dist/services/ScheduledJobsService.js +38 -4
- package/dist/services/ScheduledJobsService.js.map +1 -1
- package/dist/services/TaskOrchestrator.d.ts +73 -0
- package/dist/services/TaskOrchestrator.d.ts.map +1 -1
- package/dist/services/TaskOrchestrator.js +137 -15
- package/dist/services/TaskOrchestrator.js.map +1 -1
- package/dist/types.d.ts +14 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -13
- package/dist/types.js.map +1 -1
- package/dist/util.d.ts +37 -1
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +55 -8
- package/dist/util.js.map +1 -1
- package/package.json +79 -78
- package/src/auth/exampleNewUserSubClass.ts +1 -5
- package/src/entitySubclasses/entityPermissions.server.ts +1 -3
- package/src/generated/generated.ts +4682 -2681
- package/src/index.ts +61 -62
- package/src/resolvers/InfoResolver.ts +5 -1
- package/src/resolvers/MCPResolver.ts +910 -10
- package/src/resolvers/PotentialDuplicateRecordResolver.ts +0 -4
- package/src/resolvers/VersionHistoryResolver.ts +177 -0
- package/src/rest/OAuthCallbackHandler.ts +766 -0
- package/src/rest/RESTEndpointHandler.ts +58 -35
- package/src/rest/index.ts +2 -1
- 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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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,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:
|
|
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
|
-
|
|
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
|
}
|