35 lines · 1.5 KB · TypeScript
RawDownload
import * as AtomHttpApi from "effect/unstable/reactivity/AtomHttpApi";import { FetchHttpClient, HttpClient, HttpClientRequest } from "effect/unstable/http";import * as Effect from "effect/Effect"; import { reportApiClientInfrastructureCause } from "@executor-js/react/api/client";import {  getExecutorApiBaseUrl,  getExecutorServerAuthorizationHeader,} from "@executor-js/react/api/server-connection"; import { AdminHttpApi } from "../src/admin/api"; // ---------------------------------------------------------------------------// Self-host admin atom client — the invite-code surface (/api/admin/*).//// Same construction as the shared AccountApiClient (base-url prepend +// same-origin session cookie / optional bearer), but for the app-local admin// HttpApi. Self-host only: cloud has no invite codes.// --------------------------------------------------------------------------- const AdminApiClient = AtomHttpApi.Service<"SelfHostAdminApiClient">()("SelfHostAdminApiClient", {  api: AdminHttpApi,  httpClient: FetchHttpClient.layer,  transformClient: HttpClient.mapRequest((request) => {    let next = HttpClientRequest.prependUrl(request, getExecutorApiBaseUrl());    const authorization = getExecutorServerAuthorizationHeader();    if (authorization) {      next = HttpClientRequest.setHeader(next, "authorization", authorization);    }    return next;  }),  transformResponse: (effect) => Effect.tapCause(effect, reportApiClientInfrastructureCause),}); export { AdminApiClient };