30 lines
1.1 KiB
TypeScript
30 lines
1.1 KiB
TypeScript
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));
|