@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
TypeScript
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;