import type { Input } from "@effect/platform/UrlParams"; import { FetchHttpClient, HttpClient, HttpClientRequest, Url, UrlParams } from "@effect/platform"; import { Effect, pipe } from "effect"; export const DebugHttpClient = pipe( HttpClient.HttpClient, Effect.andThen(HttpClient.tapRequest(Effect.logDebug)), Effect.andThen(HttpClient.tap(Effect.logDebug)), Effect.andThen(HttpClient.filterStatusOk), HttpClient.withTracerPropagation(false), Effect.provide(FetchHttpClient.layer), ); export const createUrlWithParams = (stringUrl: string) => (params: Input) => Effect.gen(function*() { const url = yield* Url.fromString(stringUrl); const urlParams = UrlParams.fromInput(params); return Url.setUrlParams(url, urlParams); }); export const createGetHttpRequest = (url: URL): HttpClientRequest.HttpClientRequest => pipe( HttpClientRequest.get(url), HttpClientRequest.bearerToken(import.meta.env["VITE_TMDB_API_KEY"]), HttpClientRequest.acceptJson, ); export const executeHttpRequest = (request: HttpClientRequest.HttpClientRequest) => Effect.andThen(DebugHttpClient, client => client.execute(request));