openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
61 lines (60 loc) • 2.43 kB
JavaScript
import { F as resolveTimerTimeoutMs } from "./number-coercion-CLj0HTDM.js";
import { r as normalizeProviderId } from "./provider-id-DMd-TDFp.js";
//#region src/infra/provider-usage.shared.ts
/** One provider cannot hold the aggregate usage response beyond this deadline. */
const PROVIDER_USAGE_TIMEOUT_MS = 5e3;
const PROVIDER_LABELS = {
anthropic: "Claude",
clawrouter: "ClawRouter",
deepseek: "DeepSeek",
"github-copilot": "Copilot",
"google-gemini-cli": "Gemini",
minimax: "MiniMax",
openai: "OpenAI",
openrouter: "OpenRouter",
venice: "Venice",
xai: "xAI",
xiaomi: "Xiaomi",
"xiaomi-token-plan": "Xiaomi Token Plan",
zai: "z.ai"
};
/** Dynamic-key lookup view; closed-key reads should use PROVIDER_LABELS directly. */
function providerUsageLabel(provider) {
return PROVIDER_LABELS[provider];
}
/** Returns true for providers whose usage endpoint is only meaningful with OAuth/token auth. */
function isOAuthOnlyUsageProvider(provider) {
return provider === "openai";
}
/** Maps model/provider ids and credential type into a normalized usage provider id. */
function resolveUsageProviderId(provider, options) {
if (!provider) return;
const normalized = normalizeProviderId(provider);
if (normalized === "openai" && (options?.credentialType === "oauth" || options?.credentialType === "token")) return "openai";
if (normalized === "openai") return;
if (normalized === "claude-cli") return "anthropic";
if (normalized === "minimax-portal" || normalized === "minimax-cn" || normalized === "minimax-portal-cn") return "minimax";
return normalized || void 0;
}
const ignoredErrors = /* @__PURE__ */ new Set([
"No credentials",
"No token",
"No API key",
"Not logged in",
"No auth"
]);
const clampPercent = (value) => Math.max(0, Math.min(100, Number.isFinite(value) ? value : 0));
/** Resolves a promise with a fallback when usage collection exceeds the timeout. */
const raceUsageTimeout = async (work, ms, fallback) => {
let timeout;
const timeoutMs = resolveTimerTimeoutMs(ms, 1);
try {
return await Promise.race([work, new Promise((resolve) => {
timeout = setTimeout(() => resolve(fallback), timeoutMs);
})]);
} finally {
if (timeout) clearTimeout(timeout);
}
};
//#endregion
export { isOAuthOnlyUsageProvider as a, resolveUsageProviderId as c, ignoredErrors as i, PROVIDER_USAGE_TIMEOUT_MS as n, providerUsageLabel as o, clampPercent as r, raceUsageTimeout as s, PROVIDER_LABELS as t };