@memberjunction/core 5.38.0 → 5.40.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/dist/generic/baseEngine.d.ts +27 -1
- package/dist/generic/baseEngine.d.ts.map +1 -1
- package/dist/generic/baseEngine.js +64 -4
- package/dist/generic/baseEngine.js.map +1 -1
- package/dist/generic/baseEngineRegistry.d.ts +90 -0
- package/dist/generic/baseEngineRegistry.d.ts.map +1 -1
- package/dist/generic/baseEngineRegistry.js +100 -0
- package/dist/generic/baseEngineRegistry.js.map +1 -1
- package/dist/generic/baseEntity.d.ts.map +1 -1
- package/dist/generic/baseEntity.js +15 -0
- package/dist/generic/baseEntity.js.map +1 -1
- package/dist/generic/databaseProviderBase.d.ts +6 -0
- package/dist/generic/databaseProviderBase.d.ts.map +1 -1
- package/dist/generic/databaseProviderBase.js +8 -0
- package/dist/generic/databaseProviderBase.js.map +1 -1
- package/dist/generic/entityInfo.d.ts +1 -1
- package/dist/generic/entityInfo.d.ts.map +1 -1
- package/dist/generic/entityInfo.js +7 -3
- package/dist/generic/entityInfo.js.map +1 -1
- package/dist/generic/interfaces.d.ts +123 -0
- package/dist/generic/interfaces.d.ts.map +1 -1
- package/dist/generic/interfaces.js.map +1 -1
- package/dist/generic/localCacheManager.d.ts +7 -1
- package/dist/generic/localCacheManager.d.ts.map +1 -1
- package/dist/generic/localCacheManager.js +18 -1
- package/dist/generic/localCacheManager.js.map +1 -1
- package/dist/generic/metadata.d.ts +44 -1
- package/dist/generic/metadata.d.ts.map +1 -1
- package/dist/generic/metadata.js +49 -0
- package/dist/generic/metadata.js.map +1 -1
- package/dist/generic/providerBase.d.ts +100 -1
- package/dist/generic/providerBase.d.ts.map +1 -1
- package/dist/generic/providerBase.js +280 -5
- package/dist/generic/providerBase.js.map +1 -1
- package/dist/generic/scoring/ReciprocalRankFusion.d.ts +11 -4
- package/dist/generic/scoring/ReciprocalRankFusion.d.ts.map +1 -1
- package/dist/generic/scoring/ReciprocalRankFusion.js +18 -6
- package/dist/generic/scoring/ReciprocalRankFusion.js.map +1 -1
- package/dist/generic/securityInfo.d.ts +35 -0
- package/dist/generic/securityInfo.d.ts.map +1 -1
- package/dist/generic/securityInfo.js +37 -0
- package/dist/generic/securityInfo.js.map +1 -1
- package/package.json +3 -3
- package/readme.md +117 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"securityInfo.d.ts","sourceRoot":"","sources":["../../src/generic/securityInfo.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"securityInfo.d.ts","sourceRoot":"","sources":["../../src/generic/securityInfo.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,6 +29,35 @@ export class UserInfo extends BaseInfo {
|
|
|
29
29
|
set TenantContext(value) {
|
|
30
30
|
this._TenantContext = value;
|
|
31
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Per-session resource scope for a magic-link share. Set at request time from the
|
|
34
|
+
* verified session token's claims (the link's ResourceType/ResourceID). Consumed by
|
|
35
|
+
* RLS filters via the `{{ScopeResourceID}}` / `{{ScopeResourceType}}` tokens in
|
|
36
|
+
* {@link RowLevelSecurityFilterInfo.MarkupFilterText}, so a resource-share link can
|
|
37
|
+
* be scoped to exactly one resource (and its FK-reachable dependents) without the
|
|
38
|
+
* granted role being broad. Same getter/setter (non-enumerable) rationale as
|
|
39
|
+
* TenantContext — it is not a database/GraphQL field.
|
|
40
|
+
*/
|
|
41
|
+
get MagicLinkScope() {
|
|
42
|
+
return this._MagicLinkScope;
|
|
43
|
+
}
|
|
44
|
+
set MagicLinkScope(value) {
|
|
45
|
+
this._MagicLinkScope = value;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* True when this request resolves to the shared Anonymous magic-link principal whose
|
|
49
|
+
* roles are synthesized in memory per-session (never persisted, so anonymous sessions
|
|
50
|
+
* can't accrete privileges across links). The server reads this to serve the synthesized
|
|
51
|
+
* {@link UserRoles} for the session's own user row instead of the DB query (which returns
|
|
52
|
+
* empty for the role-less shared principal by design). Same getter/setter (non-enumerable)
|
|
53
|
+
* rationale as TenantContext/MagicLinkScope — it is not a database/GraphQL field.
|
|
54
|
+
*/
|
|
55
|
+
get IsMagicLinkAnonymous() {
|
|
56
|
+
return this._IsMagicLinkAnonymous;
|
|
57
|
+
}
|
|
58
|
+
set IsMagicLinkAnonymous(value) {
|
|
59
|
+
this._IsMagicLinkAnonymous = value;
|
|
60
|
+
}
|
|
32
61
|
/**
|
|
33
62
|
* Gets the roles assigned to this user.
|
|
34
63
|
* @returns {UserRoleInfo[]} Array of user role assignments
|
|
@@ -127,6 +156,8 @@ export class UserInfo extends BaseInfo {
|
|
|
127
156
|
*/
|
|
128
157
|
this.EmployeeSupervisorEmail = null;
|
|
129
158
|
this._TenantContext = undefined;
|
|
159
|
+
this._MagicLinkScope = undefined;
|
|
160
|
+
this._IsMagicLinkAnonymous = false;
|
|
130
161
|
this._UserRoles = [];
|
|
131
162
|
this.copyInitData(initData);
|
|
132
163
|
if (initData) {
|
|
@@ -280,6 +311,12 @@ export class RowLevelSecurityFilterInfo extends BaseInfo {
|
|
|
280
311
|
ret = ret.replace(new RegExp(`{{User${key}}}`, 'g'), String(val));
|
|
281
312
|
}
|
|
282
313
|
}
|
|
314
|
+
// Per-session magic-link resource scope. Fail-closed: an absent scope resolves
|
|
315
|
+
// to '' so a resource-pinned predicate (e.g. ID = '{{ScopeResourceID}}') matches
|
|
316
|
+
// NO rows rather than leaking — a session without the scope sees nothing.
|
|
317
|
+
const scope = user.MagicLinkScope;
|
|
318
|
+
ret = ret.replace(/\{\{ScopeResourceID\}\}/g, scope?.ResourceID ?? '');
|
|
319
|
+
ret = ret.replace(/\{\{ScopeResourceType\}\}/g, scope?.ResourceType ?? '');
|
|
283
320
|
}
|
|
284
321
|
const unresolvedMatch = ret.match(/\{\{User\w+\}\}/);
|
|
285
322
|
if (unresolvedMatch) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"securityInfo.js","sourceRoot":"","sources":["../../src/generic/securityInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,kEAAkE;AAClE,mEAAmE;AACnE,iEAAiE;AACjE,6DAA6D;AAC7D,4DAA4D;AAC5D,sDAAsD;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,qBAAqB,EAAwB,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACzG,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"securityInfo.js","sourceRoot":"","sources":["../../src/generic/securityInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,kEAAkE;AAClE,mEAAmE;AACnE,iEAAiE;AACjE,6DAA6D;AAC7D,4DAA4D;AAC5D,sDAAsD;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,qBAAqB,EAAwB,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACzG,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AA6CpD;;;GAGG;AACH,MAAM,OAAO,QAAS,SAAQ,QAAQ;IAwGlC;;;;;;;;OAQG;IACH,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IACD,IAAW,aAAa,CAAC,KAAgC;QACrD,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;IAChC,CAAC;IAID;;;;;;;;OAQG;IACH,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IACD,IAAW,cAAc,CAAC,KAAiC;QACvD,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IACjC,CAAC;IAID;;;;;;;OAOG;IACH,IAAW,oBAAoB;QAC3B,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACtC,CAAC;IACD,IAAW,oBAAoB,CAAC,KAAc;QAC1C,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;IACvC,CAAC;IAGD;;;OAGG;IACH,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED;;;;;;OAMG;IACH,YAAa,KAAwB,IAAI,EAAE,WAAgB,IAAI;QAC3D,KAAK,EAAE,CAAC;QA3KZ;;WAEG;QACH,OAAE,GAAW,IAAI,CAAC;QAElB;;WAEG;QACH,SAAI,GAAW,IAAI,CAAA;QAEnB;;WAEG;QACH,cAAS,GAAW,IAAI,CAAA;QAExB;;WAEG;QACH,aAAQ,GAAW,IAAI,CAAA;QAEvB;;WAEG;QACH,UAAK,GAAW,IAAI,CAAA;QAEpB;;WAEG;QACH,UAAK,GAAW,IAAI,CAAA;QAEpB;;WAEG;QACH,SAAI,GAAW,IAAI,CAAA;QAEnB;;WAEG;QACH,aAAQ,GAAY,IAAI,CAAA;QAExB;;WAEG;QACH,qBAAgB,GAAkC,IAAI,CAAA;QAEtD;;WAEG;QACH,eAAU,GAAW,IAAI,CAAA;QAEzB;;WAEG;QACH,mBAAc,GAAW,IAAI,CAAA;QAE7B;;WAEG;QACH,yBAAoB,GAAW,IAAI,CAAA;QAEnC;;WAEG;QACH,mBAAc,GAAS,IAAI,CAAA;QAE3B;;WAEG;QACH,mBAAc,GAAS,IAAI,CAAA;QAE3B,iDAAiD;QACjD;;WAEG;QACH,cAAS,GAAW,IAAI,CAAA;QAExB;;WAEG;QACH,sBAAiB,GAAW,IAAI,CAAA;QAEhC;;WAEG;QACH,kBAAa,GAAW,IAAI,CAAA;QAE5B;;WAEG;QACH,kBAAa,GAAW,IAAI,CAAA;QAE5B;;WAEG;QACH,uBAAkB,GAAW,IAAI,CAAA;QAEjC;;WAEG;QACH,4BAAuB,GAAW,IAAI,CAAA;QAE9B,mBAAc,GAAmB,SAAS,CAAC;QAkB3C,oBAAe,GAAoB,SAAS,CAAC;QAkB7C,0BAAqB,GAAY,KAAK,CAAC;QAiBvC,eAAU,GAAmB,EAAE,CAAA;QAkBnC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC5B,IAAI,QAAQ,EAAC,CAAC;YACV,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,UAAU,CAAC;QAChE,CAAC;IACL,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,QAAQ;IAgCtC,YAAa,QAAa;QACtB,KAAK,EAAE,CAAC;QAhCZ;;WAEG;QACH,WAAM,GAAW,IAAI,CAAA;QAErB;;WAEG;QACH,WAAM,GAAW,IAAI,CAAA;QAErB;;WAEG;QACH,mBAAc,GAAS,IAAI,CAAA;QAE3B;;WAEG;QACH,mBAAc,GAAS,IAAI,CAAA;QAE3B,iDAAiD;QACjD;;WAEG;QACH,SAAI,GAAW,IAAI,CAAA;QAEnB;;WAEG;QACH,SAAI,GAAW,IAAI,CAAA;QAIf,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;CACJ;AAED;;;GAGG;AACH,MAAM,OAAO,QAAS,SAAQ,QAAQ;IAoClC,YAAa,QAAa;QACtB,KAAK,EAAE,CAAC;QApCZ;;WAEG;QACH,OAAE,GAAW,IAAI,CAAA;QAEjB;;WAEG;QACH,SAAI,GAAW,IAAI,CAAA;QAEnB;;WAEG;QACH,gBAAW,GAAW,IAAI,CAAA;QAE1B;;WAEG;QACH,gBAAW,GAAW,IAAI,CAAA;QAE1B;;WAEG;QACH,YAAO,GAAW,IAAI,CAAA;QAEtB;;WAEG;QACH,mBAAc,GAAS,IAAI,CAAA;QAE3B;;WAEG;QACH,mBAAc,GAAS,IAAI,CAAA;QAIvB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,OAAO,0BAA2B,SAAQ,QAAQ;IAoCpD,YAAa,QAAa;QACtB,KAAK,EAAE,CAAC;QApCZ;;WAEG;QACH,OAAE,GAAW,IAAI,CAAA;QAEjB;;WAEG;QACH,SAAI,GAAW,IAAI,CAAA;QAEnB;;WAEG;QACH,gBAAW,GAAW,IAAI,CAAA;QAE1B;;WAEG;QACH,eAAU,GAAW,IAAI,CAAA;QACzB;;;WAGG;QACH,qBAAgB,GAAkB,IAAI,CAAA;QAEtC;;WAEG;QACH,mBAAc,GAAS,IAAI,CAAA;QAE3B;;WAEG;QACH,mBAAc,GAAS,IAAI,CAAA;QAOnB,oBAAe,GAA4C,SAAS,CAAC;QAHzE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAGD;;OAEG;IACH,IAAY,cAAc;QACtB,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YACrC,IAAI,CAAC,eAAe,GAAG,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED;;;;;OAKG;IACI,qBAAqB,CAAC,QAA0B;QACnD,MAAM,OAAO,GAAG,sBAAsB,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;QACpF,OAAO,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC;IACtC,CAAC;IAED;;;;;OAKG;IACI,gBAAgB,CAAC,IAAc;QAClC,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAA;QACzB,IAAI,IAAI,EAAE,CAAC;YACP,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpB,MAAM,GAAG,GAAI,IAA2C,CAAC,GAAG,CAAC,CAAA;gBAC7D,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;oBAC1C,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,SAAS,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;gBACrE,CAAC;YACL,CAAC;YACD,+EAA+E;YAC/E,iFAAiF;YACjF,0EAA0E;YAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC;YAClC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,0BAA0B,EAAE,KAAK,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC;YACvE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,4BAA4B,EAAE,KAAK,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,eAAe,GAAG,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrD,IAAI,eAAe,EAAE,CAAC;YAClB,QAAQ,CAAC,gDAAgD,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QACvH,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,QAAQ;IA+C3C;;;;;;;OAOG;IACH,IAAW,KAAK;QACZ,OAAO,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,EAAE,MAAM,CAAE,+HAA+H;QACjL,AADkD,+HAA+H;QACjL,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC,CAChD,IAAI,EAAE,CAAC;IACZ,CAAC;IAED;;;;;;OAMG;IACH,YAAa,WAAgB,IAAI,EAAE,GAAuB;QACtD,KAAK,EAAE,CAAA;QApEX;;WAEG;QACH,OAAE,GAAW,IAAI,CAAA;QAEjB;;WAEG;QACH,aAAQ,GAAW,IAAI,CAAA;QAEvB;;WAEG;QACH,SAAI,GAAW,IAAI,CAAA;QAEnB;;WAEG;QACH,aAAQ,GAAY,IAAI,CAAA;QAExB;;WAEG;QACH,gBAAW,GAAY,IAAI,CAAA;QAE3B;;WAEG;QACH,gBAAW,GAAW,IAAI,CAAA;QAE1B;;WAEG;QACH,mBAAc,GAAS,IAAI,CAAA;QAE3B;;WAEG;QACH,mBAAc,GAAS,IAAI,CAAA;QA+BvB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;IAC/B,CAAC;IAED;;;;;;;;;OASG;IACI,cAAc,CAAC,IAAc;QAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QAC7D,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YACxF,KAAK,MAAM,EAAE,IAAI,iBAAiB,EAAE,CAAC;gBACjC,IAAI,EAAE,CAAC,iBAAiB,EAAE,KAAK,qBAAqB,CAAC,IAAI;oBAAE,OAAO,KAAK,CAAC,CAAC,qBAAqB;gBAC9F,IAAI,EAAE,CAAC,iBAAiB,EAAE,KAAK,qBAAqB,CAAC,KAAK;oBAAE,QAAQ,GAAG,IAAI,CAAC;YAChF,CAAC;QACL,CAAC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;;;;;;OAOG;IACI,cAAc,CAAC,IAAc;QAChC,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QACjC,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAChF,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACjD,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,KAAK,MAAM,EAAE,IAAI,iBAAiB,EAAE,CAAC;YACjC,IAAI,EAAE,CAAC,iBAAiB,EAAE,KAAK,qBAAqB,CAAC,IAAI;gBAAE,OAAO,KAAK,CAAC;YACxE,IAAI,EAAE,CAAC,iBAAiB,EAAE,KAAK,qBAAqB,CAAC,KAAK;gBAAE,QAAQ,GAAG,IAAI,CAAC;QAChF,CAAC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACjC,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;CACN,CAAC;AAKX;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,QAAQ;IA2C/C,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAA;IACzB,CAAC;IAEM,iBAAiB;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAA;IAChH,CAAC;IAED,QAAQ,CAAC,IAAc;QACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;IACzB,CAAC;IAED,YAAa,QAAa;QACtB,KAAK,EAAE,CAAC;QAvDZ;;WAEG;QACH,OAAE,GAAW,IAAI,CAAA;QAEjB;;WAEG;QACH,oBAAe,GAAW,IAAI,CAAA;QAE9B;;WAEG;QACH,WAAM,GAAW,IAAI,CAAA;QAErB;;WAEG;QACH,SAAI,GAAW,IAAI,CAAA;QAEnB;;WAEG;QACH,mBAAc,GAAS,IAAI,CAAA;QAE3B;;WAEG;QACH,mBAAc,GAAS,IAAI,CAAA;QAanB,cAAS,GAAa,IAAI,CAAA;QAe9B,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;CACJ;AAGD;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,QAAQ;IA0C1C,YAAa,QAAa;QACtB,KAAK,EAAE,CAAC;QA1CZ;;WAEG;QACH,OAAE,GAAW,IAAI,CAAA;QAEjB;;WAEG;QACH,aAAQ,GAAW,IAAI,CAAA;QAEvB;;WAEG;QACH,SAAI,GAAW,IAAI,CAAA;QAEnB;;WAEG;QACH,gBAAW,GAAW,IAAI,CAAA;QAE1B;;WAEG;QACH,sBAAiB,GAAW,IAAI,CAAA;QAEhC;;WAEG;QACH,mBAAc,GAAS,IAAI,CAAA;QAE3B;;WAEG;QACH,mBAAc,GAAS,IAAI,CAAA;QAUvB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;CACJ"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/core",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "5.
|
|
4
|
+
"version": "5.40.0",
|
|
5
5
|
"description": "MemberJunction: Core Library including Metadata, Application, Entity Retrieval and Manipulation, and Utilities",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
"vitest": "^3.1.1"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@memberjunction/global": "5.
|
|
30
|
-
"@memberjunction/sql-dialect": "5.
|
|
29
|
+
"@memberjunction/global": "5.40.0",
|
|
30
|
+
"@memberjunction/sql-dialect": "5.40.0",
|
|
31
31
|
"rxjs": "^7.8.2",
|
|
32
32
|
"zod": "~3.24.4",
|
|
33
33
|
"debug": "^4.4.3"
|
package/readme.md
CHANGED
|
@@ -858,6 +858,56 @@ Key features:
|
|
|
858
858
|
|
|
859
859
|
---
|
|
860
860
|
|
|
861
|
+
### BaseEngineRegistry — cross-engine cache reverse lookup
|
|
862
|
+
|
|
863
|
+
Every `BaseEngine` registers itself with the process-wide `BaseEngineRegistry` on
|
|
864
|
+
load, so the registry always knows **which loaded engines cache which entities**.
|
|
865
|
+
You can use that to ask, from anywhere, *"is this entity already fully in memory?
|
|
866
|
+
if so, hand me the array — and don't go to the database."*
|
|
867
|
+
|
|
868
|
+
This is the introspection behind the Admin → System Diagnostics "loaded engines"
|
|
869
|
+
view, plus two reverse-lookup helpers:
|
|
870
|
+
|
|
871
|
+
```typescript
|
|
872
|
+
import { BaseEngineRegistry, UserInfo } from '@memberjunction/core';
|
|
873
|
+
|
|
874
|
+
// All loaded engines that cache 'Users', unfiltered (full-set) caches first.
|
|
875
|
+
// Each match carries the engine, its config, and a LIVE pointer to the array.
|
|
876
|
+
const matches = BaseEngineRegistry.Instance.FindCachedEntity<UserInfo>('Users');
|
|
877
|
+
// matches[0] => { engineClassName, engine, config, records: UserInfo[], unfiltered }
|
|
878
|
+
|
|
879
|
+
// Or the one-liner: the best (unfiltered-preferred) cached array, or null.
|
|
880
|
+
const users = BaseEngineRegistry.Instance.TryGetCachedRecords<UserInfo>('Users', { unfilteredOnly: true });
|
|
881
|
+
if (users) {
|
|
882
|
+
// Small/static entity already in memory — filter/sort locally, zero DB calls.
|
|
883
|
+
const hits = users.filter(u => u.Name.toLowerCase().includes(q));
|
|
884
|
+
} else {
|
|
885
|
+
// Not cached as a full set → fall back to a normal RunView against the DB.
|
|
886
|
+
}
|
|
887
|
+
```
|
|
888
|
+
|
|
889
|
+
`FindCachedEntity(entityName, { unfilteredOnly? })`:
|
|
890
|
+
- Considers **only loaded** engines (a registered-but-unloaded engine has no data).
|
|
891
|
+
- Matches an engine config when `Type === 'entity'` and `EntityName` matches (case-insensitive, trimmed).
|
|
892
|
+
- Orders **unfiltered caches first** — a config with no `Filter` holds the *complete*
|
|
893
|
+
entity set and is authoritative (safe for "show all" / in-memory search); filtered
|
|
894
|
+
caches (a subset) come after. `unfilteredOnly: true` omits the filtered ones.
|
|
895
|
+
- Returns the engine's **live array** (not a copy) — read it, don't mutate it. When the
|
|
896
|
+
config's `ResultType` is `'simple'`, rows are plain objects, not `BaseEntity` instances.
|
|
897
|
+
- Returns **all** matches when several engines cache the same entity, so the caller can
|
|
898
|
+
pick (by `engineClassName`, by inspecting `config`, etc.).
|
|
899
|
+
|
|
900
|
+
`TryGetCachedRecords(entityName, { unfilteredOnly? })` is the convenience wrapper —
|
|
901
|
+
the best match's array, or `null`.
|
|
902
|
+
|
|
903
|
+
**Why it's useful:** UI and service code that needs to look up records for a
|
|
904
|
+
small/static entity (FK pickers, dropdowns, validation) can serve the lookup from
|
|
905
|
+
an already-loaded engine cache in a single line — no extra DB round-trip, no
|
|
906
|
+
per-keystroke query — and transparently fall back to `RunView` when the entity
|
|
907
|
+
isn't cached as a full set.
|
|
908
|
+
|
|
909
|
+
---
|
|
910
|
+
|
|
861
911
|
### RegisterForStartup
|
|
862
912
|
|
|
863
913
|
The `@RegisterForStartup` decorator registers singleton engine classes (or any class implementing `IStartupSink`) with the `StartupManager` to automatically run configuration/setup during application boot.
|
|
@@ -1216,6 +1266,73 @@ Features:
|
|
|
1216
1266
|
|
|
1217
1267
|
---
|
|
1218
1268
|
|
|
1269
|
+
## Ranked Entity Record Search (`SearchEntity` / `SearchEntities`)
|
|
1270
|
+
|
|
1271
|
+
A two-tier ranked-search API for finding the most relevant **records** of an entity for a free-text request. Distinct from the other lookups MJ already exposes — see the comparison below.
|
|
1272
|
+
|
|
1273
|
+
```typescript
|
|
1274
|
+
import { Metadata, EntitySearchResult } from '@memberjunction/core';
|
|
1275
|
+
|
|
1276
|
+
const md = new Metadata();
|
|
1277
|
+
|
|
1278
|
+
// Singular form — search one entity, return ranked record list
|
|
1279
|
+
const results: EntitySearchResult[] = await md.SearchEntity({
|
|
1280
|
+
entityName: 'MJ: Entities',
|
|
1281
|
+
searchText: userRequestText,
|
|
1282
|
+
options: { mode: 'hybrid', topK: 10, weights: { lexical: 1.0, semantic: 1.5 }, contextUser }
|
|
1283
|
+
});
|
|
1284
|
+
|
|
1285
|
+
// Plural form — search many entities in ONE round-trip
|
|
1286
|
+
// Returns an array of arrays, aligned by input order
|
|
1287
|
+
const groups = await md.SearchEntities([
|
|
1288
|
+
{ entityName: 'Invoices', searchText: 'overdue payments', options: { topK: 5, contextUser } },
|
|
1289
|
+
{ entityName: 'Customers', searchText: 'overdue payments', options: { topK: 5, contextUser } },
|
|
1290
|
+
{ entityName: 'Notes', searchText: 'overdue payments', options: { topK: 5, contextUser } },
|
|
1291
|
+
]);
|
|
1292
|
+
// groups[0] = top Invoices, groups[1] = top Customers, groups[2] = top Notes
|
|
1293
|
+
```
|
|
1294
|
+
|
|
1295
|
+
**Modes:**
|
|
1296
|
+
- `lexical` — substring / prefix matching on the entity's name field and any `IncludeInUserSearchAPI` fields.
|
|
1297
|
+
- `semantic` — vector cosine against precomputed embeddings in `MJ: Entity Record Documents.VectorJSON`.
|
|
1298
|
+
- `hybrid` (default) — weighted RRF blend of the two, tunable via `options.weights` and `options.rrfK`.
|
|
1299
|
+
|
|
1300
|
+
**Configuration:** semantic and hybrid modes require an Active `EntityDocument` of type `Search` registered for the target entity. The MJ install seeds one for `MJ: Entities` so the entity catalog is searchable out of the box; users enable it for other entities via metadata (see `/metadata/entity-documents/`).
|
|
1301
|
+
|
|
1302
|
+
**Provider implementation:** declared on `IMetadataProvider`, implemented polymorphically by each concrete provider. `GenericDatabaseProvider` runs the ranking in-process (embedding the query via `AIEngine.EmbedTextLocal` and querying `SimpleVectorServiceProvider` directly); `GraphQLDataProvider` proxies the whole batch to the server in one round-trip via the `SearchEntities` resolver. No registration or wiring required at startup.
|
|
1303
|
+
|
|
1304
|
+
### How this differs from MJ's other search/lookup APIs
|
|
1305
|
+
|
|
1306
|
+
| API | Purpose | Returns |
|
|
1307
|
+
|---|---|---|
|
|
1308
|
+
| `EntityByName(name)` / `EntityByID(id)` | Look up an entity **definition** (`EntityInfo`). Deterministic, not ranked. | One `EntityInfo` |
|
|
1309
|
+
| `FullTextSearch(params)` | Multi-entity server-side text search using each entity's `UserSearchString` rule (LIKE / FTS). Lexical only. | Groups of `FullTextSearchResultItem` |
|
|
1310
|
+
| **`SearchEntity(params)`** | "Find the N most relevant **records** of *this* entity for this query." Hybrid lexical + semantic. | `EntitySearchResult[]` |
|
|
1311
|
+
| **`SearchEntities(params[])`** | Batch — same ranking applied to multiple entities in one call. | `EntitySearchResult[][]` aligned by input |
|
|
1312
|
+
| `SearchEngine.Search()` ([`@memberjunction/search-engine`](../SearchEngine/README.md)) | **Cross-source** unified search across vectors, full-text, entities, and storage. Scoped via `SearchScope` metadata, optional reranker. | Aggregated `SearchResult` |
|
|
1313
|
+
|
|
1314
|
+
**Picking the right one** is straightforward: if you know the entity and want ranked records, use `SearchEntity`. If you know the candidate entities, use `SearchEntities` (plural). If you don't know which entity / want cross-source results, use `SearchEngine.Search`. For exact-name metadata lookup, use `EntityByName`.
|
|
1315
|
+
|
|
1316
|
+
---
|
|
1317
|
+
|
|
1318
|
+
## Weighted Reciprocal Rank Fusion (`ComputeRRF`)
|
|
1319
|
+
|
|
1320
|
+
`ComputeRRF` is the canonical RRF implementation used wherever MJ blends ranked result lists (`SearchEntity` / `SearchEntities` hybrid mode, `SearchEngine` cross-scope fusion, dupe detection). It accepts an optional per-list `weights` array:
|
|
1321
|
+
|
|
1322
|
+
```typescript
|
|
1323
|
+
import { ComputeRRF, ScoredCandidate } from '@memberjunction/core';
|
|
1324
|
+
|
|
1325
|
+
const fused = ComputeRRF(
|
|
1326
|
+
[lexicalResults, semanticResults],
|
|
1327
|
+
/* k */ 60,
|
|
1328
|
+
/* weights */ [1.0, 1.5] // semantic contributes 1.5× per rank position
|
|
1329
|
+
);
|
|
1330
|
+
```
|
|
1331
|
+
|
|
1332
|
+
Formula: `FusedScore(d) = Σ_i w_i / (k + rank_i(d))`. Omitting `weights` is equivalent to all-ones — canonical unweighted RRF.
|
|
1333
|
+
|
|
1334
|
+
---
|
|
1335
|
+
|
|
1219
1336
|
## Utility Functions
|
|
1220
1337
|
|
|
1221
1338
|
```typescript
|