@memberjunction/server 2.97.0 → 2.99.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/generated/generated.d.ts +6 -0
- package/dist/generated/generated.d.ts.map +1 -1
- package/dist/generated/generated.js +32 -0
- package/dist/generated/generated.js.map +1 -1
- package/dist/generic/RunViewResolver.d.ts +5 -3
- package/dist/generic/RunViewResolver.d.ts.map +1 -1
- package/dist/generic/RunViewResolver.js +30 -18
- package/dist/generic/RunViewResolver.js.map +1 -1
- package/dist/resolvers/AskSkipResolver.d.ts +1 -0
- package/dist/resolvers/AskSkipResolver.d.ts.map +1 -1
- package/dist/resolvers/AskSkipResolver.js +1 -0
- package/dist/resolvers/AskSkipResolver.js.map +1 -1
- package/dist/resolvers/FileResolver.js +2 -2
- package/dist/resolvers/FileResolver.js.map +1 -1
- package/package.json +39 -39
- package/src/generated/generated.ts +20 -0
- package/src/generic/RunViewResolver.ts +30 -15
- package/src/resolvers/AskSkipResolver.ts +4 -1
- package/src/resolvers/FileResolver.ts +2 -2
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { Arg, Ctx, Field, InputType, Int, ObjectType, PubSubEngine, Query, Resolver } from 'type-graphql';
|
|
2
2
|
import { AppContext } from '../types.js';
|
|
3
3
|
import { ResolverBase } from './ResolverBase.js';
|
|
4
|
-
import { LogError, LogStatus } from '@memberjunction/core';
|
|
4
|
+
import { LogError, LogStatus, EntityInfo } from '@memberjunction/core';
|
|
5
5
|
import { RequireSystemUser } from '../directives/RequireSystemUser.js';
|
|
6
6
|
import { GetReadOnlyProvider } from '../util.js';
|
|
7
7
|
import { UserViewEntityExtended } from '@memberjunction/core-entities';
|
|
8
|
+
import { KeyValuePairOutputType } from './KeyInputOutputTypes.js';
|
|
8
9
|
|
|
9
10
|
/********************************************************************************
|
|
10
11
|
* The PURPOSE of this resolver is to provide a generic way to run a view and return the results.
|
|
@@ -384,8 +385,10 @@ export class RunViewGenericInput {
|
|
|
384
385
|
|
|
385
386
|
@ObjectType()
|
|
386
387
|
export class RunViewResultRow {
|
|
387
|
-
@Field(() =>
|
|
388
|
-
|
|
388
|
+
@Field(() => [KeyValuePairOutputType], {
|
|
389
|
+
description: 'Primary key values for the record'
|
|
390
|
+
})
|
|
391
|
+
PrimaryKey: KeyValuePairOutputType[];
|
|
389
392
|
|
|
390
393
|
@Field(() => String)
|
|
391
394
|
EntityID: string;
|
|
@@ -396,8 +399,10 @@ export class RunViewResultRow {
|
|
|
396
399
|
|
|
397
400
|
@ObjectType()
|
|
398
401
|
export class RunViewGenericResultRow {
|
|
399
|
-
@Field(() =>
|
|
400
|
-
|
|
402
|
+
@Field(() => [KeyValuePairOutputType], {
|
|
403
|
+
description: 'Primary key values for the record'
|
|
404
|
+
})
|
|
405
|
+
PrimaryKey: KeyValuePairOutputType[];
|
|
401
406
|
|
|
402
407
|
@Field(() => String)
|
|
403
408
|
EntityID: string;
|
|
@@ -469,7 +474,8 @@ export class RunViewResolver extends ResolverBase {
|
|
|
469
474
|
return null;
|
|
470
475
|
|
|
471
476
|
const viewInfo = super.safeFirstArrayElement<UserViewEntityExtended>(await super.findBy<UserViewEntityExtended>(provider, "User Views", { Name: input.ViewName }, userPayload.userRecord));
|
|
472
|
-
const
|
|
477
|
+
const entity = provider.Entities.find((e) => e.ID === viewInfo.EntityID);
|
|
478
|
+
const returnData = this.processRawData(rawData.Results, viewInfo.EntityID, entity);
|
|
473
479
|
return {
|
|
474
480
|
Results: returnData,
|
|
475
481
|
UserViewRunID: rawData?.UserViewRunID,
|
|
@@ -496,7 +502,8 @@ export class RunViewResolver extends ResolverBase {
|
|
|
496
502
|
return null;
|
|
497
503
|
|
|
498
504
|
const viewInfo = super.safeFirstArrayElement<UserViewEntityExtended>(await super.findBy<UserViewEntityExtended>(provider, "User Views", { ID: input.ViewID }, userPayload.userRecord));
|
|
499
|
-
const
|
|
505
|
+
const entity = provider.Entities.find((e) => e.ID === viewInfo.EntityID);
|
|
506
|
+
const returnData = this.processRawData(rawData.Results, viewInfo.EntityID, entity);
|
|
500
507
|
return {
|
|
501
508
|
Results: returnData,
|
|
502
509
|
UserViewRunID: rawData?.UserViewRunID,
|
|
@@ -522,7 +529,7 @@ export class RunViewResolver extends ResolverBase {
|
|
|
522
529
|
if (rawData === null) return null;
|
|
523
530
|
|
|
524
531
|
const entity = provider.Entities.find((e) => e.Name === input.EntityName);
|
|
525
|
-
const returnData = this.processRawData(rawData.Results, entity.ID);
|
|
532
|
+
const returnData = this.processRawData(rawData.Results, entity.ID, entity);
|
|
526
533
|
return {
|
|
527
534
|
Results: returnData,
|
|
528
535
|
UserViewRunID: rawData?.UserViewRunID,
|
|
@@ -552,7 +559,7 @@ export class RunViewResolver extends ResolverBase {
|
|
|
552
559
|
let results: RunViewGenericResult[] = [];
|
|
553
560
|
for (const [index, data] of rawData.entries()) {
|
|
554
561
|
const entity = provider.Entities.find((e) => e.Name === input[index].EntityName);
|
|
555
|
-
const returnData: any[] = this.processRawData(data.Results, entity.ID);
|
|
562
|
+
const returnData: any[] = this.processRawData(data.Results, entity.ID, entity);
|
|
556
563
|
|
|
557
564
|
results.push({
|
|
558
565
|
Results: returnData,
|
|
@@ -594,7 +601,7 @@ export class RunViewResolver extends ResolverBase {
|
|
|
594
601
|
|
|
595
602
|
const entity = provider.Entities.find((e) => e.Name === input.ViewName);
|
|
596
603
|
const entityId = entity ? entity.ID : null;
|
|
597
|
-
const returnData = this.processRawData(rawData.Results, entityId);
|
|
604
|
+
const returnData = this.processRawData(rawData.Results, entityId, entity);
|
|
598
605
|
return {
|
|
599
606
|
Results: returnData,
|
|
600
607
|
UserViewRunID: rawData?.UserViewRunID,
|
|
@@ -640,7 +647,8 @@ export class RunViewResolver extends ResolverBase {
|
|
|
640
647
|
}
|
|
641
648
|
|
|
642
649
|
const viewInfo = super.safeFirstArrayElement<UserViewEntityExtended>(await super.findBy<UserViewEntityExtended>(provider, "User Views", { ID: input.ViewID }, userPayload.userRecord));
|
|
643
|
-
const
|
|
650
|
+
const entity = provider.Entities.find((e) => e.ID === viewInfo.EntityID);
|
|
651
|
+
const returnData = this.processRawData(rawData.Results, viewInfo.EntityID, entity);
|
|
644
652
|
return {
|
|
645
653
|
Results: returnData,
|
|
646
654
|
UserViewRunID: rawData?.UserViewRunID,
|
|
@@ -698,7 +706,7 @@ export class RunViewResolver extends ResolverBase {
|
|
|
698
706
|
ExecutionTime: 0
|
|
699
707
|
};
|
|
700
708
|
}
|
|
701
|
-
const returnData = this.processRawData(rawData.Results, entity.ID);
|
|
709
|
+
const returnData = this.processRawData(rawData.Results, entity.ID, entity);
|
|
702
710
|
return {
|
|
703
711
|
Results: returnData,
|
|
704
712
|
UserViewRunID: rawData?.UserViewRunID,
|
|
@@ -743,7 +751,7 @@ export class RunViewResolver extends ResolverBase {
|
|
|
743
751
|
LogError(new Error(`Entity with name ${input[index].EntityName} not found`));
|
|
744
752
|
continue;
|
|
745
753
|
}
|
|
746
|
-
const returnData: any[] = this.processRawData(data.Results, entity.ID);
|
|
754
|
+
const returnData: any[] = this.processRawData(data.Results, entity.ID, entity);
|
|
747
755
|
|
|
748
756
|
results.push({
|
|
749
757
|
Results: returnData,
|
|
@@ -763,12 +771,19 @@ export class RunViewResolver extends ResolverBase {
|
|
|
763
771
|
}
|
|
764
772
|
}
|
|
765
773
|
|
|
766
|
-
protected processRawData(rawData: any[], entityId: string): RunViewResultRow[] {
|
|
774
|
+
protected processRawData(rawData: any[], entityId: string, entityInfo: EntityInfo): RunViewResultRow[] {
|
|
767
775
|
const returnResult = [];
|
|
768
776
|
for (let i = 0; i < rawData.length; i++) {
|
|
769
777
|
const row = rawData[i];
|
|
778
|
+
|
|
779
|
+
// Build the primary key array from the entity's primary key fields
|
|
780
|
+
const primaryKey: KeyValuePairOutputType[] = entityInfo.PrimaryKeys.map(pk => ({
|
|
781
|
+
FieldName: pk.Name,
|
|
782
|
+
Value: row[pk.Name]?.toString() || ''
|
|
783
|
+
}));
|
|
784
|
+
|
|
770
785
|
returnResult.push({
|
|
771
|
-
|
|
786
|
+
PrimaryKey: primaryKey,
|
|
772
787
|
EntityID: entityId,
|
|
773
788
|
Data: JSON.stringify(row),
|
|
774
789
|
});
|
|
@@ -445,7 +445,9 @@ type BaseSkipRequest = {
|
|
|
445
445
|
/** API key for the calling server */
|
|
446
446
|
callingServerAPIKey: string,
|
|
447
447
|
/** Access token for the calling server */
|
|
448
|
-
callingServerAccessToken: string
|
|
448
|
+
callingServerAccessToken: string,
|
|
449
|
+
/** Email of the user making the request */
|
|
450
|
+
userEmail: string
|
|
449
451
|
}
|
|
450
452
|
/**
|
|
451
453
|
* Resolver for Skip AI interactions
|
|
@@ -1054,6 +1056,7 @@ cycle.`);
|
|
|
1054
1056
|
queries,
|
|
1055
1057
|
notes,
|
|
1056
1058
|
noteTypes,
|
|
1059
|
+
userEmail: contextUser.Email,
|
|
1057
1060
|
requests,
|
|
1058
1061
|
accessToken,
|
|
1059
1062
|
organizationID: skipConfigInfo.orgID,
|
|
@@ -107,7 +107,7 @@ export class FileResolver extends FileResolverBase {
|
|
|
107
107
|
@PubSub() pubSub: PubSubEngine
|
|
108
108
|
) {
|
|
109
109
|
// if the name is changing, rename the target object as well
|
|
110
|
-
const md = GetReadOnlyProvider(context.providers);
|
|
110
|
+
const md = GetReadOnlyProvider(context.providers, {allowFallbackToReadWrite: true});
|
|
111
111
|
const user = this.GetUserFromPayload(context.userPayload);
|
|
112
112
|
const fileEntity = await md.GetEntityObject<FileEntity>('Files', user);
|
|
113
113
|
fileEntity.CheckPermissions(EntityPermissionType.Update, true);
|
|
@@ -135,7 +135,7 @@ export class FileResolver extends FileResolverBase {
|
|
|
135
135
|
@Ctx() context: AppContext,
|
|
136
136
|
@PubSub() pubSub: PubSubEngine
|
|
137
137
|
) {
|
|
138
|
-
const md = GetReadOnlyProvider(context.providers);
|
|
138
|
+
const md = GetReadOnlyProvider(context.providers, {allowFallbackToReadWrite: true});
|
|
139
139
|
const userInfo = this.GetUserFromPayload(context.userPayload);
|
|
140
140
|
|
|
141
141
|
const fileEntity = await md.GetEntityObject<FileEntity>('Files', userInfo);
|