fix: extract actual error from process-withdraw edge function response

Supabase JS client wraps non-2xx responses as generic FunctionsHttpError
("Edge Function returned a non-2xx status code"), hiding the real error.
Now reads the response body to show the actual error message.

Also adds migration to drop auth.users FK on p2p_withdrawal_limits
(already absent in production, added for migration completeness).
This commit is contained in:
2026-02-24 23:01:50 +03:00
parent 2f89afc051
commit 385288dae3
2 changed files with 26 additions and 2 deletions
+13 -2
View File
@@ -1046,11 +1046,22 @@ export async function requestWithdraw(
toast.info('Processing withdrawal...');
const { data, error } = await supabase.functions.invoke('process-withdraw', {
const { data, error, response } = await supabase.functions.invoke('process-withdraw', {
body: { userId, token, amount, walletAddress }
});
if (error) throw error;
// Supabase client wraps non-2xx as generic FunctionsHttpError (data=null).
// Extract the actual error from the unread response body.
if (error) {
let errorMessage = 'Withdrawal failed';
if (response) {
try {
const body = await response.json();
errorMessage = body?.error || errorMessage;
} catch { /* response body already consumed or not JSON */ }
}
throw new Error(errorMessage);
}
if (!data?.success) {
throw new Error(data?.error || 'Withdrawal failed');
@@ -0,0 +1,13 @@
-- Migration: Drop auth.users FK constraint on p2p_withdrawal_limits
-- This table was missed in 20260223120000 and 20260224050000 migrations.
-- user_id is now a deterministic UUID v5 derived from citizen/visa number,
-- not an auth.users entry. The FK causes check_withdrawal_limit() to fail
-- with a constraint violation on INSERT.
ALTER TABLE public.p2p_withdrawal_limits
DROP CONSTRAINT IF EXISTS p2p_withdrawal_limits_user_id_fkey;
-- Also drop the ON DELETE CASCADE since auth.users is no longer the source
-- The constraint name may vary; try the default naming convention too
ALTER TABLE public.p2p_withdrawal_limits
DROP CONSTRAINT IF EXISTS p2p_withdrawal_limits_pkey_fkey;