Skip to content

Commit 97ebde6

Browse files
feat(recommend): introduce Recommend API client (#1280)
feat(recommend): introduce Recommend API client feat(personalization): deprecate client-recommendation (#1278)
1 parent 831a3de commit 97ebde6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+1426
-100
lines changed

.eslintrc.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,12 @@ module.exports = {
6161
['@algolia/client-account', './packages/client-account/src'],
6262
['@algolia/client-analytics', './packages/client-analytics/src'],
6363
['@algolia/client-common', './packages/client-common/src'],
64-
['@algolia/client-search', './packages/client-search/src'],
64+
['@algolia/client-personalization', './packages/client-personalization/src'],
6565
['@algolia/client-recommendation', './packages/client-recommendation/src'],
66+
['@algolia/client-search', './packages/client-search/src'],
6667
['@algolia/logger-common', './packages/logger-common/src'],
6768
['@algolia/logger-console', './packages/logger-console/src'],
69+
['@algolia/recommend', './packages/recommend/src'],
6870
['@algolia/requester-browser-xhr', './packages/requester-browser-xhr/src'],
6971
['@algolia/requester-common', './packages/requester-common/src'],
7072
['@algolia/requester-node-http', './packages/requester-node-http/src'],

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<a href="https://npmjs.org/package/algoliasearch"><img src="https://img.shields.io/npm/v/algoliasearch.svg?style=flat-square" alt="NPM version"></img></a>
1010
<a href="http://npm-stat.com/charts.html?package=algoliasearch"><img src="https://img.shields.io/npm/dm/algoliasearch.svg?style=flat-square" alt="NPM downloads"></a>
1111
<a href="https://www.jsdelivr.com/package/npm/algoliasearch"><img src="https://data.jsdelivr.com/v1/package/npm/algoliasearch/badge" alt="jsDelivr Downloads"></img></a>
12-
<a href="LICENSE.txt"><img src="https://img.shields.io/badge/license-MIT-green.svg?style=flat-square" alt="License"></a>
12+
<a href="LICENSE.md"><img src="https://img.shields.io/badge/license-MIT-green.svg?style=flat-square" alt="License"></a>
1313
</p>
1414
</p>
1515

@@ -88,4 +88,4 @@ Encountering an issue? Before reaching out to support, we recommend heading to o
8888

8989
## 📄 License
9090

91-
Algolia JavaScript API Client is an open-sourced software licensed under the [MIT license](LICENSE.txt).
91+
Algolia JavaScript API Client is an open-sourced software licensed under the [MIT license](LICENSE.md).

package.json

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
2+
"version": "4.9.3",
23
"private": true,
34
"license": "MIT",
4-
"version": "4.9.3",
55
"workspaces": [
66
"packages/*"
77
],
@@ -98,11 +98,15 @@
9898
"bundlesize": [
9999
{
100100
"path": "packages/algoliasearch/dist/algoliasearch.umd.js",
101-
"maxSize": "7.85KB"
101+
"maxSize": "7.95KB"
102102
},
103103
{
104104
"path": "packages/algoliasearch/dist/algoliasearch-lite.umd.js",
105105
"maxSize": "4.35KB"
106+
},
107+
{
108+
"path": "packages/recommend/dist/recommend.umd.js",
109+
"maxSize": "4.1KB"
106110
}
107111
]
108112
}

packages/algoliasearch/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<a href="https://npmjs.org/package/algoliasearch"><img src="https://img.shields.io/npm/v/algoliasearch.svg?style=flat-square" alt="NPM version"></img></a>
1010
<a href="http://npm-stat.com/charts.html?package=algoliasearch"><img src="https://img.shields.io/npm/dm/algoliasearch.svg?style=flat-square" alt="NPM downloads"></a>
1111
<a href="https://www.jsdelivr.com/package/npm/algoliasearch"><img src="https://data.jsdelivr.com/v1/package/npm/algoliasearch/badge" alt="jsDelivr Downloads"></img></a>
12-
<a href="LICENSE.txt"><img src="https://img.shields.io/badge/license-MIT-green.svg?style=flat-square" alt="License"></a>
12+
<a href="LICENSE.md"><img src="https://img.shields.io/badge/license-MIT-green.svg?style=flat-square" alt="License"></a>
1313
</p>
1414
</p>
1515

@@ -79,4 +79,4 @@ For full documentation, visit the **[online documentation](https://www.algolia.c
7979

8080
## 📄 License
8181

82-
Algolia JavaScript API Client is an open-sourced software licensed under the [MIT license](LICENSE.txt).
82+
Algolia JavaScript API Client is an open-sourced software licensed under the [MIT license](LICENSE.md).

packages/algoliasearch/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
"@algolia/client-account": "4.9.3",
3232
"@algolia/client-analytics": "4.9.3",
3333
"@algolia/client-common": "4.9.3",
34-
"@algolia/client-recommendation": "4.9.3",
34+
"@algolia/client-personalization": "4.9.3",
3535
"@algolia/client-search": "4.9.3",
3636
"@algolia/logger-common": "4.9.3",
3737
"@algolia/logger-console": "4.9.3",

packages/algoliasearch/src/__tests__/default.test.ts

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ describe('default preset', () => {
8383

8484
expect(client.transporter.requestsCache).not.toBe(cache);
8585
expect(customClient.transporter.requestsCache).toBe(cache);
86-
expect(customClient.initRecommendation().transporter.requestsCache).not.toBe(cache);
86+
expect(customClient.initPersonalization().transporter.requestsCache).not.toBe(cache);
8787
expect(customClient.initAnalytics({ requestsCache: cache }).transporter.requestsCache).toBe(
8888
cache
8989
);
@@ -92,7 +92,7 @@ describe('default preset', () => {
9292
read: 46,
9393
write: 47,
9494
});
95-
expect(customClient.initRecommendation().transporter.timeouts).toEqual({
95+
expect(customClient.initPersonalization().transporter.timeouts).toEqual({
9696
connect: testing.isBrowser() ? 1 : 2,
9797
read: testing.isBrowser() ? 2 : 5,
9898
write: 30,
@@ -110,7 +110,7 @@ describe('default preset', () => {
110110
expect(customClient.transporter.hosts).toEqual([createStatelessHost({ url: 'foo.com' })]);
111111

112112
expect(customClient.initAnalytics().transporter.queryParameters).toEqual({});
113-
expect(customClient.initRecommendation().transporter.headers).toEqual({
113+
expect(customClient.initPersonalization().transporter.headers).toEqual({
114114
'content-type': 'application/json',
115115
'x-algolia-application-id': 'appId',
116116
'x-algolia-api-key': 'apiKey',
@@ -119,31 +119,31 @@ describe('default preset', () => {
119119
createStatelessHost({ url: 'foo.com' }),
120120
]);
121121

122-
expect(customClient.initRecommendation().transporter.queryParameters).not.toEqual({
122+
expect(customClient.initPersonalization().transporter.queryParameters).not.toEqual({
123123
queryParameter: 'bar',
124124
});
125125

126-
expect(customClient.initRecommendation().transporter.headers).toEqual({
126+
expect(customClient.initPersonalization().transporter.headers).toEqual({
127127
'content-type': 'application/json',
128128
'x-algolia-application-id': 'appId',
129129
'x-algolia-api-key': 'apiKey',
130130
});
131-
expect(customClient.initRecommendation().transporter.hosts).not.toEqual([
131+
expect(customClient.initPersonalization().transporter.hosts).not.toEqual([
132132
createStatelessHost({ url: 'foo.com' }),
133133
]);
134134
});
135135

136136
test('shared implementations between clients', () => {
137137
const analytics = client.initAnalytics();
138-
const recommendation = client.initRecommendation();
138+
const personalization = client.initPersonalization();
139139

140140
expect(analytics.transporter).not.toBe(client.transporter);
141141
expect(analytics.transporter.hostsCache).toBe(client.transporter.hostsCache);
142142
expect(analytics.transporter.userAgent).toBe(client.transporter.userAgent);
143143

144-
expect(recommendation.transporter).not.toBe(client.transporter);
145-
expect(recommendation.transporter.hostsCache).toBe(client.transporter.hostsCache);
146-
expect(recommendation.transporter.userAgent).toBe(client.transporter.userAgent);
144+
expect(personalization.transporter).not.toBe(client.transporter);
145+
expect(personalization.transporter.hostsCache).toBe(client.transporter.hostsCache);
146+
expect(personalization.transporter.userAgent).toBe(client.transporter.userAgent);
147147
});
148148

149149
test('allows clients to override credentials', () => {
@@ -154,12 +154,12 @@ describe('default preset', () => {
154154
const analytics = clientWithOptions.initAnalytics({
155155
apiKey: 'analytics',
156156
});
157-
const recommendation = clientWithOptions.initRecommendation({
158-
apiKey: 'recommendation',
157+
const personalization = clientWithOptions.initPersonalization({
158+
apiKey: 'personalization',
159159
});
160160

161161
expect(analytics.transporter.headers['x-algolia-api-key']).toBe('analytics');
162-
expect(recommendation.transporter.headers['x-algolia-api-key']).toBe('recommendation');
162+
expect(personalization.transporter.headers['x-algolia-api-key']).toBe('personalization');
163163
});
164164

165165
test('allows clients to keep default credentials', () => {
@@ -168,10 +168,10 @@ describe('default preset', () => {
168168
expect(clientWithOptions.transporter.headers['x-algolia-api-key']).toBe('apiKey');
169169

170170
const analytics = clientWithOptions.initAnalytics();
171-
const recommendation = clientWithOptions.initRecommendation();
171+
const personalization = clientWithOptions.initPersonalization();
172172

173173
expect(analytics.transporter.headers['x-algolia-api-key']).toBe('apiKey');
174-
expect(recommendation.transporter.headers['x-algolia-api-key']).toBe('apiKey');
174+
expect(personalization.transporter.headers['x-algolia-api-key']).toBe('apiKey');
175175
});
176176

177177
it('can be destroyed', () => {

packages/algoliasearch/src/builds/browser.ts

Lines changed: 37 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ import {
1919
} from '@algolia/client-analytics';
2020
import { version, WaitablePromise } from '@algolia/client-common';
2121
import {
22-
createRecommendationClient,
22+
createPersonalizationClient,
2323
getPersonalizationStrategy,
2424
GetPersonalizationStrategyResponse,
25+
PersonalizationClient as BasePersonalizationClient,
2526
PersonalizationStrategy,
26-
RecommendationClient as BaseRecommendationClient,
2727
setPersonalizationStrategy,
2828
SetPersonalizationStrategyResponse,
29-
} from '@algolia/client-recommendation';
29+
} from '@algolia/client-personalization';
3030
import {
3131
addApiKey,
3232
AddApiKeyOptions,
@@ -192,7 +192,7 @@ import { createConsoleLogger } from '@algolia/logger-console';
192192
import { createBrowserXhrRequester } from '@algolia/requester-browser-xhr';
193193
import { createUserAgent, RequestOptions } from '@algolia/transporter';
194194

195-
import { AlgoliaSearchOptions, InitAnalyticsOptions, InitRecommendationOptions } from '../types';
195+
import { AlgoliaSearchOptions, InitAnalyticsOptions, InitPersonalizationOptions } from '../types';
196196

197197
export default function algoliasearch(
198198
appId: string,
@@ -219,10 +219,22 @@ export default function algoliasearch(
219219
}),
220220
userAgent: createUserAgent(version).add({ segment: 'Browser' }),
221221
};
222+
const searchClientOptions = { ...commonOptions, ...options };
223+
const initPersonalization = () => (
224+
clientOptions?: InitPersonalizationOptions
225+
): PersonalizationClient => {
226+
return createPersonalizationClient({
227+
...commonOptions,
228+
...clientOptions,
229+
methods: {
230+
getPersonalizationStrategy,
231+
setPersonalizationStrategy,
232+
},
233+
});
234+
};
222235

223236
return createSearchClient({
224-
...commonOptions,
225-
...options,
237+
...searchClientOptions,
226238
methods: {
227239
search: multipleQueries,
228240
searchForFacetValues: multipleSearchForFacetValues,
@@ -319,17 +331,15 @@ export default function algoliasearch(
319331
},
320332
});
321333
},
334+
initPersonalization,
322335
initRecommendation: () => (
323-
clientOptions?: InitRecommendationOptions
324-
): RecommendationClient => {
325-
return createRecommendationClient({
326-
...commonOptions,
327-
...clientOptions,
328-
methods: {
329-
getPersonalizationStrategy,
330-
setPersonalizationStrategy,
331-
},
332-
});
336+
clientOptions?: InitPersonalizationOptions
337+
): PersonalizationClient => {
338+
searchClientOptions.logger.info(
339+
'The `initRecommendation` method is deprecated. Use `initPersonalization` instead.'
340+
);
341+
342+
return initPersonalization()(clientOptions);
333343
},
334344
},
335345
});
@@ -338,7 +348,7 @@ export default function algoliasearch(
338348
// eslint-disable-next-line functional/immutable-data
339349
algoliasearch.version = version;
340350

341-
export type RecommendationClient = BaseRecommendationClient & {
351+
export type PersonalizationClient = BasePersonalizationClient & {
342352
readonly getPersonalizationStrategy: (
343353
requestOptions?: RequestOptions
344354
) => Readonly<Promise<GetPersonalizationStrategyResponse>>;
@@ -348,6 +358,11 @@ export type RecommendationClient = BaseRecommendationClient & {
348358
) => Readonly<Promise<SetPersonalizationStrategyResponse>>;
349359
};
350360

361+
/**
362+
* @deprecated Use `PersonalizationClient` instead.
363+
*/
364+
export type RecommendationClient = PersonalizationClient;
365+
351366
export type AnalyticsClient = BaseAnalyticsClient & {
352367
readonly addABTest: (
353368
abTest: ABTest,
@@ -663,7 +678,11 @@ export type SearchClient = BaseSearchClient & {
663678
requestOptions?: RequestOptions
664679
) => Readonly<Promise<TaskStatusResponse>>;
665680
readonly initAnalytics: (options?: InitAnalyticsOptions) => AnalyticsClient;
666-
readonly initRecommendation: (options?: InitRecommendationOptions) => RecommendationClient;
681+
readonly initPersonalization: (options?: InitPersonalizationOptions) => PersonalizationClient;
682+
/**
683+
* @deprecated Use `initPersonalization` instead.
684+
*/
685+
readonly initRecommendation: (options?: InitPersonalizationOptions) => PersonalizationClient;
667686
};
668687

669688
export * from '../types';

packages/algoliasearch/src/builds/node.ts

Lines changed: 37 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@ import {
1818
} from '@algolia/client-analytics';
1919
import { destroy, version, WaitablePromise } from '@algolia/client-common';
2020
import {
21-
createRecommendationClient,
21+
createPersonalizationClient,
2222
getPersonalizationStrategy,
2323
GetPersonalizationStrategyResponse,
24+
PersonalizationClient as BasePersonalizationClient,
2425
PersonalizationStrategy,
25-
RecommendationClient as BaseRecommendationClient,
2626
setPersonalizationStrategy,
2727
SetPersonalizationStrategyResponse,
28-
} from '@algolia/client-recommendation';
28+
} from '@algolia/client-personalization';
2929
import {
3030
addApiKey,
3131
AddApiKeyOptions,
@@ -194,7 +194,7 @@ import { Destroyable } from '@algolia/requester-common';
194194
import { createNodeHttpRequester } from '@algolia/requester-node-http';
195195
import { createUserAgent, RequestOptions } from '@algolia/transporter';
196196

197-
import { AlgoliaSearchOptions, InitAnalyticsOptions, InitRecommendationOptions } from '../types';
197+
import { AlgoliaSearchOptions, InitAnalyticsOptions, InitPersonalizationOptions } from '../types';
198198

199199
export default function algoliasearch(
200200
appId: string,
@@ -219,10 +219,22 @@ export default function algoliasearch(
219219
version: process.versions.node,
220220
}),
221221
};
222+
const searchClientOptions = { ...commonOptions, ...options };
223+
const initPersonalization = () => (
224+
clientOptions?: InitPersonalizationOptions
225+
): PersonalizationClient => {
226+
return createPersonalizationClient({
227+
...commonOptions,
228+
...clientOptions,
229+
methods: {
230+
getPersonalizationStrategy,
231+
setPersonalizationStrategy,
232+
},
233+
});
234+
};
222235

223236
return createSearchClient({
224-
...commonOptions,
225-
...options,
237+
...searchClientOptions,
226238
methods: {
227239
search: multipleQueries,
228240
searchForFacetValues: multipleSearchForFacetValues,
@@ -322,17 +334,15 @@ export default function algoliasearch(
322334
},
323335
});
324336
},
337+
initPersonalization,
325338
initRecommendation: () => (
326-
clientOptions?: InitRecommendationOptions
327-
): RecommendationClient => {
328-
return createRecommendationClient({
329-
...commonOptions,
330-
...clientOptions,
331-
methods: {
332-
getPersonalizationStrategy,
333-
setPersonalizationStrategy,
334-
},
335-
});
339+
clientOptions?: InitPersonalizationOptions
340+
): PersonalizationClient => {
341+
searchClientOptions.logger.info(
342+
'The `initRecommendation` method is deprecated. Use `initPersonalization` instead.'
343+
);
344+
345+
return initPersonalization()(clientOptions);
336346
},
337347
},
338348
});
@@ -341,7 +351,7 @@ export default function algoliasearch(
341351
// eslint-disable-next-line functional/immutable-data
342352
algoliasearch.version = version;
343353

344-
export type RecommendationClient = BaseRecommendationClient & {
354+
export type PersonalizationClient = BasePersonalizationClient & {
345355
readonly getPersonalizationStrategy: (
346356
requestOptions?: RequestOptions
347357
) => Readonly<Promise<GetPersonalizationStrategyResponse>>;
@@ -351,6 +361,11 @@ export type RecommendationClient = BaseRecommendationClient & {
351361
) => Readonly<Promise<SetPersonalizationStrategyResponse>>;
352362
};
353363

364+
/**
365+
* @deprecated Use `PersonalizationClient` instead.
366+
*/
367+
export type RecommendationClient = PersonalizationClient;
368+
354369
export type AnalyticsClient = BaseAnalyticsClient & {
355370
readonly addABTest: (
356371
abTest: ABTest,
@@ -671,7 +686,11 @@ export type SearchClient = BaseSearchClient & {
671686
requestOptions?: RequestOptions
672687
) => Readonly<Promise<TaskStatusResponse>>;
673688
readonly initAnalytics: (options?: InitAnalyticsOptions) => AnalyticsClient;
674-
readonly initRecommendation: (options?: InitRecommendationOptions) => RecommendationClient;
689+
readonly initPersonalization: (options?: InitPersonalizationOptions) => PersonalizationClient;
690+
/**
691+
* @deprecated Use `initPersonalization` instead.
692+
*/
693+
readonly initRecommendation: (options?: InitPersonalizationOptions) => PersonalizationClient;
675694
} & Destroyable;
676695

677696
export * from '../types';

0 commit comments

Comments
 (0)