Download src/api/cloud/client.ts from SaylorTwift/openhands: direct link, hf CLI and curl.
- Browser
- Download file 2.22 kB
-
https://huggingface.co/SaylorTwift/openhands/resolve/main/src/api/cloud/client.ts
- Command line
-
hf download hf://SaylorTwift/openhands/src/api/cloud/client.ts
-
curl -L -o client.ts https://huggingface.co/SaylorTwift/openhands/resolve/main/src/api/cloud/client.ts
2.22 kB
| import { CloudClient } from "@openhands/typescript-client/clients"; | |
| import { | |
| getAgentServerBaseUrl, | |
| getAgentServerHeaders, | |
| } from "../agent-server-config"; | |
| import { NoBackendAvailableError } from "../agent-server-client-options"; | |
| import { getActiveBackend } from "../backend-registry/active-store"; | |
| import type { Backend } from "../backend-registry/types"; | |
| function requireCloudBackend(backend?: Backend): Backend { | |
| if (backend) return backend; | |
| const active = getActiveBackend().backend; | |
| if (active.kind !== "cloud") { | |
| throw new Error("Cloud calls require a cloud backend."); | |
| } | |
| return active; | |
| } | |
| /** | |
| * Send `X-Org-Id` so the upstream scopes per-request to the org the user | |
| * selected locally, instead of the user's globally-shared `current_org_id` | |
| * on the cloud backend. Restricted to calls against the active backend: the | |
| * selector also fans out per-backend bookkeeping calls (e.g. | |
| * `getCloudOrganizations(b)`) that would otherwise carry the active | |
| * backend's orgId across an unrelated API key, which the cloud backend | |
| * rejects when api_key_org_id and X-Org-Id disagree. | |
| */ | |
| function activeOrgForBackend(backend: Backend): string | null { | |
| const active = getActiveBackend(); | |
| return active.backend.id === backend.id ? active.orgId : null; | |
| } | |
| export function createCloudClient(backend?: Backend): CloudClient { | |
| const target = requireCloudBackend(backend); | |
| const proxyBaseUrl = getAgentServerBaseUrl(); | |
| const proxyHeaders = proxyBaseUrl ? getAgentServerHeaders() : {}; | |
| return new CloudClient({ | |
| host: target.host, | |
| apiKey: target.apiKey, | |
| orgId: activeOrgForBackend(target), | |
| // Default request timeout in ms, matching the 30s the previous axios | |
| // transport used for direct and proxied calls. Per-request | |
| // `timeoutSeconds` still overrides it for direct calls. | |
| timeout: 30_000, | |
| ...(proxyBaseUrl | |
| ? { | |
| proxy: { | |
| host: proxyBaseUrl, | |
| headers: proxyHeaders, | |
| }, | |
| } | |
| : {}), | |
| }); | |
| } | |
| export function createCloudClientForRuntime(backend?: Backend): CloudClient { | |
| const client = createCloudClient(backend); | |
| if (!client.proxy) { | |
| throw new NoBackendAvailableError(); | |
| } | |
| return client; | |
| } | |