cli icon indicating copy to clipboard operation
cli copied to clipboard

Edge function bundling fails if code is loaded from private source (DENO_AUTH_TOKENS)

Open evelant opened this issue 2 years ago • 4 comments

Bug report

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

Describe the bug

Loading dependencies from a private source fails when bundling edge functions. I've got an auth token for the private code in env.DENO_AUTH_TOKENS (per deno docs) and Deno can download and cache the code without issue. The function runs fine locally but bunding fails as soon as I attempt to deploy.

error: Uncaught (in promise) Error: Module not found "https://raw.githubusercontent.com/path/to/my/private/code/privateModule.ts".
      const ret = new Error(getStringFromWasm0(arg0, arg1));
                  ^
    at __wbg_new_8d2af00bc1e329ee (https://deno.land/x/[email protected]/eszip_wasm.generated.js:312:19)
    at <anonymous> (https://deno.land/x/[email protected]/eszip_wasm_bg.wasm:1:79439)
    at <anonymous> (https://deno.land/x/[email protected]/eszip_wasm_bg.wasm:1:1388039)
    at <anonymous> (https://deno.land/x/[email protected]/eszip_wasm_bg.wasm:1:1862894)
    at __wbg_adapter_18 (https://deno.land/x/[email protected]/eszip_wasm.generated.js:146:6)
    at real (https://deno.land/x/[email protected]/eszip_wasm.generated.js:130:14)

To Reproduce

  1. Create a new edge function
  2. Add a dependency to the edge function that requires DENO_AUTH_TOKENS to access (such as a private github repo)
  3. Verify that DENO_AUTH_TOKENS is correct then observe that deno cache -r index.ts caches the files without problem. Also observe that supabase functions serve my-function works without issue.
  4. Run supabase functions deploy my-function and observe the crash during bundling when it cannot access the files in the private repository

Expected behavior

Anything that works locally should successfully bundle and deploy.

Screenshots

N/A

System information

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

Additional context

This is blocking me from progressing in my migration from firebase to supabase. Everything works locally but I can't deploy due to this bug.

evelant avatar Mar 25 '23 01:03 evelant

This appears to be an issue with eszip https://github.com/denoland/eszip/issues/121

Another problem here is that when the bundling process fails it does not give any useful debug output. I think this is due to the code here https://github.com/supabase/cli/blob/main/internal/utils/denos/build.ts where it just throws a useless error such as "file not found" without logging what file it was trying to read.

I also can't find https://github.com/supabase/cli/blob/main/internal/utils/denos/build.ts anywhere in my node_modules, is it compiled directly into the supabase binary? I wanted to patch it to get more useful output but am unable to find it.

evelant avatar Mar 25 '23 17:03 evelant

@evelant Will take a look at this issue next week.

I also can't find https://github.com/supabase/cli/blob/main/internal/utils/denos/build.ts anywhere in my node_modules, is it compiled directly into the supabase binary? I wanted to patch it to get more useful output but am unable to find it.

You can clone the Supabase CLI repo and run it with a patched version of the file locally. Instructions on how to run it locally should be available in the repo.

laktek avatar Mar 25 '23 19:03 laktek

Just a note for the fix

  • for functions deploy, you need to run it like: DENO_AUTH_TOKENS=... supabase functions deploy foo
  • for functions serve, you need to set DENO_AUTH_TOKENS inside your --env-file

Let us know if that works!

soedirgo avatar Mar 30 '23 06:03 soedirgo

@soedirgo @laktek it works now, thank you!

evelant avatar Apr 04 '23 16:04 evelant

Closing as private registries are now supported through .npmrc https://docs.deno.com/runtime/fundamentals/node/#how-to-use-private-registries-with-deno

relates to https://github.com/supabase/cli/pull/2775

sweatybridge avatar Oct 30 '24 06:10 sweatybridge