import axios from "axios";
import { Effect, pipe } from "effect";
import { makeCache } from "./http-client.cache";
import type { MakeServiceArgs } from "./http-client.types";
export function makeService({ basePath, cacheKey }: MakeServiceArgs) {
return Effect.gen(function* ($) {
const cache = yield* $(makeCache);
const instance = axios.create({ baseURL: basePath });
instance.interceptors.request.use(async (config) => {
return await Effect.runPromise(
pipe(
cache.get(cacheKey),
Effect.tap(({ accessToken }) => (config.headers.Authorization = `Bearer ${accessToken}`)),
Effect.zipRight(Effect.succeed(config)),
Effect.catchAll(() => Effect.succeed(config)),
),
);
});
return { instance };
});
}
import axios from "axios";
import { Effect, pipe } from "effect";
import { makeCache } from "./http-client.cache";
import type { MakeServiceArgs } from "./http-client.types";
export function makeService({ basePath, cacheKey }: MakeServiceArgs) {
return Effect.gen(function* ($) {
const cache = yield* $(makeCache);
const instance = axios.create({ baseURL: basePath });
instance.interceptors.request.use(async (config) => {
return await Effect.runPromise(
pipe(
cache.get(cacheKey),
Effect.tap(({ accessToken }) => (config.headers.Authorization = `Bearer ${accessToken}`)),
Effect.zipRight(Effect.succeed(config)),
Effect.catchAll(() => Effect.succeed(config)),
),
);
});
return { instance };
});
}