diff --git a/package.json b/package.json index 8153dae9f..1845e1192 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,7 @@ }, { "path": "packages/recommend/dist/recommend.umd.js", - "maxSize": "4.3KB" + "maxSize": "4.4KB" } ] } diff --git a/packages/recommend/src/builds/browser.ts b/packages/recommend/src/builds/browser.ts index 7a28bcab7..a792941f2 100644 --- a/packages/recommend/src/builds/browser.ts +++ b/packages/recommend/src/builds/browser.ts @@ -12,6 +12,7 @@ import { getFrequentlyBoughtTogether, getLookingSimilar, getRecommendations, + getRecommendedForYou, getRelatedProducts, getTrendingFacets, getTrendingItems, @@ -57,6 +58,7 @@ export default function recommend( getTrendingFacets, getTrendingItems, getLookingSimilar, + getRecommendedForYou, }, }); } diff --git a/packages/recommend/src/builds/node.ts b/packages/recommend/src/builds/node.ts index 04017e60d..61f514d3e 100644 --- a/packages/recommend/src/builds/node.ts +++ b/packages/recommend/src/builds/node.ts @@ -11,6 +11,7 @@ import { getFrequentlyBoughtTogether, getLookingSimilar, getRecommendations, + getRecommendedForYou, getRelatedProducts, getTrendingFacets, getTrendingItems, @@ -51,6 +52,7 @@ export default function recommend( getTrendingFacets, getTrendingItems, getLookingSimilar, + getRecommendedForYou, }, }); } diff --git a/packages/recommend/src/methods/getRecommendations.ts b/packages/recommend/src/methods/getRecommendations.ts index 5f57595f4..b6b283197 100644 --- a/packages/recommend/src/methods/getRecommendations.ts +++ b/packages/recommend/src/methods/getRecommendations.ts @@ -1,6 +1,11 @@ import { MethodEnum } from '@algolia/requester-common'; -import { BaseRecommendClient, RecommendationsQuery, WithRecommendMethods } from '../types'; +import { + BaseRecommendClient, + RecommendationsQuery, + RecommendedForYouQuery, + WithRecommendMethods, +} from '../types'; import { TrendingQuery } from '../types/TrendingQuery'; type GetRecommendations = ( @@ -9,7 +14,9 @@ type GetRecommendations = ( export const getRecommendations: GetRecommendations = base => { return (queries: ReadonlyArray, requestOptions) => { - const requests: ReadonlyArray = queries.map(query => ({ + const requests: ReadonlyArray< + RecommendationsQuery | TrendingQuery | RecommendedForYouQuery + > = queries.map(query => ({ ...query, // The `threshold` param is required by the endpoint to make it easier // to provide a default value later, so we default it in the client diff --git a/packages/recommend/src/methods/getRecommendedForYou.ts b/packages/recommend/src/methods/getRecommendedForYou.ts new file mode 100644 index 000000000..7f598c556 --- /dev/null +++ b/packages/recommend/src/methods/getRecommendedForYou.ts @@ -0,0 +1,29 @@ +import { MethodEnum } from '@algolia/requester-common'; + +import { BaseRecommendClient, RecommendedForYouQuery, WithRecommendMethods } from '../types'; + +type GetRecommendedForYou = ( + base: BaseRecommendClient +) => WithRecommendMethods['getRecommendedForYou']; + +export const getRecommendedForYou: GetRecommendedForYou = base => { + return (queries: readonly RecommendedForYouQuery[], requestOptions) => { + const requests: readonly RecommendedForYouQuery[] = queries.map(query => ({ + ...query, + model: 'recommended-for-you', + threshold: query.threshold || 0, + })); + + return base.transporter.read( + { + method: MethodEnum.Post, + path: '1/indexes/*/recommendations', + data: { + requests, + }, + cacheable: true, + }, + requestOptions + ); + }; +}; diff --git a/packages/recommend/src/methods/index.ts b/packages/recommend/src/methods/index.ts index 31bd3988b..f12d1ea77 100644 --- a/packages/recommend/src/methods/index.ts +++ b/packages/recommend/src/methods/index.ts @@ -8,3 +8,4 @@ export * from './getRelatedProducts'; export * from './getTrendingFacets'; export * from './getTrendingItems'; export * from './getLookingSimilar'; +export * from './getRecommendedForYou'; diff --git a/packages/recommend/src/types/RecommendModel.ts b/packages/recommend/src/types/RecommendModel.ts index d921e71fa..b1f985d25 100644 --- a/packages/recommend/src/types/RecommendModel.ts +++ b/packages/recommend/src/types/RecommendModel.ts @@ -3,4 +3,5 @@ export type RecommendModel = | 'related-products' | 'bought-together' | 'looking-similar' + | 'recommended-for-you' | TrendingModel; diff --git a/packages/recommend/src/types/RecommendedForYouQuery.ts b/packages/recommend/src/types/RecommendedForYouQuery.ts new file mode 100644 index 000000000..7ea9d685a --- /dev/null +++ b/packages/recommend/src/types/RecommendedForYouQuery.ts @@ -0,0 +1,3 @@ +import { RecommendationsQuery } from './RecommendationsQuery'; + +export type RecommendedForYouQuery = Omit; diff --git a/packages/recommend/src/types/WithRecommendMethods.ts b/packages/recommend/src/types/WithRecommendMethods.ts index 1647e2f67..d51be5bf2 100644 --- a/packages/recommend/src/types/WithRecommendMethods.ts +++ b/packages/recommend/src/types/WithRecommendMethods.ts @@ -1,6 +1,7 @@ import { SearchOptions, SearchResponse } from '@algolia/client-search'; import { RequestOptions } from '@algolia/transporter'; +import { RecommendedForYouQuery } from '../builds/node'; import { FrequentlyBoughtTogetherQuery } from './FrequentlyBoughtTogetherQuery'; import { LookingSimilarQuery } from './LookingSimilarQuery'; import { RecommendationsQuery } from './RecommendationsQuery'; @@ -72,4 +73,12 @@ export type WithRecommendMethods = TType & { queries: readonly LookingSimilarQuery[], requestOptions?: RequestOptions & SearchOptions ) => Readonly>>; + + /** + * Returns Recommended for you + */ + readonly getRecommendedForYou: ( + queries: readonly RecommendedForYouQuery[], + requestOptions?: RequestOptions & SearchOptions + ) => Readonly>>; }; diff --git a/packages/recommend/src/types/index.ts b/packages/recommend/src/types/index.ts index 8c73656da..843fb144a 100644 --- a/packages/recommend/src/types/index.ts +++ b/packages/recommend/src/types/index.ts @@ -15,5 +15,6 @@ export * from './TrendingItemsQuery'; export * from './TrendingQuery'; export * from './WithRecommendMethods'; export * from './LookingSimilarQuery'; +export * from './RecommendedForYouQuery'; export * from './TrendingFacetHit'; export * from './TrendingFacetsResponse'; diff --git a/playground/browser/index.html b/playground/browser/index.html index 78944576b..1b3f6f54e 100644 --- a/playground/browser/index.html +++ b/playground/browser/index.html @@ -2,6 +2,7 @@ + diff --git a/scripts/prepare-playground.sh b/scripts/prepare-playground.sh index 09bb055bb..9d189f4df 100755 --- a/scripts/prepare-playground.sh +++ b/scripts/prepare-playground.sh @@ -1,2 +1,3 @@ cp -a packages/algoliasearch/dist/algoliasearch-lite.umd* playground/browser-lite/. cp -a packages/algoliasearch/dist/algoliasearch.umd* playground/browser/. +cp -a packages/recommend/dist/recommend.umd* playground/browser/.