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;
