@memberjunction/server 0.9.128 → 0.9.141

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 (65) hide show
  1. package/build.log.json +27 -0
  2. package/dist/apolloServer/TransactionPlugin.js +45 -45
  3. package/dist/apolloServer/TransactionPlugin.js.map +1 -1
  4. package/dist/apolloServer/index.js +26 -26
  5. package/dist/auth/exampleNewUserSubClass.js +53 -63
  6. package/dist/auth/exampleNewUserSubClass.js.map +1 -1
  7. package/dist/auth/index.js +110 -104
  8. package/dist/auth/index.js.map +1 -1
  9. package/dist/auth/newUsers.js +65 -66
  10. package/dist/auth/newUsers.js.map +1 -1
  11. package/dist/cache.js +10 -10
  12. package/dist/config.js +62 -61
  13. package/dist/config.js.map +1 -1
  14. package/dist/context.js +101 -101
  15. package/dist/context.js.map +1 -1
  16. package/dist/directives/Public.js +33 -33
  17. package/dist/directives/Public.js.map +1 -1
  18. package/dist/directives/index.js +17 -17
  19. package/dist/entitySubclasses/userViewEntity.server.js +127 -127
  20. package/dist/entitySubclasses/userViewEntity.server.js.map +1 -1
  21. package/dist/generated/generated.js +20205 -19004
  22. package/dist/generated/generated.js.map +1 -1
  23. package/dist/generic/PushStatusResolver.js +58 -58
  24. package/dist/generic/PushStatusResolver.js.map +1 -1
  25. package/dist/generic/ResolverBase.js +231 -231
  26. package/dist/generic/ResolverBase.js.map +1 -1
  27. package/dist/generic/RunViewResolver.js +400 -400
  28. package/dist/generic/RunViewResolver.js.map +1 -1
  29. package/dist/index.js +131 -131
  30. package/dist/index.js.map +1 -1
  31. package/dist/orm.js +33 -33
  32. package/dist/orm.js.map +1 -1
  33. package/dist/resolvers/AskSkipResolver.js +246 -246
  34. package/dist/resolvers/AskSkipResolver.js.map +1 -1
  35. package/dist/resolvers/ColorResolver.js +93 -93
  36. package/dist/resolvers/ColorResolver.js.map +1 -1
  37. package/dist/resolvers/DatasetResolver.js +167 -167
  38. package/dist/resolvers/DatasetResolver.js.map +1 -1
  39. package/dist/resolvers/EntityRecordNameResolver.js +111 -111
  40. package/dist/resolvers/EntityRecordNameResolver.js.map +1 -1
  41. package/dist/resolvers/EntityResolver.js +59 -59
  42. package/dist/resolvers/EntityResolver.js.map +1 -1
  43. package/dist/resolvers/MergeRecordsResolver.js +282 -282
  44. package/dist/resolvers/MergeRecordsResolver.js.map +1 -1
  45. package/dist/resolvers/QueryResolver.js +74 -0
  46. package/dist/resolvers/QueryResolver.js.map +1 -0
  47. package/dist/resolvers/ReportResolver.js +73 -73
  48. package/dist/resolvers/ReportResolver.js.map +1 -1
  49. package/dist/resolvers/UserFavoriteResolver.js +161 -161
  50. package/dist/resolvers/UserFavoriteResolver.js.map +1 -1
  51. package/dist/resolvers/UserResolver.js +69 -69
  52. package/dist/resolvers/UserResolver.js.map +1 -1
  53. package/dist/resolvers/UserViewResolver.js +101 -101
  54. package/dist/resolvers/UserViewResolver.js.map +1 -1
  55. package/dist/types.js +2 -2
  56. package/package.json +11 -11
  57. package/src/apolloServer/TransactionPlugin.ts +1 -1
  58. package/src/auth/exampleNewUserSubClass.ts +3 -1
  59. package/src/auth/index.ts +13 -4
  60. package/src/config.ts +1 -0
  61. package/src/generated/generated.ts +921 -2
  62. package/src/resolvers/AskSkipResolver.ts +1 -1
  63. package/src/resolvers/QueryResolver.ts +42 -0
  64. package/src/resolvers/ReportResolver.ts +0 -15
  65. package/tsconfig.json +2 -2
@@ -1,59 +1,59 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var __param = (this && this.__param) || function (paramIndex, decorator) {
12
- return function (target, key) { decorator(target, key, paramIndex); }
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.PushStatusResolver = exports.PushStatusNotification = exports.PUSH_STATUS_UPDATES_TOPIC = void 0;
16
- const type_graphql_1 = require("type-graphql");
17
- exports.PUSH_STATUS_UPDATES_TOPIC = 'PUSH_STATUS_UPDATES';
18
- let PushStatusNotification = class PushStatusNotification {
19
- };
20
- __decorate([
21
- (0, type_graphql_1.Field)(() => String, { nullable: true }),
22
- __metadata("design:type", String)
23
- ], PushStatusNotification.prototype, "message", void 0);
24
- __decorate([
25
- (0, type_graphql_1.Field)((_type) => Date),
26
- __metadata("design:type", Date)
27
- ], PushStatusNotification.prototype, "date", void 0);
28
- __decorate([
29
- (0, type_graphql_1.Field)((_type) => type_graphql_1.ID),
30
- __metadata("design:type", String)
31
- ], PushStatusNotification.prototype, "sessionId", void 0);
32
- PushStatusNotification = __decorate([
33
- (0, type_graphql_1.ObjectType)()
34
- ], PushStatusNotification);
35
- exports.PushStatusNotification = PushStatusNotification;
36
- let PushStatusResolver = class PushStatusResolver {
37
- statusUpdates({ message }, sessionId) {
38
- return { message, date: new Date(), sessionId };
39
- }
40
- };
41
- __decorate([
42
- (0, type_graphql_1.Subscription)(() => PushStatusNotification, {
43
- topics: exports.PUSH_STATUS_UPDATES_TOPIC,
44
- filter: ({ payload, args, context }) => {
45
- console.log('context', context);
46
- return payload.sessionId === args.sessionId;
47
- },
48
- }),
49
- __param(0, (0, type_graphql_1.Root)()),
50
- __param(1, (0, type_graphql_1.Arg)('sessionId', () => String)),
51
- __metadata("design:type", Function),
52
- __metadata("design:paramtypes", [Object, String]),
53
- __metadata("design:returntype", PushStatusNotification)
54
- ], PushStatusResolver.prototype, "statusUpdates", null);
55
- PushStatusResolver = __decorate([
56
- (0, type_graphql_1.Resolver)()
57
- ], PushStatusResolver);
58
- exports.PushStatusResolver = PushStatusResolver;
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.PushStatusResolver = exports.PushStatusNotification = exports.PUSH_STATUS_UPDATES_TOPIC = void 0;
16
+ const type_graphql_1 = require("type-graphql");
17
+ exports.PUSH_STATUS_UPDATES_TOPIC = 'PUSH_STATUS_UPDATES';
18
+ let PushStatusNotification = class PushStatusNotification {
19
+ };
20
+ exports.PushStatusNotification = PushStatusNotification;
21
+ __decorate([
22
+ (0, type_graphql_1.Field)(() => String, { nullable: true }),
23
+ __metadata("design:type", String)
24
+ ], PushStatusNotification.prototype, "message", void 0);
25
+ __decorate([
26
+ (0, type_graphql_1.Field)((_type) => Date),
27
+ __metadata("design:type", Date)
28
+ ], PushStatusNotification.prototype, "date", void 0);
29
+ __decorate([
30
+ (0, type_graphql_1.Field)((_type) => type_graphql_1.ID),
31
+ __metadata("design:type", String)
32
+ ], PushStatusNotification.prototype, "sessionId", void 0);
33
+ exports.PushStatusNotification = PushStatusNotification = __decorate([
34
+ (0, type_graphql_1.ObjectType)()
35
+ ], PushStatusNotification);
36
+ let PushStatusResolver = class PushStatusResolver {
37
+ statusUpdates({ message }, sessionId) {
38
+ return { message, date: new Date(), sessionId };
39
+ }
40
+ };
41
+ exports.PushStatusResolver = PushStatusResolver;
42
+ __decorate([
43
+ (0, type_graphql_1.Subscription)(() => PushStatusNotification, {
44
+ topics: exports.PUSH_STATUS_UPDATES_TOPIC,
45
+ filter: ({ payload, args, context }) => {
46
+ console.log('context', context);
47
+ return payload.sessionId === args.sessionId;
48
+ },
49
+ }),
50
+ __param(0, (0, type_graphql_1.Root)()),
51
+ __param(1, (0, type_graphql_1.Arg)('sessionId', () => String)),
52
+ __metadata("design:type", Function),
53
+ __metadata("design:paramtypes", [Object, String]),
54
+ __metadata("design:returntype", PushStatusNotification)
55
+ ], PushStatusResolver.prototype, "statusUpdates", null);
56
+ exports.PushStatusResolver = PushStatusResolver = __decorate([
57
+ (0, type_graphql_1.Resolver)()
58
+ ], PushStatusResolver);
59
59
  //# sourceMappingURL=PushStatusResolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PushStatusResolver.js","sourceRoot":"","sources":["../../src/generic/PushStatusResolver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,+CAA4G;AAE/F,QAAA,yBAAyB,GAAG,qBAAqB,CAAC;AAGxD,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;CASlC,CAAA;AARC;IAAC,IAAA,oBAAK,EAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;uDACvB;AAEjB;IAAC,IAAA,oBAAK,EAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC;8BAChB,IAAI;oDAAC;AAEZ;IAAC,IAAA,oBAAK,EAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAE,CAAC;;yDACF;AARR,sBAAsB;IADlC,IAAA,yBAAU,GAAE;GACA,sBAAsB,CASlC;AATY,wDAAsB;AAqB5B,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAQ7B,aAAa,CACH,EAAE,OAAO,EAAiC,EAClB,SAAiB;QAEjD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC;IAClD,CAAC;CACF,CAAA;AAbC;IAAC,IAAA,2BAAY,EAAC,GAAG,EAAE,CAAC,sBAAsB,EAAE;QAC1C,MAAM,EAAE,iCAAyB;QACjC,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAsF,EAAE,EAAE;YACzH,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAChC,OAAO,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC;QAC9C,CAAC;KACF,CAAC;IAEC,WAAA,IAAA,mBAAI,GAAE,CAAA;IACN,WAAA,IAAA,kBAAG,EAAC,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;;;oCAC9B,sBAAsB;uDAExB;AAbU,kBAAkB;IAD9B,IAAA,uBAAQ,GAAE;GACE,kBAAkB,CAc9B;AAdY,gDAAkB"}
1
+ {"version":3,"file":"PushStatusResolver.js","sourceRoot":"","sources":["../../src/generic/PushStatusResolver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,+CAA4G;AAE/F,QAAA,yBAAyB,GAAG,qBAAqB,CAAC;AAGxD,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;CASlC,CAAA;AATY,wDAAsB;AAEjC;IADC,IAAA,oBAAK,EAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;uDACvB;AAGjB;IADC,IAAA,oBAAK,EAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC;8BAChB,IAAI;oDAAC;AAGZ;IADC,IAAA,oBAAK,EAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAE,CAAC;;yDACF;iCARR,sBAAsB;IADlC,IAAA,yBAAU,GAAE;GACA,sBAAsB,CASlC;AAYM,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAQ7B,aAAa,CACH,EAAE,OAAO,EAAiC,EAClB,SAAiB;QAEjD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC;IAClD,CAAC;CACF,CAAA;AAdY,gDAAkB;AAQ7B;IAPC,IAAA,2BAAY,EAAC,GAAG,EAAE,CAAC,sBAAsB,EAAE;QAC1C,MAAM,EAAE,iCAAyB;QACjC,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAsF,EAAE,EAAE;YACzH,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAChC,OAAO,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC;QAC9C,CAAC;KACF,CAAC;IAEC,WAAA,IAAA,mBAAI,GAAE,CAAA;IACN,WAAA,IAAA,kBAAG,EAAC,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;;;oCAC9B,sBAAsB;uDAExB;6BAbU,kBAAkB;IAD9B,IAAA,uBAAQ,GAAE;GACE,kBAAkB,CAc9B"}
@@ -1,232 +1,232 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ResolverBase = void 0;
4
- const core_1 = require("@memberjunction/core");
5
- const sqlserver_dataprovider_1 = require("@memberjunction/sqlserver-dataprovider");
6
- class ResolverBase {
7
- MapFieldNamesToCodeNames(entityName, dataObject) {
8
- if (dataObject) {
9
- const md = new core_1.Metadata();
10
- const entityInfo = md.Entities.find((e) => e.Name === entityName);
11
- if (!entityInfo)
12
- throw new Error(`Entity ${entityName} not found in metadata`);
13
- const fields = entityInfo.Fields.filter((f) => f.Name !== f.CodeName);
14
- fields.forEach((f) => {
15
- if (dataObject.hasOwnProperty(f.Name)) {
16
- dataObject[f.CodeName] = dataObject[f.Name];
17
- delete dataObject[f.Name];
18
- }
19
- });
20
- }
21
- return dataObject;
22
- }
23
- ArrayMapFieldNamesToCodeNames(entityName, dataObjectArray) {
24
- if (dataObjectArray && dataObjectArray.length > 0) {
25
- dataObjectArray.forEach((element) => {
26
- this.MapFieldNamesToCodeNames(entityName, element);
27
- });
28
- }
29
- return dataObjectArray;
30
- }
31
- async findBy(dataSource, entity, params) {
32
- const md = new core_1.Metadata();
33
- const e = md.Entities.find((e) => e.Name === entity);
34
- if (!e)
35
- throw new Error(`Entity ${entity} not found in metadata`);
36
- let sql = `SELECT * FROM ${e.SchemaName}.${e.BaseView} WHERE `;
37
- const keys = Object.keys(params);
38
- keys.forEach((k, i) => {
39
- if (i > 0)
40
- sql += ' AND ';
41
- const field = e.Fields.find((f) => f.Name === k);
42
- if (!field)
43
- throw new Error(`Field ${k} not found in entity ${entity}`);
44
- const quotes = field.NeedsQuotes ? "'" : '';
45
- sql += `${k} = ${quotes}${params[k]}${quotes}`;
46
- });
47
- const result = await dataSource.query(sql);
48
- return result;
49
- }
50
- async RunViewByNameGeneric(viewInput, dataSource, userPayload, pubSub) {
51
- try {
52
- const viewInfo = this.safeFirstArrayElement(await this.findBy(dataSource, 'User Views', { Name: viewInput.ViewName }));
53
- ;
54
- return this.RunViewGenericInternal(viewInfo, dataSource, viewInput.ExtraFilter, viewInput.OrderBy, viewInput.UserSearchString, viewInput.ExcludeUserViewRunID, viewInput.OverrideExcludeFilter, viewInput.SaveViewResults, viewInput.Fields, viewInput.IgnoreMaxRows, viewInput.ExcludeDataFromAllPriorViewRuns, viewInput.ForceAuditLog, viewInput.AuditLogDescription, userPayload, pubSub);
55
- }
56
- catch (err) {
57
- console.log(err);
58
- return null;
59
- }
60
- }
61
- async RunViewByIDGeneric(viewInput, dataSource, userPayload, pubSub) {
62
- try {
63
- const viewInfo = this.safeFirstArrayElement(await this.findBy(dataSource, 'User Views', { ID: viewInput.ViewID }));
64
- return this.RunViewGenericInternal(viewInfo, dataSource, viewInput.ExtraFilter, viewInput.OrderBy, viewInput.UserSearchString, viewInput.ExcludeUserViewRunID, viewInput.OverrideExcludeFilter, viewInput.SaveViewResults, viewInput.Fields, viewInput.IgnoreMaxRows, viewInput.ExcludeDataFromAllPriorViewRuns, viewInput.ForceAuditLog, viewInput.AuditLogDescription, userPayload, pubSub);
65
- }
66
- catch (err) {
67
- console.log(err);
68
- return null;
69
- }
70
- }
71
- async RunDynamicViewGeneric(viewInput, dataSource, userPayload, pubSub) {
72
- try {
73
- const md = new core_1.Metadata();
74
- const entity = md.Entities.find((e) => e.Name === viewInput.EntityName);
75
- if (!entity)
76
- throw new Error(`Entity ${viewInput.EntityName} not found in metadata`);
77
- const viewInfo = {
78
- ID: -1,
79
- Entity: viewInput.EntityName,
80
- EntityID: entity.ID,
81
- EntityBaseView: entity.BaseView,
82
- };
83
- return this.RunViewGenericInternal(viewInfo, dataSource, viewInput.ExtraFilter, viewInput.OrderBy, viewInput.UserSearchString, viewInput.ExcludeUserViewRunID, viewInput.OverrideExcludeFilter, false, viewInput.Fields, viewInput.IgnoreMaxRows, false, viewInput.ForceAuditLog, viewInput.AuditLogDescription, userPayload, pubSub);
84
- }
85
- catch (err) {
86
- console.log(err);
87
- return null;
88
- }
89
- }
90
- CheckUserReadPermissions(entityName, userPayload) {
91
- const md = new core_1.Metadata();
92
- const entityInfo = md.Entities.find((e) => e.Name === entityName);
93
- if (!userPayload)
94
- throw new Error(`userPayload is null`);
95
- if (entityInfo) {
96
- const userInfo = sqlserver_dataprovider_1.UserCache.Users.find((u) => u.Email.toLowerCase().trim() === userPayload.email.toLowerCase().trim());
97
- if (!userInfo)
98
- throw new Error(`User ${userPayload.email} not found in metadata`);
99
- const userPermissions = entityInfo.GetUserPermisions(userInfo);
100
- if (!userPermissions.CanRead)
101
- throw new Error(`User ${userPayload.email} does not have read permissions on ${entityInfo.Name}`);
102
- }
103
- else
104
- throw new Error(`Entity not found in metadata`);
105
- }
106
- async RunViewGenericInternal(viewInfo, dataSource, extraFilter, orderBy, userSearchString, excludeUserViewRunID, overrideExcludeFilter, saveViewResults, fields, ignoreMaxRows, excludeDataFromAllPriorViewRuns, forceAuditLog, auditLogDescription, userPayload, pubSub) {
107
- try {
108
- if (viewInfo && userPayload) {
109
- const md = new core_1.Metadata();
110
- const user = sqlserver_dataprovider_1.UserCache.Users.find((u) => u.Email.toLowerCase().trim() === userPayload?.email.toLowerCase().trim());
111
- if (!user)
112
- throw new Error(`User ${userPayload?.email} not found in metadata`);
113
- const entityInfo = md.Entities.find((e) => e.Name === viewInfo.Entity);
114
- if (!entityInfo)
115
- throw new Error(`Entity ${viewInfo.Entity} not found in metadata`);
116
- const rv = new core_1.RunView();
117
- const result = await rv.RunView({
118
- ViewID: viewInfo.ID,
119
- ViewName: viewInfo.Name,
120
- EntityName: viewInfo.Entity,
121
- ExtraFilter: extraFilter,
122
- OrderBy: orderBy,
123
- Fields: fields,
124
- UserSearchString: userSearchString,
125
- ExcludeUserViewRunID: excludeUserViewRunID,
126
- OverrideExcludeFilter: overrideExcludeFilter,
127
- SaveViewResults: saveViewResults,
128
- ExcludeDataFromAllPriorViewRuns: excludeDataFromAllPriorViewRuns,
129
- IgnoreMaxRows: ignoreMaxRows,
130
- ForceAuditLog: forceAuditLog,
131
- AuditLogDescription: auditLogDescription,
132
- }, user);
133
- return result;
134
- }
135
- else
136
- return null;
137
- }
138
- catch (err) {
139
- console.log(err);
140
- throw err;
141
- }
142
- }
143
- async createRecordAccessAuditLogRecord(userPayload, entityName, recordId) {
144
- try {
145
- const md = new core_1.Metadata();
146
- const entityInfo = md.Entities.find((e) => e.Name.trim().toLowerCase() === entityName.trim().toLowerCase());
147
- if (!entityInfo)
148
- throw new Error(`Entity ${entityName} not found in metadata`);
149
- if (entityInfo.AuditRecordAccess) {
150
- const userInfo = sqlserver_dataprovider_1.UserCache.Users.find((u) => u.Email.toLowerCase().trim() === userPayload?.email.toLowerCase().trim());
151
- const auditLogTypeName = 'Record Accessed';
152
- const auditLogType = md.AuditLogTypes.find((a) => a.Name.trim().toLowerCase() === auditLogTypeName.trim().toLowerCase());
153
- if (!userInfo)
154
- throw new Error(`User ${userPayload?.email} not found in metadata`);
155
- if (!auditLogType)
156
- throw new Error(`Audit Log Type ${auditLogTypeName} not found in metadata`);
157
- return await this.createAuditLogRecord(userPayload, null, auditLogTypeName, 'Success', null, entityInfo.ID, recordId);
158
- }
159
- }
160
- catch (e) {
161
- console.log(e);
162
- }
163
- }
164
- getRowLevelSecurityWhereClause(entityName, userPayload, type, returnPrefix) {
165
- const md = new core_1.Metadata();
166
- const entityInfo = md.Entities.find((e) => e.Name.trim().toLowerCase() === entityName.trim().toLowerCase());
167
- if (!entityInfo)
168
- throw new Error(`Entity ${entityName} not found in metadata`);
169
- const user = sqlserver_dataprovider_1.UserCache.Users.find((u) => u.Email.toLowerCase().trim() === userPayload?.email.toLowerCase().trim());
170
- if (!user)
171
- throw new Error(`User ${userPayload?.email} not found in metadata`);
172
- return entityInfo.GetUserRowLevelSecurityWhereClause(user, type, returnPrefix);
173
- }
174
- async createAuditLogRecord(userPayload, authorizationName, auditLogTypeName, status, details, entityId, recordId) {
175
- try {
176
- const md = new core_1.Metadata();
177
- const userInfo = sqlserver_dataprovider_1.UserCache.Users.find((u) => u.Email.toLowerCase().trim() === userPayload?.email.toLowerCase().trim());
178
- const authorization = authorizationName
179
- ? md.Authorizations.find((a) => a.Name.trim().toLowerCase() === authorizationName.trim().toLowerCase())
180
- : null;
181
- const auditLogType = md.AuditLogTypes.find((a) => a.Name.trim().toLowerCase() === auditLogTypeName.trim().toLowerCase());
182
- if (!userInfo)
183
- throw new Error(`User ${userPayload?.email} not found in metadata`);
184
- if (!auditLogType)
185
- throw new Error(`Audit Log Type ${auditLogTypeName} not found in metadata`);
186
- const auditLog = await md.GetEntityObject('Audit Logs', userInfo);
187
- auditLog.NewRecord();
188
- auditLog.UserID = userInfo.ID;
189
- auditLog.AuditLogTypeName = auditLogType.Name;
190
- if (authorization)
191
- auditLog.AuthorizationName = authorization.Name;
192
- auditLog.Status = status;
193
- if (details)
194
- auditLog.Details = details;
195
- auditLog.EntityID = entityId;
196
- if (recordId)
197
- auditLog.RecordID = recordId;
198
- if (await auditLog.Save())
199
- return auditLog;
200
- else
201
- throw new Error(`Error saving audit log record`);
202
- }
203
- catch (err) {
204
- console.log(err);
205
- return null;
206
- }
207
- }
208
- safeFirstArrayElement(arr) {
209
- if (arr && arr.length > 0) {
210
- return arr[0];
211
- }
212
- return null;
213
- }
214
- packageSPParam(paramValue, quoteString) {
215
- return paramValue === null || paramValue === undefined ? null : quoteString + paramValue + quoteString;
216
- }
217
- GetUserFromEmail(email) {
218
- const md = new core_1.Metadata();
219
- return sqlserver_dataprovider_1.UserCache.Users.find((u) => u.Email.toLowerCase().trim() === email.toLowerCase().trim());
220
- }
221
- GetUserFromPayload(userPayload) {
222
- if (!userPayload || !userPayload.email)
223
- return undefined;
224
- const md = new core_1.Metadata();
225
- return sqlserver_dataprovider_1.UserCache.Users.find((u) => u.Email.toLowerCase().trim() === userPayload.email.toLowerCase().trim());
226
- }
227
- get MJCoreSchema() {
228
- return core_1.Metadata.Provider.ConfigData.MJCoreSchemaName;
229
- }
230
- }
231
- exports.ResolverBase = ResolverBase;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResolverBase = void 0;
4
+ const core_1 = require("@memberjunction/core");
5
+ const sqlserver_dataprovider_1 = require("@memberjunction/sqlserver-dataprovider");
6
+ class ResolverBase {
7
+ MapFieldNamesToCodeNames(entityName, dataObject) {
8
+ if (dataObject) {
9
+ const md = new core_1.Metadata();
10
+ const entityInfo = md.Entities.find((e) => e.Name === entityName);
11
+ if (!entityInfo)
12
+ throw new Error(`Entity ${entityName} not found in metadata`);
13
+ const fields = entityInfo.Fields.filter((f) => f.Name !== f.CodeName);
14
+ fields.forEach((f) => {
15
+ if (dataObject.hasOwnProperty(f.Name)) {
16
+ dataObject[f.CodeName] = dataObject[f.Name];
17
+ delete dataObject[f.Name];
18
+ }
19
+ });
20
+ }
21
+ return dataObject;
22
+ }
23
+ ArrayMapFieldNamesToCodeNames(entityName, dataObjectArray) {
24
+ if (dataObjectArray && dataObjectArray.length > 0) {
25
+ dataObjectArray.forEach((element) => {
26
+ this.MapFieldNamesToCodeNames(entityName, element);
27
+ });
28
+ }
29
+ return dataObjectArray;
30
+ }
31
+ async findBy(dataSource, entity, params) {
32
+ const md = new core_1.Metadata();
33
+ const e = md.Entities.find((e) => e.Name === entity);
34
+ if (!e)
35
+ throw new Error(`Entity ${entity} not found in metadata`);
36
+ let sql = `SELECT * FROM ${e.SchemaName}.${e.BaseView} WHERE `;
37
+ const keys = Object.keys(params);
38
+ keys.forEach((k, i) => {
39
+ if (i > 0)
40
+ sql += ' AND ';
41
+ const field = e.Fields.find((f) => f.Name === k);
42
+ if (!field)
43
+ throw new Error(`Field ${k} not found in entity ${entity}`);
44
+ const quotes = field.NeedsQuotes ? "'" : '';
45
+ sql += `${k} = ${quotes}${params[k]}${quotes}`;
46
+ });
47
+ const result = await dataSource.query(sql);
48
+ return result;
49
+ }
50
+ async RunViewByNameGeneric(viewInput, dataSource, userPayload, pubSub) {
51
+ try {
52
+ const viewInfo = this.safeFirstArrayElement(await this.findBy(dataSource, 'User Views', { Name: viewInput.ViewName }));
53
+ ;
54
+ return this.RunViewGenericInternal(viewInfo, dataSource, viewInput.ExtraFilter, viewInput.OrderBy, viewInput.UserSearchString, viewInput.ExcludeUserViewRunID, viewInput.OverrideExcludeFilter, viewInput.SaveViewResults, viewInput.Fields, viewInput.IgnoreMaxRows, viewInput.ExcludeDataFromAllPriorViewRuns, viewInput.ForceAuditLog, viewInput.AuditLogDescription, userPayload, pubSub);
55
+ }
56
+ catch (err) {
57
+ console.log(err);
58
+ return null;
59
+ }
60
+ }
61
+ async RunViewByIDGeneric(viewInput, dataSource, userPayload, pubSub) {
62
+ try {
63
+ const viewInfo = this.safeFirstArrayElement(await this.findBy(dataSource, 'User Views', { ID: viewInput.ViewID }));
64
+ return this.RunViewGenericInternal(viewInfo, dataSource, viewInput.ExtraFilter, viewInput.OrderBy, viewInput.UserSearchString, viewInput.ExcludeUserViewRunID, viewInput.OverrideExcludeFilter, viewInput.SaveViewResults, viewInput.Fields, viewInput.IgnoreMaxRows, viewInput.ExcludeDataFromAllPriorViewRuns, viewInput.ForceAuditLog, viewInput.AuditLogDescription, userPayload, pubSub);
65
+ }
66
+ catch (err) {
67
+ console.log(err);
68
+ return null;
69
+ }
70
+ }
71
+ async RunDynamicViewGeneric(viewInput, dataSource, userPayload, pubSub) {
72
+ try {
73
+ const md = new core_1.Metadata();
74
+ const entity = md.Entities.find((e) => e.Name === viewInput.EntityName);
75
+ if (!entity)
76
+ throw new Error(`Entity ${viewInput.EntityName} not found in metadata`);
77
+ const viewInfo = {
78
+ ID: -1,
79
+ Entity: viewInput.EntityName,
80
+ EntityID: entity.ID,
81
+ EntityBaseView: entity.BaseView,
82
+ };
83
+ return this.RunViewGenericInternal(viewInfo, dataSource, viewInput.ExtraFilter, viewInput.OrderBy, viewInput.UserSearchString, viewInput.ExcludeUserViewRunID, viewInput.OverrideExcludeFilter, false, viewInput.Fields, viewInput.IgnoreMaxRows, false, viewInput.ForceAuditLog, viewInput.AuditLogDescription, userPayload, pubSub);
84
+ }
85
+ catch (err) {
86
+ console.log(err);
87
+ return null;
88
+ }
89
+ }
90
+ CheckUserReadPermissions(entityName, userPayload) {
91
+ const md = new core_1.Metadata();
92
+ const entityInfo = md.Entities.find((e) => e.Name === entityName);
93
+ if (!userPayload)
94
+ throw new Error(`userPayload is null`);
95
+ if (entityInfo) {
96
+ const userInfo = sqlserver_dataprovider_1.UserCache.Users.find((u) => u.Email.toLowerCase().trim() === userPayload.email.toLowerCase().trim());
97
+ if (!userInfo)
98
+ throw new Error(`User ${userPayload.email} not found in metadata`);
99
+ const userPermissions = entityInfo.GetUserPermisions(userInfo);
100
+ if (!userPermissions.CanRead)
101
+ throw new Error(`User ${userPayload.email} does not have read permissions on ${entityInfo.Name}`);
102
+ }
103
+ else
104
+ throw new Error(`Entity not found in metadata`);
105
+ }
106
+ async RunViewGenericInternal(viewInfo, dataSource, extraFilter, orderBy, userSearchString, excludeUserViewRunID, overrideExcludeFilter, saveViewResults, fields, ignoreMaxRows, excludeDataFromAllPriorViewRuns, forceAuditLog, auditLogDescription, userPayload, pubSub) {
107
+ try {
108
+ if (viewInfo && userPayload) {
109
+ const md = new core_1.Metadata();
110
+ const user = sqlserver_dataprovider_1.UserCache.Users.find((u) => u.Email.toLowerCase().trim() === userPayload?.email.toLowerCase().trim());
111
+ if (!user)
112
+ throw new Error(`User ${userPayload?.email} not found in metadata`);
113
+ const entityInfo = md.Entities.find((e) => e.Name === viewInfo.Entity);
114
+ if (!entityInfo)
115
+ throw new Error(`Entity ${viewInfo.Entity} not found in metadata`);
116
+ const rv = new core_1.RunView();
117
+ const result = await rv.RunView({
118
+ ViewID: viewInfo.ID,
119
+ ViewName: viewInfo.Name,
120
+ EntityName: viewInfo.Entity,
121
+ ExtraFilter: extraFilter,
122
+ OrderBy: orderBy,
123
+ Fields: fields,
124
+ UserSearchString: userSearchString,
125
+ ExcludeUserViewRunID: excludeUserViewRunID,
126
+ OverrideExcludeFilter: overrideExcludeFilter,
127
+ SaveViewResults: saveViewResults,
128
+ ExcludeDataFromAllPriorViewRuns: excludeDataFromAllPriorViewRuns,
129
+ IgnoreMaxRows: ignoreMaxRows,
130
+ ForceAuditLog: forceAuditLog,
131
+ AuditLogDescription: auditLogDescription,
132
+ }, user);
133
+ return result;
134
+ }
135
+ else
136
+ return null;
137
+ }
138
+ catch (err) {
139
+ console.log(err);
140
+ throw err;
141
+ }
142
+ }
143
+ async createRecordAccessAuditLogRecord(userPayload, entityName, recordId) {
144
+ try {
145
+ const md = new core_1.Metadata();
146
+ const entityInfo = md.Entities.find((e) => e.Name.trim().toLowerCase() === entityName.trim().toLowerCase());
147
+ if (!entityInfo)
148
+ throw new Error(`Entity ${entityName} not found in metadata`);
149
+ if (entityInfo.AuditRecordAccess) {
150
+ const userInfo = sqlserver_dataprovider_1.UserCache.Users.find((u) => u.Email.toLowerCase().trim() === userPayload?.email.toLowerCase().trim());
151
+ const auditLogTypeName = 'Record Accessed';
152
+ const auditLogType = md.AuditLogTypes.find((a) => a.Name.trim().toLowerCase() === auditLogTypeName.trim().toLowerCase());
153
+ if (!userInfo)
154
+ throw new Error(`User ${userPayload?.email} not found in metadata`);
155
+ if (!auditLogType)
156
+ throw new Error(`Audit Log Type ${auditLogTypeName} not found in metadata`);
157
+ return await this.createAuditLogRecord(userPayload, null, auditLogTypeName, 'Success', null, entityInfo.ID, recordId);
158
+ }
159
+ }
160
+ catch (e) {
161
+ console.log(e);
162
+ }
163
+ }
164
+ getRowLevelSecurityWhereClause(entityName, userPayload, type, returnPrefix) {
165
+ const md = new core_1.Metadata();
166
+ const entityInfo = md.Entities.find((e) => e.Name.trim().toLowerCase() === entityName.trim().toLowerCase());
167
+ if (!entityInfo)
168
+ throw new Error(`Entity ${entityName} not found in metadata`);
169
+ const user = sqlserver_dataprovider_1.UserCache.Users.find((u) => u.Email.toLowerCase().trim() === userPayload?.email.toLowerCase().trim());
170
+ if (!user)
171
+ throw new Error(`User ${userPayload?.email} not found in metadata`);
172
+ return entityInfo.GetUserRowLevelSecurityWhereClause(user, type, returnPrefix);
173
+ }
174
+ async createAuditLogRecord(userPayload, authorizationName, auditLogTypeName, status, details, entityId, recordId) {
175
+ try {
176
+ const md = new core_1.Metadata();
177
+ const userInfo = sqlserver_dataprovider_1.UserCache.Users.find((u) => u.Email.toLowerCase().trim() === userPayload?.email.toLowerCase().trim());
178
+ const authorization = authorizationName
179
+ ? md.Authorizations.find((a) => a.Name.trim().toLowerCase() === authorizationName.trim().toLowerCase())
180
+ : null;
181
+ const auditLogType = md.AuditLogTypes.find((a) => a.Name.trim().toLowerCase() === auditLogTypeName.trim().toLowerCase());
182
+ if (!userInfo)
183
+ throw new Error(`User ${userPayload?.email} not found in metadata`);
184
+ if (!auditLogType)
185
+ throw new Error(`Audit Log Type ${auditLogTypeName} not found in metadata`);
186
+ const auditLog = await md.GetEntityObject('Audit Logs', userInfo);
187
+ auditLog.NewRecord();
188
+ auditLog.UserID = userInfo.ID;
189
+ auditLog.AuditLogTypeName = auditLogType.Name;
190
+ if (authorization)
191
+ auditLog.AuthorizationName = authorization.Name;
192
+ auditLog.Status = status;
193
+ if (details)
194
+ auditLog.Details = details;
195
+ auditLog.EntityID = entityId;
196
+ if (recordId)
197
+ auditLog.RecordID = recordId;
198
+ if (await auditLog.Save())
199
+ return auditLog;
200
+ else
201
+ throw new Error(`Error saving audit log record`);
202
+ }
203
+ catch (err) {
204
+ console.log(err);
205
+ return null;
206
+ }
207
+ }
208
+ safeFirstArrayElement(arr) {
209
+ if (arr && arr.length > 0) {
210
+ return arr[0];
211
+ }
212
+ return null;
213
+ }
214
+ packageSPParam(paramValue, quoteString) {
215
+ return paramValue === null || paramValue === undefined ? null : quoteString + paramValue + quoteString;
216
+ }
217
+ GetUserFromEmail(email) {
218
+ const md = new core_1.Metadata();
219
+ return sqlserver_dataprovider_1.UserCache.Users.find((u) => u.Email.toLowerCase().trim() === email.toLowerCase().trim());
220
+ }
221
+ GetUserFromPayload(userPayload) {
222
+ if (!userPayload || !userPayload.email)
223
+ return undefined;
224
+ const md = new core_1.Metadata();
225
+ return sqlserver_dataprovider_1.UserCache.Users.find((u) => u.Email.toLowerCase().trim() === userPayload.email.toLowerCase().trim());
226
+ }
227
+ get MJCoreSchema() {
228
+ return core_1.Metadata.Provider.ConfigData.MJCoreSchemaName;
229
+ }
230
+ }
231
+ exports.ResolverBase = ResolverBase;
232
232
  //# sourceMappingURL=ResolverBase.js.map