Edge function bundling fails if code is loaded from private source (DENO_AUTH_TOKENS)
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
- Create a new edge function
- Add a dependency to the edge function that requires DENO_AUTH_TOKENS to access (such as a private github repo)
- Verify that DENO_AUTH_TOKENS is correct then observe that
deno cache -r index.tscaches the files without problem. Also observe thatsupabase functions serve my-functionworks without issue. - Run
supabase functions deploy my-functionand 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.
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 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.
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 setDENO_AUTH_TOKENSinside your--env-file
Let us know if that works!
@soedirgo @laktek it works now, thank you!
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