Skip to main content

TypeScript / JavaScript

LICENSEย Weaviate on Stackoverflow badgeย Weaviate issues on GitHub badgeย Weaviate version badgeย Weaviate total Docker pulls badgeย Go Report Card

TypeScript client version

The current TypeScript client version is v1.3.2.

Overviewโ€‹

The TypeScript client can be used for both JavaScript and TypeScript scripts.

JS โ†’ TS

Please note that the JavaScript client library is no longer maintained. Please migrate to the TypeScript library.

Installation and setupโ€‹

The TypeScript client library package can be installed using npm.

npm install weaviate-ts-client

Usage and type definitionsโ€‹

Once installed, you can use the client in your TypeScript and JavaScript scripts, as shown in the following examples.

Usageโ€‹

const { default: weaviate } = require('weaviate-ts-client');

const client = weaviate.client({
scheme: 'https',
host: 'some-endpoint.weaviate.network',
});

client
.schema
.getter()
.do()
.then(res => {
console.log(res);
})
.catch(err => {
console.error(err)
});
Troubleshooting imports with TypeScript

If you are having any issues with the import statement in TypeScript (e.g. if weaviate is undefined), try adding "esModuleInterop": true to your "compilerOptions" in tsconfig.json.

Type definitionsโ€‹

The type definitions can be found under the types subdirectory of the package in the *.d.ts files, for example as shown on the npm package page.

Authenticationโ€‹

For more comprehensive information on configuring authentication with Weaviate, refer to the authentication page.

The TypeScript client offers multiple options for authenticating against Weaviate, including multiple OIDC authentication flows.

The suitable authentication options and methods for the client largely depend on the specific configuration of the Weaviate instance.

WCS authenticationโ€‹

WCS + Weaviate client

Each Weaviate instance in Weaviate Cloud Services (WCS) is pre-configured to act as a token issuer for OIDC authentication.

See our WCS authentication documentation for instructions on how to authenticate against WCS with your preferred Weaviate client.

API key authenticationโ€‹

To authenticate against Weaviate using an API key, instantiate the client as follows:

const { default: weaviate } = require('weaviate-ts-client');

// Instantiate the client with the auth config
const client = weaviate.client({
scheme: 'https',
host: 'some-endpoint.weaviate.network',
apiKey: new weaviate.ApiKey('YOUR-WEAVIATE-API-KEY'), // Replace w/ your Weaviate instance API key
});

OIDC authenticationโ€‹

To authenticate against Weaviate with OIDC, you must select a flow made available by the identity provider and create the flow-specific authentication configuration.

This configuration will then be used by the Weaviate client to authenticate. The configuration includes secrets that help the client obtain an access token and, if configured, a refresh token.

The access token is added to the HTTP header of each request and is utilized for authentication with Weaviate. Typically, this token has a limited lifespan, and the refresh token can be employed to obtain a new set of tokens when necessary.

Background refresh processes with TS

When using OIDC with the TypeScript client, its background token refresh process can block a script from exiting. If this behavior is not desired, you can:

  1. Set the silentRefresh parameter as false in the OIDC configuration. Or,
  2. Stop the process via client.oidcAuth?.stopTokenRefresh(), e.g. when a script is expected to exit, or token refresh is no longer needed.

Resource Owner Password Flowโ€‹

This OIDC flow uses the username and password to obtain required tokens for authentication.

Note that not every provider automatically includes a refresh token and an appropriate scope might be required that depends on your identity provider. The client uses offline_access as the default scope. This works with some providers, but as it depends on the configuration of the identity providers, we ask you to refer to the identity provider's documentation.

Without a refresh token, there is no possibility to acquire a new access token and the client becomes unauthenticated after expiration.

note

The Weaviate client does not save the username or password used.

They are only used to obtain the first tokens, after which existing tokens will be used to obtain subsequent tokens if possible.

const { default: weaviate } = require('weaviate-ts-client');

const client = weaviate.client({
scheme: 'https',
host: 'some-endpoint.weaviate.network',
authClientSecret: new weaviate.AuthUserPasswordCredentials({
username: 'user123',
password: 'password',
silentRefresh: true, // Default: true - if false, you must refresh the token manually; if true, this background process will prevent a script from exiting.
scopes: ['offline_access'] // optional, depends on the configuration of your identity provider (not required with WCS)
})
});

Client Credentials flowโ€‹

This OIDC flow uses a client secret to obtain required tokens for authentication.

This flow is recommended for server-to-server communication without end-users and authenticates an application to Weaviate. This authentication flow is typically regarded as more secure than the resource owner password flow: a compromised client secret can be simply revoked, whereas a compromised password may have larger implications beyond the scope of breached authentication.

To authenticate a client secret most identity providers require a scope to be specified. This scope depends on the configuration of the identity providers, so we ask you to refer to the identity provider's documentation.

Most providers do not include a refresh token in their response so client secret is saved in the client to obtain a new access token on expiration of the existing one.

const { default: weaviate } = require('weaviate-ts-client');

const client = weaviate.client({
scheme: 'https',
host: 'some-endpoint.weaviate.network',
authClientSecret: new weaviate.AuthClientCredentials({
clientSecret: 'supersecuresecret',
silentRefresh: true, // Default: true - if false, you must refresh the token manually; if true, this background process will prevent a script from exiting.
scopes: ['scope1', 'scope2'] // optional, depends on the configuration of your identity provider
})
});

Refresh Token flowโ€‹

Any other OIDC authentication method can be used to obtain tokens directly from your identity provider, for example by using this step-by-step guide of the hybrid flow.

If no refresh token is provided, there is no possibility to obtain a new access token and the client becomes unauthenticated after expiration.

const { default: weaviate } = require('weaviate-ts-client');

const client = weaviate.client({
scheme: 'https',
host: 'some-endpoint.weaviate.network',
authClientSecret: new weaviate.AuthAccessTokenCredentials({
accessToken: 'abcd1234',
expiresIn: 900,
refreshToken: 'efgh5678',
silentRefresh: true, // Default: true - if false, you must refresh the token manually; if true, this background process will prevent a script from exiting.
})
});

Custom headersโ€‹

You can pass custom headers to the client, which are added at initialization:

const { default: weaviate } = require('weaviate-ts-client');

const client = weaviate.client({
scheme: 'https',
host: 'some-endpoint.weaviate.network',
headers: {headerName: 'HeaderValue'}
});

These headers will then be included in every request that the client makes.

Referencesโ€‹

JS โ†’ TS migration

We are in the process of migrating our JavaScript code examples to TypeScript as necessary. Please be patient.

Our RESTful endpoints and GraphQL functions covered by the TypeScript client currently have JavaScript examples in the code blocks.

Designโ€‹

Builder patternโ€‹

The TypeScript client is designed following the Builder pattern. The pattern is used to build complex query objects. This means that calls (for example to retrieve data with a RESTful GET request, or using a more complex GraphQL query) are built with chained objects to reduce complexity. Some builder objects are optional, others are required to perform specific functions. Builder examples can be found in the RESTful API reference pages and the GraphQL reference pages.

The code snippet at the top of this page shows a simple query corresponding to the RESTful request GET /v1/schema. The client is initialized by requiring the package and connecting to a local instance. Then, a query is constructed by getting the .schema with .getter(). The query will be sent with the .do() call. do() is required for every function you want to build and execute.

General notesโ€‹

  • All methods use ES6 Promises to deal with asynchronous code, so you need to use .then() after function calls, or have async/await support.
  • In the case of an error, the Promise rejects with the specific error message. (If using async/await, a rejected promises acts like a thrown exception).
  • Internally the client uses isomorphic-fetch to make the REST calls, so it should work from both the browser and NodeJS applications without any required changes.

Changelogโ€‹

See the change logs on GitHub.

More Resourcesโ€‹

If you can't find the answer to your question here, please look at the:

  1. Frequently Asked Questions. Or,
  2. Knowledge base of old issues. Or,
  3. For questions: Stackoverflow. Or,
  4. For more involved discussion: Weaviate Community Forum. Or,
  5. We also have a Slack channel.