diff --git a/THIRD-PARTY-NOTICES b/THIRD-PARTY-NOTICES index 7e7197aa..f7302a19 100644 --- a/THIRD-PARTY-NOTICES +++ b/THIRD-PARTY-NOTICES @@ -157,6 +157,18 @@ This package contains the following license and notice below: ----------- +The following NPM package may be included in this product: + + - tsc@2.0.4 + +This package contains the following license and notice below: + +## DEPRECATED. + +Use [`typescript`](https://www.npmjs.com/package/typescript) to get access to the `tsc` CLI command. + +----------- + The following NPM package may be included in this product: - webidl-conversions@3.0.1 diff --git a/docs/search-core.context.md b/docs/search-core.context.md index 526795e2..78b28cba 100644 --- a/docs/search-core.context.md +++ b/docs/search-core.context.md @@ -9,7 +9,7 @@ Used to trigger Search [Query Rules](https://hitchhikers.yext.com/tracks/answers Signature: ```typescript -export declare type Context = any; +export type Context = any; ``` ## Remarks diff --git a/docs/search-core.endpointsprovider._constructor_.md b/docs/search-core.endpointsprovider._constructor_.md new file mode 100644 index 00000000..086a4026 --- /dev/null +++ b/docs/search-core.endpointsprovider._constructor_.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [@yext/search-core](./search-core.md) > [EndpointsProvider](./search-core.endpointsprovider.md) > [(constructor)](./search-core.endpointsprovider._constructor_.md) + +## EndpointsProvider.(constructor) + +Constructs a new instance of the `EndpointsProvider` class + +Signature: + +```typescript +constructor(environment?: Environment, cloudRegion?: CloudRegion, overrideEndpoints?: Endpoints); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| environment | Environment | | +| cloudRegion | CloudRegion | | +| overrideEndpoints | [Endpoints](./search-core.endpoints.md) | | + diff --git a/docs/search-core.endpointsprovider.getendpoints.md b/docs/search-core.endpointsprovider.getendpoints.md new file mode 100644 index 00000000..0cdf4408 --- /dev/null +++ b/docs/search-core.endpointsprovider.getendpoints.md @@ -0,0 +1,29 @@ + + +[Home](./index.md) > [@yext/search-core](./search-core.md) > [EndpointsProvider](./search-core.endpointsprovider.md) > [getEndpoints](./search-core.endpointsprovider.getendpoints.md) + +## EndpointsProvider.getEndpoints() method + +Provides all endpoints based on environment and cloud region. Include any custom overrides in overrideEndpoints. + +Signature: + +```typescript +getEndpoints(): { + universalSearch: string; + verticalSearch: string; + questionSubmission: string; + status: string; + universalAutocomplete: string; + verticalAutocomplete: string; + filterSearch: string; + }; +``` +Returns: + +{ universalSearch: string; verticalSearch: string; questionSubmission: string; status: string; universalAutocomplete: string; verticalAutocomplete: string; filterSearch: string; } + +## Remarks + +Returns an [Endpoints](./search-core.endpoints.md) instance. + diff --git a/docs/search-core.endpointsprovider.getfiltersearchendpoint.md b/docs/search-core.endpointsprovider.getfiltersearchendpoint.md new file mode 100644 index 00000000..57ee8110 --- /dev/null +++ b/docs/search-core.endpointsprovider.getfiltersearchendpoint.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [@yext/search-core](./search-core.md) > [EndpointsProvider](./search-core.endpointsprovider.md) > [getFilterSearchEndpoint](./search-core.endpointsprovider.getfiltersearchendpoint.md) + +## EndpointsProvider.getFilterSearchEndpoint() method + +Returns the endpoint for filter search. + +Signature: + +```typescript +getFilterSearchEndpoint(): string; +``` +Returns: + +string + diff --git a/docs/search-core.endpointsprovider.getquestionsubmissionendpoint.md b/docs/search-core.endpointsprovider.getquestionsubmissionendpoint.md new file mode 100644 index 00000000..2fb2ebe7 --- /dev/null +++ b/docs/search-core.endpointsprovider.getquestionsubmissionendpoint.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [@yext/search-core](./search-core.md) > [EndpointsProvider](./search-core.endpointsprovider.md) > [getQuestionSubmissionEndpoint](./search-core.endpointsprovider.getquestionsubmissionendpoint.md) + +## EndpointsProvider.getQuestionSubmissionEndpoint() method + +Returns the endpoint for question submission. + +Signature: + +```typescript +getQuestionSubmissionEndpoint(): string; +``` +Returns: + +string + diff --git a/docs/search-core.endpointsprovider.getstatusendpoint.md b/docs/search-core.endpointsprovider.getstatusendpoint.md new file mode 100644 index 00000000..b4dc4f87 --- /dev/null +++ b/docs/search-core.endpointsprovider.getstatusendpoint.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [@yext/search-core](./search-core.md) > [EndpointsProvider](./search-core.endpointsprovider.md) > [getStatusEndpoint](./search-core.endpointsprovider.getstatusendpoint.md) + +## EndpointsProvider.getStatusEndpoint() method + +Returns the endpoint for status. + +Signature: + +```typescript +getStatusEndpoint(): string; +``` +Returns: + +string + diff --git a/docs/search-core.endpointsprovider.getuniversalautocomplete.md b/docs/search-core.endpointsprovider.getuniversalautocomplete.md new file mode 100644 index 00000000..66a9f191 --- /dev/null +++ b/docs/search-core.endpointsprovider.getuniversalautocomplete.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [@yext/search-core](./search-core.md) > [EndpointsProvider](./search-core.endpointsprovider.md) > [getUniversalAutocomplete](./search-core.endpointsprovider.getuniversalautocomplete.md) + +## EndpointsProvider.getUniversalAutocomplete() method + +Returns the endpoint for universal autocomplete. + +Signature: + +```typescript +getUniversalAutocomplete(): string; +``` +Returns: + +string + diff --git a/docs/search-core.endpointsprovider.getuniversalsearchendpoint.md b/docs/search-core.endpointsprovider.getuniversalsearchendpoint.md new file mode 100644 index 00000000..47b9a1eb --- /dev/null +++ b/docs/search-core.endpointsprovider.getuniversalsearchendpoint.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [@yext/search-core](./search-core.md) > [EndpointsProvider](./search-core.endpointsprovider.md) > [getUniversalSearchEndpoint](./search-core.endpointsprovider.getuniversalsearchendpoint.md) + +## EndpointsProvider.getUniversalSearchEndpoint() method + +Returns the endpoint for universal search. + +Signature: + +```typescript +getUniversalSearchEndpoint(): string; +``` +Returns: + +string + diff --git a/docs/search-core.endpointsprovider.getverticalautocomplete.md b/docs/search-core.endpointsprovider.getverticalautocomplete.md new file mode 100644 index 00000000..0becb70a --- /dev/null +++ b/docs/search-core.endpointsprovider.getverticalautocomplete.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [@yext/search-core](./search-core.md) > [EndpointsProvider](./search-core.endpointsprovider.md) > [getVerticalAutocomplete](./search-core.endpointsprovider.getverticalautocomplete.md) + +## EndpointsProvider.getVerticalAutocomplete() method + +Returns the endpoint for vertical autocomplete. + +Signature: + +```typescript +getVerticalAutocomplete(): string; +``` +Returns: + +string + diff --git a/docs/search-core.endpointsprovider.getverticalsearchendpoint.md b/docs/search-core.endpointsprovider.getverticalsearchendpoint.md new file mode 100644 index 00000000..77f237d3 --- /dev/null +++ b/docs/search-core.endpointsprovider.getverticalsearchendpoint.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [@yext/search-core](./search-core.md) > [EndpointsProvider](./search-core.endpointsprovider.md) > [getVerticalSearchEndpoint](./search-core.endpointsprovider.getverticalsearchendpoint.md) + +## EndpointsProvider.getVerticalSearchEndpoint() method + +Returns the endpoint for vertical search. + +Signature: + +```typescript +getVerticalSearchEndpoint(): string; +``` +Returns: + +string + diff --git a/docs/search-core.endpointsprovider.md b/docs/search-core.endpointsprovider.md new file mode 100644 index 00000000..0f4e9ed9 --- /dev/null +++ b/docs/search-core.endpointsprovider.md @@ -0,0 +1,33 @@ + + +[Home](./index.md) > [@yext/search-core](./search-core.md) > [EndpointsProvider](./search-core.endpointsprovider.md) + +## EndpointsProvider class + +Provides methods for getting various endpoints. + +Signature: + +```typescript +export declare class EndpointsProvider +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(environment, cloudRegion, overrideEndpoints)](./search-core.endpointsprovider._constructor_.md) | | Constructs a new instance of the EndpointsProvider class | + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [getEndpoints()](./search-core.endpointsprovider.getendpoints.md) | | Provides all endpoints based on environment and cloud region. Include any custom overrides in overrideEndpoints. | +| [getFilterSearchEndpoint()](./search-core.endpointsprovider.getfiltersearchendpoint.md) | | Returns the endpoint for filter search. | +| [getQuestionSubmissionEndpoint()](./search-core.endpointsprovider.getquestionsubmissionendpoint.md) | | Returns the endpoint for question submission. | +| [getStatusEndpoint()](./search-core.endpointsprovider.getstatusendpoint.md) | | Returns the endpoint for status. | +| [getUniversalAutocomplete()](./search-core.endpointsprovider.getuniversalautocomplete.md) | | Returns the endpoint for universal autocomplete. | +| [getUniversalSearchEndpoint()](./search-core.endpointsprovider.getuniversalsearchendpoint.md) | | Returns the endpoint for universal search. | +| [getVerticalAutocomplete()](./search-core.endpointsprovider.getverticalautocomplete.md) | | Returns the endpoint for vertical autocomplete. | +| [getVerticalSearchEndpoint()](./search-core.endpointsprovider.getverticalsearchendpoint.md) | | Returns the endpoint for vertical search. | + diff --git a/docs/search-core.enumorliteral.md b/docs/search-core.enumorliteral.md index 7dc80b4c..22b56c8c 100644 --- a/docs/search-core.enumorliteral.md +++ b/docs/search-core.enumorliteral.md @@ -9,5 +9,5 @@ Produces a union type from the enum passed as a generic which consists of the en Signature: ```typescript -export declare type EnumOrLiteral = T | `${T}`; +export type EnumOrLiteral = T | `${T}`; ``` diff --git a/docs/search-core.featuredsnippetdirectanswer.md b/docs/search-core.featuredsnippetdirectanswer.md index fb2a6e1f..dea968c5 100644 --- a/docs/search-core.featuredsnippetdirectanswer.md +++ b/docs/search-core.featuredsnippetdirectanswer.md @@ -9,7 +9,7 @@ All possible built-in [BaseFeaturedSnippetDirectAnswer](./search-core.basefeatur Signature: ```typescript -export declare type FeaturedSnippetDirectAnswer = MultiLineTextSnippetDirectAnswer | RichTextSnippetDirectAnswer; +export type FeaturedSnippetDirectAnswer = MultiLineTextSnippetDirectAnswer | RichTextSnippetDirectAnswer; ``` References: [MultiLineTextSnippetDirectAnswer](./search-core.multilinetextsnippetdirectanswer.md), [RichTextSnippetDirectAnswer](./search-core.richtextsnippetdirectanswer.md) diff --git a/docs/search-core.fieldvaluedirectanswer.md b/docs/search-core.fieldvaluedirectanswer.md index 952a3fbb..eced3cb6 100644 --- a/docs/search-core.fieldvaluedirectanswer.md +++ b/docs/search-core.fieldvaluedirectanswer.md @@ -9,7 +9,7 @@ Possible built-in and custom [BaseFieldValueDirectAnswer](./search-core.basefiel Signature: ```typescript -export declare type FieldValueDirectAnswer = UnknownFieldValueDirectAnswer | TextDirectAnswer | UrlDirectAnswer | RichTextDirectAnswer | DecimalDirectAnswer | FacebookUrlDirectAnswer | InstagramHandleDirectAnswer | TwitterHandleDirectAnswer | IosAppUrlDirectAnswer | AndroidAppUrlDirectAnswer | ComplexUrlDirectAnswer | IntegerDirectAnswer | PhoneDirectAnswer | EmailDirectAnswer | AddressDirectAnswer | HoursDirectAnswer; +export type FieldValueDirectAnswer = UnknownFieldValueDirectAnswer | TextDirectAnswer | UrlDirectAnswer | RichTextDirectAnswer | DecimalDirectAnswer | FacebookUrlDirectAnswer | InstagramHandleDirectAnswer | TwitterHandleDirectAnswer | IosAppUrlDirectAnswer | AndroidAppUrlDirectAnswer | ComplexUrlDirectAnswer | IntegerDirectAnswer | PhoneDirectAnswer | EmailDirectAnswer | AddressDirectAnswer | HoursDirectAnswer; ``` References: [UnknownFieldValueDirectAnswer](./search-core.unknownfieldvaluedirectanswer.md), [TextDirectAnswer](./search-core.textdirectanswer.md), [UrlDirectAnswer](./search-core.urldirectanswer.md), [RichTextDirectAnswer](./search-core.richtextdirectanswer.md), [DecimalDirectAnswer](./search-core.decimaldirectanswer.md), [FacebookUrlDirectAnswer](./search-core.facebookurldirectanswer.md), [InstagramHandleDirectAnswer](./search-core.instagramhandledirectanswer.md), [TwitterHandleDirectAnswer](./search-core.twitterhandledirectanswer.md), [IosAppUrlDirectAnswer](./search-core.iosappurldirectanswer.md), [AndroidAppUrlDirectAnswer](./search-core.androidappurldirectanswer.md), [ComplexUrlDirectAnswer](./search-core.complexurldirectanswer.md), [IntegerDirectAnswer](./search-core.integerdirectanswer.md), [PhoneDirectAnswer](./search-core.phonedirectanswer.md), [EmailDirectAnswer](./search-core.emaildirectanswer.md), [AddressDirectAnswer](./search-core.addressdirectanswer.md), [HoursDirectAnswer](./search-core.hoursdirectanswer.md) diff --git a/docs/search-core.highlightedfields.md b/docs/search-core.highlightedfields.md index a78aa79f..64a8d17e 100644 --- a/docs/search-core.highlightedfields.md +++ b/docs/search-core.highlightedfields.md @@ -9,7 +9,7 @@ A mapping of fields to the values emphasized by the Search API. Signature: ```typescript -export declare type HighlightedFields = { +export type HighlightedFields = { [fieldId: string]: HighlightedValue | HighlightedValue[] | HighlightedFields | HighlightedFields[]; }; ``` diff --git a/docs/search-core.md b/docs/search-core.md index 615f03a8..de9a51f1 100644 --- a/docs/search-core.md +++ b/docs/search-core.md @@ -8,6 +8,7 @@ | Class | Description | | --- | --- | +| [EndpointsProvider](./search-core.endpointsprovider.md) | Provides methods for getting various endpoints. | | [SearchCore](./search-core.searchcore.md) | Provides methods for executing searches, submitting questions, and performing autocompletes. | | [SearchError](./search-core.searcherror.md) | Represents an error | diff --git a/docs/search-core.sandboxendpoints.md b/docs/search-core.sandboxendpoints.md index 4b28fa12..ba28f17d 100644 --- a/docs/search-core.sandboxendpoints.md +++ b/docs/search-core.sandboxendpoints.md @@ -4,6 +4,11 @@ ## SandboxEndpoints variable +> Warning: This API is now obsolete. +> +> Use [EndpointsProvider](./search-core.endpointsprovider.md) instead +> + The endpoints to use for sandbox experiences. Signature: diff --git a/docs/search-core.searchconfig.md b/docs/search-core.searchconfig.md index 56d994c6..5d9997b2 100644 --- a/docs/search-core.searchconfig.md +++ b/docs/search-core.searchconfig.md @@ -9,7 +9,7 @@ The main configuration options for [SearchCore](./search-core.searchcore.md), [SearchConfigWithToken](./search-core.searchconfigwithtoken.md) diff --git a/docs/search-core.staticfilter.md b/docs/search-core.staticfilter.md index 757a6a6d..b2bdffba 100644 --- a/docs/search-core.staticfilter.md +++ b/docs/search-core.staticfilter.md @@ -9,7 +9,7 @@ Represents a static filter that will be used to refine results. Signature: ```typescript -export declare type StaticFilter = FieldValueStaticFilter | DisjunctionStaticFilter | ConjunctionStaticFilter; +export type StaticFilter = FieldValueStaticFilter | DisjunctionStaticFilter | ConjunctionStaticFilter; ``` References: [FieldValueStaticFilter](./search-core.fieldvaluestaticfilter.md), [DisjunctionStaticFilter](./search-core.disjunctionstaticfilter.md), [ConjunctionStaticFilter](./search-core.conjunctionstaticfilter.md) diff --git a/etc/search-core.api.md b/etc/search-core.api.md index 68e326d1..aafa7857 100644 --- a/etc/search-core.api.md +++ b/etc/search-core.api.md @@ -263,6 +263,31 @@ export interface Endpoints { verticalSearch?: string; } +// @public +export class EndpointsProvider { + // Warning: (ae-forgotten-export) The symbol "Environment" needs to be exported by the entry point index.d.ts + // Warning: (ae-forgotten-export) The symbol "CloudRegion" needs to be exported by the entry point index.d.ts + constructor(environment?: Environment, cloudRegion?: CloudRegion, overrideEndpoints?: Endpoints); + // @internal (undocumented) + getDomain(): string; + getEndpoints(): { + universalSearch: string; + verticalSearch: string; + questionSubmission: string; + status: string; + universalAutocomplete: string; + verticalAutocomplete: string; + filterSearch: string; + }; + getFilterSearchEndpoint(): string; + getQuestionSubmissionEndpoint(): string; + getStatusEndpoint(): string; + getUniversalAutocomplete(): string; + getUniversalSearchEndpoint(): string; + getVerticalAutocomplete(): string; + getVerticalSearchEndpoint(): string; +} + // @public export type EnumOrLiteral = T | `${T}`; @@ -581,7 +606,7 @@ export interface RichTextSnippetDirectAnswer extends Omit; } -// @public +// @public @deprecated export const SandboxEndpoints: Required; // @public diff --git a/src/constants.ts b/src/constants.ts index fed7d675..f99f4c6e 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -2,27 +2,125 @@ import { Endpoints } from './models/core/Endpoints'; export const defaultApiVersion = 20220511; -export const defaultEndpoints: Required = { - universalSearch: 'https://liveapi.yext.com/v2/accounts/me/search/query', - verticalSearch: 'https://liveapi.yext.com/v2/accounts/me/search/vertical/query', - questionSubmission: 'https://liveapi.yext.com/v2/accounts/me/createQuestion', - status: 'https://answersstatus.pagescdn.com', - universalAutocomplete: 'https://liveapi-cached.yext.com/v2/accounts/me/search/autocomplete', - verticalAutocomplete: 'https://liveapi-cached.yext.com/v2/accounts/me/search/vertical/autocomplete', - filterSearch: 'https://liveapi-cached.yext.com/v2/accounts/me/search/filtersearch', -} as const; +export enum CloudRegion { + US = 'us', + EU = 'eu', +} + +export enum Environment { + PROD = 'prod', + SANDBOX = 'sbx', +} /** - * The endpoints to use for sandbox experiences. + * Provides methods for getting various endpoints. * * @public */ -export const SandboxEndpoints: Required = { - universalSearch: 'https://liveapi-sandbox.yext.com/v2/accounts/me/search/query', - verticalSearch: 'https://liveapi-sandbox.yext.com/v2/accounts/me/search/vertical/query', - questionSubmission: 'https://liveapi-sandbox.yext.com/v2/accounts/me/createQuestion', - status: 'https://answersstatus.pagescdn.com', - universalAutocomplete: 'https://liveapi-sandbox.yext.com/v2/accounts/me/search/autocomplete', - verticalAutocomplete: 'https://liveapi-sandbox.yext.com/v2/accounts/me/search/vertical/autocomplete', - filterSearch: 'https://liveapi-sandbox.yext.com/v2/accounts/me/search/filtersearch', -} as const; \ No newline at end of file +export class EndpointsProvider { + private readonly environment: Environment; + private readonly cloudRegion: CloudRegion; + private readonly overrideEndpoints?: Endpoints; + + constructor(environment?: Environment, cloudRegion?: CloudRegion, overrideEndpoints?: Endpoints) { + this.environment = environment || Environment.PROD; + this.cloudRegion = cloudRegion || CloudRegion.US; + this.overrideEndpoints = overrideEndpoints; + } + + /** @internal */ + getDomain() { + return `https://${this.environment}-cdn.${this.cloudRegion}.yextapis.com`; + } + + /** + * Provides all endpoints based on environment and cloud region. Include any custom + * overrides in overrideEndpoints. + * + * @remarks + * Returns an {@link Endpoints} instance. + * + * @public + */ + getEndpoints() { + return { + universalSearch: this.getUniversalSearchEndpoint(), + verticalSearch: this.getVerticalSearchEndpoint(), + questionSubmission: this.getQuestionSubmissionEndpoint(), + status: this.getStatusEndpoint(), + universalAutocomplete: this.getUniversalAutocomplete(), + verticalAutocomplete: this.getVerticalAutocomplete(), + filterSearch: this.getFilterSearchEndpoint(), + }; + } + + /** + * Returns the endpoint for universal search. + * @public + * */ + getUniversalSearchEndpoint() { + return this.overrideEndpoints?.universalSearch || + `${this.getDomain()}/v2/accounts/me/search/query`; + } + + /** + * Returns the endpoint for vertical search. + * @public + * */ + getVerticalSearchEndpoint() { + return this.overrideEndpoints?.verticalSearch || + `${this.getDomain()}/v2/accounts/me/search/vertical/query`; + } + + /** + * Returns the endpoint for question submission. + * @public + * */ + getQuestionSubmissionEndpoint() { + return this.overrideEndpoints?.questionSubmission || + `${this.getDomain()}/v2/accounts/me/createQuestion`; + } + + /** + * Returns the endpoint for status. + * @public + * */ + getStatusEndpoint() { + return this.overrideEndpoints?.status || 'https://answersstatus.pagescdn.com'; + } + + /** + * Returns the endpoint for universal autocomplete. + * @public + * */ + getUniversalAutocomplete() { + return this.overrideEndpoints?.universalAutocomplete || + `${this.getDomain()}/v2/accounts/me/search/autocomplete`; + } + + /** + * Returns the endpoint for vertical autocomplete. + * @public + * */ + getVerticalAutocomplete() { + return this.overrideEndpoints?.verticalAutocomplete || + `${this.getDomain()}/v2/accounts/me/search/vertical/autocomplete`; + } + + /** + * Returns the endpoint for filter search. + * @public + * */ + getFilterSearchEndpoint() { + return this.overrideEndpoints?.filterSearch || + `${this.getDomain()}/v2/accounts/me/search/filtersearch`; + } +} + +/** + * The endpoints to use for sandbox experiences. + * @deprecated Use {@link EndpointsProvider} instead + * @public + */ +export const SandboxEndpoints: Required = + new EndpointsProvider(Environment.SANDBOX, CloudRegion.US).getEndpoints(); \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index fcff8109..242c2501 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,6 @@ // main symbols export { SearchCore } from './SearchCore'; export { provideCore } from './provideCore'; -export { SandboxEndpoints } from './constants'; +export { EndpointsProvider, SandboxEndpoints } from './constants'; export * from './models'; export * from './services'; \ No newline at end of file diff --git a/src/provideCore.ts b/src/provideCore.ts index be1aac89..6591d4f5 100644 --- a/src/provideCore.ts +++ b/src/provideCore.ts @@ -5,7 +5,7 @@ import { SearchConfig, SearchConfigWithDefaulting } from './models/core/SearchCo import { AutocompleteServiceImpl } from './infra/AutocompleteServiceImpl'; import { ApiResponseValidator } from './validation/ApiResponseValidator'; import { SearchCore } from './SearchCore'; -import { defaultEndpoints } from './constants'; +import { CloudRegion, EndpointsProvider, Environment } from './constants'; /** * The entrypoint to the search-core library. @@ -24,10 +24,8 @@ export function provideCore(config: SearchConfig): SearchCore { const defaultedConfig: SearchConfigWithDefaulting = { ...config, - endpoints: { - ...defaultEndpoints, - ...config.endpoints - } + endpoints: + new EndpointsProvider(Environment.PROD, CloudRegion.US, config.endpoints).getEndpoints() }; const httpService = new HttpServiceImpl(); diff --git a/tests/infra/AutocompleteServiceImpl.ts b/tests/infra/AutocompleteServiceImpl.ts index 5d2838ee..e72df560 100644 --- a/tests/infra/AutocompleteServiceImpl.ts +++ b/tests/infra/AutocompleteServiceImpl.ts @@ -11,12 +11,16 @@ import mockAutocompleteResponse from '../fixtures/autocompleteresponse.json'; import mockAutocompleteResponseWithSections from '../fixtures/autocompleteresponsewithsections.json'; import mockAutocompleteResponseWithFailedVerticals from '../fixtures/autocompleteresponsewithfailedverticals.json'; import mockAutocompleteResponseWithVerticalKeys from '../fixtures/autocompleteresponsewithverticalkeys.json'; -import { defaultEndpoints, defaultApiVersion } from '../../src/constants'; +import { defaultApiVersion, EndpointsProvider } from '../../src/constants'; import { ApiResponseValidator } from '../../src/validation/ApiResponseValidator'; import { ApiResponse } from '../../src/models/searchapi/ApiResponse'; import { SearchError } from '../../src/models/searchapi/SearchError'; import { getClientSdk } from '../../src/utils/getClientSdk'; import { Matcher } from '../../src/models/searchservice/common/Matcher'; +import { Endpoints } from '../../src/models/core/Endpoints'; + +const endpointsProvider: EndpointsProvider = new EndpointsProvider(); +const defaultEndpoints: Required = endpointsProvider.getEndpoints(); describe('AutocompleteService', () => { const config: SearchConfigWithDefaulting = { @@ -56,7 +60,7 @@ describe('AutocompleteService', () => { } describe('Universal Autocomplete', () => { - const expectedUniversalUrl = defaultEndpoints.universalAutocomplete; + const expectedUniversalUrl = endpointsProvider.getUniversalAutocomplete(); const request: UniversalAutocompleteRequest = { input: '', sessionTrackingEnabled: false @@ -131,7 +135,7 @@ describe('AutocompleteService', () => { }); describe('Vertical Autocomplete', () => { - const expectedVerticalUrl = defaultEndpoints.verticalAutocomplete; + const expectedVerticalUrl = endpointsProvider.getVerticalAutocomplete(); const request: VerticalAutocompleteRequest = { input: 'salesforce', sessionTrackingEnabled: false, @@ -181,7 +185,7 @@ describe('AutocompleteService', () => { }); describe('FilterSearch', () => { - const expectedFilterUrl = defaultEndpoints.filterSearch; + const expectedFilterUrl = endpointsProvider.getFilterSearchEndpoint(); it('query params are correct', async () => { const convertedSearchParams = { sectioned: false, diff --git a/tests/infra/QuestionSubmissionServiceImpl.ts b/tests/infra/QuestionSubmissionServiceImpl.ts index 87933a2a..1bf2794a 100644 --- a/tests/infra/QuestionSubmissionServiceImpl.ts +++ b/tests/infra/QuestionSubmissionServiceImpl.ts @@ -3,14 +3,14 @@ import { HttpServiceMock } from '../mocks/HttpServiceMock'; import { HttpService } from '../../src/services/HttpService'; import { SearchConfigWithDefaulting } from '../../src/models/core/SearchConfig'; import { ApiResponseValidator } from '../../src/validation/ApiResponseValidator'; -import { defaultApiVersion, defaultEndpoints } from '../../src/constants'; +import { defaultApiVersion, EndpointsProvider } from '../../src/constants'; const baseCoreConfig = { apiKey: 'anApiKey', experienceKey: 'anExperienceKey', locale: 'fr', experienceVersion: 'STAGING', - endpoints: defaultEndpoints + endpoints: new EndpointsProvider().getEndpoints() }; const qaRequest = { @@ -42,7 +42,7 @@ describe('Question submission', () => { }); it('uses the production endpoint by default', () => { - const expectedUrl = 'https://liveapi.yext.com/v2/accounts/me/createQuestion'; + const expectedUrl = 'https://prod-cdn.us.yextapis.com/v2/accounts/me/createQuestion'; const actualUrl = actualHttpParams[0]; expect(expectedUrl).toEqual(actualUrl); }); diff --git a/tests/infra/SearchServiceImpl.ts b/tests/infra/SearchServiceImpl.ts index 5460b3eb..0952b660 100644 --- a/tests/infra/SearchServiceImpl.ts +++ b/tests/infra/SearchServiceImpl.ts @@ -11,7 +11,10 @@ import { Matcher } from '../../src/models/searchservice/common/Matcher'; import { Direction } from '../../src/models/searchservice/request/Direction'; import { SortType } from '../../src/models/searchservice/request/SortType'; import { getClientSdk } from '../../src/utils/getClientSdk'; -import { defaultApiVersion, defaultEndpoints } from '../../src/constants'; +import { CloudRegion, defaultApiVersion, EndpointsProvider, Environment } from '../../src/constants'; +import { Endpoints } from '../../src/models/core/Endpoints'; + +const defaultEndpoints: Required = new EndpointsProvider().getEndpoints(); describe('SearchService', () => { const configWithRequiredApiKey: SearchConfigWithDefaulting = { @@ -74,7 +77,7 @@ describe('SearchService', () => { }); describe('Universal Search', () => { - const expectedUniversalUrl = 'https://liveapi.yext.com/v2/accounts/me/search/query'; + const expectedUniversalUrl = 'https://prod-cdn.us.yextapis.com/v2/accounts/me/search/query'; it('Query params are correct when only required params (without token) are supplied', async () => { const requestWithRequiredParams: UniversalSearchRequest = { @@ -157,10 +160,13 @@ describe('SearchService', () => { const customUrl = 'http://custom.endpoint.com/api'; const config: SearchConfigWithDefaulting = { ...configWithRequiredApiKey, - endpoints: { - ...defaultEndpoints, - universalSearch: customUrl - } + endpoints: + new EndpointsProvider( + Environment.PROD, + CloudRegion.US, + { + universalSearch: customUrl + }).getEndpoints() }; const searchService: SearchServiceImpl = new SearchServiceImpl( config, @@ -200,7 +206,7 @@ describe('SearchService', () => { }); describe('Vertical Search', () => { - const expectedVerticalUrl = 'https://liveapi.yext.com/v2/accounts/me/search/vertical/query'; + const expectedVerticalUrl = 'https://prod-cdn.us.yextapis.com/v2/accounts/me/search/vertical/query'; it('Query params are correct when only required params (without token) are supplied', async () => { const requestWithRequiredParams: VerticalSearchRequest = { diff --git a/tests/provideCore.ts b/tests/provideCore.ts index 92615fdb..d4d0871b 100644 --- a/tests/provideCore.ts +++ b/tests/provideCore.ts @@ -1,4 +1,4 @@ -import { SandboxEndpoints } from '../src/constants'; +import { CloudRegion, EndpointsProvider, Environment } from '../src/constants'; import { AutocompleteServiceImpl } from '../src/infra/AutocompleteServiceImpl'; import { QuestionSubmissionServiceImpl } from '../src/infra/QuestionSubmissionServiceImpl'; import { SearchServiceImpl } from '../src/infra/SearchServiceImpl'; @@ -11,10 +11,13 @@ jest.mock('../src/infra/QuestionSubmissionServiceImpl'); jest.mock('../src/infra/SearchServiceImpl'); it('can specify custom endpoints', () => { - const customEndPoints: Required = { - ...SandboxEndpoints, - verticalSearch: '' - }; + const customEndPoints: Required = + new EndpointsProvider( + Environment.SANDBOX, + CloudRegion.US, + { + verticalSearch: '' + }).getEndpoints(); provideCore({ apiKey: '',