Skip to content

Commit 3994f53

Browse files
benamibBilel Benamirashortcuts
authored
feat(clients): add new realtime-personalization api (#4613)
Co-authored-by: Bilel Benamira <[email protected]> Co-authored-by: shortcuts <[email protected]>
1 parent d33037a commit 3994f53

File tree

30 files changed

+422
-101
lines changed

30 files changed

+422
-101
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
targets:
2+
$default:
3+
builders:
4+
json_serializable:
5+
options:
6+
any_map: false
7+
checked: true
8+
create_factory: true
9+
create_to_json: true
10+
disallow_unrecognized_keys: false
11+
explicit_to_json: true
12+
field_rename: none
13+
ignore_unannotated: false
14+
include_if_null: false
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+

clients/algoliasearch-client-javascript/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"packages/*"
88
],
99
"scripts": {
10-
"build": "lerna run build --skip-nx-cache --scope '@algolia/requester-testing' --scope '@algolia/logger-console' --scope 'algoliasearch' --scope '@algolia/client-composition' --scope '@algolia/composition' --include-dependencies",
10+
"build": "lerna run build --skip-nx-cache --scope '@algolia/requester-testing' --scope '@algolia/logger-console' --scope 'algoliasearch' --scope '@algolia/client-composition' --scope '@algolia/composition' --scope '@algolia/client-realtime-personalization' --include-dependencies",
1111
"clean": "lerna run clean",
1212
"release:publish": "tsc --project scripts/tsconfig.json && node scripts/dist/publish.js",
1313
"test": "lerna run test $*",
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
{
2+
"version": "0.0.1-alpha.0",
3+
"repository": {
4+
"type": "git",
5+
"url": "git+https://github.com/algolia/algoliasearch-client-javascript.git"
6+
},
7+
"homepage": "https://github.com/algolia/algoliasearch-client-javascript/packages/client-realtime-personalization#readme",
8+
"type": "module",
9+
"license": "MIT",
10+
"author": "Algolia",
11+
"scripts": {
12+
"build": "yarn clean && yarn tsup && yarn rollup -c rollup.config.js",
13+
"clean": "rm -rf ./dist || true",
14+
"test:bundle": "publint . && attw --pack ."
15+
},
16+
"name": "@algolia/client-realtime-personalization",
17+
"description": "JavaScript client for client-realtime-personalization",
18+
"exports": {
19+
".": {
20+
"node": {
21+
"types": {
22+
"import": "./dist/node.d.ts",
23+
"module": "./dist/node.d.ts",
24+
"require": "./dist/node.d.cts"
25+
},
26+
"import": "./dist/builds/node.js",
27+
"module": "./dist/builds/node.js",
28+
"require": "./dist/builds/node.cjs"
29+
},
30+
"worker": {
31+
"types": "./dist/worker.d.ts",
32+
"default": "./dist/builds/worker.js"
33+
},
34+
"default": {
35+
"types": "./dist/browser.d.ts",
36+
"module": "./dist/builds/browser.js",
37+
"import": "./dist/builds/browser.js",
38+
"default": "./dist/builds/browser.umd.js"
39+
}
40+
},
41+
"./dist/builds/*": "./dist/builds/*.js"
42+
},
43+
"jsdelivr": "./dist/builds/browser.umd.js",
44+
"unpkg": "./dist/builds/browser.umd.js",
45+
"react-native": "./dist/builds/browser.js",
46+
"files": [
47+
"dist",
48+
"index.js",
49+
"index.d.ts"
50+
],
51+
"dependencies": {
52+
"@algolia/client-common": "5.22.0",
53+
"@algolia/requester-browser-xhr": "5.22.0",
54+
"@algolia/requester-fetch": "5.22.0",
55+
"@algolia/requester-node-http": "5.22.0"
56+
},
57+
"devDependencies": {
58+
"@arethetypeswrong/cli": "0.17.4",
59+
"@types/node": "22.13.11",
60+
"publint": "0.3.9",
61+
"rollup": "4.36.0",
62+
"tsup": "8.4.0",
63+
"typescript": "5.7.3"
64+
},
65+
"engines": {
66+
"node": ">= 14.0.0"
67+
}
68+
}

clients/algoliasearch-client-javascript/yarn.lock

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,23 @@ __metadata:
122122
languageName: unknown
123123
linkType: soft
124124

125+
"@algolia/client-realtime-personalization@workspace:packages/client-realtime-personalization":
126+
version: 0.0.0-use.local
127+
resolution: "@algolia/client-realtime-personalization@workspace:packages/client-realtime-personalization"
128+
dependencies:
129+
"@algolia/client-common": "npm:5.22.0"
130+
"@algolia/requester-browser-xhr": "npm:5.22.0"
131+
"@algolia/requester-fetch": "npm:5.22.0"
132+
"@algolia/requester-node-http": "npm:5.22.0"
133+
"@arethetypeswrong/cli": "npm:0.17.4"
134+
"@types/node": "npm:22.13.11"
135+
publint: "npm:0.3.9"
136+
rollup: "npm:4.36.0"
137+
tsup: "npm:8.4.0"
138+
typescript: "npm:5.7.3"
139+
languageName: unknown
140+
linkType: soft
141+
125142
"@algolia/client-search@npm:5.22.0, @algolia/client-search@workspace:packages/client-search":
126143
version: 0.0.0-use.local
127144
resolution: "@algolia/client-search@workspace:packages/client-search"

config/clients.config.json

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
"personalization",
1111
"query-suggestions",
1212
"recommend",
13-
"search"
13+
"search",
14+
"realtime-personalization"
1415
],
1516
"folder": "clients/algoliasearch-client-csharp",
1617
"gitRepoId": "algoliasearch-client-csharp",
@@ -48,6 +49,10 @@
4849
{
4950
"name": "search",
5051
"output": "clients/algoliasearch-client-dart/packages/client_search"
52+
},
53+
{
54+
"name": "realtime-personalization",
55+
"output": "clients/algoliasearch-client-dart/packages/client_realtime_personalization"
5156
}
5257
],
5358
"folder": "clients/algoliasearch-client-dart",
@@ -76,7 +81,8 @@
7681
"personalization",
7782
"query-suggestions",
7883
"recommend",
79-
"search"
84+
"search",
85+
"realtime-personalization"
8086
],
8187
"folder": "clients/algoliasearch-client-go",
8288
"gitRepoId": "algoliasearch-client-go",
@@ -104,7 +110,8 @@
104110
"personalization",
105111
"query-suggestions",
106112
"recommend",
107-
"search"
113+
"search",
114+
"realtime-personalization"
108115
],
109116
"folder": "clients/algoliasearch-client-java",
110117
"gitRepoId": "algoliasearch-client-java",
@@ -176,6 +183,10 @@
176183
{
177184
"name": "composition-full",
178185
"output": "clients/algoliasearch-client-javascript/packages/client-composition"
186+
},
187+
{
188+
"name": "realtime-personalization",
189+
"output": "clients/algoliasearch-client-javascript/packages/client-realtime-personalization"
179190
}
180191
],
181192
"folder": "clients/algoliasearch-client-javascript",
@@ -203,7 +214,8 @@
203214
"personalization",
204215
"query-suggestions",
205216
"recommend",
206-
"search"
217+
"search",
218+
"realtime-personalization"
207219
],
208220
"folder": "clients/algoliasearch-client-kotlin",
209221
"gitRepoId": "algoliasearch-client-kotlin",
@@ -231,7 +243,8 @@
231243
"personalization",
232244
"query-suggestions",
233245
"recommend",
234-
"search"
246+
"search",
247+
"realtime-personalization"
235248
],
236249
"folder": "clients/algoliasearch-client-php",
237250
"gitRepoId": "algoliasearch-client-php",
@@ -259,7 +272,8 @@
259272
"personalization",
260273
"query-suggestions",
261274
"recommend",
262-
"search"
275+
"search",
276+
"realtime-personalization"
263277
],
264278
"folder": "clients/algoliasearch-client-python",
265279
"gitRepoId": "algoliasearch-client-python",
@@ -294,7 +308,8 @@
294308
"personalization",
295309
"query-suggestions",
296310
"recommend",
297-
"search"
311+
"search",
312+
"realtime-personalization"
298313
],
299314
"folder": "clients/algoliasearch-client-ruby",
300315
"gitRepoId": "algoliasearch-client-ruby",
@@ -322,7 +337,8 @@
322337
"personalization",
323338
"query-suggestions",
324339
"recommend",
325-
"search"
340+
"search",
341+
"realtime-personalization"
326342
],
327343
"folder": "clients/algoliasearch-client-scala",
328344
"gitRepoId": "algoliasearch-client-scala",
@@ -349,7 +365,8 @@
349365
"personalization",
350366
"query-suggestions",
351367
"recommend",
352-
"search"
368+
"search",
369+
"realtime-personalization"
353370
],
354371
"folder": "clients/algoliasearch-client-swift",
355372
"gitRepoId": "algoliasearch-client-swift",

generators/src/main/java/com/algolia/codegen/AlgoliaGoGenerator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ public String getName() {
2828
public void processOpts() {
2929
String client = (String) additionalProperties.get("client");
3030

31-
additionalProperties.put("packageName", client.equals("query-suggestions") ? "suggestions" : client);
31+
additionalProperties.put("packageName", client.equals("query-suggestions") ? "suggestions" : Helpers.camelize(client));
3232
additionalProperties.put("enumClassPrefix", true);
33-
additionalProperties.put("is" + Helpers.capitalize(Helpers.camelize((String) additionalProperties.get("client"))) + "Client", true);
33+
additionalProperties.put("is" + Helpers.capitalize(Helpers.camelize(client)) + "Client", true);
3434

3535
String outputFolder = "algolia" + File.separator + client;
3636
setOutputDir(getOutputDir() + File.separator + outputFolder);

generators/src/main/java/com/algolia/codegen/cts/AlgoliaCTSGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ public Map<String, Object> postProcessSupportingFileData(Map<String, Object> obj
145145
// We can put whatever we want in the bundle, and it will be accessible in the template
146146
bundle.put("mode", mode);
147147
bundle.put("is" + Helpers.capitalize(Helpers.camelize(client)) + "Client", true);
148-
bundle.put("isStandaloneClient", client.contains("search") || client.contains("composition"));
148+
bundle.put("isStandaloneClient", client.contains("search") || client.contains("composition") || client.contains("realtime"));
149149
bundle.put("isSearchClient", client.contains("search")); // just so algoliasearch is treated as a search client too
150150
bundle.put("client", Helpers.createClientName(importClientName, language) + "Client");
151151
bundle.put("clientPrefix", Helpers.createClientName(importClientName, language));

generators/src/main/java/com/algolia/codegen/cts/manager/GoCTSManager.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,13 @@ public String getClient() {
2323

2424
@Override
2525
public void addDataToBundle(Map<String, Object> bundle) throws GeneratorException {
26-
Object clientPrefix = bundle.get("clientPrefix");
26+
String clientPrefix = (String) bundle.get("clientPrefix");
2727
bundle.put("clientName", Helpers.toPascalCase(this.client));
2828

2929
if (clientPrefix.equals("query-suggestions")) {
3030
bundle.put("clientPrefix", "suggestions");
31+
} else {
32+
bundle.put("clientPrefix", Helpers.camelize(clientPrefix));
3133
}
3234

3335
bundle.put("clientImport", clientPrefix);

generators/src/main/java/com/algolia/codegen/cts/manager/JavascriptCTSManager.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ public void addDataToBundle(Map<String, Object> bundle) throws GeneratorExceptio
5656
bundle.put("clientName", "compositionClient");
5757
bundle.put("importPackage", "@algolia/client-composition");
5858
break;
59+
case "realtime-personalization":
60+
bundle.put("clientName", "realtimePersonalizationClient");
61+
bundle.put("importPackage", "@algolia/client-realtime-personalization");
62+
break;
5963
case "algoliasearch":
6064
bundle.put("clientName", "liteClient");
6165
bundle.put("importPackage", "algoliasearch/lite");

generators/src/main/java/com/algolia/codegen/cts/tests/TestsRequest.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,15 @@ public void run(Map<String, CodegenModel> models, Map<String, CodegenOperation>
8181
List<Object> blocksE2E = new ArrayList<>();
8282
ParametersWithDataType paramsType = new ParametersWithDataType(models, language, client, false);
8383

84-
bundle.put("e2eAppID", client.startsWith("composition") ? "METIS_APPLICATION_ID" : "ALGOLIA_APPLICATION_ID");
84+
bundle.put(
85+
"e2eAppID",
86+
client.startsWith("composition") || client.startsWith("realtime") ? "METIS_APPLICATION_ID" : "ALGOLIA_APPLICATION_ID"
87+
);
8588
bundle.put(
8689
"e2eApiKey",
87-
client.startsWith("composition") ? "METIS_API_KEY" : (client.equals("monitoring") ? "MONITORING_API_KEY" : "ALGOLIA_ADMIN_KEY")
90+
client.startsWith("composition") || client.startsWith("realtime")
91+
? "METIS_API_KEY"
92+
: (client.equals("monitoring") ? "MONITORING_API_KEY" : "ALGOLIA_ADMIN_KEY")
8893
);
8994
bundle.put("useEchoRequester", true);
9095

playground/javascript/node/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
"@algolia/client-insights": "link:../../../clients/algoliasearch-client-javascript/packages/client-insights",
1515
"@algolia/client-personalization": "link:../../../clients/algoliasearch-client-javascript/packages/client-personalization",
1616
"@algolia/client-query-suggestions": "link:../../../clients/algoliasearch-client-javascript/packages/client-query-suggestions",
17+
"@algolia/client-realtime-personalization": "link:../../../clients/algoliasearch-client-javascript/packages/client-realtime-personalization",
1718
"@algolia/client-search": "link:../../../clients/algoliasearch-client-javascript/packages/client-search",
1819
"@algolia/composition": "link:../../../clients/algoliasearch-client-javascript/packages/composition",
1920
"@algolia/ingestion": "link:../../../clients/algoliasearch-client-javascript/packages/ingestion",
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { ApiError } from '@algolia/client-common';
2+
import { realtimePersonalizationClient } from '@algolia/client-realtime-personalization';
3+
4+
const appId = process.env.METIS_APPLICATION_ID || '**** APP_ID *****';
5+
const apiKey = process.env.METIS_API_KEY || '**** ADMIN_KEY *****';
6+
7+
// Init client with appId and apiKey
8+
const client = realtimePersonalizationClient(appId, apiKey, 'us');
9+
10+
async function testRealtimePersonalization() {
11+
try {
12+
console.log(appId, apiKey);
13+
14+
const resp = await client.getUser({userToken: "foo"});
15+
16+
console.log(resp);
17+
18+
} catch (e) {
19+
if (e instanceof ApiError) {
20+
return console.log(`[${e.status}] ${e.message}`, e.stackTrace, e);
21+
}
22+
23+
console.log('[ERROR]', e);
24+
}
25+
}
26+
27+
testRealtimePersonalization();
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
strategy:
2+
type: string
3+
enum:
4+
- session
5+
- hybrid
6+
example: 'session'
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# path
2+
UserToken:
3+
name: userToken
4+
in: path
5+
required: true
6+
description: Unique identifier representing a user for which to fetch the personalization profile.
7+
schema:
8+
$ref: '../../common/schemas/SearchParams.yml#/userToken'
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
user:
2+
type: object
3+
additionalProperties: false
4+
required:
5+
- version
6+
- userID
7+
- search
8+
properties:
9+
version:
10+
type: string
11+
description: Version of the response format.
12+
userID:
13+
type: string
14+
description: User ID of the user.
15+
search:
16+
type: object
17+
description: |
18+
Index personalization filters by index name.
19+
additionalProperties:
20+
$ref: '#/searchFilters'
21+
22+
searchFilters:
23+
type: object
24+
additionalProperties: false
25+
properties:
26+
indices:
27+
type: array
28+
items:
29+
type: string
30+
example: ['storefront', 'storefront_price_asc', 'storefront_price_desc']
31+
strategy:
32+
$ref: '../enums.yml#/strategy'
33+
filters:
34+
$ref: '#/searchFilter'
35+
36+
searchFilter:
37+
type: object
38+
additionalProperties: false
39+
properties:
40+
session:
41+
type: array
42+
items:
43+
type: string
44+
example: ['brand:Dyson<score=12>']

0 commit comments

Comments
 (0)