@opengeni/xai-subscription 0.1.2 → 0.1.3-canary.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1181,8 +1181,9 @@ async function fetchXaiSubscriptionQuota(input) {
1181
1181
  start: dateOrNull(currentPeriod.start),
1182
1182
  end: dateOrNull(currentPeriod.end)
1183
1183
  } : legacyPeriod(config);
1184
+ const omittedUnifiedZero = config?.isUnifiedBillingUser === true && period?.end !== null && period?.end !== void 0 && !Object.hasOwn(config, "creditUsagePercent") && !Object.hasOwn(config, "credit_usage_percent");
1184
1185
  return {
1185
- usedPercent: directPercent ?? derivedPercent,
1186
+ usedPercent: directPercent ?? derivedPercent ?? (omittedUnifiedZero ? 0 : null),
1186
1187
  period,
1187
1188
  prepaidBalanceCents: cents(config?.prepaidBalance ?? config?.prepaid_balance),
1188
1189
  onDemandCapCents: cents(config?.onDemandCap ?? config?.on_demand_cap),
@@ -1203,6 +1204,7 @@ function cents(value) {
1203
1204
  return typeof candidate === "number" && Number.isSafeInteger(candidate) ? candidate : null;
1204
1205
  }
1205
1206
  function finitePercent(value) {
1207
+ if (value === null || value === void 0 || value === "") return null;
1206
1208
  const candidate = Number(value);
1207
1209
  return Number.isFinite(candidate) ? Math.max(0, Math.min(100, candidate)) : null;
1208
1210
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors.ts","../src/bounded-operation.ts","../src/oauth.ts","../src/request-context.ts","../src/normalize.ts","../src/fetch.ts","../src/proxy.ts","../src/quota.ts","../src/models.ts","../src/images.ts","../src/video.ts"],"sourcesContent":["export type XaiSubscriptionErrorKind =\n | \"invalid_response\"\n | \"not_enabled\"\n | \"authorization_denied\"\n | \"device_code_expired\"\n | \"relogin_required\"\n | \"transient\"\n | \"provider_rejected\"\n | \"timeout\";\n\nexport class XaiSubscriptionError extends Error {\n constructor(\n readonly kind: XaiSubscriptionErrorKind,\n message: string,\n readonly status?: number,\n ) {\n super(message);\n this.name = \"XaiSubscriptionError\";\n }\n}\n\nexport class XaiSubscriptionReloginRequired extends XaiSubscriptionError {\n constructor(message = \"The SuperGrok connection is no longer valid. Reconnect the account.\") {\n super(\"relogin_required\", message);\n this.name = \"XaiSubscriptionReloginRequired\";\n }\n}\n\nexport class XaiSubscriptionTransientError extends XaiSubscriptionError {\n constructor(message: string, status?: number) {\n super(\"transient\", message, status);\n this.name = \"XaiSubscriptionTransientError\";\n }\n}\n\nexport class XaiSubscriptionHostedToolContinuationError extends XaiSubscriptionError {\n readonly code = \"xai_hosted_tool_continuation_stalled\";\n\n constructor() {\n super(\n \"timeout\",\n \"SuperGrok stopped responding after completing a hosted search. The partial response was preserved and was not replayed automatically.\",\n );\n this.name = \"XaiSubscriptionHostedToolContinuationError\";\n }\n}\n\nexport class XaiSubscriptionStreamingTerminalError extends XaiSubscriptionError {\n readonly code: string;\n readonly eventType: string;\n readonly requestId: string | null;\n readonly diagnosticTruncated: boolean;\n readonly headers: Headers;\n\n constructor(input: {\n message: string;\n code: string;\n eventType: string;\n requestId?: string | null;\n status?: number;\n diagnosticTruncated?: boolean;\n headers?: Headers;\n }) {\n super(\"provider_rejected\", input.message, input.status);\n this.name = \"XaiSubscriptionStreamingTerminalError\";\n this.code = input.code;\n this.eventType = input.eventType;\n this.requestId = input.requestId ?? null;\n this.diagnosticTruncated = input.diagnosticTruncated === true;\n this.headers = input.headers ?? new Headers();\n }\n}\n\nexport type XaiSubscriptionStreamingTerminalInfo = {\n message: string;\n code: string;\n eventType: string;\n requestId: string | null;\n status?: number;\n diagnosticTruncated: boolean;\n};\n\nconst XAI_SUBSCRIPTION_RATE_LIMIT_CODES = new Set([\n \"rate_limit_exceeded\",\n \"too_many_requests\",\n \"overloaded_error\",\n \"server_overloaded\",\n \"capacity_exceeded\",\n \"resource_exhausted\",\n]);\n\n// Message fallback is the observed Grok HTTP-200 SSE capacity sentence only.\n// Isolated \"high demand\" / \"overloaded\" / \"rate limit\" text is not enough: a\n// false-positive arms the durable same-turn waiter with no give-up.\nconst XAI_SUBSCRIPTION_RATE_LIMIT_MESSAGE =\n /the model is currently at capacity due to high demand/i;\n\nexport function isXaiSubscriptionRateLimitDiagnostic(input: {\n code?: string | null;\n message?: string | null;\n status?: number | null;\n}): boolean {\n if (input.status === 429) return true;\n const code = (input.code ?? \"\").trim().toLowerCase();\n if (XAI_SUBSCRIPTION_RATE_LIMIT_CODES.has(code)) return true;\n return XAI_SUBSCRIPTION_RATE_LIMIT_MESSAGE.test(input.message ?? \"\");\n}\n\nexport function classifyXaiSubscriptionStreamingTerminalError(\n error: unknown,\n): XaiSubscriptionStreamingTerminalInfo | null {\n let current: unknown = error;\n for (let depth = 0; depth < 8 && current && typeof current === \"object\"; depth += 1) {\n const value = current as Record<string, unknown>;\n if (\n current instanceof XaiSubscriptionStreamingTerminalError ||\n value.name === \"XaiSubscriptionStreamingTerminalError\"\n ) {\n const code = typeof value.code === \"string\" && value.code.length > 0 ? value.code : null;\n const eventType =\n typeof value.eventType === \"string\" && value.eventType.length > 0 ? value.eventType : null;\n const message = typeof value.message === \"string\" ? value.message : \"\";\n if (!code || !eventType || message.length === 0) return null;\n const status = Number(value.status);\n return {\n message,\n code,\n eventType,\n requestId: typeof value.requestId === \"string\" ? value.requestId : null,\n ...(Number.isInteger(status) && status >= 100 && status <= 599 ? { status } : {}),\n diagnosticTruncated: value.diagnosticTruncated === true,\n };\n }\n current = value.cause;\n }\n return null;\n}\n\nexport class XaiSubscriptionStreamIdleTimeoutError extends XaiSubscriptionError {\n readonly code = \"xai_response_stream_idle_timeout\";\n\n constructor(\n readonly requestId: string,\n readonly responseObserved: boolean,\n readonly eventCount: number,\n readonly lastEventType: string | null,\n readonly silenceDurationMs: number,\n ) {\n super(\n \"timeout\",\n \"SuperGrok stopped sending valid response events. The partial response was preserved and was not replayed automatically.\",\n );\n this.name = \"XaiSubscriptionStreamIdleTimeoutError\";\n }\n}\n\nexport type XaiSubscriptionStreamIdleTimeoutInfo = {\n requestId: string | null;\n responseObserved: boolean;\n eventCount: number;\n lastEventType: string | null;\n silenceDurationMs: number;\n};\n\nexport function classifyXaiSubscriptionStreamIdleTimeoutError(\n error: unknown,\n): XaiSubscriptionStreamIdleTimeoutInfo | null {\n let current: unknown = error;\n for (let depth = 0; depth < 8 && current && typeof current === \"object\"; depth += 1) {\n const value = current as Record<string, unknown>;\n if (\n current instanceof XaiSubscriptionStreamIdleTimeoutError ||\n value.code === \"xai_response_stream_idle_timeout\"\n ) {\n return {\n requestId: typeof value.requestId === \"string\" ? value.requestId : null,\n responseObserved: value.responseObserved === true,\n eventCount:\n typeof value.eventCount === \"number\" && Number.isSafeInteger(value.eventCount)\n ? value.eventCount\n : 0,\n lastEventType: typeof value.lastEventType === \"string\" ? value.lastEventType : null,\n silenceDurationMs:\n typeof value.silenceDurationMs === \"number\" && Number.isFinite(value.silenceDurationMs)\n ? Math.max(0, value.silenceDurationMs)\n : 0,\n };\n }\n current = value.cause;\n }\n return null;\n}\n\nexport function isXaiSubscriptionHostedToolContinuationError(error: unknown): boolean {\n let current: unknown = error;\n for (let depth = 0; depth < 6 && current && typeof current === \"object\"; depth += 1) {\n if (current instanceof XaiSubscriptionHostedToolContinuationError) return true;\n if ((current as { code?: unknown }).code === \"xai_hosted_tool_continuation_stalled\") {\n return true;\n }\n current = (current as { cause?: unknown }).cause;\n }\n return false;\n}\n","export type XaiOperationFailureReason = \"network_error\" | \"timeout\";\n\nexport async function runBoundedXaiOperation<T>(\n operation: (signal: AbortSignal) => Promise<T>,\n timeoutMs: number,\n): Promise<{ ok: true; value: T } | { ok: false; reason: XaiOperationFailureReason }> {\n if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {\n throw new Error(\"xAI operation timeout must be positive\");\n }\n const controller = new AbortController();\n let timedOut = false;\n let timeout: ReturnType<typeof setTimeout> | undefined;\n const work = operation(controller.signal).then(\n (value) => ({ ok: true as const, value }),\n () => ({\n ok: false as const,\n reason:\n timedOut || controller.signal.aborted ? (\"timeout\" as const) : (\"network_error\" as const),\n }),\n );\n const deadline = new Promise<{ ok: false; reason: \"timeout\" }>((resolve) => {\n timeout = setTimeout(() => {\n timedOut = true;\n controller.abort();\n resolve({ ok: false, reason: \"timeout\" });\n }, timeoutMs);\n });\n try {\n return await Promise.race([work, deadline]);\n } finally {\n if (timeout) clearTimeout(timeout);\n }\n}\n","import {\n OAUTH_MAX_RESPONSE_BYTES,\n readResponseJsonBounded,\n validateHttpUrl,\n} from \"@opengeni/network\";\n\nimport { runBoundedXaiOperation } from \"./bounded-operation\";\nimport {\n XAI_CLIENT_VERSION,\n XAI_DEVICE_AUTHORIZATION_URL,\n XAI_DEVICE_CODE_GRANT_TYPE,\n XAI_OAUTH_CLIENT_ID,\n XAI_OAUTH_OPERATION_TIMEOUT_MS,\n XAI_OAUTH_SCOPES,\n XAI_TOKEN_URL,\n XAI_USERINFO_URL,\n} from \"./constants\";\nimport {\n XaiSubscriptionError,\n XaiSubscriptionReloginRequired,\n XaiSubscriptionTransientError,\n} from \"./errors\";\n\nexport type XaiFetch = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;\n\nexport type XaiDeviceCode = {\n deviceCode: string;\n userCode: string;\n verificationUri: string;\n verificationUriComplete: string | null;\n expiresInSeconds: number;\n intervalSeconds: number;\n};\n\nexport type XaiOAuthTokens = {\n accessToken: string;\n refreshToken: string;\n idToken: string | null;\n tokenType: string | null;\n scope: string | null;\n expiresInSeconds: number;\n};\n\nexport type XaiDevicePollResult =\n | { status: \"pending\"; intervalSeconds: number }\n | { status: \"slow_down\"; intervalSeconds: number }\n | { status: \"expired\" }\n | { status: \"denied\" }\n | { status: \"authorized\"; tokens: XaiOAuthTokens };\n\nexport type XaiVerifiedIdentity = {\n subject: string;\n email: string | null;\n emailVerified: boolean | null;\n name: string | null;\n};\n\ntype XaiOAuthOptions = {\n fetch?: XaiFetch;\n clientId?: string;\n deviceAuthorizationUrl?: string;\n tokenUrl?: string;\n userinfoUrl?: string;\n timeoutMs?: number;\n};\n\nfunction oauthHeaders(): Headers {\n return new Headers({\n accept: \"application/json\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n \"user-agent\": `opengeni/${XAI_CLIENT_VERSION}`,\n \"x-grok-client-version\": XAI_CLIENT_VERSION,\n \"x-grok-client-surface\": \"headless\",\n });\n}\n\nfunction positiveSeconds(value: unknown, fallback: number): number {\n const number = Number(value);\n return Number.isFinite(number) && number > 0 ? Math.ceil(number) : fallback;\n}\n\nfunction requireNonEmptyString(value: unknown, field: string): string {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new XaiSubscriptionError(\"invalid_response\", `xAI OAuth response is missing ${field}`);\n }\n return value;\n}\n\nfunction nullableString(value: unknown): string | null {\n return typeof value === \"string\" && value.length > 0 ? value : null;\n}\n\nfunction validateUserCode(userCode: string): void {\n if (![...userCode].every((char) => /[A-Za-z0-9-]/.test(char))) {\n throw new XaiSubscriptionError(\"invalid_response\", \"xAI returned an invalid user code\");\n }\n}\n\nfunction validateVerificationUri(uri: string): string {\n try {\n return validateHttpUrl(uri, {\n allowLoopbackHttp: true,\n label: \"xAI device verification\",\n });\n } catch {\n throw new XaiSubscriptionError(\"invalid_response\", \"xAI returned an invalid verification URL\");\n }\n}\n\nasync function boundedFetchJson(\n label: string,\n input: string,\n init: RequestInit,\n options: Pick<XaiOAuthOptions, \"fetch\" | \"timeoutMs\">,\n): Promise<{ response: Response; body: Record<string, unknown> }> {\n const fetchImpl = options.fetch ?? fetch;\n const timeoutMs = options.timeoutMs ?? XAI_OAUTH_OPERATION_TIMEOUT_MS;\n const fetched = await runBoundedXaiOperation(async (signal) => {\n const response = await fetchImpl(input, { ...init, signal });\n const body = await readResponseJsonBounded<Record<string, unknown>>(\n response,\n OAUTH_MAX_RESPONSE_BYTES,\n label,\n { signal },\n );\n return { response, body };\n }, timeoutMs);\n if (!fetched.ok) {\n throw new XaiSubscriptionTransientError(`xAI ${label} ${fetched.reason}`);\n }\n return fetched.value;\n}\n\nexport async function requestXaiDeviceCode(options: XaiOAuthOptions = {}): Promise<XaiDeviceCode> {\n const { response, body } = await boundedFetchJson(\n \"device code request\",\n options.deviceAuthorizationUrl ?? XAI_DEVICE_AUTHORIZATION_URL,\n {\n method: \"POST\",\n headers: oauthHeaders(),\n body: new URLSearchParams({\n client_id: options.clientId ?? XAI_OAUTH_CLIENT_ID,\n scope: XAI_OAUTH_SCOPES.join(\" \"),\n referrer: \"opengeni\",\n }).toString(),\n },\n options,\n );\n if (response.status === 404) {\n throw new XaiSubscriptionError(\n \"not_enabled\",\n \"SuperGrok device-code login is not enabled by xAI\",\n 404,\n );\n }\n if (!response.ok) {\n throw new XaiSubscriptionTransientError(\n `xAI device code request failed (${response.status})`,\n response.status,\n );\n }\n\n const deviceCode = requireNonEmptyString(body.device_code, \"device_code\");\n const userCode = requireNonEmptyString(body.user_code, \"user_code\");\n const verificationUri = validateVerificationUri(\n requireNonEmptyString(body.verification_uri, \"verification_uri\"),\n );\n const verificationUriComplete = nullableString(body.verification_uri_complete);\n validateUserCode(userCode);\n\n return {\n deviceCode,\n userCode,\n verificationUri,\n verificationUriComplete: verificationUriComplete\n ? validateVerificationUri(verificationUriComplete)\n : null,\n expiresInSeconds: positiveSeconds(body.expires_in, 5 * 60),\n intervalSeconds: Math.max(1, positiveSeconds(body.interval, 5)),\n };\n}\n\nexport async function pollXaiDeviceCode(\n input: { deviceCode: string; intervalSeconds: number },\n options: XaiOAuthOptions = {},\n): Promise<XaiDevicePollResult> {\n const { response, body } = await boundedFetchJson(\n \"device token exchange\",\n options.tokenUrl ?? XAI_TOKEN_URL,\n {\n method: \"POST\",\n headers: oauthHeaders(),\n body: new URLSearchParams({\n grant_type: XAI_DEVICE_CODE_GRANT_TYPE,\n client_id: options.clientId ?? XAI_OAUTH_CLIENT_ID,\n device_code: input.deviceCode,\n }).toString(),\n },\n options,\n );\n\n if (response.ok) {\n return { status: \"authorized\", tokens: parseTokenResponse(body, true) };\n }\n const code = nullableString(body.error);\n if (code === \"authorization_pending\") {\n return { status: \"pending\", intervalSeconds: Math.max(1, input.intervalSeconds) };\n }\n if (code === \"slow_down\") {\n return { status: \"slow_down\", intervalSeconds: Math.max(1, input.intervalSeconds) + 5 };\n }\n if (code === \"access_denied\" || code === \"authorization_denied\") {\n return { status: \"denied\" };\n }\n if (code === \"expired_token\") {\n return { status: \"expired\" };\n }\n throw new XaiSubscriptionTransientError(\n `xAI device token exchange failed (${response.status})`,\n response.status,\n );\n}\n\nexport async function refreshXaiToken(\n refreshToken: string,\n options: XaiOAuthOptions = {},\n): Promise<XaiOAuthTokens> {\n const { response, body } = await boundedFetchJson(\n \"token refresh\",\n options.tokenUrl ?? XAI_TOKEN_URL,\n {\n method: \"POST\",\n headers: oauthHeaders(),\n body: new URLSearchParams({\n grant_type: \"refresh_token\",\n refresh_token: refreshToken,\n client_id: options.clientId ?? XAI_OAUTH_CLIENT_ID,\n }).toString(),\n },\n options,\n );\n if (!response.ok) {\n const code = nullableString(body.error);\n if (\n response.status === 401 ||\n code === \"invalid_grant\" ||\n code === \"invalid_token\" ||\n code === \"access_denied\"\n ) {\n throw new XaiSubscriptionReloginRequired();\n }\n throw new XaiSubscriptionTransientError(\n `xAI token refresh failed (${response.status})`,\n response.status,\n );\n }\n const parsed = parseTokenResponse(body, false);\n return {\n ...parsed,\n refreshToken: parsed.refreshToken || refreshToken,\n };\n}\n\nfunction parseTokenResponse(\n body: Record<string, unknown>,\n requireRefresh: boolean,\n): XaiOAuthTokens {\n const accessToken = requireNonEmptyString(body.access_token, \"access_token\");\n const refreshToken = nullableString(body.refresh_token);\n if (requireRefresh && !refreshToken) {\n throw new XaiSubscriptionError(\n \"invalid_response\",\n \"xAI OAuth response is missing refresh_token\",\n );\n }\n return {\n accessToken,\n refreshToken: refreshToken ?? \"\",\n idToken: nullableString(body.id_token),\n tokenType: nullableString(body.token_type),\n scope: nullableString(body.scope),\n expiresInSeconds: positiveSeconds(body.expires_in, 60 * 60),\n };\n}\n\nexport async function fetchXaiVerifiedIdentity(\n accessToken: string,\n options: XaiOAuthOptions = {},\n): Promise<XaiVerifiedIdentity> {\n const headers = new Headers({\n accept: \"application/json\",\n authorization: `Bearer ${accessToken}`,\n \"user-agent\": `opengeni/${XAI_CLIENT_VERSION}`,\n \"x-grok-client-version\": XAI_CLIENT_VERSION,\n });\n const { response, body } = await boundedFetchJson(\n \"userinfo request\",\n options.userinfoUrl ?? XAI_USERINFO_URL,\n { method: \"GET\", headers },\n options,\n );\n if (response.status === 401 || response.status === 403) {\n throw new XaiSubscriptionReloginRequired();\n }\n if (!response.ok) {\n throw new XaiSubscriptionTransientError(\n `xAI userinfo request failed (${response.status})`,\n response.status,\n );\n }\n return {\n subject: requireNonEmptyString(body.sub, \"userinfo sub\"),\n email: nullableString(body.email),\n emailVerified: typeof body.email_verified === \"boolean\" ? body.email_verified : null,\n name: nullableString(body.name),\n };\n}\n\n/**\n * Derive stable account metadata from the token response returned directly by\n * xAI's HTTPS device-token endpoint. The access-token principal identifies the\n * selected user/team/org account when present; ID-token claims provide the\n * human-readable profile metadata. Provider requests still validate the access\n * token before any subscription capability is used.\n */\nexport function xaiIdentityFromDeviceTokens(tokens: XaiOAuthTokens): XaiVerifiedIdentity {\n const accessClaims = decodeXaiJwtPayload(tokens.accessToken);\n const idClaims = tokens.idToken ? decodeXaiJwtPayload(tokens.idToken) : null;\n const subject =\n nullableString(accessClaims?.principal_id) ??\n nullableString(accessClaims?.principalId) ??\n nullableString(idClaims?.sub) ??\n nullableString(accessClaims?.sub);\n if (!subject) {\n throw new XaiSubscriptionError(\n \"invalid_response\",\n \"xAI OAuth token response is missing account identity\",\n );\n }\n const givenName =\n nullableString(idClaims?.given_name) ?? nullableString(accessClaims?.given_name);\n const familyName =\n nullableString(idClaims?.family_name) ?? nullableString(accessClaims?.family_name);\n const combinedName = [givenName, familyName].filter(Boolean).join(\" \") || null;\n const emailVerifiedClaim = idClaims?.email_verified ?? accessClaims?.email_verified;\n return {\n subject,\n email: nullableString(idClaims?.email) ?? nullableString(accessClaims?.email),\n emailVerified: typeof emailVerifiedClaim === \"boolean\" ? emailVerifiedClaim : null,\n name: nullableString(idClaims?.name) ?? nullableString(accessClaims?.name) ?? combinedName,\n };\n}\n\nexport function decodeXaiJwtPayload(jwt: string): Record<string, unknown> | null {\n const payload = jwt.split(\".\")[1];\n if (!payload) return null;\n try {\n return JSON.parse(Buffer.from(payload, \"base64url\").toString(\"utf8\")) as Record<\n string,\n unknown\n >;\n } catch {\n return null;\n }\n}\n\nexport function xaiAccessTokenExpiry(accessToken: string): Date | null {\n const payload = decodeXaiJwtPayload(accessToken);\n return typeof payload?.exp === \"number\" ? new Date(payload.exp * 1_000) : null;\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\n\nexport type XaiSubscriptionTokenSnapshot = {\n accessToken: string;\n userId: string;\n};\n\nexport type XaiHostedSearchOptions = {\n webSearch?: boolean | Record<string, unknown>;\n xSearch?: boolean | Record<string, unknown>;\n};\n\nexport type XaiFinalContextUsage = {\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n};\n\nexport type XaiModelRequestEvent = {\n requestId: string;\n transportAttempt: number;\n phase: \"started\" | \"headers\" | \"first_event\" | \"progress\" | \"completed\" | \"failed\" | \"timed_out\";\n model?: string;\n durationMs: number;\n responseObserved: boolean;\n streamIdleTimeoutMs: number;\n status?: number;\n providerRequestId?: string;\n eventCount: number;\n lastEventType?: string;\n lastProgressDurationMs?: number;\n interEventGapMs?: number;\n silenceDurationMs?: number;\n willRetry?: boolean;\n};\n\nexport type XaiSubscriptionRequestContext = {\n clientVersion: string;\n sessionId: string;\n turnId: string;\n getToken: () => Promise<XaiSubscriptionTokenSnapshot>;\n refresh: () => Promise<XaiSubscriptionTokenSnapshot>;\n resolveModel: (slug: string) => string;\n hostedSearch?: XaiHostedSearchOptions;\n onFinalContextUsage?: (usage: XaiFinalContextUsage) => void;\n nextRequestId?: () => string;\n /** Maximum silence between complete, valid SSE data events. */\n streamIdleTimeoutMs?: number;\n /** @deprecated Use streamIdleTimeoutMs. Retained as a compatibility alias. */\n hostedToolContinuationTimeoutMs?: number;\n /** Synchronous, best-effort diagnostics; never receives bodies, auth, or output. */\n onModelRequestDiagnostic?: (event: XaiModelRequestEvent) => void;\n /** Worker-owned durable lifecycle audit; never receives bodies, auth, or output. */\n onModelRequestEvent?: (event: XaiModelRequestEvent) => Promise<void> | void;\n};\n\nexport const xaiSubscriptionRequestStorage = new AsyncLocalStorage<XaiSubscriptionRequestContext>();\n","import type { XaiHostedSearchOptions } from \"./request-context\";\n\nconst XAI_INTERNAL_MODEL_HANDOFF_PREFIX = \"supergrok/\";\n\nexport function normalizeXaiSubscriptionRequestBody(\n value: unknown,\n resolveModel: (slug: string) => string,\n hostedSearch?: XaiHostedSearchOptions,\n): Record<string, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(\"SuperGrok subscription request body must be a JSON object\");\n }\n const body = { ...(value as Record<string, unknown>) };\n if (typeof body.model !== \"string\") {\n throw new Error(\"SuperGrok subscription request is missing model\");\n }\n const candidate = body.model.startsWith(XAI_INTERNAL_MODEL_HANDOFF_PREFIX)\n ? body.model.slice(XAI_INTERNAL_MODEL_HANDOFF_PREFIX.length)\n : body.model;\n body.model = resolveModel(candidate);\n body.store = false;\n\n const include = Array.isArray(body.include)\n ? body.include.filter((entry): entry is string => typeof entry === \"string\")\n : [];\n if (!include.includes(\"reasoning.encrypted_content\")) {\n include.push(\"reasoning.encrypted_content\");\n }\n body.include = include;\n\n const tools = Array.isArray(body.tools) ? body.tools.map(normalizeXaiSubscriptionTool) : [];\n appendHostedTool(tools, \"web_search\", hostedSearch?.webSearch);\n appendHostedTool(tools, \"x_search\", hostedSearch?.xSearch);\n if (tools.length > 0) body.tools = tools;\n return body;\n}\n\nfunction normalizeXaiSubscriptionTool(tool: unknown): unknown {\n if (!tool || typeof tool !== \"object\" || Array.isArray(tool)) return tool;\n const record = tool as Record<string, unknown>;\n if (record.type !== \"web_search\") return tool;\n // OpenAI's Responses tool factory adds this tuning hint. Grok's CLI proxy\n // supports native web_search but rejects the OpenAI-only argument.\n const { search_context_size: _unsupported, ...supported } = record;\n return supported;\n}\n\nfunction appendHostedTool(\n tools: unknown[],\n type: \"web_search\" | \"x_search\",\n options: boolean | Record<string, unknown> | undefined,\n): void {\n if (!options) return;\n if (\n tools.some(\n (tool) =>\n tool &&\n typeof tool === \"object\" &&\n !Array.isArray(tool) &&\n (tool as Record<string, unknown>).type === type,\n )\n ) {\n return;\n }\n tools.push(normalizeXaiSubscriptionTool(options === true ? { type } : { type, ...options }));\n}\n\nexport function normalizeXaiResponseEventJson(value: unknown): {\n value: unknown;\n finalContextTokens: number | null;\n} {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return { value, finalContextTokens: null };\n }\n const event = value as Record<string, unknown>;\n const response =\n event.response && typeof event.response === \"object\" && !Array.isArray(event.response)\n ? { ...(event.response as Record<string, unknown>) }\n : null;\n if (!response) return { value, finalContextTokens: null };\n\n let changed = false;\n if (Array.isArray(response.tools)) {\n const filtered = response.tools.filter((tool) => isOpenAiSdkResponseTool(tool));\n if (filtered.length !== response.tools.length) {\n response.tools = filtered;\n changed = true;\n }\n }\n\n let finalContextTokens: number | null = null;\n if (event.type === \"response.completed\" || event.type === \"response.incomplete\") {\n const usage =\n response.usage && typeof response.usage === \"object\" && !Array.isArray(response.usage)\n ? { ...(response.usage as Record<string, unknown>) }\n : null;\n const context =\n usage?.context_details &&\n typeof usage.context_details === \"object\" &&\n !Array.isArray(usage.context_details)\n ? (usage.context_details as Record<string, unknown>)\n : null;\n const inputTokens = finiteNonNegativeInteger(context?.input_tokens);\n const outputTokens = finiteNonNegativeInteger(context?.output_tokens);\n if (usage && inputTokens !== null && outputTokens !== null) {\n finalContextTokens = inputTokens + outputTokens;\n usage.total_tokens = finalContextTokens;\n response.usage = usage;\n changed = true;\n }\n }\n return {\n value: changed ? { ...event, response } : value,\n finalContextTokens,\n };\n}\n\nfunction finiteNonNegativeInteger(value: unknown): number | null {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0 ? value : null;\n}\n\n// The OpenAI SDK knows these Responses tool declaration families. x_search is\n// intentionally absent: xAI executes it server-side and echoes it only in the\n// response.tools declaration list, while its output items remain untouched.\nfunction isOpenAiSdkResponseTool(tool: unknown): boolean {\n if (!tool || typeof tool !== \"object\" || Array.isArray(tool)) return false;\n const type = (tool as Record<string, unknown>).type;\n return (\n typeof type === \"string\" &&\n [\n \"function\",\n \"file_search\",\n \"computer_use_preview\",\n \"computer\",\n \"web_search\",\n \"web_search_preview\",\n \"code_interpreter\",\n \"image_generation\",\n \"local_shell\",\n \"shell\",\n \"apply_patch\",\n \"mcp\",\n \"custom\",\n ].includes(type)\n );\n}\n","import { randomUUID } from \"node:crypto\";\n\nimport {\n XAI_CLIENT_MODE,\n XAI_CLIENT_VERSION,\n XAI_RESPONSE_STREAM_IDLE_TIMEOUT_MS,\n XAI_TOKEN_AUTH_HEADER_VALUE,\n} from \"./constants\";\nimport {\n isXaiSubscriptionRateLimitDiagnostic,\n XaiSubscriptionStreamIdleTimeoutError,\n XaiSubscriptionStreamingTerminalError,\n} from \"./errors\";\nimport { normalizeXaiResponseEventJson, normalizeXaiSubscriptionRequestBody } from \"./normalize\";\nimport {\n type XaiFinalContextUsage,\n type XaiModelRequestEvent,\n type XaiSubscriptionRequestContext,\n xaiSubscriptionRequestStorage,\n} from \"./request-context\";\n\nexport type XaiFetchLike = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;\n\nconst REPLAYABLE_REQUEST_BODY_FACTORY = Symbol.for(\"opengeni.replayable-request-body-factory\");\ntype ReplayableRequestInit = RequestInit & {\n [REPLAYABLE_REQUEST_BODY_FACTORY]?: () => ReadableStream<Uint8Array>;\n};\n\nexport const XAI_SUBSCRIPTION_TRANSPORT_ERROR_HEADER =\n \"x-opengeni-xai-subscription-transport-error\";\nexport const XAI_SUBSCRIPTION_REQUEST_BODY_NORMALIZED_HEADER =\n \"x-opengeni-xai-subscription-body-normalized\";\nexport const XAI_SUBSCRIPTION_REQUEST_MODEL_HEADER = \"x-opengeni-xai-subscription-model\";\nexport const XAI_SUBSCRIPTION_REQUEST_ID_HEADER = \"x-opengeni-xai-subscription-request-id\";\n\nconst MAX_ERROR_BODY_BYTES = 64 * 1024;\nconst MAX_STREAM_IDLE_TIMEOUT_MS = 24 * 60 * 60_000;\nconst MAX_TERMINAL_ERROR_FIELD_BYTES = 256;\nconst MAX_TERMINAL_ERROR_MESSAGE_BYTES = 4 * 1024;\nconst TERMINAL_ERROR_TRUNCATION_MARKER = \"… [truncated]\";\nconst NON_RETRYABLE_SSE_ERROR_CODES = new Set([\n \"context_length_exceeded\",\n \"invalid_prompt\",\n \"invalid_request\",\n \"insufficient_quota\",\n \"usage_limit_reached\",\n]);\n\ntype RequestAudit = {\n ctx: XaiSubscriptionRequestContext;\n requestId: string;\n transportAttempt: number;\n model: string;\n startedAt: number;\n streamIdleTimeoutMs: number;\n eventCount: number;\n lastEventType: string | null;\n lastProgressAt: number | null;\n terminal: boolean;\n terminalEventEmitted: boolean;\n};\n\ntype SseProgress = {\n valid: boolean;\n eventType: string | null;\n terminal: \"completed\" | \"failed\" | null;\n payload: Record<string, unknown> | null;\n};\n\nexport function xaiSubscriptionFetch(base: XaiFetchLike): XaiFetchLike {\n return async (input, init) => {\n const context = xaiSubscriptionRequestStorage.getStore();\n if (!context) throw new Error(\"SuperGrok subscription request context is unavailable\");\n\n const originalUrl = input instanceof Request ? input.url : String(input);\n const url = new URL(originalUrl);\n if (!url.pathname.endsWith(\"/responses\")) {\n throw new Error(\"SuperGrok subscription models require the Responses API\");\n }\n const originalHeaders = new Headers(input instanceof Request ? input.headers : undefined);\n if (init?.headers) {\n new Headers(init.headers).forEach((value, key) => originalHeaders.set(key, value));\n }\n const normalized = originalHeaders.get(XAI_SUBSCRIPTION_REQUEST_BODY_NORMALIZED_HEADER) === \"1\";\n const requestId =\n originalHeaders.get(XAI_SUBSCRIPTION_REQUEST_ID_HEADER) ??\n context.nextRequestId?.() ??\n randomUUID();\n const handedOffModel = originalHeaders.get(XAI_SUBSCRIPTION_REQUEST_MODEL_HEADER);\n originalHeaders.delete(XAI_SUBSCRIPTION_REQUEST_BODY_NORMALIZED_HEADER);\n originalHeaders.delete(XAI_SUBSCRIPTION_REQUEST_ID_HEADER);\n originalHeaders.delete(XAI_SUBSCRIPTION_REQUEST_MODEL_HEADER);\n\n const replayableBodyFactory = (init as ReplayableRequestInit | undefined)?.[\n REPLAYABLE_REQUEST_BODY_FACTORY\n ];\n const body = await requestBodyText(input, init, replayableBodyFactory);\n const parsed = body ? (JSON.parse(body) as unknown) : {};\n const normalizedBody = normalized\n ? (parsed as Record<string, unknown>)\n : normalizeXaiSubscriptionRequestBody(parsed, context.resolveModel, context.hostedSearch);\n const model =\n handedOffModel ??\n (typeof normalizedBody.model === \"string\" ? normalizedBody.model : \"grok-4.6\");\n\n const streamIdleTimeoutMs = boundedStreamIdleTimeout(\n context.streamIdleTimeoutMs ?? context.hostedToolContinuationTimeoutMs,\n );\n const send = async (\n refresh: boolean,\n transportAttempt: number,\n ): Promise<{ response: Response; audit: RequestAudit }> => {\n const token = refresh ? await context.refresh() : await context.getToken();\n const headers = new Headers(originalHeaders);\n headers.set(\"authorization\", `Bearer ${token.accessToken}`);\n headers.set(\"content-type\", \"application/json\");\n headers.set(\"accept\", \"text/event-stream\");\n headers.set(\"user-agent\", `opengeni/${context.clientVersion || XAI_CLIENT_VERSION}`);\n headers.set(\"x-grok-client-version\", context.clientVersion || XAI_CLIENT_VERSION);\n headers.set(\"x-grok-client-identifier\", \"opengeni\");\n headers.set(\"x-grok-client-mode\", XAI_CLIENT_MODE);\n headers.set(\"x-authenticateresponse\", \"authenticate-response\");\n headers.set(\"x-xai-token-auth\", XAI_TOKEN_AUTH_HEADER_VALUE);\n headers.set(\"x-userid\", token.userId);\n headers.set(\"x-grok-user-id\", token.userId);\n headers.set(\"x-grok-conv-id\", context.sessionId);\n headers.set(\"x-grok-session-id\", context.sessionId);\n headers.set(\"x-grok-req-id\", requestId);\n headers.set(\"x-grok-agent-id\", context.turnId);\n headers.set(\"x-grok-model-override\", model);\n const audit: RequestAudit = {\n ctx: context,\n requestId,\n transportAttempt,\n model,\n startedAt: performance.now(),\n streamIdleTimeoutMs,\n eventCount: 0,\n lastEventType: null,\n lastProgressAt: null,\n terminal: false,\n terminalEventEmitted: false,\n };\n let response: Response | undefined;\n try {\n await emitRequestEvent(audit, {\n phase: \"started\",\n responseObserved: false,\n });\n response = await base(url, {\n ...init,\n method: init?.method ?? (input instanceof Request ? input.method : \"POST\"),\n headers,\n body: JSON.stringify(normalizedBody),\n });\n await emitRequestEvent(audit, {\n phase: \"headers\",\n responseObserved: true,\n status: response.status,\n ...providerRequestIdFields(response.headers),\n });\n return { response, audit };\n } catch (error) {\n await response?.body?.cancel(error).catch(() => undefined);\n await emitRequestEvent(audit, {\n phase: \"failed\",\n responseObserved: response !== undefined,\n ...(response\n ? {\n status: response.status,\n ...providerRequestIdFields(response.headers),\n }\n : {}),\n }).catch(() => undefined);\n throw error;\n }\n };\n\n let sent = await send(false, 1);\n if (sent.response.status === 401) {\n await sent.response.body?.cancel().catch(() => undefined);\n await emitRequestEvent(sent.audit, {\n phase: \"failed\",\n responseObserved: true,\n status: sent.response.status,\n willRetry: true,\n ...providerRequestIdFields(sent.response.headers),\n });\n sent = await send(true, 2);\n }\n return await normalizeResponse(sent.response, sent.audit, context.onFinalContextUsage);\n };\n}\n\nasync function requestBodyText(\n input: string | URL | Request,\n init: RequestInit | undefined,\n replayableBodyFactory: (() => ReadableStream<Uint8Array>) | undefined,\n): Promise<string> {\n if (typeof init?.body === \"string\") return init.body;\n if (input instanceof Request) return await input.clone().text();\n if (replayableBodyFactory) return await new Response(replayableBodyFactory()).text();\n if (init?.body === undefined || init.body === null) return \"\";\n throw new Error(\"SuperGrok subscription request body must be replayable JSON text\");\n}\n\nasync function normalizeResponse(\n response: Response,\n audit: RequestAudit,\n onFinalContextUsage: ((usage: XaiFinalContextUsage) => void) | undefined,\n): Promise<Response> {\n if (!response.ok) {\n const bytes = new Uint8Array(await response.arrayBuffer());\n const bounded =\n bytes.byteLength > MAX_ERROR_BODY_BYTES ? bytes.slice(0, MAX_ERROR_BODY_BYTES) : bytes;\n const headers = new Headers(response.headers);\n headers.set(XAI_SUBSCRIPTION_TRANSPORT_ERROR_HEADER, \"1\");\n await emitRequestEvent(audit, {\n phase: \"failed\",\n responseObserved: true,\n status: response.status,\n ...providerRequestIdFields(response.headers),\n });\n return new Response(bounded, {\n status: response.status,\n statusText: response.statusText,\n headers,\n });\n }\n if (!response.body) {\n await emitRequestEvent(audit, {\n phase: \"completed\",\n responseObserved: true,\n status: response.status,\n ...providerRequestIdFields(response.headers),\n });\n return response;\n }\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n if (!contentType.includes(\"text/event-stream\")) {\n const value = await response.json();\n const normalized = normalizeXaiResponseEventJson({\n type: \"response.completed\",\n response: value,\n });\n emitContextUsage(normalized.value, normalized.finalContextTokens, onFinalContextUsage);\n const responseValue =\n normalized.value && typeof normalized.value === \"object\" && !Array.isArray(normalized.value)\n ? (normalized.value as Record<string, unknown>).response\n : value;\n await emitRequestEvent(audit, {\n phase: \"completed\",\n responseObserved: true,\n status: response.status,\n ...providerRequestIdFields(response.headers),\n });\n return Response.json(responseValue, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n const encoder = new TextEncoder();\n let pending = \"\";\n let idleTimer: ReturnType<typeof setTimeout> | null = null;\n let controllerRef: ReadableStreamDefaultController<Uint8Array> | null = null;\n let silenceStartedAt = performance.now();\n let streamSettled = false;\n const errorStream = (error: unknown) => {\n if (streamSettled || !controllerRef) return;\n streamSettled = true;\n controllerRef.error(error);\n };\n const closeStream = () => {\n if (streamSettled || !controllerRef) return;\n streamSettled = true;\n controllerRef.close();\n };\n const clearIdleTimer = () => {\n if (idleTimer !== null) clearTimeout(idleTimer);\n idleTimer = null;\n };\n const armIdleTimer = () => {\n clearIdleTimer();\n idleTimer = setTimeout(() => {\n if (audit.terminal || !controllerRef) return;\n audit.terminal = true;\n clearIdleTimer();\n const now = performance.now();\n const silenceDurationMs = Math.max(0, now - silenceStartedAt);\n const error = new XaiSubscriptionStreamIdleTimeoutError(\n audit.requestId,\n audit.eventCount > 0,\n audit.eventCount,\n audit.lastEventType,\n silenceDurationMs,\n );\n void reader.cancel(error).catch(() => undefined);\n void emitRequestEvent(audit, {\n phase: \"timed_out\",\n responseObserved: audit.eventCount > 0,\n status: response.status,\n silenceDurationMs,\n ...providerRequestIdFields(response.headers),\n }).then(\n () => errorStream(error),\n () => errorStream(error),\n );\n }, audit.streamIdleTimeoutMs);\n idleTimer.unref?.();\n };\n const body = new ReadableStream<Uint8Array>({\n start(controller) {\n controllerRef = controller;\n silenceStartedAt = performance.now();\n armIdleTimer();\n },\n async pull(controller) {\n if (audit.terminal) return;\n try {\n // A provider may split one SSE event across several network chunks. A\n // pull that returns without enqueueing anything can leave the pending\n // downstream read parked indefinitely in Bun, so keep reading until we\n // can satisfy it with at least one complete block (or settle the stream).\n while (!audit.terminal) {\n const chunk = await reader.read();\n if (audit.terminal) return;\n pending += decoder.decode(chunk.value, { stream: !chunk.done });\n const parts = pending.split(/\\r?\\n\\r?\\n/);\n pending = parts.pop() ?? \"\";\n if (chunk.done && pending) {\n parts.push(pending);\n pending = \"\";\n }\n let enqueued = false;\n for (const part of parts) {\n const progress = sseProgress(part);\n if (!progress.valid) {\n controller.enqueue(\n encoder.encode(`${normalizeSseEvent(part, onFinalContextUsage)}\\n\\n`),\n );\n enqueued = true;\n continue;\n }\n clearIdleTimer();\n const now = performance.now();\n const interEventGapMs = Math.max(0, now - (audit.lastProgressAt ?? audit.startedAt));\n audit.eventCount = Math.min(Number.MAX_SAFE_INTEGER, audit.eventCount + 1);\n audit.lastEventType = progress.eventType;\n audit.lastProgressAt = now;\n silenceStartedAt = now;\n if (audit.eventCount === 1) {\n await emitRequestEvent(audit, {\n phase: \"first_event\",\n responseObserved: true,\n status: response.status,\n ...providerRequestIdFields(response.headers),\n });\n } else {\n emitDiagnosticEvent(audit, {\n phase: \"progress\",\n responseObserved: true,\n status: response.status,\n interEventGapMs,\n ...providerRequestIdFields(response.headers),\n });\n }\n if (progress.terminal === \"failed\") {\n audit.terminal = true;\n clearIdleTimer();\n await reader.cancel().catch(() => undefined);\n await emitRequestEvent(audit, {\n phase: \"failed\",\n responseObserved: true,\n status: response.status,\n ...providerRequestIdFields(response.headers),\n });\n errorStream(xaiSseTerminalError(response, audit, progress));\n return;\n }\n controller.enqueue(\n encoder.encode(`${normalizeSseEvent(part, onFinalContextUsage)}\\n\\n`),\n );\n enqueued = true;\n if (progress.terminal === \"completed\") {\n audit.terminal = true;\n clearIdleTimer();\n await reader.cancel().catch(() => undefined);\n await emitRequestEvent(audit, {\n phase: \"completed\",\n responseObserved: true,\n status: response.status,\n ...providerRequestIdFields(response.headers),\n });\n closeStream();\n return;\n }\n armIdleTimer();\n }\n if (chunk.done) {\n audit.terminal = true;\n clearIdleTimer();\n await emitRequestEvent(audit, {\n phase: \"failed\",\n responseObserved: true,\n status: response.status,\n ...providerRequestIdFields(response.headers),\n });\n closeStream();\n return;\n }\n if (enqueued) return;\n }\n } catch (error) {\n if (audit.terminal) {\n errorStream(error);\n return;\n }\n audit.terminal = true;\n clearIdleTimer();\n await reader.cancel(error).catch(() => undefined);\n await emitRequestEvent(audit, {\n phase: \"failed\",\n responseObserved: true,\n status: response.status,\n ...providerRequestIdFields(response.headers),\n }).catch(() => undefined);\n errorStream(error);\n }\n },\n async cancel(reason) {\n streamSettled = true;\n if (!audit.terminal) {\n audit.terminal = true;\n clearIdleTimer();\n await emitRequestEvent(audit, {\n phase: \"failed\",\n responseObserved: true,\n status: response.status,\n ...providerRequestIdFields(response.headers),\n }).catch(() => undefined);\n }\n await reader.cancel(reason).catch(() => undefined);\n },\n });\n return new Response(body, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n}\n\nfunction sseProgress(block: string): SseProgress {\n for (const line of block.split(\"\\n\")) {\n if (!line.startsWith(\"data:\")) continue;\n const data = line.slice(5).trim();\n if (!data) continue;\n if (data === \"[DONE]\") {\n return { valid: true, eventType: \"done\", terminal: \"completed\", payload: null };\n }\n try {\n const parsed = JSON.parse(data) as unknown;\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return { valid: false, eventType: null, terminal: null, payload: null };\n }\n const payload = parsed as Record<string, unknown>;\n const rawType = payload.type;\n if (typeof rawType !== \"string\" || !/^[a-z0-9_.-]{1,96}$/i.test(rawType)) {\n return { valid: false, eventType: null, terminal: null, payload: null };\n }\n const type = rawType;\n if (type === \"response.completed\") {\n return { valid: true, eventType: type, terminal: \"completed\", payload };\n }\n if (\n type === \"error\" ||\n type === \"response.incomplete\" ||\n type === \"response.failed\" ||\n type === \"response.error\"\n ) {\n return { valid: true, eventType: type, terminal: \"failed\", payload };\n }\n return { valid: true, eventType: type, terminal: null, payload };\n } catch {\n return { valid: false, eventType: null, terminal: null, payload: null };\n }\n }\n return { valid: false, eventType: null, terminal: null, payload: null };\n}\n\nfunction boundedTerminalErrorField(\n value: unknown,\n maxBytes: number,\n): { value?: string; truncated: boolean } {\n if (typeof value !== \"string\") return { truncated: false };\n const encoder = new TextEncoder();\n const encoded = encoder.encode(value);\n if (encoded.byteLength <= maxBytes) return { value, truncated: false };\n const markerBytes = encoder.encode(TERMINAL_ERROR_TRUNCATION_MARKER).byteLength;\n let prefixEnd = Math.max(0, maxBytes - markerBytes);\n while (prefixEnd > 0 && (encoded[prefixEnd]! & 0xc0) === 0x80) {\n prefixEnd -= 1;\n }\n return {\n value: `${new TextDecoder().decode(encoded.subarray(0, prefixEnd))}${TERMINAL_ERROR_TRUNCATION_MARKER}`,\n truncated: true,\n };\n}\n\nfunction terminalErrorSource(\n payload: Record<string, unknown> | null,\n eventType: string | null,\n): unknown {\n if (!payload) return null;\n if (eventType === \"error\" || eventType === \"response.error\") {\n return payload.error ?? payload;\n }\n const response = payload.response;\n if (response && typeof response === \"object\" && !Array.isArray(response)) {\n const nested = (response as Record<string, unknown>).error;\n if (nested !== undefined && nested !== null) return nested;\n }\n return payload.error ?? payload;\n}\n\nfunction xaiSseTerminalError(\n source: Response,\n audit: RequestAudit,\n progress: SseProgress,\n): XaiSubscriptionStreamingTerminalError {\n const rawError = terminalErrorSource(progress.payload, progress.eventType);\n const record =\n rawError && typeof rawError === \"object\" && !Array.isArray(rawError)\n ? (rawError as Record<string, unknown>)\n : {};\n const eventTypeField = boundedTerminalErrorField(\n progress.eventType,\n MAX_TERMINAL_ERROR_FIELD_BYTES,\n );\n const rawCode =\n record.code ??\n (typeof record.type === \"string\" &&\n record.type !== eventTypeField.value &&\n record.type !== \"error\"\n ? record.type\n : undefined);\n const codeField = boundedTerminalErrorField(rawCode, MAX_TERMINAL_ERROR_FIELD_BYTES);\n const messageField = boundedTerminalErrorField(\n record.message ?? (typeof rawError === \"string\" ? rawError : undefined),\n MAX_TERMINAL_ERROR_MESSAGE_BYTES,\n );\n const eventType = eventTypeField.value ?? \"error\";\n const fallbackCode =\n eventType === \"response.failed\"\n ? \"response_failed\"\n : eventType === \"response.incomplete\"\n ? \"response_incomplete\"\n : \"response_error\";\n const fallbackMessage =\n eventType === \"response.incomplete\"\n ? \"The SuperGrok response was incomplete\"\n : eventType === \"response.failed\"\n ? \"The SuperGrok response failed\"\n : \"The SuperGrok response stream reported an error\";\n const message = messageField.value?.length ? messageField.value : fallbackMessage;\n let code = codeField.value?.length ? codeField.value : fallbackCode;\n const rateLimited =\n !NON_RETRYABLE_SSE_ERROR_CODES.has(code) &&\n isXaiSubscriptionRateLimitDiagnostic({ code, message });\n if (rateLimited && (code === fallbackCode || code === \"response_error\")) {\n code = \"rate_limit_exceeded\";\n }\n const status = rateLimited ? 429 : NON_RETRYABLE_SSE_ERROR_CODES.has(code) ? 400 : 502;\n const headers = new Headers(source.headers);\n headers.set(\"content-type\", \"application/json\");\n headers.set(XAI_SUBSCRIPTION_TRANSPORT_ERROR_HEADER, \"1\");\n headers.set(\"x-should-retry\", \"false\");\n headers.delete(\"content-length\");\n headers.delete(\"content-encoding\");\n return new XaiSubscriptionStreamingTerminalError({\n message,\n code,\n eventType,\n requestId: audit.requestId,\n status,\n diagnosticTruncated: eventTypeField.truncated || codeField.truncated || messageField.truncated,\n headers,\n });\n}\n\nfunction boundedStreamIdleTimeout(value: number | undefined): number {\n const resolved = value ?? XAI_RESPONSE_STREAM_IDLE_TIMEOUT_MS;\n if (!Number.isSafeInteger(resolved) || resolved < 1 || resolved > MAX_STREAM_IDLE_TIMEOUT_MS) {\n throw new RangeError(\"SuperGrok response stream idle timeout is invalid\");\n }\n return resolved;\n}\n\nfunction providerRequestId(headers: Headers): string | undefined {\n return headers.get(\"x-request-id\") ?? headers.get(\"request-id\") ?? undefined;\n}\n\nfunction providerRequestIdFields(headers: Headers): { providerRequestId: string } | object {\n const value = providerRequestId(headers);\n return value ? { providerRequestId: value } : {};\n}\n\nfunction requestEventFor(\n audit: RequestAudit,\n event: Omit<\n XaiModelRequestEvent,\n | \"requestId\"\n | \"transportAttempt\"\n | \"model\"\n | \"durationMs\"\n | \"streamIdleTimeoutMs\"\n | \"eventCount\"\n | \"lastEventType\"\n | \"lastProgressDurationMs\"\n >,\n): XaiModelRequestEvent {\n const now = performance.now();\n return {\n requestId: audit.requestId,\n transportAttempt: audit.transportAttempt,\n model: audit.model,\n durationMs: Math.max(0, now - audit.startedAt),\n streamIdleTimeoutMs: audit.streamIdleTimeoutMs,\n eventCount: audit.eventCount,\n ...(audit.lastEventType ? { lastEventType: audit.lastEventType } : {}),\n ...(audit.lastProgressAt !== null\n ? {\n lastProgressDurationMs: Math.max(0, audit.lastProgressAt - audit.startedAt),\n }\n : {}),\n ...event,\n };\n}\n\nfunction emitDiagnosticEvent(\n audit: RequestAudit,\n event: Parameters<typeof requestEventFor>[1],\n): XaiModelRequestEvent {\n const observed = requestEventFor(audit, event);\n try {\n audit.ctx.onModelRequestDiagnostic?.(observed);\n } catch {\n // Diagnostics are in-memory and must never affect provider transport.\n }\n return observed;\n}\n\nasync function emitRequestEvent(\n audit: RequestAudit,\n event: Parameters<typeof requestEventFor>[1],\n): Promise<void> {\n if (event.phase === \"completed\" || event.phase === \"failed\" || event.phase === \"timed_out\") {\n if (audit.terminalEventEmitted) return;\n audit.terminalEventEmitted = true;\n }\n const observed = emitDiagnosticEvent(audit, event);\n await audit.ctx.onModelRequestEvent?.(observed);\n}\n\nfunction normalizeSseEvent(\n block: string,\n onFinalContextUsage: ((usage: XaiFinalContextUsage) => void) | undefined,\n): string {\n const lines = block.split(\"\\n\");\n return lines\n .map((line) => {\n if (!line.startsWith(\"data:\")) return line;\n const data = line.slice(5).trim();\n if (!data || data === \"[DONE]\") return line;\n try {\n const normalized = normalizeXaiResponseEventJson(JSON.parse(data));\n emitContextUsage(normalized.value, normalized.finalContextTokens, onFinalContextUsage);\n return `data: ${JSON.stringify(normalized.value)}`;\n } catch {\n return line;\n }\n })\n .join(\"\\n\");\n}\n\nfunction emitContextUsage(\n value: unknown,\n finalContextTokens: number | null,\n sink: ((usage: XaiFinalContextUsage) => void) | undefined,\n): void {\n if (finalContextTokens === null || !sink) return;\n const response =\n value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>).response\n : null;\n const usage =\n response && typeof response === \"object\" && !Array.isArray(response)\n ? (response as Record<string, unknown>).usage\n : null;\n const context =\n usage && typeof usage === \"object\" && !Array.isArray(usage)\n ? (usage as Record<string, unknown>).context_details\n : null;\n if (!context || typeof context !== \"object\" || Array.isArray(context)) return;\n const inputTokens = Number((context as Record<string, unknown>).input_tokens);\n const outputTokens = Number((context as Record<string, unknown>).output_tokens);\n if (!Number.isSafeInteger(inputTokens) || !Number.isSafeInteger(outputTokens)) return;\n try {\n sink({ inputTokens, outputTokens, totalTokens: finalContextTokens });\n } catch {\n // Usage observation must never alter model transport.\n }\n}\n\nexport function isXaiSubscriptionTransportError(error: unknown): boolean {\n let current: unknown = error;\n for (let depth = 0; depth < 6 && current && typeof current === \"object\"; depth += 1) {\n if (current instanceof XaiSubscriptionStreamingTerminalError) return true;\n const value = current as Record<string, unknown>;\n const headers = value.headers;\n if (\n headers &&\n typeof headers === \"object\" &&\n typeof (headers as { get?: unknown }).get === \"function\" &&\n (headers as Headers).get(XAI_SUBSCRIPTION_TRANSPORT_ERROR_HEADER) === \"1\"\n ) {\n return true;\n }\n current = value.cause;\n }\n return false;\n}\n","import { OAUTH_MAX_RESPONSE_BYTES, pinnedFetch, readResponseJsonBounded } from \"@opengeni/network\";\n\nimport { runBoundedXaiOperation } from \"./bounded-operation\";\nimport {\n XAI_CLIENT_MODE,\n XAI_CLIENT_VERSION,\n XAI_SUBSCRIPTION_PROXY_BASE_URL,\n XAI_TOKEN_AUTH_HEADER_VALUE,\n} from \"./constants\";\nimport { XaiSubscriptionReloginRequired, XaiSubscriptionTransientError } from \"./errors\";\nimport type { XaiFetchLike } from \"./fetch\";\nimport type { XaiSubscriptionTokenSnapshot } from \"./request-context\";\n\nexport type XaiProxyAuthContext = {\n clientVersion?: string;\n getToken: () => Promise<XaiSubscriptionTokenSnapshot>;\n refresh: () => Promise<XaiSubscriptionTokenSnapshot>;\n};\n\nconst defaultProxyFetch: XaiFetchLike = async (input, init) =>\n await pinnedFetch(\n input,\n init,\n { environment: \"production\", integrationsAllowPrivateNetworkTargets: false },\n { label: \"xAI subscription proxy\", requireHttpsOutsideLocalTest: true },\n );\n\nexport async function fetchXaiProxyJson<T>(input: {\n path: string;\n context: XaiProxyAuthContext;\n fetch?: XaiFetchLike;\n timeoutMs?: number;\n maxBytes?: number;\n baseUrl?: string;\n label: string;\n}): Promise<T> {\n const fetchImpl = input.fetch ?? defaultProxyFetch;\n const timeoutMs = input.timeoutMs ?? 15_000;\n const maxBytes = input.maxBytes ?? OAUTH_MAX_RESPONSE_BYTES;\n const url = `${(input.baseUrl ?? XAI_SUBSCRIPTION_PROXY_BASE_URL).replace(/\\/+$/, \"\")}/${input.path.replace(/^\\/+/, \"\")}`;\n const request = async (token: XaiSubscriptionTokenSnapshot, signal: AbortSignal) => {\n const headers = xaiSubscriptionProxyHeaders(token, input.context.clientVersion);\n return await fetchImpl(url, { method: \"GET\", redirect: \"error\", headers, signal });\n };\n const fetched = await runBoundedXaiOperation(async (signal) => {\n let response = await request(await input.context.getToken(), signal);\n if (response.status === 401) {\n await response.body?.cancel().catch(() => undefined);\n response = await request(await input.context.refresh(), signal);\n }\n if (response.status === 401 || response.status === 403) {\n await response.body?.cancel().catch(() => undefined);\n throw new XaiSubscriptionReloginRequired();\n }\n if (!response.ok) {\n await response.body?.cancel().catch(() => undefined);\n throw new XaiSubscriptionTransientError(\n `xAI ${input.label} failed (${response.status})`,\n response.status,\n );\n }\n return await readResponseJsonBounded<T>(response, maxBytes, `xAI ${input.label}`, { signal });\n }, timeoutMs);\n if (!fetched.ok) {\n throw new XaiSubscriptionTransientError(`xAI ${input.label} ${fetched.reason}`);\n }\n return fetched.value;\n}\n\nexport function xaiSubscriptionProxyHeaders(\n token: XaiSubscriptionTokenSnapshot,\n clientVersion = XAI_CLIENT_VERSION,\n): Headers {\n return new Headers({\n accept: \"application/json\",\n authorization: `Bearer ${token.accessToken}`,\n \"user-agent\": `opengeni/${clientVersion}`,\n \"x-grok-client-version\": clientVersion,\n \"x-grok-client-identifier\": \"opengeni\",\n \"x-grok-client-mode\": XAI_CLIENT_MODE,\n \"x-authenticateresponse\": \"authenticate-response\",\n \"x-xai-token-auth\": XAI_TOKEN_AUTH_HEADER_VALUE,\n \"x-userid\": token.userId,\n \"x-grok-user-id\": token.userId,\n });\n}\n","import type { XaiFetchLike } from \"./fetch\";\nimport { fetchXaiProxyJson, type XaiProxyAuthContext } from \"./proxy\";\n\nexport type XaiUsagePeriod = {\n type: string | null;\n start: Date | null;\n end: Date | null;\n};\n\nexport type XaiSubscriptionQuota = {\n usedPercent: number | null;\n period: XaiUsagePeriod | null;\n prepaidBalanceCents: number | null;\n onDemandCapCents: number | null;\n onDemandUsedCents: number | null;\n onDemandEnabled: boolean | null;\n unifiedBilling: boolean | null;\n subscriptionTier: string | null;\n checkedAt: Date;\n};\n\nexport async function fetchXaiSubscriptionQuota(input: {\n context: XaiProxyAuthContext;\n fetch?: XaiFetchLike;\n timeoutMs?: number;\n baseUrl?: string;\n}): Promise<XaiSubscriptionQuota> {\n const body = await fetchXaiProxyJson<Record<string, unknown>>({\n path: \"billing?format=credits\",\n context: input.context,\n ...(input.fetch ? { fetch: input.fetch } : {}),\n ...(input.timeoutMs ? { timeoutMs: input.timeoutMs } : {}),\n ...(input.baseUrl ? { baseUrl: input.baseUrl } : {}),\n label: \"billing request\",\n });\n const config = record(body.config);\n const currentPeriod = record(config?.currentPeriod ?? config?.current_period);\n const monthlyLimit = cents(config?.monthlyLimit ?? config?.monthly_limit);\n const used = cents(config?.used);\n const directPercent = finitePercent(config?.creditUsagePercent ?? config?.credit_usage_percent);\n const derivedPercent =\n monthlyLimit !== null && monthlyLimit > 0 && used !== null\n ? Math.max(0, Math.min(100, (used / monthlyLimit) * 100))\n : null;\n const period = currentPeriod\n ? {\n type: stringOrNull(currentPeriod.type),\n start: dateOrNull(currentPeriod.start),\n end: dateOrNull(currentPeriod.end),\n }\n : legacyPeriod(config);\n return {\n usedPercent: directPercent ?? derivedPercent,\n period,\n prepaidBalanceCents: cents(config?.prepaidBalance ?? config?.prepaid_balance),\n onDemandCapCents: cents(config?.onDemandCap ?? config?.on_demand_cap),\n onDemandUsedCents: cents(config?.onDemandUsed ?? config?.on_demand_used),\n onDemandEnabled: booleanOrNull(body.onDemandEnabled ?? body.on_demand_enabled),\n unifiedBilling: booleanOrNull(config?.isUnifiedBillingUser ?? config?.is_unified_billing_user),\n subscriptionTier: stringOrNull(body.subscriptionTier ?? body.subscription_tier),\n checkedAt: new Date(),\n };\n}\n\nfunction record(value: unknown): Record<string, unknown> | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction cents(value: unknown): number | null {\n if (typeof value === \"number\" && Number.isSafeInteger(value)) return value;\n const object = record(value);\n const candidate = object?.val;\n return typeof candidate === \"number\" && Number.isSafeInteger(candidate) ? candidate : null;\n}\n\nfunction finitePercent(value: unknown): number | null {\n const candidate = Number(value);\n return Number.isFinite(candidate) ? Math.max(0, Math.min(100, candidate)) : null;\n}\n\nfunction stringOrNull(value: unknown): string | null {\n return typeof value === \"string\" && value.length > 0 ? value : null;\n}\n\nfunction booleanOrNull(value: unknown): boolean | null {\n return typeof value === \"boolean\" ? value : null;\n}\n\nfunction dateOrNull(value: unknown): Date | null {\n if (typeof value !== \"string\") return null;\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? null : date;\n}\n\nfunction legacyPeriod(config: Record<string, unknown> | null): XaiUsagePeriod | null {\n const start = dateOrNull(config?.billingPeriodStart ?? config?.billing_period_start);\n const end = dateOrNull(config?.billingPeriodEnd ?? config?.billing_period_end);\n return start || end ? { type: null, start, end } : null;\n}\n","import {\n XAI_SUBSCRIPTION_AUTO_COMPACTION_PERCENT,\n XAI_SUBSCRIPTION_EFFECTIVE_CONTEXT_PERCENT,\n} from \"./constants\";\nimport type { XaiFetchLike } from \"./fetch\";\nimport { fetchXaiProxyJson, type XaiProxyAuthContext } from \"./proxy\";\n\nexport type XaiSubscriptionModelMetadata = {\n slug: string;\n name: string;\n contextWindowTokens: number;\n effectiveContextWindowTokens: number;\n autoCompactTokenLimit: number;\n maxCompletionTokens: number | null;\n apiBackend: \"responses\" | \"chat_completions\" | \"messages\";\n};\n\nexport async function fetchXaiSubscriptionModels(input: {\n context: XaiProxyAuthContext;\n fetch?: XaiFetchLike;\n timeoutMs?: number;\n baseUrl?: string;\n}): Promise<XaiSubscriptionModelMetadata[]> {\n const body = await fetchXaiProxyJson<unknown>({\n path: \"models\",\n context: input.context,\n ...(input.fetch ? { fetch: input.fetch } : {}),\n ...(input.timeoutMs ? { timeoutMs: input.timeoutMs } : {}),\n ...(input.baseUrl ? { baseUrl: input.baseUrl } : {}),\n maxBytes: 4 * 1024 * 1024,\n label: \"model metadata request\",\n });\n const values = Array.isArray(body)\n ? body\n : body && typeof body === \"object\" && Array.isArray((body as Record<string, unknown>).data)\n ? ((body as Record<string, unknown>).data as unknown[])\n : [];\n return values.flatMap((value) => {\n const parsed = parseXaiSubscriptionModelMetadata(value);\n return parsed ? [parsed] : [];\n });\n}\n\nexport function parseXaiSubscriptionModelMetadata(\n value: unknown,\n): XaiSubscriptionModelMetadata | null {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n const object = value as Record<string, unknown>;\n const meta =\n object._meta && typeof object._meta === \"object\" && !Array.isArray(object._meta)\n ? (object._meta as Record<string, unknown>)\n : {};\n const slug = firstString(object.model, object.modelId, object.id, meta.model, meta.modelId);\n const contextWindowTokens = firstPositiveInteger(\n object.contextWindow,\n object.context_window,\n meta.contextWindow,\n meta.totalContextTokens,\n );\n if (!slug || contextWindowTokens === null) return null;\n const effectivePercent =\n firstPositiveInteger(\n object.effectiveContextWindowPercent,\n object.effective_context_window_percent,\n ) ?? XAI_SUBSCRIPTION_EFFECTIVE_CONTEXT_PERCENT;\n const autoCompactPercent =\n firstPositiveInteger(\n object.autoCompactThresholdPercent,\n object.auto_compact_threshold_percent,\n ) ?? XAI_SUBSCRIPTION_AUTO_COMPACTION_PERCENT;\n const backend = firstString(object.apiBackend, object.api_backend);\n return {\n slug,\n name: firstString(object.name) ?? slug,\n contextWindowTokens,\n effectiveContextWindowTokens: Math.floor((contextWindowTokens * effectivePercent) / 100),\n autoCompactTokenLimit: Math.floor((contextWindowTokens * autoCompactPercent) / 100),\n maxCompletionTokens: firstPositiveInteger(\n object.maxCompletionTokens,\n object.max_completion_tokens,\n ),\n apiBackend: backend === \"chat_completions\" || backend === \"messages\" ? backend : \"responses\",\n };\n}\n\nfunction firstString(...values: unknown[]): string | null {\n for (const value of values) {\n if (typeof value === \"string\" && value.length > 0) return value;\n }\n return null;\n}\n\nfunction firstPositiveInteger(...values: unknown[]): number | null {\n for (const value of values) {\n const number = Number(value);\n if (Number.isSafeInteger(number) && number > 0) return number;\n }\n return null;\n}\n","import { pinnedFetch, readJsonBase64Field, readResponseTextBounded } from \"@opengeni/network\";\n\nimport {\n XAI_CLIENT_VERSION,\n XAI_IMAGE_MODEL,\n XAI_IMAGE_REQUEST_TIMEOUT_MS,\n XAI_PUBLIC_API_BASE_URL,\n} from \"./constants\";\nimport { XaiSubscriptionError } from \"./errors\";\nimport type { XaiFetchLike } from \"./fetch\";\nimport type { XaiSubscriptionTokenSnapshot } from \"./request-context\";\n\nconst XAI_IMAGE_RESPONSE_MAX_BYTES = 90 * 1024 * 1024;\nconst XAI_IMAGE_MAX_BYTES = 64 * 1024 * 1024;\nconst XAI_IMAGE_ERROR_MAX_BYTES = 64 * 1024;\n\nexport type XaiImageReference = Readonly<{\n mediaType: \"image/png\" | \"image/jpeg\" | \"image/webp\";\n bytes: Uint8Array;\n}>;\n\nconst defaultImageFetch: XaiFetchLike = async (input, init) =>\n await pinnedFetch(\n input,\n init,\n { environment: \"production\", integrationsAllowPrivateNetworkTargets: false },\n { label: \"xAI image generation\", requireHttpsOutsideLocalTest: true },\n );\n\nexport type XaiGeneratedImage = {\n bytes: Uint8Array;\n declaredMediaType: \"image/png\" | \"image/jpeg\" | \"image/webp\";\n};\n\nexport async function generateXaiSubscriptionImage(input: {\n prompt: string;\n aspectRatio?: string;\n references?: readonly XaiImageReference[];\n sessionId?: string;\n getToken: () => Promise<XaiSubscriptionTokenSnapshot>;\n refresh: () => Promise<XaiSubscriptionTokenSnapshot>;\n abortSignal?: AbortSignal;\n fetch?: XaiFetchLike;\n requestTimeoutMs?: number;\n baseUrl?: string;\n}): Promise<XaiGeneratedImage> {\n const timeoutMs = input.requestTimeoutMs ?? XAI_IMAGE_REQUEST_TIMEOUT_MS;\n const deadline = new AbortController();\n const timer = setTimeout(\n () => deadline.abort(new XaiSubscriptionError(\"timeout\", \"xAI image generation timed out\")),\n timeoutMs,\n );\n const signal = input.abortSignal\n ? AbortSignal.any([input.abortSignal, deadline.signal])\n : deadline.signal;\n const fetchImpl = input.fetch ?? defaultImageFetch;\n const references = input.references ?? [];\n if (references.length > 3) {\n throw new XaiSubscriptionError(\n \"provider_rejected\",\n \"xAI image editing supports at most three references\",\n );\n }\n const url = `${(input.baseUrl ?? XAI_PUBLIC_API_BASE_URL).replace(/\\/+$/, \"\")}/images/${references.length > 0 ? \"edits\" : \"generations\"}`;\n const request = async (token: XaiSubscriptionTokenSnapshot): Promise<Response> =>\n await fetchImpl(url, {\n method: \"POST\",\n redirect: \"error\",\n headers: {\n accept: \"application/json\",\n authorization: `Bearer ${token.accessToken}`,\n \"content-type\": \"application/json\",\n \"user-agent\": `opengeni/${XAI_CLIENT_VERSION}`,\n \"x-grok-client-version\": XAI_CLIENT_VERSION,\n \"x-grok-client-identifier\": \"opengeni\",\n ...(input.sessionId ? { \"x-grok-session-id\": input.sessionId } : {}),\n },\n body: JSON.stringify(\n references.length > 0\n ? {\n model: XAI_IMAGE_MODEL,\n prompt: input.prompt,\n n: 1,\n resolution: \"1k\",\n response_format: \"b64_json\",\n ...(references.length === 1\n ? { image: referencePayload(references[0]!) }\n : {\n images: references.map(referencePayload),\n aspect_ratio: input.aspectRatio ?? \"auto\",\n }),\n }\n : {\n model: XAI_IMAGE_MODEL,\n prompt: input.prompt,\n n: 1,\n aspect_ratio: input.aspectRatio ?? \"auto\",\n resolution: \"1k\",\n response_format: \"b64_json\",\n },\n ),\n signal,\n });\n try {\n let response = await request(await input.getToken());\n if (response.status === 401) {\n await response.body?.cancel().catch(() => undefined);\n response = await request(await input.refresh());\n }\n if (!response.ok) {\n const detail = await readResponseTextBounded(\n response,\n XAI_IMAGE_ERROR_MAX_BYTES,\n \"xAI image generation error\",\n { signal },\n ).catch(() => \"\");\n throw new XaiSubscriptionError(\n \"provider_rejected\",\n `xAI image generation failed (${response.status})${detail ? `: ${boundedMessage(detail)}` : \"\"}`,\n response.status,\n );\n }\n const bytes = await readJsonBase64Field(response, {\n fieldName: \"b64_json\",\n shape: \"string\",\n maxResponseBytes: XAI_IMAGE_RESPONSE_MAX_BYTES,\n maxDecodedBytes: XAI_IMAGE_MAX_BYTES,\n label: \"xAI image generation\",\n signal,\n });\n return { bytes, declaredMediaType: detectImageMediaType(bytes) };\n } finally {\n clearTimeout(timer);\n }\n}\n\nfunction referencePayload(reference: XaiImageReference): { url: string } {\n return {\n url: `data:${reference.mediaType};base64,${Buffer.from(reference.bytes).toString(\"base64\")}`,\n };\n}\n\nfunction detectImageMediaType(bytes: Uint8Array): XaiGeneratedImage[\"declaredMediaType\"] {\n if (\n bytes.byteLength >= 8 &&\n [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a].every((byte, index) => bytes[index] === byte)\n ) {\n return \"image/png\";\n }\n if (bytes.byteLength >= 3 && bytes[0] === 0xff && bytes[1] === 0xd8 && bytes[2] === 0xff) {\n return \"image/jpeg\";\n }\n if (\n bytes.byteLength >= 12 &&\n String.fromCharCode(...bytes.subarray(0, 4)) === \"RIFF\" &&\n String.fromCharCode(...bytes.subarray(8, 12)) === \"WEBP\"\n ) {\n return \"image/webp\";\n }\n throw new XaiSubscriptionError(\"invalid_response\", \"xAI returned an unsupported image format\");\n}\n\nfunction boundedMessage(body: string): string {\n try {\n const value = JSON.parse(body) as Record<string, unknown>;\n const error =\n value.error && typeof value.error === \"object\" && !Array.isArray(value.error)\n ? (value.error as Record<string, unknown>)\n : null;\n const message = error?.message ?? value.message;\n if (typeof message === \"string\") return message.replace(/\\s+/g, \" \").trim().slice(0, 1_000);\n } catch {\n // Preserve only a bounded normalized provider diagnostic.\n }\n return body.replace(/\\s+/g, \" \").trim().slice(0, 1_000);\n}\n","import {\n pinnedFetch,\n readResponseBodyBounded,\n readResponseJsonBounded,\n readResponseTextBounded,\n validateHttpUrl,\n} from \"@opengeni/network\";\n\nimport {\n XAI_PUBLIC_API_BASE_URL,\n XAI_CLIENT_MODE,\n XAI_CLIENT_VERSION,\n XAI_VIDEO_DOWNLOAD_TIMEOUT_MS,\n XAI_VIDEO_GENERATION_TIMEOUT_MS,\n XAI_VIDEO_MODEL,\n XAI_VIDEO_POLL_INTERVAL_MS,\n XAI_VIDEO_POLL_REQUEST_TIMEOUT_MS,\n XAI_VIDEO_START_TIMEOUT_MS,\n} from \"./constants\";\nimport { XaiSubscriptionError } from \"./errors\";\nimport type { XaiFetchLike } from \"./fetch\";\nimport type { XaiSubscriptionTokenSnapshot } from \"./request-context\";\n\nconst XAI_VIDEO_MAX_BYTES = 256 * 1024 * 1024;\nconst XAI_VIDEO_ERROR_MAX_BYTES = 64 * 1024;\n\nconst defaultVideoFetch: XaiFetchLike = async (input, init) =>\n await pinnedFetch(\n input,\n init,\n {\n environment: \"production\",\n integrationsAllowPrivateNetworkTargets: false,\n },\n { label: \"xAI video generation\", requireHttpsOutsideLocalTest: true },\n );\n\nexport type XaiGeneratedVideo = {\n bytes: Uint8Array;\n declaredMediaType: \"video/mp4\";\n requestId: string;\n};\n\nexport type XaiVideoStatus =\n | Readonly<{ status: \"pending\" }>\n | Readonly<{ status: \"completed\"; outputUrl: string; mediaType: \"video/mp4\" }>\n | Readonly<{ status: \"error\"; publicReason: string }>;\n\n/** One-shot durable start. The caller owns replay/idempotency policy. */\nexport async function startXaiSubscriptionVideoWithBody(input: {\n body: Record<string, unknown>;\n getToken: () => Promise<XaiSubscriptionTokenSnapshot>;\n refresh: () => Promise<XaiSubscriptionTokenSnapshot>;\n sessionId?: string;\n signal?: AbortSignal;\n fetch?: XaiFetchLike;\n baseUrl?: string;\n}): Promise<{ providerJobId: string }> {\n const fetchImpl = input.fetch ?? defaultVideoFetch;\n const baseUrl = (input.baseUrl ?? XAI_PUBLIC_API_BASE_URL).replace(/\\/+$/, \"\");\n const request = async (token: XaiSubscriptionTokenSnapshot) =>\n await fetchWithDeadline(\n fetchImpl,\n `${baseUrl}/videos/generations`,\n {\n method: \"POST\",\n redirect: \"error\",\n headers: publicVideoHeaders(token, input.sessionId, true),\n body: JSON.stringify(input.body),\n ...(input.signal ? { signal: input.signal } : {}),\n },\n XAI_VIDEO_START_TIMEOUT_MS,\n input.signal ?? AbortSignal.timeout(XAI_VIDEO_START_TIMEOUT_MS),\n );\n let response = await request(await input.getToken());\n if (response.status === 401) {\n await response.body?.cancel().catch(() => undefined);\n response = await request(await input.refresh());\n }\n if (!response.ok)\n throw await providerError(\"start\", response, input.signal ?? new AbortController().signal);\n const body = await readResponseJsonBounded<Record<string, unknown>>(\n response,\n 1024 * 1024,\n \"xAI video start\",\n input.signal ? { signal: input.signal } : {},\n );\n if (typeof body.request_id !== \"string\" || !body.request_id.trim()) {\n throw new XaiSubscriptionError(\"invalid_response\", \"xAI video start response is malformed\");\n }\n return { providerJobId: body.request_id };\n}\n\nexport async function getXaiSubscriptionVideoStatus(input: {\n providerJobId: string;\n getToken: () => Promise<XaiSubscriptionTokenSnapshot>;\n refresh: () => Promise<XaiSubscriptionTokenSnapshot>;\n sessionId?: string;\n signal?: AbortSignal;\n fetch?: XaiFetchLike;\n baseUrl?: string;\n}): Promise<XaiVideoStatus> {\n if (!input.providerJobId.trim() || input.providerJobId.length > 1024) {\n throw new Error(\"xAI video job identity is invalid\");\n }\n const fetchImpl = input.fetch ?? defaultVideoFetch;\n const baseUrl = (input.baseUrl ?? XAI_PUBLIC_API_BASE_URL).replace(/\\/+$/, \"\");\n const request = async (token: XaiSubscriptionTokenSnapshot) =>\n await fetchWithDeadline(\n fetchImpl,\n `${baseUrl}/videos/${encodeURIComponent(input.providerJobId)}`,\n {\n method: \"GET\",\n redirect: \"error\",\n headers: publicVideoHeaders(token, input.sessionId, false),\n ...(input.signal ? { signal: input.signal } : {}),\n },\n XAI_VIDEO_POLL_REQUEST_TIMEOUT_MS,\n input.signal ?? AbortSignal.timeout(XAI_VIDEO_POLL_REQUEST_TIMEOUT_MS),\n );\n let response = await request(await input.getToken());\n if (response.status === 401) {\n await response.body?.cancel().catch(() => undefined);\n response = await request(await input.refresh());\n }\n if (!response.ok && response.status !== 202) {\n throw await providerError(\"poll\", response, input.signal ?? new AbortController().signal);\n }\n const body = await readResponseJsonBounded<Record<string, unknown>>(\n response,\n 1024 * 1024,\n \"xAI video poll\",\n input.signal ? { signal: input.signal } : {},\n );\n if (body.status === \"pending\" || body.status === \"queued\" || body.status === \"running\") {\n return { status: \"pending\" };\n }\n if (body.status === \"failed\" || body.status === \"expired\") {\n return {\n status: \"error\",\n publicReason: `xAI video generation ${body.status}`,\n };\n }\n const video =\n body.video && typeof body.video === \"object\" && !Array.isArray(body.video)\n ? (body.video as Record<string, unknown>)\n : null;\n if (body.status !== \"done\" || typeof video?.url !== \"string\") {\n throw new XaiSubscriptionError(\"invalid_response\", \"xAI video poll response is malformed\");\n }\n return {\n status: \"completed\",\n outputUrl: validateMediaUrl(video.url),\n mediaType: \"video/mp4\",\n };\n}\n\nfunction publicVideoHeaders(\n token: XaiSubscriptionTokenSnapshot,\n sessionId: string | undefined,\n json: boolean,\n): Headers {\n return new Headers({\n accept: \"application/json\",\n authorization: `Bearer ${token.accessToken}`,\n \"user-agent\": `opengeni/${XAI_CLIENT_VERSION}`,\n \"x-grok-client-version\": XAI_CLIENT_VERSION,\n \"x-grok-client-identifier\": \"opengeni\",\n \"x-grok-client-mode\": XAI_CLIENT_MODE,\n ...(sessionId ? { \"x-grok-session-id\": sessionId } : {}),\n ...(json ? { \"content-type\": \"application/json\" } : {}),\n });\n}\n\nexport async function generateXaiSubscriptionVideo(input: {\n prompt: string;\n durationSeconds?: number;\n aspectRatio?: string;\n resolution?: \"480p\" | \"720p\";\n imageUrl?: string;\n referenceImageUrls?: readonly string[];\n getToken: () => Promise<XaiSubscriptionTokenSnapshot>;\n refresh: () => Promise<XaiSubscriptionTokenSnapshot>;\n abortSignal?: AbortSignal;\n fetch?: XaiFetchLike;\n sleep?: (ms: number, signal: AbortSignal) => Promise<void>;\n baseUrl?: string;\n generationTimeoutMs?: number;\n}): Promise<XaiGeneratedVideo> {\n const baseUrl = (input.baseUrl ?? XAI_PUBLIC_API_BASE_URL).replace(/\\/+$/, \"\");\n const fetchImpl = input.fetch ?? defaultVideoFetch;\n const deadline = new AbortController();\n const timeoutMs = input.generationTimeoutMs ?? XAI_VIDEO_GENERATION_TIMEOUT_MS;\n const timer = setTimeout(\n () => deadline.abort(new XaiSubscriptionError(\"timeout\", \"xAI video generation timed out\")),\n timeoutMs,\n );\n const signal = input.abortSignal\n ? AbortSignal.any([input.abortSignal, deadline.signal])\n : deadline.signal;\n const references = (input.referenceImageUrls ?? []).map(validateMediaUrl);\n const image = input.imageUrl ? validateMediaUrl(input.imageUrl) : undefined;\n const request = async (token: XaiSubscriptionTokenSnapshot): Promise<Response> =>\n await fetchWithDeadline(\n fetchImpl,\n `${baseUrl}/videos/generations`,\n {\n method: \"POST\",\n redirect: \"error\",\n headers: {\n accept: \"application/json\",\n authorization: `Bearer ${token.accessToken}`,\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n model: XAI_VIDEO_MODEL,\n prompt: input.prompt,\n ...(image ? { image: { url: image } } : {}),\n ...(references.length > 0\n ? { reference_images: references.map((url) => ({ url })) }\n : {}),\n ...(input.durationSeconds ? { duration: input.durationSeconds } : {}),\n aspect_ratio: input.aspectRatio ?? \"16:9\",\n resolution: input.resolution ?? \"480p\",\n }),\n signal,\n },\n XAI_VIDEO_START_TIMEOUT_MS,\n signal,\n );\n try {\n let start = await request(await input.getToken());\n if (start.status === 401) {\n await start.body?.cancel().catch(() => undefined);\n start = await request(await input.refresh());\n }\n if (!start.ok) throw await providerError(\"start\", start, signal);\n const started = await readResponseJsonBounded<Record<string, unknown>>(\n start,\n 1024 * 1024,\n \"xAI video start\",\n { signal },\n );\n const requestId =\n typeof started.request_id === \"string\" && started.request_id.length > 0\n ? started.request_id\n : null;\n if (!requestId) {\n throw new XaiSubscriptionError(\n \"invalid_response\",\n \"xAI video generation did not return request_id\",\n );\n }\n const sleep = input.sleep ?? abortableSleep;\n for (;;) {\n await sleep(XAI_VIDEO_POLL_INTERVAL_MS, signal);\n let poll = await pollVideo(fetchImpl, baseUrl, requestId, await input.getToken(), signal);\n if (poll.status === 401) {\n await poll.body?.cancel().catch(() => undefined);\n poll = await pollVideo(fetchImpl, baseUrl, requestId, await input.refresh(), signal);\n }\n if (!poll.ok && poll.status !== 202) throw await providerError(\"poll\", poll, signal);\n const status = await readResponseJsonBounded<Record<string, unknown>>(\n poll,\n 1024 * 1024,\n \"xAI video poll\",\n { signal },\n );\n if (status.status === \"failed\" || status.status === \"expired\") {\n throw new XaiSubscriptionError(\n \"provider_rejected\",\n `xAI video generation ${status.status}`,\n );\n }\n if (status.status !== \"done\") continue;\n const video =\n status.video && typeof status.video === \"object\" && !Array.isArray(status.video)\n ? (status.video as Record<string, unknown>)\n : null;\n const downloadUrl = typeof video?.url === \"string\" ? validateMediaUrl(video.url) : null;\n if (!downloadUrl) {\n throw new XaiSubscriptionError(\n \"invalid_response\",\n \"xAI video generation completed without a download URL\",\n );\n }\n const download = await fetchWithDeadline(\n fetchImpl,\n downloadUrl,\n { method: \"GET\", redirect: \"error\", signal },\n XAI_VIDEO_DOWNLOAD_TIMEOUT_MS,\n signal,\n );\n if (!download.ok) throw await providerError(\"download\", download, signal);\n const bytes = await readResponseBodyBounded(\n download,\n XAI_VIDEO_MAX_BYTES,\n \"xAI video download\",\n { signal },\n );\n return { bytes, declaredMediaType: \"video/mp4\", requestId };\n }\n } finally {\n clearTimeout(timer);\n }\n}\n\nasync function pollVideo(\n fetchImpl: XaiFetchLike,\n baseUrl: string,\n requestId: string,\n token: XaiSubscriptionTokenSnapshot,\n signal: AbortSignal,\n): Promise<Response> {\n return await fetchWithDeadline(\n fetchImpl,\n `${baseUrl}/videos/${encodeURIComponent(requestId)}`,\n {\n method: \"GET\",\n redirect: \"error\",\n headers: {\n accept: \"application/json\",\n authorization: `Bearer ${token.accessToken}`,\n },\n signal,\n },\n XAI_VIDEO_POLL_REQUEST_TIMEOUT_MS,\n signal,\n );\n}\n\nasync function fetchWithDeadline(\n fetchImpl: XaiFetchLike,\n url: string,\n init: RequestInit,\n timeoutMs: number,\n outerSignal: AbortSignal,\n): Promise<Response> {\n const timeout = AbortSignal.timeout(timeoutMs);\n return await fetchImpl(url, {\n ...init,\n signal: AbortSignal.any([outerSignal, timeout]),\n });\n}\n\nasync function providerError(\n phase: string,\n response: Response,\n signal: AbortSignal,\n): Promise<XaiSubscriptionError> {\n const detail = await readResponseTextBounded(\n response,\n XAI_VIDEO_ERROR_MAX_BYTES,\n `xAI video ${phase} error`,\n { signal },\n ).catch(() => \"\");\n return new XaiSubscriptionError(\n \"provider_rejected\",\n `xAI video ${phase} failed (${response.status})${detail ? `: ${detail.replace(/\\s+/g, \" \").trim().slice(0, 1_000)}` : \"\"}`,\n response.status,\n );\n}\n\nfunction validateMediaUrl(value: string): string {\n try {\n return validateHttpUrl(value, { label: \"xAI media\" });\n } catch {\n throw new XaiSubscriptionError(\"invalid_response\", \"xAI returned an invalid media URL\");\n }\n}\n\nasync function abortableSleep(ms: number, signal: AbortSignal): Promise<void> {\n if (signal.aborted) throw signal.reason;\n await new Promise<void>((resolve, reject) => {\n const timer = setTimeout(done, ms);\n const onAbort = () => done(signal.reason);\n function done(error?: unknown) {\n clearTimeout(timer);\n signal.removeEventListener(\"abort\", onAbort);\n if (error === undefined) {\n resolve();\n } else {\n reject(error);\n }\n }\n signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n"],"mappings":"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","names":["record","record","OAUTH_MAX_RESPONSE_BYTES","readResponseJsonBounded","OAUTH_MAX_RESPONSE_BYTES","readResponseJsonBounded","pinnedFetch","pinnedFetch","pinnedFetch","readResponseJsonBounded","readResponseTextBounded","validateHttpUrl","pinnedFetch","readResponseJsonBounded","readResponseTextBounded","validateHttpUrl"]}
1
+ {"version":3,"sources":["../src/errors.ts","../src/bounded-operation.ts","../src/oauth.ts","../src/request-context.ts","../src/normalize.ts","../src/fetch.ts","../src/proxy.ts","../src/quota.ts","../src/models.ts","../src/images.ts","../src/video.ts"],"sourcesContent":["export type XaiSubscriptionErrorKind =\n | \"invalid_response\"\n | \"not_enabled\"\n | \"authorization_denied\"\n | \"device_code_expired\"\n | \"relogin_required\"\n | \"transient\"\n | \"provider_rejected\"\n | \"timeout\";\n\nexport class XaiSubscriptionError extends Error {\n constructor(\n readonly kind: XaiSubscriptionErrorKind,\n message: string,\n readonly status?: number,\n ) {\n super(message);\n this.name = \"XaiSubscriptionError\";\n }\n}\n\nexport class XaiSubscriptionReloginRequired extends XaiSubscriptionError {\n constructor(message = \"The SuperGrok connection is no longer valid. Reconnect the account.\") {\n super(\"relogin_required\", message);\n this.name = \"XaiSubscriptionReloginRequired\";\n }\n}\n\nexport class XaiSubscriptionTransientError extends XaiSubscriptionError {\n constructor(message: string, status?: number) {\n super(\"transient\", message, status);\n this.name = \"XaiSubscriptionTransientError\";\n }\n}\n\nexport class XaiSubscriptionHostedToolContinuationError extends XaiSubscriptionError {\n readonly code = \"xai_hosted_tool_continuation_stalled\";\n\n constructor() {\n super(\n \"timeout\",\n \"SuperGrok stopped responding after completing a hosted search. The partial response was preserved and was not replayed automatically.\",\n );\n this.name = \"XaiSubscriptionHostedToolContinuationError\";\n }\n}\n\nexport class XaiSubscriptionStreamingTerminalError extends XaiSubscriptionError {\n readonly code: string;\n readonly eventType: string;\n readonly requestId: string | null;\n readonly diagnosticTruncated: boolean;\n readonly headers: Headers;\n\n constructor(input: {\n message: string;\n code: string;\n eventType: string;\n requestId?: string | null;\n status?: number;\n diagnosticTruncated?: boolean;\n headers?: Headers;\n }) {\n super(\"provider_rejected\", input.message, input.status);\n this.name = \"XaiSubscriptionStreamingTerminalError\";\n this.code = input.code;\n this.eventType = input.eventType;\n this.requestId = input.requestId ?? null;\n this.diagnosticTruncated = input.diagnosticTruncated === true;\n this.headers = input.headers ?? new Headers();\n }\n}\n\nexport type XaiSubscriptionStreamingTerminalInfo = {\n message: string;\n code: string;\n eventType: string;\n requestId: string | null;\n status?: number;\n diagnosticTruncated: boolean;\n};\n\nconst XAI_SUBSCRIPTION_RATE_LIMIT_CODES = new Set([\n \"rate_limit_exceeded\",\n \"too_many_requests\",\n \"overloaded_error\",\n \"server_overloaded\",\n \"capacity_exceeded\",\n \"resource_exhausted\",\n]);\n\n// Message fallback is the observed Grok HTTP-200 SSE capacity sentence only.\n// Isolated \"high demand\" / \"overloaded\" / \"rate limit\" text is not enough: a\n// false-positive arms the durable same-turn waiter with no give-up.\nconst XAI_SUBSCRIPTION_RATE_LIMIT_MESSAGE =\n /the model is currently at capacity due to high demand/i;\n\nexport function isXaiSubscriptionRateLimitDiagnostic(input: {\n code?: string | null;\n message?: string | null;\n status?: number | null;\n}): boolean {\n if (input.status === 429) return true;\n const code = (input.code ?? \"\").trim().toLowerCase();\n if (XAI_SUBSCRIPTION_RATE_LIMIT_CODES.has(code)) return true;\n return XAI_SUBSCRIPTION_RATE_LIMIT_MESSAGE.test(input.message ?? \"\");\n}\n\nexport function classifyXaiSubscriptionStreamingTerminalError(\n error: unknown,\n): XaiSubscriptionStreamingTerminalInfo | null {\n let current: unknown = error;\n for (let depth = 0; depth < 8 && current && typeof current === \"object\"; depth += 1) {\n const value = current as Record<string, unknown>;\n if (\n current instanceof XaiSubscriptionStreamingTerminalError ||\n value.name === \"XaiSubscriptionStreamingTerminalError\"\n ) {\n const code = typeof value.code === \"string\" && value.code.length > 0 ? value.code : null;\n const eventType =\n typeof value.eventType === \"string\" && value.eventType.length > 0 ? value.eventType : null;\n const message = typeof value.message === \"string\" ? value.message : \"\";\n if (!code || !eventType || message.length === 0) return null;\n const status = Number(value.status);\n return {\n message,\n code,\n eventType,\n requestId: typeof value.requestId === \"string\" ? value.requestId : null,\n ...(Number.isInteger(status) && status >= 100 && status <= 599 ? { status } : {}),\n diagnosticTruncated: value.diagnosticTruncated === true,\n };\n }\n current = value.cause;\n }\n return null;\n}\n\nexport class XaiSubscriptionStreamIdleTimeoutError extends XaiSubscriptionError {\n readonly code = \"xai_response_stream_idle_timeout\";\n\n constructor(\n readonly requestId: string,\n readonly responseObserved: boolean,\n readonly eventCount: number,\n readonly lastEventType: string | null,\n readonly silenceDurationMs: number,\n ) {\n super(\n \"timeout\",\n \"SuperGrok stopped sending valid response events. The partial response was preserved and was not replayed automatically.\",\n );\n this.name = \"XaiSubscriptionStreamIdleTimeoutError\";\n }\n}\n\nexport type XaiSubscriptionStreamIdleTimeoutInfo = {\n requestId: string | null;\n responseObserved: boolean;\n eventCount: number;\n lastEventType: string | null;\n silenceDurationMs: number;\n};\n\nexport function classifyXaiSubscriptionStreamIdleTimeoutError(\n error: unknown,\n): XaiSubscriptionStreamIdleTimeoutInfo | null {\n let current: unknown = error;\n for (let depth = 0; depth < 8 && current && typeof current === \"object\"; depth += 1) {\n const value = current as Record<string, unknown>;\n if (\n current instanceof XaiSubscriptionStreamIdleTimeoutError ||\n value.code === \"xai_response_stream_idle_timeout\"\n ) {\n return {\n requestId: typeof value.requestId === \"string\" ? value.requestId : null,\n responseObserved: value.responseObserved === true,\n eventCount:\n typeof value.eventCount === \"number\" && Number.isSafeInteger(value.eventCount)\n ? value.eventCount\n : 0,\n lastEventType: typeof value.lastEventType === \"string\" ? value.lastEventType : null,\n silenceDurationMs:\n typeof value.silenceDurationMs === \"number\" && Number.isFinite(value.silenceDurationMs)\n ? Math.max(0, value.silenceDurationMs)\n : 0,\n };\n }\n current = value.cause;\n }\n return null;\n}\n\nexport function isXaiSubscriptionHostedToolContinuationError(error: unknown): boolean {\n let current: unknown = error;\n for (let depth = 0; depth < 6 && current && typeof current === \"object\"; depth += 1) {\n if (current instanceof XaiSubscriptionHostedToolContinuationError) return true;\n if ((current as { code?: unknown }).code === \"xai_hosted_tool_continuation_stalled\") {\n return true;\n }\n current = (current as { cause?: unknown }).cause;\n }\n return false;\n}\n","export type XaiOperationFailureReason = \"network_error\" | \"timeout\";\n\nexport async function runBoundedXaiOperation<T>(\n operation: (signal: AbortSignal) => Promise<T>,\n timeoutMs: number,\n): Promise<{ ok: true; value: T } | { ok: false; reason: XaiOperationFailureReason }> {\n if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {\n throw new Error(\"xAI operation timeout must be positive\");\n }\n const controller = new AbortController();\n let timedOut = false;\n let timeout: ReturnType<typeof setTimeout> | undefined;\n const work = operation(controller.signal).then(\n (value) => ({ ok: true as const, value }),\n () => ({\n ok: false as const,\n reason:\n timedOut || controller.signal.aborted ? (\"timeout\" as const) : (\"network_error\" as const),\n }),\n );\n const deadline = new Promise<{ ok: false; reason: \"timeout\" }>((resolve) => {\n timeout = setTimeout(() => {\n timedOut = true;\n controller.abort();\n resolve({ ok: false, reason: \"timeout\" });\n }, timeoutMs);\n });\n try {\n return await Promise.race([work, deadline]);\n } finally {\n if (timeout) clearTimeout(timeout);\n }\n}\n","import {\n OAUTH_MAX_RESPONSE_BYTES,\n readResponseJsonBounded,\n validateHttpUrl,\n} from \"@opengeni/network\";\n\nimport { runBoundedXaiOperation } from \"./bounded-operation\";\nimport {\n XAI_CLIENT_VERSION,\n XAI_DEVICE_AUTHORIZATION_URL,\n XAI_DEVICE_CODE_GRANT_TYPE,\n XAI_OAUTH_CLIENT_ID,\n XAI_OAUTH_OPERATION_TIMEOUT_MS,\n XAI_OAUTH_SCOPES,\n XAI_TOKEN_URL,\n XAI_USERINFO_URL,\n} from \"./constants\";\nimport {\n XaiSubscriptionError,\n XaiSubscriptionReloginRequired,\n XaiSubscriptionTransientError,\n} from \"./errors\";\n\nexport type XaiFetch = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;\n\nexport type XaiDeviceCode = {\n deviceCode: string;\n userCode: string;\n verificationUri: string;\n verificationUriComplete: string | null;\n expiresInSeconds: number;\n intervalSeconds: number;\n};\n\nexport type XaiOAuthTokens = {\n accessToken: string;\n refreshToken: string;\n idToken: string | null;\n tokenType: string | null;\n scope: string | null;\n expiresInSeconds: number;\n};\n\nexport type XaiDevicePollResult =\n | { status: \"pending\"; intervalSeconds: number }\n | { status: \"slow_down\"; intervalSeconds: number }\n | { status: \"expired\" }\n | { status: \"denied\" }\n | { status: \"authorized\"; tokens: XaiOAuthTokens };\n\nexport type XaiVerifiedIdentity = {\n subject: string;\n email: string | null;\n emailVerified: boolean | null;\n name: string | null;\n};\n\ntype XaiOAuthOptions = {\n fetch?: XaiFetch;\n clientId?: string;\n deviceAuthorizationUrl?: string;\n tokenUrl?: string;\n userinfoUrl?: string;\n timeoutMs?: number;\n};\n\nfunction oauthHeaders(): Headers {\n return new Headers({\n accept: \"application/json\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n \"user-agent\": `opengeni/${XAI_CLIENT_VERSION}`,\n \"x-grok-client-version\": XAI_CLIENT_VERSION,\n \"x-grok-client-surface\": \"headless\",\n });\n}\n\nfunction positiveSeconds(value: unknown, fallback: number): number {\n const number = Number(value);\n return Number.isFinite(number) && number > 0 ? Math.ceil(number) : fallback;\n}\n\nfunction requireNonEmptyString(value: unknown, field: string): string {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new XaiSubscriptionError(\"invalid_response\", `xAI OAuth response is missing ${field}`);\n }\n return value;\n}\n\nfunction nullableString(value: unknown): string | null {\n return typeof value === \"string\" && value.length > 0 ? value : null;\n}\n\nfunction validateUserCode(userCode: string): void {\n if (![...userCode].every((char) => /[A-Za-z0-9-]/.test(char))) {\n throw new XaiSubscriptionError(\"invalid_response\", \"xAI returned an invalid user code\");\n }\n}\n\nfunction validateVerificationUri(uri: string): string {\n try {\n return validateHttpUrl(uri, {\n allowLoopbackHttp: true,\n label: \"xAI device verification\",\n });\n } catch {\n throw new XaiSubscriptionError(\"invalid_response\", \"xAI returned an invalid verification URL\");\n }\n}\n\nasync function boundedFetchJson(\n label: string,\n input: string,\n init: RequestInit,\n options: Pick<XaiOAuthOptions, \"fetch\" | \"timeoutMs\">,\n): Promise<{ response: Response; body: Record<string, unknown> }> {\n const fetchImpl = options.fetch ?? fetch;\n const timeoutMs = options.timeoutMs ?? XAI_OAUTH_OPERATION_TIMEOUT_MS;\n const fetched = await runBoundedXaiOperation(async (signal) => {\n const response = await fetchImpl(input, { ...init, signal });\n const body = await readResponseJsonBounded<Record<string, unknown>>(\n response,\n OAUTH_MAX_RESPONSE_BYTES,\n label,\n { signal },\n );\n return { response, body };\n }, timeoutMs);\n if (!fetched.ok) {\n throw new XaiSubscriptionTransientError(`xAI ${label} ${fetched.reason}`);\n }\n return fetched.value;\n}\n\nexport async function requestXaiDeviceCode(options: XaiOAuthOptions = {}): Promise<XaiDeviceCode> {\n const { response, body } = await boundedFetchJson(\n \"device code request\",\n options.deviceAuthorizationUrl ?? XAI_DEVICE_AUTHORIZATION_URL,\n {\n method: \"POST\",\n headers: oauthHeaders(),\n body: new URLSearchParams({\n client_id: options.clientId ?? XAI_OAUTH_CLIENT_ID,\n scope: XAI_OAUTH_SCOPES.join(\" \"),\n referrer: \"opengeni\",\n }).toString(),\n },\n options,\n );\n if (response.status === 404) {\n throw new XaiSubscriptionError(\n \"not_enabled\",\n \"SuperGrok device-code login is not enabled by xAI\",\n 404,\n );\n }\n if (!response.ok) {\n throw new XaiSubscriptionTransientError(\n `xAI device code request failed (${response.status})`,\n response.status,\n );\n }\n\n const deviceCode = requireNonEmptyString(body.device_code, \"device_code\");\n const userCode = requireNonEmptyString(body.user_code, \"user_code\");\n const verificationUri = validateVerificationUri(\n requireNonEmptyString(body.verification_uri, \"verification_uri\"),\n );\n const verificationUriComplete = nullableString(body.verification_uri_complete);\n validateUserCode(userCode);\n\n return {\n deviceCode,\n userCode,\n verificationUri,\n verificationUriComplete: verificationUriComplete\n ? validateVerificationUri(verificationUriComplete)\n : null,\n expiresInSeconds: positiveSeconds(body.expires_in, 5 * 60),\n intervalSeconds: Math.max(1, positiveSeconds(body.interval, 5)),\n };\n}\n\nexport async function pollXaiDeviceCode(\n input: { deviceCode: string; intervalSeconds: number },\n options: XaiOAuthOptions = {},\n): Promise<XaiDevicePollResult> {\n const { response, body } = await boundedFetchJson(\n \"device token exchange\",\n options.tokenUrl ?? XAI_TOKEN_URL,\n {\n method: \"POST\",\n headers: oauthHeaders(),\n body: new URLSearchParams({\n grant_type: XAI_DEVICE_CODE_GRANT_TYPE,\n client_id: options.clientId ?? XAI_OAUTH_CLIENT_ID,\n device_code: input.deviceCode,\n }).toString(),\n },\n options,\n );\n\n if (response.ok) {\n return { status: \"authorized\", tokens: parseTokenResponse(body, true) };\n }\n const code = nullableString(body.error);\n if (code === \"authorization_pending\") {\n return { status: \"pending\", intervalSeconds: Math.max(1, input.intervalSeconds) };\n }\n if (code === \"slow_down\") {\n return { status: \"slow_down\", intervalSeconds: Math.max(1, input.intervalSeconds) + 5 };\n }\n if (code === \"access_denied\" || code === \"authorization_denied\") {\n return { status: \"denied\" };\n }\n if (code === \"expired_token\") {\n return { status: \"expired\" };\n }\n throw new XaiSubscriptionTransientError(\n `xAI device token exchange failed (${response.status})`,\n response.status,\n );\n}\n\nexport async function refreshXaiToken(\n refreshToken: string,\n options: XaiOAuthOptions = {},\n): Promise<XaiOAuthTokens> {\n const { response, body } = await boundedFetchJson(\n \"token refresh\",\n options.tokenUrl ?? XAI_TOKEN_URL,\n {\n method: \"POST\",\n headers: oauthHeaders(),\n body: new URLSearchParams({\n grant_type: \"refresh_token\",\n refresh_token: refreshToken,\n client_id: options.clientId ?? XAI_OAUTH_CLIENT_ID,\n }).toString(),\n },\n options,\n );\n if (!response.ok) {\n const code = nullableString(body.error);\n if (\n response.status === 401 ||\n code === \"invalid_grant\" ||\n code === \"invalid_token\" ||\n code === \"access_denied\"\n ) {\n throw new XaiSubscriptionReloginRequired();\n }\n throw new XaiSubscriptionTransientError(\n `xAI token refresh failed (${response.status})`,\n response.status,\n );\n }\n const parsed = parseTokenResponse(body, false);\n return {\n ...parsed,\n refreshToken: parsed.refreshToken || refreshToken,\n };\n}\n\nfunction parseTokenResponse(\n body: Record<string, unknown>,\n requireRefresh: boolean,\n): XaiOAuthTokens {\n const accessToken = requireNonEmptyString(body.access_token, \"access_token\");\n const refreshToken = nullableString(body.refresh_token);\n if (requireRefresh && !refreshToken) {\n throw new XaiSubscriptionError(\n \"invalid_response\",\n \"xAI OAuth response is missing refresh_token\",\n );\n }\n return {\n accessToken,\n refreshToken: refreshToken ?? \"\",\n idToken: nullableString(body.id_token),\n tokenType: nullableString(body.token_type),\n scope: nullableString(body.scope),\n expiresInSeconds: positiveSeconds(body.expires_in, 60 * 60),\n };\n}\n\nexport async function fetchXaiVerifiedIdentity(\n accessToken: string,\n options: XaiOAuthOptions = {},\n): Promise<XaiVerifiedIdentity> {\n const headers = new Headers({\n accept: \"application/json\",\n authorization: `Bearer ${accessToken}`,\n \"user-agent\": `opengeni/${XAI_CLIENT_VERSION}`,\n \"x-grok-client-version\": XAI_CLIENT_VERSION,\n });\n const { response, body } = await boundedFetchJson(\n \"userinfo request\",\n options.userinfoUrl ?? XAI_USERINFO_URL,\n { method: \"GET\", headers },\n options,\n );\n if (response.status === 401 || response.status === 403) {\n throw new XaiSubscriptionReloginRequired();\n }\n if (!response.ok) {\n throw new XaiSubscriptionTransientError(\n `xAI userinfo request failed (${response.status})`,\n response.status,\n );\n }\n return {\n subject: requireNonEmptyString(body.sub, \"userinfo sub\"),\n email: nullableString(body.email),\n emailVerified: typeof body.email_verified === \"boolean\" ? body.email_verified : null,\n name: nullableString(body.name),\n };\n}\n\n/**\n * Derive stable account metadata from the token response returned directly by\n * xAI's HTTPS device-token endpoint. The access-token principal identifies the\n * selected user/team/org account when present; ID-token claims provide the\n * human-readable profile metadata. Provider requests still validate the access\n * token before any subscription capability is used.\n */\nexport function xaiIdentityFromDeviceTokens(tokens: XaiOAuthTokens): XaiVerifiedIdentity {\n const accessClaims = decodeXaiJwtPayload(tokens.accessToken);\n const idClaims = tokens.idToken ? decodeXaiJwtPayload(tokens.idToken) : null;\n const subject =\n nullableString(accessClaims?.principal_id) ??\n nullableString(accessClaims?.principalId) ??\n nullableString(idClaims?.sub) ??\n nullableString(accessClaims?.sub);\n if (!subject) {\n throw new XaiSubscriptionError(\n \"invalid_response\",\n \"xAI OAuth token response is missing account identity\",\n );\n }\n const givenName =\n nullableString(idClaims?.given_name) ?? nullableString(accessClaims?.given_name);\n const familyName =\n nullableString(idClaims?.family_name) ?? nullableString(accessClaims?.family_name);\n const combinedName = [givenName, familyName].filter(Boolean).join(\" \") || null;\n const emailVerifiedClaim = idClaims?.email_verified ?? accessClaims?.email_verified;\n return {\n subject,\n email: nullableString(idClaims?.email) ?? nullableString(accessClaims?.email),\n emailVerified: typeof emailVerifiedClaim === \"boolean\" ? emailVerifiedClaim : null,\n name: nullableString(idClaims?.name) ?? nullableString(accessClaims?.name) ?? combinedName,\n };\n}\n\nexport function decodeXaiJwtPayload(jwt: string): Record<string, unknown> | null {\n const payload = jwt.split(\".\")[1];\n if (!payload) return null;\n try {\n return JSON.parse(Buffer.from(payload, \"base64url\").toString(\"utf8\")) as Record<\n string,\n unknown\n >;\n } catch {\n return null;\n }\n}\n\nexport function xaiAccessTokenExpiry(accessToken: string): Date | null {\n const payload = decodeXaiJwtPayload(accessToken);\n return typeof payload?.exp === \"number\" ? new Date(payload.exp * 1_000) : null;\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\n\nexport type XaiSubscriptionTokenSnapshot = {\n accessToken: string;\n userId: string;\n};\n\nexport type XaiHostedSearchOptions = {\n webSearch?: boolean | Record<string, unknown>;\n xSearch?: boolean | Record<string, unknown>;\n};\n\nexport type XaiFinalContextUsage = {\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n};\n\nexport type XaiModelRequestEvent = {\n requestId: string;\n transportAttempt: number;\n phase: \"started\" | \"headers\" | \"first_event\" | \"progress\" | \"completed\" | \"failed\" | \"timed_out\";\n model?: string;\n durationMs: number;\n responseObserved: boolean;\n streamIdleTimeoutMs: number;\n status?: number;\n providerRequestId?: string;\n eventCount: number;\n lastEventType?: string;\n lastProgressDurationMs?: number;\n interEventGapMs?: number;\n silenceDurationMs?: number;\n willRetry?: boolean;\n};\n\nexport type XaiSubscriptionRequestContext = {\n clientVersion: string;\n sessionId: string;\n turnId: string;\n getToken: () => Promise<XaiSubscriptionTokenSnapshot>;\n refresh: () => Promise<XaiSubscriptionTokenSnapshot>;\n resolveModel: (slug: string) => string;\n hostedSearch?: XaiHostedSearchOptions;\n onFinalContextUsage?: (usage: XaiFinalContextUsage) => void;\n nextRequestId?: () => string;\n /** Maximum silence between complete, valid SSE data events. */\n streamIdleTimeoutMs?: number;\n /** @deprecated Use streamIdleTimeoutMs. Retained as a compatibility alias. */\n hostedToolContinuationTimeoutMs?: number;\n /** Synchronous, best-effort diagnostics; never receives bodies, auth, or output. */\n onModelRequestDiagnostic?: (event: XaiModelRequestEvent) => void;\n /** Worker-owned durable lifecycle audit; never receives bodies, auth, or output. */\n onModelRequestEvent?: (event: XaiModelRequestEvent) => Promise<void> | void;\n};\n\nexport const xaiSubscriptionRequestStorage = new AsyncLocalStorage<XaiSubscriptionRequestContext>();\n","import type { XaiHostedSearchOptions } from \"./request-context\";\n\nconst XAI_INTERNAL_MODEL_HANDOFF_PREFIX = \"supergrok/\";\n\nexport function normalizeXaiSubscriptionRequestBody(\n value: unknown,\n resolveModel: (slug: string) => string,\n hostedSearch?: XaiHostedSearchOptions,\n): Record<string, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(\"SuperGrok subscription request body must be a JSON object\");\n }\n const body = { ...(value as Record<string, unknown>) };\n if (typeof body.model !== \"string\") {\n throw new Error(\"SuperGrok subscription request is missing model\");\n }\n const candidate = body.model.startsWith(XAI_INTERNAL_MODEL_HANDOFF_PREFIX)\n ? body.model.slice(XAI_INTERNAL_MODEL_HANDOFF_PREFIX.length)\n : body.model;\n body.model = resolveModel(candidate);\n body.store = false;\n\n const include = Array.isArray(body.include)\n ? body.include.filter((entry): entry is string => typeof entry === \"string\")\n : [];\n if (!include.includes(\"reasoning.encrypted_content\")) {\n include.push(\"reasoning.encrypted_content\");\n }\n body.include = include;\n\n const tools = Array.isArray(body.tools) ? body.tools.map(normalizeXaiSubscriptionTool) : [];\n appendHostedTool(tools, \"web_search\", hostedSearch?.webSearch);\n appendHostedTool(tools, \"x_search\", hostedSearch?.xSearch);\n if (tools.length > 0) body.tools = tools;\n return body;\n}\n\nfunction normalizeXaiSubscriptionTool(tool: unknown): unknown {\n if (!tool || typeof tool !== \"object\" || Array.isArray(tool)) return tool;\n const record = tool as Record<string, unknown>;\n if (record.type !== \"web_search\") return tool;\n // OpenAI's Responses tool factory adds this tuning hint. Grok's CLI proxy\n // supports native web_search but rejects the OpenAI-only argument.\n const { search_context_size: _unsupported, ...supported } = record;\n return supported;\n}\n\nfunction appendHostedTool(\n tools: unknown[],\n type: \"web_search\" | \"x_search\",\n options: boolean | Record<string, unknown> | undefined,\n): void {\n if (!options) return;\n if (\n tools.some(\n (tool) =>\n tool &&\n typeof tool === \"object\" &&\n !Array.isArray(tool) &&\n (tool as Record<string, unknown>).type === type,\n )\n ) {\n return;\n }\n tools.push(normalizeXaiSubscriptionTool(options === true ? { type } : { type, ...options }));\n}\n\nexport function normalizeXaiResponseEventJson(value: unknown): {\n value: unknown;\n finalContextTokens: number | null;\n} {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return { value, finalContextTokens: null };\n }\n const event = value as Record<string, unknown>;\n const response =\n event.response && typeof event.response === \"object\" && !Array.isArray(event.response)\n ? { ...(event.response as Record<string, unknown>) }\n : null;\n if (!response) return { value, finalContextTokens: null };\n\n let changed = false;\n if (Array.isArray(response.tools)) {\n const filtered = response.tools.filter((tool) => isOpenAiSdkResponseTool(tool));\n if (filtered.length !== response.tools.length) {\n response.tools = filtered;\n changed = true;\n }\n }\n\n let finalContextTokens: number | null = null;\n if (event.type === \"response.completed\" || event.type === \"response.incomplete\") {\n const usage =\n response.usage && typeof response.usage === \"object\" && !Array.isArray(response.usage)\n ? { ...(response.usage as Record<string, unknown>) }\n : null;\n const context =\n usage?.context_details &&\n typeof usage.context_details === \"object\" &&\n !Array.isArray(usage.context_details)\n ? (usage.context_details as Record<string, unknown>)\n : null;\n const inputTokens = finiteNonNegativeInteger(context?.input_tokens);\n const outputTokens = finiteNonNegativeInteger(context?.output_tokens);\n if (usage && inputTokens !== null && outputTokens !== null) {\n finalContextTokens = inputTokens + outputTokens;\n usage.total_tokens = finalContextTokens;\n response.usage = usage;\n changed = true;\n }\n }\n return {\n value: changed ? { ...event, response } : value,\n finalContextTokens,\n };\n}\n\nfunction finiteNonNegativeInteger(value: unknown): number | null {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0 ? value : null;\n}\n\n// The OpenAI SDK knows these Responses tool declaration families. x_search is\n// intentionally absent: xAI executes it server-side and echoes it only in the\n// response.tools declaration list, while its output items remain untouched.\nfunction isOpenAiSdkResponseTool(tool: unknown): boolean {\n if (!tool || typeof tool !== \"object\" || Array.isArray(tool)) return false;\n const type = (tool as Record<string, unknown>).type;\n return (\n typeof type === \"string\" &&\n [\n \"function\",\n \"file_search\",\n \"computer_use_preview\",\n \"computer\",\n \"web_search\",\n \"web_search_preview\",\n \"code_interpreter\",\n \"image_generation\",\n \"local_shell\",\n \"shell\",\n \"apply_patch\",\n \"mcp\",\n \"custom\",\n ].includes(type)\n );\n}\n","import { randomUUID } from \"node:crypto\";\n\nimport {\n XAI_CLIENT_MODE,\n XAI_CLIENT_VERSION,\n XAI_RESPONSE_STREAM_IDLE_TIMEOUT_MS,\n XAI_TOKEN_AUTH_HEADER_VALUE,\n} from \"./constants\";\nimport {\n isXaiSubscriptionRateLimitDiagnostic,\n XaiSubscriptionStreamIdleTimeoutError,\n XaiSubscriptionStreamingTerminalError,\n} from \"./errors\";\nimport { normalizeXaiResponseEventJson, normalizeXaiSubscriptionRequestBody } from \"./normalize\";\nimport {\n type XaiFinalContextUsage,\n type XaiModelRequestEvent,\n type XaiSubscriptionRequestContext,\n xaiSubscriptionRequestStorage,\n} from \"./request-context\";\n\nexport type XaiFetchLike = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;\n\nconst REPLAYABLE_REQUEST_BODY_FACTORY = Symbol.for(\"opengeni.replayable-request-body-factory\");\ntype ReplayableRequestInit = RequestInit & {\n [REPLAYABLE_REQUEST_BODY_FACTORY]?: () => ReadableStream<Uint8Array>;\n};\n\nexport const XAI_SUBSCRIPTION_TRANSPORT_ERROR_HEADER =\n \"x-opengeni-xai-subscription-transport-error\";\nexport const XAI_SUBSCRIPTION_REQUEST_BODY_NORMALIZED_HEADER =\n \"x-opengeni-xai-subscription-body-normalized\";\nexport const XAI_SUBSCRIPTION_REQUEST_MODEL_HEADER = \"x-opengeni-xai-subscription-model\";\nexport const XAI_SUBSCRIPTION_REQUEST_ID_HEADER = \"x-opengeni-xai-subscription-request-id\";\n\nconst MAX_ERROR_BODY_BYTES = 64 * 1024;\nconst MAX_STREAM_IDLE_TIMEOUT_MS = 24 * 60 * 60_000;\nconst MAX_TERMINAL_ERROR_FIELD_BYTES = 256;\nconst MAX_TERMINAL_ERROR_MESSAGE_BYTES = 4 * 1024;\nconst TERMINAL_ERROR_TRUNCATION_MARKER = \"… [truncated]\";\nconst NON_RETRYABLE_SSE_ERROR_CODES = new Set([\n \"context_length_exceeded\",\n \"invalid_prompt\",\n \"invalid_request\",\n \"insufficient_quota\",\n \"usage_limit_reached\",\n]);\n\ntype RequestAudit = {\n ctx: XaiSubscriptionRequestContext;\n requestId: string;\n transportAttempt: number;\n model: string;\n startedAt: number;\n streamIdleTimeoutMs: number;\n eventCount: number;\n lastEventType: string | null;\n lastProgressAt: number | null;\n terminal: boolean;\n terminalEventEmitted: boolean;\n};\n\ntype SseProgress = {\n valid: boolean;\n eventType: string | null;\n terminal: \"completed\" | \"failed\" | null;\n payload: Record<string, unknown> | null;\n};\n\nexport function xaiSubscriptionFetch(base: XaiFetchLike): XaiFetchLike {\n return async (input, init) => {\n const context = xaiSubscriptionRequestStorage.getStore();\n if (!context) throw new Error(\"SuperGrok subscription request context is unavailable\");\n\n const originalUrl = input instanceof Request ? input.url : String(input);\n const url = new URL(originalUrl);\n if (!url.pathname.endsWith(\"/responses\")) {\n throw new Error(\"SuperGrok subscription models require the Responses API\");\n }\n const originalHeaders = new Headers(input instanceof Request ? input.headers : undefined);\n if (init?.headers) {\n new Headers(init.headers).forEach((value, key) => originalHeaders.set(key, value));\n }\n const normalized = originalHeaders.get(XAI_SUBSCRIPTION_REQUEST_BODY_NORMALIZED_HEADER) === \"1\";\n const requestId =\n originalHeaders.get(XAI_SUBSCRIPTION_REQUEST_ID_HEADER) ??\n context.nextRequestId?.() ??\n randomUUID();\n const handedOffModel = originalHeaders.get(XAI_SUBSCRIPTION_REQUEST_MODEL_HEADER);\n originalHeaders.delete(XAI_SUBSCRIPTION_REQUEST_BODY_NORMALIZED_HEADER);\n originalHeaders.delete(XAI_SUBSCRIPTION_REQUEST_ID_HEADER);\n originalHeaders.delete(XAI_SUBSCRIPTION_REQUEST_MODEL_HEADER);\n\n const replayableBodyFactory = (init as ReplayableRequestInit | undefined)?.[\n REPLAYABLE_REQUEST_BODY_FACTORY\n ];\n const body = await requestBodyText(input, init, replayableBodyFactory);\n const parsed = body ? (JSON.parse(body) as unknown) : {};\n const normalizedBody = normalized\n ? (parsed as Record<string, unknown>)\n : normalizeXaiSubscriptionRequestBody(parsed, context.resolveModel, context.hostedSearch);\n const model =\n handedOffModel ??\n (typeof normalizedBody.model === \"string\" ? normalizedBody.model : \"grok-4.6\");\n\n const streamIdleTimeoutMs = boundedStreamIdleTimeout(\n context.streamIdleTimeoutMs ?? context.hostedToolContinuationTimeoutMs,\n );\n const send = async (\n refresh: boolean,\n transportAttempt: number,\n ): Promise<{ response: Response; audit: RequestAudit }> => {\n const token = refresh ? await context.refresh() : await context.getToken();\n const headers = new Headers(originalHeaders);\n headers.set(\"authorization\", `Bearer ${token.accessToken}`);\n headers.set(\"content-type\", \"application/json\");\n headers.set(\"accept\", \"text/event-stream\");\n headers.set(\"user-agent\", `opengeni/${context.clientVersion || XAI_CLIENT_VERSION}`);\n headers.set(\"x-grok-client-version\", context.clientVersion || XAI_CLIENT_VERSION);\n headers.set(\"x-grok-client-identifier\", \"opengeni\");\n headers.set(\"x-grok-client-mode\", XAI_CLIENT_MODE);\n headers.set(\"x-authenticateresponse\", \"authenticate-response\");\n headers.set(\"x-xai-token-auth\", XAI_TOKEN_AUTH_HEADER_VALUE);\n headers.set(\"x-userid\", token.userId);\n headers.set(\"x-grok-user-id\", token.userId);\n headers.set(\"x-grok-conv-id\", context.sessionId);\n headers.set(\"x-grok-session-id\", context.sessionId);\n headers.set(\"x-grok-req-id\", requestId);\n headers.set(\"x-grok-agent-id\", context.turnId);\n headers.set(\"x-grok-model-override\", model);\n const audit: RequestAudit = {\n ctx: context,\n requestId,\n transportAttempt,\n model,\n startedAt: performance.now(),\n streamIdleTimeoutMs,\n eventCount: 0,\n lastEventType: null,\n lastProgressAt: null,\n terminal: false,\n terminalEventEmitted: false,\n };\n let response: Response | undefined;\n try {\n await emitRequestEvent(audit, {\n phase: \"started\",\n responseObserved: false,\n });\n response = await base(url, {\n ...init,\n method: init?.method ?? (input instanceof Request ? input.method : \"POST\"),\n headers,\n body: JSON.stringify(normalizedBody),\n });\n await emitRequestEvent(audit, {\n phase: \"headers\",\n responseObserved: true,\n status: response.status,\n ...providerRequestIdFields(response.headers),\n });\n return { response, audit };\n } catch (error) {\n await response?.body?.cancel(error).catch(() => undefined);\n await emitRequestEvent(audit, {\n phase: \"failed\",\n responseObserved: response !== undefined,\n ...(response\n ? {\n status: response.status,\n ...providerRequestIdFields(response.headers),\n }\n : {}),\n }).catch(() => undefined);\n throw error;\n }\n };\n\n let sent = await send(false, 1);\n if (sent.response.status === 401) {\n await sent.response.body?.cancel().catch(() => undefined);\n await emitRequestEvent(sent.audit, {\n phase: \"failed\",\n responseObserved: true,\n status: sent.response.status,\n willRetry: true,\n ...providerRequestIdFields(sent.response.headers),\n });\n sent = await send(true, 2);\n }\n return await normalizeResponse(sent.response, sent.audit, context.onFinalContextUsage);\n };\n}\n\nasync function requestBodyText(\n input: string | URL | Request,\n init: RequestInit | undefined,\n replayableBodyFactory: (() => ReadableStream<Uint8Array>) | undefined,\n): Promise<string> {\n if (typeof init?.body === \"string\") return init.body;\n if (input instanceof Request) return await input.clone().text();\n if (replayableBodyFactory) return await new Response(replayableBodyFactory()).text();\n if (init?.body === undefined || init.body === null) return \"\";\n throw new Error(\"SuperGrok subscription request body must be replayable JSON text\");\n}\n\nasync function normalizeResponse(\n response: Response,\n audit: RequestAudit,\n onFinalContextUsage: ((usage: XaiFinalContextUsage) => void) | undefined,\n): Promise<Response> {\n if (!response.ok) {\n const bytes = new Uint8Array(await response.arrayBuffer());\n const bounded =\n bytes.byteLength > MAX_ERROR_BODY_BYTES ? bytes.slice(0, MAX_ERROR_BODY_BYTES) : bytes;\n const headers = new Headers(response.headers);\n headers.set(XAI_SUBSCRIPTION_TRANSPORT_ERROR_HEADER, \"1\");\n await emitRequestEvent(audit, {\n phase: \"failed\",\n responseObserved: true,\n status: response.status,\n ...providerRequestIdFields(response.headers),\n });\n return new Response(bounded, {\n status: response.status,\n statusText: response.statusText,\n headers,\n });\n }\n if (!response.body) {\n await emitRequestEvent(audit, {\n phase: \"completed\",\n responseObserved: true,\n status: response.status,\n ...providerRequestIdFields(response.headers),\n });\n return response;\n }\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n if (!contentType.includes(\"text/event-stream\")) {\n const value = await response.json();\n const normalized = normalizeXaiResponseEventJson({\n type: \"response.completed\",\n response: value,\n });\n emitContextUsage(normalized.value, normalized.finalContextTokens, onFinalContextUsage);\n const responseValue =\n normalized.value && typeof normalized.value === \"object\" && !Array.isArray(normalized.value)\n ? (normalized.value as Record<string, unknown>).response\n : value;\n await emitRequestEvent(audit, {\n phase: \"completed\",\n responseObserved: true,\n status: response.status,\n ...providerRequestIdFields(response.headers),\n });\n return Response.json(responseValue, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n const encoder = new TextEncoder();\n let pending = \"\";\n let idleTimer: ReturnType<typeof setTimeout> | null = null;\n let controllerRef: ReadableStreamDefaultController<Uint8Array> | null = null;\n let silenceStartedAt = performance.now();\n let streamSettled = false;\n const errorStream = (error: unknown) => {\n if (streamSettled || !controllerRef) return;\n streamSettled = true;\n controllerRef.error(error);\n };\n const closeStream = () => {\n if (streamSettled || !controllerRef) return;\n streamSettled = true;\n controllerRef.close();\n };\n const clearIdleTimer = () => {\n if (idleTimer !== null) clearTimeout(idleTimer);\n idleTimer = null;\n };\n const armIdleTimer = () => {\n clearIdleTimer();\n idleTimer = setTimeout(() => {\n if (audit.terminal || !controllerRef) return;\n audit.terminal = true;\n clearIdleTimer();\n const now = performance.now();\n const silenceDurationMs = Math.max(0, now - silenceStartedAt);\n const error = new XaiSubscriptionStreamIdleTimeoutError(\n audit.requestId,\n audit.eventCount > 0,\n audit.eventCount,\n audit.lastEventType,\n silenceDurationMs,\n );\n void reader.cancel(error).catch(() => undefined);\n void emitRequestEvent(audit, {\n phase: \"timed_out\",\n responseObserved: audit.eventCount > 0,\n status: response.status,\n silenceDurationMs,\n ...providerRequestIdFields(response.headers),\n }).then(\n () => errorStream(error),\n () => errorStream(error),\n );\n }, audit.streamIdleTimeoutMs);\n idleTimer.unref?.();\n };\n const body = new ReadableStream<Uint8Array>({\n start(controller) {\n controllerRef = controller;\n silenceStartedAt = performance.now();\n armIdleTimer();\n },\n async pull(controller) {\n if (audit.terminal) return;\n try {\n // A provider may split one SSE event across several network chunks. A\n // pull that returns without enqueueing anything can leave the pending\n // downstream read parked indefinitely in Bun, so keep reading until we\n // can satisfy it with at least one complete block (or settle the stream).\n while (!audit.terminal) {\n const chunk = await reader.read();\n if (audit.terminal) return;\n pending += decoder.decode(chunk.value, { stream: !chunk.done });\n const parts = pending.split(/\\r?\\n\\r?\\n/);\n pending = parts.pop() ?? \"\";\n if (chunk.done && pending) {\n parts.push(pending);\n pending = \"\";\n }\n let enqueued = false;\n for (const part of parts) {\n const progress = sseProgress(part);\n if (!progress.valid) {\n controller.enqueue(\n encoder.encode(`${normalizeSseEvent(part, onFinalContextUsage)}\\n\\n`),\n );\n enqueued = true;\n continue;\n }\n clearIdleTimer();\n const now = performance.now();\n const interEventGapMs = Math.max(0, now - (audit.lastProgressAt ?? audit.startedAt));\n audit.eventCount = Math.min(Number.MAX_SAFE_INTEGER, audit.eventCount + 1);\n audit.lastEventType = progress.eventType;\n audit.lastProgressAt = now;\n silenceStartedAt = now;\n if (audit.eventCount === 1) {\n await emitRequestEvent(audit, {\n phase: \"first_event\",\n responseObserved: true,\n status: response.status,\n ...providerRequestIdFields(response.headers),\n });\n } else {\n emitDiagnosticEvent(audit, {\n phase: \"progress\",\n responseObserved: true,\n status: response.status,\n interEventGapMs,\n ...providerRequestIdFields(response.headers),\n });\n }\n if (progress.terminal === \"failed\") {\n audit.terminal = true;\n clearIdleTimer();\n await reader.cancel().catch(() => undefined);\n await emitRequestEvent(audit, {\n phase: \"failed\",\n responseObserved: true,\n status: response.status,\n ...providerRequestIdFields(response.headers),\n });\n errorStream(xaiSseTerminalError(response, audit, progress));\n return;\n }\n controller.enqueue(\n encoder.encode(`${normalizeSseEvent(part, onFinalContextUsage)}\\n\\n`),\n );\n enqueued = true;\n if (progress.terminal === \"completed\") {\n audit.terminal = true;\n clearIdleTimer();\n await reader.cancel().catch(() => undefined);\n await emitRequestEvent(audit, {\n phase: \"completed\",\n responseObserved: true,\n status: response.status,\n ...providerRequestIdFields(response.headers),\n });\n closeStream();\n return;\n }\n armIdleTimer();\n }\n if (chunk.done) {\n audit.terminal = true;\n clearIdleTimer();\n await emitRequestEvent(audit, {\n phase: \"failed\",\n responseObserved: true,\n status: response.status,\n ...providerRequestIdFields(response.headers),\n });\n closeStream();\n return;\n }\n if (enqueued) return;\n }\n } catch (error) {\n if (audit.terminal) {\n errorStream(error);\n return;\n }\n audit.terminal = true;\n clearIdleTimer();\n await reader.cancel(error).catch(() => undefined);\n await emitRequestEvent(audit, {\n phase: \"failed\",\n responseObserved: true,\n status: response.status,\n ...providerRequestIdFields(response.headers),\n }).catch(() => undefined);\n errorStream(error);\n }\n },\n async cancel(reason) {\n streamSettled = true;\n if (!audit.terminal) {\n audit.terminal = true;\n clearIdleTimer();\n await emitRequestEvent(audit, {\n phase: \"failed\",\n responseObserved: true,\n status: response.status,\n ...providerRequestIdFields(response.headers),\n }).catch(() => undefined);\n }\n await reader.cancel(reason).catch(() => undefined);\n },\n });\n return new Response(body, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n}\n\nfunction sseProgress(block: string): SseProgress {\n for (const line of block.split(\"\\n\")) {\n if (!line.startsWith(\"data:\")) continue;\n const data = line.slice(5).trim();\n if (!data) continue;\n if (data === \"[DONE]\") {\n return { valid: true, eventType: \"done\", terminal: \"completed\", payload: null };\n }\n try {\n const parsed = JSON.parse(data) as unknown;\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return { valid: false, eventType: null, terminal: null, payload: null };\n }\n const payload = parsed as Record<string, unknown>;\n const rawType = payload.type;\n if (typeof rawType !== \"string\" || !/^[a-z0-9_.-]{1,96}$/i.test(rawType)) {\n return { valid: false, eventType: null, terminal: null, payload: null };\n }\n const type = rawType;\n if (type === \"response.completed\") {\n return { valid: true, eventType: type, terminal: \"completed\", payload };\n }\n if (\n type === \"error\" ||\n type === \"response.incomplete\" ||\n type === \"response.failed\" ||\n type === \"response.error\"\n ) {\n return { valid: true, eventType: type, terminal: \"failed\", payload };\n }\n return { valid: true, eventType: type, terminal: null, payload };\n } catch {\n return { valid: false, eventType: null, terminal: null, payload: null };\n }\n }\n return { valid: false, eventType: null, terminal: null, payload: null };\n}\n\nfunction boundedTerminalErrorField(\n value: unknown,\n maxBytes: number,\n): { value?: string; truncated: boolean } {\n if (typeof value !== \"string\") return { truncated: false };\n const encoder = new TextEncoder();\n const encoded = encoder.encode(value);\n if (encoded.byteLength <= maxBytes) return { value, truncated: false };\n const markerBytes = encoder.encode(TERMINAL_ERROR_TRUNCATION_MARKER).byteLength;\n let prefixEnd = Math.max(0, maxBytes - markerBytes);\n while (prefixEnd > 0 && (encoded[prefixEnd]! & 0xc0) === 0x80) {\n prefixEnd -= 1;\n }\n return {\n value: `${new TextDecoder().decode(encoded.subarray(0, prefixEnd))}${TERMINAL_ERROR_TRUNCATION_MARKER}`,\n truncated: true,\n };\n}\n\nfunction terminalErrorSource(\n payload: Record<string, unknown> | null,\n eventType: string | null,\n): unknown {\n if (!payload) return null;\n if (eventType === \"error\" || eventType === \"response.error\") {\n return payload.error ?? payload;\n }\n const response = payload.response;\n if (response && typeof response === \"object\" && !Array.isArray(response)) {\n const nested = (response as Record<string, unknown>).error;\n if (nested !== undefined && nested !== null) return nested;\n }\n return payload.error ?? payload;\n}\n\nfunction xaiSseTerminalError(\n source: Response,\n audit: RequestAudit,\n progress: SseProgress,\n): XaiSubscriptionStreamingTerminalError {\n const rawError = terminalErrorSource(progress.payload, progress.eventType);\n const record =\n rawError && typeof rawError === \"object\" && !Array.isArray(rawError)\n ? (rawError as Record<string, unknown>)\n : {};\n const eventTypeField = boundedTerminalErrorField(\n progress.eventType,\n MAX_TERMINAL_ERROR_FIELD_BYTES,\n );\n const rawCode =\n record.code ??\n (typeof record.type === \"string\" &&\n record.type !== eventTypeField.value &&\n record.type !== \"error\"\n ? record.type\n : undefined);\n const codeField = boundedTerminalErrorField(rawCode, MAX_TERMINAL_ERROR_FIELD_BYTES);\n const messageField = boundedTerminalErrorField(\n record.message ?? (typeof rawError === \"string\" ? rawError : undefined),\n MAX_TERMINAL_ERROR_MESSAGE_BYTES,\n );\n const eventType = eventTypeField.value ?? \"error\";\n const fallbackCode =\n eventType === \"response.failed\"\n ? \"response_failed\"\n : eventType === \"response.incomplete\"\n ? \"response_incomplete\"\n : \"response_error\";\n const fallbackMessage =\n eventType === \"response.incomplete\"\n ? \"The SuperGrok response was incomplete\"\n : eventType === \"response.failed\"\n ? \"The SuperGrok response failed\"\n : \"The SuperGrok response stream reported an error\";\n const message = messageField.value?.length ? messageField.value : fallbackMessage;\n let code = codeField.value?.length ? codeField.value : fallbackCode;\n const rateLimited =\n !NON_RETRYABLE_SSE_ERROR_CODES.has(code) &&\n isXaiSubscriptionRateLimitDiagnostic({ code, message });\n if (rateLimited && (code === fallbackCode || code === \"response_error\")) {\n code = \"rate_limit_exceeded\";\n }\n const status = rateLimited ? 429 : NON_RETRYABLE_SSE_ERROR_CODES.has(code) ? 400 : 502;\n const headers = new Headers(source.headers);\n headers.set(\"content-type\", \"application/json\");\n headers.set(XAI_SUBSCRIPTION_TRANSPORT_ERROR_HEADER, \"1\");\n headers.set(\"x-should-retry\", \"false\");\n headers.delete(\"content-length\");\n headers.delete(\"content-encoding\");\n return new XaiSubscriptionStreamingTerminalError({\n message,\n code,\n eventType,\n requestId: audit.requestId,\n status,\n diagnosticTruncated: eventTypeField.truncated || codeField.truncated || messageField.truncated,\n headers,\n });\n}\n\nfunction boundedStreamIdleTimeout(value: number | undefined): number {\n const resolved = value ?? XAI_RESPONSE_STREAM_IDLE_TIMEOUT_MS;\n if (!Number.isSafeInteger(resolved) || resolved < 1 || resolved > MAX_STREAM_IDLE_TIMEOUT_MS) {\n throw new RangeError(\"SuperGrok response stream idle timeout is invalid\");\n }\n return resolved;\n}\n\nfunction providerRequestId(headers: Headers): string | undefined {\n return headers.get(\"x-request-id\") ?? headers.get(\"request-id\") ?? undefined;\n}\n\nfunction providerRequestIdFields(headers: Headers): { providerRequestId: string } | object {\n const value = providerRequestId(headers);\n return value ? { providerRequestId: value } : {};\n}\n\nfunction requestEventFor(\n audit: RequestAudit,\n event: Omit<\n XaiModelRequestEvent,\n | \"requestId\"\n | \"transportAttempt\"\n | \"model\"\n | \"durationMs\"\n | \"streamIdleTimeoutMs\"\n | \"eventCount\"\n | \"lastEventType\"\n | \"lastProgressDurationMs\"\n >,\n): XaiModelRequestEvent {\n const now = performance.now();\n return {\n requestId: audit.requestId,\n transportAttempt: audit.transportAttempt,\n model: audit.model,\n durationMs: Math.max(0, now - audit.startedAt),\n streamIdleTimeoutMs: audit.streamIdleTimeoutMs,\n eventCount: audit.eventCount,\n ...(audit.lastEventType ? { lastEventType: audit.lastEventType } : {}),\n ...(audit.lastProgressAt !== null\n ? {\n lastProgressDurationMs: Math.max(0, audit.lastProgressAt - audit.startedAt),\n }\n : {}),\n ...event,\n };\n}\n\nfunction emitDiagnosticEvent(\n audit: RequestAudit,\n event: Parameters<typeof requestEventFor>[1],\n): XaiModelRequestEvent {\n const observed = requestEventFor(audit, event);\n try {\n audit.ctx.onModelRequestDiagnostic?.(observed);\n } catch {\n // Diagnostics are in-memory and must never affect provider transport.\n }\n return observed;\n}\n\nasync function emitRequestEvent(\n audit: RequestAudit,\n event: Parameters<typeof requestEventFor>[1],\n): Promise<void> {\n if (event.phase === \"completed\" || event.phase === \"failed\" || event.phase === \"timed_out\") {\n if (audit.terminalEventEmitted) return;\n audit.terminalEventEmitted = true;\n }\n const observed = emitDiagnosticEvent(audit, event);\n await audit.ctx.onModelRequestEvent?.(observed);\n}\n\nfunction normalizeSseEvent(\n block: string,\n onFinalContextUsage: ((usage: XaiFinalContextUsage) => void) | undefined,\n): string {\n const lines = block.split(\"\\n\");\n return lines\n .map((line) => {\n if (!line.startsWith(\"data:\")) return line;\n const data = line.slice(5).trim();\n if (!data || data === \"[DONE]\") return line;\n try {\n const normalized = normalizeXaiResponseEventJson(JSON.parse(data));\n emitContextUsage(normalized.value, normalized.finalContextTokens, onFinalContextUsage);\n return `data: ${JSON.stringify(normalized.value)}`;\n } catch {\n return line;\n }\n })\n .join(\"\\n\");\n}\n\nfunction emitContextUsage(\n value: unknown,\n finalContextTokens: number | null,\n sink: ((usage: XaiFinalContextUsage) => void) | undefined,\n): void {\n if (finalContextTokens === null || !sink) return;\n const response =\n value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>).response\n : null;\n const usage =\n response && typeof response === \"object\" && !Array.isArray(response)\n ? (response as Record<string, unknown>).usage\n : null;\n const context =\n usage && typeof usage === \"object\" && !Array.isArray(usage)\n ? (usage as Record<string, unknown>).context_details\n : null;\n if (!context || typeof context !== \"object\" || Array.isArray(context)) return;\n const inputTokens = Number((context as Record<string, unknown>).input_tokens);\n const outputTokens = Number((context as Record<string, unknown>).output_tokens);\n if (!Number.isSafeInteger(inputTokens) || !Number.isSafeInteger(outputTokens)) return;\n try {\n sink({ inputTokens, outputTokens, totalTokens: finalContextTokens });\n } catch {\n // Usage observation must never alter model transport.\n }\n}\n\nexport function isXaiSubscriptionTransportError(error: unknown): boolean {\n let current: unknown = error;\n for (let depth = 0; depth < 6 && current && typeof current === \"object\"; depth += 1) {\n if (current instanceof XaiSubscriptionStreamingTerminalError) return true;\n const value = current as Record<string, unknown>;\n const headers = value.headers;\n if (\n headers &&\n typeof headers === \"object\" &&\n typeof (headers as { get?: unknown }).get === \"function\" &&\n (headers as Headers).get(XAI_SUBSCRIPTION_TRANSPORT_ERROR_HEADER) === \"1\"\n ) {\n return true;\n }\n current = value.cause;\n }\n return false;\n}\n","import { OAUTH_MAX_RESPONSE_BYTES, pinnedFetch, readResponseJsonBounded } from \"@opengeni/network\";\n\nimport { runBoundedXaiOperation } from \"./bounded-operation\";\nimport {\n XAI_CLIENT_MODE,\n XAI_CLIENT_VERSION,\n XAI_SUBSCRIPTION_PROXY_BASE_URL,\n XAI_TOKEN_AUTH_HEADER_VALUE,\n} from \"./constants\";\nimport { XaiSubscriptionReloginRequired, XaiSubscriptionTransientError } from \"./errors\";\nimport type { XaiFetchLike } from \"./fetch\";\nimport type { XaiSubscriptionTokenSnapshot } from \"./request-context\";\n\nexport type XaiProxyAuthContext = {\n clientVersion?: string;\n getToken: () => Promise<XaiSubscriptionTokenSnapshot>;\n refresh: () => Promise<XaiSubscriptionTokenSnapshot>;\n};\n\nconst defaultProxyFetch: XaiFetchLike = async (input, init) =>\n await pinnedFetch(\n input,\n init,\n { environment: \"production\", integrationsAllowPrivateNetworkTargets: false },\n { label: \"xAI subscription proxy\", requireHttpsOutsideLocalTest: true },\n );\n\nexport async function fetchXaiProxyJson<T>(input: {\n path: string;\n context: XaiProxyAuthContext;\n fetch?: XaiFetchLike;\n timeoutMs?: number;\n maxBytes?: number;\n baseUrl?: string;\n label: string;\n}): Promise<T> {\n const fetchImpl = input.fetch ?? defaultProxyFetch;\n const timeoutMs = input.timeoutMs ?? 15_000;\n const maxBytes = input.maxBytes ?? OAUTH_MAX_RESPONSE_BYTES;\n const url = `${(input.baseUrl ?? XAI_SUBSCRIPTION_PROXY_BASE_URL).replace(/\\/+$/, \"\")}/${input.path.replace(/^\\/+/, \"\")}`;\n const request = async (token: XaiSubscriptionTokenSnapshot, signal: AbortSignal) => {\n const headers = xaiSubscriptionProxyHeaders(token, input.context.clientVersion);\n return await fetchImpl(url, { method: \"GET\", redirect: \"error\", headers, signal });\n };\n const fetched = await runBoundedXaiOperation(async (signal) => {\n let response = await request(await input.context.getToken(), signal);\n if (response.status === 401) {\n await response.body?.cancel().catch(() => undefined);\n response = await request(await input.context.refresh(), signal);\n }\n if (response.status === 401 || response.status === 403) {\n await response.body?.cancel().catch(() => undefined);\n throw new XaiSubscriptionReloginRequired();\n }\n if (!response.ok) {\n await response.body?.cancel().catch(() => undefined);\n throw new XaiSubscriptionTransientError(\n `xAI ${input.label} failed (${response.status})`,\n response.status,\n );\n }\n return await readResponseJsonBounded<T>(response, maxBytes, `xAI ${input.label}`, { signal });\n }, timeoutMs);\n if (!fetched.ok) {\n throw new XaiSubscriptionTransientError(`xAI ${input.label} ${fetched.reason}`);\n }\n return fetched.value;\n}\n\nexport function xaiSubscriptionProxyHeaders(\n token: XaiSubscriptionTokenSnapshot,\n clientVersion = XAI_CLIENT_VERSION,\n): Headers {\n return new Headers({\n accept: \"application/json\",\n authorization: `Bearer ${token.accessToken}`,\n \"user-agent\": `opengeni/${clientVersion}`,\n \"x-grok-client-version\": clientVersion,\n \"x-grok-client-identifier\": \"opengeni\",\n \"x-grok-client-mode\": XAI_CLIENT_MODE,\n \"x-authenticateresponse\": \"authenticate-response\",\n \"x-xai-token-auth\": XAI_TOKEN_AUTH_HEADER_VALUE,\n \"x-userid\": token.userId,\n \"x-grok-user-id\": token.userId,\n });\n}\n","import type { XaiFetchLike } from \"./fetch\";\nimport { fetchXaiProxyJson, type XaiProxyAuthContext } from \"./proxy\";\n\nexport type XaiUsagePeriod = {\n type: string | null;\n start: Date | null;\n end: Date | null;\n};\n\nexport type XaiSubscriptionQuota = {\n usedPercent: number | null;\n period: XaiUsagePeriod | null;\n prepaidBalanceCents: number | null;\n onDemandCapCents: number | null;\n onDemandUsedCents: number | null;\n onDemandEnabled: boolean | null;\n unifiedBilling: boolean | null;\n subscriptionTier: string | null;\n checkedAt: Date;\n};\n\nexport async function fetchXaiSubscriptionQuota(input: {\n context: XaiProxyAuthContext;\n fetch?: XaiFetchLike;\n timeoutMs?: number;\n baseUrl?: string;\n}): Promise<XaiSubscriptionQuota> {\n const body = await fetchXaiProxyJson<Record<string, unknown>>({\n path: \"billing?format=credits\",\n context: input.context,\n ...(input.fetch ? { fetch: input.fetch } : {}),\n ...(input.timeoutMs ? { timeoutMs: input.timeoutMs } : {}),\n ...(input.baseUrl ? { baseUrl: input.baseUrl } : {}),\n label: \"billing request\",\n });\n const config = record(body.config);\n const currentPeriod = record(config?.currentPeriod ?? config?.current_period);\n const monthlyLimit = cents(config?.monthlyLimit ?? config?.monthly_limit);\n const used = cents(config?.used);\n const directPercent = finitePercent(config?.creditUsagePercent ?? config?.credit_usage_percent);\n const derivedPercent =\n monthlyLimit !== null && monthlyLimit > 0 && used !== null\n ? Math.max(0, Math.min(100, (used / monthlyLimit) * 100))\n : null;\n const period = currentPeriod\n ? {\n type: stringOrNull(currentPeriod.type),\n start: dateOrNull(currentPeriod.start),\n end: dateOrNull(currentPeriod.end),\n }\n : legacyPeriod(config);\n // The unified credits endpoint uses protobuf JSON: zero scalar usage is\n // omitted. Only apply that default to a recognized credits-period response,\n // not null/partial responses or malformed explicit percentages.\n const omittedUnifiedZero =\n config?.isUnifiedBillingUser === true &&\n period?.end !== null &&\n period?.end !== undefined &&\n !Object.hasOwn(config, \"creditUsagePercent\") &&\n !Object.hasOwn(config, \"credit_usage_percent\");\n return {\n usedPercent: directPercent ?? derivedPercent ?? (omittedUnifiedZero ? 0 : null),\n period,\n prepaidBalanceCents: cents(config?.prepaidBalance ?? config?.prepaid_balance),\n onDemandCapCents: cents(config?.onDemandCap ?? config?.on_demand_cap),\n onDemandUsedCents: cents(config?.onDemandUsed ?? config?.on_demand_used),\n onDemandEnabled: booleanOrNull(body.onDemandEnabled ?? body.on_demand_enabled),\n unifiedBilling: booleanOrNull(config?.isUnifiedBillingUser ?? config?.is_unified_billing_user),\n subscriptionTier: stringOrNull(body.subscriptionTier ?? body.subscription_tier),\n checkedAt: new Date(),\n };\n}\n\nfunction record(value: unknown): Record<string, unknown> | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction cents(value: unknown): number | null {\n if (typeof value === \"number\" && Number.isSafeInteger(value)) return value;\n const object = record(value);\n const candidate = object?.val;\n return typeof candidate === \"number\" && Number.isSafeInteger(candidate) ? candidate : null;\n}\n\nfunction finitePercent(value: unknown): number | null {\n if (value === null || value === undefined || value === \"\") return null;\n const candidate = Number(value);\n return Number.isFinite(candidate) ? Math.max(0, Math.min(100, candidate)) : null;\n}\n\nfunction stringOrNull(value: unknown): string | null {\n return typeof value === \"string\" && value.length > 0 ? value : null;\n}\n\nfunction booleanOrNull(value: unknown): boolean | null {\n return typeof value === \"boolean\" ? value : null;\n}\n\nfunction dateOrNull(value: unknown): Date | null {\n if (typeof value !== \"string\") return null;\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? null : date;\n}\n\nfunction legacyPeriod(config: Record<string, unknown> | null): XaiUsagePeriod | null {\n const start = dateOrNull(config?.billingPeriodStart ?? config?.billing_period_start);\n const end = dateOrNull(config?.billingPeriodEnd ?? config?.billing_period_end);\n return start || end ? { type: null, start, end } : null;\n}\n","import {\n XAI_SUBSCRIPTION_AUTO_COMPACTION_PERCENT,\n XAI_SUBSCRIPTION_EFFECTIVE_CONTEXT_PERCENT,\n} from \"./constants\";\nimport type { XaiFetchLike } from \"./fetch\";\nimport { fetchXaiProxyJson, type XaiProxyAuthContext } from \"./proxy\";\n\nexport type XaiSubscriptionModelMetadata = {\n slug: string;\n name: string;\n contextWindowTokens: number;\n effectiveContextWindowTokens: number;\n autoCompactTokenLimit: number;\n maxCompletionTokens: number | null;\n apiBackend: \"responses\" | \"chat_completions\" | \"messages\";\n};\n\nexport async function fetchXaiSubscriptionModels(input: {\n context: XaiProxyAuthContext;\n fetch?: XaiFetchLike;\n timeoutMs?: number;\n baseUrl?: string;\n}): Promise<XaiSubscriptionModelMetadata[]> {\n const body = await fetchXaiProxyJson<unknown>({\n path: \"models\",\n context: input.context,\n ...(input.fetch ? { fetch: input.fetch } : {}),\n ...(input.timeoutMs ? { timeoutMs: input.timeoutMs } : {}),\n ...(input.baseUrl ? { baseUrl: input.baseUrl } : {}),\n maxBytes: 4 * 1024 * 1024,\n label: \"model metadata request\",\n });\n const values = Array.isArray(body)\n ? body\n : body && typeof body === \"object\" && Array.isArray((body as Record<string, unknown>).data)\n ? ((body as Record<string, unknown>).data as unknown[])\n : [];\n return values.flatMap((value) => {\n const parsed = parseXaiSubscriptionModelMetadata(value);\n return parsed ? [parsed] : [];\n });\n}\n\nexport function parseXaiSubscriptionModelMetadata(\n value: unknown,\n): XaiSubscriptionModelMetadata | null {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n const object = value as Record<string, unknown>;\n const meta =\n object._meta && typeof object._meta === \"object\" && !Array.isArray(object._meta)\n ? (object._meta as Record<string, unknown>)\n : {};\n const slug = firstString(object.model, object.modelId, object.id, meta.model, meta.modelId);\n const contextWindowTokens = firstPositiveInteger(\n object.contextWindow,\n object.context_window,\n meta.contextWindow,\n meta.totalContextTokens,\n );\n if (!slug || contextWindowTokens === null) return null;\n const effectivePercent =\n firstPositiveInteger(\n object.effectiveContextWindowPercent,\n object.effective_context_window_percent,\n ) ?? XAI_SUBSCRIPTION_EFFECTIVE_CONTEXT_PERCENT;\n const autoCompactPercent =\n firstPositiveInteger(\n object.autoCompactThresholdPercent,\n object.auto_compact_threshold_percent,\n ) ?? XAI_SUBSCRIPTION_AUTO_COMPACTION_PERCENT;\n const backend = firstString(object.apiBackend, object.api_backend);\n return {\n slug,\n name: firstString(object.name) ?? slug,\n contextWindowTokens,\n effectiveContextWindowTokens: Math.floor((contextWindowTokens * effectivePercent) / 100),\n autoCompactTokenLimit: Math.floor((contextWindowTokens * autoCompactPercent) / 100),\n maxCompletionTokens: firstPositiveInteger(\n object.maxCompletionTokens,\n object.max_completion_tokens,\n ),\n apiBackend: backend === \"chat_completions\" || backend === \"messages\" ? backend : \"responses\",\n };\n}\n\nfunction firstString(...values: unknown[]): string | null {\n for (const value of values) {\n if (typeof value === \"string\" && value.length > 0) return value;\n }\n return null;\n}\n\nfunction firstPositiveInteger(...values: unknown[]): number | null {\n for (const value of values) {\n const number = Number(value);\n if (Number.isSafeInteger(number) && number > 0) return number;\n }\n return null;\n}\n","import { pinnedFetch, readJsonBase64Field, readResponseTextBounded } from \"@opengeni/network\";\n\nimport {\n XAI_CLIENT_VERSION,\n XAI_IMAGE_MODEL,\n XAI_IMAGE_REQUEST_TIMEOUT_MS,\n XAI_PUBLIC_API_BASE_URL,\n} from \"./constants\";\nimport { XaiSubscriptionError } from \"./errors\";\nimport type { XaiFetchLike } from \"./fetch\";\nimport type { XaiSubscriptionTokenSnapshot } from \"./request-context\";\n\nconst XAI_IMAGE_RESPONSE_MAX_BYTES = 90 * 1024 * 1024;\nconst XAI_IMAGE_MAX_BYTES = 64 * 1024 * 1024;\nconst XAI_IMAGE_ERROR_MAX_BYTES = 64 * 1024;\n\nexport type XaiImageReference = Readonly<{\n mediaType: \"image/png\" | \"image/jpeg\" | \"image/webp\";\n bytes: Uint8Array;\n}>;\n\nconst defaultImageFetch: XaiFetchLike = async (input, init) =>\n await pinnedFetch(\n input,\n init,\n { environment: \"production\", integrationsAllowPrivateNetworkTargets: false },\n { label: \"xAI image generation\", requireHttpsOutsideLocalTest: true },\n );\n\nexport type XaiGeneratedImage = {\n bytes: Uint8Array;\n declaredMediaType: \"image/png\" | \"image/jpeg\" | \"image/webp\";\n};\n\nexport async function generateXaiSubscriptionImage(input: {\n prompt: string;\n aspectRatio?: string;\n references?: readonly XaiImageReference[];\n sessionId?: string;\n getToken: () => Promise<XaiSubscriptionTokenSnapshot>;\n refresh: () => Promise<XaiSubscriptionTokenSnapshot>;\n abortSignal?: AbortSignal;\n fetch?: XaiFetchLike;\n requestTimeoutMs?: number;\n baseUrl?: string;\n}): Promise<XaiGeneratedImage> {\n const timeoutMs = input.requestTimeoutMs ?? XAI_IMAGE_REQUEST_TIMEOUT_MS;\n const deadline = new AbortController();\n const timer = setTimeout(\n () => deadline.abort(new XaiSubscriptionError(\"timeout\", \"xAI image generation timed out\")),\n timeoutMs,\n );\n const signal = input.abortSignal\n ? AbortSignal.any([input.abortSignal, deadline.signal])\n : deadline.signal;\n const fetchImpl = input.fetch ?? defaultImageFetch;\n const references = input.references ?? [];\n if (references.length > 3) {\n throw new XaiSubscriptionError(\n \"provider_rejected\",\n \"xAI image editing supports at most three references\",\n );\n }\n const url = `${(input.baseUrl ?? XAI_PUBLIC_API_BASE_URL).replace(/\\/+$/, \"\")}/images/${references.length > 0 ? \"edits\" : \"generations\"}`;\n const request = async (token: XaiSubscriptionTokenSnapshot): Promise<Response> =>\n await fetchImpl(url, {\n method: \"POST\",\n redirect: \"error\",\n headers: {\n accept: \"application/json\",\n authorization: `Bearer ${token.accessToken}`,\n \"content-type\": \"application/json\",\n \"user-agent\": `opengeni/${XAI_CLIENT_VERSION}`,\n \"x-grok-client-version\": XAI_CLIENT_VERSION,\n \"x-grok-client-identifier\": \"opengeni\",\n ...(input.sessionId ? { \"x-grok-session-id\": input.sessionId } : {}),\n },\n body: JSON.stringify(\n references.length > 0\n ? {\n model: XAI_IMAGE_MODEL,\n prompt: input.prompt,\n n: 1,\n resolution: \"1k\",\n response_format: \"b64_json\",\n ...(references.length === 1\n ? { image: referencePayload(references[0]!) }\n : {\n images: references.map(referencePayload),\n aspect_ratio: input.aspectRatio ?? \"auto\",\n }),\n }\n : {\n model: XAI_IMAGE_MODEL,\n prompt: input.prompt,\n n: 1,\n aspect_ratio: input.aspectRatio ?? \"auto\",\n resolution: \"1k\",\n response_format: \"b64_json\",\n },\n ),\n signal,\n });\n try {\n let response = await request(await input.getToken());\n if (response.status === 401) {\n await response.body?.cancel().catch(() => undefined);\n response = await request(await input.refresh());\n }\n if (!response.ok) {\n const detail = await readResponseTextBounded(\n response,\n XAI_IMAGE_ERROR_MAX_BYTES,\n \"xAI image generation error\",\n { signal },\n ).catch(() => \"\");\n throw new XaiSubscriptionError(\n \"provider_rejected\",\n `xAI image generation failed (${response.status})${detail ? `: ${boundedMessage(detail)}` : \"\"}`,\n response.status,\n );\n }\n const bytes = await readJsonBase64Field(response, {\n fieldName: \"b64_json\",\n shape: \"string\",\n maxResponseBytes: XAI_IMAGE_RESPONSE_MAX_BYTES,\n maxDecodedBytes: XAI_IMAGE_MAX_BYTES,\n label: \"xAI image generation\",\n signal,\n });\n return { bytes, declaredMediaType: detectImageMediaType(bytes) };\n } finally {\n clearTimeout(timer);\n }\n}\n\nfunction referencePayload(reference: XaiImageReference): { url: string } {\n return {\n url: `data:${reference.mediaType};base64,${Buffer.from(reference.bytes).toString(\"base64\")}`,\n };\n}\n\nfunction detectImageMediaType(bytes: Uint8Array): XaiGeneratedImage[\"declaredMediaType\"] {\n if (\n bytes.byteLength >= 8 &&\n [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a].every((byte, index) => bytes[index] === byte)\n ) {\n return \"image/png\";\n }\n if (bytes.byteLength >= 3 && bytes[0] === 0xff && bytes[1] === 0xd8 && bytes[2] === 0xff) {\n return \"image/jpeg\";\n }\n if (\n bytes.byteLength >= 12 &&\n String.fromCharCode(...bytes.subarray(0, 4)) === \"RIFF\" &&\n String.fromCharCode(...bytes.subarray(8, 12)) === \"WEBP\"\n ) {\n return \"image/webp\";\n }\n throw new XaiSubscriptionError(\"invalid_response\", \"xAI returned an unsupported image format\");\n}\n\nfunction boundedMessage(body: string): string {\n try {\n const value = JSON.parse(body) as Record<string, unknown>;\n const error =\n value.error && typeof value.error === \"object\" && !Array.isArray(value.error)\n ? (value.error as Record<string, unknown>)\n : null;\n const message = error?.message ?? value.message;\n if (typeof message === \"string\") return message.replace(/\\s+/g, \" \").trim().slice(0, 1_000);\n } catch {\n // Preserve only a bounded normalized provider diagnostic.\n }\n return body.replace(/\\s+/g, \" \").trim().slice(0, 1_000);\n}\n","import {\n pinnedFetch,\n readResponseBodyBounded,\n readResponseJsonBounded,\n readResponseTextBounded,\n validateHttpUrl,\n} from \"@opengeni/network\";\n\nimport {\n XAI_PUBLIC_API_BASE_URL,\n XAI_CLIENT_MODE,\n XAI_CLIENT_VERSION,\n XAI_VIDEO_DOWNLOAD_TIMEOUT_MS,\n XAI_VIDEO_GENERATION_TIMEOUT_MS,\n XAI_VIDEO_MODEL,\n XAI_VIDEO_POLL_INTERVAL_MS,\n XAI_VIDEO_POLL_REQUEST_TIMEOUT_MS,\n XAI_VIDEO_START_TIMEOUT_MS,\n} from \"./constants\";\nimport { XaiSubscriptionError } from \"./errors\";\nimport type { XaiFetchLike } from \"./fetch\";\nimport type { XaiSubscriptionTokenSnapshot } from \"./request-context\";\n\nconst XAI_VIDEO_MAX_BYTES = 256 * 1024 * 1024;\nconst XAI_VIDEO_ERROR_MAX_BYTES = 64 * 1024;\n\nconst defaultVideoFetch: XaiFetchLike = async (input, init) =>\n await pinnedFetch(\n input,\n init,\n {\n environment: \"production\",\n integrationsAllowPrivateNetworkTargets: false,\n },\n { label: \"xAI video generation\", requireHttpsOutsideLocalTest: true },\n );\n\nexport type XaiGeneratedVideo = {\n bytes: Uint8Array;\n declaredMediaType: \"video/mp4\";\n requestId: string;\n};\n\nexport type XaiVideoStatus =\n | Readonly<{ status: \"pending\" }>\n | Readonly<{ status: \"completed\"; outputUrl: string; mediaType: \"video/mp4\" }>\n | Readonly<{ status: \"error\"; publicReason: string }>;\n\n/** One-shot durable start. The caller owns replay/idempotency policy. */\nexport async function startXaiSubscriptionVideoWithBody(input: {\n body: Record<string, unknown>;\n getToken: () => Promise<XaiSubscriptionTokenSnapshot>;\n refresh: () => Promise<XaiSubscriptionTokenSnapshot>;\n sessionId?: string;\n signal?: AbortSignal;\n fetch?: XaiFetchLike;\n baseUrl?: string;\n}): Promise<{ providerJobId: string }> {\n const fetchImpl = input.fetch ?? defaultVideoFetch;\n const baseUrl = (input.baseUrl ?? XAI_PUBLIC_API_BASE_URL).replace(/\\/+$/, \"\");\n const request = async (token: XaiSubscriptionTokenSnapshot) =>\n await fetchWithDeadline(\n fetchImpl,\n `${baseUrl}/videos/generations`,\n {\n method: \"POST\",\n redirect: \"error\",\n headers: publicVideoHeaders(token, input.sessionId, true),\n body: JSON.stringify(input.body),\n ...(input.signal ? { signal: input.signal } : {}),\n },\n XAI_VIDEO_START_TIMEOUT_MS,\n input.signal ?? AbortSignal.timeout(XAI_VIDEO_START_TIMEOUT_MS),\n );\n let response = await request(await input.getToken());\n if (response.status === 401) {\n await response.body?.cancel().catch(() => undefined);\n response = await request(await input.refresh());\n }\n if (!response.ok)\n throw await providerError(\"start\", response, input.signal ?? new AbortController().signal);\n const body = await readResponseJsonBounded<Record<string, unknown>>(\n response,\n 1024 * 1024,\n \"xAI video start\",\n input.signal ? { signal: input.signal } : {},\n );\n if (typeof body.request_id !== \"string\" || !body.request_id.trim()) {\n throw new XaiSubscriptionError(\"invalid_response\", \"xAI video start response is malformed\");\n }\n return { providerJobId: body.request_id };\n}\n\nexport async function getXaiSubscriptionVideoStatus(input: {\n providerJobId: string;\n getToken: () => Promise<XaiSubscriptionTokenSnapshot>;\n refresh: () => Promise<XaiSubscriptionTokenSnapshot>;\n sessionId?: string;\n signal?: AbortSignal;\n fetch?: XaiFetchLike;\n baseUrl?: string;\n}): Promise<XaiVideoStatus> {\n if (!input.providerJobId.trim() || input.providerJobId.length > 1024) {\n throw new Error(\"xAI video job identity is invalid\");\n }\n const fetchImpl = input.fetch ?? defaultVideoFetch;\n const baseUrl = (input.baseUrl ?? XAI_PUBLIC_API_BASE_URL).replace(/\\/+$/, \"\");\n const request = async (token: XaiSubscriptionTokenSnapshot) =>\n await fetchWithDeadline(\n fetchImpl,\n `${baseUrl}/videos/${encodeURIComponent(input.providerJobId)}`,\n {\n method: \"GET\",\n redirect: \"error\",\n headers: publicVideoHeaders(token, input.sessionId, false),\n ...(input.signal ? { signal: input.signal } : {}),\n },\n XAI_VIDEO_POLL_REQUEST_TIMEOUT_MS,\n input.signal ?? AbortSignal.timeout(XAI_VIDEO_POLL_REQUEST_TIMEOUT_MS),\n );\n let response = await request(await input.getToken());\n if (response.status === 401) {\n await response.body?.cancel().catch(() => undefined);\n response = await request(await input.refresh());\n }\n if (!response.ok && response.status !== 202) {\n throw await providerError(\"poll\", response, input.signal ?? new AbortController().signal);\n }\n const body = await readResponseJsonBounded<Record<string, unknown>>(\n response,\n 1024 * 1024,\n \"xAI video poll\",\n input.signal ? { signal: input.signal } : {},\n );\n if (body.status === \"pending\" || body.status === \"queued\" || body.status === \"running\") {\n return { status: \"pending\" };\n }\n if (body.status === \"failed\" || body.status === \"expired\") {\n return {\n status: \"error\",\n publicReason: `xAI video generation ${body.status}`,\n };\n }\n const video =\n body.video && typeof body.video === \"object\" && !Array.isArray(body.video)\n ? (body.video as Record<string, unknown>)\n : null;\n if (body.status !== \"done\" || typeof video?.url !== \"string\") {\n throw new XaiSubscriptionError(\"invalid_response\", \"xAI video poll response is malformed\");\n }\n return {\n status: \"completed\",\n outputUrl: validateMediaUrl(video.url),\n mediaType: \"video/mp4\",\n };\n}\n\nfunction publicVideoHeaders(\n token: XaiSubscriptionTokenSnapshot,\n sessionId: string | undefined,\n json: boolean,\n): Headers {\n return new Headers({\n accept: \"application/json\",\n authorization: `Bearer ${token.accessToken}`,\n \"user-agent\": `opengeni/${XAI_CLIENT_VERSION}`,\n \"x-grok-client-version\": XAI_CLIENT_VERSION,\n \"x-grok-client-identifier\": \"opengeni\",\n \"x-grok-client-mode\": XAI_CLIENT_MODE,\n ...(sessionId ? { \"x-grok-session-id\": sessionId } : {}),\n ...(json ? { \"content-type\": \"application/json\" } : {}),\n });\n}\n\nexport async function generateXaiSubscriptionVideo(input: {\n prompt: string;\n durationSeconds?: number;\n aspectRatio?: string;\n resolution?: \"480p\" | \"720p\";\n imageUrl?: string;\n referenceImageUrls?: readonly string[];\n getToken: () => Promise<XaiSubscriptionTokenSnapshot>;\n refresh: () => Promise<XaiSubscriptionTokenSnapshot>;\n abortSignal?: AbortSignal;\n fetch?: XaiFetchLike;\n sleep?: (ms: number, signal: AbortSignal) => Promise<void>;\n baseUrl?: string;\n generationTimeoutMs?: number;\n}): Promise<XaiGeneratedVideo> {\n const baseUrl = (input.baseUrl ?? XAI_PUBLIC_API_BASE_URL).replace(/\\/+$/, \"\");\n const fetchImpl = input.fetch ?? defaultVideoFetch;\n const deadline = new AbortController();\n const timeoutMs = input.generationTimeoutMs ?? XAI_VIDEO_GENERATION_TIMEOUT_MS;\n const timer = setTimeout(\n () => deadline.abort(new XaiSubscriptionError(\"timeout\", \"xAI video generation timed out\")),\n timeoutMs,\n );\n const signal = input.abortSignal\n ? AbortSignal.any([input.abortSignal, deadline.signal])\n : deadline.signal;\n const references = (input.referenceImageUrls ?? []).map(validateMediaUrl);\n const image = input.imageUrl ? validateMediaUrl(input.imageUrl) : undefined;\n const request = async (token: XaiSubscriptionTokenSnapshot): Promise<Response> =>\n await fetchWithDeadline(\n fetchImpl,\n `${baseUrl}/videos/generations`,\n {\n method: \"POST\",\n redirect: \"error\",\n headers: {\n accept: \"application/json\",\n authorization: `Bearer ${token.accessToken}`,\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n model: XAI_VIDEO_MODEL,\n prompt: input.prompt,\n ...(image ? { image: { url: image } } : {}),\n ...(references.length > 0\n ? { reference_images: references.map((url) => ({ url })) }\n : {}),\n ...(input.durationSeconds ? { duration: input.durationSeconds } : {}),\n aspect_ratio: input.aspectRatio ?? \"16:9\",\n resolution: input.resolution ?? \"480p\",\n }),\n signal,\n },\n XAI_VIDEO_START_TIMEOUT_MS,\n signal,\n );\n try {\n let start = await request(await input.getToken());\n if (start.status === 401) {\n await start.body?.cancel().catch(() => undefined);\n start = await request(await input.refresh());\n }\n if (!start.ok) throw await providerError(\"start\", start, signal);\n const started = await readResponseJsonBounded<Record<string, unknown>>(\n start,\n 1024 * 1024,\n \"xAI video start\",\n { signal },\n );\n const requestId =\n typeof started.request_id === \"string\" && started.request_id.length > 0\n ? started.request_id\n : null;\n if (!requestId) {\n throw new XaiSubscriptionError(\n \"invalid_response\",\n \"xAI video generation did not return request_id\",\n );\n }\n const sleep = input.sleep ?? abortableSleep;\n for (;;) {\n await sleep(XAI_VIDEO_POLL_INTERVAL_MS, signal);\n let poll = await pollVideo(fetchImpl, baseUrl, requestId, await input.getToken(), signal);\n if (poll.status === 401) {\n await poll.body?.cancel().catch(() => undefined);\n poll = await pollVideo(fetchImpl, baseUrl, requestId, await input.refresh(), signal);\n }\n if (!poll.ok && poll.status !== 202) throw await providerError(\"poll\", poll, signal);\n const status = await readResponseJsonBounded<Record<string, unknown>>(\n poll,\n 1024 * 1024,\n \"xAI video poll\",\n { signal },\n );\n if (status.status === \"failed\" || status.status === \"expired\") {\n throw new XaiSubscriptionError(\n \"provider_rejected\",\n `xAI video generation ${status.status}`,\n );\n }\n if (status.status !== \"done\") continue;\n const video =\n status.video && typeof status.video === \"object\" && !Array.isArray(status.video)\n ? (status.video as Record<string, unknown>)\n : null;\n const downloadUrl = typeof video?.url === \"string\" ? validateMediaUrl(video.url) : null;\n if (!downloadUrl) {\n throw new XaiSubscriptionError(\n \"invalid_response\",\n \"xAI video generation completed without a download URL\",\n );\n }\n const download = await fetchWithDeadline(\n fetchImpl,\n downloadUrl,\n { method: \"GET\", redirect: \"error\", signal },\n XAI_VIDEO_DOWNLOAD_TIMEOUT_MS,\n signal,\n );\n if (!download.ok) throw await providerError(\"download\", download, signal);\n const bytes = await readResponseBodyBounded(\n download,\n XAI_VIDEO_MAX_BYTES,\n \"xAI video download\",\n { signal },\n );\n return { bytes, declaredMediaType: \"video/mp4\", requestId };\n }\n } finally {\n clearTimeout(timer);\n }\n}\n\nasync function pollVideo(\n fetchImpl: XaiFetchLike,\n baseUrl: string,\n requestId: string,\n token: XaiSubscriptionTokenSnapshot,\n signal: AbortSignal,\n): Promise<Response> {\n return await fetchWithDeadline(\n fetchImpl,\n `${baseUrl}/videos/${encodeURIComponent(requestId)}`,\n {\n method: \"GET\",\n redirect: \"error\",\n headers: {\n accept: \"application/json\",\n authorization: `Bearer ${token.accessToken}`,\n },\n signal,\n },\n XAI_VIDEO_POLL_REQUEST_TIMEOUT_MS,\n signal,\n );\n}\n\nasync function fetchWithDeadline(\n fetchImpl: XaiFetchLike,\n url: string,\n init: RequestInit,\n timeoutMs: number,\n outerSignal: AbortSignal,\n): Promise<Response> {\n const timeout = AbortSignal.timeout(timeoutMs);\n return await fetchImpl(url, {\n ...init,\n signal: AbortSignal.any([outerSignal, timeout]),\n });\n}\n\nasync function providerError(\n phase: string,\n response: Response,\n signal: AbortSignal,\n): Promise<XaiSubscriptionError> {\n const detail = await readResponseTextBounded(\n response,\n XAI_VIDEO_ERROR_MAX_BYTES,\n `xAI video ${phase} error`,\n { signal },\n ).catch(() => \"\");\n return new XaiSubscriptionError(\n \"provider_rejected\",\n `xAI video ${phase} failed (${response.status})${detail ? `: ${detail.replace(/\\s+/g, \" \").trim().slice(0, 1_000)}` : \"\"}`,\n response.status,\n );\n}\n\nfunction validateMediaUrl(value: string): string {\n try {\n return validateHttpUrl(value, { label: \"xAI media\" });\n } catch {\n throw new XaiSubscriptionError(\"invalid_response\", \"xAI returned an invalid media URL\");\n }\n}\n\nasync function abortableSleep(ms: number, signal: AbortSignal): Promise<void> {\n if (signal.aborted) throw signal.reason;\n await new Promise<void>((resolve, reject) => {\n const timer = setTimeout(done, ms);\n const onAbort = () => done(signal.reason);\n function done(error?: unknown) {\n clearTimeout(timer);\n signal.removeEventListener(\"abort\", onAbort);\n if (error === undefined) {\n resolve();\n } else {\n reject(error);\n }\n }\n signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n"],"mappings":"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","names":["record","record","OAUTH_MAX_RESPONSE_BYTES","readResponseJsonBounded","OAUTH_MAX_RESPONSE_BYTES","readResponseJsonBounded","pinnedFetch","pinnedFetch","pinnedFetch","readResponseJsonBounded","readResponseTextBounded","validateHttpUrl","pinnedFetch","readResponseJsonBounded","readResponseTextBounded","validateHttpUrl"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeni/xai-subscription",
3
- "version": "0.1.2",
3
+ "version": "0.1.3-canary.1",
4
4
  "description": "SuperGrok/xAI connected-subscription auth and transport. Pure HTTP, request context, quota/model metadata, and media helpers; no database dependency.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -37,7 +37,7 @@
37
37
  "prepublishOnly": "bash ../../scripts/prepublish-guard"
38
38
  },
39
39
  "dependencies": {
40
- "@opengeni/network": "^0.2.3"
40
+ "@opengeni/network": "^0.3.0-canary.1"
41
41
  },
42
42
  "engines": {
43
43
  "node": ">=18"
package/src/quota.ts CHANGED
@@ -49,8 +49,17 @@ export async function fetchXaiSubscriptionQuota(input: {
49
49
  end: dateOrNull(currentPeriod.end),
50
50
  }
51
51
  : legacyPeriod(config);
52
+ // The unified credits endpoint uses protobuf JSON: zero scalar usage is
53
+ // omitted. Only apply that default to a recognized credits-period response,
54
+ // not null/partial responses or malformed explicit percentages.
55
+ const omittedUnifiedZero =
56
+ config?.isUnifiedBillingUser === true &&
57
+ period?.end !== null &&
58
+ period?.end !== undefined &&
59
+ !Object.hasOwn(config, "creditUsagePercent") &&
60
+ !Object.hasOwn(config, "credit_usage_percent");
52
61
  return {
53
- usedPercent: directPercent ?? derivedPercent,
62
+ usedPercent: directPercent ?? derivedPercent ?? (omittedUnifiedZero ? 0 : null),
54
63
  period,
55
64
  prepaidBalanceCents: cents(config?.prepaidBalance ?? config?.prepaid_balance),
56
65
  onDemandCapCents: cents(config?.onDemandCap ?? config?.on_demand_cap),
@@ -76,6 +85,7 @@ function cents(value: unknown): number | null {
76
85
  }
77
86
 
78
87
  function finitePercent(value: unknown): number | null {
88
+ if (value === null || value === undefined || value === "") return null;
79
89
  const candidate = Number(value);
80
90
  return Number.isFinite(candidate) ? Math.max(0, Math.min(100, candidate)) : null;
81
91
  }