35 lines · 1.3 KB · TypeScript
RawDownload
import * as AtomHttpApi from "effect/unstable/reactivity/AtomHttpApi";import { FetchHttpClient, HttpClient, HttpClientRequest } from "effect/unstable/http";import { addGroup } from "@executor-js/api";import {  getExecutorApiBaseUrl,  getExecutorTenantApiBaseUrl,} from "@executor-js/react/api/server-connection";import { CloudAuthApi } from "../auth/api";import { OrgApi } from "../org/api"; // ---------------------------------------------------------------------------// Cloud API client — core API + cloud auth + org// --------------------------------------------------------------------------- const CloudApi = addGroup(CloudAuthApi).add(OrgApi); const requestPathname = (url: string): string => new URL(url, "http://executor.internal").pathname; const shouldUseTenantApi = (request: HttpClientRequest.HttpClientRequest): boolean => {  const pathname = requestPathname(request.url);  return pathname.startsWith("/org/") || pathname.startsWith("/mcp-sessions/");}; const CloudApiClient = AtomHttpApi.Service<"CloudApiClient">()("CloudApiClient", {  api: CloudApi,  httpClient: FetchHttpClient.layer,  transformClient: HttpClient.mapRequest((request) =>    HttpClientRequest.prependUrl(      request,      shouldUseTenantApi(request) ? getExecutorTenantApiBaseUrl() : getExecutorApiBaseUrl(),    ),  ),}); export { CloudApiClient };