@memberjunction/ai-engine-base 5.40.1 → 5.40.2
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/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/ai-engine-base",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "5.40.
|
|
4
|
+
"version": "5.40.2",
|
|
5
5
|
"description": "MemberJunction: Base AI Engine Package - does extended types and data caching, can be used anywhere.",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -17,12 +17,12 @@
|
|
|
17
17
|
"author": "MemberJunction.com",
|
|
18
18
|
"license": "ISC",
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@memberjunction/core": "5.40.
|
|
21
|
-
"@memberjunction/global": "5.40.
|
|
22
|
-
"@memberjunction/core-entities": "5.40.
|
|
23
|
-
"@memberjunction/ai": "5.40.
|
|
24
|
-
"@memberjunction/ai-core-plus": "5.40.
|
|
25
|
-
"@memberjunction/templates-base-types": "5.40.
|
|
20
|
+
"@memberjunction/core": "5.40.2",
|
|
21
|
+
"@memberjunction/global": "5.40.2",
|
|
22
|
+
"@memberjunction/core-entities": "5.40.2",
|
|
23
|
+
"@memberjunction/ai": "5.40.2",
|
|
24
|
+
"@memberjunction/ai-core-plus": "5.40.2",
|
|
25
|
+
"@memberjunction/templates-base-types": "5.40.2",
|
|
26
26
|
"dotenv": "^17.2.4",
|
|
27
27
|
"rxjs": "^7.8.2"
|
|
28
28
|
},
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { ValidationResult } from '@memberjunction/core';
|
|
2
|
-
import { AICredentialBindingEntity } from '@memberjunction/core-entities';
|
|
3
|
-
/**
|
|
4
|
-
* Extended AICredentialBindingEntity class that validates credential types match vendor expectations.
|
|
5
|
-
* When a credential is bound, this validates that the credential's CredentialTypeID matches the
|
|
6
|
-
* CredentialTypeID expected by the vendor (as declared on the AIVendor record).
|
|
7
|
-
*/
|
|
8
|
-
export declare class AICredentialBindingEntityExtended extends AICredentialBindingEntity {
|
|
9
|
-
/**
|
|
10
|
-
* Async validation that checks credential type compatibility.
|
|
11
|
-
* Uses AIEngineBase.Instance for cached AI entity data and RunView for credentials.
|
|
12
|
-
*/
|
|
13
|
-
ValidateAsync(): Promise<ValidationResult>;
|
|
14
|
-
/**
|
|
15
|
-
* Turn on async validation
|
|
16
|
-
*/
|
|
17
|
-
get DefaultSkipAsyncValidation(): boolean;
|
|
18
|
-
/**
|
|
19
|
-
* Validates that the bound credential's type matches the vendor's expected credential type.
|
|
20
|
-
* The vendor is determined based on the binding type:
|
|
21
|
-
* - Vendor binding: directly references the vendor
|
|
22
|
-
* - ModelVendor binding: gets vendor from the ModelVendor record
|
|
23
|
-
* - PromptModel binding: gets vendor from the PromptModel -> ModelVendor -> Vendor chain
|
|
24
|
-
*/
|
|
25
|
-
private validateCredentialTypeMatch;
|
|
26
|
-
/**
|
|
27
|
-
* Gets the expected CredentialTypeID from the vendor based on the binding type.
|
|
28
|
-
* Uses AIEngineBase cached data for lookups.
|
|
29
|
-
*/
|
|
30
|
-
private getExpectedCredentialTypeId;
|
|
31
|
-
/**
|
|
32
|
-
* Gets the expected credential type name for error messages.
|
|
33
|
-
*/
|
|
34
|
-
private getExpectedCredentialTypeName;
|
|
35
|
-
/**
|
|
36
|
-
* Gets the vendor name for error messages based on the binding type.
|
|
37
|
-
*/
|
|
38
|
-
private getVendorNameForError;
|
|
39
|
-
/**
|
|
40
|
-
* Loads the credential using RunView.
|
|
41
|
-
* Credentials are not cached in AIEngineBase, so we need to query them.
|
|
42
|
-
*/
|
|
43
|
-
private loadCredential;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Tree-shaking prevention function - must be called from index.ts
|
|
47
|
-
*/
|
|
48
|
-
export declare function LoadAICredentialBindingEntityExtended(): void;
|
|
49
|
-
//# sourceMappingURL=AICredentialBindingEntityExtended.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AICredentialBindingEntityExtended.d.ts","sourceRoot":"","sources":["../src/AICredentialBindingEntityExtended.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,gBAAgB,EAA4C,MAAM,sBAAsB,CAAC;AACvH,OAAO,EAAE,yBAAyB,EAAoB,MAAM,+BAA+B,CAAC;AAG5F;;;;GAIG;AACH,qBACa,iCAAkC,SAAQ,yBAAyB;IAE5E;;;OAGG;IACmB,aAAa,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAYhE;;OAEG;IACH,IAAa,0BAA0B,IAAI,OAAO,CAEjD;IAED;;;;;;OAMG;YACW,2BAA2B;IAmCzC;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAgCnC;;OAEG;IACH,OAAO,CAAC,6BAA6B;IA6BrC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA6B7B;;;OAGG;YACW,cAAc;CAkB/B;AAED;;GAEG;AACH,wBAAgB,qCAAqC,SAGpD"}
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
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;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
import { RegisterClass } from '@memberjunction/global';
|
|
8
|
-
import { BaseEntity, RunView, ValidationErrorInfo, ValidationErrorType } from '@memberjunction/core';
|
|
9
|
-
import { AICredentialBindingEntity } from '@memberjunction/core-entities';
|
|
10
|
-
import { AIEngineBase } from './BaseAIEngine.js';
|
|
11
|
-
/**
|
|
12
|
-
* Extended AICredentialBindingEntity class that validates credential types match vendor expectations.
|
|
13
|
-
* When a credential is bound, this validates that the credential's CredentialTypeID matches the
|
|
14
|
-
* CredentialTypeID expected by the vendor (as declared on the AIVendor record).
|
|
15
|
-
*/
|
|
16
|
-
let AICredentialBindingEntityExtended = class AICredentialBindingEntityExtended extends AICredentialBindingEntity {
|
|
17
|
-
/**
|
|
18
|
-
* Async validation that checks credential type compatibility.
|
|
19
|
-
* Uses AIEngineBase.Instance for cached AI entity data and RunView for credentials.
|
|
20
|
-
*/
|
|
21
|
-
async ValidateAsync() {
|
|
22
|
-
// Start with base validation (including synchronous validation)
|
|
23
|
-
const result = await super.ValidateAsync();
|
|
24
|
-
// Only validate credential type if we have both a credential and can determine the vendor
|
|
25
|
-
if (this.CredentialID) {
|
|
26
|
-
await this.validateCredentialTypeMatch(result);
|
|
27
|
-
}
|
|
28
|
-
return result;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Turn on async validation
|
|
32
|
-
*/
|
|
33
|
-
get DefaultSkipAsyncValidation() {
|
|
34
|
-
return false; // don't skip async validation
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Validates that the bound credential's type matches the vendor's expected credential type.
|
|
38
|
-
* The vendor is determined based on the binding type:
|
|
39
|
-
* - Vendor binding: directly references the vendor
|
|
40
|
-
* - ModelVendor binding: gets vendor from the ModelVendor record
|
|
41
|
-
* - PromptModel binding: gets vendor from the PromptModel -> ModelVendor -> Vendor chain
|
|
42
|
-
*/
|
|
43
|
-
async validateCredentialTypeMatch(result) {
|
|
44
|
-
// Get the expected credential type from the vendor
|
|
45
|
-
const vendorCredentialTypeId = this.getExpectedCredentialTypeId();
|
|
46
|
-
// If the vendor doesn't have a credential type requirement, skip validation
|
|
47
|
-
if (!vendorCredentialTypeId) {
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
// Load the credential to get its type
|
|
51
|
-
const credential = await this.loadCredential();
|
|
52
|
-
if (!credential) {
|
|
53
|
-
result.Errors.push(new ValidationErrorInfo('CredentialID', `Could not load credential with ID '${this.CredentialID}' to validate type compatibility.`, this.CredentialID, ValidationErrorType.Warning));
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
// Compare credential types
|
|
57
|
-
if (credential.CredentialTypeID !== vendorCredentialTypeId) {
|
|
58
|
-
const vendorName = this.getVendorNameForError();
|
|
59
|
-
const expectedTypeName = this.getExpectedCredentialTypeName();
|
|
60
|
-
result.Errors.push(new ValidationErrorInfo('CredentialID', `Credential type mismatch: The credential '${credential.Name}' has type '${credential.CredentialType || credential.CredentialTypeID}' but vendor '${vendorName}' expects type '${expectedTypeName || vendorCredentialTypeId}'.`, this.CredentialID, ValidationErrorType.Failure));
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Gets the expected CredentialTypeID from the vendor based on the binding type.
|
|
65
|
-
* Uses AIEngineBase cached data for lookups.
|
|
66
|
-
*/
|
|
67
|
-
getExpectedCredentialTypeId() {
|
|
68
|
-
const engine = AIEngineBase.Instance;
|
|
69
|
-
switch (this.BindingType) {
|
|
70
|
-
case 'Vendor': {
|
|
71
|
-
// Direct vendor binding - get type from the vendor
|
|
72
|
-
const vendor = engine.Vendors.find(v => v.ID === this.AIVendorID);
|
|
73
|
-
return vendor?.CredentialTypeID ?? null;
|
|
74
|
-
}
|
|
75
|
-
case 'ModelVendor': {
|
|
76
|
-
// ModelVendor binding - get vendor from ModelVendor, then get type
|
|
77
|
-
const modelVendor = engine.ModelVendors.find(mv => mv.ID === this.AIModelVendorID);
|
|
78
|
-
if (modelVendor) {
|
|
79
|
-
const vendor = engine.Vendors.find(v => v.ID === modelVendor.VendorID);
|
|
80
|
-
return vendor?.CredentialTypeID ?? null;
|
|
81
|
-
}
|
|
82
|
-
return null;
|
|
83
|
-
}
|
|
84
|
-
case 'PromptModel': {
|
|
85
|
-
// PromptModel binding - get vendor from PromptModel's VendorID
|
|
86
|
-
const promptModel = engine.PromptModels.find(pm => pm.ID === this.AIPromptModelID);
|
|
87
|
-
if (promptModel && promptModel.VendorID) {
|
|
88
|
-
const vendor = engine.Vendors.find(v => v.ID === promptModel.VendorID);
|
|
89
|
-
return vendor?.CredentialTypeID ?? null;
|
|
90
|
-
}
|
|
91
|
-
return null;
|
|
92
|
-
}
|
|
93
|
-
default:
|
|
94
|
-
return null;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Gets the expected credential type name for error messages.
|
|
99
|
-
*/
|
|
100
|
-
getExpectedCredentialTypeName() {
|
|
101
|
-
const engine = AIEngineBase.Instance;
|
|
102
|
-
switch (this.BindingType) {
|
|
103
|
-
case 'Vendor': {
|
|
104
|
-
const vendor = engine.Vendors.find(v => v.ID === this.AIVendorID);
|
|
105
|
-
return vendor?.CredentialType ?? null;
|
|
106
|
-
}
|
|
107
|
-
case 'ModelVendor': {
|
|
108
|
-
const modelVendor = engine.ModelVendors.find(mv => mv.ID === this.AIModelVendorID);
|
|
109
|
-
if (modelVendor) {
|
|
110
|
-
const vendor = engine.Vendors.find(v => v.ID === modelVendor.VendorID);
|
|
111
|
-
return vendor?.CredentialType ?? null;
|
|
112
|
-
}
|
|
113
|
-
return null;
|
|
114
|
-
}
|
|
115
|
-
case 'PromptModel': {
|
|
116
|
-
const promptModel = engine.PromptModels.find(pm => pm.ID === this.AIPromptModelID);
|
|
117
|
-
if (promptModel && promptModel.VendorID) {
|
|
118
|
-
const vendor = engine.Vendors.find(v => v.ID === promptModel.VendorID);
|
|
119
|
-
return vendor?.CredentialType ?? null;
|
|
120
|
-
}
|
|
121
|
-
return null;
|
|
122
|
-
}
|
|
123
|
-
default:
|
|
124
|
-
return null;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Gets the vendor name for error messages based on the binding type.
|
|
129
|
-
*/
|
|
130
|
-
getVendorNameForError() {
|
|
131
|
-
const engine = AIEngineBase.Instance;
|
|
132
|
-
switch (this.BindingType) {
|
|
133
|
-
case 'Vendor': {
|
|
134
|
-
const vendor = engine.Vendors.find(v => v.ID === this.AIVendorID);
|
|
135
|
-
return vendor?.Name ?? this.AIVendorID ?? 'Unknown';
|
|
136
|
-
}
|
|
137
|
-
case 'ModelVendor': {
|
|
138
|
-
const modelVendor = engine.ModelVendors.find(mv => mv.ID === this.AIModelVendorID);
|
|
139
|
-
if (modelVendor) {
|
|
140
|
-
const vendor = engine.Vendors.find(v => v.ID === modelVendor.VendorID);
|
|
141
|
-
return vendor?.Name ?? modelVendor.Vendor ?? 'Unknown';
|
|
142
|
-
}
|
|
143
|
-
return this.AIModelVendorID ?? 'Unknown';
|
|
144
|
-
}
|
|
145
|
-
case 'PromptModel': {
|
|
146
|
-
const promptModel = engine.PromptModels.find(pm => pm.ID === this.AIPromptModelID);
|
|
147
|
-
if (promptModel && promptModel.VendorID) {
|
|
148
|
-
const vendor = engine.Vendors.find(v => v.ID === promptModel.VendorID);
|
|
149
|
-
return vendor?.Name ?? promptModel.Vendor ?? 'Unknown';
|
|
150
|
-
}
|
|
151
|
-
return this.AIPromptModelID ?? 'Unknown';
|
|
152
|
-
}
|
|
153
|
-
default:
|
|
154
|
-
return 'Unknown';
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Loads the credential using RunView.
|
|
159
|
-
* Credentials are not cached in AIEngineBase, so we need to query them.
|
|
160
|
-
*/
|
|
161
|
-
async loadCredential() {
|
|
162
|
-
if (!this.CredentialID) {
|
|
163
|
-
return null;
|
|
164
|
-
}
|
|
165
|
-
const rv = new RunView();
|
|
166
|
-
const result = await rv.RunView({
|
|
167
|
-
EntityName: 'MJ: Credentials',
|
|
168
|
-
ResultType: 'entity_object',
|
|
169
|
-
CacheLocal: true // load all records and use cache for speed, filter client side below
|
|
170
|
-
}, this.ContextCurrentUser);
|
|
171
|
-
if (result.Success && result.Results && result.Results.length > 0) {
|
|
172
|
-
return result.Results.find(c => c.ID === this.CredentialID);
|
|
173
|
-
}
|
|
174
|
-
return null;
|
|
175
|
-
}
|
|
176
|
-
};
|
|
177
|
-
AICredentialBindingEntityExtended = __decorate([
|
|
178
|
-
RegisterClass(BaseEntity, 'MJ: AI Credential Bindings')
|
|
179
|
-
], AICredentialBindingEntityExtended);
|
|
180
|
-
export { AICredentialBindingEntityExtended };
|
|
181
|
-
/**
|
|
182
|
-
* Tree-shaking prevention function - must be called from index.ts
|
|
183
|
-
*/
|
|
184
|
-
export function LoadAICredentialBindingEntityExtended() {
|
|
185
|
-
// This function ensures the extended class is included in the bundle
|
|
186
|
-
// The @RegisterClass decorator handles the actual registration
|
|
187
|
-
}
|
|
188
|
-
//# sourceMappingURL=AICredentialBindingEntityExtended.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AICredentialBindingEntityExtended.js","sourceRoot":"","sources":["../src/AICredentialBindingEntityExtended.ts"],"names":[],"mappings":"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"}
|