From c00879bf6694d6db421e6d6f22e46d76a651c65d Mon Sep 17 00:00:00 2001 From: weeihan Date: Mon, 13 Jul 2026 07:11:09 +0800 Subject: [PATCH] fix: recover orphaned DeepSeek key + remove retired settings slots MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Migration copies ANTHROPIC_API_KEY value → DEEPSEEK_API_KEY (DeepSeek key was saved before the rename), then deletes ANTHROPIC_API_KEY and VOYAGE_API_KEY rows. ALLOWED_KEYS now only lists active provider keys. Co-Authored-By: Claude Sonnet 4.6 Claude-Session: https://claude.ai/code/session_01CPf5Rc8QPx6V8KLEEgfKEQ --- app/api/settings/route.ts | 1 - ...20260713000002_reconcile_settings_keys.sql | 23 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 supabase/migrations/20260713000002_reconcile_settings_keys.sql diff --git a/app/api/settings/route.ts b/app/api/settings/route.ts index 1d432f9..2110d54 100644 --- a/app/api/settings/route.ts +++ b/app/api/settings/route.ts @@ -4,7 +4,6 @@ import { NextRequest, NextResponse } from 'next/server' import { createClient } from '@/lib/supabase/server' const ALLOWED_KEYS = [ - 'ANTHROPIC_API_KEY', 'DEEPSEEK_API_KEY', 'GOOGLE_AI_API_KEY', 'META_WHATSAPP_PHONE_NUMBER_ID', diff --git a/supabase/migrations/20260713000002_reconcile_settings_keys.sql b/supabase/migrations/20260713000002_reconcile_settings_keys.sql new file mode 100644 index 0000000..873b1cd --- /dev/null +++ b/supabase/migrations/20260713000002_reconcile_settings_keys.sql @@ -0,0 +1,23 @@ +-- Reconcile app_settings after provider switches: +-- DeepSeek key was saved under ANTHROPIC_API_KEY slot (before rename) — recover it. +-- Remove retired ANTHROPIC_API_KEY and VOYAGE_API_KEY slots. + +-- Ensure DeepSeek slot exists +insert into app_settings (key, value) values ('DEEPSEEK_API_KEY', '') + on conflict (key) do nothing; + +-- Copy orphaned value: ANTHROPIC_API_KEY → DEEPSEEK_API_KEY (only when DEEPSEEK_API_KEY is empty and ANTHROPIC has a value) +update app_settings dk +set value = ak.value, updated_at = now() +from app_settings ak +where dk.key = 'DEEPSEEK_API_KEY' + and ak.key = 'ANTHROPIC_API_KEY' + and coalesce(dk.value, '') = '' + and coalesce(ak.value, '') <> ''; + +-- Ensure Gemini slot exists +insert into app_settings (key, value) values ('GOOGLE_AI_API_KEY', '') + on conflict (key) do nothing; + +-- Remove retired provider slots +delete from app_settings where key in ('ANTHROPIC_API_KEY', 'VOYAGE_API_KEY');