@memberjunction/server 2.1.2 → 2.1.4

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 (202) hide show
  1. package/dist/apolloServer/TransactionPlugin.d.ts +4 -0
  2. package/dist/apolloServer/TransactionPlugin.d.ts.map +1 -0
  3. package/dist/apolloServer/TransactionPlugin.js +46 -0
  4. package/dist/apolloServer/TransactionPlugin.js.map +1 -0
  5. package/dist/apolloServer/index.d.ts +11 -0
  6. package/dist/apolloServer/index.d.ts.map +1 -0
  7. package/dist/apolloServer/index.js +25 -0
  8. package/dist/apolloServer/index.js.map +1 -0
  9. package/dist/auth/exampleNewUserSubClass.d.ts +6 -0
  10. package/dist/auth/exampleNewUserSubClass.d.ts.map +1 -0
  11. package/dist/auth/exampleNewUserSubClass.js +49 -0
  12. package/dist/auth/exampleNewUserSubClass.js.map +1 -0
  13. package/dist/auth/index.d.ts +30 -0
  14. package/dist/auth/index.d.ts.map +1 -0
  15. package/dist/auth/index.js +121 -0
  16. package/dist/auth/index.js.map +1 -0
  17. package/dist/auth/newUsers.d.ts +5 -0
  18. package/dist/auth/newUsers.d.ts.map +1 -0
  19. package/{src/auth/newUsers.ts → dist/auth/newUsers.js} +20 -14
  20. package/dist/auth/newUsers.js.map +1 -0
  21. package/dist/auth/tokenExpiredError.d.ts +5 -0
  22. package/dist/auth/tokenExpiredError.d.ts.map +1 -0
  23. package/dist/auth/tokenExpiredError.js +12 -0
  24. package/dist/auth/tokenExpiredError.js.map +1 -0
  25. package/dist/cache.d.ts +3 -0
  26. package/dist/cache.d.ts.map +1 -0
  27. package/{src/cache.ts → dist/cache.js} +4 -6
  28. package/dist/cache.js.map +1 -0
  29. package/dist/config.d.ts +196 -0
  30. package/dist/config.d.ts.map +1 -0
  31. package/{src/config.ts → dist/config.js} +25 -49
  32. package/dist/config.js.map +1 -0
  33. package/dist/context.d.ts +17 -0
  34. package/dist/context.d.ts.map +1 -0
  35. package/dist/context.js +84 -0
  36. package/dist/context.js.map +1 -0
  37. package/dist/directives/Public.d.ts +4 -0
  38. package/dist/directives/Public.d.ts.map +1 -0
  39. package/dist/directives/Public.js +30 -0
  40. package/dist/directives/Public.js.map +1 -0
  41. package/dist/directives/index.d.ts +2 -0
  42. package/dist/directives/index.d.ts.map +1 -0
  43. package/dist/directives/index.js +2 -0
  44. package/dist/directives/index.js.map +1 -0
  45. package/dist/entitySubclasses/DuplicateRunEntity.server.d.ts +6 -0
  46. package/dist/entitySubclasses/DuplicateRunEntity.server.d.ts.map +1 -0
  47. package/dist/entitySubclasses/DuplicateRunEntity.server.js +33 -0
  48. package/dist/entitySubclasses/DuplicateRunEntity.server.js.map +1 -0
  49. package/dist/entitySubclasses/entityPermissions.server.d.ts +23 -0
  50. package/dist/entitySubclasses/entityPermissions.server.d.ts.map +1 -0
  51. package/dist/entitySubclasses/entityPermissions.server.js +93 -0
  52. package/dist/entitySubclasses/entityPermissions.server.js.map +1 -0
  53. package/dist/entitySubclasses/userViewEntity.server.d.ts +13 -0
  54. package/dist/entitySubclasses/userViewEntity.server.d.ts.map +1 -0
  55. package/dist/entitySubclasses/userViewEntity.server.js +161 -0
  56. package/dist/entitySubclasses/userViewEntity.server.js.map +1 -0
  57. package/dist/generated/generated.d.ts +6679 -0
  58. package/dist/generated/generated.d.ts.map +1 -0
  59. package/dist/generated/generated.js +40786 -0
  60. package/dist/generated/generated.js.map +1 -0
  61. package/dist/generic/DeleteOptionsInput.d.ts +5 -0
  62. package/dist/generic/DeleteOptionsInput.d.ts.map +1 -0
  63. package/dist/generic/DeleteOptionsInput.js +27 -0
  64. package/dist/generic/DeleteOptionsInput.js.map +1 -0
  65. package/dist/generic/KeyInputOutputTypes.d.ts +16 -0
  66. package/dist/generic/KeyInputOutputTypes.d.ts.map +1 -0
  67. package/dist/generic/KeyInputOutputTypes.js +65 -0
  68. package/dist/generic/KeyInputOutputTypes.js.map +1 -0
  69. package/dist/generic/KeyValuePairInput.d.ts +5 -0
  70. package/dist/generic/KeyValuePairInput.d.ts.map +1 -0
  71. package/dist/generic/KeyValuePairInput.js +27 -0
  72. package/dist/generic/KeyValuePairInput.js.map +1 -0
  73. package/dist/generic/PushStatusResolver.d.ts +14 -0
  74. package/dist/generic/PushStatusResolver.d.ts.map +1 -0
  75. package/dist/generic/PushStatusResolver.js +58 -0
  76. package/dist/generic/PushStatusResolver.js.map +1 -0
  77. package/dist/generic/ResolverBase.d.ts +39 -0
  78. package/dist/generic/ResolverBase.d.ts.map +1 -0
  79. package/dist/generic/ResolverBase.js +573 -0
  80. package/dist/generic/ResolverBase.js.map +1 -0
  81. package/dist/generic/RunViewResolver.d.ts +123 -0
  82. package/dist/generic/RunViewResolver.d.ts.map +1 -0
  83. package/dist/generic/RunViewResolver.js +728 -0
  84. package/dist/generic/RunViewResolver.js.map +1 -0
  85. package/dist/index.d.ts +26 -0
  86. package/dist/index.d.ts.map +1 -0
  87. package/dist/index.js +108 -0
  88. package/dist/index.js.map +1 -0
  89. package/dist/orm.d.ts +4 -0
  90. package/dist/orm.d.ts.map +1 -0
  91. package/dist/orm.js +32 -0
  92. package/dist/orm.js.map +1 -0
  93. package/dist/resolvers/AskSkipResolver.d.ts +54 -0
  94. package/dist/resolvers/AskSkipResolver.d.ts.map +1 -0
  95. package/dist/resolvers/AskSkipResolver.js +805 -0
  96. package/dist/resolvers/AskSkipResolver.js.map +1 -0
  97. package/dist/resolvers/ColorResolver.d.ts +23 -0
  98. package/dist/resolvers/ColorResolver.d.ts.map +1 -0
  99. package/dist/resolvers/ColorResolver.js +97 -0
  100. package/dist/resolvers/ColorResolver.js.map +1 -0
  101. package/dist/resolvers/DatasetResolver.d.ts +42 -0
  102. package/dist/resolvers/DatasetResolver.d.ts.map +1 -0
  103. package/dist/resolvers/DatasetResolver.js +179 -0
  104. package/dist/resolvers/DatasetResolver.js.map +1 -0
  105. package/dist/resolvers/EntityCommunicationsResolver.d.ts +50 -0
  106. package/dist/resolvers/EntityCommunicationsResolver.d.ts.map +1 -0
  107. package/dist/resolvers/EntityCommunicationsResolver.js +280 -0
  108. package/dist/resolvers/EntityCommunicationsResolver.js.map +1 -0
  109. package/dist/resolvers/EntityRecordNameResolver.d.ts +21 -0
  110. package/dist/resolvers/EntityRecordNameResolver.d.ts.map +1 -0
  111. package/dist/resolvers/EntityRecordNameResolver.js +117 -0
  112. package/dist/resolvers/EntityRecordNameResolver.js.map +1 -0
  113. package/dist/resolvers/EntityResolver.d.ts +6 -0
  114. package/dist/resolvers/EntityResolver.d.ts.map +1 -0
  115. package/dist/resolvers/EntityResolver.js +57 -0
  116. package/dist/resolvers/EntityResolver.js.map +1 -0
  117. package/dist/resolvers/FileCategoryResolver.d.ts +6 -0
  118. package/dist/resolvers/FileCategoryResolver.d.ts.map +1 -0
  119. package/dist/resolvers/FileCategoryResolver.js +61 -0
  120. package/dist/resolvers/FileCategoryResolver.js.map +1 -0
  121. package/dist/resolvers/FileResolver.d.ts +24 -0
  122. package/dist/resolvers/FileResolver.d.ts.map +1 -0
  123. package/dist/resolvers/FileResolver.js +166 -0
  124. package/dist/resolvers/FileResolver.js.map +1 -0
  125. package/dist/resolvers/MergeRecordsResolver.d.ts +59 -0
  126. package/dist/resolvers/MergeRecordsResolver.d.ts.map +1 -0
  127. package/dist/resolvers/MergeRecordsResolver.js +282 -0
  128. package/dist/resolvers/MergeRecordsResolver.js.map +1 -0
  129. package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts +29 -0
  130. package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts.map +1 -0
  131. package/dist/resolvers/PotentialDuplicateRecordResolver.js +125 -0
  132. package/dist/resolvers/PotentialDuplicateRecordResolver.js.map +1 -0
  133. package/dist/resolvers/QueryResolver.d.ts +13 -0
  134. package/dist/resolvers/QueryResolver.d.ts.map +1 -0
  135. package/dist/resolvers/QueryResolver.js +77 -0
  136. package/dist/resolvers/QueryResolver.js.map +1 -0
  137. package/dist/resolvers/ReportResolver.d.ts +20 -0
  138. package/dist/resolvers/ReportResolver.d.ts.map +1 -0
  139. package/dist/resolvers/ReportResolver.js +182 -0
  140. package/dist/resolvers/ReportResolver.js.map +1 -0
  141. package/dist/resolvers/UserFavoriteResolver.d.ts +42 -0
  142. package/dist/resolvers/UserFavoriteResolver.d.ts.map +1 -0
  143. package/dist/resolvers/UserFavoriteResolver.js +230 -0
  144. package/dist/resolvers/UserFavoriteResolver.js.map +1 -0
  145. package/dist/resolvers/UserResolver.d.ts +10 -0
  146. package/dist/resolvers/UserResolver.d.ts.map +1 -0
  147. package/dist/resolvers/UserResolver.js +71 -0
  148. package/dist/resolvers/UserResolver.js.map +1 -0
  149. package/dist/resolvers/UserViewResolver.d.ts +13 -0
  150. package/dist/resolvers/UserViewResolver.d.ts.map +1 -0
  151. package/dist/resolvers/UserViewResolver.js +99 -0
  152. package/dist/resolvers/UserViewResolver.js.map +1 -0
  153. package/dist/types.d.ts +37 -0
  154. package/dist/types.d.ts.map +1 -0
  155. package/dist/types.js +2 -0
  156. package/dist/types.js.map +1 -0
  157. package/dist/util.d.ts +4 -0
  158. package/dist/util.d.ts.map +1 -0
  159. package/dist/util.js +85 -0
  160. package/dist/util.js.map +1 -0
  161. package/package.json +25 -21
  162. package/CHANGELOG.json +0 -3389
  163. package/CHANGELOG.md +0 -739
  164. package/src/apolloServer/TransactionPlugin.ts +0 -57
  165. package/src/apolloServer/index.ts +0 -33
  166. package/src/auth/exampleNewUserSubClass.ts +0 -74
  167. package/src/auth/index.ts +0 -151
  168. package/src/auth/tokenExpiredError.ts +0 -12
  169. package/src/context.ts +0 -111
  170. package/src/directives/Public.ts +0 -42
  171. package/src/directives/index.ts +0 -1
  172. package/src/entitySubclasses/DuplicateRunEntity.server.ts +0 -29
  173. package/src/entitySubclasses/entityPermissions.server.ts +0 -111
  174. package/src/entitySubclasses/userViewEntity.server.ts +0 -187
  175. package/src/generated/generated.ts +0 -25369
  176. package/src/generic/DeleteOptionsInput.ts +0 -13
  177. package/src/generic/KeyInputOutputTypes.ts +0 -35
  178. package/src/generic/KeyValuePairInput.ts +0 -14
  179. package/src/generic/PushStatusResolver.ts +0 -40
  180. package/src/generic/ResolverBase.ts +0 -767
  181. package/src/generic/RunViewResolver.ts +0 -582
  182. package/src/index.ts +0 -161
  183. package/src/orm.ts +0 -36
  184. package/src/resolvers/AskSkipResolver.ts +0 -926
  185. package/src/resolvers/ColorResolver.ts +0 -61
  186. package/src/resolvers/DatasetResolver.ts +0 -115
  187. package/src/resolvers/EntityCommunicationsResolver.ts +0 -216
  188. package/src/resolvers/EntityRecordNameResolver.ts +0 -78
  189. package/src/resolvers/EntityResolver.ts +0 -37
  190. package/src/resolvers/FileCategoryResolver.ts +0 -62
  191. package/src/resolvers/FileResolver.ts +0 -147
  192. package/src/resolvers/MergeRecordsResolver.ts +0 -182
  193. package/src/resolvers/PotentialDuplicateRecordResolver.ts +0 -91
  194. package/src/resolvers/QueryResolver.ts +0 -42
  195. package/src/resolvers/ReportResolver.ts +0 -147
  196. package/src/resolvers/UserFavoriteResolver.ts +0 -166
  197. package/src/resolvers/UserResolver.ts +0 -33
  198. package/src/resolvers/UserViewResolver.ts +0 -64
  199. package/src/types.ts +0 -40
  200. package/src/util.ts +0 -106
  201. package/tsconfig.json +0 -30
  202. package/typedoc.json +0 -4
@@ -0,0 +1,573 @@
1
+ import { CompositeKey, EntityFieldTSType, LogError, Metadata, RunView } from '@memberjunction/core';
2
+ import { UserCache } from '@memberjunction/sqlserver-dataprovider';
3
+ import { GraphQLError } from 'graphql';
4
+ import { MJGlobal } from '@memberjunction/global';
5
+ import { PUSH_STATUS_UPDATES_TOPIC } from './PushStatusResolver';
6
+ import { FieldMapper } from '@memberjunction/graphql-dataprovider';
7
+ export class ResolverBase {
8
+ MapFieldNamesToCodeNames(entityName, dataObject) {
9
+ if (dataObject) {
10
+ const md = new Metadata();
11
+ const entityInfo = md.Entities.find((e) => e.Name === entityName);
12
+ if (!entityInfo)
13
+ throw new Error(`Entity ${entityName} not found in metadata`);
14
+ const mapper = new FieldMapper();
15
+ entityInfo.Fields.forEach((f) => {
16
+ if (dataObject.hasOwnProperty(f.Name)) {
17
+ const mappedFieldName = mapper.MapFieldName(f.CodeName);
18
+ if (mappedFieldName !== f.Name) {
19
+ dataObject[mappedFieldName] = dataObject[f.Name];
20
+ delete dataObject[f.Name];
21
+ }
22
+ }
23
+ });
24
+ }
25
+ return dataObject;
26
+ }
27
+ ArrayMapFieldNamesToCodeNames(entityName, dataObjectArray) {
28
+ if (dataObjectArray && dataObjectArray.length > 0) {
29
+ dataObjectArray.forEach((element) => {
30
+ this.MapFieldNamesToCodeNames(entityName, element);
31
+ });
32
+ }
33
+ return dataObjectArray;
34
+ }
35
+ async findBy(dataSource, entity, params) {
36
+ const md = new Metadata();
37
+ const e = md.Entities.find((e) => e.Name === entity);
38
+ if (!e)
39
+ throw new Error(`Entity ${entity} not found in metadata`);
40
+ let sql = `SELECT * FROM ${e.SchemaName}.${e.BaseView} WHERE `;
41
+ const keys = Object.keys(params);
42
+ keys.forEach((k, i) => {
43
+ if (i > 0)
44
+ sql += ' AND ';
45
+ const field = e.Fields.find((f) => f.Name === k);
46
+ if (!field)
47
+ throw new Error(`Field ${k} not found in entity ${entity}`);
48
+ const quotes = field.NeedsQuotes ? "'" : '';
49
+ sql += `${k} = ${quotes}${params[k]}${quotes}`;
50
+ });
51
+ const result = await dataSource.query(sql);
52
+ return result;
53
+ }
54
+ async RunViewByNameGeneric(viewInput, dataSource, userPayload, pubSub) {
55
+ try {
56
+ const viewInfo = this.safeFirstArrayElement(await this.findBy(dataSource, 'User Views', { Name: viewInput.ViewName }));
57
+ 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, viewInput.ResultType, userPayload, pubSub);
58
+ }
59
+ catch (err) {
60
+ console.log(err);
61
+ return null;
62
+ }
63
+ }
64
+ async RunViewByIDGeneric(viewInput, dataSource, userPayload, pubSub) {
65
+ try {
66
+ const viewInfo = this.safeFirstArrayElement(await this.findBy(dataSource, 'User Views', { ID: viewInput.ViewID }));
67
+ 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, viewInput.ResultType, userPayload, pubSub);
68
+ }
69
+ catch (err) {
70
+ console.log(err);
71
+ return null;
72
+ }
73
+ }
74
+ async RunDynamicViewGeneric(viewInput, dataSource, userPayload, pubSub) {
75
+ try {
76
+ const md = new Metadata();
77
+ const entity = md.Entities.find((e) => e.Name === viewInput.EntityName);
78
+ if (!entity)
79
+ throw new Error(`Entity ${viewInput.EntityName} not found in metadata`);
80
+ const viewInfo = {
81
+ ID: "",
82
+ Entity: viewInput.EntityName,
83
+ EntityID: entity.ID,
84
+ EntityBaseView: entity.BaseView,
85
+ };
86
+ 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, viewInput.ResultType, userPayload, pubSub);
87
+ }
88
+ catch (err) {
89
+ console.log(err);
90
+ return null;
91
+ }
92
+ }
93
+ async RunViewsGeneric(viewInputs, dataSource, userPayload, pubSub) {
94
+ let md = null;
95
+ let params = [];
96
+ for (const viewInput of viewInputs) {
97
+ try {
98
+ let viewInfo = null;
99
+ if (viewInput.ViewName) {
100
+ viewInfo = this.safeFirstArrayElement(await this.findBy(dataSource, 'User Views', { Name: viewInput.ViewName }));
101
+ }
102
+ else if (viewInput.ViewID) {
103
+ viewInfo = this.safeFirstArrayElement(await this.findBy(dataSource, 'User Views', { ID: viewInput.ViewID }));
104
+ }
105
+ else if (viewInput.EntityName) {
106
+ md = md || new Metadata();
107
+ const entity = md.Entities.find((e) => e.Name === viewInput.EntityName);
108
+ if (!entity) {
109
+ throw new Error(`Entity ${viewInput.EntityName} not found in metadata`);
110
+ }
111
+ viewInfo = {
112
+ ID: "",
113
+ Entity: viewInput.EntityName,
114
+ EntityID: entity.ID,
115
+ EntityBaseView: entity.BaseView,
116
+ };
117
+ }
118
+ else {
119
+ throw new Error("Unable to determine input type");
120
+ }
121
+ params.push({
122
+ viewInfo: viewInfo,
123
+ dataSource: dataSource,
124
+ extraFilter: viewInput.ExtraFilter,
125
+ orderBy: viewInput.OrderBy,
126
+ userSearchString: viewInput.UserSearchString,
127
+ excludeUserViewRunID: viewInput.ExcludeUserViewRunID,
128
+ overrideExcludeFilter: viewInput.OverrideExcludeFilter,
129
+ saveViewResults: viewInput.EntityName ? false : viewInput.SaveViewResults,
130
+ fields: viewInput.Fields,
131
+ ignoreMaxRows: viewInput.IgnoreMaxRows,
132
+ excludeDataFromAllPriorViewRuns: viewInput.EntityName ? false : viewInput.ExcludeDataFromAllPriorViewRuns,
133
+ forceAuditLog: viewInput.ForceAuditLog,
134
+ auditLogDescription: viewInput.AuditLogDescription,
135
+ resultType: viewInput.ResultType,
136
+ userPayload,
137
+ pubSub
138
+ });
139
+ }
140
+ catch (err) {
141
+ LogError(err);
142
+ return null;
143
+ }
144
+ }
145
+ let results = await this.RunViewsGenericInternal(params);
146
+ return results;
147
+ }
148
+ CheckUserReadPermissions(entityName, userPayload) {
149
+ const md = new Metadata();
150
+ const entityInfo = md.Entities.find((e) => e.Name === entityName);
151
+ if (!userPayload)
152
+ throw new Error(`userPayload is null`);
153
+ if (entityInfo) {
154
+ const userInfo = UserCache.Users.find((u) => u.Email.toLowerCase().trim() === userPayload.email.toLowerCase().trim());
155
+ if (!userInfo)
156
+ throw new Error(`User ${userPayload.email} not found in metadata`);
157
+ const userPermissions = entityInfo.GetUserPermisions(userInfo);
158
+ if (!userPermissions.CanRead)
159
+ throw new Error(`User ${userPayload.email} does not have read permissions on ${entityInfo.Name}`);
160
+ }
161
+ else
162
+ throw new Error(`Entity not found in metadata`);
163
+ }
164
+ async RunViewGenericInternal(viewInfo, dataSource, extraFilter, orderBy, userSearchString, excludeUserViewRunID, overrideExcludeFilter, saveViewResults, fields, ignoreMaxRows, excludeDataFromAllPriorViewRuns, forceAuditLog, auditLogDescription, resultType, userPayload, pubSub) {
165
+ try {
166
+ if (viewInfo && userPayload) {
167
+ const md = new Metadata();
168
+ const user = UserCache.Users.find((u) => u.Email.toLowerCase().trim() === userPayload?.email.toLowerCase().trim());
169
+ if (!user)
170
+ throw new Error(`User ${userPayload?.email} not found in metadata`);
171
+ const entityInfo = md.Entities.find((e) => e.Name === viewInfo.Entity);
172
+ if (!entityInfo)
173
+ throw new Error(`Entity ${viewInfo.Entity} not found in metadata`);
174
+ const rv = new RunView();
175
+ let rt = 'simple';
176
+ switch (resultType?.trim().toLowerCase()) {
177
+ case 'count_only':
178
+ rt = 'count_only';
179
+ break;
180
+ case 'entity_object':
181
+ default:
182
+ rt = 'simple';
183
+ break;
184
+ }
185
+ const result = await rv.RunView({
186
+ ViewID: viewInfo.ID,
187
+ ViewName: viewInfo.Name,
188
+ EntityName: viewInfo.Entity,
189
+ ExtraFilter: extraFilter,
190
+ OrderBy: orderBy,
191
+ Fields: fields,
192
+ UserSearchString: userSearchString,
193
+ ExcludeUserViewRunID: excludeUserViewRunID,
194
+ OverrideExcludeFilter: overrideExcludeFilter,
195
+ SaveViewResults: saveViewResults,
196
+ ExcludeDataFromAllPriorViewRuns: excludeDataFromAllPriorViewRuns,
197
+ IgnoreMaxRows: ignoreMaxRows,
198
+ ForceAuditLog: forceAuditLog,
199
+ AuditLogDescription: auditLogDescription,
200
+ ResultType: rt,
201
+ }, user);
202
+ const mapper = new FieldMapper();
203
+ if (result && result.Success) {
204
+ for (const r of result.Results) {
205
+ mapper.MapFields(r);
206
+ }
207
+ }
208
+ return result;
209
+ }
210
+ else
211
+ return null;
212
+ }
213
+ catch (err) {
214
+ console.log(err);
215
+ throw err;
216
+ }
217
+ }
218
+ async RunViewsGenericInternal(params) {
219
+ try {
220
+ let md = null;
221
+ const rv = new RunView();
222
+ let RunViewParams = [];
223
+ let contextUser = null;
224
+ for (const param of params) {
225
+ if (param.viewInfo && param.userPayload) {
226
+ md = md || new Metadata();
227
+ const user = UserCache.Users.find((u) => u.Email.toLowerCase().trim() === param.userPayload?.email.toLowerCase().trim());
228
+ if (!user) {
229
+ throw new Error(`User ${param.userPayload?.email} not found in metadata`);
230
+ }
231
+ contextUser = contextUser || user;
232
+ const entityInfo = md.Entities.find((e) => e.Name === param.viewInfo.Entity);
233
+ if (!entityInfo) {
234
+ throw new Error(`Entity ${param.viewInfo.Entity} not found in metadata`);
235
+ }
236
+ }
237
+ let rt = 'simple';
238
+ switch (param.resultType?.trim().toLowerCase()) {
239
+ case 'count_only':
240
+ rt = 'count_only';
241
+ break;
242
+ case 'entity_object':
243
+ default:
244
+ rt = 'simple';
245
+ break;
246
+ }
247
+ RunViewParams.push({
248
+ ViewID: param.viewInfo.ID,
249
+ ViewName: param.viewInfo.Name,
250
+ EntityName: param.viewInfo.Entity,
251
+ ExtraFilter: param.extraFilter,
252
+ OrderBy: param.orderBy,
253
+ Fields: param.fields,
254
+ UserSearchString: param.userSearchString,
255
+ ExcludeUserViewRunID: param.excludeUserViewRunID,
256
+ OverrideExcludeFilter: param.overrideExcludeFilter,
257
+ SaveViewResults: param.saveViewResults,
258
+ ExcludeDataFromAllPriorViewRuns: param.excludeDataFromAllPriorViewRuns,
259
+ IgnoreMaxRows: param.ignoreMaxRows,
260
+ ForceAuditLog: param.forceAuditLog,
261
+ AuditLogDescription: param.auditLogDescription,
262
+ ResultType: rt,
263
+ });
264
+ }
265
+ let runViewResults = await rv.RunViews(RunViewParams, contextUser);
266
+ const mapper = new FieldMapper();
267
+ for (const runViewResult of runViewResults) {
268
+ if (runViewResult && runViewResult.Success) {
269
+ for (const result of runViewResult.Results) {
270
+ mapper.MapFields(result);
271
+ }
272
+ }
273
+ }
274
+ return runViewResults;
275
+ }
276
+ catch (err) {
277
+ console.log(err);
278
+ throw err;
279
+ }
280
+ }
281
+ async createRecordAccessAuditLogRecord(userPayload, entityName, recordId) {
282
+ try {
283
+ const md = new Metadata();
284
+ const entityInfo = md.Entities.find((e) => e.Name.trim().toLowerCase() === entityName.trim().toLowerCase());
285
+ if (!entityInfo)
286
+ throw new Error(`Entity ${entityName} not found in metadata`);
287
+ if (entityInfo.AuditRecordAccess) {
288
+ const userInfo = UserCache.Users.find((u) => u.Email.toLowerCase().trim() === userPayload?.email.toLowerCase().trim());
289
+ const auditLogTypeName = 'Record Accessed';
290
+ const auditLogType = md.AuditLogTypes.find((a) => a.Name.trim().toLowerCase() === auditLogTypeName.trim().toLowerCase());
291
+ if (!userInfo)
292
+ throw new Error(`User ${userPayload?.email} not found in metadata`);
293
+ if (!auditLogType)
294
+ throw new Error(`Audit Log Type ${auditLogTypeName} not found in metadata`);
295
+ return await this.createAuditLogRecord(userPayload, null, auditLogTypeName, 'Success', null, entityInfo.ID, recordId);
296
+ }
297
+ }
298
+ catch (e) {
299
+ console.log(e);
300
+ }
301
+ }
302
+ getRowLevelSecurityWhereClause(entityName, userPayload, type, returnPrefix) {
303
+ const md = new Metadata();
304
+ const entityInfo = md.Entities.find((e) => e.Name.trim().toLowerCase() === entityName.trim().toLowerCase());
305
+ if (!entityInfo)
306
+ throw new Error(`Entity ${entityName} not found in metadata`);
307
+ const user = UserCache.Users.find((u) => u.Email.toLowerCase().trim() === userPayload?.email.toLowerCase().trim());
308
+ if (!user)
309
+ throw new Error(`User ${userPayload?.email} not found in metadata`);
310
+ return entityInfo.GetUserRowLevelSecurityWhereClause(user, type, returnPrefix);
311
+ }
312
+ async createAuditLogRecord(userPayload, authorizationName, auditLogTypeName, status, details, entityId, recordId) {
313
+ try {
314
+ const md = new Metadata();
315
+ const userInfo = UserCache.Users.find((u) => u.Email.toLowerCase().trim() === userPayload?.email.toLowerCase().trim());
316
+ const authorization = authorizationName
317
+ ? md.Authorizations.find((a) => a.Name.trim().toLowerCase() === authorizationName.trim().toLowerCase())
318
+ : null;
319
+ const auditLogType = md.AuditLogTypes.find((a) => a.Name.trim().toLowerCase() === auditLogTypeName.trim().toLowerCase());
320
+ if (!userInfo)
321
+ throw new Error(`User ${userPayload?.email} not found in metadata`);
322
+ if (!auditLogType)
323
+ throw new Error(`Audit Log Type ${auditLogTypeName} not found in metadata`);
324
+ const auditLog = await md.GetEntityObject('Audit Logs', userInfo);
325
+ auditLog.NewRecord();
326
+ auditLog.UserID = userInfo.ID;
327
+ auditLog.AuditLogTypeID = auditLogType.ID;
328
+ if (authorization)
329
+ auditLog.AuthorizationID = authorization.ID;
330
+ if (status?.trim().toLowerCase() === 'success')
331
+ auditLog.Status = 'Success';
332
+ else
333
+ auditLog.Status = 'Failed';
334
+ if (details)
335
+ auditLog.Details = details;
336
+ auditLog.EntityID = entityId;
337
+ if (recordId)
338
+ auditLog.RecordID = recordId;
339
+ if (await auditLog.Save())
340
+ return auditLog;
341
+ else
342
+ throw new Error(`Error saving audit log record`);
343
+ }
344
+ catch (err) {
345
+ console.log(err);
346
+ return null;
347
+ }
348
+ }
349
+ safeFirstArrayElement(arr) {
350
+ if (arr && arr.length > 0) {
351
+ return arr[0];
352
+ }
353
+ return null;
354
+ }
355
+ packageSPParam(paramValue, quoteString) {
356
+ return paramValue === null || paramValue === undefined ? null : quoteString + paramValue + quoteString;
357
+ }
358
+ GetUserFromEmail(email) {
359
+ const md = new Metadata();
360
+ return UserCache.Users.find((u) => u.Email.toLowerCase().trim() === email.toLowerCase().trim());
361
+ }
362
+ GetUserFromPayload(userPayload) {
363
+ if (!userPayload || !userPayload.email)
364
+ return undefined;
365
+ const md = new Metadata();
366
+ return UserCache.Users.find((u) => u.Email.toLowerCase().trim() === userPayload.email.toLowerCase().trim());
367
+ }
368
+ get MJCoreSchema() {
369
+ return Metadata.Provider.ConfigData.MJCoreSchemaName;
370
+ }
371
+ ListenForEntityMessages(entityObject, pubSub, userPayload) {
372
+ MJGlobal.Instance.GetEventListener(false).subscribe((event) => {
373
+ if (event) {
374
+ if (event.component === entityObject && event.args && event.args.message) {
375
+ pubSub.publish(PUSH_STATUS_UPDATES_TOPIC, {
376
+ message: JSON.stringify({
377
+ status: 'OK',
378
+ type: 'EntityObjectStatusMessage',
379
+ entityName: entityObject.EntityInfo.Name,
380
+ primaryKey: entityObject.PrimaryKey,
381
+ message: event.args.message,
382
+ }),
383
+ sessionId: userPayload.sessionId,
384
+ });
385
+ }
386
+ }
387
+ });
388
+ }
389
+ async CreateRecord(entityName, input, dataSource, userPayload, pubSub) {
390
+ if (await this.BeforeCreate(dataSource, input)) {
391
+ const entityObject = await new Metadata().GetEntityObject(entityName, this.GetUserFromPayload(userPayload));
392
+ entityObject.NewRecord();
393
+ entityObject.SetMany(input);
394
+ this.ListenForEntityMessages(entityObject, pubSub, userPayload);
395
+ if (await entityObject.Save()) {
396
+ await this.AfterCreate(dataSource, input);
397
+ return this.MapFieldNamesToCodeNames(entityName, entityObject.GetAll());
398
+ }
399
+ else
400
+ throw entityObject.LatestResult.Message;
401
+ }
402
+ else
403
+ return null;
404
+ }
405
+ async BeforeCreate(dataSource, input) {
406
+ return true;
407
+ }
408
+ async AfterCreate(dataSource, input) { }
409
+ async UpdateRecord(entityName, input, dataSource, userPayload, pubSub) {
410
+ if (await this.BeforeUpdate(dataSource, input)) {
411
+ const md = new Metadata();
412
+ const userInfo = this.GetUserFromPayload(userPayload);
413
+ const entityObject = await md.GetEntityObject(entityName, userInfo);
414
+ const entityInfo = entityObject.EntityInfo;
415
+ const clientNewValues = {};
416
+ Object.keys(input).forEach((key) => {
417
+ if (key !== 'OldValues___')
418
+ clientNewValues[key] = input[key];
419
+ });
420
+ if (entityInfo.TrackRecordChanges || !input.OldValues___) {
421
+ const cKey = new CompositeKey(entityInfo.PrimaryKeys.map((pk) => {
422
+ return {
423
+ FieldName: pk.Name,
424
+ Value: input[pk.CodeName],
425
+ };
426
+ }));
427
+ if (await entityObject.InnerLoad(cKey)) {
428
+ if (!input.OldValues___) {
429
+ entityObject.SetMany(input);
430
+ }
431
+ else {
432
+ this.TestAndSetClientOldValuesToDBValues(input, clientNewValues, entityObject);
433
+ }
434
+ }
435
+ else {
436
+ throw new GraphQLError(`Record not found for ${entityName} with key ${JSON.stringify(cKey)}`, {
437
+ extensions: { code: 'LOAD_ENTITY_ERROR', entityName },
438
+ });
439
+ }
440
+ }
441
+ else {
442
+ const oldValues = {};
443
+ input.OldValues___?.forEach((item) => (oldValues[item.Key] = item.Value));
444
+ entityObject.LoadFromData(oldValues);
445
+ entityObject.SetMany(clientNewValues);
446
+ }
447
+ this.ListenForEntityMessages(entityObject, pubSub, userPayload);
448
+ if (await entityObject.Save()) {
449
+ await this.AfterUpdate(dataSource, input);
450
+ return this.MapFieldNamesToCodeNames(entityName, entityObject.GetAll());
451
+ }
452
+ else {
453
+ throw new GraphQLError(entityObject.LatestResult?.Message ?? 'Unknown error', {
454
+ extensions: { code: 'SAVE_ENTITY_ERROR', entityName },
455
+ });
456
+ }
457
+ }
458
+ else
459
+ throw new GraphQLError('Save Canceled by BeforeSave() handler in ResolverBase', {
460
+ extensions: { code: 'SAVE_ENTITY_ERROR', entityName },
461
+ });
462
+ }
463
+ TestAndSetClientOldValuesToDBValues(input, clientNewValues, entityObject) {
464
+ const clientOldValues = {};
465
+ input.OldValues___.forEach((item) => {
466
+ const field = entityObject.EntityInfo.Fields.find((f) => f.CodeName === item.Key);
467
+ let val = item.Value;
468
+ if ((val === null || val === undefined) && field.DefaultValue !== null && field.DefaultValue !== undefined && !field.AllowsNull)
469
+ val = field.DefaultValue;
470
+ if (field) {
471
+ switch (field.TSType) {
472
+ case EntityFieldTSType.Number:
473
+ val = val !== null && val !== undefined ? parseInt(val) : null;
474
+ break;
475
+ case EntityFieldTSType.Boolean:
476
+ val = val === null || val === undefined || val === 'false' || val === '0' || parseInt(val) === 0 ? false : true;
477
+ break;
478
+ case EntityFieldTSType.Date:
479
+ if (val !== null && val !== undefined && val.toString().trim() !== '' && !isNaN(val))
480
+ val = parseInt(val);
481
+ val = val !== null && val !== undefined ? new Date(val) : null;
482
+ break;
483
+ default:
484
+ break;
485
+ }
486
+ }
487
+ clientOldValues[item.Key] = val;
488
+ });
489
+ const dbValues = entityObject.GetAll();
490
+ const dbDifferences = [];
491
+ Object.keys(clientOldValues).forEach((key) => {
492
+ const f = entityObject.EntityInfo.Fields.find((f) => f.CodeName === key);
493
+ let different = false;
494
+ switch (typeof clientOldValues[key]) {
495
+ case 'number':
496
+ different = clientOldValues[key] !== dbValues[key];
497
+ break;
498
+ case 'boolean':
499
+ different = clientOldValues[key] !== dbValues[key];
500
+ break;
501
+ case 'object':
502
+ if (clientOldValues[key] instanceof Date) {
503
+ different = clientOldValues[key].getTime() !== dbValues[key].getTime();
504
+ }
505
+ break;
506
+ default:
507
+ different = clientOldValues[key] !== dbValues[key];
508
+ break;
509
+ }
510
+ if (different && f && !f.ReadOnly) {
511
+ dbDifferences.push({
512
+ FieldName: key,
513
+ ClientOldValue: clientOldValues[key],
514
+ DBValue: dbValues[key],
515
+ });
516
+ }
517
+ });
518
+ if (dbDifferences.length > 0) {
519
+ const clientDifferences = [];
520
+ Object.keys(clientOldValues).forEach((key) => {
521
+ const f = entityObject.EntityInfo.Fields.find((f) => f.CodeName === key);
522
+ if (clientOldValues[key] !== clientNewValues[key] && f && f.AllowUpdateAPI && !f.IsPrimaryKey) {
523
+ clientDifferences.push({
524
+ FieldName: key,
525
+ ClientOldValue: clientOldValues[key],
526
+ ClientNewValue: clientNewValues[key],
527
+ });
528
+ }
529
+ });
530
+ const overlap = clientDifferences.filter((cd) => dbDifferences.find((dd) => dd.FieldName === cd.FieldName));
531
+ if (overlap.length > 0) {
532
+ const msg = {
533
+ Message: 'Inconsistency between old values provided for changed fields, and the values of one or more of those fields in the database. Update operation cancelled.',
534
+ ClientDifferences: clientDifferences,
535
+ DBDifferences: dbDifferences,
536
+ Overlap: overlap,
537
+ };
538
+ throw new Error(JSON.stringify(msg));
539
+ }
540
+ }
541
+ entityObject.SetMany(clientNewValues);
542
+ }
543
+ async DeleteRecord(entityName, key, options, dataSource, userPayload, pubSub) {
544
+ if (await this.BeforeDelete(dataSource, key)) {
545
+ const entityObject = await new Metadata().GetEntityObject(entityName, this.GetUserFromPayload(userPayload));
546
+ await entityObject.InnerLoad(key);
547
+ const returnValue = entityObject.GetAll();
548
+ if (await entityObject.Delete(options)) {
549
+ await this.AfterDelete(dataSource, key);
550
+ return returnValue;
551
+ }
552
+ else {
553
+ throw new GraphQLError(entityObject.LatestResult?.Message ?? 'Unknown error', {
554
+ extensions: { code: 'DELETE_ENTITY_ERROR', entityName },
555
+ });
556
+ }
557
+ }
558
+ else {
559
+ throw new GraphQLError('Delete operation canceled by BeforeDelete() handler in ResolverBase', {
560
+ extensions: { code: 'DELETE_ENTITY_ERROR', entityName },
561
+ });
562
+ }
563
+ }
564
+ async BeforeDelete(dataSource, key) {
565
+ return true;
566
+ }
567
+ async AfterDelete(dataSource, key) { }
568
+ async BeforeUpdate(dataSource, input) {
569
+ return true;
570
+ }
571
+ async AfterUpdate(dataSource, input) { }
572
+ }
573
+ //# sourceMappingURL=ResolverBase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResolverBase.js","sourceRoot":"","sources":["../../src/generic/ResolverBase.ts"],"names":[],"mappings":"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"}