attio-mcp 1.1.0 → 1.1.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/CHANGELOG.md +31 -0
- package/README.md +3 -2
- package/dist/api/operations/search.d.ts +5 -2
- package/dist/api/operations/search.d.ts.map +1 -1
- package/dist/api/operations/search.js +469 -9
- package/dist/api/operations/search.js.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/handlers/tool-configs/openai/index.d.ts +2 -2
- package/dist/handlers/tool-configs/openai/index.d.ts.map +1 -1
- package/dist/handlers/tool-configs/openai/index.js +13 -2
- package/dist/handlers/tool-configs/openai/index.js.map +1 -1
- package/dist/handlers/tool-configs/universal/core/crud-operations.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/core/crud-operations.js +22 -3
- package/dist/handlers/tool-configs/universal/core/crud-operations.js.map +1 -1
- package/dist/handlers/tool-configs/universal/index.d.ts +4 -18
- package/dist/handlers/tool-configs/universal/index.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/index.js +25 -5
- package/dist/handlers/tool-configs/universal/index.js.map +1 -1
- package/dist/handlers/tools/registry.d.ts +3 -10
- package/dist/handlers/tools/registry.d.ts.map +1 -1
- package/dist/objects/deals/index.d.ts +1 -0
- package/dist/objects/deals/index.d.ts.map +1 -1
- package/dist/objects/deals/index.js +2 -0
- package/dist/objects/deals/index.js.map +1 -1
- package/dist/objects/deals/search.d.ts +16 -0
- package/dist/objects/deals/search.d.ts.map +1 -0
- package/dist/objects/deals/search.js +59 -0
- package/dist/objects/deals/search.js.map +1 -0
- package/dist/prompts/handlers.d.ts +1 -1
- package/dist/prompts/handlers.d.ts.map +1 -1
- package/dist/prompts/handlers.js +8 -9
- package/dist/prompts/handlers.js.map +1 -1
- package/dist/prompts/v1/utils/token-metadata.d.ts +3 -3
- package/dist/prompts/v1/utils/token-metadata.d.ts.map +1 -1
- package/dist/prompts/v1/utils/token-metadata.js +7 -7
- package/dist/prompts/v1/utils/token-metadata.js.map +1 -1
- package/dist/prompts/v1/utils/validation.d.ts +1 -1
- package/dist/prompts/v1/utils/validation.d.ts.map +1 -1
- package/dist/prompts/v1/utils/validation.js +2 -2
- package/dist/prompts/v1/utils/validation.js.map +1 -1
- package/dist/server/createServer.d.ts +2 -2
- package/dist/server/createServer.d.ts.map +1 -1
- package/dist/server/createServer.js +3 -3
- package/dist/server/createServer.js.map +1 -1
- package/dist/services/CachingService.d.ts +57 -0
- package/dist/services/CachingService.d.ts.map +1 -1
- package/dist/services/CachingService.js +112 -0
- package/dist/services/CachingService.js.map +1 -1
- package/dist/services/UniversalSearchService.d.ts +0 -12
- package/dist/services/UniversalSearchService.d.ts.map +1 -1
- package/dist/services/UniversalSearchService.js +19 -133
- package/dist/services/UniversalSearchService.js.map +1 -1
- package/dist/services/search-strategies/CompanySearchStrategy.d.ts.map +1 -1
- package/dist/services/search-strategies/CompanySearchStrategy.js +13 -11
- package/dist/services/search-strategies/CompanySearchStrategy.js.map +1 -1
- package/dist/services/search-strategies/DealSearchStrategy.d.ts +38 -0
- package/dist/services/search-strategies/DealSearchStrategy.d.ts.map +1 -0
- package/dist/services/search-strategies/DealSearchStrategy.js +119 -0
- package/dist/services/search-strategies/DealSearchStrategy.js.map +1 -0
- package/dist/services/search-strategies/NoteSearchStrategy.d.ts +62 -0
- package/dist/services/search-strategies/NoteSearchStrategy.d.ts.map +1 -0
- package/dist/services/search-strategies/NoteSearchStrategy.js +224 -0
- package/dist/services/search-strategies/NoteSearchStrategy.js.map +1 -0
- package/dist/services/search-strategies/PeopleSearchStrategy.d.ts.map +1 -1
- package/dist/services/search-strategies/PeopleSearchStrategy.js +13 -15
- package/dist/services/search-strategies/PeopleSearchStrategy.js.map +1 -1
- package/dist/services/search-strategies/index.d.ts +2 -0
- package/dist/services/search-strategies/index.d.ts.map +1 -1
- package/dist/services/search-strategies/index.js +2 -0
- package/dist/services/search-strategies/index.js.map +1 -1
- package/dist/services/search-strategies/interfaces.d.ts +6 -0
- package/dist/services/search-strategies/interfaces.d.ts.map +1 -1
- package/dist/services/search-utilities/SearchScorer.d.ts +4 -0
- package/dist/services/search-utilities/SearchScorer.d.ts.map +1 -0
- package/dist/services/search-utilities/SearchScorer.js +243 -0
- package/dist/services/search-utilities/SearchScorer.js.map +1 -0
- package/dist/services/search-utilities/SearchUtilities.d.ts +5 -0
- package/dist/services/search-utilities/SearchUtilities.d.ts.map +1 -1
- package/dist/services/search-utilities/SearchUtilities.js +20 -0
- package/dist/services/search-utilities/SearchUtilities.js.map +1 -1
- package/dist/smithery.d.ts +5 -2
- package/dist/smithery.d.ts.map +1 -1
- package/dist/smithery.js +20 -2
- package/dist/smithery.js.map +1 -1
- package/dist/utils/mcp-discovery.d.ts.map +1 -1
- package/dist/utils/mcp-discovery.js +19 -1
- package/dist/utils/mcp-discovery.js.map +1 -1
- package/dist/utils/token-count.d.ts +3 -3
- package/dist/utils/token-count.d.ts.map +1 -1
- package/dist/utils/token-count.js +48 -8
- package/dist/utils/token-count.js.map +1 -1
- package/dist/utils/token-footprint-analyzer.d.ts +2 -2
- package/dist/utils/token-footprint-analyzer.d.ts.map +1 -1
- package/dist/utils/token-footprint-analyzer.js +10 -10
- package/dist/utils/token-footprint-analyzer.js.map +1 -1
- package/dist/utils/validation/phone-validation.d.ts.map +1 -1
- package/dist/utils/validation/phone-validation.js +3 -4
- package/dist/utils/validation/phone-validation.js.map +1 -1
- package/package.json +5 -2
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deal search strategy implementation
|
|
3
|
+
* Issue #885: Add deals support to fast path optimization
|
|
4
|
+
*/
|
|
5
|
+
import { AttioRecord } from '../../types/attio.js';
|
|
6
|
+
import { BaseSearchStrategy } from './BaseSearchStrategy.js';
|
|
7
|
+
import { SearchStrategyParams, StrategyDependencies } from './interfaces.js';
|
|
8
|
+
/**
|
|
9
|
+
* Search strategy for deals with fast path optimization
|
|
10
|
+
*/
|
|
11
|
+
export declare class DealSearchStrategy extends BaseSearchStrategy {
|
|
12
|
+
constructor(dependencies: StrategyDependencies);
|
|
13
|
+
getResourceType(): string;
|
|
14
|
+
supportsAdvancedFiltering(): boolean;
|
|
15
|
+
supportsQuerySearch(): boolean;
|
|
16
|
+
search(params: SearchStrategyParams): Promise<AttioRecord[]>;
|
|
17
|
+
/**
|
|
18
|
+
* Search deals using advanced filters
|
|
19
|
+
*/
|
|
20
|
+
private searchWithFilters;
|
|
21
|
+
/**
|
|
22
|
+
* Search deals with a text query
|
|
23
|
+
*/
|
|
24
|
+
private searchWithQuery;
|
|
25
|
+
/**
|
|
26
|
+
* Search deals without any query or filters
|
|
27
|
+
*/
|
|
28
|
+
private searchWithoutQuery;
|
|
29
|
+
/**
|
|
30
|
+
* Search deals by content across multiple fields
|
|
31
|
+
*/
|
|
32
|
+
private searchByContent;
|
|
33
|
+
/**
|
|
34
|
+
* Search deals by name only
|
|
35
|
+
*/
|
|
36
|
+
private searchByName;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=DealSearchStrategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DealSearchStrategy.d.ts","sourceRoot":"","sources":["../../../src/services/search-strategies/DealSearchStrategy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAOnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAG7E;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,kBAAkB;gBAC5C,YAAY,EAAE,oBAAoB;IAI9C,eAAe,IAAI,MAAM;IAIzB,yBAAyB,IAAI,OAAO;IAIpC,mBAAmB,IAAI,OAAO;IAIxB,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAyClE;;OAEG;YACW,iBAAiB;IAyB/B;;OAEG;YACW,eAAe;IA2C7B;;OAEG;YACW,kBAAkB;IAehC;;OAEG;YACW,eAAe;IAgC7B;;OAEG;YACW,YAAY;CAkB3B"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deal search strategy implementation
|
|
3
|
+
* Issue #885: Add deals support to fast path optimization
|
|
4
|
+
*/
|
|
5
|
+
import { SearchType, MatchType, SortType, UniversalResourceType, } from '../../handlers/tool-configs/universal/types.js';
|
|
6
|
+
import { BaseSearchStrategy } from './BaseSearchStrategy.js';
|
|
7
|
+
import { FilterValidationError } from '../../errors/api-errors.js';
|
|
8
|
+
/**
|
|
9
|
+
* Search strategy for deals with fast path optimization
|
|
10
|
+
*/
|
|
11
|
+
export class DealSearchStrategy extends BaseSearchStrategy {
|
|
12
|
+
constructor(dependencies) {
|
|
13
|
+
super(dependencies);
|
|
14
|
+
}
|
|
15
|
+
getResourceType() {
|
|
16
|
+
return UniversalResourceType.DEALS;
|
|
17
|
+
}
|
|
18
|
+
supportsAdvancedFiltering() {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
supportsQuerySearch() {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
async search(params) {
|
|
25
|
+
const { query, filters, limit, offset, search_type = SearchType.BASIC, fields, match_type = MatchType.PARTIAL, sort = SortType.NAME, timeframeParams, } = params;
|
|
26
|
+
// Apply timeframe filtering
|
|
27
|
+
const enhancedFilters = this.applyTimeframeFiltering(filters, timeframeParams);
|
|
28
|
+
// If we have filters, use advanced search
|
|
29
|
+
if (enhancedFilters) {
|
|
30
|
+
return this.searchWithFilters(enhancedFilters, limit, offset);
|
|
31
|
+
}
|
|
32
|
+
// If we have a query, handle different search types
|
|
33
|
+
if (query && query.trim().length > 0) {
|
|
34
|
+
return this.searchWithQuery(query.trim(), search_type, fields, match_type, sort, limit, offset);
|
|
35
|
+
}
|
|
36
|
+
// No query and no filters - return paginated results
|
|
37
|
+
return this.searchWithoutQuery(limit, offset);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Search deals using advanced filters
|
|
41
|
+
*/
|
|
42
|
+
async searchWithFilters(filters, limit, offset) {
|
|
43
|
+
if (!this.dependencies.advancedSearchFunction) {
|
|
44
|
+
throw new Error('Deals advanced search function not available');
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
// FilterValidationError will bubble up naturally from searchFn
|
|
48
|
+
return await this.dependencies.advancedSearchFunction(filters, limit, offset);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
// Let FilterValidationError bubble up for proper error handling
|
|
52
|
+
if (error instanceof FilterValidationError) {
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
55
|
+
throw error;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Search deals with a text query
|
|
60
|
+
*/
|
|
61
|
+
async searchWithQuery(query, searchType, fields, matchType = MatchType.PARTIAL, sort = SortType.NAME, limit, offset) {
|
|
62
|
+
if (!this.dependencies.advancedSearchFunction) {
|
|
63
|
+
throw new Error('Deals search function not available');
|
|
64
|
+
}
|
|
65
|
+
// Handle different search types
|
|
66
|
+
if (searchType === SearchType.CONTENT) {
|
|
67
|
+
return this.searchByContent(query, fields, matchType, sort, limit, offset);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
// For simple text queries without special fields/filters,
|
|
71
|
+
// use searchObject which includes fast path optimization
|
|
72
|
+
const { searchObject } = await import('../../api/operations/search.js');
|
|
73
|
+
const { ResourceType } = await import('../../types/attio.js');
|
|
74
|
+
// Calculate total records needed: offset + limit
|
|
75
|
+
const start = offset || 0;
|
|
76
|
+
const effectiveLimit = limit ? start + limit : undefined;
|
|
77
|
+
const results = await searchObject(ResourceType.DEALS, query, {
|
|
78
|
+
limit: effectiveLimit,
|
|
79
|
+
});
|
|
80
|
+
// Apply offset to slice the results
|
|
81
|
+
const end = limit ? start + limit : undefined;
|
|
82
|
+
return results.slice(start, end);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Search deals without any query or filters
|
|
87
|
+
*/
|
|
88
|
+
async searchWithoutQuery(limit, offset) {
|
|
89
|
+
if (!this.dependencies.advancedSearchFunction) {
|
|
90
|
+
throw new Error('Deals search function not available');
|
|
91
|
+
}
|
|
92
|
+
return this.handleEmptyFilters(this.dependencies.advancedSearchFunction, limit, offset);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Search deals by content across multiple fields
|
|
96
|
+
*/
|
|
97
|
+
async searchByContent(query, fields, matchType = MatchType.PARTIAL, sort = SortType.NAME, limit, offset) {
|
|
98
|
+
// Default content fields for deals
|
|
99
|
+
const searchFields = fields && fields.length > 0 ? fields : ['name', 'notes'];
|
|
100
|
+
const contentFilters = this.createContentFilters(query, searchFields, matchType);
|
|
101
|
+
if (!this.dependencies.advancedSearchFunction) {
|
|
102
|
+
throw new Error('Deals search function not available');
|
|
103
|
+
}
|
|
104
|
+
const results = await this.dependencies.advancedSearchFunction(contentFilters, limit, offset);
|
|
105
|
+
// Apply relevance ranking if requested
|
|
106
|
+
return this.applyRelevanceRanking(results, query, searchFields, sort);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Search deals by name only
|
|
110
|
+
*/
|
|
111
|
+
async searchByName(query, matchType = MatchType.PARTIAL, limit, offset) {
|
|
112
|
+
const nameFilters = this.createNameFilters(query, matchType);
|
|
113
|
+
if (!this.dependencies.advancedSearchFunction) {
|
|
114
|
+
throw new Error('Deals search function not available');
|
|
115
|
+
}
|
|
116
|
+
return await this.dependencies.advancedSearchFunction(nameFilters, limit, offset);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=DealSearchStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DealSearchStrategy.js","sourceRoot":"","sources":["../../../src/services/search-strategies/DealSearchStrategy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Note search strategy implementation
|
|
3
|
+
* Issue #888: Fix notes search - notes cannot be found by title/content
|
|
4
|
+
*
|
|
5
|
+
* **IMPORTANT API LIMITATION**:
|
|
6
|
+
* The Attio Notes API /v2/notes endpoint returns an empty array when called without filters.
|
|
7
|
+
* Testing with curl confirmed: GET /v2/notes returns {"data": []}
|
|
8
|
+
* The API requires parent_object and/or parent_record_id filters to return any notes.
|
|
9
|
+
*
|
|
10
|
+
* **What Works**:
|
|
11
|
+
* - list-notes tool with parent record filtering (e.g., list all notes on a company)
|
|
12
|
+
* - Content search within notes for a specific parent record
|
|
13
|
+
*
|
|
14
|
+
* **What Doesn't Work**:
|
|
15
|
+
* - Workspace-wide note search without parent filters
|
|
16
|
+
* - Global search like "find all notes containing 'demo'" across all records
|
|
17
|
+
*
|
|
18
|
+
* Recommendation: Request Attio to add workspace-wide notes endpoint or search capability.
|
|
19
|
+
*/
|
|
20
|
+
import { AttioRecord } from '../../types/attio.js';
|
|
21
|
+
import { BaseSearchStrategy } from './BaseSearchStrategy.js';
|
|
22
|
+
import { SearchStrategyParams, StrategyDependencies } from './interfaces.js';
|
|
23
|
+
/**
|
|
24
|
+
* Search strategy for notes with performance optimization, caching, and content search support
|
|
25
|
+
*
|
|
26
|
+
* IMPLEMENTATION NOTE:
|
|
27
|
+
* The Attio Notes API (/notes endpoint) does not support native text search.
|
|
28
|
+
* It only supports filtering by parent_object and parent_record_id.
|
|
29
|
+
* Therefore, we fetch all notes and apply client-side filtering for search queries.
|
|
30
|
+
*/
|
|
31
|
+
export declare class NoteSearchStrategy extends BaseSearchStrategy {
|
|
32
|
+
constructor(dependencies: StrategyDependencies);
|
|
33
|
+
getResourceType(): string;
|
|
34
|
+
supportsAdvancedFiltering(): boolean;
|
|
35
|
+
supportsQuerySearch(): boolean;
|
|
36
|
+
search(params: SearchStrategyParams): Promise<AttioRecord[]>;
|
|
37
|
+
/**
|
|
38
|
+
* Search notes with performance optimization, caching, and content search support
|
|
39
|
+
*
|
|
40
|
+
* PERFORMANCE-OPTIMIZED NOTES PAGINATION
|
|
41
|
+
*
|
|
42
|
+
* The Attio Notes API does not support native text search or advanced filtering.
|
|
43
|
+
* This implementation uses smart caching and performance monitoring to
|
|
44
|
+
* minimize the performance impact of loading all notes.
|
|
45
|
+
*
|
|
46
|
+
* Optimizations:
|
|
47
|
+
* - Smart caching with 30-second TTL to avoid repeated full loads
|
|
48
|
+
* - Performance warnings for large datasets (>500 notes)
|
|
49
|
+
* - Early termination for large offsets
|
|
50
|
+
* - Memory usage monitoring and cleanup
|
|
51
|
+
*/
|
|
52
|
+
private searchNotes;
|
|
53
|
+
/**
|
|
54
|
+
* Apply content search filtering to notes
|
|
55
|
+
*/
|
|
56
|
+
private applyContentSearch;
|
|
57
|
+
/**
|
|
58
|
+
* Convert AttioNote to AttioRecord format
|
|
59
|
+
*/
|
|
60
|
+
private convertNoteToRecord;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=NoteSearchStrategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NoteSearchStrategy.d.ts","sourceRoot":"","sources":["../../../src/services/search-strategies/NoteSearchStrategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,WAAW,EAAa,MAAM,sBAAsB,CAAC;AAO9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAa7E;;;;;;;GAOG;AACH,qBAAa,kBAAmB,SAAQ,kBAAkB;gBAC5C,YAAY,EAAE,oBAAoB;IAI9C,eAAe,IAAI,MAAM;IAIzB,yBAAyB,IAAI,OAAO;IAIpC,mBAAmB,IAAI,OAAO;IAIxB,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA8BlE;;;;;;;;;;;;;;OAcG;YACW,WAAW;IA6IzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqC1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAiC5B"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Note search strategy implementation
|
|
3
|
+
* Issue #888: Fix notes search - notes cannot be found by title/content
|
|
4
|
+
*
|
|
5
|
+
* **IMPORTANT API LIMITATION**:
|
|
6
|
+
* The Attio Notes API /v2/notes endpoint returns an empty array when called without filters.
|
|
7
|
+
* Testing with curl confirmed: GET /v2/notes returns {"data": []}
|
|
8
|
+
* The API requires parent_object and/or parent_record_id filters to return any notes.
|
|
9
|
+
*
|
|
10
|
+
* **What Works**:
|
|
11
|
+
* - list-notes tool with parent record filtering (e.g., list all notes on a company)
|
|
12
|
+
* - Content search within notes for a specific parent record
|
|
13
|
+
*
|
|
14
|
+
* **What Doesn't Work**:
|
|
15
|
+
* - Workspace-wide note search without parent filters
|
|
16
|
+
* - Global search like "find all notes containing 'demo'" across all records
|
|
17
|
+
*
|
|
18
|
+
* Recommendation: Request Attio to add workspace-wide notes endpoint or search capability.
|
|
19
|
+
*/
|
|
20
|
+
import { SearchType, MatchType, SortType, UniversalResourceType, } from '../../handlers/tool-configs/universal/types.js';
|
|
21
|
+
import { BaseSearchStrategy } from './BaseSearchStrategy.js';
|
|
22
|
+
import { performance } from 'perf_hooks';
|
|
23
|
+
import { SearchUtilities } from '../search-utilities/SearchUtilities.js';
|
|
24
|
+
import { createScopedLogger, OperationType } from '../../utils/logger.js';
|
|
25
|
+
// Import performance tracking and caching services
|
|
26
|
+
import { enhancedPerformanceTracker } from '../../middleware/performance-enhanced.js';
|
|
27
|
+
import { CachingService } from '../CachingService.js';
|
|
28
|
+
// Performance warning threshold for large note datasets
|
|
29
|
+
const NOTES_PERFORMANCE_WARNING_THRESHOLD = 2000;
|
|
30
|
+
/**
|
|
31
|
+
* Search strategy for notes with performance optimization, caching, and content search support
|
|
32
|
+
*
|
|
33
|
+
* IMPLEMENTATION NOTE:
|
|
34
|
+
* The Attio Notes API (/notes endpoint) does not support native text search.
|
|
35
|
+
* It only supports filtering by parent_object and parent_record_id.
|
|
36
|
+
* Therefore, we fetch all notes and apply client-side filtering for search queries.
|
|
37
|
+
*/
|
|
38
|
+
export class NoteSearchStrategy extends BaseSearchStrategy {
|
|
39
|
+
constructor(dependencies) {
|
|
40
|
+
super(dependencies);
|
|
41
|
+
}
|
|
42
|
+
getResourceType() {
|
|
43
|
+
return UniversalResourceType.NOTES;
|
|
44
|
+
}
|
|
45
|
+
supportsAdvancedFiltering() {
|
|
46
|
+
return false; // Notes only support basic search
|
|
47
|
+
}
|
|
48
|
+
supportsQuerySearch() {
|
|
49
|
+
return true; // Notes support content search via applyContentSearch method
|
|
50
|
+
}
|
|
51
|
+
async search(params) {
|
|
52
|
+
const { query, limit, offset, search_type = SearchType.BASIC, fields, match_type = MatchType.PARTIAL, sort = SortType.NAME, filters, } = params;
|
|
53
|
+
// Extract performance tracking IDs from parameters (passed via dependencies)
|
|
54
|
+
const perfId = 'notes_search'; // Default fallback
|
|
55
|
+
const apiStart = performance.now();
|
|
56
|
+
return this.searchNotes(perfId, apiStart, query, limit, offset, search_type, fields, match_type, sort, filters);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Search notes with performance optimization, caching, and content search support
|
|
60
|
+
*
|
|
61
|
+
* PERFORMANCE-OPTIMIZED NOTES PAGINATION
|
|
62
|
+
*
|
|
63
|
+
* The Attio Notes API does not support native text search or advanced filtering.
|
|
64
|
+
* This implementation uses smart caching and performance monitoring to
|
|
65
|
+
* minimize the performance impact of loading all notes.
|
|
66
|
+
*
|
|
67
|
+
* Optimizations:
|
|
68
|
+
* - Smart caching with 30-second TTL to avoid repeated full loads
|
|
69
|
+
* - Performance warnings for large datasets (>500 notes)
|
|
70
|
+
* - Early termination for large offsets
|
|
71
|
+
* - Memory usage monitoring and cleanup
|
|
72
|
+
*/
|
|
73
|
+
async searchNotes(perfId, apiStart, query, limit, offset, search_type = SearchType.BASIC, fields, match_type = MatchType.PARTIAL, sort = SortType.NAME, filters) {
|
|
74
|
+
const log = createScopedLogger('NoteSearchStrategy', 'notes_search', OperationType.DATA_PROCESSING);
|
|
75
|
+
// Use CachingService for notes data management
|
|
76
|
+
const loadNotesData = async () => {
|
|
77
|
+
try {
|
|
78
|
+
if (!this.dependencies.noteFunction) {
|
|
79
|
+
throw new Error('Notes list function not available');
|
|
80
|
+
}
|
|
81
|
+
// Build query params for filtering if provided
|
|
82
|
+
const queryParams = {};
|
|
83
|
+
if (filters) {
|
|
84
|
+
if (filters.parent_object || filters.linked_record_type) {
|
|
85
|
+
queryParams.parent_object =
|
|
86
|
+
filters.parent_object || filters.linked_record_type;
|
|
87
|
+
}
|
|
88
|
+
if (filters.parent_record_id || filters.linked_record_id) {
|
|
89
|
+
queryParams.parent_record_id =
|
|
90
|
+
filters.parent_record_id || filters.linked_record_id;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const notesResponse = await this.dependencies.noteFunction(queryParams);
|
|
94
|
+
const notesList = notesResponse.data || [];
|
|
95
|
+
// Convert notes to records and ensure it's always an array
|
|
96
|
+
if (!Array.isArray(notesList)) {
|
|
97
|
+
log.warn('NOTES API WARNING: listNotes() returned non-array value', {
|
|
98
|
+
returnedType: typeof notesList,
|
|
99
|
+
});
|
|
100
|
+
return [];
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
// Convert AttioNote[] to AttioRecord[]
|
|
104
|
+
// Cast to AttioNote[] since we know the API returns notes
|
|
105
|
+
return notesList.map((note) => this.convertNoteToRecord(note));
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
log.error('Failed to load notes from API', error);
|
|
110
|
+
return []; // Fallback to empty array
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
// Generate cache key based on parent filters to prevent collisions
|
|
114
|
+
const cacheKey = CachingService.getNotesListCacheKey(filters);
|
|
115
|
+
const { data: notes, fromCache } = await CachingService.getOrLoadNotes(loadNotesData, cacheKey);
|
|
116
|
+
// Performance warning for large datasets
|
|
117
|
+
if (!fromCache && notes.length > NOTES_PERFORMANCE_WARNING_THRESHOLD) {
|
|
118
|
+
log.warn('PERFORMANCE WARNING: Large notes load', {
|
|
119
|
+
noteCount: notes.length,
|
|
120
|
+
threshold: NOTES_PERFORMANCE_WARNING_THRESHOLD,
|
|
121
|
+
recommendation: 'Consider requesting Attio API pagination support for notes endpoint.',
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
// Log performance metrics
|
|
125
|
+
if (!fromCache) {
|
|
126
|
+
enhancedPerformanceTracker.markTiming(perfId, 'attioApi', performance.now() - apiStart);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
enhancedPerformanceTracker.markTiming(perfId, 'other', 1);
|
|
130
|
+
}
|
|
131
|
+
// Handle empty dataset cleanly
|
|
132
|
+
if (notes.length === 0) {
|
|
133
|
+
return []; // No warning for empty datasets
|
|
134
|
+
}
|
|
135
|
+
// Apply content search filtering if requested
|
|
136
|
+
let filteredNotes = notes;
|
|
137
|
+
if (search_type === SearchType.CONTENT && query && query.trim()) {
|
|
138
|
+
filteredNotes = this.applyContentSearch(notes, query.trim(), fields, match_type, sort);
|
|
139
|
+
}
|
|
140
|
+
else if (query && query.trim()) {
|
|
141
|
+
// For BASIC search type, also apply content filtering
|
|
142
|
+
filteredNotes = this.applyContentSearch(notes, query.trim(), fields, match_type, sort);
|
|
143
|
+
}
|
|
144
|
+
// Smart pagination with early termination for unreasonable offsets
|
|
145
|
+
const start = offset || 0;
|
|
146
|
+
const requestedLimit = limit || 10;
|
|
147
|
+
// Performance optimization: Don't process if offset exceeds dataset
|
|
148
|
+
if (start >= filteredNotes.length) {
|
|
149
|
+
log.info('Notes pagination offset exceeds dataset size', {
|
|
150
|
+
offset: start,
|
|
151
|
+
filteredSize: filteredNotes.length,
|
|
152
|
+
action: 'returning empty results',
|
|
153
|
+
});
|
|
154
|
+
return [];
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
const end = Math.min(start + requestedLimit, filteredNotes.length);
|
|
158
|
+
const paginatedNotes = filteredNotes.slice(start, end);
|
|
159
|
+
// Log pagination performance metrics
|
|
160
|
+
enhancedPerformanceTracker.markTiming(perfId, 'serialization', fromCache ? 1 : performance.now() - apiStart);
|
|
161
|
+
return paginatedNotes;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Apply content search filtering to notes
|
|
166
|
+
*/
|
|
167
|
+
applyContentSearch(notes, query, fields, matchType = MatchType.PARTIAL, sort = SortType.NAME) {
|
|
168
|
+
const searchFields = fields || [
|
|
169
|
+
'title',
|
|
170
|
+
'content_markdown',
|
|
171
|
+
'content_plaintext',
|
|
172
|
+
];
|
|
173
|
+
const queryLower = query.toLowerCase();
|
|
174
|
+
let filteredNotes = notes.filter((note) => {
|
|
175
|
+
return searchFields.some((field) => {
|
|
176
|
+
const fieldValue = SearchUtilities.getNoteFieldValue(note, field);
|
|
177
|
+
if (matchType === MatchType.EXACT) {
|
|
178
|
+
return fieldValue.toLowerCase() === queryLower;
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
return fieldValue.toLowerCase().includes(queryLower);
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
// Apply relevance ranking if requested
|
|
186
|
+
if (sort === SortType.RELEVANCE) {
|
|
187
|
+
filteredNotes = SearchUtilities.rankByRelevance(filteredNotes, query, searchFields);
|
|
188
|
+
}
|
|
189
|
+
return filteredNotes;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Convert AttioNote to AttioRecord format
|
|
193
|
+
*/
|
|
194
|
+
convertNoteToRecord(note) {
|
|
195
|
+
// Handle id field which can be string or AttioNoteIdentifier
|
|
196
|
+
const noteId = typeof note.id === 'string' ? note.id : note.id?.note_id || '';
|
|
197
|
+
// Extract content fields - API returns content_markdown, content_plaintext, or content
|
|
198
|
+
// Match the normalization logic from src/objects/notes.ts:normalizeNoteResponse
|
|
199
|
+
const contentMarkdown = (note.content_markdown ??
|
|
200
|
+
note.content ??
|
|
201
|
+
'');
|
|
202
|
+
const contentPlaintext = (note.content_plaintext ??
|
|
203
|
+
note.content ??
|
|
204
|
+
'');
|
|
205
|
+
// Return properly typed record satisfying AttioRecord interface
|
|
206
|
+
const record = {
|
|
207
|
+
id: {
|
|
208
|
+
record_id: noteId,
|
|
209
|
+
note_id: noteId,
|
|
210
|
+
},
|
|
211
|
+
values: {
|
|
212
|
+
title: note.title || '',
|
|
213
|
+
content_markdown: contentMarkdown,
|
|
214
|
+
content_plaintext: contentPlaintext,
|
|
215
|
+
parent_object: note.parent_object || '',
|
|
216
|
+
parent_record_id: note.parent_record_id || '',
|
|
217
|
+
created_at: note.created_at || '',
|
|
218
|
+
created_by_actor: note.created_by_actor,
|
|
219
|
+
},
|
|
220
|
+
};
|
|
221
|
+
return record;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=NoteSearchStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NoteSearchStrategy.js","sourceRoot":"","sources":["../../../src/services/search-strategies/NoteSearchStrategy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PeopleSearchStrategy.d.ts","sourceRoot":"","sources":["../../../src/services/search-strategies/PeopleSearchStrategy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAOnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAK7E;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,kBAAkB;gBAC9C,YAAY,EAAE,oBAAoB;IAI9C,eAAe,IAAI,MAAM;IAIzB,yBAAyB,IAAI,OAAO;IAIpC,mBAAmB,IAAI,OAAO;IAIxB,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAyClE;;OAEG;YACW,iBAAiB;IA4B/B;;OAEG;YACW,eAAe;
|
|
1
|
+
{"version":3,"file":"PeopleSearchStrategy.d.ts","sourceRoot":"","sources":["../../../src/services/search-strategies/PeopleSearchStrategy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAOnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAK7E;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,kBAAkB;gBAC9C,YAAY,EAAE,oBAAoB;IAI9C,eAAe,IAAI,MAAM;IAIzB,yBAAyB,IAAI,OAAO;IAIpC,mBAAmB,IAAI,OAAO;IAIxB,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAyClE;;OAEG;YACW,iBAAiB;IA4B/B;;OAEG;YACW,eAAe;IA2C7B;;OAEG;YACW,kBAAkB;IAsBhC;;OAEG;YACW,aAAa;IA6B3B;;OAEG;YACW,eAAe;IA0C7B;;OAEG;YACW,oBAAoB;CAmCnC"}
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
import { SearchType, MatchType, SortType, UniversalResourceType, } from '../../handlers/tool-configs/universal/types.js';
|
|
6
6
|
import { BaseSearchStrategy } from './BaseSearchStrategy.js';
|
|
7
7
|
import { FilterValidationError } from '../../errors/api-errors.js';
|
|
8
|
-
import { buildPeopleQueryFilters } from './query-filter-builder.js';
|
|
9
8
|
/**
|
|
10
9
|
* Search strategy for people with advanced filtering, name/email search, and content search
|
|
11
10
|
*/
|
|
@@ -72,20 +71,19 @@ export class PeopleSearchStrategy extends BaseSearchStrategy {
|
|
|
72
71
|
return this.searchByContent(query, fields, matchType, sort, limit, offset);
|
|
73
72
|
}
|
|
74
73
|
else {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
return this.searchByNameAndEmail(query, matchType, limit, offset);
|
|
74
|
+
// For simple text queries without special fields/filters,
|
|
75
|
+
// use searchObject which includes fast path optimization
|
|
76
|
+
const { searchObject } = await import('../../api/operations/search.js');
|
|
77
|
+
const { ResourceType } = await import('../../types/attio.js');
|
|
78
|
+
// Calculate total records needed: offset + limit
|
|
79
|
+
const start = offset || 0;
|
|
80
|
+
const effectiveLimit = limit ? start + limit : undefined;
|
|
81
|
+
const results = await searchObject(ResourceType.PEOPLE, query, {
|
|
82
|
+
limit: effectiveLimit,
|
|
83
|
+
});
|
|
84
|
+
// Apply offset to slice the results
|
|
85
|
+
const end = limit ? start + limit : undefined;
|
|
86
|
+
return results.slice(start, end);
|
|
89
87
|
}
|
|
90
88
|
}
|
|
91
89
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PeopleSearchStrategy.js","sourceRoot":"","sources":["../../../src/services/search-strategies/PeopleSearchStrategy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,UAAU,EACV,SAAS,EACT,QAAQ,EACR,qBAAqB,GACtB,MAAM,gDAAgD,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"PeopleSearchStrategy.js","sourceRoot":"","sources":["../../../src/services/search-strategies/PeopleSearchStrategy.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,8 @@ export type { ISearchStrategy, SearchStrategyParams, StrategyDependencies, Timef
|
|
|
6
6
|
export { BaseSearchStrategy } from './BaseSearchStrategy.js';
|
|
7
7
|
export { CompanySearchStrategy } from './CompanySearchStrategy.js';
|
|
8
8
|
export { PeopleSearchStrategy } from './PeopleSearchStrategy.js';
|
|
9
|
+
export { DealSearchStrategy } from './DealSearchStrategy.js';
|
|
9
10
|
export { TaskSearchStrategy } from './TaskSearchStrategy.js';
|
|
10
11
|
export { ListSearchStrategy } from './ListSearchStrategy.js';
|
|
12
|
+
export { NoteSearchStrategy } from './NoteSearchStrategy.js';
|
|
11
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/search-strategies/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EACV,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/search-strategies/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EACV,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
export { BaseSearchStrategy } from './BaseSearchStrategy.js';
|
|
6
6
|
export { CompanySearchStrategy } from './CompanySearchStrategy.js';
|
|
7
7
|
export { PeopleSearchStrategy } from './PeopleSearchStrategy.js';
|
|
8
|
+
export { DealSearchStrategy } from './DealSearchStrategy.js';
|
|
8
9
|
export { TaskSearchStrategy } from './TaskSearchStrategy.js';
|
|
9
10
|
export { ListSearchStrategy } from './ListSearchStrategy.js';
|
|
11
|
+
export { NoteSearchStrategy } from './NoteSearchStrategy.js';
|
|
10
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/search-strategies/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/search-strategies/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -61,6 +61,12 @@ export interface StrategyDependencies {
|
|
|
61
61
|
}>) | null;
|
|
62
62
|
listFunction?: (query?: string, limit?: number, offset?: number) => Promise<AttioList[]>;
|
|
63
63
|
taskFunction?: (status?: string, assigneeId?: string, page?: number, pageSize?: number) => Promise<AttioTask[]>;
|
|
64
|
+
noteFunction?: (query?: Record<string, unknown>) => Promise<{
|
|
65
|
+
data: unknown[];
|
|
66
|
+
meta?: {
|
|
67
|
+
next_cursor?: string;
|
|
68
|
+
};
|
|
69
|
+
}>;
|
|
64
70
|
createDateFilter?: (params: TimeframeParams) => Record<string, unknown> | null;
|
|
65
71
|
mergeFilters?: (existing: Record<string, unknown> | undefined, dateFilter: Record<string, unknown>) => Record<string, unknown>;
|
|
66
72
|
rankByRelevance?: (results: AttioRecord[], query: string, searchFields: string[]) => AttioRecord[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/services/search-strategies/interfaces.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EACL,UAAU,EACV,SAAS,EACT,QAAQ,EACT,MAAM,gDAAgD,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,cAAc,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC;CACrE;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAE7D;;OAEG;IACH,eAAe,IAAI,MAAM,CAAC;IAE1B;;OAEG;IACH,yBAAyB,IAAI,OAAO,CAAC;IAErC;;OAEG;IACH,mBAAmB,IAAI,OAAO,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IAEnC,sBAAsB,CAAC,EACnB,CAAC,CACC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,KACZ,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,GAC5B,IAAI,CAAC;IACT,uBAAuB,CAAC,EACpB,CAAC,CACC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,UAAU,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAC5C,OAAO,CAAC;QAAE,OAAO,EAAE,WAAW,EAAE,CAAA;KAAE,CAAC,CAAC,GACzC,IAAI,CAAC;IACT,YAAY,CAAC,EAAE,CACb,KAAK,CAAC,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,KACZ,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC1B,YAAY,CAAC,EAAE,CACb,MAAM,CAAC,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,KACd,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/services/search-strategies/interfaces.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ParsedQuery } from '../../api/operations/query-parser.js';
|
|
2
|
+
import { AttioRecord } from '../../types/attio.js';
|
|
3
|
+
export declare function scoreAndRank<T extends AttioRecord>(query: string, results: T[], parsedInput?: ParsedQuery): T[];
|
|
4
|
+
//# sourceMappingURL=SearchScorer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchScorer.d.ts","sourceRoot":"","sources":["../../../src/services/search-utilities/SearchScorer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAoS/C,wBAAgB,YAAY,CAAC,CAAC,SAAS,WAAW,EAChD,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,CAAC,EAAE,EACZ,WAAW,CAAC,EAAE,WAAW,GACxB,CAAC,EAAE,CA6BL"}
|