@ottervoice/provider-utils
写自定义 Provider 或接自建网关时用本包,应用 UI 一般不直接依赖它(工厂函数已封装)。
| 符号 | 用途 |
|---|---|
CredentialOptions |
apiKey(仅服务端)· Broker URL/应用鉴权/会话绑定 · fetch |
createCredentialResolver |
解析短期 token / 静态 key,供适配器内部使用 |
| SSE helpers | 解析 OpenAI 风格或同类 SSE 流 |
| WebSocket ASR helpers | 统一流式 ASR 会话骨架 |
CredentialOptions
Section titled “CredentialOptions”| 字段 | 说明 |
|---|---|
tokenBrokerUrl |
仅当 token 同时短期、限 route/model/budget 时可用于客户端。 |
tokenBrokerHeaders |
只发给 Broker 的应用登录态 header,不会透传给上游 Provider。 |
tokenBrokerSessionId |
Broker 用于校验会话归属、配额与审计的语音 Session ID。 |
tokenBrokerCredentials |
跨域 Cookie 登录态需要设为 include;同源默认即可。 |
apiKey |
长期密钥。只放服务端 / CLI,禁止打进浏览器或 App。 |
fetch |
可注入,便于测试或特殊运行时。 |
Token 契约见 Token Broker 快速接入 与示例 examples/token-broker。不能真正限权的 Provider(例如可任意选 OpenRouter 模型的通用 bearer token)必须使用服务端策略网关。
import { createCredentialResolver } from '@ottervoice/provider-utils';
const resolve = createCredentialResolver({ tokenBrokerUrl: 'https://api.example.com/api/voice/token', tokenBrokerHeaders: { authorization: `Bearer ${applicationSessionToken}` }, tokenBrokerSessionId: voiceSessionId,}, { provider: 'deepgram', purpose: 'asr',});
const { token, url, expiresAt } = await resolve();完整字段表:API 参考 · provider-utils。