@arizeai/phoenix-client
Version:
A client for the Phoenix API
64 lines • 2.51 kB
JavaScript
import { defaultGetEnvironmentOptions, makeDefaultClientOptions, } from "./config.js";
import createOpenApiClient from "openapi-fetch";
/**
* Merge all configuration options according to priority:
* defaults < environment < explicit options
*
* Headers are simply replaced, not merged.
*
* You can call this function before instantiating the client if you need to retain access
* to the options that were passed in to the client.
*/
export const getMergedOptions = ({ options = {}, getEnvironmentOptions = defaultGetEnvironmentOptions, } = {}) => {
const defaultOptions = makeDefaultClientOptions();
const environmentOptions = getEnvironmentOptions();
return {
...defaultOptions,
...environmentOptions,
...options,
};
};
/**
* Middleware to take non-successful API calls throw instead of being swallowed
*/
const middleware = {
onResponse({ response }) {
if (!response.ok) {
// Will produce error messages like "https://example.org/api/v1/example: 404 Not Found".
throw new Error(`${response.url}: ${response.status} ${response.statusText}`);
}
},
};
/**
* Create a Phoenix client.
*
* The client is strongly typed and uses generated openapi types.
*
* @example
* ```ts
* import { createClient } from "@arize/phoenix-client";
*
* const client = createClient();
*
* const response = await client.GET("/v1/traces");
* // ^ path string is strongly typed, and completion works with autocomplete
* // path parameters, query parameters, and request body are also strongly typed based on the openapi spec,
* // the path, and the method.
* ```
*
* @param config - The configuration to use for the client.
* @param config.options - The options to use for [openapi-fetch.createOpenApiClient](https://github.com/openapi-ts/openapi-typescript/tree/main/packages/openapi-fetch).
* @param config.getEnvironmentOptions - The function to use to get the environment options. By default, a function that
* returns `process.env` is used.
* @returns The Phoenix client as a strongly typed [openapi-fetch](https://github.com/openapi-ts/openapi-typescript/tree/main/packages/openapi-fetch) client.
*/
export const createClient = (config = {}) => {
const mergedOptions = getMergedOptions(config);
const openApiClient = createOpenApiClient(mergedOptions);
openApiClient.use(middleware);
return {
...openApiClient,
config: mergedOptions,
};
};
//# sourceMappingURL=client.js.map