Es una protección del navegador, no un fallo. Sin ella, cualquier web que visitaras podría pedir datos en tu nombre a los servicios donde tienes sesión abierta y leer las respuestas. Por eso el navegador exige que el servidor diga explícitamente qué webs pueden leerle.
La consecuencia práctica, y lo que más cuesta aceptar, es que **esto no se arregla en tu app**. El permiso lo da quien responde, no quien pregunta. Puedes reescribir tu código cien veces y no cambiará nada: la cabecera tiene que salir del otro servidor.
En la práctica, casi siempre es que el otro extremo no conoce tu dominio nuevo. Con Supabase suele ser que tu dominio no está declarado en la configuración de URLs del proyecto. Con una API tuya, que su configuración de orígenes permitidos sigue teniendo solo la dirección de desarrollo. Con una API de terceros, muchas veces es deliberado: no están pensadas para llamarse desde el navegador, y ahí la solución es llamarlas desde tu servidor.