managarten/packages/shared-supabase/src/index.ts
Wuesteon 9c47119535 Fix wrong type
import, make auth and chat work
2025-12-04 23:25:25 +01:00

80 lines
1.8 KiB
TypeScript

/**
* Shared Supabase utilities for Manacore monorepo
*
* This package provides a unified Supabase client and common database utilities.
*/
import { createClient } from '@supabase/supabase-js';
import type { SupabaseClient } from '@supabase/supabase-js';
import type { SupabaseConfig } from '@manacore/shared-types';
export { SupabaseClient } from '@supabase/supabase-js';
/**
* Create a Supabase client with the given configuration
*/
export function createSupabaseClient(config: SupabaseConfig): SupabaseClient {
return createClient(config.url, config.anonKey, {
auth: {
persistSession: true,
autoRefreshToken: true,
},
});
}
/**
* Create a Supabase admin client with service role key
*/
export function createSupabaseAdminClient(config: SupabaseConfig): SupabaseClient {
if (!config.serviceRoleKey) {
throw new Error('Service role key is required for admin client');
}
return createClient(config.url, config.serviceRoleKey, {
auth: {
persistSession: false,
autoRefreshToken: false,
},
});
}
/**
* Supabase error type
*/
export interface SupabaseError {
message: string;
code?: string;
details?: string;
hint?: string;
}
/**
* Standardized query result type
*/
export interface QueryResult<T> {
data: T | null;
error: SupabaseError | null;
}
/**
* Common database query helpers
*/
export const dbHelpers = {
/**
* Handle Supabase query result and return standardized response
*/
handleQueryResult<T>(result: { data: T | null; error: SupabaseError | null }): QueryResult<T> {
if (result.error) {
return {
data: null,
error: {
message: result.error.message,
code: result.error.code,
details: result.error.details,
hint: result.error.hint,
},
};
}
return { data: result.data, error: null };
},
};