@simpleapps-com/augur-api
Version:
TypeScript client library for Augur microservices API endpoints
245 lines • 9.76 kB
JavaScript
import { BaseServiceClient } from '../../core/base-client';
import { ItemSearchParamsSchema, ItemSearchResponseSchema, SearchAttributesParamsSchema, SearchAttributesResponseSchema, ItemsListParamsSchema, ItemsListResponseSchema, ItemDetailResponseSchema, ItemOperationResponseSchema, ItemRefreshResponseSchema, ItemUpdateRequestSchema, PingResponseSchema, HealthCheckResponseSchema, } from './schemas';
/**
* OpenSearch service client for advanced product search capabilities
*
* Provides comprehensive search functionality including:
* - Advanced item search with filtering and facets
* - Search result attributes and faceted navigation
* - Item index management and refresh operations
* - Health monitoring and service status
*/
export class OpenSearchClient extends BaseServiceClient {
/**
* Create a new OpenSearchClient instance
* @param http Configured HTTPClient instance
* @param baseUrl Base URL for the OpenSearch API (default: https://open-search.augur-api.com)
*/
constructor(http, baseUrl = 'https://open-search.augur-api.com') {
super('open-search', http, baseUrl);
// Ensure types are referenced to avoid unused import warnings
this._typeRefs = {
ItemRefreshResponse: null,
};
/**
* Health monitoring operations
*/
this.health = {
/**
* Simple ping endpoint
* @returns Promise<"pong">
*
* @example
* ```typescript
* const pong = await api.opensearch.health.ping();
* console.log(pong); // "pong"
* ```
*/
ping: this.createPingMethod(PingResponseSchema),
/**
* Comprehensive health check
* @returns Promise<HealthCheckData>
*
* @example
* ```typescript
* const health = await api.opensearch.health.check();
* console.log(`Site: ${health.siteId}, Hash: ${health.siteHash}`);
* ```
*/
check: this.createHealthCheckMethod(HealthCheckResponseSchema),
};
/**
* Health Data Operations
* @description Direct access to health check data without response metadata
*/
this.healthData = {
/**
* Get health check data without response metadata
* @returns Promise<unknown> Health status data directly
*/
check: async () => {
const response = await this.health.check();
return response.data;
},
/**
* Get ping data without response metadata
* @returns Promise<unknown> Ping response data directly
*/
ping: async () => {
const response = await this.health.ping();
return response.data;
},
};
/**
* Advanced item search operations
*/
this.itemSearch = {
/**
* Perform comprehensive item search with advanced filtering
* @param params Search parameters including query, filters, and options
* @returns Promise<ItemSearchData>
*
* @example
* ```typescript
* // Basic search
* const results = await api.opensearch.itemSearch.search({
* q: 'electrical wire',
* searchType: 'query',
* size: 20
* });
*
* // Advanced search with filtering
* const filtered = await api.opensearch.itemSearch.search({
* q: 'tools',
* searchType: 'query',
* size: 50,
* operator: 'AND',
* filters: JSON.stringify([{attributeUid: 123, attributeValueUid: 456}]),
* classId5List: '1,2,3',
* from: 0
* });
*
* console.log(`Found ${results.totalResults} items`);
* results.items.forEach(item => {
* console.log(`${item.itemId}: ${item.itemDesc} (score: ${item.score})`);
* });
* ```
*/
search: this.createSearchMethod('/item-search', ItemSearchParamsSchema, ItemSearchResponseSchema),
/**
* Get search attributes for faceted navigation
* @param params Search parameters to determine available attributes
* @returns Promise<SearchAttributesData>
*
* @example
* ```typescript
* const attributes = await api.opensearch.itemSearch.getAttributes({
* q: 'electrical components',
* searchType: 'query'
* });
*
* attributes.attributes.forEach(attr => {
* console.log(`${attr.attributeName}:`);
* attr.values.forEach(value => {
* console.log(` ${value.attributeValue} (${value.count})`);
* });
* });
* ```
*/
getAttributes: async (params) => {
return this.executeRequest({
method: 'GET',
path: '/item-search/attributes',
paramsSchema: SearchAttributesParamsSchema,
responseSchema: SearchAttributesResponseSchema,
}, params);
},
};
/**
* Item index management operations
*/
this.items = {
/**
* List items from the search index
* @param params Optional filtering parameters
* @returns Promise<ItemsListResponse>
*
* @example
* ```typescript
* // List all items (with default pagination)
* const items = await api.opensearch.items.list();
*
* // List items with filtering
* const filteredItems = await api.opensearch.items.list({
* itemId: 'WIRE', // Prefix filter
* online: 'Y', // Only online items
* statusCd: 704, // Active items only
* limit: 50,
* offset: 0
* });
*
* console.log(`Found ${filteredItems.total} total items`);
* filteredItems.data.forEach(item => {
* console.log(`${item.itemId}: ${item.itemDesc}`);
* });
* ```
*/
list: this.createListMethod('/items', ItemsListParamsSchema, ItemsListResponseSchema),
/**
* Get a specific item document from the search index
* @param invMastUid Inventory master unique identifier
* @returns Promise<ItemDetail>
*
* @example
* ```typescript
* const item = await api.opensearch.items.get(123456);
* console.log(`Item: ${item.itemId} - ${item.itemDesc}`);
* console.log(`Online: ${item.online}, Status: ${item.statusCd}`);
*
* if (item.keywords) {
* console.log(`Keywords: ${item.keywords}`);
* }
* ```
*/
get: this.createGetMethod('/items/{id}', ItemDetailResponseSchema),
/**
* Update a specific item document in the search index
* @param invMastUid Inventory master unique identifier
* @param data Update data (statusCd and/or processCd)
* @returns Promise<ItemOperationResponse>
*
* @example
* ```typescript
* const result = await api.opensearch.items.update(123456, {
* statusCd: 704,
* processCd: 704
* });
* console.log(`Updated item: ${result.data.itemId}`);
* ```
*/
update: this.createUpdateMethod('/items/{id}', ItemUpdateRequestSchema, ItemOperationResponseSchema),
/**
* Refresh a specific item document from the source database
* @param invMastUid Inventory master unique identifier
* @returns Promise<ItemRefreshResponse>
*
* @example
* ```typescript
* const result = await api.opensearch.items.refresh(123456);
* console.log(`Refreshed item: ${result.data.itemId}`);
* ```
*/
refresh: this.createGetMethod('/items/{id}/refresh', ItemRefreshResponseSchema),
/**
* Trigger batch refresh of items in the search index
* @returns Promise<ItemOperationResult>
*
* @example
* ```typescript
* const result = await api.opensearch.items.refreshAll();
* if (result.success) {
* console.log('Batch refresh initiated');
* }
* ```
*/
refreshAll: async () => {
return this.executeRequest({
method: 'PUT',
path: '/items/refresh',
responseSchema: ItemOperationResponseSchema,
});
},
};
/**
* @deprecated Use health.check() instead
*/
this.getHealthCheck = this.health.check;
/**
* @deprecated Use health.ping() instead
*/
this.ping = this.health.ping;
// Reference types to ensure they're used
void this._typeRefs;
}
}
//# sourceMappingURL=client.js.map