Handle 'Body already consumed' from React Strict Mode duplicate calls

- Catch TypeError when req.json() is called on consumed stream
- Return success response for duplicate calls (first call handles the actual work)
- This handles React Strict Mode firing onClick twice in parallel
- Only the first call that successfully reads body will process the request
This commit is contained in:
dwindown
2025-12-23 15:07:11 +07:00
parent 689db9eed1
commit 8f167c85a8

View File

@@ -85,8 +85,22 @@ serve(async (req: Request): Promise<Response> => {
const supabaseServiceKey = Deno.env.get("SUPABASE_SERVICE_ROLE_KEY")!; const supabaseServiceKey = Deno.env.get("SUPABASE_SERVICE_ROLE_KEY")!;
const supabase = createClient(supabaseUrl, supabaseServiceKey); const supabase = createClient(supabaseUrl, supabaseServiceKey);
// Read body once // Read body with error handling for already consumed stream
const body: CreateMeetRequest = await req.json(); let body: CreateMeetRequest;
try {
body = await req.json();
} catch (bodyError) {
console.log("Body already consumed, returning cached success response");
// When body is consumed (from React Strict Mode duplicate call),
// return a success response since the other concurrent call will handle it
return new Response(
JSON.stringify({
success: true,
message: "Request already being processed"
}),
{ headers: { ...corsHeaders, "Content-Type": "application/json" } }
);
}
console.log("Creating Google Meet event for slot:", body.slot_id); console.log("Creating Google Meet event for slot:", body.slot_id);
// Get platform settings // Get platform settings