@memberjunction/server 2.1.2 → 2.1.3

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
@@ -1,187 +0,0 @@
1
- import { CleanJSON, MJGlobal, RegisterClass } from "@memberjunction/global";
2
- import { BaseEntity, EntityInfo, LogError, Metadata } from "@memberjunction/core";
3
- import { AIModelEntity, AIModelEntityExtended, UserViewEntityExtended } from '@memberjunction/core-entities'
4
- import { BaseLLM, ChatParams, GetAIAPIKey } from "@memberjunction/ai";
5
- import { AIEngine } from "@memberjunction/aiengine";
6
- import { LoadOpenAILLM } from "@memberjunction/ai-openai";
7
- LoadOpenAILLM(); // this is to prevent tree shaking since the openai package is not directly used and rather instantiated dynamically in the LoadOpenAILLM function. Since no static code path exists tree shaking can result in this class being optimized out
8
-
9
- @RegisterClass(BaseEntity, 'User Views')
10
- export class UserViewEntity_Server extends UserViewEntityExtended {
11
- /**
12
- * This property is hard-coded to true in this class because we DO support smart filters in this class. If you want to disable smart filters for a specific view you can override this property in your subclass and set it to false.
13
- */
14
- protected override get SmartFilterImplemented(): boolean {
15
- return true;
16
- }
17
-
18
- /**
19
- * Default implementation simply returns 'OpenAI' - override this in your subclass if you are using a different AI vendor.
20
- * @returns
21
- */
22
- protected get AIVendorName(): string {
23
- return 'OpenAI';
24
- }
25
-
26
- /**
27
- * Default implementation simply grabs the first AI model that matches GetAIModelName().
28
- * @returns
29
- */
30
- protected async GetAIModel(): Promise<AIModelEntityExtended> {
31
- await AIEngine.Instance.Config(false, this.ContextCurrentUser); // most of the time this is already loaded, but just in case it isn't we will load it here
32
- const models = AIEngine.Instance.Models.filter(m => m.AIModelType.trim().toLowerCase() === 'llm' &&
33
- m.Vendor.trim().toLowerCase() === this.AIVendorName.trim().toLowerCase())
34
- // next, sort the models by the PowerRank field so that the highest power rank model is the first array element
35
- models.sort((a, b) => b.PowerRank - a.PowerRank); // highest power rank first
36
- return models[0];
37
- }
38
-
39
- /**
40
- * This method will use AI to return a valid WHERE clause based on the provided prompt. This is automatically called at the right time if the view has SmartFilterEnabled turned on and the SmartFilterPrompt is set. If you want
41
- * to call this directly to get back a WHERE clause for other purposes you can call this method directly and provide both a prompt and the entity that the view is based on.
42
- * @param prompt
43
- */
44
- public async GenerateSmartFilterWhereClause(prompt: string, entityInfo: EntityInfo): Promise<{whereClause: string, userExplanation: string}> {
45
- try {
46
- const model = await this.GetAIModel();
47
- const llm = MJGlobal.Instance.ClassFactory.CreateInstance<BaseLLM>(BaseLLM, model.DriverClass, GetAIAPIKey(model.DriverClass));
48
-
49
- const chatParams: ChatParams = {
50
- model: model.APINameOrName,
51
- messages: [
52
- {
53
- role: 'system',
54
- content: this.GenerateSysPrompt(entityInfo)
55
- },
56
- {
57
- role: 'user',
58
- content: `${prompt}`,
59
- },
60
- ],
61
- }
62
- const result = await llm.ChatCompletion(chatParams);
63
- if (result && result.data) {
64
- const llmResponse = result.data.choices[0].message.content;
65
- if (llmResponse) {
66
- // try to parse it as JSON
67
- try {
68
- const cleansed = CleanJSON(llmResponse);
69
- if (!cleansed)
70
- throw new Error('Invalid JSON response from AI: ' + llmResponse);
71
-
72
- const parsed = JSON.parse(cleansed);
73
- if (parsed.whereClause && parsed.whereClause.length > 0) {
74
- // we have the where clause. Sometimes the LLM prefixes it with WHERE and somtimes not, we need to strip WHERE if it is there
75
- const trimmed = parsed.whereClause.trim();
76
- let ret: string = '';
77
- if (trimmed.toLowerCase().startsWith('where '))
78
- ret = trimmed.substring(6);
79
- else
80
- ret = parsed.whereClause;
81
-
82
- return {
83
- whereClause: ret,
84
- userExplanation: parsed.userExplanationMessage
85
- };
86
- }
87
- else if (parsed.whereClause !== undefined && parsed.whereClause !== null) {
88
- return {
89
- whereClause: '', // empty string is valid, it means no where clause
90
- userExplanation: parsed.userExplanationMessage
91
- };
92
- }
93
- else {
94
- // if we get here, no whereClause property was provided by the LLM, that is an error
95
- throw new Error('Invalid response from AI, no whereClause property found in response: ' + llmResponse);
96
- }
97
- }
98
- catch (e) {
99
- LogError(e);
100
- throw new Error('Error parsing JSON response from AI: ' + llmResponse);
101
- }
102
- }
103
- else
104
- throw new Error('Null response from AI');
105
- }
106
- else
107
- throw new Error('No result returned from AI');
108
- }
109
- catch (e) {
110
- LogError(e);
111
- throw e;
112
- }
113
- }
114
-
115
- public GenerateSysPrompt(entityInfo: EntityInfo): string {
116
- const processedViews: string[] = [entityInfo.BaseView];
117
- const md = new Metadata();
118
- const gptSysPrompt: string = `You are an expert in SQL and Microsoft SQL Server.
119
- You will be provided a user prompt representing how they want to filter the data.
120
- You may *NOT* use JOINS, only sub-queries for related tables.
121
-
122
- I am a bot and can only understand JSON. Your response must be parsable into this type:
123
- const returnType = {
124
- whereClause: string,
125
- orderByClause: string
126
- userExplanationMessage: string
127
- };
128
-
129
- The view that the user is querying is called ${entityInfo.BaseView} and has these fields:
130
- ${entityInfo.Fields.map(f => {
131
- let ret: string = `${f.Name} (${f.Type})`;
132
- if (f.RelatedEntity) {
133
- ret += ` (fkey to ${f.RelatedEntityBaseView})`;
134
- }
135
- return ret;
136
- }).join(',')}`
137
-
138
- const fkeyFields = entityInfo.Fields.filter(f => f.RelatedEntity && f.RelatedEntity.length > 0);
139
- const fkeyBaseViewsDistinct = fkeyFields.map(f => f.RelatedEntityBaseView).filter((v, i, a) => a.indexOf(v) === i);
140
- const relationships: string = `
141
- In addition, ${entityInfo.BaseView} has links to other views, as shown here, you can use these views in sub-queries to achieve the request from the user.
142
- If there are multiple filters related to a single related view, attempt to combine them into a single sub-query for efficiency.
143
- ${
144
- // this part returns a list of all the related views and the fields that are related to the current view via fkeys in the current view
145
- fkeyBaseViewsDistinct.map(v => {
146
- if (processedViews.indexOf(v) === -1) {
147
- const e = md.Entities.find(e => e.BaseView === v);
148
- if (e) {
149
- processedViews.push(v); // already processed this view now, so we won't repeat it
150
- return `* ${e.SchemaName}.${e.BaseView}: ${e.Fields.map(ef => {
151
- return ef.Name + ' (' + ef.Type + ')';
152
- }).join(',') }`
153
- }
154
- else
155
- return '';
156
- }
157
- else
158
- return ''; // already did this at some point
159
- }).join('\n')
160
- }
161
- ${
162
- // this part returns a list of all the related views and the fields that are related to the current view fkeys in THOSE views
163
- entityInfo.RelatedEntities.map(r => {
164
- const e = md.Entities.find(e => e.Name === r.RelatedEntity);
165
- if (e) {
166
- if (processedViews.indexOf(e.BaseView) === -1) {
167
- processedViews.push(e.BaseView); // note that we are processing this view now, so we won't repeat it
168
- return `* ${e.SchemaName}.${e.BaseView}: ${e.Fields.map(ef => {
169
- let ret: string = `${ef.Name} (${ef.Type})`;
170
- if (ef.RelatedEntity) {
171
- ret += ` (fkey to ${ef.RelatedEntityBaseView})`;
172
- }
173
- return ret;
174
- }).join(',') }`
175
- }
176
- else
177
- return ''; // already did this at some point
178
- }
179
- else
180
- return '';
181
- }).join('\n')
182
- }`
183
-
184
- return gptSysPrompt + (processedViews.length > 1 /*we always have 1 from the entity base view*/ ? relationships : '') + `
185
- **** REMEMBER **** I am a BOT, do not return anything other than JSON to me or I will choke on your response!`;
186
- }
187
- }