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 };
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 };