# API Reference Complete reference for every export, organized by entry point. --- ## @supabase/server ### withSupabase ```ts function withSupabase( config: WithSupabaseConfig, handler: (req: Request, ctx: SupabaseContext) => Promise, ): (req: Request) => Promise ``` Wraps a fetch handler with auth, CORS, and client creation. Returns a `(req: Request) => Promise` function suitable for `export default { fetch }`. - Handles `OPTIONS` preflight when CORS is enabled - Verifies credentials per `config.auth` - Returns JSON error response on auth failure - Adds CORS headers to all responses ### createSupabaseContext ```ts function createSupabaseContext( request: Request, options?: WithSupabaseConfig, ): Promise< | { data: SupabaseContext; error: null } | { data: null; error: AuthError } > ``` Creates a `SupabaseContext` from a request. Returns a result tuple. The `cors` option is ignored. Defaults to `auth: 'user'` when `options` is omitted. --- ## @supabase/server/core ### verifyAuth ```ts function verifyAuth( request: Request, options: { auth?: AuthModeWithKey | AuthModeWithKey[] env?: Partial }, ): Promise<{ data: AuthResult; error: null } | { data: null; error: AuthError }> ``` Extracts credentials from a request and verifies them. Convenience wrapper over `extractCredentials` + `verifyCredentials`. ### verifyCredentials ```ts function verifyCredentials( credentials: Credentials, options: { auth?: AuthModeWithKey | AuthModeWithKey[] env?: Partial }, ): Promise<{ data: AuthResult; error: null } | { data: null; error: AuthError }> ``` Verifies pre-extracted credentials against allowed auth modes. Tries each mode in order — first match wins. ### extractCredentials ```ts function extractCredentials(request: Request): Credentials ``` Reads `Authorization: Bearer ` and `apikey` headers from a request. Pure extraction, no validation. Synchronous. ### resolveEnv ```ts function resolveEnv( overrides?: Partial, ): { data: SupabaseEnv; error: null } | { data: null; error: EnvError } ``` Resolves Supabase environment configuration from runtime variables. `SUPABASE_URL` is the only hard requirement. ### createContextClient ```ts function createContextClient( options?: CreateContextClientOptions, ): SupabaseClient ``` Creates a user-scoped Supabase client. RLS applies. **Throws `EnvError`** if URL or publishable key is missing. Configured with: - Publishable key (named or default) as `apikey` header - User's JWT as `Authorization: Bearer` header (when `auth.token` is provided) - `persistSession: false`, `autoRefreshToken: false`, `detectSessionInUrl: false` ### createAdminClient ```ts function createAdminClient( options?: CreateAdminClientOptions, ): SupabaseClient ``` Creates an admin Supabase client that bypasses RLS. **Throws `EnvError`** if URL or secret key is missing. --- ## @supabase/server/adapters/hono ### withSupabase (Hono) ```ts function withSupabase( config?: Omit, ): MiddlewareHandler ``` Hono middleware. Sets `c.var.supabaseContext` on the Hono context. Throws `HTTPException` on auth failure with `cause: AuthError`. Skips if `c.var.supabaseContext` is already set (enables route-level overrides). Defaults to `auth: 'user'` when config is omitted. --- ## @supabase/server/adapters/h3 ### withSupabase (H3) ```ts function withSupabase(config?: Omit): Middleware ``` H3 middleware. Sets `event.context.supabaseContext` on the H3 event. Throws `HTTPError` on auth failure with `cause: AuthError`. Skips if `event.context.supabaseContext` is already set (enables chained middleware). Defaults to `auth: 'user'` when config is omitted. --- ## @supabase/server/adapters/elysia ### withSupabase (Elysia) ```ts function withSupabase(config?: Omit): Elysia ``` Elysia plugin that resolves `supabaseContext` into the request context. Throws an error on auth failure with `cause: AuthError`. Skips if `supabaseContext` is already resolved by a prior plugin. Defaults to `auth: 'user'` when config is omitted. --- ## Types ### AuthMode ```ts type AuthMode = 'none' | 'publishable' | 'secret' | 'user' ``` ### AuthModeWithKey ```ts type AuthModeWithKey = AuthMode | `publishable:${string}` | `secret:${string}` ``` Extended auth mode with named key support. Examples: `'publishable:web'`, `'secret:*'`, `'secret:internal'`. ### Allow / AllowWithKey (deprecated aliases) `Allow` and `AllowWithKey` are kept as deprecated aliases for `AuthMode` and `AuthModeWithKey`. Prefer the `Auth*` names — the legacy ones will be removed in a future major release. ### SupabaseContext\ ```ts interface SupabaseContext { supabase: SupabaseClient supabaseAdmin: SupabaseClient userClaims: UserClaims | null jwtClaims: JWTClaims | null authMode: AuthMode authKeyName?: string } ``` ### WithSupabaseConfig ```ts interface WithSupabaseConfig { auth?: AuthModeWithKey | AuthModeWithKey[] // default: 'user' /** @deprecated use `auth` instead — will be removed in a future major release */ allow?: AuthModeWithKey | AuthModeWithKey[] env?: Partial cors?: boolean | Record // default: true supabaseOptions?: SupabaseClientOptions } ``` ### SupabaseEnv ```ts interface SupabaseEnv { url: string publishableKeys: Record secretKeys: Record jwks: JsonWebKeySet | null } ``` ### Credentials ```ts interface Credentials { token: string | null apikey: string | null } ``` ### AuthResult ```ts interface AuthResult { authMode: AuthMode token: string | null userClaims: UserClaims | null jwtClaims: JWTClaims | null keyName?: string | null } ``` ### JWTClaims ```ts interface JWTClaims { sub: string iss?: string aud?: string | string[] exp?: number iat?: number role?: string email?: string app_metadata?: Record user_metadata?: Record [key: string]: unknown } ``` ### UserClaims ```ts interface UserClaims { id: string role?: string email?: string appMetadata?: Record userMetadata?: Record } ``` ### ClientAuth ```ts interface ClientAuth { token?: string | null keyName?: string | null } ``` ### CreateContextClientOptions ```ts interface CreateContextClientOptions { auth?: ClientAuth env?: Partial supabaseOptions?: SupabaseClientOptions } ``` ### CreateAdminClientOptions ```ts interface CreateAdminClientOptions { auth?: Pick env?: Partial supabaseOptions?: SupabaseClientOptions } ``` ### JsonWebKeySet ```ts interface JsonWebKeySet { keys: JsonWebKey[] } ``` ### Peer Dependencies Some peer dependencies types are available from `@supabase/server/peer/*` export #### supabase-js Only a curated set of types are available to import — It means that may be missing types from the original lib. ```ts import type { SupabaseClient, PostgrestError, AuthError as SupabaseAuthError, // Avoid clashing with this SDK's own `AuthError` class. // ... } from '@supabase/server/peer/supabase-js' ``` --- ## Error Classes ### EnvError ```ts class EnvError extends Error { readonly status: 500 readonly code: string } ``` ### AuthError ```ts class AuthError extends Error { readonly status: number // 401 or 500 readonly code: string } ``` --- ## Error Code Constants | Constant | Value | Class | Meaning | | ----------------------------------- | ----------------------------------- | ----------- | ------------------------------------------------- | | `EnvGenericError` | `'ENV_ERROR'` | `EnvError` | Generic environment error | | `MissingSupabaseURLError` | `'MISSING_SUPABASE_URL'` | `EnvError` | `SUPABASE_URL` not set | | `MissingPublishableKeyError` | `'MISSING_PUBLISHABLE_KEY'` | `EnvError` | Named publishable key not found | | `MissingDefaultPublishableKeyError` | `'MISSING_DEFAULT_PUBLISHABLE_KEY'` | `EnvError` | No default publishable key | | `MissingSecretKeyError` | `'MISSING_SECRET_KEY'` | `EnvError` | Named secret key not found | | `MissingDefaultSecretKeyError` | `'MISSING_DEFAULT_SECRET_KEY'` | `EnvError` | No default secret key | | `AuthGenericError` | `'AUTH_ERROR'` | `AuthError` | Generic auth error | | `InvalidCredentialsError` | `'INVALID_CREDENTIALS'` | `AuthError` | No credential matched, or JWT failed verification | | `CreateSupabaseClientError` | `'CREATE_SUPABASE_CLIENT_ERROR'` | `AuthError` | Client creation failed after auth | --- ## Errors Factory Map ```ts const Errors: { [MissingSupabaseURLError]: () => EnvError [MissingPublishableKeyError]: (name: string) => EnvError [MissingDefaultPublishableKeyError]: () => EnvError [MissingSecretKeyError]: (name: string) => EnvError [MissingDefaultSecretKeyError]: () => EnvError [InvalidCredentialsError]: () => AuthError [CreateSupabaseClientError]: () => AuthError } ``` Keyed by error code constant. Each entry returns a pre-configured error instance.