algolia / algoliasearch-client-javascript

⚡️ A fully-featured and blazing-fast JavaScript API client to interact with Algolia.
https://www.algolia.com/doc/api-client/javascript/getting-started/
MIT License
1.33k stars 222 forks source link

Migration from v4 to v5: Issues with algoliasearch and AlgoliaSearchHelper #1553

Closed paulgrotzke closed 1 month ago

paulgrotzke commented 2 months ago

We're migrating from v4 to v5, using algoliasearch in combination with AlgoliaSearchHelper

Previously, we used it like this:

import { algoliasearch } from 'algoliasearch'
import algoliasearchHelper from 'algoliasearch-helper'

const client = algoliasearch('id', 'apiKey', {
  headers: { 'X-Algolia-UserToken': 'token' }
})

const helper = algoliasearchHelper(client, 'index', { ...options })

We've encountered two problems:

1) Setting headers during client creation Previously, we passed the headers directly when creating the client. Now, the TypeScript types indicate this might not be possible:

Object literal may only specify known properties, and 'headers' does not exist in type 'Partial<Omit<CreateClientOptions, "apiKey" | "appId">>'.ts(2353)

Is this correct? If so, what's the recommended way to set headers? We've only found this article on Request Options which mentions setting headers via searchSingleIndex. However, we're not using that method in our case.

2) Type incompatibility between Algoliasearch client and SearchClient The client created (typeof Algoliasearch) seems to be incompatible with the type that algoliasearchHelper expects (typeof SearchClient)

const helper = algoliasearchHelper(client, 'index', { ...options })
//                                 ^
// Argument of type 'Algoliasearch' is not assignable to parameter of type 'SearchClient'.
// Types of property 'searchForFacetValues' are incompatible.
// Type '({ indexName, facetName, searchForFacetValuesRequest }: SearchForFacetValuesProps, requestOptions?: RequestOptions | undefined) => Promise<SearchForFacetValuesResponse>' is not assignable to type 'undefined'.
// ts(2345)
Haroenv commented 2 months ago
  1. Not sure about this question, @shortcuts, do you know what the new signature is for a static header?

  2. The sffv problem should be solved in the latest version of the helper: https://github.com/algolia/instantsearch/commit/11399e6fd232f005c4e3e8aba842c50110869ae5 (3.22.5), which was caused by an incompatibility of the v4 and v5 signatures

shortcuts commented 1 month ago

Hey!

The property is named baseHeaders, you can use it like this:

const client = algoliasearch('foo', 'bar', { baseHeaders: { ... } });
shortcuts commented 1 month ago

We've only found this article on Request Options which mentions setting headers via searchSingleIndex. However, we're not using that method in our case.

requestOptions is available on every methods, as the last expected parameter

shortcuts commented 1 month ago

closing the issue as it should be answered, don't hesitate to ask more questions if you need!