UNPKG

@tanstack/ai

Version:

Type-safe TypeScript AI SDK for streaming chat, tool calling, agents, structured outputs, and multimodal generation.

33 lines (32 loc) • 1.63 kB
import { KeyedAdapter, KeyedAdapterResult } from './keyed.js'; import { ByokProvider } from './define-provider.js'; import { ProviderId } from './providers.js'; /** * Read a key on the relay. Import from `@tanstack/ai/byok/server` so this * `process.env` access is not in the client graph. * * The header wins. A {@link ByokProvider} then tries `provider.env` in order. * A slug is header-only. */ export declare function getByokKey(request: Request, provider: ProviderId | ByokProvider): string | null; /** * Read several keys at once, one per name. Same rules as {@link getByokKey} * for each entry. Use it for a credential made of more than one value. */ export declare function getByokKeys<const TProviders extends Record<string, ProviderId | ByokProvider>>(request: Request, providers: TProviders): { [K in keyof TProviders]: string | null; }; /** * Build the adapter of the first provider that has a key. The user's own key * (the `x-byok-<id>` header) wins, in order. Then each keyed adapter made with * a BYOK descriptor tries its `env` names, in order. Gives `null` when no * provider has a key, so the route can answer with `byokMissing`. * * @example * ```ts * const adapter = keyedAdapterFromRequest(request, models) * if (!adapter) return byokMissing('openai') * return toServerSentEventsResponse(chat({ adapter, messages })) * ``` */ export declare function keyedAdapterFromRequest<const T extends Record<string, KeyedAdapter<unknown>> | ReadonlyArray<KeyedAdapter<unknown>>>(request: Request, adapters: T): KeyedAdapterResult<T extends ReadonlyArray<unknown> ? T[number] : T[keyof T]> | null;