@memberjunction/server 1.8.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.json +160 -1
- package/CHANGELOG.md +34 -2
- package/package.json +30 -39
- package/src/apolloServer/index.ts +0 -1
- package/src/auth/newUsers.ts +4 -3
- package/src/context.ts +19 -27
- package/src/entitySubclasses/entityPermissions.server.ts +3 -3
- package/src/generated/generated.ts +13440 -12226
- package/src/generic/ResolverBase.ts +297 -172
- package/src/generic/RunViewResolver.ts +204 -14
- package/src/index.ts +18 -19
- package/src/resolvers/AskSkipResolver.ts +44 -44
- package/src/resolvers/ColorResolver.ts +3 -14
- package/src/resolvers/DatasetResolver.ts +4 -4
- package/src/resolvers/EntityCommunicationsResolver.ts +42 -20
- package/src/resolvers/FileCategoryResolver.ts +2 -2
- package/src/resolvers/FileResolver.ts +6 -4
- package/src/resolvers/MergeRecordsResolver.ts +3 -2
- package/src/resolvers/PotentialDuplicateRecordResolver.ts +48 -40
- package/src/resolvers/QueryResolver.ts +2 -2
- package/src/resolvers/ReportResolver.ts +6 -6
- package/src/resolvers/UserFavoriteResolver.ts +8 -8
- package/src/resolvers/UserResolver.ts +3 -1
- package/src/resolvers/UserViewResolver.ts +1 -1
- package/src/types.ts +21 -0
- package/tsconfig.json +3 -4
- package/dist/apolloServer/TransactionPlugin.d.ts +0 -4
- package/dist/apolloServer/TransactionPlugin.d.ts.map +0 -1
- package/dist/apolloServer/TransactionPlugin.js +0 -49
- package/dist/apolloServer/TransactionPlugin.js.map +0 -1
- package/dist/apolloServer/index.d.ts +0 -11
- package/dist/apolloServer/index.d.ts.map +0 -1
- package/dist/apolloServer/index.js +0 -27
- package/dist/apolloServer/index.js.map +0 -1
- package/dist/auth/exampleNewUserSubClass.d.ts +0 -6
- package/dist/auth/exampleNewUserSubClass.d.ts.map +0 -1
- package/dist/auth/exampleNewUserSubClass.js +0 -54
- package/dist/auth/exampleNewUserSubClass.js.map +0 -1
- package/dist/auth/index.d.ts +0 -30
- package/dist/auth/index.d.ts.map +0 -1
- package/dist/auth/index.js +0 -129
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/newUsers.d.ts +0 -5
- package/dist/auth/newUsers.d.ts.map +0 -1
- package/dist/auth/newUsers.js +0 -66
- package/dist/auth/newUsers.js.map +0 -1
- package/dist/auth/tokenExpiredError.d.ts +0 -5
- package/dist/auth/tokenExpiredError.d.ts.map +0 -1
- package/dist/auth/tokenExpiredError.js +0 -16
- package/dist/auth/tokenExpiredError.js.map +0 -1
- package/dist/cache.d.ts +0 -3
- package/dist/cache.d.ts.map +0 -1
- package/dist/cache.js +0 -11
- package/dist/cache.js.map +0 -1
- package/dist/config.d.ts +0 -196
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -72
- package/dist/config.js.map +0 -1
- package/dist/context.d.ts +0 -17
- package/dist/context.d.ts.map +0 -1
- package/dist/context.js +0 -114
- package/dist/context.js.map +0 -1
- package/dist/directives/Public.d.ts +0 -4
- package/dist/directives/Public.d.ts.map +0 -1
- package/dist/directives/Public.js +0 -34
- package/dist/directives/Public.js.map +0 -1
- package/dist/directives/index.d.ts +0 -2
- package/dist/directives/index.d.ts.map +0 -1
- package/dist/directives/index.js +0 -18
- package/dist/directives/index.js.map +0 -1
- package/dist/entitySubclasses/DuplicateRunEntity.server.d.ts +0 -6
- package/dist/entitySubclasses/DuplicateRunEntity.server.d.ts.map +0 -1
- package/dist/entitySubclasses/DuplicateRunEntity.server.js +0 -37
- package/dist/entitySubclasses/DuplicateRunEntity.server.js.map +0 -1
- package/dist/entitySubclasses/EntityBehavior.server.d.ts +0 -29
- package/dist/entitySubclasses/EntityBehavior.server.d.ts.map +0 -1
- package/dist/entitySubclasses/EntityBehavior.server.js +0 -213
- package/dist/entitySubclasses/EntityBehavior.server.js.map +0 -1
- package/dist/entitySubclasses/entityPermissions.server.d.ts +0 -23
- package/dist/entitySubclasses/entityPermissions.server.d.ts.map +0 -1
- package/dist/entitySubclasses/entityPermissions.server.js +0 -99
- package/dist/entitySubclasses/entityPermissions.server.js.map +0 -1
- package/dist/entitySubclasses/userViewEntity.server.d.ts +0 -13
- package/dist/entitySubclasses/userViewEntity.server.d.ts.map +0 -1
- package/dist/entitySubclasses/userViewEntity.server.js +0 -164
- package/dist/entitySubclasses/userViewEntity.server.js.map +0 -1
- package/dist/generated/generated.d.ts +0 -6420
- package/dist/generated/generated.d.ts.map +0 -1
- package/dist/generated/generated.js +0 -34770
- package/dist/generated/generated.js.map +0 -1
- package/dist/generic/DeleteOptionsInput.d.ts +0 -5
- package/dist/generic/DeleteOptionsInput.d.ts.map +0 -1
- package/dist/generic/DeleteOptionsInput.js +0 -28
- package/dist/generic/DeleteOptionsInput.js.map +0 -1
- package/dist/generic/KeyInputOutputTypes.d.ts +0 -16
- package/dist/generic/KeyInputOutputTypes.d.ts.map +0 -1
- package/dist/generic/KeyInputOutputTypes.js +0 -62
- package/dist/generic/KeyInputOutputTypes.js.map +0 -1
- package/dist/generic/KeyValuePairInput.d.ts +0 -5
- package/dist/generic/KeyValuePairInput.d.ts.map +0 -1
- package/dist/generic/KeyValuePairInput.js +0 -28
- package/dist/generic/KeyValuePairInput.js.map +0 -1
- package/dist/generic/PushStatusResolver.d.ts +0 -14
- package/dist/generic/PushStatusResolver.d.ts.map +0 -1
- package/dist/generic/PushStatusResolver.js +0 -58
- package/dist/generic/PushStatusResolver.js.map +0 -1
- package/dist/generic/ResolverBase.d.ts +0 -37
- package/dist/generic/ResolverBase.d.ts.map +0 -1
- package/dist/generic/ResolverBase.js +0 -468
- package/dist/generic/ResolverBase.js.map +0 -1
- package/dist/generic/RunViewResolver.d.ts +0 -88
- package/dist/generic/RunViewResolver.d.ts.map +0 -1
- package/dist/generic/RunViewResolver.js +0 -443
- package/dist/generic/RunViewResolver.js.map +0 -1
- package/dist/index.d.ts +0 -28
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -145
- package/dist/index.js.map +0 -1
- package/dist/orm.d.ts +0 -4
- package/dist/orm.d.ts.map +0 -1
- package/dist/orm.js +0 -34
- package/dist/orm.js.map +0 -1
- package/dist/resolvers/AskSkipResolver.d.ts +0 -54
- package/dist/resolvers/AskSkipResolver.d.ts.map +0 -1
- package/dist/resolvers/AskSkipResolver.js +0 -800
- package/dist/resolvers/AskSkipResolver.js.map +0 -1
- package/dist/resolvers/ColorResolver.d.ts +0 -22
- package/dist/resolvers/ColorResolver.d.ts.map +0 -1
- package/dist/resolvers/ColorResolver.js +0 -94
- package/dist/resolvers/ColorResolver.js.map +0 -1
- package/dist/resolvers/DatasetResolver.d.ts +0 -42
- package/dist/resolvers/DatasetResolver.d.ts.map +0 -1
- package/dist/resolvers/DatasetResolver.js +0 -168
- package/dist/resolvers/DatasetResolver.js.map +0 -1
- package/dist/resolvers/EntityCommunicationsResolver.d.ts +0 -49
- package/dist/resolvers/EntityCommunicationsResolver.d.ts.map +0 -1
- package/dist/resolvers/EntityCommunicationsResolver.js +0 -228
- package/dist/resolvers/EntityCommunicationsResolver.js.map +0 -1
- package/dist/resolvers/EntityRecordNameResolver.d.ts +0 -21
- package/dist/resolvers/EntityRecordNameResolver.d.ts.map +0 -1
- package/dist/resolvers/EntityRecordNameResolver.js +0 -113
- package/dist/resolvers/EntityRecordNameResolver.js.map +0 -1
- package/dist/resolvers/EntityResolver.d.ts +0 -6
- package/dist/resolvers/EntityResolver.d.ts.map +0 -1
- package/dist/resolvers/EntityResolver.js +0 -60
- package/dist/resolvers/EntityResolver.js.map +0 -1
- package/dist/resolvers/FileCategoryResolver.d.ts +0 -6
- package/dist/resolvers/FileCategoryResolver.d.ts.map +0 -1
- package/dist/resolvers/FileCategoryResolver.js +0 -65
- package/dist/resolvers/FileCategoryResolver.js.map +0 -1
- package/dist/resolvers/FileResolver.d.ts +0 -24
- package/dist/resolvers/FileResolver.d.ts.map +0 -1
- package/dist/resolvers/FileResolver.js +0 -162
- package/dist/resolvers/FileResolver.js.map +0 -1
- package/dist/resolvers/MergeRecordsResolver.d.ts +0 -59
- package/dist/resolvers/MergeRecordsResolver.d.ts.map +0 -1
- package/dist/resolvers/MergeRecordsResolver.js +0 -256
- package/dist/resolvers/MergeRecordsResolver.js.map +0 -1
- package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts +0 -29
- package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts.map +0 -1
- package/dist/resolvers/PotentialDuplicateRecordResolver.js +0 -127
- package/dist/resolvers/PotentialDuplicateRecordResolver.js.map +0 -1
- package/dist/resolvers/QueryResolver.d.ts +0 -13
- package/dist/resolvers/QueryResolver.d.ts.map +0 -1
- package/dist/resolvers/QueryResolver.js +0 -74
- package/dist/resolvers/QueryResolver.js.map +0 -1
- package/dist/resolvers/ReportResolver.d.ts +0 -20
- package/dist/resolvers/ReportResolver.d.ts.map +0 -1
- package/dist/resolvers/ReportResolver.js +0 -175
- package/dist/resolvers/ReportResolver.js.map +0 -1
- package/dist/resolvers/UserFavoriteResolver.d.ts +0 -42
- package/dist/resolvers/UserFavoriteResolver.d.ts.map +0 -1
- package/dist/resolvers/UserFavoriteResolver.js +0 -221
- package/dist/resolvers/UserFavoriteResolver.js.map +0 -1
- package/dist/resolvers/UserResolver.d.ts +0 -10
- package/dist/resolvers/UserResolver.d.ts.map +0 -1
- package/dist/resolvers/UserResolver.js +0 -72
- package/dist/resolvers/UserResolver.js.map +0 -1
- package/dist/resolvers/UserViewResolver.d.ts +0 -13
- package/dist/resolvers/UserViewResolver.d.ts.map +0 -1
- package/dist/resolvers/UserViewResolver.js +0 -102
- package/dist/resolvers/UserViewResolver.js.map +0 -1
- package/dist/types.d.ts +0 -17
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -3
- package/dist/types.js.map +0 -1
- package/dist/util.d.ts +0 -4
- package/dist/util.d.ts.map +0 -1
- package/dist/util.js +0 -89
- package/dist/util.js.map +0 -1
- package/src/entitySubclasses/EntityBehavior.server.ts +0 -241
|
@@ -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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"}
|