Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

_invokeWithStreamedResponse does not return any Data when throwing a httpError #637

Open
2 tasks done
bbauman1 opened this issue Jan 9, 2025 · 3 comments
Open
2 tasks done
Labels
bug Something isn't working

Comments

@bbauman1
Copy link

bbauman1 commented Jan 9, 2025

Bug report

  • I confirm this is a bug with Supabase, not with my own application.
  • I confirm I have searched the Docs, GitHub Discussions, and Discord.

Describe the bug

Understand that this function is marked experimental but creating an issue to track that when an httpError is thrown the Data object is always empty. I tried coming up with a fix here but it didn't seem to work. bbauman1@43d9f01

Also, lesser important, but the completionHandler doesn't always get called which leads to an error in Xcode logs

To Reproduce

Call _invokeWithStreamedResponse and have it throw an error

Expected behavior

Data object is not empty

Screenshots

If applicable, add screenshots to help explain your problem.

System information

  • OS: [e.g. macOS, Windows]
  • Browser (if applies) [e.g. chrome, safari]
  • Version of supabase-js: [e.g. 6.0.2]
  • Version of Node.js: [e.g. 10.10.0]

Additional context

Add any other context about the problem here.

@bbauman1 bbauman1 added the bug Something isn't working label Jan 9, 2025
@cyrilzakka
Copy link

My issue might be related as well - when calling client.functions._invokeWithStreamedResponse how am I expected to handle errors? While streaming them seems to be what is implied here, I'm not sure it's the correct approach. Sending errors with the traditional HTTP code leads to API MISUSE: NSURLSession delegate Functions.StreamResponseDelegate: <Functions.StreamResponseDelegate: 0x3008e57c0> (0x3008e57c0) API MISUSE: dataTask:didReceiveResponse:completionHandler: completion handler not called

@grdsdev
Copy link
Collaborator

grdsdev commented Feb 24, 2025

Hi @cyrilzakka do you have an example edge functions for reproducing it?

@cyrilzakka
Copy link

Sure! Here's a minimally reproducible example:

Deno.serve(async (req) => {
  [...]

  try {
    // Get authorization header
    const authHeader = req.headers.get('Authorization');
    if (!authHeader) {
      throw new Error('Missing authorization header'); <-- these errors return the error message outlined below  
    }

    const supabaseClient = createClient(
      Deno.env.get('SUPABASE_URL') ?? '',
      Deno.env.get('SUPABASE_ANON_KEY') ?? '',
    );

    const token = authHeader.replace('Bearer ', '');
    const { data: { user }, error: userError } = await supabaseClient.auth.getUser(token);
    if (userError || !user) {
      throw new Error('Invalid user token');  <-- these errors return the Swift error message outlined below 
    }
[...] 
// Streaming code from LLM which works fine, including streamed errors.
} catch (error) {
    console.error('Error:', error);
    
    const status = error instanceof Error ? (
      error.message === 'Missing authorization header' || error.message === 'Invalid user token' ? 401 :
      error.message === 'Error fetching user profile' ? 403 :
      400
    ) : 500;

    return new Response(
      JSON.stringify({ 
        error: error instanceof Error ? error.message : 'Internal server error'
      }),
      {
        status,
        headers: { ...corsHeaders, 'Content-Type': 'application/json' }
      }
    );
  };

So the non-streaming errors show up as Unknown Error: Edge Function returned a non-2xx status code: 400 accompanied with API MISUSE: NSURLSession delegate Functions.StreamResponseDelegate: <Functions.StreamResponseDelegate: 0x600000035210> (0x600000035210) API MISUSE: dataTask:didReceiveResponse:completionHandler: completion handler not called Edge Function returned a non-2xx status code: 400 httpError(code: 400, data: 0 bytes)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants