Skip to content

Commit 4774dc0

Browse files
chore: generated code for commit 6b50ef0b. [skip ci]
algolia/api-clients-automation@6b50ef0 Co-authored-by: algolia-bot <[email protected]> Co-authored-by: Clément Vannicatte <[email protected]>
1 parent 8b6b1cd commit 4774dc0

File tree

7 files changed

+295
-61
lines changed

7 files changed

+295
-61
lines changed

bundlesize.config.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"files": [
33
{
44
"path": "packages/algoliasearch/dist/algoliasearch.umd.js",
5-
"maxSize": "7.85KB"
5+
"maxSize": "8.40KB"
66
},
77
{
88
"path": "packages/algoliasearch/dist/lite/lite.umd.js",

packages/algoliasearch/__tests__/algoliasearch.test.ts

Lines changed: 93 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,100 @@ describe('api', () => {
3939
expect(client.search).not.toBeUndefined();
4040
});
4141

42-
it('provides an init method for the analytics client', () => {
43-
expect(client.initAnalytics).not.toBeUndefined();
44-
});
42+
describe('init clients', () => {
43+
it('provides an init method for the analytics client', () => {
44+
expect(client.initAnalytics).not.toBeUndefined();
45+
});
4546

46-
it('provides an init method for the personalization client', () => {
47-
expect(client.initPersonalization).not.toBeUndefined();
47+
it('provides an init method for the abtesting client', () => {
48+
expect(client.initAbtesting).not.toBeUndefined();
49+
});
50+
51+
it('provides an init method for the personalization client', () => {
52+
expect(client.initPersonalization).not.toBeUndefined();
53+
});
54+
55+
it('default `init` clients to the root `algoliasearch` credentials', async () => {
56+
const abtestingClient = client.initAbtesting();
57+
const analyticsClient = client.initAnalytics();
58+
const personalizationClient = client.initPersonalization({
59+
region: 'eu',
60+
});
61+
62+
const res1 = (await abtestingClient.get({
63+
path: 'abtestingClient',
64+
})) as unknown as EchoResponse;
65+
const res2 = (await analyticsClient.get({
66+
path: 'analyticsClient',
67+
})) as unknown as EchoResponse;
68+
const res3 = (await personalizationClient.get({
69+
path: 'personalizationClient',
70+
})) as unknown as EchoResponse;
71+
72+
expect(res1.headers).toEqual(
73+
expect.objectContaining({
74+
'x-algolia-application-id': 'APP_ID',
75+
'x-algolia-api-key': 'API_KEY',
76+
})
77+
);
78+
expect(res2.headers).toEqual(
79+
expect.objectContaining({
80+
'x-algolia-application-id': 'APP_ID',
81+
'x-algolia-api-key': 'API_KEY',
82+
})
83+
);
84+
expect(res3.headers).toEqual(
85+
expect.objectContaining({
86+
'x-algolia-application-id': 'APP_ID',
87+
'x-algolia-api-key': 'API_KEY',
88+
})
89+
);
90+
});
91+
92+
it('`init` clients accept different credentials', async () => {
93+
const abtestingClient = client.initAbtesting({
94+
appId: 'appId1',
95+
apiKey: 'apiKey1',
96+
});
97+
const analyticsClient = client.initAnalytics({
98+
appId: 'appId2',
99+
apiKey: 'apiKey2',
100+
});
101+
const personalizationClient = client.initPersonalization({
102+
appId: 'appId3',
103+
apiKey: 'apiKey3',
104+
region: 'eu',
105+
});
106+
107+
const res1 = (await abtestingClient.get({
108+
path: 'abtestingClient',
109+
})) as unknown as EchoResponse;
110+
const res2 = (await analyticsClient.get({
111+
path: 'analyticsClient',
112+
})) as unknown as EchoResponse;
113+
const res3 = (await personalizationClient.get({
114+
path: 'personalizationClient',
115+
})) as unknown as EchoResponse;
116+
117+
expect(res1.headers).toEqual(
118+
expect.objectContaining({
119+
'x-algolia-application-id': 'appId1',
120+
'x-algolia-api-key': 'apiKey1',
121+
})
122+
);
123+
expect(res2.headers).toEqual(
124+
expect.objectContaining({
125+
'x-algolia-application-id': 'appId2',
126+
'x-algolia-api-key': 'apiKey2',
127+
})
128+
);
129+
expect(res3.headers).toEqual(
130+
expect.objectContaining({
131+
'x-algolia-application-id': 'appId3',
132+
'x-algolia-api-key': 'apiKey3',
133+
})
134+
);
135+
});
48136
});
49137
});
50138

Lines changed: 86 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,19 @@
11
import type {
2-
AnalyticsClient,
2+
Region as AbtestingRegion,
3+
AbtestingClient,
4+
} from '@experimental-api-clients-automation/client-abtesting/src/abtestingClient';
5+
import {
6+
createAbtestingClient,
7+
REGIONS as abtestingRegions,
8+
} from '@experimental-api-clients-automation/client-abtesting/src/abtestingClient';
9+
import type {
310
Region as AnalyticsRegion,
11+
AnalyticsClient,
12+
} from '@experimental-api-clients-automation/client-analytics/src/analyticsClient';
13+
import {
14+
createAnalyticsClient,
15+
REGIONS as analyticsRegions,
416
} from '@experimental-api-clients-automation/client-analytics/src/analyticsClient';
5-
import { createAnalyticsClient } from '@experimental-api-clients-automation/client-analytics/src/analyticsClient';
617
import {
718
createMemoryCache,
819
createFallbackableCache,
@@ -11,22 +22,27 @@ import {
1122
DEFAULT_READ_TIMEOUT_BROWSER,
1223
DEFAULT_WRITE_TIMEOUT_BROWSER,
1324
} from '@experimental-api-clients-automation/client-common';
25+
import type { CreateClientOptions } from '@experimental-api-clients-automation/client-common';
26+
import {
27+
createPersonalizationClient,
28+
REGIONS as personalizationRegions,
29+
} from '@experimental-api-clients-automation/client-personalization/src/personalizationClient';
1430
import type {
15-
CreateClientOptions,
16-
Host,
17-
Requester,
18-
} from '@experimental-api-clients-automation/client-common';
19-
import type {
20-
PersonalizationClient,
2131
Region as PersonalizationRegion,
32+
PersonalizationClient,
2233
} from '@experimental-api-clients-automation/client-personalization/src/personalizationClient';
23-
import { createPersonalizationClient } from '@experimental-api-clients-automation/client-personalization/src/personalizationClient';
2434
import {
2535
createSearchClient,
2636
apiClientVersion as searchClientVersion,
2737
} from '@experimental-api-clients-automation/client-search/src/searchClient';
2838
import { createXhrRequester } from '@experimental-api-clients-automation/requester-browser-xhr';
2939

40+
import type {
41+
CommonInitOptions,
42+
InitRegion,
43+
CommonClientOptions,
44+
} from './models';
45+
3046
export * from './models';
3147

3248
export const apiClientVersion = searchClientVersion;
@@ -37,7 +53,7 @@ export type Algoliasearch = ReturnType<typeof algoliasearch>;
3753
export function algoliasearch(
3854
appId: string,
3955
apiKey: string,
40-
options?: { requester?: Requester; hosts?: Host[] }
56+
options?: CommonClientOptions
4157
) {
4258
if (!appId || typeof appId !== 'string') {
4359
throw new Error('`appId` is missing.');
@@ -68,42 +84,85 @@ export function algoliasearch(
6884
};
6985

7086
function initAnalytics(
71-
analyticsAppId: string,
72-
analyticsApiKey: string,
73-
region?: AnalyticsRegion,
74-
analyticsOptions?: { requester?: Requester; hosts?: Host[] }
87+
initOptions: CommonInitOptions & InitRegion<AnalyticsRegion> = {}
7588
): AnalyticsClient {
89+
if (
90+
initOptions.region &&
91+
(typeof initOptions.region !== 'string' ||
92+
!analyticsRegions.includes(initOptions.region))
93+
) {
94+
throw new Error(
95+
`\`region\` must be one of the following: ${analyticsRegions.join(
96+
', '
97+
)}`
98+
);
99+
}
100+
76101
return createAnalyticsClient({
77-
appId: analyticsAppId,
78-
apiKey: analyticsApiKey,
79-
region,
80-
...analyticsOptions,
102+
...initOptions.options,
103+
...commonOptions,
104+
appId: initOptions.appId ?? appId,
105+
apiKey: initOptions.apiKey ?? apiKey,
106+
region: initOptions.region,
107+
});
108+
}
109+
110+
function initAbtesting(
111+
initOptions: CommonInitOptions & InitRegion<AbtestingRegion> = {}
112+
): AbtestingClient {
113+
if (
114+
initOptions.region &&
115+
(typeof initOptions.region !== 'string' ||
116+
!abtestingRegions.includes(initOptions.region))
117+
) {
118+
throw new Error(
119+
`\`region\` must be one of the following: ${abtestingRegions.join(
120+
', '
121+
)}`
122+
);
123+
}
124+
125+
return createAbtestingClient({
126+
...initOptions.options,
81127
...commonOptions,
128+
appId: initOptions.appId ?? appId,
129+
apiKey: initOptions.apiKey ?? apiKey,
130+
region: initOptions.region,
82131
});
83132
}
84133

85134
function initPersonalization(
86-
personalizationAppId: string,
87-
personalizationApiKey: string,
88-
region: PersonalizationRegion,
89-
personalizationOptions?: { requester?: Requester; hosts?: Host[] }
135+
initOptions: CommonInitOptions & Required<InitRegion<PersonalizationRegion>>
90136
): PersonalizationClient {
91-
if (!region) {
137+
if (!initOptions.region) {
92138
throw new Error('`region` is missing.');
93139
}
94140

141+
if (
142+
initOptions.region &&
143+
(typeof initOptions.region !== 'string' ||
144+
!personalizationRegions.includes(initOptions.region))
145+
) {
146+
throw new Error(
147+
`\`region\` must be one of the following: ${personalizationRegions.join(
148+
', '
149+
)}`
150+
);
151+
}
152+
95153
return createPersonalizationClient({
96-
appId: personalizationAppId,
97-
apiKey: personalizationApiKey,
98-
region,
99-
...personalizationOptions,
154+
...initOptions.options,
100155
...commonOptions,
156+
appId: initOptions.appId ?? appId,
157+
apiKey: initOptions.apiKey ?? apiKey,
158+
region: initOptions.region,
101159
});
102160
}
103161

104162
return {
105163
...createSearchClient({ appId, apiKey, ...commonOptions }),
106164
initAnalytics,
107165
initPersonalization,
166+
initAbtesting,
108167
};
109168
}

packages/algoliasearch/builds/models.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
import type {
2+
Host,
3+
Requester,
4+
} from '@experimental-api-clients-automation/client-common';
15
import {
26
ErrorBase,
37
PutProps,
@@ -9,5 +13,27 @@ import {
913
export * from '@experimental-api-clients-automation/client-search/model';
1014
export * from '@experimental-api-clients-automation/client-personalization/model';
1115
export * from '@experimental-api-clients-automation/client-analytics/model';
16+
export * from '@experimental-api-clients-automation/client-abtesting/model';
1217

1318
export { ErrorBase, PutProps, PostProps, DelProps, GetProps };
19+
20+
export type CommonClientOptions = { requester?: Requester; hosts?: Host[] };
21+
22+
export type CommonInitOptions = Partial<{
23+
/**
24+
* App to target with the initialized client, defaults to the `algoliasearch` appId.
25+
*/
26+
appId: string;
27+
/**
28+
* API key of the targeted app ID, defaults to the `algoliasearch` apiKey.
29+
*/
30+
apiKey: string;
31+
options: CommonClientOptions;
32+
}>;
33+
34+
export type InitRegion<TRegion> = Partial<{
35+
/**
36+
* Available regions of the initialized client.
37+
*/
38+
region: TRegion;
39+
}>;

0 commit comments

Comments
 (0)