@memberjunction/server 1.8.1 → 2.1.1

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 (192) hide show
  1. package/CHANGELOG.json +130 -1
  2. package/CHANGELOG.md +29 -2
  3. package/package.json +31 -40
  4. package/src/apolloServer/index.ts +0 -1
  5. package/src/auth/newUsers.ts +4 -3
  6. package/src/context.ts +19 -27
  7. package/src/entitySubclasses/entityPermissions.server.ts +3 -3
  8. package/src/entitySubclasses/userViewEntity.server.ts +1 -1
  9. package/src/generated/generated.ts +9482 -8398
  10. package/src/generic/ResolverBase.ts +299 -172
  11. package/src/generic/RunViewResolver.ts +204 -14
  12. package/src/index.ts +18 -19
  13. package/src/resolvers/AskSkipResolver.ts +35 -35
  14. package/src/resolvers/ColorResolver.ts +3 -14
  15. package/src/resolvers/DatasetResolver.ts +4 -4
  16. package/src/resolvers/EntityCommunicationsResolver.ts +37 -15
  17. package/src/resolvers/FileCategoryResolver.ts +2 -2
  18. package/src/resolvers/FileResolver.ts +6 -4
  19. package/src/resolvers/MergeRecordsResolver.ts +3 -2
  20. package/src/resolvers/PotentialDuplicateRecordResolver.ts +48 -40
  21. package/src/resolvers/QueryResolver.ts +2 -2
  22. package/src/resolvers/ReportResolver.ts +6 -6
  23. package/src/resolvers/UserFavoriteResolver.ts +8 -8
  24. package/src/resolvers/UserResolver.ts +3 -1
  25. package/src/resolvers/UserViewResolver.ts +1 -1
  26. package/src/types.ts +21 -0
  27. package/tsconfig.json +3 -4
  28. package/dist/apolloServer/TransactionPlugin.d.ts +0 -4
  29. package/dist/apolloServer/TransactionPlugin.d.ts.map +0 -1
  30. package/dist/apolloServer/TransactionPlugin.js +0 -49
  31. package/dist/apolloServer/TransactionPlugin.js.map +0 -1
  32. package/dist/apolloServer/index.d.ts +0 -11
  33. package/dist/apolloServer/index.d.ts.map +0 -1
  34. package/dist/apolloServer/index.js +0 -27
  35. package/dist/apolloServer/index.js.map +0 -1
  36. package/dist/auth/exampleNewUserSubClass.d.ts +0 -6
  37. package/dist/auth/exampleNewUserSubClass.d.ts.map +0 -1
  38. package/dist/auth/exampleNewUserSubClass.js +0 -54
  39. package/dist/auth/exampleNewUserSubClass.js.map +0 -1
  40. package/dist/auth/index.d.ts +0 -30
  41. package/dist/auth/index.d.ts.map +0 -1
  42. package/dist/auth/index.js +0 -129
  43. package/dist/auth/index.js.map +0 -1
  44. package/dist/auth/newUsers.d.ts +0 -5
  45. package/dist/auth/newUsers.d.ts.map +0 -1
  46. package/dist/auth/newUsers.js +0 -66
  47. package/dist/auth/newUsers.js.map +0 -1
  48. package/dist/auth/tokenExpiredError.d.ts +0 -5
  49. package/dist/auth/tokenExpiredError.d.ts.map +0 -1
  50. package/dist/auth/tokenExpiredError.js +0 -16
  51. package/dist/auth/tokenExpiredError.js.map +0 -1
  52. package/dist/cache.d.ts +0 -3
  53. package/dist/cache.d.ts.map +0 -1
  54. package/dist/cache.js +0 -11
  55. package/dist/cache.js.map +0 -1
  56. package/dist/config.d.ts +0 -196
  57. package/dist/config.d.ts.map +0 -1
  58. package/dist/config.js +0 -72
  59. package/dist/config.js.map +0 -1
  60. package/dist/context.d.ts +0 -17
  61. package/dist/context.d.ts.map +0 -1
  62. package/dist/context.js +0 -114
  63. package/dist/context.js.map +0 -1
  64. package/dist/directives/Public.d.ts +0 -4
  65. package/dist/directives/Public.d.ts.map +0 -1
  66. package/dist/directives/Public.js +0 -34
  67. package/dist/directives/Public.js.map +0 -1
  68. package/dist/directives/index.d.ts +0 -2
  69. package/dist/directives/index.d.ts.map +0 -1
  70. package/dist/directives/index.js +0 -18
  71. package/dist/directives/index.js.map +0 -1
  72. package/dist/entitySubclasses/DuplicateRunEntity.server.d.ts +0 -6
  73. package/dist/entitySubclasses/DuplicateRunEntity.server.d.ts.map +0 -1
  74. package/dist/entitySubclasses/DuplicateRunEntity.server.js +0 -37
  75. package/dist/entitySubclasses/DuplicateRunEntity.server.js.map +0 -1
  76. package/dist/entitySubclasses/EntityBehavior.server.d.ts +0 -29
  77. package/dist/entitySubclasses/EntityBehavior.server.d.ts.map +0 -1
  78. package/dist/entitySubclasses/EntityBehavior.server.js +0 -213
  79. package/dist/entitySubclasses/EntityBehavior.server.js.map +0 -1
  80. package/dist/entitySubclasses/entityPermissions.server.d.ts +0 -23
  81. package/dist/entitySubclasses/entityPermissions.server.d.ts.map +0 -1
  82. package/dist/entitySubclasses/entityPermissions.server.js +0 -99
  83. package/dist/entitySubclasses/entityPermissions.server.js.map +0 -1
  84. package/dist/entitySubclasses/userViewEntity.server.d.ts +0 -13
  85. package/dist/entitySubclasses/userViewEntity.server.d.ts.map +0 -1
  86. package/dist/entitySubclasses/userViewEntity.server.js +0 -164
  87. package/dist/entitySubclasses/userViewEntity.server.js.map +0 -1
  88. package/dist/generated/generated.d.ts +0 -6482
  89. package/dist/generated/generated.d.ts.map +0 -1
  90. package/dist/generated/generated.js +0 -35073
  91. package/dist/generated/generated.js.map +0 -1
  92. package/dist/generic/DeleteOptionsInput.d.ts +0 -5
  93. package/dist/generic/DeleteOptionsInput.d.ts.map +0 -1
  94. package/dist/generic/DeleteOptionsInput.js +0 -28
  95. package/dist/generic/DeleteOptionsInput.js.map +0 -1
  96. package/dist/generic/KeyInputOutputTypes.d.ts +0 -16
  97. package/dist/generic/KeyInputOutputTypes.d.ts.map +0 -1
  98. package/dist/generic/KeyInputOutputTypes.js +0 -62
  99. package/dist/generic/KeyInputOutputTypes.js.map +0 -1
  100. package/dist/generic/KeyValuePairInput.d.ts +0 -5
  101. package/dist/generic/KeyValuePairInput.d.ts.map +0 -1
  102. package/dist/generic/KeyValuePairInput.js +0 -28
  103. package/dist/generic/KeyValuePairInput.js.map +0 -1
  104. package/dist/generic/PushStatusResolver.d.ts +0 -14
  105. package/dist/generic/PushStatusResolver.d.ts.map +0 -1
  106. package/dist/generic/PushStatusResolver.js +0 -58
  107. package/dist/generic/PushStatusResolver.js.map +0 -1
  108. package/dist/generic/ResolverBase.d.ts +0 -37
  109. package/dist/generic/ResolverBase.d.ts.map +0 -1
  110. package/dist/generic/ResolverBase.js +0 -468
  111. package/dist/generic/ResolverBase.js.map +0 -1
  112. package/dist/generic/RunViewResolver.d.ts +0 -88
  113. package/dist/generic/RunViewResolver.d.ts.map +0 -1
  114. package/dist/generic/RunViewResolver.js +0 -443
  115. package/dist/generic/RunViewResolver.js.map +0 -1
  116. package/dist/index.d.ts +0 -28
  117. package/dist/index.d.ts.map +0 -1
  118. package/dist/index.js +0 -145
  119. package/dist/index.js.map +0 -1
  120. package/dist/orm.d.ts +0 -4
  121. package/dist/orm.d.ts.map +0 -1
  122. package/dist/orm.js +0 -34
  123. package/dist/orm.js.map +0 -1
  124. package/dist/resolvers/AskSkipResolver.d.ts +0 -54
  125. package/dist/resolvers/AskSkipResolver.d.ts.map +0 -1
  126. package/dist/resolvers/AskSkipResolver.js +0 -800
  127. package/dist/resolvers/AskSkipResolver.js.map +0 -1
  128. package/dist/resolvers/ColorResolver.d.ts +0 -22
  129. package/dist/resolvers/ColorResolver.d.ts.map +0 -1
  130. package/dist/resolvers/ColorResolver.js +0 -94
  131. package/dist/resolvers/ColorResolver.js.map +0 -1
  132. package/dist/resolvers/DatasetResolver.d.ts +0 -42
  133. package/dist/resolvers/DatasetResolver.d.ts.map +0 -1
  134. package/dist/resolvers/DatasetResolver.js +0 -168
  135. package/dist/resolvers/DatasetResolver.js.map +0 -1
  136. package/dist/resolvers/EntityCommunicationsResolver.d.ts +0 -49
  137. package/dist/resolvers/EntityCommunicationsResolver.d.ts.map +0 -1
  138. package/dist/resolvers/EntityCommunicationsResolver.js +0 -228
  139. package/dist/resolvers/EntityCommunicationsResolver.js.map +0 -1
  140. package/dist/resolvers/EntityRecordNameResolver.d.ts +0 -21
  141. package/dist/resolvers/EntityRecordNameResolver.d.ts.map +0 -1
  142. package/dist/resolvers/EntityRecordNameResolver.js +0 -113
  143. package/dist/resolvers/EntityRecordNameResolver.js.map +0 -1
  144. package/dist/resolvers/EntityResolver.d.ts +0 -6
  145. package/dist/resolvers/EntityResolver.d.ts.map +0 -1
  146. package/dist/resolvers/EntityResolver.js +0 -60
  147. package/dist/resolvers/EntityResolver.js.map +0 -1
  148. package/dist/resolvers/FileCategoryResolver.d.ts +0 -6
  149. package/dist/resolvers/FileCategoryResolver.d.ts.map +0 -1
  150. package/dist/resolvers/FileCategoryResolver.js +0 -65
  151. package/dist/resolvers/FileCategoryResolver.js.map +0 -1
  152. package/dist/resolvers/FileResolver.d.ts +0 -24
  153. package/dist/resolvers/FileResolver.d.ts.map +0 -1
  154. package/dist/resolvers/FileResolver.js +0 -162
  155. package/dist/resolvers/FileResolver.js.map +0 -1
  156. package/dist/resolvers/MergeRecordsResolver.d.ts +0 -59
  157. package/dist/resolvers/MergeRecordsResolver.d.ts.map +0 -1
  158. package/dist/resolvers/MergeRecordsResolver.js +0 -256
  159. package/dist/resolvers/MergeRecordsResolver.js.map +0 -1
  160. package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts +0 -29
  161. package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts.map +0 -1
  162. package/dist/resolvers/PotentialDuplicateRecordResolver.js +0 -127
  163. package/dist/resolvers/PotentialDuplicateRecordResolver.js.map +0 -1
  164. package/dist/resolvers/QueryResolver.d.ts +0 -13
  165. package/dist/resolvers/QueryResolver.d.ts.map +0 -1
  166. package/dist/resolvers/QueryResolver.js +0 -74
  167. package/dist/resolvers/QueryResolver.js.map +0 -1
  168. package/dist/resolvers/ReportResolver.d.ts +0 -20
  169. package/dist/resolvers/ReportResolver.d.ts.map +0 -1
  170. package/dist/resolvers/ReportResolver.js +0 -175
  171. package/dist/resolvers/ReportResolver.js.map +0 -1
  172. package/dist/resolvers/UserFavoriteResolver.d.ts +0 -42
  173. package/dist/resolvers/UserFavoriteResolver.d.ts.map +0 -1
  174. package/dist/resolvers/UserFavoriteResolver.js +0 -221
  175. package/dist/resolvers/UserFavoriteResolver.js.map +0 -1
  176. package/dist/resolvers/UserResolver.d.ts +0 -10
  177. package/dist/resolvers/UserResolver.d.ts.map +0 -1
  178. package/dist/resolvers/UserResolver.js +0 -72
  179. package/dist/resolvers/UserResolver.js.map +0 -1
  180. package/dist/resolvers/UserViewResolver.d.ts +0 -13
  181. package/dist/resolvers/UserViewResolver.d.ts.map +0 -1
  182. package/dist/resolvers/UserViewResolver.js +0 -102
  183. package/dist/resolvers/UserViewResolver.js.map +0 -1
  184. package/dist/types.d.ts +0 -17
  185. package/dist/types.d.ts.map +0 -1
  186. package/dist/types.js +0 -3
  187. package/dist/types.js.map +0 -1
  188. package/dist/util.d.ts +0 -4
  189. package/dist/util.d.ts.map +0 -1
  190. package/dist/util.js +0 -89
  191. package/dist/util.js.map +0 -1
  192. package/src/entitySubclasses/EntityBehavior.server.ts +0 -241
@@ -1,23 +0,0 @@
1
- /// <reference types="node" />
2
- import { EntitySaveOptions } from "@memberjunction/core";
3
- import { EntityPermissionEntity } from '@memberjunction/core-entities';
4
- export declare class EntityPermissionsEntity_Server extends EntityPermissionEntity {
5
- protected static _entityIDQueue: number[];
6
- protected static _lastModifiedTime: Date | null;
7
- protected static _submissionTimer: NodeJS.Timeout | null;
8
- protected static _submissionDelay: number;
9
- protected static _baseURL: string;
10
- protected static _port: number;
11
- protected static _apiEndpoint: string;
12
- protected static getSubmissionURL(): string;
13
- static get EntityIDQueue(): number[];
14
- static ClearQueue(): void;
15
- static AddToQueue(entityID: number): void;
16
- protected static CheckStartSubmissionTimer(): void;
17
- protected static StartSubmissionTimer(): void;
18
- protected static SubmitQueue(): Promise<void>;
19
- Save(options?: EntitySaveOptions): Promise<boolean>;
20
- Delete(): Promise<boolean>;
21
- }
22
- export declare function LoadEntityPermissionsServerSubClass(): void;
23
- //# sourceMappingURL=entityPermissions.server.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"entityPermissions.server.d.ts","sourceRoot":"","sources":["../../src/entitySubclasses/entityPermissions.server.ts"],"names":[],"mappings":";AACA,OAAO,EAAc,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AAQtE,qBACa,8BAA+B,SAAQ,sBAAsB;IACtE,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,CAAM;IAC/C,SAAS,CAAC,MAAM,CAAC,iBAAiB,EAAE,IAAI,GAAG,IAAI,CAAQ;IACvD,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAQ;IAChE,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAgC;IACzE,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAoB;IACrD,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAqB;IACnD,SAAS,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAA6B;IAGlE,SAAS,CAAC,MAAM,CAAC,gBAAgB,IAAI,MAAM;IAI3C,WAAkB,aAAa,IAAI,MAAM,EAAE,CAE1C;WAEa,UAAU,IAAI,IAAI;WAIlB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAOhD,SAAS,CAAC,MAAM,CAAC,yBAAyB,IAAI,IAAI;IAWlD,SAAS,CAAC,MAAM,CAAC,oBAAoB,IAAI,IAAI;qBAMtB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAgC1C,IAAI,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ7C,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;CAS5C;AAED,wBAAgB,mCAAmC,SAElD"}
@@ -1,99 +0,0 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
9
- return (mod && mod.__esModule) ? mod : { "default": mod };
10
- };
11
- var EntityPermissionsEntity_Server_1;
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.LoadEntityPermissionsServerSubClass = exports.EntityPermissionsEntity_Server = void 0;
14
- const global_1 = require("@memberjunction/global");
15
- const core_1 = require("@memberjunction/core");
16
- const core_entities_1 = require("@memberjunction/core-entities");
17
- const axios_1 = __importDefault(require("axios"));
18
- const config_1 = require("../config");
19
- let EntityPermissionsEntity_Server = EntityPermissionsEntity_Server_1 = class EntityPermissionsEntity_Server extends core_entities_1.EntityPermissionEntity {
20
- static getSubmissionURL() {
21
- return `${this._baseURL}:${this._port}${this._apiEndpoint}`;
22
- }
23
- static get EntityIDQueue() {
24
- return this._entityIDQueue;
25
- }
26
- static ClearQueue() {
27
- this._entityIDQueue = [];
28
- this._submissionTimer = null;
29
- }
30
- static AddToQueue(entityID) {
31
- if (this._entityIDQueue.indexOf(entityID) === -1)
32
- this._entityIDQueue.push(entityID);
33
- this._lastModifiedTime = new Date();
34
- this.CheckStartSubmissionTimer();
35
- }
36
- static CheckStartSubmissionTimer() {
37
- if (this._submissionTimer === null) {
38
- this.StartSubmissionTimer();
39
- }
40
- else {
41
- clearTimeout(this._submissionTimer);
42
- this.StartSubmissionTimer();
43
- }
44
- }
45
- static StartSubmissionTimer() {
46
- this._submissionTimer = setTimeout(() => {
47
- this.SubmitQueue();
48
- }, this._submissionDelay);
49
- }
50
- static async SubmitQueue() {
51
- this._lastModifiedTime = null;
52
- if (this._entityIDQueue.length > 0) {
53
- try {
54
- const response = await axios_1.default.post(this.getSubmissionURL(), {
55
- entityIDArray: this._entityIDQueue
56
- });
57
- if (response.status === 200 && response.data.status === 'ok') {
58
- console.log('Queue submitted successfully.');
59
- this.ClearQueue();
60
- }
61
- else {
62
- console.error('Failed to submit queue:', response.data.errorMessage || 'Unknown error');
63
- }
64
- }
65
- catch (error) {
66
- console.error('Failed to submit queue:', error);
67
- }
68
- }
69
- else {
70
- console.log('No entities to submit.');
71
- }
72
- }
73
- Save(options) {
74
- if (this.Dirty || options?.IgnoreDirtyState)
75
- EntityPermissionsEntity_Server_1.AddToQueue(this.EntityID);
76
- return super.Save(options);
77
- }
78
- async Delete() {
79
- const success = await super.Delete();
80
- if (success)
81
- EntityPermissionsEntity_Server_1.AddToQueue(this.EntityID);
82
- return success;
83
- }
84
- };
85
- exports.EntityPermissionsEntity_Server = EntityPermissionsEntity_Server;
86
- EntityPermissionsEntity_Server._entityIDQueue = [];
87
- EntityPermissionsEntity_Server._lastModifiedTime = null;
88
- EntityPermissionsEntity_Server._submissionTimer = null;
89
- EntityPermissionsEntity_Server._submissionDelay = config_1.___codeGenAPISubmissionDelay;
90
- EntityPermissionsEntity_Server._baseURL = config_1.___codeGenAPIURL;
91
- EntityPermissionsEntity_Server._port = config_1.___codeGenAPIPort;
92
- EntityPermissionsEntity_Server._apiEndpoint = '/api/entity-permissions';
93
- exports.EntityPermissionsEntity_Server = EntityPermissionsEntity_Server = EntityPermissionsEntity_Server_1 = __decorate([
94
- (0, global_1.RegisterClass)(core_1.BaseEntity, 'Entity Permissions', 3)
95
- ], EntityPermissionsEntity_Server);
96
- function LoadEntityPermissionsServerSubClass() {
97
- }
98
- exports.LoadEntityPermissionsServerSubClass = LoadEntityPermissionsServerSubClass;
99
- //# sourceMappingURL=entityPermissions.server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"entityPermissions.server.js","sourceRoot":"","sources":["../../src/entitySubclasses/entityPermissions.server.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- import { EntityInfo } from "@memberjunction/core";
2
- import { AIModelEntityExtended, UserViewEntityExtended } from '@memberjunction/core-entities';
3
- export declare class UserViewEntity_Server extends UserViewEntityExtended {
4
- protected get SmartFilterImplemented(): boolean;
5
- protected get AIVendorName(): string;
6
- protected GetAIModel(): Promise<AIModelEntityExtended>;
7
- GenerateSmartFilterWhereClause(prompt: string, entityInfo: EntityInfo): Promise<{
8
- whereClause: string;
9
- userExplanation: string;
10
- }>;
11
- GenerateSysPrompt(entityInfo: EntityInfo): string;
12
- }
13
- //# sourceMappingURL=userViewEntity.server.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"userViewEntity.server.d.ts","sourceRoot":"","sources":["../../src/entitySubclasses/userViewEntity.server.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,UAAU,EAAsB,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAiB,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AAM5G,qBACa,qBAAsB,SAAQ,sBAAsB;IAI7D,cAAuB,sBAAsB,IAAI,OAAO,CAEvD;IAMD,SAAS,KAAK,YAAY,IAAI,MAAM,CAEnC;cAMe,UAAU,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAc/C,8BAA8B,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAC,CAAC;IAuErI,iBAAiB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM;CAwE3D"}
@@ -1,164 +0,0 @@
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
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.UserViewEntity_Server = void 0;
10
- const global_1 = require("@memberjunction/global");
11
- const core_1 = require("@memberjunction/core");
12
- const core_entities_1 = require("@memberjunction/core-entities");
13
- const ai_1 = require("@memberjunction/ai");
14
- const aiengine_1 = require("@memberjunction/aiengine");
15
- const ai_openai_1 = require("@memberjunction/ai-openai");
16
- (0, ai_openai_1.LoadOpenAILLM)();
17
- let UserViewEntity_Server = class UserViewEntity_Server extends core_entities_1.UserViewEntityExtended {
18
- get SmartFilterImplemented() {
19
- return true;
20
- }
21
- get AIVendorName() {
22
- return 'OpenAI';
23
- }
24
- async GetAIModel() {
25
- await aiengine_1.AIEngine.Instance.Config(false, this.ContextCurrentUser);
26
- const models = aiengine_1.AIEngine.Models.filter(m => m.AIModelType.trim().toLowerCase() === 'llm' &&
27
- m.Vendor.trim().toLowerCase() === this.AIVendorName.trim().toLowerCase());
28
- models.sort((a, b) => b.PowerRank - a.PowerRank);
29
- return models[0];
30
- }
31
- async GenerateSmartFilterWhereClause(prompt, entityInfo) {
32
- try {
33
- const model = await this.GetAIModel();
34
- const llm = global_1.MJGlobal.Instance.ClassFactory.CreateInstance(ai_1.BaseLLM, model.DriverClass, (0, ai_1.GetAIAPIKey)(model.DriverClass));
35
- const chatParams = {
36
- model: model.APINameOrName,
37
- messages: [
38
- {
39
- role: 'system',
40
- content: this.GenerateSysPrompt(entityInfo)
41
- },
42
- {
43
- role: 'user',
44
- content: `${prompt}`,
45
- },
46
- ],
47
- };
48
- const result = await llm.ChatCompletion(chatParams);
49
- if (result && result.data) {
50
- const llmResponse = result.data.choices[0].message.content;
51
- if (llmResponse) {
52
- try {
53
- const cleansed = (0, global_1.CleanJSON)(llmResponse);
54
- if (!cleansed)
55
- throw new Error('Invalid JSON response from AI: ' + llmResponse);
56
- const parsed = JSON.parse(cleansed);
57
- if (parsed.whereClause && parsed.whereClause.length > 0) {
58
- const trimmed = parsed.whereClause.trim();
59
- let ret = '';
60
- if (trimmed.toLowerCase().startsWith('where '))
61
- ret = trimmed.substring(6);
62
- else
63
- ret = parsed.whereClause;
64
- return {
65
- whereClause: ret,
66
- userExplanation: parsed.userExplanationMessage
67
- };
68
- }
69
- else if (parsed.whereClause !== undefined && parsed.whereClause !== null) {
70
- return {
71
- whereClause: '',
72
- userExplanation: parsed.userExplanationMessage
73
- };
74
- }
75
- else {
76
- throw new Error('Invalid response from AI, no whereClause property found in response: ' + llmResponse);
77
- }
78
- }
79
- catch (e) {
80
- (0, core_1.LogError)(e);
81
- throw new Error('Error parsing JSON response from AI: ' + llmResponse);
82
- }
83
- }
84
- else
85
- throw new Error('Null response from AI');
86
- }
87
- else
88
- throw new Error('No result returned from AI');
89
- }
90
- catch (e) {
91
- (0, core_1.LogError)(e);
92
- throw e;
93
- }
94
- }
95
- GenerateSysPrompt(entityInfo) {
96
- const processedViews = [entityInfo.BaseView];
97
- const md = new core_1.Metadata();
98
- const gptSysPrompt = `You are an expert in SQL and Microsoft SQL Server.
99
- You will be provided a user prompt representing how they want to filter the data.
100
- You may *NOT* use JOINS, only sub-queries for related tables.
101
-
102
- I am a bot and can only understand JSON. Your response must be parsable into this type:
103
- const returnType = {
104
- whereClause: string,
105
- orderByClause: string
106
- userExplanationMessage: string
107
- };
108
-
109
- The view that the user is querying is called ${entityInfo.BaseView} and has these fields:
110
- ${entityInfo.Fields.map(f => {
111
- let ret = `${f.Name} (${f.Type})`;
112
- if (f.RelatedEntity) {
113
- ret += ` (fkey to ${f.RelatedEntityBaseView})`;
114
- }
115
- return ret;
116
- }).join(',')}`;
117
- const fkeyFields = entityInfo.Fields.filter(f => f.RelatedEntity && f.RelatedEntity.length > 0);
118
- const fkeyBaseViewsDistinct = fkeyFields.map(f => f.RelatedEntityBaseView).filter((v, i, a) => a.indexOf(v) === i);
119
- const relationships = `
120
- 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.
121
- If there are multiple filters related to a single related view, attempt to combine them into a single sub-query for efficiency.
122
- ${fkeyBaseViewsDistinct.map(v => {
123
- if (processedViews.indexOf(v) === -1) {
124
- const e = md.Entities.find(e => e.BaseView === v);
125
- if (e) {
126
- processedViews.push(v);
127
- return `* ${e.SchemaName}.${e.BaseView}: ${e.Fields.map(ef => {
128
- return ef.Name + ' (' + ef.Type + ')';
129
- }).join(',')}`;
130
- }
131
- else
132
- return '';
133
- }
134
- else
135
- return '';
136
- }).join('\n')}
137
- ${entityInfo.RelatedEntities.map(r => {
138
- const e = md.Entities.find(e => e.Name === r.RelatedEntity);
139
- if (e) {
140
- if (processedViews.indexOf(e.BaseView) === -1) {
141
- processedViews.push(e.BaseView);
142
- return `* ${e.SchemaName}.${e.BaseView}: ${e.Fields.map(ef => {
143
- let ret = `${ef.Name} (${ef.Type})`;
144
- if (ef.RelatedEntity) {
145
- ret += ` (fkey to ${ef.RelatedEntityBaseView})`;
146
- }
147
- return ret;
148
- }).join(',')}`;
149
- }
150
- else
151
- return '';
152
- }
153
- else
154
- return '';
155
- }).join('\n')}`;
156
- return gptSysPrompt + (processedViews.length > 1 ? relationships : '') + `
157
- **** REMEMBER **** I am a BOT, do not return anything other than JSON to me or I will choke on your response!`;
158
- }
159
- };
160
- exports.UserViewEntity_Server = UserViewEntity_Server;
161
- exports.UserViewEntity_Server = UserViewEntity_Server = __decorate([
162
- (0, global_1.RegisterClass)(core_1.BaseEntity, 'User Views')
163
- ], UserViewEntity_Server);
164
- //# sourceMappingURL=userViewEntity.server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"userViewEntity.server.js","sourceRoot":"","sources":["../../src/entitySubclasses/userViewEntity.server.ts"],"names":[],"mappings":"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"}