/** * Browser-TLS-impersonating HTTP client for grok.com. * * Thin re-export over the shared `tlsClientBase.ts` factory * (`createTlsClientModule`). All provider-agnostic logic (sidecar lifecycle, * streaming tail-file, proxy resolution, error classes, Cloudflare challenge * detection) lives in the base module; this file supplies only Grok-specific * config and preserves the original public export surface. */ import { createTlsClientModule, type TlsFetchOptions, type TlsFetchResult, } from "./tlsClientBase.ts"; const DEFAULT_TIMEOUT_MS = Number.parseInt(process.env.OMNIROUTE_GROK_TLS_TIMEOUT_MS || "", 10) || 60_000; const HARD_TIMEOUT_GRACE_MS = Number.parseInt(process.env.OMNIROUTE_GROK_TLS_GRACE_MS || "", 10) || 10_000; export const tlsClientModule = createTlsClientModule({ providerName: "Grok", tlsProfile: "chrome_146", domain: "https://grok.com", tempDirPrefix: "grok-stream-", tailFileVariant: "B1", responseValidation: "cf", exportCloudflareCheck: true, defaultTimeoutMs: DEFAULT_TIMEOUT_MS, hardTimeoutGraceMs: HARD_TIMEOUT_GRACE_MS, }); export const tlsFetchGrok = (url: string, options: TlsFetchOptions = {}): Promise => tlsClientModule.tlsFetch(url, options); export const __setTlsFetchOverrideForTesting = tlsClientModule.__setTlsFetchOverrideForTesting; export { TlsClientHangError, TlsClientUnavailableError } from "./tlsClientBase.ts"; export type { TlsFetchOptions, TlsFetchResult } from "./tlsClientBase.ts"; export { isCloudflareChallenge } from "./tlsClientBase.ts";