MCPcopy Create free account
hub / github.com/chainreactors/EvilProxy / ensureAccessToken

Function ensureAccessToken

cmd/fetch_codex_models/main.go:181–229  ·  view source on GitHub ↗
(ctx context.Context, store *sdkauth.FileTokenStore, auth *coreauth.Auth)

Source from the content-addressed store, hash-verified

179}
180
181func ensureAccessToken(ctx context.Context, store *sdkauth.FileTokenStore, auth *coreauth.Auth) (string, bool, error) {
182 accessToken := metaStringValue(auth.Metadata, "access_token")
183 if accessToken != "" {
184 if expiresAt, ok := auth.ExpirationTime(); !ok || time.Now().Add(accessTokenRefreshLeeway).Before(expiresAt) {
185 return accessToken, false, nil
186 }
187 }
188
189 refreshToken := metaStringValue(auth.Metadata, "refresh_token")
190 if refreshToken == "" {
191 if accessToken != "" {
192 return accessToken, false, nil
193 }
194 return "", false, fmt.Errorf("missing access_token and refresh_token")
195 }
196
197 svc := codexauth.NewCodexAuthWithProxyURL(nil, auth.ProxyURL)
198 tokenData, errRefresh := svc.RefreshTokensWithRetry(ctx, refreshToken, 3)
199 if errRefresh != nil {
200 return "", false, errRefresh
201 }
202 if strings.TrimSpace(tokenData.AccessToken) == "" {
203 return "", false, fmt.Errorf("refresh response did not include access_token")
204 }
205
206 if auth.Metadata == nil {
207 auth.Metadata = make(map[string]any)
208 }
209 auth.Metadata["id_token"] = tokenData.IDToken
210 auth.Metadata["access_token"] = tokenData.AccessToken
211 if tokenData.RefreshToken != "" {
212 auth.Metadata["refresh_token"] = tokenData.RefreshToken
213 }
214 if tokenData.AccountID != "" {
215 auth.Metadata["account_id"] = tokenData.AccountID
216 }
217 if tokenData.Email != "" {
218 auth.Metadata["email"] = tokenData.Email
219 }
220 auth.Metadata["expired"] = tokenData.Expire
221 auth.Metadata["type"] = "codex"
222 auth.Metadata["last_refresh"] = time.Now().Format(time.RFC3339)
223
224 if _, errSave := store.Save(ctx, auth); errSave != nil {
225 return "", false, fmt.Errorf("failed to save refreshed auth: %w", errSave)
226 }
227
228 return tokenData.AccessToken, true, nil
229}
230
231func fetchModels(ctx context.Context, auth *coreauth.Auth, accessToken, clientVersion string) ([]byte, int, error) {
232 modelsURL, errURL := codexModelsURL(clientVersion)

Callers 1

mainFunction · 0.85

Calls 5

ExpirationTimeMethod · 0.80
FormatMethod · 0.80
metaStringValueFunction · 0.70
SaveMethod · 0.65

Tested by

no test coverage detected