@yext/search-core
Version:
Typescript Networking Library for the Yext Search API
51 lines (45 loc) • 1.94 kB
text/typescript
import { SearchServiceImpl } from './infra/SearchServiceImpl';
import { QuestionSubmissionServiceImpl } from './infra/QuestionSubmissionServiceImpl';
import { HttpServiceImpl } from './infra/HttpServiceImpl';
import { SearchConfig, SearchConfigWithDefaulting } from './models/core/SearchConfig';
import { AutocompleteServiceImpl } from './infra/AutocompleteServiceImpl';
import { ApiResponseValidator } from './validation/ApiResponseValidator';
import { SearchCore } from './SearchCore';
import { EndpointsFactory } from './provideEndpoints';
import { GenerativeDirectAnswerServiceImpl } from './infra/GenerativeDirectAnswerServiceImpl';
/**
* The entrypoint to the search-core library.
*
* @remarks
* Returns an {@link SearchCore} instance.
*
* @param config - The search-core config
*
* @public
*/
export function provideCore(config: SearchConfig): SearchCore {
if ('apiKey' in config && 'token' in config) {
throw new Error('Both apiKey and token are present. Only one authentication method should be provided');
}
const defaultedConfig: SearchConfigWithDefaulting = {
...config,
endpoints: {
...new EndpointsFactory(config).getEndpoints(),
...config.endpoints
}
};
const httpService = new HttpServiceImpl();
const apiResponseValidator = new ApiResponseValidator();
const searchService = new SearchServiceImpl(defaultedConfig, httpService, apiResponseValidator);
const questionSubmissionService = new QuestionSubmissionServiceImpl(
defaultedConfig, httpService, apiResponseValidator);
const autoCompleteService = new AutocompleteServiceImpl(defaultedConfig, httpService, apiResponseValidator);
const generativeDirectAnswerService = new GenerativeDirectAnswerServiceImpl(
defaultedConfig, httpService, apiResponseValidator);
return new SearchCore(
searchService,
questionSubmissionService,
autoCompleteService,
generativeDirectAnswerService,
);
}