From 7e58a02053f70ebd06dbcd0e6d05f0e59ae360ff Mon Sep 17 00:00:00 2001 From: can1357 Date: Wed, 28 Jan 2026 14:29:17 +0100 Subject: [PATCH] feat(ai/usage): added automatic token refresh for expired Kimi OAuth credentials - Added automatic token refresh for expired Kimi OAuth credentials in usage provider. - Imported refreshKimiToken function to enable token refresh capability. - Enhanced error handling with validation for refresh token availability and try-catch block for refresh failures. --- packages/ai/src/usage/kimi.ts | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/packages/ai/src/usage/kimi.ts b/packages/ai/src/usage/kimi.ts index caaef10da..b2d30757b 100644 --- a/packages/ai/src/usage/kimi.ts +++ b/packages/ai/src/usage/kimi.ts @@ -9,7 +9,7 @@ import type { UsageStatus, UsageWindow, } from "../usage"; -import { getKimiCommonHeaders } from "../utils/oauth/kimi"; +import { getKimiCommonHeaders, refreshKimiToken } from "../utils/oauth/kimi"; const DEFAULT_BASE_URL = "https://api.kimi.com/coding/v1"; const USAGE_PATH = "usages"; @@ -259,13 +259,23 @@ export const kimiUsageProvider: UsageProvider = { const { credential } = params; if (credential.type !== "oauth") return null; - const accessToken = credential.accessToken; + let accessToken = credential.accessToken; if (!accessToken) return null; const nowMs = ctx.now(); if (credential.expiresAt !== undefined && credential.expiresAt <= nowMs) { - ctx.logger?.warn("Kimi usage token expired", { provider: params.provider }); - return null; + if (!credential.refreshToken) { + ctx.logger?.warn("Kimi usage token expired, no refresh token", { provider: params.provider }); + return null; + } + try { + ctx.logger?.debug("Kimi usage token expired, refreshing", { provider: params.provider }); + const refreshed = await refreshKimiToken(credential.refreshToken); + accessToken = refreshed.access; + } catch (error) { + ctx.logger?.warn("Kimi usage token refresh failed", { provider: params.provider, error: String(error) }); + return null; + } } const baseUrl = normalizeBaseUrl(params.baseUrl);