UNPKG

@adventurelabs/scout-core

Version:

Core utilities and helpers for Adventure Labs Scout applications

47 lines (46 loc) 2 kB
"use client"; import { jsx as _jsx } from "react/jsx-runtime"; import { useScoutRefresh } from "../hooks/useScoutRefresh"; import { createContext, useContext, useMemo, useRef } from "react"; import { createBrowserClient } from "@supabase/ssr"; // Create context for the Supabase client const SupabaseContext = createContext(null); const ConnectionStatusContext = createContext(null); // Hook to use the Supabase client export function useSupabase() { const supabase = useContext(SupabaseContext); if (!supabase) { throw new Error("useSupabase must be used within a SupabaseProvider"); } return supabase; } // Hook to use connection status export function useConnectionStatus() { const connectionStatus = useContext(ConnectionStatusContext); if (!connectionStatus) { throw new Error("useConnectionStatus must be used within a ScoutRefreshProvider"); } return connectionStatus; } export function ScoutRefreshProvider({ children }) { // Use refs to store the URL and key to prevent unnecessary recreations const urlRef = useRef(process.env.NEXT_PUBLIC_SUPABASE_URL || ""); const anonKeyRef = useRef(process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY || ""); // Create a single Supabase client instance that only runs once const supabaseClient = useMemo(() => { console.log("[ScoutRefreshProvider] Creating Supabase client"); return createBrowserClient(urlRef.current, anonKeyRef.current); }, []); // Empty dependency array ensures this only runs once useScoutRefresh(); // // Log connection status changes for debugging // if (connectionStatus.lastError) { // console.warn( // "[ScoutRefreshProvider] DB Listener error:", // connectionStatus.lastError // ); // } // if (connectionStatus.isConnected) { // console.log("[ScoutRefreshProvider] ✅ DB Listener connected"); // } return (_jsx(SupabaseContext.Provider, { value: supabaseClient, children: children })); }