UNPKG

@simpleapps-com/augur-api

Version:

TypeScript client library for Augur microservices API endpoints

245 lines 9.76 kB
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