mirror of
https://github.com/supabase/supabase.git
synced 2026-10-06 01:45:10 +03:00
Updates the self-host Edge Functions template to use `@supabase/server`, matching the CLI's `supabase functions new` templates (part of SDK-1150, follows up on #45635 which exposed `SUPABASE_JWKS` to the functions container). The `hello` example function now wraps its handler in `withSupabase({ auth: 'none' })` and resolves the package through a per-function `deno.json` import map, which the runtime auto-discovers, so no dispatcher changes are needed. The self-hosted functions guide is updated to match: the create-a-function snippet, a `ctx.supabaseAdmin` example replacing the manual esm.sh `createClient` wiring, and a note that `auth: 'user'` requires `SUPABASE_JWKS`. Verified on `supabase/edge-runtime:v1.74.0` with the compose environment variables: `curl /functions/v1/hello` returns the same response body as before, so existing docs and troubleshooting pages stay accurate. The `docker/.gitignore` change: `volumes/functions/**` ignores self-hosters' own functions, but it also hid the new `deno.json`, which must ship with the repo for the `hello` import to resolve. The allowlist entries follow the existing `main/index.ts` pattern. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Edge Functions now support authenticated invocation with publishable or secret API keys. * Function handlers can access authenticated and administrative Supabase clients through the request context. * Added automatic environment configuration and JWT verification support. * **Documentation** * Updated the self-hosting guide with the new function setup and authentication workflow. * Improved local function examples for supported access patterns and privileged operations. * **Tests** * Updated self-hosted smoke tests to validate publishable-key function access. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Kalleby Santos <kalleby_santos@hotmail.com> Co-authored-by: Kalleby Santos <105971119+kallebysantos@users.noreply.github.com>
38 lines
1.3 KiB
TypeScript
38 lines
1.3 KiB
TypeScript
// Follow this setup guide to integrate the Deno language server with your editor:
|
|
// https://deno.land/manual/getting_started/setup_your_environment
|
|
// This enables autocomplete, go to definition, etc.
|
|
|
|
// Setup type definitions for built-in Supabase Runtime APIs
|
|
import "@supabase/functions-js/edge-runtime.d.ts"
|
|
import { withSupabase } from "@supabase/server"
|
|
|
|
// Logs are visible from 'functions' container inspector
|
|
console.log("Hello from Functions!");
|
|
|
|
// This endpoint uses 'publishable' | 'secret' access, apiKey is required.
|
|
// Use publishable for Client-facing, key-validated endpoints
|
|
// Use secret for Server-to-server, internal calls
|
|
export default {
|
|
fetch: withSupabase({ auth: ["publishable", "secret"] }, async (req, ctx) => {
|
|
// Called by another service with a secret key
|
|
// ctx.supabaseAdmin bypasses RLS — use for privileged operations
|
|
/*
|
|
if (ctx.authMode === "secret") {
|
|
const { user_id } = await req.json();
|
|
const { data } = await ctx.supabaseAdmin.auth.admin.getUserById(user_id);
|
|
|
|
return Response.json({
|
|
email: data?.user?.email,
|
|
});
|
|
}
|
|
*/
|
|
|
|
return Response.json({ message: "Hello from Edge Functions!" });
|
|
}),
|
|
};
|
|
|
|
// To invoke:
|
|
// curl 'http://localhost:<API_GW_HTTP_PORT>/functions/v1/hello' \
|
|
// --header 'apiKey: <sb_publishable/sb_secret key>'
|
|
|