UNPKG

@arizeai/phoenix-client

Version:

A client for the Phoenix API

64 lines 2.51 kB
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