@algolia/client-common 5.0.0-alpha.99 → 5.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -17,16 +17,30 @@ function createAuth(appId, apiKey, authMode = 'WithinHeaders') {
17
17
 
18
18
  function getUrlParams({
19
19
  host,
20
- searchParams: urlSearchParams,
20
+ search,
21
21
  pathname
22
22
  }) {
23
- const algoliaAgent = urlSearchParams.get('x-algolia-agent') || '';
23
+ const urlSearchParams = search.split('?');
24
+ if (urlSearchParams.length === 1) {
25
+ return {
26
+ host,
27
+ algoliaAgent: '',
28
+ searchParams: undefined,
29
+ path: pathname
30
+ };
31
+ }
32
+ const splitSearchParams = urlSearchParams[1].split('&');
33
+ let algoliaAgent = '';
24
34
  const searchParams = {};
25
- for (const [k, v] of urlSearchParams) {
26
- if (k === 'x-algolia-agent') {
27
- continue;
28
- }
29
- searchParams[k] = v;
35
+ if (splitSearchParams.length > 0) {
36
+ splitSearchParams.forEach(param => {
37
+ const [key, value] = param.split('=');
38
+ if (key === 'x-algolia-agent') {
39
+ algoliaAgent = value;
40
+ return;
41
+ }
42
+ searchParams[key] = value;
43
+ });
30
44
  }
31
45
  return {
32
46
  host,
@@ -51,7 +65,7 @@ function createEchoRequester({
51
65
  data: request.data ? JSON.parse(request.data) : undefined,
52
66
  path,
53
67
  host,
54
- algoliaAgent: encodeURIComponent(algoliaAgent),
68
+ algoliaAgent,
55
69
  searchParams
56
70
  };
57
71
  return Promise.resolve({
@@ -299,7 +313,7 @@ function _toPrimitive(t, r) {
299
313
  }
300
314
  function _toPropertyKey(t) {
301
315
  var i = _toPrimitive(t, "string");
302
- return "symbol" == typeof i ? i : String(i);
316
+ return "symbol" == typeof i ? i : i + "";
303
317
  }
304
318
  function _defineProperty(obj, key, value) {
305
319
  key = _toPropertyKey(key);
@@ -373,7 +387,7 @@ function shuffle(array) {
373
387
  }
374
388
  function serializeUrl(host, path, queryParameters) {
375
389
  const queryParametersAsString = serializeQueryParameters(queryParameters);
376
- let url = `${host.protocol}://${host.url}/${path.charAt(0) === '/' ? path.substr(1) : path}`;
390
+ let url = `${host.protocol}://${host.url}${host.port ? `:${host.port}` : ''}/${path.charAt(0) === '/' ? path.substring(1) : path}`;
377
391
  if (queryParametersAsString.length) {
378
392
  url += `?${queryParametersAsString}`;
379
393
  }
@@ -381,7 +395,7 @@ function serializeUrl(host, path, queryParameters) {
381
395
  }
382
396
  function serializeQueryParameters(parameters) {
383
397
  const isObjectOrArray = value => Object.prototype.toString.call(value) === '[object Object]' || Object.prototype.toString.call(value) === '[object Array]';
384
- return Object.keys(parameters).map(key => `${key}=${encodeURIComponent(isObjectOrArray(parameters[key]) ? JSON.stringify(parameters[key]) : parameters[key])}`).join('&');
398
+ return Object.keys(parameters).map(key => `${key}=${encodeURIComponent(isObjectOrArray(parameters[key]) ? JSON.stringify(parameters[key]) : parameters[key]).replaceAll('+', '%20')}`).join('&');
385
399
  }
386
400
  function serializeData(request, requestOptions) {
387
401
  if (request.method === 'GET' || request.data === undefined && requestOptions.data === undefined) {
@@ -552,16 +566,13 @@ function createTransporter({
552
566
  if (host === undefined) {
553
567
  throw new RetryError(stackTraceWithoutCredentials(stackTrace));
554
568
  }
555
- let responseTimeout = requestOptions.timeout;
556
- if (responseTimeout === undefined) {
557
- responseTimeout = isRead ? timeouts.read : timeouts.write;
558
- }
569
+ let responseTimeout = isRead ? requestOptions.timeouts?.read || timeouts.read : requestOptions.timeouts?.write || timeouts.write;
559
570
  const payload = {
560
571
  data,
561
572
  headers,
562
573
  method: request.method,
563
574
  url: serializeUrl(host, request.path, queryParameters),
564
- connectTimeout: getTimeout(timeoutsCount, timeouts.connect),
575
+ connectTimeout: getTimeout(timeoutsCount, requestOptions.timeouts?.connect || timeouts.connect),
565
576
  responseTimeout: getTimeout(timeoutsCount, responseTimeout)
566
577
  };
567
578
  /**
@@ -15,16 +15,30 @@ function createAuth(appId, apiKey, authMode = 'WithinHeaders') {
15
15
 
16
16
  function getUrlParams({
17
17
  host,
18
- searchParams: urlSearchParams,
18
+ search,
19
19
  pathname
20
20
  }) {
21
- const algoliaAgent = urlSearchParams.get('x-algolia-agent') || '';
21
+ const urlSearchParams = search.split('?');
22
+ if (urlSearchParams.length === 1) {
23
+ return {
24
+ host,
25
+ algoliaAgent: '',
26
+ searchParams: undefined,
27
+ path: pathname
28
+ };
29
+ }
30
+ const splitSearchParams = urlSearchParams[1].split('&');
31
+ let algoliaAgent = '';
22
32
  const searchParams = {};
23
- for (const [k, v] of urlSearchParams) {
24
- if (k === 'x-algolia-agent') {
25
- continue;
26
- }
27
- searchParams[k] = v;
33
+ if (splitSearchParams.length > 0) {
34
+ splitSearchParams.forEach(param => {
35
+ const [key, value] = param.split('=');
36
+ if (key === 'x-algolia-agent') {
37
+ algoliaAgent = value;
38
+ return;
39
+ }
40
+ searchParams[key] = value;
41
+ });
28
42
  }
29
43
  return {
30
44
  host,
@@ -49,7 +63,7 @@ function createEchoRequester({
49
63
  data: request.data ? JSON.parse(request.data) : undefined,
50
64
  path,
51
65
  host,
52
- algoliaAgent: encodeURIComponent(algoliaAgent),
66
+ algoliaAgent,
53
67
  searchParams
54
68
  };
55
69
  return Promise.resolve({
@@ -297,7 +311,7 @@ function _toPrimitive(t, r) {
297
311
  }
298
312
  function _toPropertyKey(t) {
299
313
  var i = _toPrimitive(t, "string");
300
- return "symbol" == typeof i ? i : String(i);
314
+ return "symbol" == typeof i ? i : i + "";
301
315
  }
302
316
  function _defineProperty(obj, key, value) {
303
317
  key = _toPropertyKey(key);
@@ -371,7 +385,7 @@ function shuffle(array) {
371
385
  }
372
386
  function serializeUrl(host, path, queryParameters) {
373
387
  const queryParametersAsString = serializeQueryParameters(queryParameters);
374
- let url = `${host.protocol}://${host.url}/${path.charAt(0) === '/' ? path.substr(1) : path}`;
388
+ let url = `${host.protocol}://${host.url}${host.port ? `:${host.port}` : ''}/${path.charAt(0) === '/' ? path.substring(1) : path}`;
375
389
  if (queryParametersAsString.length) {
376
390
  url += `?${queryParametersAsString}`;
377
391
  }
@@ -379,7 +393,7 @@ function serializeUrl(host, path, queryParameters) {
379
393
  }
380
394
  function serializeQueryParameters(parameters) {
381
395
  const isObjectOrArray = value => Object.prototype.toString.call(value) === '[object Object]' || Object.prototype.toString.call(value) === '[object Array]';
382
- return Object.keys(parameters).map(key => `${key}=${encodeURIComponent(isObjectOrArray(parameters[key]) ? JSON.stringify(parameters[key]) : parameters[key])}`).join('&');
396
+ return Object.keys(parameters).map(key => `${key}=${encodeURIComponent(isObjectOrArray(parameters[key]) ? JSON.stringify(parameters[key]) : parameters[key]).replaceAll('+', '%20')}`).join('&');
383
397
  }
384
398
  function serializeData(request, requestOptions) {
385
399
  if (request.method === 'GET' || request.data === undefined && requestOptions.data === undefined) {
@@ -550,16 +564,13 @@ function createTransporter({
550
564
  if (host === undefined) {
551
565
  throw new RetryError(stackTraceWithoutCredentials(stackTrace));
552
566
  }
553
- let responseTimeout = requestOptions.timeout;
554
- if (responseTimeout === undefined) {
555
- responseTimeout = isRead ? timeouts.read : timeouts.write;
556
- }
567
+ let responseTimeout = isRead ? requestOptions.timeouts?.read || timeouts.read : requestOptions.timeouts?.write || timeouts.write;
557
568
  const payload = {
558
569
  data,
559
570
  headers,
560
571
  method: request.method,
561
572
  url: serializeUrl(host, request.path, queryParameters),
562
- connectTimeout: getTimeout(timeoutsCount, timeouts.connect),
573
+ connectTimeout: getTimeout(timeoutsCount, requestOptions.timeouts?.connect || timeouts.connect),
563
574
  responseTimeout: getTimeout(timeoutsCount, responseTimeout)
564
575
  };
565
576
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"createEchoRequester.d.ts","sourceRoot":"","sources":["../../src/createEchoRequester.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA4B,SAAS,EAAY,MAAM,SAAS,CAAC;AAE7E,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,GAAG,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AA2BF,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,MAAY,GACb,EAAE,mBAAmB,GAAG,SAAS,CAuBjC"}
1
+ {"version":3,"file":"createEchoRequester.d.ts","sourceRoot":"","sources":["../../src/createEchoRequester.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA4B,SAAS,EAAY,MAAM,SAAS,CAAC;AAE7E,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,GAAG,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AA0CF,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,MAAY,GACb,EAAE,mBAAmB,GAAG,SAAS,CAuBjC"}
@@ -1 +1 @@
1
- {"version":3,"file":"createTransporter.d.ts","sourceRoot":"","sources":["../../../src/transporter/createTransporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAOV,kBAAkB,EAClB,WAAW,EAEZ,MAAM,UAAU,CAAC;AAsBlB,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,aAAa,EACb,cAAc,GACf,EAAE,kBAAkB,GAAG,WAAW,CAmTlC"}
1
+ {"version":3,"file":"createTransporter.d.ts","sourceRoot":"","sources":["../../../src/transporter/createTransporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAOV,kBAAkB,EAClB,WAAW,EAEZ,MAAM,UAAU,CAAC;AAsBlB,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,aAAa,EACb,cAAc,GACf,EAAE,kBAAkB,GAAG,WAAW,CAgTlC"}
@@ -11,6 +11,10 @@ export type Host = {
11
11
  * The protocol of the host URL.
12
12
  */
13
13
  protocol: 'http' | 'https';
14
+ /**
15
+ * The port of the host URL.
16
+ */
17
+ port?: number;
14
18
  };
15
19
  export type StatefulHost = Host & {
16
20
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../../src/types/host.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG;IACjB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC;IAEvC;;OAEG;IACH,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG;IAChC;;OAEG;IACH,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC;IAEpC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,IAAI,EAAE,MAAM,OAAO,CAAC;IAEpB;;OAEG;IACH,UAAU,EAAE,MAAM,OAAO,CAAC;CAC3B,CAAC"}
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../../src/types/host.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG;IACjB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC;IAEvC;;OAEG;IACH,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAE3B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG;IAChC;;OAEG;IACH,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC;IAEpC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,IAAI,EAAE,MAAM,OAAO,CAAC;IAEpB;;OAEG;IACH,UAAU,EAAE,MAAM,OAAO,CAAC;CAC3B,CAAC"}
@@ -9,7 +9,7 @@ export type RequestOptions = Pick<Request, 'cacheable'> & {
9
9
  * the given timeout will be applied. But the transporter layer may
10
10
  * increase this timeout if there is need for it.
11
11
  */
12
- timeout?: number;
12
+ timeouts?: Partial<Timeouts>;
13
13
  /**
14
14
  * Custom headers for the request. This headers are
15
15
  * going to be merged the transporter headers.
@@ -1 +1 @@
1
- {"version":3,"file":"transporter.d.ts","sourceRoot":"","sources":["../../../src/types/transporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7C,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAElD,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG;IACxD;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;IAElC;;;OAGG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACzD,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,UAAU,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,GAAG,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,YAAY,CAAC;CACrD,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;;OAGG;IACH,UAAU,EAAE,KAAK,CAAC;IAElB;;;;OAIG;IACH,SAAS,EAAE,SAAS,CAAC;IAErB;;;;;OAKG;IACH,aAAa,EAAE,KAAK,CAAC;IAErB;;;;OAIG;IACH,cAAc,EAAE,KAAK,CAAC;IAEtB;;;;OAIG;IACH,QAAQ,EAAE,QAAQ,CAAC;IAEnB;;OAEG;IACH,KAAK,EAAE,IAAI,EAAE,CAAC;IAEd;;;;OAIG;IACH,WAAW,EAAE,OAAO,CAAC;IAErB;;;;OAIG;IACH,mBAAmB,EAAE,eAAe,CAAC;IAErC;;OAEG;IACH,YAAY,EAAE,YAAY,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,kBAAkB,GAAG;IAC7C;;;OAGG;IACH,OAAO,EAAE,CAAC,SAAS,EACjB,WAAW,EAAE,OAAO,EACpB,kBAAkB,CAAC,EAAE,cAAc,KAChC,OAAO,CAAC,SAAS,CAAC,CAAC;CACzB,CAAC"}
1
+ {"version":3,"file":"transporter.d.ts","sourceRoot":"","sources":["../../../src/types/transporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7C,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAElD,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG;IACxD;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE7B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;IAElC;;;OAGG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACzD,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,UAAU,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,GAAG,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,YAAY,CAAC;CACrD,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;;OAGG;IACH,UAAU,EAAE,KAAK,CAAC;IAElB;;;;OAIG;IACH,SAAS,EAAE,SAAS,CAAC;IAErB;;;;;OAKG;IACH,aAAa,EAAE,KAAK,CAAC;IAErB;;;;OAIG;IACH,cAAc,EAAE,KAAK,CAAC;IAEtB;;;;OAIG;IACH,QAAQ,EAAE,QAAQ,CAAC;IAEnB;;OAEG;IACH,KAAK,EAAE,IAAI,EAAE,CAAC;IAEd;;;;OAIG;IACH,WAAW,EAAE,OAAO,CAAC;IAErB;;;;OAIG;IACH,mBAAmB,EAAE,eAAe,CAAC;IAErC;;OAEG;IACH,YAAY,EAAE,YAAY,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,kBAAkB,GAAG;IAC7C;;;OAGG;IACH,OAAO,EAAE,CAAC,SAAS,EACjB,WAAW,EAAE,OAAO,EACpB,kBAAkB,CAAC,EAAE,cAAc,KAChC,OAAO,CAAC,SAAS,CAAC,CAAC;CACzB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@algolia/client-common",
3
- "version": "5.0.0-alpha.99",
3
+ "version": "5.0.0-beta.1",
4
4
  "description": "Common package for the Algolia JavaScript API client.",
5
5
  "repository": "algolia/algoliasearch-client-javascript",
6
6
  "license": "MIT",
@@ -20,14 +20,14 @@
20
20
  "test": "jest"
21
21
  },
22
22
  "devDependencies": {
23
- "@babel/preset-env": "7.23.8",
24
- "@babel/preset-typescript": "7.23.3",
25
- "@types/jest": "29.5.11",
26
- "@types/node": "20.11.5",
23
+ "@babel/preset-env": "7.24.4",
24
+ "@babel/preset-typescript": "7.24.1",
25
+ "@types/jest": "29.5.12",
26
+ "@types/node": "20.12.7",
27
27
  "jest": "29.7.0",
28
28
  "jest-environment-jsdom": "29.7.0",
29
- "ts-jest": "29.1.1",
30
- "typescript": "5.3.3"
29
+ "ts-jest": "29.1.2",
30
+ "typescript": "5.4.5"
31
31
  },
32
32
  "engines": {
33
33
  "node": ">= 14.0.0"
@@ -7,18 +7,33 @@ export type EchoRequesterParams = {
7
7
 
8
8
  function getUrlParams({
9
9
  host,
10
- searchParams: urlSearchParams,
10
+ search,
11
11
  pathname,
12
12
  }: URL): Pick<EchoResponse, 'algoliaAgent' | 'host' | 'path' | 'searchParams'> {
13
- const algoliaAgent = urlSearchParams.get('x-algolia-agent') || '';
13
+ const urlSearchParams = search.split('?');
14
+ if (urlSearchParams.length === 1) {
15
+ return {
16
+ host,
17
+ algoliaAgent: '',
18
+ searchParams: undefined,
19
+ path: pathname,
20
+ };
21
+ }
22
+
23
+ const splitSearchParams = urlSearchParams[1].split('&');
24
+ let algoliaAgent = '';
14
25
  const searchParams: Record<string, string> = {};
15
26
 
16
- for (const [k, v] of urlSearchParams) {
17
- if (k === 'x-algolia-agent') {
18
- continue;
19
- }
27
+ if (splitSearchParams.length > 0) {
28
+ splitSearchParams.forEach((param) => {
29
+ const [key, value] = param.split('=');
30
+ if (key === 'x-algolia-agent') {
31
+ algoliaAgent = value;
32
+ return;
33
+ }
20
34
 
21
- searchParams[k] = v;
35
+ searchParams[key] = value;
36
+ });
22
37
  }
23
38
 
24
39
  return {
@@ -44,7 +59,7 @@ export function createEchoRequester({
44
59
  data: request.data ? JSON.parse(request.data) : undefined,
45
60
  path,
46
61
  host,
47
- algoliaAgent: encodeURIComponent(algoliaAgent),
62
+ algoliaAgent,
48
63
  searchParams,
49
64
  };
50
65
 
@@ -151,17 +151,14 @@ export function createTransporter({
151
151
  throw new RetryError(stackTraceWithoutCredentials(stackTrace));
152
152
  }
153
153
 
154
- let responseTimeout = requestOptions.timeout;
155
- if (responseTimeout === undefined) {
156
- responseTimeout = isRead ? timeouts.read : timeouts.write;
157
- }
154
+ let responseTimeout = isRead ? requestOptions.timeouts?.read || timeouts.read : requestOptions.timeouts?.write || timeouts.write;
158
155
 
159
156
  const payload: EndRequest = {
160
157
  data,
161
158
  headers,
162
159
  method: request.method,
163
160
  url: serializeUrl(host, request.path, queryParameters),
164
- connectTimeout: getTimeout(timeoutsCount, timeouts.connect),
161
+ connectTimeout: getTimeout(timeoutsCount, requestOptions.timeouts?.connect || timeouts.connect),
165
162
  responseTimeout: getTimeout(timeoutsCount, responseTimeout),
166
163
  };
167
164
 
@@ -30,8 +30,8 @@ export function serializeUrl(
30
30
  queryParameters: QueryParameters
31
31
  ): string {
32
32
  const queryParametersAsString = serializeQueryParameters(queryParameters);
33
- let url = `${host.protocol}://${host.url}/${
34
- path.charAt(0) === '/' ? path.substr(1) : path
33
+ let url = `${host.protocol}://${host.url}${host.port ? `:${host.port}` : ''}/${
34
+ path.charAt(0) === '/' ? path.substring(1) : path
35
35
  }`;
36
36
 
37
37
  if (queryParametersAsString.length) {
@@ -53,7 +53,7 @@ export function serializeQueryParameters(parameters: QueryParameters): string {
53
53
  isObjectOrArray(parameters[key])
54
54
  ? JSON.stringify(parameters[key])
55
55
  : parameters[key]
56
- )}`
56
+ ).replaceAll('+', '%20')}`
57
57
  )
58
58
  .join('&');
59
59
  }
package/src/types/host.ts CHANGED
@@ -13,6 +13,11 @@ export type Host = {
13
13
  * The protocol of the host URL.
14
14
  */
15
15
  protocol: 'http' | 'https';
16
+
17
+ /**
18
+ * The port of the host URL.
19
+ */
20
+ port?: number;
16
21
  };
17
22
 
18
23
  export type StatefulHost = Host & {
@@ -11,7 +11,7 @@ export type RequestOptions = Pick<Request, 'cacheable'> & {
11
11
  * the given timeout will be applied. But the transporter layer may
12
12
  * increase this timeout if there is need for it.
13
13
  */
14
- timeout?: number;
14
+ timeouts?: Partial<Timeouts>;
15
15
 
16
16
  /**
17
17
  * Custom headers for the request. This headers are