@tanstack/ai
Version:
Type-safe TypeScript AI SDK for streaming chat, tool calling, agents, structured outputs, and multimodal generation.
41 lines (40 loc) • 1.54 kB
JavaScript
import { ByokMissingError } from "./errors.js";
import { resolveProviderId } from "./providers.js";
import { envKey } from "./get-key.js";
import { isKeyedAdapter } from "./keyed.js";
//#region src/byok/env-keys.ts
function missingKeyMessage(provider) {
if (typeof provider === "string") return `Missing ${provider} API key.`;
const names = provider.env ?? [];
const hint = names.length > 0 ? ` Set ${names.join(" or ")}.` : "";
return `Missing ${provider.label} API key.${hint}`;
}
/**
* The `ctx.keys` of an agent: `keys`, else `fallback` (the keys of a parent
* agent), else each provider's `env` names. Not in `@tanstack/ai/byok`, so
* the client entry has no env access.
*/
function providerKeys(keys = {}, fallback) {
const get = async (provider) => {
return (typeof keys === "function" ? await keys(provider) : keys[resolveProviderId(provider)]) || (fallback ? await fallback.get(provider) : envKey(provider)) || null;
};
const require = async (provider) => {
const key = await get(provider);
if (!key) {
const error = new ByokMissingError(resolveProviderId(provider));
error.message = missingKeyMessage(provider);
throw error;
}
return key;
};
return {
get,
require,
adapter: async (adapter) => isKeyedAdapter(adapter) ? adapter.create(await require(adapter.provider)) : adapter
};
}
/** The `ctx.keys` of an agent with no keys set: each provider's `env` names. */
var envProviderKeys = providerKeys();
//#endregion
export { envProviderKeys, providerKeys };
//# sourceMappingURL=env-keys.js.map