import { BunServices } from "@effect/platform-bun";
import { Layer, ManagedRuntime } from "effect";
import { FetchHttpClient } from "effect/http";
import { makeApiClient, type ApiClient } from "./effect.ts";
import { type SupabaseApiClientOptions, type SupabaseApiConfig } from "./internal/client.ts";
import { makePromiseClient, type PromiseClient } from "./internal/promise-client.ts";
export function createApiClient(
config: SupabaseApiConfig = {},
options?: SupabaseApiClientOptions,
): Promise<PromiseSupabaseApiClient> {
const runtime = ManagedRuntime.make(Layer.mergeAll(BunServices.layer, FetchHttpClient.layer));
return runtime
.runPromise(makeApiClient(config, options))
.then((effectClient) => makePromiseClient(runtime, effectClient))
.catch((error: unknown) => runtime.dispose().then(() => Promise.reject(error)));
}
export type PromiseSupabaseApiClient = PromiseClient<ApiClient>;
export * from "./generated/contracts.ts";