UNPKG

@tanstack/ai

Version:

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

43 lines (42 loc) • 2.05 kB
import { KeyedAdapter, KeyedAdapterResult } from './keyed.js'; import { ByokProvider } from './define-provider.js'; import { ProviderId } from './providers.js'; /** * The first name in `provider.env` that is set, with its value. A slug has no * env names. Where `process` is missing (a browser) it returns `null`. */ export declare function envKeyEntry(provider: ProviderId | ByokProvider): { name: string; value: string; } | null; /** The value of {@link envKeyEntry}, or `null`. */ export declare function envKey(provider: ProviderId | ByokProvider): string | null; /** * 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;