From 2cf2494108a084be44c6d48ba51a4d224b39f5c0 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 29 Oct 2024 21:07:23 -0400 Subject: [PATCH] fix #533 --- apps/svelte.dev/src/lib/db/client.js | 16 +++++++++----- apps/svelte.dev/src/lib/db/session.js | 31 +++++++++++++++++---------- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/apps/svelte.dev/src/lib/db/client.js b/apps/svelte.dev/src/lib/db/client.js index 86143c79cf..634e1342d1 100644 --- a/apps/svelte.dev/src/lib/db/client.js +++ b/apps/svelte.dev/src/lib/db/client.js @@ -1,16 +1,22 @@ -import { dev } from '$app/environment'; -import { SUPABASE_URL, SUPABASE_KEY } from '$env/static/private'; +import { building } from '$app/environment'; +import { env } from '$env/dynamic/private'; import { createClient } from '@supabase/supabase-js'; -const client_enabled = !!(!dev || (SUPABASE_URL && SUPABASE_KEY)); +const enabled = !building && env.SUPABASE_URL && env.SUPABASE_KEY; + +if (!enabled) { + console.warn( + `Missing SUPABASE_URL and SUPABASE_KEY environment variables. Loading and saving in the playground is disabled` + ); +} /** * @type {import('@supabase/supabase-js').SupabaseClient} */ // @ts-ignore-line export const client = - client_enabled && - createClient(SUPABASE_URL, SUPABASE_KEY, { + enabled && + createClient(env.SUPABASE_URL, env.SUPABASE_KEY, { global: { fetch }, auth: { persistSession: false } }); diff --git a/apps/svelte.dev/src/lib/db/session.js b/apps/svelte.dev/src/lib/db/session.js index a54068bf53..9b3ff6401c 100644 --- a/apps/svelte.dev/src/lib/db/session.js +++ b/apps/svelte.dev/src/lib/db/session.js @@ -1,6 +1,7 @@ import * as cookie from 'cookie'; import flru from 'flru'; import { client } from './client.js'; +import { error } from '@sveltejs/kit'; /** @typedef {import('./types').User} User */ @@ -13,27 +14,31 @@ const session_cache = flru(1000); * @param {import('./types').GitHubUser} user */ export async function create(user) { - const { data, error } = await client.rpc('login', { + if (!client) { + error(500, 'Database client is not configured'); + } + + const result = await client.rpc('login', { user_github_id: user.github_id, user_github_name: user.github_name, user_github_login: user.github_login, user_github_avatar_url: user.github_avatar_url }); - if (error) { - throw new Error(error.message); + if (result.error) { + throw new Error(result.error.message); } - session_cache.set(data.sessionid, { - id: data.userid, + session_cache.set(result.data.sessionid, { + id: result.data.userid, github_name: user.github_name, github_login: user.github_login, github_avatar_url: user.github_avatar_url }); return { - sessionid: data.sessionid, - expires: new Date(data.expires) + sessionid: result.data.sessionid, + expires: new Date(result.data.expires) }; } @@ -42,7 +47,7 @@ export async function create(user) { * @returns {Promise} */ export async function read(sessionid) { - if (!sessionid) return null; + if (!sessionid || !client) return null; if (!session_cache.get(sessionid)) { session_cache.set( @@ -63,10 +68,14 @@ export async function read(sessionid) { /** @param {string} sessionid */ export async function destroy(sessionid) { - const { error } = await client.rpc('logout', { sessionid }); + if (!client) { + error(500, 'Database client is not configured'); + } + + const result = await client.rpc('logout', { sessionid }); - if (error) { - throw new Error(error.message); + if (result.error) { + throw new Error(result.error.message); } session_cache.set(sessionid, null);