TypeScript / JavaScript
The current TypeScript client version is v1.3.2
.
Overviewโ
The TypeScript client can be used for both JavaScript and TypeScript scripts.
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โ
- JavaScript
- TypeScript
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)
});
import weaviate, { WeaviateClient } from 'weaviate-ts-client';
const client: WeaviateClient = weaviate.client({
scheme: 'https',
host: 'some-endpoint.weaviate.network',
});
client
.schema
.getter()
.do()
.then((res: any) => {
console.log(res);
})
.catch((err: Error) => {
console.error(err)
});
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โ
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:
- JavaScript
- TypeScript
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
});
import weaviate, { WeaviateClient, ApiKey } from 'weaviate-ts-client';
// Instantiate the client with the auth config
const client: WeaviateClient = weaviate.client({
scheme: 'https',
host: 'some-endpoint.weaviate.network',
apiKey: new 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.
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:
- Set the
silentRefresh
parameter asfalse
in the OIDC configuration. Or, - 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.
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.
- JavaScript
- TypeScript
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)
})
});
import weaviate, { WeaviateClient, AuthUserPasswordCredentials } from 'weaviate-ts-client';
const client: WeaviateClient = weaviate.client({
scheme: 'https',
host: 'some-endpoint.weaviate.network',
authClientSecret: new 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.
- JavaScript
- TypeScript
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
})
});
import weaviate, { WeaviateClient, AuthClientCredentials } from 'weaviate-ts-client';
const client: WeaviateClient = weaviate.client({
scheme: 'https',
host: 'some-endpoint.weaviate.network',
authClientSecret: new 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.
- JavaScript
- TypeScript
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.
})
});
import weaviate, { WeaviateClient, AuthAccessTokenCredentials } from 'weaviate-ts-client';
const client: WeaviateClient = weaviate.client({
scheme: 'https',
host: 'some-endpoint.weaviate.network',
authClientSecret: new 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:
- JavaScript
- TypeScript
const { default: weaviate } = require('weaviate-ts-client');
const client = weaviate.client({
scheme: 'https',
host: 'some-endpoint.weaviate.network',
headers: {headerName: 'HeaderValue'}
});
import weaviate, { WeaviateClient } from 'weaviate-ts-client';
const client: WeaviateClient = 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โ
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 haveasync
/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:
- Frequently Asked Questions. Or,
- Knowledge base of old issues. Or,
- For questions: Stackoverflow. Or,
- For more involved discussion: Weaviate Community Forum. Or,
- We also have a Slack channel.