diff --git a/apps/server/src/api/healthcheck/index.ts b/apps/server/src/api/healthcheck/index.ts index 5359c746b..a517ac197 100644 --- a/apps/server/src/api/healthcheck/index.ts +++ b/apps/server/src/api/healthcheck/index.ts @@ -1,7 +1,6 @@ import { dbPing } from '@buster/database'; import { Hono } from 'hono'; import type { Context } from 'hono'; - interface HealthCheckResult { status: 'healthy' | 'unhealthy' | 'degraded'; timestamp: string; diff --git a/apps/server/src/index.ts b/apps/server/src/index.ts index 39079192b..1ab7f61ee 100644 --- a/apps/server/src/index.ts +++ b/apps/server/src/index.ts @@ -1,6 +1,10 @@ import { Hono } from 'hono'; import { z } from 'zod'; +// Load environment variables from root .env file +import { loadRootEnv } from '@buster/env-utils'; +loadRootEnv(); + // Import custom middleware import { corsMiddleware } from './middleware/cors'; import { loggerMiddleware } from './middleware/logger'; diff --git a/apps/server/src/middleware/auth.ts b/apps/server/src/middleware/auth.ts index a311722a9..2031a8951 100644 --- a/apps/server/src/middleware/auth.ts +++ b/apps/server/src/middleware/auth.ts @@ -2,14 +2,12 @@ import { getUser, getUserOrganizationId } from '@buster/database'; import type { Context, Next } from 'hono'; import { bearerAuth } from 'hono/bearer-auth'; import { isOrganizationAdmin } from '../utils/admin'; -import { createSupabaseClient } from './supabase'; - -const supabase = createSupabaseClient(); +import { getSupabaseClient } from './supabase'; export const requireAuth = bearerAuth({ verifyToken: async (token, c) => { try { - const { data, error } = await supabase.auth.getUser(token); //usually takes about 3 - 7ms + const { data, error } = await getSupabaseClient().auth.getUser(token); //usually takes about 3 - 7ms if (error) { // Log specific auth errors to help with debugging @@ -73,7 +71,7 @@ export async function requireUser(c: Context, next: Next) { } try { - const { data, error } = await supabase.auth.getUser(token); + const { data, error } = await getSupabaseClient().auth.getUser(token); if (error) { console.warn('Token validation failed in requireUser:', { diff --git a/apps/server/src/middleware/supabase.ts b/apps/server/src/middleware/supabase.ts index 96282c7ae..d7258ab82 100644 --- a/apps/server/src/middleware/supabase.ts +++ b/apps/server/src/middleware/supabase.ts @@ -17,3 +17,12 @@ export const createSupabaseClient = () => { return supabase; }; + +let globalSupabase: ReturnType | null = null; + +export const getSupabaseClient = () => { + if (!globalSupabase) { + globalSupabase = createSupabaseClient(); + } + return globalSupabase; +}; diff --git a/apps/trigger/package.json b/apps/trigger/package.json index e00f829cc..480c01f49 100644 --- a/apps/trigger/package.json +++ b/apps/trigger/package.json @@ -30,7 +30,7 @@ "@buster/vitest-config": "workspace:*", "@buster/web-tools": "workspace:*", "@mastra/core": "catalog:", - "@trigger.dev/sdk": "4.0.0-v4-beta.26", + "@trigger.dev/sdk": "4.0.0-v4-beta.27", "ai": "catalog:", "braintrust": "catalog:", "vitest": "catalog:", @@ -38,6 +38,6 @@ "drizzle-orm": "catalog:" }, "devDependencies": { - "@trigger.dev/build": "^4.0.0-v4-beta.26" + "@trigger.dev/build": "4.0.0-v4-beta.27" } -} +} \ No newline at end of file