@simpleapps-com/augur-api 0.2.3 → 0.2.5
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/README.md +100 -0
- package/dist/cjs/client.d.ts +181 -0
- package/dist/cjs/client.d.ts.map +1 -1
- package/dist/cjs/client.js +449 -0
- package/dist/cjs/client.js.map +1 -1
- package/dist/cjs/core/base-client.d.ts +104 -0
- package/dist/cjs/core/base-client.d.ts.map +1 -1
- package/dist/cjs/core/base-client.js +201 -0
- package/dist/cjs/core/base-client.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/services/agr-site/client.d.ts +522 -2
- package/dist/cjs/services/agr-site/client.d.ts.map +1 -1
- package/dist/cjs/services/agr-site/client.js +565 -12
- package/dist/cjs/services/agr-site/client.js.map +1 -1
- package/dist/cjs/services/items/client.d.ts +2 -2
- package/dist/cjs/services/items/schemas/categories.d.ts +20 -20
- package/dist/cjs/services/joomla/client.d.ts +644 -99
- package/dist/cjs/services/joomla/client.d.ts.map +1 -1
- package/dist/cjs/services/joomla/client.js +467 -98
- package/dist/cjs/services/joomla/client.js.map +1 -1
- package/dist/cjs/services/nexus/client.d.ts +1096 -22
- package/dist/cjs/services/nexus/client.d.ts.map +1 -1
- package/dist/cjs/services/nexus/client.js +754 -22
- package/dist/cjs/services/nexus/client.js.map +1 -1
- package/dist/cjs/services/orders/client.d.ts +3 -3
- package/dist/cjs/services/orders/schemas/orders.d.ts +12 -12
- package/dist/cjs/services/orders/schemas/purchase-orders.d.ts +22 -22
- package/dist/cjs/services/p21-core/client.d.ts +627 -0
- package/dist/cjs/services/p21-core/client.d.ts.map +1 -0
- package/dist/cjs/services/p21-core/client.js +704 -0
- package/dist/cjs/services/p21-core/client.js.map +1 -0
- package/dist/cjs/services/p21-core/index.d.ts +3 -0
- package/dist/cjs/services/p21-core/index.d.ts.map +1 -0
- package/dist/cjs/services/p21-core/index.js +21 -0
- package/dist/cjs/services/p21-core/index.js.map +1 -0
- package/dist/cjs/services/p21-core/schemas/address.d.ts +88 -0
- package/dist/cjs/services/p21-core/schemas/address.d.ts.map +1 -0
- package/dist/cjs/services/p21-core/schemas/address.js +45 -0
- package/dist/cjs/services/p21-core/schemas/address.js.map +1 -0
- package/dist/cjs/services/p21-core/schemas/cash-drawer.d.ts +96 -0
- package/dist/cjs/services/p21-core/schemas/cash-drawer.d.ts.map +1 -0
- package/dist/cjs/services/p21-core/schemas/cash-drawer.js +39 -0
- package/dist/cjs/services/p21-core/schemas/cash-drawer.js.map +1 -0
- package/dist/cjs/services/p21-core/schemas/codes.d.ts +54 -0
- package/dist/cjs/services/p21-core/schemas/codes.d.ts.map +1 -0
- package/dist/cjs/services/p21-core/schemas/codes.js +25 -0
- package/dist/cjs/services/p21-core/schemas/codes.js.map +1 -0
- package/dist/cjs/services/p21-core/schemas/company.d.ts +80 -0
- package/dist/cjs/services/p21-core/schemas/company.d.ts.map +1 -0
- package/dist/cjs/services/p21-core/schemas/company.js +35 -0
- package/dist/cjs/services/p21-core/schemas/company.js.map +1 -0
- package/dist/cjs/services/p21-core/schemas/health.d.ts +46 -0
- package/dist/cjs/services/p21-core/schemas/health.d.ts.map +1 -0
- package/dist/cjs/services/p21-core/schemas/health.js +7 -0
- package/dist/cjs/services/p21-core/schemas/health.js.map +1 -0
- package/dist/cjs/services/p21-core/schemas/index.d.ts +8 -0
- package/dist/cjs/services/p21-core/schemas/index.d.ts.map +1 -0
- package/dist/cjs/services/p21-core/schemas/index.js +25 -0
- package/dist/cjs/services/p21-core/schemas/index.js.map +1 -0
- package/dist/cjs/services/p21-core/schemas/location.d.ts +84 -0
- package/dist/cjs/services/p21-core/schemas/location.d.ts.map +1 -0
- package/dist/cjs/services/p21-core/schemas/location.js +35 -0
- package/dist/cjs/services/p21-core/schemas/location.js.map +1 -0
- package/dist/cjs/services/p21-core/schemas/payment-types.d.ts +39 -0
- package/dist/cjs/services/p21-core/schemas/payment-types.d.ts.map +1 -0
- package/dist/cjs/services/p21-core/schemas/payment-types.js +26 -0
- package/dist/cjs/services/p21-core/schemas/payment-types.js.map +1 -0
- package/dist/cjs/services/p21-core/schemas.d.ts +2 -0
- package/dist/cjs/services/p21-core/schemas.d.ts.map +1 -0
- package/dist/cjs/services/p21-core/schemas.js +19 -0
- package/dist/cjs/services/p21-core/schemas.js.map +1 -0
- package/dist/cjs/services/vmi/schemas/inventory.d.ts +6 -6
- package/dist/cjs/services/vmi/schemas/products.d.ts +6 -6
- package/dist/cjs/services/vmi/schemas/restock.d.ts +12 -12
- package/dist/esm/client.d.ts +181 -0
- package/dist/esm/client.d.ts.map +1 -1
- package/dist/esm/client.js +449 -0
- package/dist/esm/client.js.map +1 -1
- package/dist/esm/core/base-client.d.ts +104 -0
- package/dist/esm/core/base-client.d.ts.map +1 -1
- package/dist/esm/core/base-client.js +201 -0
- package/dist/esm/core/base-client.js.map +1 -1
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/services/agr-site/client.d.ts +522 -2
- package/dist/esm/services/agr-site/client.d.ts.map +1 -1
- package/dist/esm/services/agr-site/client.js +565 -12
- package/dist/esm/services/agr-site/client.js.map +1 -1
- package/dist/esm/services/items/client.d.ts +2 -2
- package/dist/esm/services/items/schemas/categories.d.ts +20 -20
- package/dist/esm/services/joomla/client.d.ts +644 -99
- package/dist/esm/services/joomla/client.d.ts.map +1 -1
- package/dist/esm/services/joomla/client.js +467 -98
- package/dist/esm/services/joomla/client.js.map +1 -1
- package/dist/esm/services/nexus/client.d.ts +1096 -22
- package/dist/esm/services/nexus/client.d.ts.map +1 -1
- package/dist/esm/services/nexus/client.js +754 -22
- package/dist/esm/services/nexus/client.js.map +1 -1
- package/dist/esm/services/orders/client.d.ts +3 -3
- package/dist/esm/services/orders/schemas/orders.d.ts +12 -12
- package/dist/esm/services/orders/schemas/purchase-orders.d.ts +22 -22
- package/dist/esm/services/p21-core/client.d.ts +627 -0
- package/dist/esm/services/p21-core/client.d.ts.map +1 -0
- package/dist/esm/services/p21-core/client.js +700 -0
- package/dist/esm/services/p21-core/client.js.map +1 -0
- package/dist/esm/services/p21-core/index.d.ts +3 -0
- package/dist/esm/services/p21-core/index.d.ts.map +1 -0
- package/dist/esm/services/p21-core/index.js +3 -0
- package/dist/esm/services/p21-core/index.js.map +1 -0
- package/dist/esm/services/p21-core/schemas/address.d.ts +88 -0
- package/dist/esm/services/p21-core/schemas/address.d.ts.map +1 -0
- package/dist/esm/services/p21-core/schemas/address.js +42 -0
- package/dist/esm/services/p21-core/schemas/address.js.map +1 -0
- package/dist/esm/services/p21-core/schemas/cash-drawer.d.ts +96 -0
- package/dist/esm/services/p21-core/schemas/cash-drawer.d.ts.map +1 -0
- package/dist/esm/services/p21-core/schemas/cash-drawer.js +36 -0
- package/dist/esm/services/p21-core/schemas/cash-drawer.js.map +1 -0
- package/dist/esm/services/p21-core/schemas/codes.d.ts +54 -0
- package/dist/esm/services/p21-core/schemas/codes.d.ts.map +1 -0
- package/dist/esm/services/p21-core/schemas/codes.js +22 -0
- package/dist/esm/services/p21-core/schemas/codes.js.map +1 -0
- package/dist/esm/services/p21-core/schemas/company.d.ts +80 -0
- package/dist/esm/services/p21-core/schemas/company.d.ts.map +1 -0
- package/dist/esm/services/p21-core/schemas/company.js +32 -0
- package/dist/esm/services/p21-core/schemas/company.js.map +1 -0
- package/dist/esm/services/p21-core/schemas/health.d.ts +46 -0
- package/dist/esm/services/p21-core/schemas/health.d.ts.map +1 -0
- package/dist/esm/services/p21-core/schemas/health.js +4 -0
- package/dist/esm/services/p21-core/schemas/health.js.map +1 -0
- package/dist/esm/services/p21-core/schemas/index.d.ts +8 -0
- package/dist/esm/services/p21-core/schemas/index.d.ts.map +1 -0
- package/dist/esm/services/p21-core/schemas/index.js +9 -0
- package/dist/esm/services/p21-core/schemas/index.js.map +1 -0
- package/dist/esm/services/p21-core/schemas/location.d.ts +84 -0
- package/dist/esm/services/p21-core/schemas/location.d.ts.map +1 -0
- package/dist/esm/services/p21-core/schemas/location.js +32 -0
- package/dist/esm/services/p21-core/schemas/location.js.map +1 -0
- package/dist/esm/services/p21-core/schemas/payment-types.d.ts +39 -0
- package/dist/esm/services/p21-core/schemas/payment-types.d.ts.map +1 -0
- package/dist/esm/services/p21-core/schemas/payment-types.js +23 -0
- package/dist/esm/services/p21-core/schemas/payment-types.js.map +1 -0
- package/dist/esm/services/p21-core/schemas.d.ts +2 -0
- package/dist/esm/services/p21-core/schemas.d.ts.map +1 -0
- package/dist/esm/services/p21-core/schemas.js +3 -0
- package/dist/esm/services/p21-core/schemas.js.map +1 -0
- package/dist/esm/services/vmi/schemas/inventory.d.ts +6 -6
- package/dist/esm/services/vmi/schemas/products.d.ts +6 -6
- package/dist/esm/services/vmi/schemas/restock.d.ts +12 -12
- package/dist/types/client.d.ts +181 -0
- package/dist/types/client.d.ts.map +1 -1
- package/dist/types/core/base-client.d.ts +104 -0
- package/dist/types/core/base-client.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/services/agr-site/client.d.ts +522 -2
- package/dist/types/services/agr-site/client.d.ts.map +1 -1
- package/dist/types/services/items/client.d.ts +2 -2
- package/dist/types/services/items/schemas/categories.d.ts +20 -20
- package/dist/types/services/joomla/client.d.ts +644 -99
- package/dist/types/services/joomla/client.d.ts.map +1 -1
- package/dist/types/services/nexus/client.d.ts +1096 -22
- package/dist/types/services/nexus/client.d.ts.map +1 -1
- package/dist/types/services/orders/client.d.ts +3 -3
- package/dist/types/services/orders/schemas/orders.d.ts +12 -12
- package/dist/types/services/orders/schemas/purchase-orders.d.ts +22 -22
- package/dist/types/services/p21-core/client.d.ts +627 -0
- package/dist/types/services/p21-core/client.d.ts.map +1 -0
- package/dist/types/services/p21-core/index.d.ts +3 -0
- package/dist/types/services/p21-core/index.d.ts.map +1 -0
- package/dist/types/services/p21-core/schemas/address.d.ts +88 -0
- package/dist/types/services/p21-core/schemas/address.d.ts.map +1 -0
- package/dist/types/services/p21-core/schemas/cash-drawer.d.ts +96 -0
- package/dist/types/services/p21-core/schemas/cash-drawer.d.ts.map +1 -0
- package/dist/types/services/p21-core/schemas/codes.d.ts +54 -0
- package/dist/types/services/p21-core/schemas/codes.d.ts.map +1 -0
- package/dist/types/services/p21-core/schemas/company.d.ts +80 -0
- package/dist/types/services/p21-core/schemas/company.d.ts.map +1 -0
- package/dist/types/services/p21-core/schemas/health.d.ts +46 -0
- package/dist/types/services/p21-core/schemas/health.d.ts.map +1 -0
- package/dist/types/services/p21-core/schemas/index.d.ts +8 -0
- package/dist/types/services/p21-core/schemas/index.d.ts.map +1 -0
- package/dist/types/services/p21-core/schemas/location.d.ts +84 -0
- package/dist/types/services/p21-core/schemas/location.d.ts.map +1 -0
- package/dist/types/services/p21-core/schemas/payment-types.d.ts +39 -0
- package/dist/types/services/p21-core/schemas/payment-types.d.ts.map +1 -0
- package/dist/types/services/p21-core/schemas.d.ts +2 -0
- package/dist/types/services/p21-core/schemas.d.ts.map +1 -0
- package/dist/types/services/vmi/schemas/inventory.d.ts +6 -6
- package/dist/types/services/vmi/schemas/products.d.ts +6 -6
- package/dist/types/services/vmi/schemas/restock.d.ts +12 -12
- package/package.json +1 -1
package/dist/esm/client.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AugurAPIConfig } from './core/config';
|
|
2
|
+
import { DiscoveryEndpoint as BaseDiscoveryEndpoint } from './core/base-client';
|
|
2
3
|
import { JoomlaClient } from './services/joomla';
|
|
3
4
|
import { CommerceClient } from './services/commerce';
|
|
4
5
|
import { PricingClient } from './services/pricing';
|
|
@@ -12,6 +13,36 @@ import { CustomersClient } from './services/customers';
|
|
|
12
13
|
import { OrdersClient } from './services/orders';
|
|
13
14
|
import { P21PimClient } from './services/p21-pim';
|
|
14
15
|
import { PaymentsClient } from './services/payments';
|
|
16
|
+
/**
|
|
17
|
+
* Interface for discovery endpoint information - re-export base discovery endpoint
|
|
18
|
+
*/
|
|
19
|
+
export type DiscoveryEndpoint = BaseDiscoveryEndpoint;
|
|
20
|
+
/**
|
|
21
|
+
* Interface for service discovery results
|
|
22
|
+
*/
|
|
23
|
+
export interface ServiceMap {
|
|
24
|
+
/** Service name */
|
|
25
|
+
serviceName: string;
|
|
26
|
+
/** Service description */
|
|
27
|
+
description: string;
|
|
28
|
+
/** Base URL for the service */
|
|
29
|
+
baseUrl: string;
|
|
30
|
+
/** Number of discoverable endpoints */
|
|
31
|
+
endpointCount: number;
|
|
32
|
+
/** Array of discoverable endpoints */
|
|
33
|
+
endpoints: DiscoveryEndpoint[];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Interface for endpoint search results
|
|
37
|
+
*/
|
|
38
|
+
export interface EndpointSearchResult {
|
|
39
|
+
/** The matching endpoint */
|
|
40
|
+
endpoint: DiscoveryEndpoint;
|
|
41
|
+
/** Relevance score (0-1) */
|
|
42
|
+
score: number;
|
|
43
|
+
/** Reason why this endpoint matched */
|
|
44
|
+
matchReason: string;
|
|
45
|
+
}
|
|
15
46
|
/**
|
|
16
47
|
* Main client factory for accessing Augur microservices
|
|
17
48
|
*
|
|
@@ -172,5 +203,155 @@ export declare class AugurAPI {
|
|
|
172
203
|
* @param siteId New site ID
|
|
173
204
|
*/
|
|
174
205
|
setSiteId(siteId: string): void;
|
|
206
|
+
/**
|
|
207
|
+
* Discover all available services and their capabilities
|
|
208
|
+
*
|
|
209
|
+
* Returns a complete service map showing all discoverable endpoints across
|
|
210
|
+
* all microservices, enabling AI agents to understand the full API topology.
|
|
211
|
+
*
|
|
212
|
+
* @returns Promise<ServiceMap[]> Array of service maps with endpoint metadata
|
|
213
|
+
*
|
|
214
|
+
* @example
|
|
215
|
+
* ```typescript
|
|
216
|
+
* const api = new AugurAPI({ siteId: 'my-site', bearerToken: 'token' });
|
|
217
|
+
* const services = await api.discover();
|
|
218
|
+
*
|
|
219
|
+
* // Find all user-related endpoints
|
|
220
|
+
* const userEndpoints = services.flatMap(s => s.endpoints)
|
|
221
|
+
* .filter(e => e.searchTerms.some(term => term.includes('user')));
|
|
222
|
+
*
|
|
223
|
+
* // Show service capabilities
|
|
224
|
+
* services.forEach(service => {
|
|
225
|
+
* console.log(`${service.serviceName}: ${service.endpointCount} endpoints`);
|
|
226
|
+
* service.endpoints.forEach(endpoint => {
|
|
227
|
+
* console.log(` ${endpoint.fullPath} - ${endpoint.description}`);
|
|
228
|
+
* });
|
|
229
|
+
* });
|
|
230
|
+
* ```
|
|
231
|
+
*/
|
|
232
|
+
discover(): Promise<ServiceMap[]>;
|
|
233
|
+
/**
|
|
234
|
+
* Find endpoints by search term or functionality description
|
|
235
|
+
*
|
|
236
|
+
* Searches across all services to find endpoints that match the given search term.
|
|
237
|
+
* Uses intelligent matching against endpoint descriptions, search terms, domains,
|
|
238
|
+
* and common usage patterns.
|
|
239
|
+
*
|
|
240
|
+
* @param searchTerm The functionality or term to search for
|
|
241
|
+
* @param options Search options for filtering and ranking
|
|
242
|
+
* @returns Promise<EndpointSearchResult[]> Array of matching endpoints with relevance scores
|
|
243
|
+
*
|
|
244
|
+
* @example
|
|
245
|
+
* ```typescript
|
|
246
|
+
* const api = new AugurAPI({ siteId: 'my-site', bearerToken: 'token' });
|
|
247
|
+
*
|
|
248
|
+
* // Find user-related endpoints
|
|
249
|
+
* const userEndpoints = await api.findEndpoint('users');
|
|
250
|
+
* console.log(`Found ${userEndpoints.length} user-related endpoints`);
|
|
251
|
+
*
|
|
252
|
+
* // Find authentication endpoints
|
|
253
|
+
* const authEndpoints = await api.findEndpoint('authentication');
|
|
254
|
+
*
|
|
255
|
+
* // Find inventory management
|
|
256
|
+
* const inventoryEndpoints = await api.findEndpoint('inventory management');
|
|
257
|
+
*
|
|
258
|
+
* // Show results with scores
|
|
259
|
+
* userEndpoints.forEach(result => {
|
|
260
|
+
* console.log(`${result.endpoint.fullPath} (${result.score.toFixed(2)}) - ${result.matchReason}`);
|
|
261
|
+
* });
|
|
262
|
+
* ```
|
|
263
|
+
*/
|
|
264
|
+
findEndpoint(searchTerm: string, options?: {
|
|
265
|
+
/** Minimum relevance score (0-1, default: 0.1) */
|
|
266
|
+
minScore?: number;
|
|
267
|
+
/** Maximum number of results (default: 10) */
|
|
268
|
+
maxResults?: number;
|
|
269
|
+
/** Filter by specific service */
|
|
270
|
+
service?: string;
|
|
271
|
+
/** Filter by business domain */
|
|
272
|
+
domain?: string;
|
|
273
|
+
/** Include only GET endpoints */
|
|
274
|
+
readOnly?: boolean;
|
|
275
|
+
}): Promise<EndpointSearchResult[]>;
|
|
276
|
+
/**
|
|
277
|
+
* Get endpoints filtered by service, domain, and method options
|
|
278
|
+
*/
|
|
279
|
+
private getFilteredEndpoints;
|
|
280
|
+
/**
|
|
281
|
+
* Search and score endpoints against search term
|
|
282
|
+
*/
|
|
283
|
+
private searchAndScoreEndpoints;
|
|
284
|
+
/**
|
|
285
|
+
* Check if endpoint has required fields
|
|
286
|
+
*/
|
|
287
|
+
private isValidEndpoint;
|
|
288
|
+
/**
|
|
289
|
+
* Calculate final score with domain filter adjustments
|
|
290
|
+
*/
|
|
291
|
+
private calculateFinalScore;
|
|
292
|
+
/**
|
|
293
|
+
* Calculate relevance score for an endpoint against a search term
|
|
294
|
+
*/
|
|
295
|
+
private calculateEndpointRelevance;
|
|
296
|
+
/**
|
|
297
|
+
* Process exact matches with appropriate combining logic
|
|
298
|
+
*/
|
|
299
|
+
private processExactMatches;
|
|
300
|
+
/**
|
|
301
|
+
* Check if match type should be exclusive (no combining)
|
|
302
|
+
*/
|
|
303
|
+
private isExclusiveMatch;
|
|
304
|
+
/**
|
|
305
|
+
* Check if match type can be combined with partial matches
|
|
306
|
+
*/
|
|
307
|
+
private isCombinableMatch;
|
|
308
|
+
/**
|
|
309
|
+
* Process fallback matches when no exact match found
|
|
310
|
+
*/
|
|
311
|
+
private processFallbackMatches;
|
|
312
|
+
/**
|
|
313
|
+
* Calculate exact field matches with high scores
|
|
314
|
+
*/
|
|
315
|
+
private calculateExactMatches;
|
|
316
|
+
/**
|
|
317
|
+
* Check for path substring matches
|
|
318
|
+
*/
|
|
319
|
+
private checkPathSubstringMatch;
|
|
320
|
+
/**
|
|
321
|
+
* Check for description substring matches
|
|
322
|
+
*/
|
|
323
|
+
private checkDescriptionSubstringMatch;
|
|
324
|
+
/**
|
|
325
|
+
* Check for other substring matches (domain, service)
|
|
326
|
+
*/
|
|
327
|
+
private checkOtherSubstringMatches;
|
|
328
|
+
/**
|
|
329
|
+
* Check for exact field matches
|
|
330
|
+
*/
|
|
331
|
+
private checkExactFieldMatches;
|
|
332
|
+
/**
|
|
333
|
+
* Check search terms and common patterns
|
|
334
|
+
*/
|
|
335
|
+
private checkSearchTermsAndPatterns;
|
|
336
|
+
/**
|
|
337
|
+
* Calculate partial word matches with lower scores
|
|
338
|
+
*/
|
|
339
|
+
private calculatePartialMatches;
|
|
340
|
+
/**
|
|
341
|
+
* Build searchable text from endpoint fields
|
|
342
|
+
*/
|
|
343
|
+
private buildSearchableText;
|
|
344
|
+
/**
|
|
345
|
+
* Count matching words in text
|
|
346
|
+
*/
|
|
347
|
+
private countWordMatches;
|
|
348
|
+
/**
|
|
349
|
+
* Build partial match result with score and reason
|
|
350
|
+
*/
|
|
351
|
+
private buildPartialMatchResult;
|
|
352
|
+
/**
|
|
353
|
+
* Calculate multi-word matches by finding the best match for each word
|
|
354
|
+
*/
|
|
355
|
+
private calculateMultiWordMatches;
|
|
175
356
|
}
|
|
176
357
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/esm/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiFG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,OAAO,CAAC,CAAe;IAC/B,OAAO,CAAC,SAAS,CAAC,CAAiB;IACnC,OAAO,CAAC,QAAQ,CAAC,CAAgB;IACjC,OAAO,CAAC,IAAI,CAAC,CAAY;IACzB,OAAO,CAAC,WAAW,CAAC,CAAmB;IACvC,OAAO,CAAC,MAAM,CAAC,CAAc;IAC7B,OAAO,CAAC,OAAO,CAAC,CAAe;IAC/B,OAAO,CAAC,MAAM,CAAC,CAAc;IAC7B,OAAO,CAAC,QAAQ,CAAC,CAAgB;IACjC,OAAO,CAAC,UAAU,CAAC,CAAkB;IACrC,OAAO,CAAC,OAAO,CAAC,CAAe;IAC/B,OAAO,CAAC,OAAO,CAAC,CAAe;IAC/B,OAAO,CAAC,SAAS,CAAC,CAAiB;gBAEvB,MAAM,EAAE,cAAc;IAIlC;;OAEG;IACH,IAAI,MAAM,IAAI,YAAY,CAMzB;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,cAAc,CAM7B;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,aAAa,CAM3B;IAED;;OAEG;IACH,IAAI,GAAG,IAAI,SAAS,CAMnB;IAED;;OAEG;IACH,IAAI,UAAU,IAAI,gBAAgB,CAMjC;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,WAAW,CAMvB;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,YAAY,CAMzB;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,WAAW,CAMvB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,aAAa,CAM3B;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,eAAe,CAM/B;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,YAAY,CAMzB;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,YAAY,CAMzB;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,cAAc,CAM7B;IAED;;;OAGG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAkBvC;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/client.js
CHANGED
|
@@ -270,5 +270,454 @@ export class AugurAPI {
|
|
|
270
270
|
this._p21Pim = undefined;
|
|
271
271
|
this._payments = undefined;
|
|
272
272
|
}
|
|
273
|
+
/**
|
|
274
|
+
* Discover all available services and their capabilities
|
|
275
|
+
*
|
|
276
|
+
* Returns a complete service map showing all discoverable endpoints across
|
|
277
|
+
* all microservices, enabling AI agents to understand the full API topology.
|
|
278
|
+
*
|
|
279
|
+
* @returns Promise<ServiceMap[]> Array of service maps with endpoint metadata
|
|
280
|
+
*
|
|
281
|
+
* @example
|
|
282
|
+
* ```typescript
|
|
283
|
+
* const api = new AugurAPI({ siteId: 'my-site', bearerToken: 'token' });
|
|
284
|
+
* const services = await api.discover();
|
|
285
|
+
*
|
|
286
|
+
* // Find all user-related endpoints
|
|
287
|
+
* const userEndpoints = services.flatMap(s => s.endpoints)
|
|
288
|
+
* .filter(e => e.searchTerms.some(term => term.includes('user')));
|
|
289
|
+
*
|
|
290
|
+
* // Show service capabilities
|
|
291
|
+
* services.forEach(service => {
|
|
292
|
+
* console.log(`${service.serviceName}: ${service.endpointCount} endpoints`);
|
|
293
|
+
* service.endpoints.forEach(endpoint => {
|
|
294
|
+
* console.log(` ${endpoint.fullPath} - ${endpoint.description}`);
|
|
295
|
+
* });
|
|
296
|
+
* });
|
|
297
|
+
* ```
|
|
298
|
+
*/
|
|
299
|
+
async discover() {
|
|
300
|
+
const services = [];
|
|
301
|
+
// Get all available service clients
|
|
302
|
+
const serviceClients = [
|
|
303
|
+
{ name: 'joomla', client: this.joomla },
|
|
304
|
+
{ name: 'commerce', client: this.commerce },
|
|
305
|
+
{ name: 'pricing', client: this.pricing },
|
|
306
|
+
{ name: 'vmi', client: this.vmi },
|
|
307
|
+
{ name: 'opensearch', client: this.opensearch },
|
|
308
|
+
{ name: 'items', client: this.items },
|
|
309
|
+
{ name: 'legacy', client: this.legacy },
|
|
310
|
+
{ name: 'nexus', client: this.nexus },
|
|
311
|
+
{ name: 'agrSite', client: this.agrSite },
|
|
312
|
+
{ name: 'customers', client: this.customers },
|
|
313
|
+
{ name: 'orders', client: this.orders },
|
|
314
|
+
{ name: 'p21Pim', client: this.p21Pim },
|
|
315
|
+
{ name: 'payments', client: this.payments },
|
|
316
|
+
];
|
|
317
|
+
for (const { client } of serviceClients) {
|
|
318
|
+
try {
|
|
319
|
+
// Get discovery metadata from each service client
|
|
320
|
+
const metadata = client.getDiscoveryMetadata();
|
|
321
|
+
services.push({
|
|
322
|
+
serviceName: metadata.serviceName,
|
|
323
|
+
description: metadata.description,
|
|
324
|
+
baseUrl: metadata.baseUrl,
|
|
325
|
+
endpointCount: metadata.endpoints.length,
|
|
326
|
+
endpoints: metadata.endpoints,
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
catch {
|
|
330
|
+
// Silently skip services that don't support discovery
|
|
331
|
+
continue;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
return services;
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Find endpoints by search term or functionality description
|
|
338
|
+
*
|
|
339
|
+
* Searches across all services to find endpoints that match the given search term.
|
|
340
|
+
* Uses intelligent matching against endpoint descriptions, search terms, domains,
|
|
341
|
+
* and common usage patterns.
|
|
342
|
+
*
|
|
343
|
+
* @param searchTerm The functionality or term to search for
|
|
344
|
+
* @param options Search options for filtering and ranking
|
|
345
|
+
* @returns Promise<EndpointSearchResult[]> Array of matching endpoints with relevance scores
|
|
346
|
+
*
|
|
347
|
+
* @example
|
|
348
|
+
* ```typescript
|
|
349
|
+
* const api = new AugurAPI({ siteId: 'my-site', bearerToken: 'token' });
|
|
350
|
+
*
|
|
351
|
+
* // Find user-related endpoints
|
|
352
|
+
* const userEndpoints = await api.findEndpoint('users');
|
|
353
|
+
* console.log(`Found ${userEndpoints.length} user-related endpoints`);
|
|
354
|
+
*
|
|
355
|
+
* // Find authentication endpoints
|
|
356
|
+
* const authEndpoints = await api.findEndpoint('authentication');
|
|
357
|
+
*
|
|
358
|
+
* // Find inventory management
|
|
359
|
+
* const inventoryEndpoints = await api.findEndpoint('inventory management');
|
|
360
|
+
*
|
|
361
|
+
* // Show results with scores
|
|
362
|
+
* userEndpoints.forEach(result => {
|
|
363
|
+
* console.log(`${result.endpoint.fullPath} (${result.score.toFixed(2)}) - ${result.matchReason}`);
|
|
364
|
+
* });
|
|
365
|
+
* ```
|
|
366
|
+
*/
|
|
367
|
+
async findEndpoint(searchTerm, options = {}) {
|
|
368
|
+
const { minScore = 0.1, maxResults = 10, service, domain, readOnly = false } = options;
|
|
369
|
+
// Handle empty search term
|
|
370
|
+
if (!searchTerm.trim()) {
|
|
371
|
+
return [];
|
|
372
|
+
}
|
|
373
|
+
// Get filtered endpoints
|
|
374
|
+
const filteredEndpoints = await this.getFilteredEndpoints({ service, domain, readOnly });
|
|
375
|
+
// Search and score endpoints
|
|
376
|
+
const results = this.searchAndScoreEndpoints(filteredEndpoints, searchTerm, {
|
|
377
|
+
domain,
|
|
378
|
+
minScore,
|
|
379
|
+
});
|
|
380
|
+
// Sort by relevance score (highest first) and limit results
|
|
381
|
+
return results.sort((a, b) => b.score - a.score).slice(0, maxResults);
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Get endpoints filtered by service, domain, and method options
|
|
385
|
+
*/
|
|
386
|
+
async getFilteredEndpoints(filters) {
|
|
387
|
+
const { service, domain, readOnly } = filters;
|
|
388
|
+
const services = await this.discover();
|
|
389
|
+
let filteredEndpoints = services.flatMap(s => s.endpoints);
|
|
390
|
+
if (service) {
|
|
391
|
+
filteredEndpoints = filteredEndpoints.filter(e => e.service === service);
|
|
392
|
+
}
|
|
393
|
+
if (domain) {
|
|
394
|
+
filteredEndpoints = filteredEndpoints.filter(e => e.domain === domain);
|
|
395
|
+
}
|
|
396
|
+
if (readOnly) {
|
|
397
|
+
filteredEndpoints = filteredEndpoints.filter(e => e.method === 'GET');
|
|
398
|
+
}
|
|
399
|
+
return filteredEndpoints;
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Search and score endpoints against search term
|
|
403
|
+
*/
|
|
404
|
+
searchAndScoreEndpoints(endpoints, searchTerm, options) {
|
|
405
|
+
const { domain, minScore } = options;
|
|
406
|
+
const results = [];
|
|
407
|
+
const searchTermLower = searchTerm.toLowerCase();
|
|
408
|
+
for (const endpoint of endpoints) {
|
|
409
|
+
// Skip malformed endpoints
|
|
410
|
+
if (!this.isValidEndpoint(endpoint)) {
|
|
411
|
+
continue;
|
|
412
|
+
}
|
|
413
|
+
const { finalScore, finalMatchReason } = this.calculateFinalScore(endpoint, searchTermLower, domain);
|
|
414
|
+
if (finalScore >= minScore) {
|
|
415
|
+
results.push({
|
|
416
|
+
endpoint,
|
|
417
|
+
score: finalScore,
|
|
418
|
+
matchReason: finalMatchReason,
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
return results;
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* Check if endpoint has required fields
|
|
426
|
+
*/
|
|
427
|
+
isValidEndpoint(endpoint) {
|
|
428
|
+
return !!(endpoint.domain && endpoint.description && endpoint.method);
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* Calculate final score with domain filter adjustments
|
|
432
|
+
*/
|
|
433
|
+
calculateFinalScore(endpoint, searchTermLower, domain) {
|
|
434
|
+
const { score, matchReason } = this.calculateEndpointRelevance(endpoint, searchTermLower);
|
|
435
|
+
// If domain filter is applied and search score is 0, give minimal score
|
|
436
|
+
if (domain && score === 0) {
|
|
437
|
+
return {
|
|
438
|
+
finalScore: 0.1,
|
|
439
|
+
finalMatchReason: 'Domain filter match',
|
|
440
|
+
};
|
|
441
|
+
}
|
|
442
|
+
return {
|
|
443
|
+
finalScore: score,
|
|
444
|
+
finalMatchReason: matchReason,
|
|
445
|
+
};
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* Calculate relevance score for an endpoint against a search term
|
|
449
|
+
*/
|
|
450
|
+
calculateEndpointRelevance(endpoint, searchTermLower) {
|
|
451
|
+
const exactMatches = this.calculateExactMatches(endpoint, searchTermLower);
|
|
452
|
+
const partialMatches = this.calculatePartialMatches(endpoint, searchTermLower);
|
|
453
|
+
// Process exact matches if found
|
|
454
|
+
if (exactMatches.score > 0) {
|
|
455
|
+
return this.processExactMatches(exactMatches, partialMatches);
|
|
456
|
+
}
|
|
457
|
+
// Fallback to multi-word or partial matches
|
|
458
|
+
return this.processFallbackMatches(endpoint, searchTermLower, partialMatches);
|
|
459
|
+
}
|
|
460
|
+
/**
|
|
461
|
+
* Process exact matches with appropriate combining logic
|
|
462
|
+
*/
|
|
463
|
+
processExactMatches(exactMatches, partialMatches) {
|
|
464
|
+
// Service and search term matches are exclusive
|
|
465
|
+
if (this.isExclusiveMatch(exactMatches.reason)) {
|
|
466
|
+
return {
|
|
467
|
+
score: exactMatches.score,
|
|
468
|
+
matchReason: exactMatches.reason,
|
|
469
|
+
};
|
|
470
|
+
}
|
|
471
|
+
// Combinable matches get partial score boost
|
|
472
|
+
if (this.isCombinableMatch(exactMatches.reason)) {
|
|
473
|
+
const totalScore = Math.min(exactMatches.score + partialMatches.score, 1.0);
|
|
474
|
+
return {
|
|
475
|
+
score: totalScore,
|
|
476
|
+
matchReason: exactMatches.reason,
|
|
477
|
+
};
|
|
478
|
+
}
|
|
479
|
+
// Default to exact match
|
|
480
|
+
return {
|
|
481
|
+
score: exactMatches.score,
|
|
482
|
+
matchReason: exactMatches.reason,
|
|
483
|
+
};
|
|
484
|
+
}
|
|
485
|
+
/**
|
|
486
|
+
* Check if match type should be exclusive (no combining)
|
|
487
|
+
*/
|
|
488
|
+
isExclusiveMatch(reason) {
|
|
489
|
+
return reason === 'Service match' || reason.startsWith('Search term match');
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* Check if match type can be combined with partial matches
|
|
493
|
+
*/
|
|
494
|
+
isCombinableMatch(reason) {
|
|
495
|
+
const combinableReasons = [
|
|
496
|
+
'Description match',
|
|
497
|
+
'Full path match',
|
|
498
|
+
'Path substring match',
|
|
499
|
+
'Domain match',
|
|
500
|
+
'Usage pattern match',
|
|
501
|
+
];
|
|
502
|
+
return combinableReasons.includes(reason);
|
|
503
|
+
}
|
|
504
|
+
/**
|
|
505
|
+
* Process fallback matches when no exact match found
|
|
506
|
+
*/
|
|
507
|
+
processFallbackMatches(endpoint, searchTermLower, partialMatches) {
|
|
508
|
+
const multiWordMatches = this.calculateMultiWordMatches(endpoint, searchTermLower);
|
|
509
|
+
if (multiWordMatches.score > partialMatches.score) {
|
|
510
|
+
return {
|
|
511
|
+
score: multiWordMatches.score,
|
|
512
|
+
matchReason: multiWordMatches.reason,
|
|
513
|
+
};
|
|
514
|
+
}
|
|
515
|
+
return {
|
|
516
|
+
score: partialMatches.score,
|
|
517
|
+
matchReason: partialMatches.reason || 'Low relevance match',
|
|
518
|
+
};
|
|
519
|
+
}
|
|
520
|
+
/**
|
|
521
|
+
* Calculate exact field matches with high scores
|
|
522
|
+
*/
|
|
523
|
+
calculateExactMatches(endpoint, searchTermLower) {
|
|
524
|
+
// Check matches in priority order (not just highest score)
|
|
525
|
+
// Priority 1: Exact field matches (domain, service, exact path, exact description)
|
|
526
|
+
const exactMatch = this.checkExactFieldMatches(endpoint, searchTermLower);
|
|
527
|
+
if (exactMatch.score > 0) {
|
|
528
|
+
return exactMatch;
|
|
529
|
+
}
|
|
530
|
+
// Priority 2: Path and description substring matches (higher business value)
|
|
531
|
+
const pathMatch = this.checkPathSubstringMatch(endpoint, searchTermLower);
|
|
532
|
+
if (pathMatch.score > 0) {
|
|
533
|
+
return pathMatch;
|
|
534
|
+
}
|
|
535
|
+
const descSubstringMatch = this.checkDescriptionSubstringMatch(endpoint, searchTermLower);
|
|
536
|
+
if (descSubstringMatch.score > 0) {
|
|
537
|
+
return descSubstringMatch;
|
|
538
|
+
}
|
|
539
|
+
// Priority 3: Search terms and patterns
|
|
540
|
+
const termMatch = this.checkSearchTermsAndPatterns(endpoint, searchTermLower);
|
|
541
|
+
if (termMatch.score > 0) {
|
|
542
|
+
return termMatch;
|
|
543
|
+
}
|
|
544
|
+
// Priority 4: Other substring matches (domain, service)
|
|
545
|
+
const otherSubstringMatch = this.checkOtherSubstringMatches(endpoint, searchTermLower);
|
|
546
|
+
if (otherSubstringMatch.score > 0) {
|
|
547
|
+
return otherSubstringMatch;
|
|
548
|
+
}
|
|
549
|
+
return { score: 0, reason: '' };
|
|
550
|
+
}
|
|
551
|
+
/**
|
|
552
|
+
* Check for path substring matches
|
|
553
|
+
*/
|
|
554
|
+
checkPathSubstringMatch(endpoint, searchTermLower) {
|
|
555
|
+
if (endpoint.fullPath &&
|
|
556
|
+
(endpoint.fullPath.toLowerCase().includes(searchTermLower) ||
|
|
557
|
+
searchTermLower.includes(endpoint.fullPath.toLowerCase()))) {
|
|
558
|
+
return { score: 0.9, reason: 'Path substring match' };
|
|
559
|
+
}
|
|
560
|
+
return { score: 0, reason: '' };
|
|
561
|
+
}
|
|
562
|
+
/**
|
|
563
|
+
* Check for description substring matches
|
|
564
|
+
*/
|
|
565
|
+
checkDescriptionSubstringMatch(endpoint, searchTermLower) {
|
|
566
|
+
if (endpoint.description && endpoint.description.toLowerCase().includes(searchTermLower)) {
|
|
567
|
+
return { score: 0.65, reason: 'Description substring match' };
|
|
568
|
+
}
|
|
569
|
+
return { score: 0, reason: '' };
|
|
570
|
+
}
|
|
571
|
+
/**
|
|
572
|
+
* Check for other substring matches (domain, service)
|
|
573
|
+
*/
|
|
574
|
+
checkOtherSubstringMatches(endpoint, searchTermLower) {
|
|
575
|
+
if (endpoint.domain && endpoint.domain.toLowerCase().includes(searchTermLower)) {
|
|
576
|
+
return { score: 0.5, reason: 'Domain match' };
|
|
577
|
+
}
|
|
578
|
+
if (endpoint.service && endpoint.service.toLowerCase().includes(searchTermLower)) {
|
|
579
|
+
return { score: 0.3, reason: 'Service match' };
|
|
580
|
+
}
|
|
581
|
+
return { score: 0, reason: '' };
|
|
582
|
+
}
|
|
583
|
+
/**
|
|
584
|
+
* Check for exact field matches
|
|
585
|
+
*/
|
|
586
|
+
checkExactFieldMatches(endpoint, searchTermLower) {
|
|
587
|
+
if (endpoint.domain && endpoint.domain.toLowerCase() === searchTermLower) {
|
|
588
|
+
return { score: 0.6, reason: 'Domain match' };
|
|
589
|
+
}
|
|
590
|
+
if (endpoint.service && endpoint.service.toLowerCase() === searchTermLower) {
|
|
591
|
+
return { score: 0.3, reason: 'Service match' };
|
|
592
|
+
}
|
|
593
|
+
if (endpoint.fullPath && endpoint.fullPath.toLowerCase() === searchTermLower) {
|
|
594
|
+
return { score: 1.0, reason: 'Full path match' };
|
|
595
|
+
}
|
|
596
|
+
if (endpoint.description && endpoint.description.toLowerCase() === searchTermLower) {
|
|
597
|
+
return { score: 0.8, reason: 'Description match' };
|
|
598
|
+
}
|
|
599
|
+
return { score: 0, reason: '' };
|
|
600
|
+
}
|
|
601
|
+
/**
|
|
602
|
+
* Check search terms and common patterns
|
|
603
|
+
*/
|
|
604
|
+
checkSearchTermsAndPatterns(endpoint, searchTermLower) {
|
|
605
|
+
if (Array.isArray(endpoint.searchTerms)) {
|
|
606
|
+
const searchTermMatches = endpoint.searchTerms.filter(term => term && typeof term === 'string' && term.toLowerCase().includes(searchTermLower));
|
|
607
|
+
if (searchTermMatches.length > 0) {
|
|
608
|
+
return { score: 0.7, reason: `Search term match: ${searchTermMatches[0]}` };
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
if (Array.isArray(endpoint.commonPatterns)) {
|
|
612
|
+
const patternMatches = endpoint.commonPatterns.filter(pattern => {
|
|
613
|
+
if (!pattern || typeof pattern !== 'string')
|
|
614
|
+
return false;
|
|
615
|
+
const patternLower = pattern.toLowerCase();
|
|
616
|
+
return patternLower.includes(searchTermLower);
|
|
617
|
+
});
|
|
618
|
+
if (patternMatches.length > 0) {
|
|
619
|
+
return { score: 0.5, reason: 'Usage pattern match' };
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
return { score: 0, reason: '' };
|
|
623
|
+
}
|
|
624
|
+
/**
|
|
625
|
+
* Calculate partial word matches with lower scores
|
|
626
|
+
*/
|
|
627
|
+
calculatePartialMatches(endpoint, searchTermLower) {
|
|
628
|
+
const allText = this.buildSearchableText(endpoint);
|
|
629
|
+
const wordMatches = this.countWordMatches(searchTermLower, allText);
|
|
630
|
+
return this.buildPartialMatchResult(wordMatches, searchTermLower);
|
|
631
|
+
}
|
|
632
|
+
/**
|
|
633
|
+
* Build searchable text from endpoint fields
|
|
634
|
+
*/
|
|
635
|
+
buildSearchableText(endpoint) {
|
|
636
|
+
const searchTerms = Array.isArray(endpoint.searchTerms) ? endpoint.searchTerms : [];
|
|
637
|
+
const commonPatterns = Array.isArray(endpoint.commonPatterns) ? endpoint.commonPatterns : [];
|
|
638
|
+
return [
|
|
639
|
+
endpoint.fullPath || '',
|
|
640
|
+
endpoint.description || '',
|
|
641
|
+
endpoint.domain || '',
|
|
642
|
+
endpoint.service || '',
|
|
643
|
+
...searchTerms,
|
|
644
|
+
...commonPatterns,
|
|
645
|
+
]
|
|
646
|
+
.filter(text => typeof text === 'string')
|
|
647
|
+
.join(' ')
|
|
648
|
+
.toLowerCase();
|
|
649
|
+
}
|
|
650
|
+
/**
|
|
651
|
+
* Count matching words in text
|
|
652
|
+
*/
|
|
653
|
+
countWordMatches(searchTermLower, allText) {
|
|
654
|
+
const searchWords = searchTermLower.split(/\s+/).filter(word => word.length > 0);
|
|
655
|
+
let wordMatches = 0;
|
|
656
|
+
for (const word of searchWords) {
|
|
657
|
+
if (word.length > 2 && allText.includes(word)) {
|
|
658
|
+
wordMatches++;
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
return wordMatches;
|
|
662
|
+
}
|
|
663
|
+
/**
|
|
664
|
+
* Build partial match result with score and reason
|
|
665
|
+
*/
|
|
666
|
+
buildPartialMatchResult(wordMatches, searchTermLower) {
|
|
667
|
+
if (wordMatches > 0) {
|
|
668
|
+
const searchWords = searchTermLower.split(/\s+/).filter(word => word.length > 0);
|
|
669
|
+
const partialScore = (wordMatches / searchWords.length) * 0.2;
|
|
670
|
+
const reasonText = `Partial word match (${wordMatches}/${searchWords.length})`;
|
|
671
|
+
return {
|
|
672
|
+
score: partialScore,
|
|
673
|
+
reason: reasonText,
|
|
674
|
+
matchReason: reasonText,
|
|
675
|
+
};
|
|
676
|
+
}
|
|
677
|
+
return { score: 0, reason: '', matchReason: '' };
|
|
678
|
+
}
|
|
679
|
+
/**
|
|
680
|
+
* Calculate multi-word matches by finding the best match for each word
|
|
681
|
+
*/
|
|
682
|
+
calculateMultiWordMatches(endpoint, searchTermLower) {
|
|
683
|
+
const searchWords = searchTermLower.split(/\s+/).filter(word => word.length > 0);
|
|
684
|
+
// If only one word, fall back to exact matching
|
|
685
|
+
if (searchWords.length <= 1) {
|
|
686
|
+
return { score: 0, reason: '' };
|
|
687
|
+
}
|
|
688
|
+
let bestScore = 0;
|
|
689
|
+
let bestReason = '';
|
|
690
|
+
const matchedWords = [];
|
|
691
|
+
// Check each word against the endpoint fields
|
|
692
|
+
for (const word of searchWords) {
|
|
693
|
+
const wordMatch = this.calculateExactMatches(endpoint, word);
|
|
694
|
+
if (wordMatch.score > 0) {
|
|
695
|
+
// Keep track of the highest scoring match
|
|
696
|
+
if (wordMatch.score > bestScore) {
|
|
697
|
+
bestScore = wordMatch.score;
|
|
698
|
+
bestReason = wordMatch.reason;
|
|
699
|
+
}
|
|
700
|
+
matchedWords.push(word);
|
|
701
|
+
}
|
|
702
|
+
}
|
|
703
|
+
// If we matched multiple words, boost the score
|
|
704
|
+
if (matchedWords.length > 1) {
|
|
705
|
+
// Base score is the best individual match, with bonus for additional matches
|
|
706
|
+
const bonusScore = Math.min((matchedWords.length - 1) * 0.1, 0.3);
|
|
707
|
+
const finalScore = Math.min(bestScore + bonusScore, 1.0);
|
|
708
|
+
return {
|
|
709
|
+
score: finalScore,
|
|
710
|
+
reason: `Multi-word match (${matchedWords.length}/${searchWords.length} words): ${bestReason}`,
|
|
711
|
+
};
|
|
712
|
+
}
|
|
713
|
+
// Single word match - return as-is
|
|
714
|
+
if (bestScore > 0) {
|
|
715
|
+
return {
|
|
716
|
+
score: bestScore,
|
|
717
|
+
reason: bestReason,
|
|
718
|
+
};
|
|
719
|
+
}
|
|
720
|
+
return { score: 0, reason: '' };
|
|
721
|
+
}
|
|
273
722
|
}
|
|
274
723
|
//# sourceMappingURL=client.js.map
|