@memberjunction/search-engine 5.49.0 → 5.50.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/EntitySearchProvider.d.ts +17 -3
- package/dist/generic/EntitySearchProvider.d.ts.map +1 -1
- package/dist/generic/EntitySearchProvider.js +23 -6
- package/dist/generic/EntitySearchProvider.js.map +1 -1
- package/dist/generic/ExternalHitMapper.d.ts +48 -0
- package/dist/generic/ExternalHitMapper.d.ts.map +1 -0
- package/dist/generic/ExternalHitMapper.js +88 -0
- package/dist/generic/ExternalHitMapper.js.map +1 -0
- package/dist/generic/FullTextSearchProvider.d.ts +9 -1
- package/dist/generic/FullTextSearchProvider.d.ts.map +1 -1
- package/dist/generic/FullTextSearchProvider.js +11 -3
- package/dist/generic/FullTextSearchProvider.js.map +1 -1
- package/dist/generic/ScopeDimensionResolver.d.ts +146 -0
- package/dist/generic/ScopeDimensionResolver.d.ts.map +1 -0
- package/dist/generic/ScopeDimensionResolver.js +464 -0
- package/dist/generic/ScopeDimensionResolver.js.map +1 -0
- package/dist/generic/ScopeExplanation.d.ts +141 -0
- package/dist/generic/ScopeExplanation.d.ts.map +1 -0
- package/dist/generic/ScopeExplanation.js +72 -0
- package/dist/generic/ScopeExplanation.js.map +1 -0
- package/dist/generic/ScopeFilterGuard.d.ts +127 -0
- package/dist/generic/ScopeFilterGuard.d.ts.map +1 -0
- package/dist/generic/ScopeFilterGuard.js +290 -0
- package/dist/generic/ScopeFilterGuard.js.map +1 -0
- package/dist/generic/ScopeTemplateRenderer.d.ts +12 -2
- package/dist/generic/ScopeTemplateRenderer.d.ts.map +1 -1
- package/dist/generic/ScopeTemplateRenderer.js +25 -5
- package/dist/generic/ScopeTemplateRenderer.js.map +1 -1
- package/dist/generic/ScopeValueEscaper.d.ts +112 -0
- package/dist/generic/ScopeValueEscaper.d.ts.map +1 -0
- package/dist/generic/ScopeValueEscaper.js +152 -0
- package/dist/generic/ScopeValueEscaper.js.map +1 -0
- package/dist/generic/SearchEngine.d.ts +188 -8
- package/dist/generic/SearchEngine.d.ts.map +1 -1
- package/dist/generic/SearchEngine.js +600 -35
- package/dist/generic/SearchEngine.js.map +1 -1
- package/dist/generic/VectorSearchProvider.d.ts +2 -1
- package/dist/generic/VectorSearchProvider.d.ts.map +1 -1
- package/dist/generic/VectorSearchProvider.js +23 -26
- package/dist/generic/VectorSearchProvider.js.map +1 -1
- package/dist/generic/search.types.d.ts +160 -0
- package/dist/generic/search.types.d.ts.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/permissions/SearchScopePermissionResolver.d.ts +37 -2
- package/dist/permissions/SearchScopePermissionResolver.d.ts.map +1 -1
- package/dist/permissions/SearchScopePermissionResolver.js +74 -2
- package/dist/permissions/SearchScopePermissionResolver.js.map +1 -1
- package/dist/providers/AzureAISearchProvider.d.ts.map +1 -1
- package/dist/providers/AzureAISearchProvider.js +24 -6
- package/dist/providers/AzureAISearchProvider.js.map +1 -1
- package/dist/providers/ElasticsearchSearchProvider.d.ts.map +1 -1
- package/dist/providers/ElasticsearchSearchProvider.js +17 -5
- package/dist/providers/ElasticsearchSearchProvider.js.map +1 -1
- package/dist/providers/OpenSearchSearchProvider.d.ts.map +1 -1
- package/dist/providers/OpenSearchSearchProvider.js +16 -5
- package/dist/providers/OpenSearchSearchProvider.js.map +1 -1
- package/dist/providers/TypesenseSearchProvider.d.ts.map +1 -1
- package/dist/providers/TypesenseSearchProvider.js +17 -6
- package/dist/providers/TypesenseSearchProvider.js.map +1 -1
- package/package.json +8 -8
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,6CAA6C,CAAC;AAE5D,mFAAmF;AACnF,2FAA2F;AAC3F,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAEhD,kFAAkF;AAClF,kFAAkF;AAClF,sEAAsE;AACtE,cAAc,yCAAyC,CAAC;AACxD,cAAc,qCAAqC,CAAC;AACpD,cAAc,mCAAmC,CAAC;AAClD,cAAc,sCAAsC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6CAA6C,CAAC;AAE5D,mFAAmF;AACnF,2FAA2F;AAC3F,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAEhD,kFAAkF;AAClF,kFAAkF;AAClF,sEAAsE;AACtE,cAAc,yCAAyC,CAAC;AACxD,cAAc,qCAAqC,CAAC;AACpD,cAAc,mCAAmC,CAAC;AAClD,cAAc,sCAAsC,CAAC;AACrD,cAAc,6BAA6B,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { UserInfo } from '@memberjunction/core';
|
|
2
|
-
import type { MJSearchScopePermissionEntity, MJAIAgentEntity } from '@memberjunction/core-entities';
|
|
2
|
+
import type { MJSearchScopePermissionEntity, MJAIAgentEntity, MJAISkillEntity } from '@memberjunction/core-entities';
|
|
3
3
|
/**
|
|
4
4
|
* Permission level granted on a SearchScope. None is an explicit deny that
|
|
5
5
|
* overrides role grants for that scope/principal pair. The resolver collapses
|
|
@@ -10,7 +10,7 @@ export type SearchScopePermissionLevel = 'None' | 'Read' | 'Search' | 'Manage';
|
|
|
10
10
|
* Where the resolver picked up the effective permission. Used for audit
|
|
11
11
|
* logging and explanatory error messages.
|
|
12
12
|
*/
|
|
13
|
-
export type SearchScopePermissionSource = 'DirectGrant' | 'RoleGrant' | 'AgentUnscopedAll' | 'AgentNone' | 'AgentAssignedNotListed' | 'NoGrant';
|
|
13
|
+
export type SearchScopePermissionSource = 'DirectGrant' | 'RoleGrant' | 'AgentUnscopedAll' | 'AgentNone' | 'AgentAssignedNotListed' | 'SkillUnscopedAll' | 'SkillNone' | 'SkillAssignedNotListed' | 'NoGrant';
|
|
14
14
|
export interface EffectivePermission {
|
|
15
15
|
/** True when the principal can at least read the scope's metadata. */
|
|
16
16
|
readonly Allowed: boolean;
|
|
@@ -51,6 +51,19 @@ export interface ResolvePermissionInput {
|
|
|
51
51
|
* fallback paths.
|
|
52
52
|
*/
|
|
53
53
|
Agent: MJAIAgentEntity | null;
|
|
54
|
+
/**
|
|
55
|
+
* The skill on whose behalf the search runs, or null. A skill is a PRINCIPAL in exactly the
|
|
56
|
+
* same sense an agent is: `AISkill.SearchScopeAccess` plus `MJ: AI Skill Search Scopes` rows
|
|
57
|
+
* let activating a skill reach a scope the user's own roles do not grant. Optional so every
|
|
58
|
+
* existing caller compiles and behaves unchanged.
|
|
59
|
+
*/
|
|
60
|
+
Skill?: MJAISkillEntity | null;
|
|
61
|
+
/**
|
|
62
|
+
* Tenant this search is running for (`SearchContext.PrimaryScopeRecordID`). When supplied, a
|
|
63
|
+
* grant that carries its own `PrimaryScopeRecordID` applies only to that tenant. Grants with a
|
|
64
|
+
* NULL tenant continue to apply everywhere, so existing rows are unaffected.
|
|
65
|
+
*/
|
|
66
|
+
PrimaryScopeRecordID?: string | null;
|
|
54
67
|
/**
|
|
55
68
|
* Optional ContextUser for RunView calls. Server-side code must always
|
|
56
69
|
* pass this to enforce data isolation; it is the same UserInfo as `User`
|
|
@@ -89,6 +102,28 @@ export declare class SearchScopePermissionResolver {
|
|
|
89
102
|
* UUIDsEqual to remain case-insensitive across SQL Server / PostgreSQL.
|
|
90
103
|
*/
|
|
91
104
|
ResolveEffectivePermission(input: ResolvePermissionInput): Promise<EffectivePermission>;
|
|
105
|
+
/**
|
|
106
|
+
* Keep only grants that are in force at this moment and apply to this tenant.
|
|
107
|
+
*
|
|
108
|
+
* Both dimensions are additive: a row that leaves `StartAt`/`EndAt`/`PrimaryScopeRecordID`
|
|
109
|
+
* NULL is always in force and applies to every tenant, which is exactly how every row
|
|
110
|
+
* behaved before those columns existed.
|
|
111
|
+
*/
|
|
112
|
+
protected applicableGrants(rows: MJSearchScopePermissionEntity[], primaryScopeRecordID: string | null, now?: Date): MJSearchScopePermissionEntity[];
|
|
113
|
+
/** A grant with no window is always in force; otherwise `now` must fall inside it. */
|
|
114
|
+
protected isGrantInWindow(row: MJSearchScopePermissionEntity, now: Date): boolean;
|
|
115
|
+
/**
|
|
116
|
+
* A grant with a NULL tenant applies everywhere. A tenant-scoped grant applies ONLY to that
|
|
117
|
+
* tenant — and, notably, does not apply when the search supplies no tenant at all, because
|
|
118
|
+
* "this grant is for org A" cannot be honoured by an untenanted search.
|
|
119
|
+
*/
|
|
120
|
+
protected isGrantForTenant(row: MJSearchScopePermissionEntity, primaryScopeRecordID: string | null): boolean;
|
|
121
|
+
/**
|
|
122
|
+
* Whether the scope is in the skill's assigned-scope list via `__mj.AISkillSearchScope`.
|
|
123
|
+
* Mirrors `isScopeAssignedToAgent`, including honouring Status and the optional time window
|
|
124
|
+
* (which the agent table also has). Fails closed on an unreadable table.
|
|
125
|
+
*/
|
|
126
|
+
protected isScopeAssignedToSkill(skillID: string, searchScopeID: string, contextUser: UserInfo): Promise<boolean>;
|
|
92
127
|
/**
|
|
93
128
|
* Checks whether the given scope is in the agent's assigned-scope list
|
|
94
129
|
* via __mj.AIAgentSearchScope. Used to enforce the SearchScopeAccess='Assigned'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchScopePermissionResolver.d.ts","sourceRoot":"","sources":["../../src/permissions/SearchScopePermissionResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEnE,OAAO,KAAK,EAAE,6BAA6B,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"SearchScopePermissionResolver.d.ts","sourceRoot":"","sources":["../../src/permissions/SearchScopePermissionResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEnE,OAAO,KAAK,EAAE,6BAA6B,EAAE,eAAe,EAAE,eAAe,EAA8B,MAAM,+BAA+B,CAAC;AAEjJ;;;;GAIG;AACH,MAAM,MAAM,0BAA0B,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE/E;;;GAGG;AACH,MAAM,MAAM,2BAA2B,GACjC,aAAa,GACb,WAAW,GACX,kBAAkB,GAClB,WAAW,GACX,wBAAwB,GACxB,kBAAkB,GAClB,WAAW,GACX,wBAAwB,GACxB,SAAS,CAAC;AAEhB,MAAM,WAAW,mBAAmB;IAChC,sEAAsE;IACtE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,EAAE,0BAA0B,CAAC;IAC3C,oCAAoC;IACpC,QAAQ,CAAC,MAAM,EAAE,2BAA2B,CAAC;IAC7C,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;;;;;OAQG;IACH,cAAc,IAAI,MAAM,CAAC;CAC5B;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACnC;;;;OAIG;IACH,IAAI,EAAE,QAAQ,CAAC;IACf,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9B;;;;;OAKG;IACH,KAAK,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC;;;;OAIG;IACH,WAAW,CAAC,EAAE,QAAQ,CAAC;CAC1B;AAmBD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,6BAA6B;IACtC;;;OAGG;IACU,0BAA0B,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA6FpG;;;;;;OAMG;IACH,SAAS,CAAC,gBAAgB,CACtB,IAAI,EAAE,6BAA6B,EAAE,EACrC,oBAAoB,EAAE,MAAM,GAAG,IAAI,EACnC,GAAG,GAAE,IAAiB,GACvB,6BAA6B,EAAE;IAIlC,sFAAsF;IACtF,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,6BAA6B,EAAE,GAAG,EAAE,IAAI,GAAG,OAAO;IAMjF;;;;OAIG;IACH,SAAS,CAAC,gBAAgB,CAAC,GAAG,EAAE,6BAA6B,EAAE,oBAAoB,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO;IAM5G;;;;OAIG;cACa,sBAAsB,CAClC,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,QAAQ,GACtB,OAAO,CAAC,OAAO,CAAC;IAmBnB;;;;;OAKG;cACa,sBAAsB,CAClC,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,QAAQ,GACtB,OAAO,CAAC,OAAO,CAAC;IAmBnB;;;;OAIG;cACa,uBAAuB,CACnC,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,QAAQ,GACtB,OAAO,CAAC,6BAA6B,EAAE,CAAC;IAqB3C,8EAA8E;IAC9E,OAAO,CAAC,WAAW;CActB;AAID,eAAO,MAAM,oCAAoC,+BAAsC,CAAC"}
|
|
@@ -47,6 +47,7 @@ export class SearchScopePermissionResolver {
|
|
|
47
47
|
*/
|
|
48
48
|
async ResolveEffectivePermission(input) {
|
|
49
49
|
const { User, SearchScopeID, Agent } = input;
|
|
50
|
+
const Skill = input.Skill ?? null;
|
|
50
51
|
const contextUser = input.ContextUser ?? User;
|
|
51
52
|
// Step 1: agent-side explicit deny short-circuits everything.
|
|
52
53
|
if (Agent && Agent.SearchScopeAccess === 'None') {
|
|
@@ -64,10 +65,26 @@ export class SearchScopePermissionResolver {
|
|
|
64
65
|
// Falls through to user/role checks; Assigned restricts but does
|
|
65
66
|
// not grant — the user must still have a per-scope grant.
|
|
66
67
|
}
|
|
68
|
+
// Step 1c/1d: the SAME two rules for a SKILL principal. Deliberately identical in shape
|
|
69
|
+
// to the agent rules above so the two principals stay interchangeable — a reader who
|
|
70
|
+
// understands the agent path already understands this one.
|
|
71
|
+
if (Skill && Skill.SearchScopeAccess === 'None') {
|
|
72
|
+
return this.buildResult(false, 'None', 'SkillNone', `Skill '${Skill.Name}' has SearchScopeAccess='None'; refused without consulting per-scope grants.`);
|
|
73
|
+
}
|
|
74
|
+
if (Skill && Skill.SearchScopeAccess === 'Assigned') {
|
|
75
|
+
const isListed = await this.isScopeAssignedToSkill(Skill.ID, SearchScopeID, contextUser);
|
|
76
|
+
if (!isListed) {
|
|
77
|
+
return this.buildResult(false, 'None', 'SkillAssignedNotListed', `Skill '${Skill.Name}' has SearchScopeAccess='Assigned' and this scope is not in its assigned scope list; refused with ACCESS_DENIED.`);
|
|
78
|
+
}
|
|
79
|
+
// Restricts but does not grant — the user still needs a per-scope grant below.
|
|
80
|
+
}
|
|
67
81
|
// Load all SearchScopePermission rows for this scope. We pull the
|
|
68
82
|
// whole set (typically small per scope) and filter in JS so we can
|
|
69
83
|
// apply the user-direct-None short-circuit deterministically.
|
|
70
|
-
const
|
|
84
|
+
const allRows = await this.loadPermissionsForScope(SearchScopeID, contextUser);
|
|
85
|
+
// Narrow to grants that are in force RIGHT NOW and apply to THIS tenant. Both filters
|
|
86
|
+
// are no-ops for a row that leaves the new columns NULL, which is every pre-existing row.
|
|
87
|
+
const rows = this.applicableGrants(allRows, input.PrimaryScopeRecordID ?? null);
|
|
71
88
|
// Step 2: direct grant for this user (highest priority).
|
|
72
89
|
const userGrants = rows.filter(r => r.UserID && UUIDsEqual(r.UserID, User.ID));
|
|
73
90
|
if (userGrants.length > 0) {
|
|
@@ -92,8 +109,63 @@ export class SearchScopePermissionResolver {
|
|
|
92
109
|
if (Agent && Agent.SearchScopeAccess === 'All') {
|
|
93
110
|
return this.buildResult(true, 'Search', 'AgentUnscopedAll', `Agent '${Agent.Name}' has SearchScopeAccess='All'; granting 'Search' as a fallback for this scope.`);
|
|
94
111
|
}
|
|
112
|
+
// Step 4b: skill fallback, mirroring the agent's 'All'.
|
|
113
|
+
if (Skill && Skill.SearchScopeAccess === 'All') {
|
|
114
|
+
return this.buildResult(true, 'Search', 'SkillUnscopedAll', `Skill '${Skill.Name}' has SearchScopeAccess='All'; granting 'Search' as a fallback for this scope.`);
|
|
115
|
+
}
|
|
95
116
|
// Step 5: no grant.
|
|
96
|
-
return this.buildResult(false, 'None', 'NoGrant', `User '${User.Name}' has no direct grant, no qualifying role grant, and no agent-side fallback for this scope.`);
|
|
117
|
+
return this.buildResult(false, 'None', 'NoGrant', `User '${User.Name}' has no direct grant, no qualifying role grant, and no agent- or skill-side fallback for this scope.`);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Keep only grants that are in force at this moment and apply to this tenant.
|
|
121
|
+
*
|
|
122
|
+
* Both dimensions are additive: a row that leaves `StartAt`/`EndAt`/`PrimaryScopeRecordID`
|
|
123
|
+
* NULL is always in force and applies to every tenant, which is exactly how every row
|
|
124
|
+
* behaved before those columns existed.
|
|
125
|
+
*/
|
|
126
|
+
applicableGrants(rows, primaryScopeRecordID, now = new Date()) {
|
|
127
|
+
return rows.filter((r) => this.isGrantInWindow(r, now) && this.isGrantForTenant(r, primaryScopeRecordID));
|
|
128
|
+
}
|
|
129
|
+
/** A grant with no window is always in force; otherwise `now` must fall inside it. */
|
|
130
|
+
isGrantInWindow(row, now) {
|
|
131
|
+
if (row.StartAt && new Date(row.StartAt) > now)
|
|
132
|
+
return false;
|
|
133
|
+
if (row.EndAt && new Date(row.EndAt) < now)
|
|
134
|
+
return false;
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* A grant with a NULL tenant applies everywhere. A tenant-scoped grant applies ONLY to that
|
|
139
|
+
* tenant — and, notably, does not apply when the search supplies no tenant at all, because
|
|
140
|
+
* "this grant is for org A" cannot be honoured by an untenanted search.
|
|
141
|
+
*/
|
|
142
|
+
isGrantForTenant(row, primaryScopeRecordID) {
|
|
143
|
+
if (!row.PrimaryScopeRecordID)
|
|
144
|
+
return true;
|
|
145
|
+
if (!primaryScopeRecordID)
|
|
146
|
+
return false;
|
|
147
|
+
return UUIDsEqual(row.PrimaryScopeRecordID, primaryScopeRecordID);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Whether the scope is in the skill's assigned-scope list via `__mj.AISkillSearchScope`.
|
|
151
|
+
* Mirrors `isScopeAssignedToAgent`, including honouring Status and the optional time window
|
|
152
|
+
* (which the agent table also has). Fails closed on an unreadable table.
|
|
153
|
+
*/
|
|
154
|
+
async isScopeAssignedToSkill(skillID, searchScopeID, contextUser) {
|
|
155
|
+
const rv = new RunView();
|
|
156
|
+
const result = await rv.RunView({
|
|
157
|
+
EntityName: 'MJ: AI Skill Search Scopes',
|
|
158
|
+
ExtraFilter: `SkillID='${skillID}' AND SearchScopeID='${searchScopeID}' AND Status='Active'`,
|
|
159
|
+
ResultType: 'simple',
|
|
160
|
+
// Same reasoning as loadPermissionsForScope: a permission decision must never read
|
|
161
|
+
// a stale cache.
|
|
162
|
+
BypassCache: true,
|
|
163
|
+
}, contextUser);
|
|
164
|
+
if (!result.Success) {
|
|
165
|
+
throw new Error(`SearchScopePermissionResolver: failed to check skill scope assignment for skill ${skillID}: ${result.ErrorMessage}`);
|
|
166
|
+
}
|
|
167
|
+
const now = new Date();
|
|
168
|
+
return (result.Results ?? []).some((r) => (!r.StartAt || new Date(r.StartAt) <= now) && (!r.EndAt || new Date(r.EndAt) >= now));
|
|
97
169
|
}
|
|
98
170
|
/**
|
|
99
171
|
* Checks whether the given scope is in the agent's assigned-scope list
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchScopePermissionResolver.js","sourceRoot":"","sources":["../../src/permissions/SearchScopePermissionResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,OAAO,EAAY,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"SearchScopePermissionResolver.js","sourceRoot":"","sources":["../../src/permissions/SearchScopePermissionResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AzureAISearchProvider.d.ts","sourceRoot":"","sources":["../../src/providers/AzureAISearchProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAY,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"AzureAISearchProvider.d.ts","sourceRoot":"","sources":["../../src/providers/AzureAISearchProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAY,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEtF,OAAO,EACH,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EACnB,MAAM,yBAAyB,CAAC;AAqBjC,qBACa,qBAAsB,SAAQ,kBAAkB;IACzD,SAAgB,UAAU,EAAE,YAAY,CAAc;IAEtD,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,SAAS,CAAS;IAEJ,UAAU,CAAC,MAAM,EAAE,oBAAoB,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAS9E,iBAAiB,CAAC,YAAY,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB9D,WAAW,IAAI,OAAO;IAIzB,MAAM,CACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,aAAa,GAAG,SAAS,EACnC,YAAY,EAAE,QAAQ,EACtB,gBAAgB,CAAC,EAAE,gBAAgB,GACpC,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAwG9B,wEAAwE;IACxE,OAAO,CAAC,eAAe;CAS1B;AAED,oCAAoC;AACpC,wBAAgB,yBAAyB,IAAI,IAAI,CAGhD"}
|
|
@@ -27,6 +27,8 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
27
27
|
import { LogError } from '@memberjunction/core';
|
|
28
28
|
import { RegisterClass } from '@memberjunction/global';
|
|
29
29
|
import { BaseSearchProvider } from '../generic/ISearchProvider.js';
|
|
30
|
+
import { CheckScopeStringFilter } from '../generic/ScopeFilterGuard.js';
|
|
31
|
+
import { ExtractChunkProvenance, HasChunkProvenance, ResolveHitID, ResolveHitSnippet, ResolveHitTitle } from '../generic/ExternalHitMapper.js';
|
|
30
32
|
let AzureAISearchProvider = class AzureAISearchProvider extends BaseSearchProvider {
|
|
31
33
|
constructor() {
|
|
32
34
|
super(...arguments);
|
|
@@ -103,8 +105,18 @@ let AzureAISearchProvider = class AzureAISearchProvider extends BaseSearchProvid
|
|
|
103
105
|
if (this.parsedConfig?.defaultSearchFields) {
|
|
104
106
|
body.searchFields = this.parsedConfig.defaultSearchFields;
|
|
105
107
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
+
// Permission / tenant push-down for this lane lives ENTIRELY in the scope's
|
|
109
|
+
// MetadataFilter (see the file header), so if one was authored but cannot be
|
|
110
|
+
// applied we must NOT query — an unfiltered Azure request would read the whole
|
|
111
|
+
// index. Fail this index closed instead.
|
|
112
|
+
const filterCheck = CheckScopeStringFilter(idx.MetadataFilter);
|
|
113
|
+
if (filterCheck.Status === 'unusable') {
|
|
114
|
+
LogError(`AzureAISearchProvider: skipping index "${idx.ExternalIndexName}" — its scope MetadataFilter cannot be applied (${filterCheck.Reason}). ` +
|
|
115
|
+
`The index is NOT queried, because this lane's tenant/permission push-down lives entirely in that filter.`);
|
|
116
|
+
return { index: idx.ExternalIndexName, hits: [] };
|
|
117
|
+
}
|
|
118
|
+
if (filterCheck.Status === 'usable') {
|
|
119
|
+
body.filter = filterCheck.Value;
|
|
108
120
|
}
|
|
109
121
|
try {
|
|
110
122
|
const response = await fetch(url, {
|
|
@@ -135,9 +147,10 @@ let AzureAISearchProvider = class AzureAISearchProvider extends BaseSearchProvid
|
|
|
135
147
|
.sort((a, b) => b.hit['@search.score'] - a.hit['@search.score'])
|
|
136
148
|
.slice(0, topK)
|
|
137
149
|
.map((m) => {
|
|
138
|
-
const id =
|
|
139
|
-
const title =
|
|
140
|
-
const snippet =
|
|
150
|
+
const id = ResolveHitID(m.hit, '');
|
|
151
|
+
const title = ResolveHitTitle(m.hit, id);
|
|
152
|
+
const snippet = ResolveHitSnippet(m.hit);
|
|
153
|
+
const provenance = ExtractChunkProvenance(m.hit);
|
|
141
154
|
const normalized = m.hit['@search.score'] / topScore;
|
|
142
155
|
return {
|
|
143
156
|
ID: `azs-${m.index}-${id}`,
|
|
@@ -153,7 +166,12 @@ let AzureAISearchProvider = class AzureAISearchProvider extends BaseSearchProvid
|
|
|
153
166
|
MatchedAt: new Date(),
|
|
154
167
|
EntityIcon: 'fa-solid fa-cloud',
|
|
155
168
|
RecordName: title.slice(0, 200),
|
|
156
|
-
RawMetadata: JSON.stringify({
|
|
169
|
+
RawMetadata: JSON.stringify({
|
|
170
|
+
index: m.index,
|
|
171
|
+
id,
|
|
172
|
+
_rawScore: m.hit['@search.score'],
|
|
173
|
+
...(HasChunkProvenance(provenance) ? { chunk: provenance } : {}),
|
|
174
|
+
}),
|
|
157
175
|
};
|
|
158
176
|
});
|
|
159
177
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AzureAISearchProvider.js","sourceRoot":"","sources":["../../src/providers/AzureAISearchProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;;;;;AAEH,OAAO,EAAE,QAAQ,EAAY,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAwB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"AzureAISearchProvider.js","sourceRoot":"","sources":["../../src/providers/AzureAISearchProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElasticsearchSearchProvider.d.ts","sourceRoot":"","sources":["../../src/providers/ElasticsearchSearchProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAuB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErE,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"ElasticsearchSearchProvider.d.ts","sourceRoot":"","sources":["../../src/providers/ElasticsearchSearchProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAuB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErE,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEtF,OAAO,EACH,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EACnB,MAAM,yBAAyB,CAAC;AA+DjC,qBACa,2BAA4B,SAAQ,kBAAkB;IAC/D,SAAgB,UAAU,EAAE,YAAY,CAAc;IAEtD,OAAO,CAAC,MAAM,CAAwC;IACtD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAA4C;IAE1C,UAAU,CAAC,MAAM,EAAE,oBAAoB,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B9E,iBAAiB,CAAC,YAAY,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAe9D,WAAW,IAAI,OAAO;IAIzB,MAAM,CACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,aAAa,GAAG,SAAS,EACnC,YAAY,EAAE,QAAQ,EACtB,gBAAgB,CAAC,EAAE,gBAAgB,GACpC,OAAO,CAAC,gBAAgB,EAAE,CAAC;CA6FjC;AAED,oCAAoC;AACpC,wBAAgB,+BAA+B,IAAI,IAAI,CAGtD;AAED,mFAAmF;AACnF,wBAAgB,wCAAwC,IAAI,IAAI,CAE/D"}
|
|
@@ -32,6 +32,8 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
32
32
|
import { LogError } from '@memberjunction/core';
|
|
33
33
|
import { RegisterClass } from '@memberjunction/global';
|
|
34
34
|
import { BaseSearchProvider } from '../generic/ISearchProvider.js';
|
|
35
|
+
import { CheckScopeObjectFilter } from '../generic/ScopeFilterGuard.js';
|
|
36
|
+
import { ExtractChunkProvenance, HasChunkProvenance, ResolveHitSnippet, ResolveHitTitle } from '../generic/ExternalHitMapper.js';
|
|
35
37
|
/**
|
|
36
38
|
* Lazy-loader for the Elasticsearch SDK. Memoized so the dynamic import cost is
|
|
37
39
|
* paid once per process even when many SearchProvider records reference the
|
|
@@ -132,8 +134,17 @@ let ElasticsearchSearchProvider = class ElasticsearchSearchProvider extends Base
|
|
|
132
134
|
for (const idx of scopeConstraints?.ExternalIndexes ?? []) {
|
|
133
135
|
if (idx.IndexType !== 'Elasticsearch')
|
|
134
136
|
continue;
|
|
135
|
-
|
|
136
|
-
|
|
137
|
+
const filterCheck = CheckScopeObjectFilter(idx.MetadataFilter);
|
|
138
|
+
if (filterCheck.Status === 'unusable') {
|
|
139
|
+
// All target indexes share ONE request here, so an inapplicable filter would
|
|
140
|
+
// under-filter the entire lane. Fail the lane closed rather than pushing down
|
|
141
|
+
// less restriction than the scope author declared.
|
|
142
|
+
LogError(`ElasticsearchSearchProvider: aborting search — index "${idx.ExternalIndexName}" has a scope MetadataFilter that cannot be applied (${filterCheck.Reason}). ` +
|
|
143
|
+
`No query is issued, because this lane composes one request across indexes and would otherwise run under-filtered.`);
|
|
144
|
+
return [];
|
|
145
|
+
}
|
|
146
|
+
if (filterCheck.Status === 'usable') {
|
|
147
|
+
filterClauses.push(filterCheck.Value);
|
|
137
148
|
}
|
|
138
149
|
}
|
|
139
150
|
const queryBody = {
|
|
@@ -157,8 +168,9 @@ let ElasticsearchSearchProvider = class ElasticsearchSearchProvider extends Base
|
|
|
157
168
|
const topScore = Math.max(1, hits[0]?._score ?? 1);
|
|
158
169
|
return hits.map((hit, idx) => {
|
|
159
170
|
const src = hit._source ?? {};
|
|
160
|
-
const title = src
|
|
161
|
-
const snippet = src
|
|
171
|
+
const title = ResolveHitTitle(src, hit._id, defaultField);
|
|
172
|
+
const snippet = ResolveHitSnippet(src, defaultField);
|
|
173
|
+
const provenance = ExtractChunkProvenance(src);
|
|
162
174
|
return {
|
|
163
175
|
ID: `es-${hit._index}-${hit._id}`,
|
|
164
176
|
EntityName: hit._index,
|
|
@@ -173,7 +185,7 @@ let ElasticsearchSearchProvider = class ElasticsearchSearchProvider extends Base
|
|
|
173
185
|
MatchedAt: new Date(),
|
|
174
186
|
EntityIcon: 'fa-solid fa-database',
|
|
175
187
|
RecordName: title.slice(0, 200),
|
|
176
|
-
RawMetadata: JSON.stringify({ _index: hit._index, _id: hit._id, _rank: idx, _rawScore: hit._score }),
|
|
188
|
+
RawMetadata: JSON.stringify({ _index: hit._index, _id: hit._id, _rank: idx, _rawScore: hit._score, ...(HasChunkProvenance(provenance) ? { chunk: provenance } : {}) }),
|
|
177
189
|
};
|
|
178
190
|
});
|
|
179
191
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElasticsearchSearchProvider.js","sourceRoot":"","sources":["../../src/providers/ElasticsearchSearchProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;;;;;;;AAEH,OAAO,EAAE,QAAQ,EAAuB,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAwB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"ElasticsearchSearchProvider.js","sourceRoot":"","sources":["../../src/providers/ElasticsearchSearchProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenSearchSearchProvider.d.ts","sourceRoot":"","sources":["../../src/providers/OpenSearchSearchProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAY,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"OpenSearchSearchProvider.d.ts","sourceRoot":"","sources":["../../src/providers/OpenSearchSearchProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAY,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEtF,OAAO,EACH,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EACnB,MAAM,yBAAyB,CAAC;AAsBjC,qBACa,wBAAyB,SAAQ,kBAAkB;IAC5D,SAAgB,UAAU,EAAE,YAAY,CAAc;IAEtD,OAAO,CAAC,YAAY,CAAyC;IAC7D,OAAO,CAAC,SAAS,CAAS;IAEJ,UAAU,CAAC,MAAM,EAAE,oBAAoB,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAS9E,iBAAiB,CAAC,YAAY,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB9D,WAAW,IAAI,OAAO;IAIzB,MAAM,CACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,aAAa,GAAG,SAAS,EACnC,YAAY,EAAE,QAAQ,EACtB,gBAAgB,CAAC,EAAE,gBAAgB,GACpC,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAwF9B,OAAO,CAAC,gBAAgB;CAc3B;AAED,oCAAoC;AACpC,wBAAgB,4BAA4B,IAAI,IAAI,CAGnD"}
|
|
@@ -27,6 +27,8 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
27
27
|
import { LogError } from '@memberjunction/core';
|
|
28
28
|
import { RegisterClass } from '@memberjunction/global';
|
|
29
29
|
import { BaseSearchProvider } from '../generic/ISearchProvider.js';
|
|
30
|
+
import { CheckScopeObjectFilter } from '../generic/ScopeFilterGuard.js';
|
|
31
|
+
import { ExtractChunkProvenance, HasChunkProvenance, ResolveHitSnippet, ResolveHitTitle } from '../generic/ExternalHitMapper.js';
|
|
30
32
|
let OpenSearchSearchProvider = class OpenSearchSearchProvider extends BaseSearchProvider {
|
|
31
33
|
constructor() {
|
|
32
34
|
super(...arguments);
|
|
@@ -81,8 +83,16 @@ let OpenSearchSearchProvider = class OpenSearchSearchProvider extends BaseSearch
|
|
|
81
83
|
return [];
|
|
82
84
|
const filterClauses = [];
|
|
83
85
|
for (const idx of scopedRows) {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
+
const filterCheck = CheckScopeObjectFilter(idx.MetadataFilter);
|
|
87
|
+
if (filterCheck.Status === 'unusable') {
|
|
88
|
+
// One request spans all target indexes, so an inapplicable filter would
|
|
89
|
+
// under-filter the whole lane. Fail closed.
|
|
90
|
+
LogError(`OpenSearchSearchProvider: aborting search — index "${idx.ExternalIndexName}" has a scope MetadataFilter that cannot be applied (${filterCheck.Reason}). ` +
|
|
91
|
+
`No query is issued, because this lane composes one request across indexes and would otherwise run under-filtered.`);
|
|
92
|
+
return [];
|
|
93
|
+
}
|
|
94
|
+
if (filterCheck.Status === 'usable') {
|
|
95
|
+
filterClauses.push(filterCheck.Value);
|
|
86
96
|
}
|
|
87
97
|
}
|
|
88
98
|
const url = `${node}/${indexNames.map(encodeURIComponent).join(',')}/_search`;
|
|
@@ -113,8 +123,9 @@ let OpenSearchSearchProvider = class OpenSearchSearchProvider extends BaseSearch
|
|
|
113
123
|
const topScore = Math.max(1, hits[0]._score);
|
|
114
124
|
return hits.slice(0, topK).map((hit, idx) => {
|
|
115
125
|
const src = hit._source ?? {};
|
|
116
|
-
const title =
|
|
117
|
-
const snippet =
|
|
126
|
+
const title = ResolveHitTitle(src, hit._id, defaultField);
|
|
127
|
+
const snippet = ResolveHitSnippet(src, defaultField);
|
|
128
|
+
const provenance = ExtractChunkProvenance(src);
|
|
118
129
|
const normalized = hit._score / topScore;
|
|
119
130
|
return {
|
|
120
131
|
ID: `os-${hit._index}-${hit._id}`,
|
|
@@ -130,7 +141,7 @@ let OpenSearchSearchProvider = class OpenSearchSearchProvider extends BaseSearch
|
|
|
130
141
|
MatchedAt: new Date(),
|
|
131
142
|
EntityIcon: 'fa-solid fa-database',
|
|
132
143
|
RecordName: title.slice(0, 200),
|
|
133
|
-
RawMetadata: JSON.stringify({ _index: hit._index, _id: hit._id, _rank: idx, _rawScore: hit._score }),
|
|
144
|
+
RawMetadata: JSON.stringify({ _index: hit._index, _id: hit._id, _rank: idx, _rawScore: hit._score, ...(HasChunkProvenance(provenance) ? { chunk: provenance } : {}) }),
|
|
134
145
|
};
|
|
135
146
|
});
|
|
136
147
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenSearchSearchProvider.js","sourceRoot":"","sources":["../../src/providers/OpenSearchSearchProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;;;;;AAEH,OAAO,EAAE,QAAQ,EAAY,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAwB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"OpenSearchSearchProvider.js","sourceRoot":"","sources":["../../src/providers/OpenSearchSearchProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypesenseSearchProvider.d.ts","sourceRoot":"","sources":["../../src/providers/TypesenseSearchProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAY,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"TypesenseSearchProvider.d.ts","sourceRoot":"","sources":["../../src/providers/TypesenseSearchProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAY,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEtF,OAAO,EACH,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EACnB,MAAM,yBAAyB,CAAC;AAoBjC,qBACa,uBAAwB,SAAQ,kBAAkB;IAC3D,SAAgB,UAAU,EAAE,YAAY,CAAc;IAEtD,OAAO,CAAC,YAAY,CAAwC;IAC5D,OAAO,CAAC,SAAS,CAAS;IAEJ,UAAU,CAAC,MAAM,EAAE,oBAAoB,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAS9E,iBAAiB,CAAC,YAAY,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB9D,WAAW,IAAI,OAAO;IAIzB,MAAM,CACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,aAAa,GAAG,SAAS,EACnC,YAAY,EAAE,QAAQ,EACtB,gBAAgB,CAAC,EAAE,gBAAgB,GACpC,OAAO,CAAC,gBAAgB,EAAE,CAAC;CAqGjC;AAED,oCAAoC;AACpC,wBAAgB,2BAA2B,IAAI,IAAI,CAGlD"}
|
|
@@ -28,6 +28,8 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
28
28
|
import { LogError } from '@memberjunction/core';
|
|
29
29
|
import { RegisterClass } from '@memberjunction/global';
|
|
30
30
|
import { BaseSearchProvider } from '../generic/ISearchProvider.js';
|
|
31
|
+
import { CheckScopeStringFilter } from '../generic/ScopeFilterGuard.js';
|
|
32
|
+
import { ExtractChunkProvenance, HasChunkProvenance, ResolveHitID, ResolveHitSnippet, ResolveHitTitle } from '../generic/ExternalHitMapper.js';
|
|
31
33
|
let TypesenseSearchProvider = class TypesenseSearchProvider extends BaseSearchProvider {
|
|
32
34
|
constructor() {
|
|
33
35
|
super(...arguments);
|
|
@@ -90,8 +92,16 @@ let TypesenseSearchProvider = class TypesenseSearchProvider extends BaseSearchPr
|
|
|
90
92
|
query_by: queryBy,
|
|
91
93
|
per_page: String(topK),
|
|
92
94
|
});
|
|
93
|
-
|
|
94
|
-
|
|
95
|
+
// A filter authored but not applicable must not degrade into an unfiltered
|
|
96
|
+
// collection scan — fail this collection closed instead.
|
|
97
|
+
const filterCheck = CheckScopeStringFilter(idx.MetadataFilter);
|
|
98
|
+
if (filterCheck.Status === 'unusable') {
|
|
99
|
+
LogError(`TypesenseSearchProvider: skipping collection "${idx.ExternalIndexName}" — its scope MetadataFilter cannot be applied (${filterCheck.Reason}). ` +
|
|
100
|
+
`The collection is NOT queried, because running it without filter_by would ignore the scope's restriction.`);
|
|
101
|
+
return { collection: idx.ExternalIndexName, hits: [] };
|
|
102
|
+
}
|
|
103
|
+
if (filterCheck.Status === 'usable') {
|
|
104
|
+
params.set('filter_by', filterCheck.Value);
|
|
95
105
|
}
|
|
96
106
|
const url = `${node}/collections/${encodeURIComponent(idx.ExternalIndexName)}/documents/search?${params.toString()}`;
|
|
97
107
|
try {
|
|
@@ -125,10 +135,11 @@ let TypesenseSearchProvider = class TypesenseSearchProvider extends BaseSearchPr
|
|
|
125
135
|
.slice(0, topK)
|
|
126
136
|
.map((m, idx) => {
|
|
127
137
|
const doc = m.hit.document;
|
|
128
|
-
const id =
|
|
129
|
-
const title =
|
|
138
|
+
const id = ResolveHitID(doc, `${m.collection}-${idx}`);
|
|
139
|
+
const title = ResolveHitTitle(doc, id);
|
|
140
|
+
const provenance = ExtractChunkProvenance(doc);
|
|
130
141
|
const snippetField = (this.parsedConfig?.defaultQueryBy ?? 'content,title').split(',')[0].trim();
|
|
131
|
-
const snippet =
|
|
142
|
+
const snippet = ResolveHitSnippet(doc, snippetField);
|
|
132
143
|
const normalized = m.hit.text_match / topMatch;
|
|
133
144
|
return {
|
|
134
145
|
ID: `ts-${m.collection}-${id}`,
|
|
@@ -144,7 +155,7 @@ let TypesenseSearchProvider = class TypesenseSearchProvider extends BaseSearchPr
|
|
|
144
155
|
MatchedAt: new Date(),
|
|
145
156
|
EntityIcon: 'fa-solid fa-database',
|
|
146
157
|
RecordName: title.slice(0, 200),
|
|
147
|
-
RawMetadata: JSON.stringify({ collection: m.collection, id, _rawMatch: m.hit.text_match }),
|
|
158
|
+
RawMetadata: JSON.stringify({ collection: m.collection, id, _rawMatch: m.hit.text_match, ...(HasChunkProvenance(provenance) ? { chunk: provenance } : {}) }),
|
|
148
159
|
};
|
|
149
160
|
});
|
|
150
161
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypesenseSearchProvider.js","sourceRoot":"","sources":["../../src/providers/TypesenseSearchProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;;;;;AAEH,OAAO,EAAE,QAAQ,EAAY,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAwB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"TypesenseSearchProvider.js","sourceRoot":"","sources":["../../src/providers/TypesenseSearchProvider.ts"],"names":[],"mappings":"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"}
|