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: '',