MCPcopy Create free account
hub / github.com/Zoo-Code-Org/Zoo-Code / doRefreshAccessToken

Method doRefreshAccessToken

src/api/providers/qwen-code.ts:116–164  ·  view source on GitHub ↗
(credentials: QwenOAuthCredentials)

Source from the content-addressed store, hash-verified

114 }
115
116 private async doRefreshAccessToken(credentials: QwenOAuthCredentials): Promise<QwenOAuthCredentials> {
117 if (!credentials.refresh_token) {
118 throw new Error("No refresh token available in credentials.")
119 }
120
121 const bodyData = {
122 grant_type: "refresh_token",
123 refresh_token: credentials.refresh_token,
124 client_id: QWEN_OAUTH_CLIENT_ID,
125 }
126
127 const response = await fetch(QWEN_OAUTH_TOKEN_ENDPOINT, {
128 method: "POST",
129 headers: {
130 "Content-Type": "application/x-www-form-urlencoded",
131 Accept: "application/json",
132 },
133 body: objectToUrlEncoded(bodyData),
134 })
135
136 if (!response.ok) {
137 const errorText = await response.text()
138 throw new Error(`Token refresh failed: ${response.status} ${response.statusText}. Response: ${errorText}`)
139 }
140
141 const tokenData = await response.json()
142
143 if (tokenData.error) {
144 throw new Error(`Token refresh failed: ${tokenData.error} - ${tokenData.error_description}`)
145 }
146
147 const newCredentials = {
148 ...credentials,
149 access_token: tokenData.access_token,
150 token_type: tokenData.token_type,
151 refresh_token: tokenData.refresh_token || credentials.refresh_token,
152 expiry_date: Date.now() + tokenData.expires_in * 1000,
153 }
154
155 const filePath = getQwenCachedCredentialPath(this.options.qwenCodeOauthPath)
156 try {
157 await fs.writeFile(filePath, JSON.stringify(newCredentials, null, 2))
158 } catch (error) {
159 console.error("Failed to save refreshed credentials:", error)
160 // Continue with the refreshed token in memory even if file write fails
161 }
162
163 return newCredentials
164 }
165
166 private isTokenValid(credentials: QwenOAuthCredentials): boolean {
167 const TOKEN_REFRESH_BUFFER_MS = 30 * 1000 // 30s buffer

Callers 1

refreshAccessTokenMethod · 0.95

Calls 5

objectToUrlEncodedFunction · 0.85
textMethod · 0.80
writeFileMethod · 0.80
errorMethod · 0.65

Tested by

no test coverage detected