diff --git a/src/app/routes/api/events.$.ts b/src/app/routes/api/events.$.ts index 30fb9c6..8f2034f 100644 --- a/src/app/routes/api/events.$.ts +++ b/src/app/routes/api/events.$.ts @@ -47,14 +47,12 @@ export const Route = createFileRoute("/api/events/$")({ "ServerEvents | Closing connection", context?.userAuthId ); - controller.close(); } catch (e) { logger.error("ServerEvents | Error closing controller", e); } }; request.signal?.addEventListener("abort", cleanup); - return cleanup; }, }); diff --git a/src/app/routes/api/files/$collection/$recordId/$file.ts b/src/app/routes/api/files/$collection/$recordId/$file.ts index 76376ef..0d92765 100644 --- a/src/app/routes/api/files/$collection/$recordId/$file.ts +++ b/src/app/routes/api/files/$collection/$recordId/$file.ts @@ -10,7 +10,7 @@ export const Route = createFileRoute( try { const { collection, recordId, file } = params; const pocketbaseUrl = - import.meta.env.POCKETBASE_URL || "http://127.0.0.1:8090"; + process.env.POCKETBASE_URL || "http://127.0.0.1:8090"; const fileUrl = `${pocketbaseUrl}/api/files/${collection}/${recordId}/${file}`; logger.info("File proxy", { diff --git a/src/features/admin/components/admin-page.tsx b/src/features/admin/components/admin-page.tsx index 0adf0a4..bb5eb67 100644 --- a/src/features/admin/components/admin-page.tsx +++ b/src/features/admin/components/admin-page.tsx @@ -19,7 +19,7 @@ const AdminPage = () => { label="Open Pocketbase" Icon={DatabaseIcon} onClick={() => - window.location.replace(import.meta.env.POCKETBASE_URL! + "/_/") + window.location.replace(process.env.POCKETBASE_URL! + "/_/") } /> toServerResult(() => pbAdmin.getFreeAgents(tournamentId)) ); diff --git a/src/hooks/use-server-events.ts b/src/hooks/use-server-events.ts index a1364d2..968a3af 100644 --- a/src/hooks/use-server-events.ts +++ b/src/hooks/use-server-events.ts @@ -37,6 +37,7 @@ export function useServerEvents() { const timeoutRef = useRef(null); useEffect(() => { + if (typeof window === 'undefined') return; if (!user?.id) return; shouldConnectRef.current = true; diff --git a/src/lib/supertokens/server.ts b/src/lib/supertokens/server.ts index dd6856c..6e6531a 100644 --- a/src/lib/supertokens/server.ts +++ b/src/lib/supertokens/server.ts @@ -13,7 +13,7 @@ export const backendConfig = (): TypeInput => { framework: "custom", supertokens: { connectionURI: - import.meta.env.SUPERTOKENS_URI || "https://try.supertokens.io", + process.env.SUPERTOKENS_URI || "https://try.supertokens.io", }, appInfo, recipeList: [ diff --git a/src/lib/twilio/index.ts b/src/lib/twilio/index.ts index 5756aec..c2b91e3 100644 --- a/src/lib/twilio/index.ts +++ b/src/lib/twilio/index.ts @@ -1,8 +1,8 @@ import type { Twilio } from "twilio"; -const accountSid = import.meta.env.TWILIO_ACCOUNT_SID!; -const authToken = import.meta.env.TWILIO_AUTH_TOKEN!; -const serviceSid = import.meta.env.TWILIO_SERVICE_SID!; +const accountSid = process.env.TWILIO_ACCOUNT_SID!; +const authToken = process.env.TWILIO_AUTH_TOKEN!; +const serviceSid = process.env.TWILIO_SERVICE_SID!; let client: Twilio; diff --git a/src/utils/supertokens.ts b/src/utils/supertokens.ts index b61d5bc..f9d3819 100644 --- a/src/utils/supertokens.ts +++ b/src/utils/supertokens.ts @@ -1,6 +1,7 @@ import { createMiddleware, createServerFn, + createServerOnlyFn, } from "@tanstack/react-start"; import { getRequest, setResponseHeader } from "@tanstack/react-start/server"; import { redirect as redirect } from "@tanstack/react-router"; @@ -13,7 +14,23 @@ import { refreshSession } from "supertokens-node/recipe/session"; const logger = new Logger("Middleware"); -export const verifySuperTokensSession = async ( +function createNodeRequest(request: Request) { + const cookies = request.headers.get('cookie') || ''; + + return { + getHeaderValue: (key: string) => { + return request.headers.get(key) || undefined; + }, + getCookieValue: (key: string) => { + const match = cookies.match(new RegExp(`(^| )${key}=([^;]+)`)); + return match ? match[2] : undefined; + }, + getMethod: () => request.method, + getOriginalURL: () => request.url, + }; +} + +const verifySuperTokensSession = async ( request: Request ) => { let session = await getSessionForStart(request, { sessionRequired: false }); @@ -22,14 +39,18 @@ export const verifySuperTokensSession = async ( logger.info("Session needs refresh"); try { - const refreshedSession = await refreshSession(request, { + + const nodeRequest = createNodeRequest(request); + const nodeResponse = { setHeader: (key: string, value: string) => { setResponseHeader(key, value); }, setCookie: (cookie: string) => { setResponseHeader('Set-Cookie', cookie); } - }); + }; + + const refreshedSession = await refreshSession(nodeRequest, nodeResponse); if (refreshedSession) { session = await getSessionForStart(request, { sessionRequired: false }); } @@ -71,7 +92,7 @@ export const verifySuperTokensSession = async ( }; }; -export const getSessionContext = async (request: Request, options?: { isServerFunction?: boolean }) => { +export const getSessionContext = createServerOnlyFn(async (request: Request, options?: { isServerFunction?: boolean }) => { const session = await verifySuperTokensSession(request); if (session.context.session?.tryRefresh) { @@ -100,7 +121,7 @@ export const getSessionContext = async (request: Request, options?: { isServerFu }; return context; -}; +}); export const superTokensRequestMiddleware = createMiddleware({ type: "request",