Skip to content

Commit 465206c

Browse files
committed
feat: exposing new api keys to functions
1 parent b4e7e64 commit 465206c

2 files changed

Lines changed: 18 additions & 3 deletions

File tree

internal/functions/serve/serve.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,8 @@ func ServeFunctions(ctx context.Context, envFilePath string, noVerifyJWT *bool,
132132
"SUPABASE_ANON_KEY="+utils.Config.Auth.AnonKey.Value,
133133
"SUPABASE_SERVICE_ROLE_KEY="+utils.Config.Auth.ServiceRoleKey.Value,
134134
"SUPABASE_DB_URL="+dbUrl,
135+
"SUPABASE_INTERNAL_PUBLISHABLE_KEY="+utils.Config.Auth.PublishableKey.Value,
136+
"SUPABASE_INTERNAL_SECRET_KEY="+utils.Config.Auth.SecretKey.Value,
135137
"SUPABASE_INTERNAL_JWT_SECRET="+utils.Config.Auth.JwtSecret.Value,
136138
"SUPABASE_INTERNAL_JWKS="+jwks,
137139
fmt.Sprintf("SUPABASE_INTERNAL_HOST_PORT=%d", utils.Config.Api.Port),

internal/functions/serve/templates/main.ts

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ const SB_SPECIFIC_ERROR_REASON = {
2828

2929
// OS stuff - we don't want to expose these to the functions.
3030
const EXCLUDED_ENVS = ["HOME", "HOSTNAME", "PATH", "PWD"];
31-
3231
const HOST_PORT = Deno.env.get("SUPABASE_INTERNAL_HOST_PORT")!;
3332
const JWT_SECRET = Deno.env.get("SUPABASE_INTERNAL_JWT_SECRET")!;
3433
const JWKS_ENDPOINT = new URL('/auth/v1/.well-known/jwks.json', Deno.env.get("SUPABASE_URL")!)
@@ -37,6 +36,9 @@ const FUNCTIONS_CONFIG_STRING = Deno.env.get(
3736
"SUPABASE_INTERNAL_FUNCTIONS_CONFIG",
3837
)!;
3938

39+
const SUPABASE_PUBLISHABLE_KEY = Deno.env.get('SUPABASE_INTERNAL_PUBLISHABLE_KEY')
40+
const SUPABASE_SECRET_KEY = Deno.env.get('SUPABASE_INTERNAL_SECRET_KEY')
41+
4042
const WALLCLOCK_LIMIT_SEC = parseInt(
4143
Deno.env.get("SUPABASE_INTERNAL_WALLCLOCK_LIMIT_SEC"),
4244
);
@@ -128,7 +130,7 @@ let jwks = (() => {
128130
}
129131
})();
130132

131-
async function isValidJWT(jwksUrl: string, jwt: string): Promise<boolean> {
133+
async function isValidJWT(jwksUrl: URL, jwt: string): Promise<boolean> {
132134
try {
133135
if (!jwks) {
134136
// Loading from remote-url on fly
@@ -146,7 +148,7 @@ async function isValidJWT(jwksUrl: string, jwt: string): Promise<boolean> {
146148
* Applies hybrid JWT verification, using JWK as primary and Legacy Secret as fallback.
147149
* Use only during 'New JWT Keys' migration period, while `JWT_SECRET` is still available.
148150
*/
149-
export async function verifyHybridJWT(jwtSecret: string, jwksUrl: string, jwt: string): Promise<boolean> {
151+
export async function verifyHybridJWT(jwtSecret: string, jwksUrl: URL, jwt: string): Promise<boolean> {
150152
const { alg: jwtAlgorithm } = jose.decodeProtectedHeader(jwt)
151153

152154
if (jwtAlgorithm === 'HS256') {
@@ -223,6 +225,17 @@ Deno.serve({
223225
const workerTimeoutMs = isFinite(WALLCLOCK_LIMIT_SEC) ? WALLCLOCK_LIMIT_SEC * 1000 : 400 * 1000;
224226
const noModuleCache = false;
225227
const envVarsObj = Deno.env.toObject();
228+
if (SUPABASE_PUBLISHABLE_KEY) {
229+
envVarsObj['SUPABASE_PUBLISHABLE_KEYS'] = JSON.stringify({
230+
default: SUPABASE_PUBLISHABLE_KEY
231+
})
232+
}
233+
if (SUPABASE_SECRET_KEY) {
234+
envVarsObj['SUPABASE_SECRET_KEYS'] = JSON.stringify({
235+
default: SUPABASE_SECRET_KEY
236+
})
237+
}
238+
226239
const envVars = Object.entries(envVarsObj)
227240
.filter(([name, _]) =>
228241
!EXCLUDED_ENVS.includes(name) && !name.startsWith("SUPABASE_INTERNAL_")

0 commit comments

Comments
 (0)