/** * Defines the options for creating a BaseFlow client. */ export interface BaseFlowClientOptions { /** * The URL of the BaseFlow server. */ url: string; /** * The API key for the BaseFlow server. */ apiKey: string; /** * Optional headers to send with every request. */ headers?: Record; /** * Optional fetch implementation to use for requests. */ fetch?: typeof fetch; } /** * Defines the structure of a BaseFlow API response. */ export interface BaseFlowResponse { /** * The data returned by the API. */ data: T | null; /** * The error returned by the API, if any. */ error: BaseFlowError | null; /** * The HTTP status code of the response. */ status: number; /** * The HTTP status text of the response. */ statusText: string; } /** * Defines the structure of a BaseFlow API error. */ export interface BaseFlowError { /** * The error message. */ message: string; /** * The error code. */ code?: string; /** * Additional details about the error. */ details?: any; } /** * Defines the options for a query. */ export interface QueryOptions { /** * The columns to select. */ select?: string; /** * The filter to apply. */ where?: string; /** * The order to sort the results by. */ order?: string; /** * The maximum number of results to return. */ limit?: number; /** * The number of results to skip. */ offset?: number; } /** * Defines the options for an insert operation. */ export interface InsertOptions { /** * The columns to return after the insert. */ returning?: string; /** * The on-conflict clause. */ onConflict?: string; } /** * Defines the options for an update operation. */ export interface UpdateOptions { /** * The columns to return after the update. */ returning?: string; } /** * Defines the options for a delete operation. */ export interface DeleteOptions { /** * The columns to return after the delete. */ returning?: string; } /** * Defines the interface for a query builder. */ export interface QueryBuilder { /** * Starts a select query. * @param columns The columns to select. */ select(columns?: string): PostgrestQueryBuilder; /** * Starts an insert query. * @param data The data to insert. */ insert(data: Partial | Partial[]): PostgrestBuilder; /** * Starts an update query. * @param data The data to update. */ update(data: Partial): PostgrestFilterBuilder; /** * Starts a delete query. */ delete(): PostgrestFilterBuilder; } /** * Defines the base interface for a Postgrest builder, making it a "thenable". */ export interface PostgrestBuilder { /** * Attaches callbacks for the resolution and/or rejection of the Promise. * @param onfulfilled The callback to execute when the Promise is resolved. * @param onrejected The callback to execute when the Promise is rejected. * @returns A Promise for the completion of which ever callback is executed. */ then, TResult2 = never>(onfulfilled?: ((value: BaseFlowResponse) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): Promise; } /** * Defines the interface for a Postgrest filter builder. */ export interface PostgrestFilterBuilder extends PostgrestBuilder { eq(column: keyof T, value: any): PostgrestFilterBuilder; neq(column: keyof T, value: any): PostgrestFilterBuilder; gt(column: keyof T, value: any): PostgrestFilterBuilder; gte(column: keyof T, value: any): PostgrestFilterBuilder; lt(column: keyof T, value: any): PostgrestFilterBuilder; lte(column: keyof T, value: any): PostgrestFilterBuilder; like(column: keyof T, pattern: string): PostgrestFilterBuilder; ilike(column: keyof T, pattern: string): PostgrestFilterBuilder; is(column: keyof T, value: null | boolean): PostgrestFilterBuilder; in(column: keyof T, values: any[]): PostgrestFilterBuilder; contains(column: keyof T, value: any): PostgrestFilterBuilder; containedBy(column: keyof T, value: any): PostgrestFilterBuilder; rangeGt(column: keyof T, value: any): PostgrestFilterBuilder; rangeGte(column: keyof T, value: any): PostgrestFilterBuilder; rangeLt(column: keyof T, value: any): PostgrestFilterBuilder; rangeLte(column: keyof T, value: any): PostgrestFilterBuilder; rangeAdjacent(column: keyof T, value: any): PostgrestFilterBuilder; overlaps(column: keyof T, value: any): PostgrestFilterBuilder; textSearch(column: keyof T, query: string): PostgrestFilterBuilder; match(query: Record): PostgrestFilterBuilder; not(column: keyof T, operator: string, value: any): PostgrestFilterBuilder; or(filters: string): PostgrestFilterBuilder; filter(column: keyof T, operator: string, value: any): PostgrestFilterBuilder; } /** * Defines the interface for a Postgrest query builder. */ export interface PostgrestQueryBuilder extends PostgrestFilterBuilder { order(column: keyof T, options?: { ascending?: boolean; nullsFirst?: boolean; }): PostgrestQueryBuilder; limit(count: number): PostgrestQueryBuilder; range(from: number, to: number): PostgrestQueryBuilder; single(): PostgrestFilterBuilder; maybeSingle(): PostgrestFilterBuilder; } /** * Auth event types */ export type AuthEvent = { type: 'SIGNED_IN'; user: any; } | { type: 'SIGNED_OUT'; } | { type: 'USER_UPDATED'; user: any; } | { type: 'PASSWORD_RECOVERY'; user: any; } | { type: 'TOKEN_REFRESHED'; user: any; }; /** * Auth session interface */ export interface AuthSession { access_token: string; refresh_token?: string; user: any; expires_at?: number; } /** * Auth user interface */ export interface AuthUser { id: string; email: string; name?: string; avatar_url?: string; created_at: string; updated_at: string; last_sign_in?: string; email_confirmed?: boolean; role?: string; user_metadata?: Record; app_metadata?: Record; }