mirror of
https://github.com/NanmiCoder/cc-haha
synced 2026-07-16 13:03:31 +08:00
The desktop provider settings editor has its own JSON scrubber for provider-managed env. It now removes the ChatGPT Official OAuth marker and token-file path along with the Anthropic provider env keys, so editing another provider cannot keep stale OpenAI OAuth runtime markers in previewed settings JSON. Constraint: Desktop JSON preview cleanup is separate from server managed-env filtering. Rejected: Rely only on server activation cleanup | the settings editor can preview and persist user-edited JSON before the server rebuilds provider env. Confidence: high Scope-risk: narrow Tested: cd desktop && bun test src/lib/__tests__/providerSettingsJson.test.ts Tested: bun test src/server/__tests__/providers.test.ts --test-name-pattern "ChatGPT Official|getProviderForProxy" Tested: bun test src/server/__tests__/conversation-service.test.ts --test-name-pattern "ChatGPT Official|session-scoped provider" Tested: git diff --check
66 lines
2.1 KiB
TypeScript
66 lines
2.1 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
|
|
import {
|
|
API_KEY_JSON_PLACEHOLDER,
|
|
maskSettingsJsonSecrets,
|
|
restoreSettingsJsonSecrets,
|
|
stripProviderSettingsJsonEnv,
|
|
} from '../providerSettingsJson'
|
|
|
|
describe('provider settings JSON helpers', () => {
|
|
it('masks both Anthropic API key env vars even when the values differ', () => {
|
|
const raw = JSON.stringify({
|
|
env: {
|
|
ANTHROPIC_API_KEY: 'stale-api-key',
|
|
ANTHROPIC_AUTH_TOKEN: 'current-auth-token',
|
|
OTHER_VALUE: 'visible',
|
|
},
|
|
})
|
|
|
|
const masked = JSON.parse(maskSettingsJsonSecrets(raw)) as { env: Record<string, string> }
|
|
|
|
expect(masked.env.ANTHROPIC_API_KEY).toBe(API_KEY_JSON_PLACEHOLDER)
|
|
expect(masked.env.ANTHROPIC_AUTH_TOKEN).toBe(API_KEY_JSON_PLACEHOLDER)
|
|
expect(masked.env.OTHER_VALUE).toBe('visible')
|
|
})
|
|
|
|
it('restores masked Anthropic API key env vars from their previous field values', () => {
|
|
const previousRaw = JSON.stringify({
|
|
env: {
|
|
ANTHROPIC_API_KEY: 'previous-api-key',
|
|
ANTHROPIC_AUTH_TOKEN: 'previous-auth-token',
|
|
},
|
|
})
|
|
const edited = {
|
|
env: {
|
|
ANTHROPIC_API_KEY: API_KEY_JSON_PLACEHOLDER,
|
|
ANTHROPIC_AUTH_TOKEN: API_KEY_JSON_PLACEHOLDER,
|
|
},
|
|
}
|
|
|
|
const restored = restoreSettingsJsonSecrets(edited, previousRaw, 'fallback-key')
|
|
|
|
expect(restored.env.ANTHROPIC_API_KEY).toBe('previous-api-key')
|
|
expect(restored.env.ANTHROPIC_AUTH_TOKEN).toBe('previous-auth-token')
|
|
})
|
|
|
|
it('strips provider-managed env vars from existing settings before preview merge', () => {
|
|
const cleaned = stripProviderSettingsJsonEnv(
|
|
{
|
|
ANTHROPIC_API_KEY: 'old-api-key',
|
|
ANTHROPIC_AUTH_TOKEN: 'old-auth-token',
|
|
ANTHROPIC_BASE_URL: 'https://old.example.com',
|
|
ANTHROPIC_MODEL: 'old-model',
|
|
CLAUDE_CODE_MODEL_CONTEXT_WINDOWS: '{"old":100000}',
|
|
CC_HAHA_OPENAI_OAUTH_PROVIDER: '1',
|
|
OPENAI_CODEX_OAUTH_FILE: '/tmp/openai-oauth.json',
|
|
CC_HAHA_SEND_DISABLED_THINKING: '1',
|
|
USER_DEFINED: 'keep-me',
|
|
},
|
|
['CC_HAHA_SEND_DISABLED_THINKING'],
|
|
)
|
|
|
|
expect(cleaned).toEqual({ USER_DEFINED: 'keep-me' })
|
|
})
|
|
})
|