@zeroxyz/sdk 0.10.0 → 0.12.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/auth/managed-account.ts","../src/chains/index.ts","../src/errors.ts","../src/input-envelope.ts","../src/chains/eip712.ts","../src/transport/configured-fetch.ts","../src/x402-challenge.ts","../src/namespaces/payments.ts","../src/fetch.ts","../package.json","../src/version.ts","../src/schemas/agent.ts","../src/auth/session.ts","../src/transport/eip191.ts","../src/transport/http.ts","../src/namespaces/auth-agent.ts","../src/schemas/auth.ts","../src/schemas/device.ts","../src/namespaces/auth-device.ts","../src/namespaces/auth.ts","../src/schemas/bug-reports.ts","../src/namespaces/bug-reports.ts","../src/schemas/shared.ts","../src/schemas/capabilities.ts","../src/namespaces/capabilities.ts","../src/schemas/runs.ts","../src/namespaces/runs.ts","../src/namespaces/wallet.ts","../src/options.ts","../src/auth/credentials.ts","../src/schemas/search.ts","../src/client.ts"],"names":["toAccount","serializeTransaction","parseSignature","base","request","encodePaymentRequiredHeader","USDC_BASE","USDC_TEMPO","TEMPO_CHAIN_ID","tempoChain","ERC20_BALANCE_ABI","parseUnits","registerExactEvmScheme","X402Client","formatUnits","x402HTTPClient","createSIWxClientHook","wrapFetchWithPayment","decodePaymentResponseHeader","mppx","Mppx","mppxTempo","Receipt","isAddress","getAddress","createWalletClient","http","getRelayClient","adaptViemWallet","createRelayClient","MAINNET_RELAY_API","convertViemChainToRelayChain","baseSepolia","createPublicClient","Challenge","cancelBody","createHash","result","errorMessage","z","bytesToHex","privateKeyToAccount","mnemonicToAccount"],"mappings":"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","file":"chunk-O7424YAR.cjs","sourcesContent":["import {\n\ttype Address,\n\ttype Hex,\n\ttype LocalAccount,\n\tparseSignature,\n\tserializeTransaction,\n\ttype TypedDataDefinition,\n} from \"viem\";\nimport { toAccount } from \"viem/accounts\";\nimport type { ZeroClient } from \"../client\";\n\n// viem LocalAccount routing signing through client.auth.*. signTransaction\n// serializes locally (Tempo's serializer is async) and ships only the\n// unsigned-tx hex to the server.\nexport const createManagedAccount = (\n\tclient: ZeroClient,\n\taddress: Address,\n): LocalAccount =>\n\ttoAccount({\n\t\taddress,\n\t\tasync signMessage({ message }) {\n\t\t\t// expectedAddress pins verification to this adapter's frozen address.\n\t\t\treturn await client.auth.signMessage(\n\t\t\t\t{ message },\n\t\t\t\t{ expectedAddress: address },\n\t\t\t);\n\t\t},\n\t\tasync signTypedData(typedData) {\n\t\t\t// Forward only EIP-712 fields; no trailing cast so a dropped field\n\t\t\t// fails to compile.\n\t\t\tconst td = typedData as TypedDataDefinition;\n\t\t\treturn await client.auth.signTypedData(\n\t\t\t\t{\n\t\t\t\t\tdomain: td.domain,\n\t\t\t\t\ttypes: td.types,\n\t\t\t\t\tprimaryType: td.primaryType,\n\t\t\t\t\tmessage: td.message,\n\t\t\t\t},\n\t\t\t\t{ expectedAddress: address },\n\t\t\t);\n\t\t},\n\t\tasync signTransaction(transaction, options) {\n\t\t\tconst serialize = options?.serializer ?? serializeTransaction;\n\t\t\tconst unsigned = (await serialize(transaction)) as Hex;\n\t\t\tconst signature = await client.auth.signTransaction(\n\t\t\t\t{ unsignedTransaction: unsigned },\n\t\t\t\t{ expectedAddress: address },\n\t\t\t);\n\t\t\treturn (await serialize(transaction, parseSignature(signature))) as Hex;\n\t\t},\n\t});\n","import { base } from \"viem/chains\";\n\n// USDC contract addresses (lower-case). Canonical copies — the CLI imports\n// these from the SDK rather than re-declaring them.\n/** @internal Zero-surface constant — not part of the supported partner contract. */\nexport const USDC_BASE = \"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913\" as const;\n/** @internal Zero-surface constant — not part of the supported partner contract. */\nexport const USDC_TEMPO = \"0x20c000000000000000000000b9537d11c60e8b50\" as const;\n\n// Tempo mainnet chain id (4217). The CLI also models Tempo testnet\n// (chain id 42431) but for v1 SDK we only expose mainnet — testnet is a\n// CLI / online-test concern.\nconst TEMPO_CHAIN_ID = 4217;\n\n/** @internal Zero-surface constant — not part of the supported partner contract. */\nexport const baseChain = base;\n\n/** @internal Zero-surface constant — not part of the supported partner contract. */\nexport const tempoChain = {\n\tid: TEMPO_CHAIN_ID,\n\tname: \"Tempo\",\n\tnativeCurrency: { name: \"USD\", symbol: \"USD\", decimals: 18 },\n\trpcUrls: {\n\t\tdefault: { http: [\"https://rpc.tempo.xyz\"] },\n\t},\n} as const;\n\n/** @internal Zero-surface constant — not part of the supported partner contract. */\nexport const ERC20_BALANCE_ABI = [\n\t{\n\t\tinputs: [{ name: \"account\", type: \"address\" }],\n\t\tname: \"balanceOf\",\n\t\toutputs: [{ name: \"\", type: \"uint256\" }],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n] as const;\n\n// USDC is 6 decimals on every chain Zero supports. Hoisted as a constant\n// so the wallet namespace can call viem's formatUnits without re-stating it.\n/** @internal Zero-surface constant — not part of the supported partner contract. */\nexport const USDC_DECIMALS = 6;\n\n/** @internal Zero-surface constant — not part of the supported partner contract. */\nexport type BalanceChainId = \"base\" | \"tempo\";\n","import type { PaymentSessionMeta } from \"./namespaces/payments\";\n\nexport type ZeroErrorCode =\n\t| \"api_error\"\n\t| \"auth_error\"\n\t| \"auth_session_expired\"\n\t| \"auth_no_credentials\"\n\t| \"payment_error\"\n\t| \"payment_session_close_failed\"\n\t| \"insufficient_funds\"\n\t| \"wallet_error\"\n\t| \"validation_error\"\n\t| \"timeout_error\"\n\t| \"configuration_error\";\n\ntype ZeroErrorOptions = {\n\tcause?: unknown;\n};\n\n// All SDK-thrown errors extend ZeroError so consumers can `catch (e) { if (e\n// instanceof ZeroError) ... }`. The `code` field is the narrow discriminator\n// for cross-bundle reliability — `instanceof` fails when the SDK is loaded\n// from multiple realms (e.g., bundled twice), but `.code` does not.\nexport class ZeroError extends Error {\n\treadonly code: ZeroErrorCode;\n\n\tconstructor(\n\t\tcode: ZeroErrorCode,\n\t\tmessage: string,\n\t\toptions?: ZeroErrorOptions,\n\t) {\n\t\tsuper(message, options?.cause ? { cause: options.cause } : undefined);\n\t\tthis.name = \"ZeroError\";\n\t\tthis.code = code;\n\t}\n}\n\ntype ApiErrorInit = {\n\tstatus: number;\n\trequestId?: string | undefined;\n\tbody?: unknown;\n\tcause?: unknown;\n};\n\nexport class ZeroApiError extends ZeroError {\n\treadonly status: number;\n\treadonly requestId: string | undefined;\n\treadonly body: unknown;\n\n\tconstructor(message: string, init: ApiErrorInit) {\n\t\tsuper(\"api_error\", message, { cause: init.cause });\n\t\tthis.name = \"ZeroApiError\";\n\t\tthis.status = init.status;\n\t\tthis.requestId = init.requestId;\n\t\tthis.body = init.body;\n\t}\n}\n\ntype AuthErrorCode = Extract<\n\tZeroErrorCode,\n\t\"auth_error\" | \"auth_session_expired\" | \"auth_no_credentials\"\n>;\n\nexport class ZeroAuthError extends ZeroError {\n\tconstructor(\n\t\tcode: AuthErrorCode,\n\t\tmessage: string,\n\t\toptions?: ZeroErrorOptions,\n\t) {\n\t\tsuper(code, message, options);\n\t\tthis.name = \"ZeroAuthError\";\n\t}\n}\n\ntype AgentAuthErrorInit = {\n\tstatus: number;\n\tbody?: unknown;\n\tcause?: unknown;\n};\n\n// Failures from the auth.md agent-account surface. Most of that surface is\n// hosted on the AuthKit domain (registration, claim ceremony, token\n// endpoint) — a different host than the Zero API — so these are not\n// ZeroApiErrors. `status` is 0 when no HTTP response was involved (network\n// failure, discovery found no agent_auth-capable authorization server).\nexport class ZeroAgentAuthError extends ZeroError {\n\treadonly status: number;\n\treadonly body: unknown;\n\n\tconstructor(message: string, init: AgentAuthErrorInit) {\n\t\tsuper(\"auth_error\", message, { cause: init.cause });\n\t\tthis.name = \"ZeroAgentAuthError\";\n\t\tthis.status = init.status;\n\t\tthis.body = init.body;\n\t}\n\n\t// The error code the SERVER sent, distinct from ZeroError's `code`\n\t// discriminator. WorkOS error bodies carry {code, message}; OAuth-style\n\t// ones carry {error}.\n\tget serverCode(): string | null {\n\t\tconst body = this.body as { code?: unknown; error?: unknown } | null;\n\t\tif (typeof body?.code === \"string\") return body.code;\n\t\tif (typeof body?.error === \"string\") return body.error;\n\t\treturn null;\n\t}\n}\n\nexport class ZeroPaymentError extends ZeroError {\n\tconstructor(message: string, options?: ZeroErrorOptions) {\n\t\tsuper(\"payment_error\", message, options);\n\t\tthis.name = \"ZeroPaymentError\";\n\t}\n}\n\ntype InsufficientFundsInit = {\n\t// Human-readable USDC amounts (already formatUnits'd) so consumers can\n\t// surface \"fund $B\" without re-deriving decimals.\n\thave: string;\n\tneed: string;\n\tcause?: unknown;\n};\n\n// Thrown PRE-SIGN when the payer wallet can't cover the challenge amount.\n// This is a WALLET condition — the capability is fine, the wallet is empty —\n// so `client.fetch` maps it to outcome `insufficient_funds` and records NO\n// run (it must never be charged against the cap as a 402/payment_gated).\nexport class ZeroInsufficientFundsError extends ZeroError {\n\treadonly have: string;\n\treadonly need: string;\n\n\tconstructor(message: string, init: InsufficientFundsInit) {\n\t\tsuper(\"insufficient_funds\", message, { cause: init.cause });\n\t\tthis.name = \"ZeroInsufficientFundsError\";\n\t\tthis.have = init.have;\n\t\tthis.need = init.need;\n\t}\n}\n\ntype SessionCloseFailedInit = {\n\tsession: PaymentSessionMeta;\n\tresponse: Response;\n\tcapturedAmount: string;\n\tcause?: unknown;\n};\n\n// Thrown when an MPP channel was opened (and possibly used) but the close\n// voucher was rejected by the seller. Carries the session metadata so the\n// caller can reconcile the orphaned channel out-of-band.\nexport class ZeroSessionCloseFailedError extends ZeroError {\n\treadonly session: PaymentSessionMeta;\n\treadonly response: Response;\n\treadonly capturedAmount: string;\n\n\tconstructor(message: string, init: SessionCloseFailedInit) {\n\t\tsuper(\"payment_session_close_failed\", message, { cause: init.cause });\n\t\tthis.name = \"ZeroSessionCloseFailedError\";\n\t\tthis.session = init.session;\n\t\tthis.response = init.response;\n\t\tthis.capturedAmount = init.capturedAmount;\n\t}\n}\n\nexport class ZeroWalletError extends ZeroError {\n\tconstructor(message: string, options?: ZeroErrorOptions) {\n\t\tsuper(\"wallet_error\", message, options);\n\t\tthis.name = \"ZeroWalletError\";\n\t}\n}\n\ntype ValidationErrorOptions = ZeroErrorOptions & {\n\t// Raw response body that failed validation. Stashed off the message\n\t// string so it doesn't land in logger integrations (Sentry/Datadog)\n\t// that capture `.message` — refresh / auth bodies contain rotated\n\t// tokens that must not leak.\n\tbody?: string;\n};\n\nexport class ZeroValidationError extends ZeroError {\n\treadonly body: string | undefined;\n\n\tconstructor(message: string, options?: ValidationErrorOptions) {\n\t\tsuper(\"validation_error\", message, options);\n\t\tthis.name = \"ZeroValidationError\";\n\t\tthis.body = options?.body;\n\t}\n}\n\nexport class ZeroTimeoutError extends ZeroError {\n\tconstructor(message: string, options?: ZeroErrorOptions) {\n\t\tsuper(\"timeout_error\", message, options);\n\t\tthis.name = \"ZeroTimeoutError\";\n\t}\n}\n\nexport class ZeroConfigurationError extends ZeroError {\n\tconstructor(message: string, options?: ZeroErrorOptions) {\n\t\tsuper(\"configuration_error\", message, options);\n\t\tthis.name = \"ZeroConfigurationError\";\n\t}\n}\n","/**\n * Zero's HTTP-transport envelope — `{ input: { type: \"http\", method, queryParams,\n * body } }` — is the proxy descriptor a cap stores, NOT the user-facing request.\n * Some caps (esp. x402 GET endpoints mis-indexed with an MPP-style envelope)\n * carry it in their `bodySchema`/`example`, which leads agents to send the whole\n * wrapper as a body → the SDK infers POST → the GET endpoint 404s.\n *\n * These pure helpers unwrap the envelope so BOTH the CLI display AND SDK-direct\n * partners read the real request shape (queryParams for reads, body for writes).\n * Transport-schema logic belongs in the SDK (the CLI is a thin shell over it);\n * the CLI imports these instead of keeping its own copy.\n */\n\nexport type JsonSchemaNode = Record<string, unknown>;\n\nexport const asSchemaNode = (v: unknown): JsonSchemaNode | null =>\n\tv && typeof v === \"object\" && !Array.isArray(v)\n\t\t? (v as JsonSchemaNode)\n\t\t: null;\n\n/**\n * The JSON Schema nodes (each carrying `.properties`/`.required`) for the query\n * params and body a cap accepts. Handles two shapes:\n * - wrapped envelope: `{ properties: { input: { properties: { queryParams, body } } } }`\n * - flat: `{ type, required, properties: {...} }` — routed to queryParams for\n * GET-like verbs (GET/DELETE), body otherwise.\n */\nexport const extractInputEnvelope = (\n\tbodySchema: Record<string, unknown> | null | undefined,\n\tmethod: string,\n): { queryParams?: JsonSchemaNode; body?: JsonSchemaNode } => {\n\tconst root = asSchemaNode(bodySchema);\n\tif (!root) return {};\n\tconst props = asSchemaNode(root.properties);\n\tif (!props) return {};\n\n\t// Shape 1: wrapped envelope.\n\tconst inputProps = asSchemaNode(asSchemaNode(props.input)?.properties);\n\tif (inputProps) {\n\t\treturn {\n\t\t\tqueryParams: asSchemaNode(inputProps.queryParams) ?? undefined,\n\t\t\tbody: asSchemaNode(inputProps.body) ?? undefined,\n\t\t};\n\t}\n\n\t// Shape 2: flat — route the root by verb.\n\tconst upperMethod = method.toUpperCase();\n\tconst isGetLike = upperMethod === \"GET\" || upperMethod === \"DELETE\";\n\treturn isGetLike ? { queryParams: root } : { body: root };\n};\n\n/**\n * Unwrap a stored example request from the HTTP-transport envelope to the\n * meaningful inner payload — body for writes, queryParams for reads. Returns the\n * request unchanged when it isn't an envelope, or null when the envelope carries\n * no real input (e.g. a GET with empty queryParams).\n */\nexport const unwrapTransportEnvelope = (request: unknown): unknown => {\n\tconst input = asSchemaNode(asSchemaNode(request)?.input);\n\tif (!input || input.type !== \"http\") return request; // not an envelope — as-is\n\tconst body = input.body;\n\tconst hasBody =\n\t\tbody !== undefined &&\n\t\tbody !== null &&\n\t\t!(typeof body === \"object\" && Object.keys(body).length === 0);\n\tif (hasBody) return body;\n\tconst qp = asSchemaNode(input.queryParams);\n\tif (qp && Object.keys(qp).length > 0) return qp;\n\treturn null; // no meaningful input to show\n};\n\nconst GET_LIKE = new Set([\"GET\", \"HEAD\", \"DELETE\"]);\n\nconst appendQueryParams = (url: string, params: JsonSchemaNode): string => {\n\tconst entries = Object.entries(params).filter(([, v]) => v != null);\n\tif (entries.length === 0) return url;\n\ttry {\n\t\tconst u = new URL(url);\n\t\tfor (const [k, v] of entries) u.searchParams.set(k, String(v));\n\t\treturn u.toString();\n\t} catch {\n\t\t// Relative/opaque URL — fall back to manual append (still better than\n\t\t// dropping the params into a body the GET endpoint won't read).\n\t\tconst qs = entries\n\t\t\t.map(\n\t\t\t\t([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`,\n\t\t\t)\n\t\t\t.join(\"&\");\n\t\treturn url.includes(\"?\") ? `${url}&${qs}` : `${url}?${qs}`;\n\t}\n};\n\n/**\n * Normalize a request whose body is Zero's HTTP-transport envelope\n * (`{ input: { type:\"http\", method, queryParams, body } }`) into a real wire\n * request. The envelope is never a wire format (MPP/x402 both call the endpoint\n * URL directly, layering payment), so an agent that sends the envelope as a body\n * would otherwise make the SDK infer POST and 404 a GET endpoint.\n *\n * The verb is CARRIED, not inferred: explicit `method` wins, else the envelope's\n * `input.method`, else body-presence. For GET-like verbs the envelope's\n * queryParams move onto the URL query string and the body is dropped; for writes\n * the inner `input.body` becomes the wire body. Non-envelope requests (and\n * non-string bodies) pass through untouched so `method` stays undefined and the\n * caller's own inference applies.\n */\nexport const normalizeTransportEnvelopeRequest = (\n\turl: string,\n\topts: { method?: string; body?: string | Uint8Array },\n): { url: string; method?: string; body?: string | Uint8Array } => {\n\tconst { method, body } = opts;\n\tif (typeof body !== \"string\") return { url, method, body };\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(body);\n\t} catch {\n\t\treturn { url, method, body }; // not JSON — leave as-is\n\t}\n\tconst input = asSchemaNode(asSchemaNode(parsed)?.input);\n\tif (!input || input.type !== \"http\") return { url, method, body };\n\n\tconst innerBody = input.body;\n\tconst hasInnerBody =\n\t\tinnerBody !== undefined &&\n\t\tinnerBody !== null &&\n\t\t!(typeof innerBody === \"object\" && Object.keys(innerBody).length === 0);\n\tconst verb = (\n\t\tmethod ??\n\t\t(typeof input.method === \"string\" ? input.method : undefined) ??\n\t\t(hasInnerBody ? \"POST\" : \"GET\")\n\t).toUpperCase();\n\n\tif (GET_LIKE.has(verb)) {\n\t\tconst qp = asSchemaNode(input.queryParams);\n\t\treturn {\n\t\t\turl: qp ? appendQueryParams(url, qp) : url,\n\t\t\tmethod: verb,\n\t\t\tbody: undefined,\n\t\t};\n\t}\n\treturn {\n\t\turl,\n\t\tmethod: verb,\n\t\tbody: hasInnerBody ? JSON.stringify(innerBody) : undefined,\n\t};\n};\n","// Backfills the EIP-712 domain (name/version) for well-known assets when\n// the x402 challenge omits it. Getting the domain wrong is silent and\n// brutal: the signed TransferWithAuthorization recovers a different\n// signer, the facilitator returns `invalid_payload`, and the call fails\n// opaquely.\n\nconst KNOWN_EIP712_DOMAINS: Record<string, { name: string; version: string }> =\n\t{\n\t\t// Base mainnet USDC. On-chain `name()` is \"USD Coin\" (NOT \"USDC\")\n\t\t// — verified via the contract's name() / version().\n\t\t\"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913\": {\n\t\t\tname: \"USD Coin\",\n\t\t\tversion: \"2\",\n\t\t},\n\t\t// Base Sepolia USDC. Testnet's on-chain `name()` is \"USDC\",\n\t\t// differs from mainnet's \"USD Coin\".\n\t\t\"0x036cbd53842c5426634e7929541ec2318f3dcf7e\": {\n\t\t\tname: \"USDC\",\n\t\t\tversion: \"2\",\n\t\t},\n\t};\n\n// Provider values win per-field, but empty/whitespace-only/whitespace-padded\n// values are treated as absent — passing them verbatim into the domain\n// separator would also produce a contract mismatch. Trim the returned\n// value to handle the padded case.\nconst trimmedOrUndefined = (v: unknown): string | undefined => {\n\tif (typeof v !== \"string\") return undefined;\n\tconst t = v.trim();\n\treturn t.length > 0 ? t : undefined;\n};\n\n// Trim every string field in `extra` regardless of asset known/unknown.\n// Without this, an unknown asset (fork / new variant) shipping a\n// whitespace-padded field would re-trigger the silent failure mode\n// this file warns about.\nconst trimStringFields = (\n\textra: Record<string, unknown> | undefined,\n): Record<string, unknown> | undefined => {\n\tif (!extra) return extra;\n\tconst out: Record<string, unknown> = {};\n\tfor (const [k, v] of Object.entries(extra)) {\n\t\tout[k] = typeof v === \"string\" ? v.trim() : v;\n\t}\n\treturn out;\n};\n\nexport const withKnownEip712Domain = (\n\tasset: string | undefined,\n\textra: Record<string, unknown> | undefined,\n): Record<string, unknown> | undefined => {\n\tconst trimmedExtra = trimStringFields(extra);\n\tconst known = KNOWN_EIP712_DOMAINS[(asset ?? \"\").toLowerCase()];\n\tif (!known) return trimmedExtra;\n\treturn {\n\t\t...trimmedExtra,\n\t\tname: trimmedOrUndefined(trimmedExtra?.name) ?? known.name,\n\t\tversion: trimmedOrUndefined(trimmedExtra?.version) ?? known.version,\n\t};\n};\n","import type { ZeroClient } from \"../client\";\nimport {\n\tZeroApiError,\n\tZeroConfigurationError,\n\tZeroTimeoutError,\n} from \"../errors\";\n\n// AbortSignal.any landed in Node 20.3. Required for clean lifetime of\n// the combined timeout+caller signal without per-fetch listener leaks\n// on long-lived external signals. Older runtimes hit this throw with\n// the remediation up-front (engines.node catches most installs but\n// bundlers that strip engine warnings won't).\nconst ABORT_SIGNAL_ANY_AVAILABLE =\n\ttypeof AbortSignal !== \"undefined\" &&\n\ttypeof (AbortSignal as { any?: unknown }).any === \"function\";\n\nconst headersToRecord = (h: Headers): Record<string, string> => {\n\tconst result: Record<string, string> = {};\n\th.forEach((value, key) => {\n\t\tresult[key] = value;\n\t});\n\treturn result;\n};\n\n// defaultHeaders are scoped to Zero API calls — otherwise a consumer's\n// `authorization: Bearer …` would leak to every capability URL.\n// Tradeoff: non-sensitive headers (x-trace-id, custom User-Agent) are\n// also dropped cross-origin. A per-header allowlist would be the right\n// altitude long-term but is API surface; tracked as a follow-up.\nconst isSameOriginAsBase = (urlString: string, baseUrl: string): boolean => {\n\ttry {\n\t\treturn new URL(urlString).origin === new URL(baseUrl).origin;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\n// `new Headers(init)` uses `append()` per the Fetch spec, so passing both\n// `Content-Type` and `content-type` produces a comma-joined value (e.g.\n// \"application/json, text/plain\") that breaks JSON-bodied requests\n// downstream. Dedupe case-insensitively; last writer wins per lowercased key.\nconst dedupeHeadersInit = (\n\t// biome-ignore lint/suspicious/noExplicitAny: HeadersInit isn't in @types/node global scope; runtime accepts Record/Headers/arrays\n\tinit: any,\n): Headers => {\n\tconst out = new Headers();\n\tif (init instanceof Headers) {\n\t\tinit.forEach((value, key) => {\n\t\t\tout.set(key, value);\n\t\t});\n\t\treturn out;\n\t}\n\tconst entries: Array<[string, string]> = Array.isArray(init)\n\t\t? (init as Array<[string, string]>)\n\t\t: Object.entries(init as Record<string, string>);\n\tfor (const [key, value] of entries) {\n\t\tout.set(key, value);\n\t}\n\treturn out;\n};\n\n// Returns a fetch impl that applies the client's transport config:\n// - merges defaultHeaders under per-call/Request headers (request wins)\n// - spreads fetchOptions under per-call init\n// - enforces `client.timeout` via AbortController, combined with the\n// caller's signal AND fetchOptions.signal via AbortSignal.any\n// - maps AbortError → ZeroTimeoutError (timer) or ZeroApiError (caller)\n//\n// Two input shapes need separate handling:\n// 1. URL/string + init — standard case (transport's `request()`).\n// 2. Request (no init) — @x402/fetch's `await fetch(request)` pattern.\n// The Request carries PAYMENT-SIGNATURE / X-PAYMENT headers AND the\n// caller's signal; both must survive (init.signal would REPLACE the\n// Request's signal per Fetch spec, dropping caller-abort).\n//\n// Per-leg timeout: each invocation gets its own timeout (the per-call\n// `overrides.timeoutMs` when set, else client.timeout). With @x402's\n// internal retries + transport/http.ts's refresh+retry loop, wall-clock\n// for a single user call can reach ~8× the timeout. Consumers needing a\n// hard deadline should wrap with their own AbortController.\nexport const buildConfiguredFetch = (\n\tclient: ZeroClient,\n\toverrides?: { timeoutMs?: number },\n): typeof fetch => {\n\tconst timeoutMs = overrides?.timeoutMs ?? client.timeout;\n\tconst impl = async (\n\t\tinput: Parameters<typeof fetch>[0],\n\t\tinit?: RequestInit,\n\t): Promise<Response> => {\n\t\tconst controller = new AbortController();\n\t\tconst timer = setTimeout(() => controller.abort(), timeoutMs);\n\n\t\tconst isRequestInput =\n\t\t\ttypeof Request !== \"undefined\" && input instanceof Request;\n\n\t\t// Collect every caller-controlled signal: init.signal (URL+init\n\t\t// path), input.signal (Request path — @x402 sets this), AND\n\t\t// fetchOptions.signal (whole-client signal, e.g. server-shutdown).\n\t\tconst callerSignals: AbortSignal[] = [];\n\t\tif (init?.signal) callerSignals.push(init.signal);\n\t\tif (isRequestInput && input.signal) callerSignals.push(input.signal);\n\t\tconst fetchOptionsSignal = (\n\t\t\tclient.fetchOptions as { signal?: AbortSignal } | undefined\n\t\t)?.signal;\n\t\tif (fetchOptionsSignal) callerSignals.push(fetchOptionsSignal);\n\n\t\t// AbortSignal.any combines timer + caller signals; the combined\n\t\t// signal's lifetime tracks its inputs, so late aborts during body\n\t\t// read still cancel the stream.\n\t\tif (callerSignals.length > 0 && !ABORT_SIGNAL_ANY_AVAILABLE) {\n\t\t\tclearTimeout(timer);\n\t\t\tthrow new ZeroConfigurationError(\n\t\t\t\t\"AbortSignal.any is required for signal handling and is not available in this runtime. The SDK requires Node 20.3+. Check `process.version` (or your bundler's target).\",\n\t\t\t);\n\t\t}\n\t\tconst combinedSignal =\n\t\t\tcallerSignals.length > 0\n\t\t\t\t? AbortSignal.any([controller.signal, ...callerSignals])\n\t\t\t\t: controller.signal;\n\n\t\t// Distinguishing timer-fired vs caller-aborted via signal.aborted\n\t\t// is unreliable — multiple caller signals can race, and on the\n\t\t// Request-input path the caller signal lives on input, not init.\n\t\t// Flip a flag from a listener and consult it in the catch.\n\t\tlet abortedByCaller = false;\n\t\tconst onCallerAbort = (): void => {\n\t\t\tabortedByCaller = true;\n\t\t};\n\t\tfor (const sig of callerSignals) {\n\t\t\tif (sig.aborted) {\n\t\t\t\tabortedByCaller = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tsig.addEventListener(\"abort\", onCallerAbort, { once: true });\n\t\t}\n\n\t\ttry {\n\t\t\tlet response: Response;\n\t\t\tif (isRequestInput) {\n\t\t\t\t// Header precedence (low → high):\n\t\t\t\t// defaultHeaders → init.headers → Request.headers\n\t\t\t\t// Request wins because @x402's payment headers\n\t\t\t\t// (PAYMENT-SIGNATURE / X-PAYMENT) must survive layering.\n\t\t\t\tconst injectDefaults = isSameOriginAsBase(input.url, client.baseUrl);\n\t\t\t\tconst merged = new Headers(injectDefaults ? client.defaultHeaders : {});\n\t\t\t\tif (init?.headers) {\n\t\t\t\t\tdedupeHeadersInit(init.headers).forEach((value, key) => {\n\t\t\t\t\t\tmerged.set(key, value);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tinput.headers.forEach((value, key) => {\n\t\t\t\t\tmerged.set(key, value);\n\t\t\t\t});\n\t\t\t\t// Rebuild via Request so the runtime re-infers body-derived\n\t\t\t\t// headers (e.g. multipart Content-Type for FormData).\n\t\t\t\t// Clone only when there's a body — Request construction\n\t\t\t\t// marks the source disturbed+locked, but only matters\n\t\t\t\t// when it has a body to disturb.\n\t\t\t\tconst source = input.body !== null ? input.clone() : input;\n\t\t\t\tconst rebuilt = new Request(source, {\n\t\t\t\t\theaders: headersToRecord(merged),\n\t\t\t\t});\n\t\t\t\tconst { headers: _initHeaders, ...initRest } = init ?? {};\n\t\t\t\tresponse = await client.fetchImpl(rebuilt, {\n\t\t\t\t\t...client.fetchOptions,\n\t\t\t\t\t...initRest,\n\t\t\t\t\tsignal: combinedSignal,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// Standard URL/string path. defaultHeaders gated on\n\t\t\t\t// same-origin (see Request branch). Skip the Headers\n\t\t\t\t// round-trip when no defaults AND no init.headers.\n\t\t\t\tlet mergedHeaders: Record<string, string> | undefined;\n\t\t\t\tconst urlString = typeof input === \"string\" ? input : String(input);\n\t\t\t\tconst injectDefaults = isSameOriginAsBase(urlString, client.baseUrl);\n\t\t\t\tconst defaults = injectDefaults ? client.defaultHeaders : {};\n\t\t\t\tconst hasDefaults = injectDefaults && Object.keys(defaults).length > 0;\n\t\t\t\tif (hasDefaults || init?.headers) {\n\t\t\t\t\tconst merged = new Headers(defaults);\n\t\t\t\t\tif (init?.headers) {\n\t\t\t\t\t\tdedupeHeadersInit(init.headers).forEach((value, key) => {\n\t\t\t\t\t\t\tmerged.set(key, value);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tmergedHeaders = headersToRecord(merged);\n\t\t\t\t}\n\t\t\t\tresponse = await client.fetchImpl(input, {\n\t\t\t\t\t...client.fetchOptions,\n\t\t\t\t\t...init,\n\t\t\t\t\theaders: mergedHeaders,\n\t\t\t\t\tsignal: combinedSignal,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn response;\n\t\t} catch (err) {\n\t\t\tif (err instanceof Error && err.name === \"AbortError\") {\n\t\t\t\tif (abortedByCaller) {\n\t\t\t\t\tthrow new ZeroApiError(\"Request aborted by caller\", {\n\t\t\t\t\t\tstatus: 0,\n\t\t\t\t\t\tcause: err,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthrow new ZeroTimeoutError(`Request timed out after ${timeoutMs}ms`, {\n\t\t\t\t\tcause: err,\n\t\t\t\t});\n\t\t\t}\n\t\t\tthrow err;\n\t\t} finally {\n\t\t\tclearTimeout(timer);\n\t\t\t// Manual listeners need explicit removal so long-lived\n\t\t\t// external signals don't leak one listener per fetch call.\n\t\t\tfor (const sig of callerSignals) {\n\t\t\t\tsig.removeEventListener(\"abort\", onCallerAbort);\n\t\t\t}\n\t\t}\n\t};\n\treturn impl as typeof fetch;\n};\n","import { encodePaymentRequiredHeader } from \"@x402/core/http\";\n\n/**\n * True when `body` looks like an x402 payment challenge delivered in the JSON\n * response body — any `x402Version` (v1, v2, or future) with a non-empty\n * `accepts[]`. Some servers deliver the 402 challenge in the body instead of\n * the `PAYMENT-REQUIRED` header (x402 v1 always did; some v2 servers, e.g.\n * notify.melis.ai, do too).\n */\nexport const looksLikeX402Body = (body: unknown): boolean => {\n\tif (!body || typeof body !== \"object\") return false;\n\tconst b = body as Record<string, unknown>;\n\treturn (\n\t\ttypeof b.x402Version === \"number\" &&\n\t\tArray.isArray(b.accepts) &&\n\t\tb.accepts.length > 0\n\t);\n};\n\n/**\n * A v1-shaped accept uses a bare network name (e.g. \"base\", not the CAIP-2\n * \"eip155:8453\") and/or `maxAmountRequired` instead of `amount`. Some servers\n * (notify.melis.ai) send a v1 challenge but stamp `x402Version: 2`; the\n * registered v2 exact scheme only matches CAIP-2 networks, so such a challenge\n * must be presented as v1 (the v1 scheme knows bare names + `maxAmountRequired`).\n */\nconst isV1ShapedAccept = (accept: unknown): boolean => {\n\tif (!accept || typeof accept !== \"object\") return false;\n\tconst a = accept as Record<string, unknown>;\n\tconst network = typeof a.network === \"string\" ? a.network : \"\";\n\tconst bareNetwork = network !== \"\" && !network.includes(\":\");\n\tconst v1AmountField = a.maxAmountRequired != null && a.amount == null;\n\treturn bareNetwork || v1AmountField;\n};\n\n/**\n * Returns a copy of `challenge` with `x402Version` set to match the *shape* of\n * its accepts, so the matching registered scheme settles it regardless of the\n * version the server stamped: v1-shaped → 1, conformant (CAIP-2 + `amount`) → 2.\n */\nconst coerceX402BodyVersion = (\n\tchallenge: Record<string, unknown>,\n): Record<string, unknown> => {\n\tconst accepts = Array.isArray(challenge.accepts) ? challenge.accepts : [];\n\treturn { ...challenge, x402Version: accepts.some(isV1ShapedAccept) ? 1 : 2 };\n};\n\n/**\n * Wraps a fetch so that a 402 carrying an x402 challenge in the *body* (with no\n * `PAYMENT-REQUIRED` header) is rewritten to also expose that header. The\n * `@x402/core` client consumes a header-delivered challenge for every version,\n * but only consumes a *body* challenge when it is v1 (`getPaymentRequiredResponse`\n * special-cases `x402Version === 1`); a v2 body otherwise throws \"Invalid\n * payment required response\". Synthesizing the header — with the shape-correct\n * version (see `coerceX402BodyVersion`) — lets the SDK's normal flow (hooks →\n * createPaymentPayload → retry) settle body-delivered challenges.\n *\n * Gated to a stated version other than 1 so the SDK's proven native v1-body\n * path is left untouched. Header-delivered challenges pass straight through.\n */\nexport const withSynthesizedX402Header =\n\t(baseFetch: typeof fetch): typeof fetch =>\n\tasync (input, init) => {\n\t\tconst response = await baseFetch(input, init);\n\t\tif (response.status !== 402) return response;\n\t\tif (\n\t\t\tresponse.headers.get(\"payment-required\") ??\n\t\t\tresponse.headers.get(\"x-payment-required\")\n\t\t) {\n\t\t\treturn response;\n\t\t}\n\n\t\tconst text = await response.clone().text();\n\t\tlet parsed: unknown;\n\t\ttry {\n\t\t\tparsed = JSON.parse(text);\n\t\t} catch {\n\t\t\treturn response;\n\t\t}\n\n\t\tif (\n\t\t\t!looksLikeX402Body(parsed) ||\n\t\t\t(parsed as { x402Version?: number }).x402Version === 1\n\t\t) {\n\t\t\treturn response;\n\t\t}\n\n\t\tconst challenge = coerceX402BodyVersion(parsed as Record<string, unknown>);\n\t\tconst headers = new Headers(response.headers);\n\t\theaders.set(\n\t\t\t\"PAYMENT-REQUIRED\",\n\t\t\t// Validated as an x402 body above; encoder wants the concrete type.\n\t\t\tencodePaymentRequiredHeader(\n\t\t\t\tchallenge as Parameters<typeof encodePaymentRequiredHeader>[0],\n\t\t\t),\n\t\t);\n\t\t// The body is already decoded; copying the original length/encoding onto\n\t\t// a freshly-constructed Response would misdescribe it.\n\t\theaders.delete(\"content-length\");\n\t\theaders.delete(\"content-encoding\");\n\n\t\treturn new Response(text, {\n\t\t\tstatus: response.status,\n\t\t\tstatusText: response.statusText,\n\t\t\theaders,\n\t\t});\n\t};\n","import {\n\tadaptViemWallet,\n\tconvertViemChainToRelayChain,\n\tcreateClient as createRelayClient,\n\tgetClient as getRelayClient,\n\tMAINNET_RELAY_API,\n} from \"@relayprotocol/relay-sdk\";\nimport { x402Client as X402Client } from \"@x402/core/client\";\nimport { decodePaymentResponseHeader, x402HTTPClient } from \"@x402/core/http\";\nimport { registerExactEvmScheme } from \"@x402/evm/exact/client\";\nimport { createSIWxClientHook } from \"@x402/extensions/sign-in-with-x\";\nimport { wrapFetchWithPayment } from \"@x402/fetch\";\nimport { Challenge, Receipt } from \"mppx\";\nimport { Mppx, tempo as mppxTempo } from \"mppx/client\";\nimport {\n\tcreatePublicClient,\n\tcreateWalletClient,\n\tformatUnits,\n\tgetAddress,\n\thttp,\n\tisAddress,\n\ttype LocalAccount,\n\tparseUnits,\n} from \"viem\";\nimport { base, baseSepolia } from \"viem/chains\";\nimport { withKnownEip712Domain } from \"../chains/eip712\";\nimport type { ZeroClient } from \"../client\";\nimport {\n\tZeroAuthError,\n\tZeroError,\n\tZeroInsufficientFundsError,\n\tZeroPaymentError,\n\tZeroSessionCloseFailedError,\n} from \"../errors\";\nimport { buildConfiguredFetch } from \"../transport/configured-fetch\";\nimport { withSynthesizedX402Header } from \"../x402-challenge\";\n\nexport type PaymentProtocol = \"x402\" | \"mpp\";\n// v1 challenges use named networks (\"base\"); v2 uses CAIP-2 refs\n// (\"eip155:8453\"). \"unknown\" covers missing/unrecognized network fields\n// — better than misrouting reconciliation against a hard-coded chain.\nexport type PaymentChain =\n\t| \"base\"\n\t| \"base-sepolia\"\n\t| \"tempo\"\n\t| \"tempo-testnet\"\n\t| \"unknown\";\n\n// Metadata for an MPP channel after the lifecycle completes. Surfaced on\n// PaymentResult.session so callers can reconcile orphaned channels out-of-band\n// when settlement-time close fails. `recipient` is null when the challenge\n// arrived malformed (no valid recipient address) but the channel was already\n// funded — reconciliation tooling MUST treat null as \"unknown recipient,\n// reconcile manually\" rather than a real address.\nexport type PaymentSessionMeta = {\n\tchannelId: `0x${string}`;\n\tescrowContract: `0x${string}`;\n\tchainId: number;\n\trecipient: `0x${string}` | null;\n\tcumulativeAmount: string;\n};\n\nexport type PaymentResult = {\n\tprotocol: PaymentProtocol;\n\tchain: PaymentChain;\n\ttxHash: string | null;\n\tamount: string;\n\tasset: \"USDC\";\n\tsession?: PaymentSessionMeta;\n};\n\nconst NETWORK_TO_CHAIN: Record<string, PaymentChain> = {\n\tbase: \"base\",\n\t\"base-sepolia\": \"base-sepolia\",\n\t\"eip155:8453\": \"base\",\n\t\"eip155:84532\": \"base-sepolia\",\n};\n\nconst networkToChain = (network: string | undefined): PaymentChain => {\n\tif (!network) return \"unknown\";\n\tconst normalized = network.toLowerCase();\n\treturn NETWORK_TO_CHAIN[normalized] ?? \"unknown\";\n};\n\nexport type PayInput = {\n\turl: string;\n\tmethod?: string;\n\theaders?: Record<string, string>;\n\tbody?: string | Uint8Array;\n\t// Hard ceiling, USDC decimal string (e.g. \"0.10\"). Non-numeric values\n\t// throw upfront rather than silently disabling the cap.\n\tmaxPay?: string;\n\t// Per-call account override for multi-tenant servers; falls back to\n\t// the client's configured account.\n\taccount?: LocalAccount;\n\tsignal?: AbortSignal;\n\t// Per-call override of the client-level `timeout`, in milliseconds.\n\t// Applies per HTTP leg of the payment round-trip (see configured-fetch\n\t// for the per-leg semantics), not as a wall-clock deadline.\n\ttimeoutMs?: number;\n\t// Per-call cost hint, USDC decimal string. Drives the adaptive MPP\n\t// channel prefund (10× this value, floored at 1, capped at 100) when\n\t// the seller sends no suggestedDeposit and the caller didn't set\n\t// maxPay. Without it, the channel falls back to a fixed 1 USDC — fine\n\t// for cheap calls, under-funded for expensive ones.\n\tdisplayCostAmount?: string;\n};\n\nexport type PayResult = {\n\tresponse: Response;\n\tpayment: PaymentResult;\n\t// SDK-side signals the payment path observed but couldn't fully resolve\n\t// (e.g. session-intent challenge where onChannelUpdate never fired\n\t// opened=true). client.fetch merges these into FetchResult.warnings so\n\t// reconciliation tooling can filter on a single typed surface.\n\twarnings?: string[];\n};\n\n// USDC has 6 decimals; accepting > 6 fractional digits would silently\n// shift the cap via parseUnits' Math.round — e.g. '0.0000005' rounds up\n// to 1 micro-USDC (DOUBLE the intent). Strict format: integer + optional\n// 1-6 fractional digits, no sign, no scientific notation, no whitespace.\nconst MAX_PAY_RE = /^[0-9]+(\\.[0-9]{1,6})?$/;\nconst UINT_RE = /^[0-9]+$/;\n// uint256 max is 78 digits; USDC supply is ~12 digits in micro-units.\n// Cap-before-BigInt prevents denial-of-wallet-via-CPU from a malicious\n// 10K-digit amount string.\nconst MAX_AMOUNT_DIGITS = 30;\n\n// --- MPP constants + chain defs ---------------------------------------------\n\nconst USDC_BASE = \"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913\" as const;\nconst USDC_TEMPO = \"0x20c000000000000000000000b9537d11c60e8b50\" as const;\nconst PATHUSD_TEMPO = \"0x20c0000000000000000000000000000000000000\" as const;\n\nconst BASE_CHAIN_ID = 8453;\nexport const TEMPO_CHAIN_ID = 4217;\nexport const TEMPO_TESTNET_CHAIN_ID = 42431;\n\n// Fallback channel prefund (USDC decimal) when neither seller-suggested\n// deposit nor caller maxPay is available. Kept small (1 USDC) so wallets\n// with a few dollars on Base can still open a channel.\nconst DEFAULT_PREFUND = \"1\";\n\nconst tempoChain = {\n\tid: TEMPO_CHAIN_ID,\n\tname: \"Tempo\",\n\tnativeCurrency: { name: \"USD\", symbol: \"USD\", decimals: 18 },\n\trpcUrls: { default: { http: [\"https://rpc.tempo.xyz\"] } },\n} as const;\n\nconst tempoTestnetChain = {\n\tid: TEMPO_TESTNET_CHAIN_ID,\n\tname: \"Tempo Testnet\",\n\tnativeCurrency: { name: \"USD\", symbol: \"USD\", decimals: 18 },\n\trpcUrls: { default: { http: [\"https://rpc.moderato.tempo.xyz\"] } },\n} as const;\n\nconst ERC20_BALANCE_ABI = [\n\t{\n\t\tinputs: [{ name: \"account\", type: \"address\" }],\n\t\tname: \"balanceOf\",\n\t\toutputs: [{ name: \"\", type: \"uint256\" }],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n] as const;\n\n// Bridge buffer: 25% of Base balance, capped at $2 — covers the next call\n// without re-bridging on every fetch.\nexport const calculateBuffer = (baseBalance: bigint): bigint => {\n\tconst twentyFivePercent = baseBalance / 4n;\n\tconst twoDollars = 2_000_000n;\n\treturn twentyFivePercent < twoDollars ? twentyFivePercent : twoDollars;\n};\n\n// Fallback channel prefund when neither seller suggestedDeposit nor caller\n// maxPay sizes the channel. With a per-call cost hint we scale to 10× to\n// cover a handful of calls + bridge buffer, floored at 1 USDC so tiny-cost\n// channels still cover MPP fees, capped at 100 USDC so a single expensive\n// call doesn't silently open an oversized channel.\nconst ADAPTIVE_PREFUND_MULTIPLIER = 10;\nconst ADAPTIVE_PREFUND_CEILING = \"100\";\nexport const resolveDefaultPrefund = (displayCostAmount?: string): string => {\n\tconst floor = Number.parseFloat(DEFAULT_PREFUND);\n\tconst ceiling = Number.parseFloat(ADAPTIVE_PREFUND_CEILING);\n\tif (!displayCostAmount) return DEFAULT_PREFUND;\n\tconst cost = Number.parseFloat(displayCostAmount);\n\tif (!Number.isFinite(cost) || cost <= 0) return DEFAULT_PREFUND;\n\tconst scaled = cost * ADAPTIVE_PREFUND_MULTIPLIER;\n\tconst bounded = scaled < floor ? floor : scaled > ceiling ? ceiling : scaled;\n\t// Normalize to 6-decimal USDC atomic-unit granularity.\n\treturn bounded.toFixed(6).replace(/\\.?0+$/, \"\");\n};\n\n// Server's settlement receipt — base64url-encoded JSON in the\n// `Payment-Receipt` header. Carries the settled cumulative amount that\n// MUST be signed into the close voucher (signing below it is rejected by\n// the contract).\nexport type SessionReceiptPayload = {\n\tchannelId: string;\n\tchallengeId: string;\n\tacceptedCumulative: string;\n\tspent: string;\n\ttxHash?: string;\n\tmetered?: boolean;\n};\n\n// Uint strings (\"1234\") that are safe to hand to BigInt(): bounded length so\n// a 100K-digit hostile value can't drive O(n²) parsing on the hot path, and\n// shaped so BigInt() won't throw on hex/decimals/non-numeric.\nconst isUintString = (v: unknown): v is string =>\n\ttypeof v === \"string\" &&\n\tv.length > 0 &&\n\tv.length <= MAX_AMOUNT_DIGITS &&\n\tUINT_RE.test(v);\n\n// Coerce a challenge-supplied chainId (which may arrive as a string in\n// non-strict serializations) to a known Tempo chain label. Returns null when\n// the value isn't one of our supported Tempo chains — callers reject rather\n// than sign a credential for a wrong chain.\nexport const coerceTempoChainId = (\n\traw: unknown,\n): { id: number; chain: \"tempo\" | \"tempo-testnet\" } | null => {\n\tconst id =\n\t\ttypeof raw === \"number\" && Number.isFinite(raw)\n\t\t\t? raw\n\t\t\t: typeof raw === \"string\" && /^-?[0-9]+$/.test(raw)\n\t\t\t\t? Number(raw)\n\t\t\t\t: null;\n\tif (id === TEMPO_CHAIN_ID) return { id, chain: \"tempo\" };\n\tif (id === TEMPO_TESTNET_CHAIN_ID) return { id, chain: \"tempo-testnet\" };\n\treturn null;\n};\n\n// Tempo mainnet + testnet chainId set, exported so fetch.ts can map an\n// orphan's chainId to a chain label without duplicating the conditional.\nexport const tempoChainLabelFromId = (chainId: unknown): PaymentChain => {\n\tconst ok = coerceTempoChainId(chainId);\n\treturn ok ? ok.chain : \"unknown\";\n};\n\n// True when payment carries any settlement anchor (txHash OR session).\n// Orphan channels (close-failed) also return true; check `result.warnings`\n// for `mpp_session_close_failed` to distinguish clean from orphan.\nexport const paymentHasAnchor = (payment: PaymentResult | null): boolean =>\n\tpayment !== null &&\n\t(payment.txHash !== null || payment.session !== undefined);\n\n// SDK-emitted warning keys. Co-located so producers (payments.ts/fetch.ts)\n// and consumers (fetch.ts recording gate, reconciliation tooling) reference\n// one source — a rename on either side fails to compile.\n// Object.freeze so the `as const` contract holds at runtime — a hostile\n// `(FETCH_WARNINGS as any).x = '…'` would otherwise break the recording gate.\nexport const FETCH_WARNINGS = Object.freeze({\n\tpaidButStill402NotRecorded: \"paid_but_still_402_not_recorded\",\n\tpaymentSettlementUnconfirmed: \"payment_settlement_unconfirmed\",\n\tpaymentAmountUnknown: \"payment_amount_unknown\",\n\tmppSessionCloseFailed: \"mpp_session_close_failed\",\n\t// MPP session-intent challenge but onChannelUpdate never observed opened=true\n\t// before mppx.fetch resolved — a session call may have been recorded as\n\t// charge by accident. Surface for investigation.\n\tsessionOpenUnobserved: \"session_open_unobserved\",\n\t// Response body exceeded maxResponseBytes — bodyRaw / body / bodyEncoding\n\t// reflect the clipped prefix; consumers that wrote the body to disk got\n\t// a truncated file. Particularly bad for paid binary fetches.\n\tbodyTruncated: \"body_truncated\",\n} as const);\n\n// runs.create skip reasons that aren't also warnings — kept in the same\n// constant set so consumers reading runTrackingSkipped get a typed source.\nexport const FETCH_SKIP_REASONS = Object.freeze({\n\tbodyReadFailed: \"body_read_failed\",\n\tmppSessionCloseFailedNotRecorded: \"mpp_session_close_failed_not_recorded\",\n\tpaidButStill402NotRecorded: FETCH_WARNINGS.paidButStill402NotRecorded,\n\tpaymentSettlementUnconfirmed: FETCH_WARNINGS.paymentSettlementUnconfirmed,\n\t// Pre-sign abort: deliberately NOT recorded as a run — the wallet was\n\t// empty before we reached the capability, so charging it as a 402 would\n\t// corrupt cap reliability. The wallet funnel is tracked via the\n\t// fetch_executed.outcome analytics event instead.\n\tinsufficientFunds: \"insufficient_funds_not_recorded\",\n} as const);\n\n// Realistic receipt is <500 bytes; cap at 8KB so a hostile seller can't drive\n// multi-megabyte base64-decode + JSON.parse on every MPP fetch (DoS vector).\nconst MAX_RECEIPT_HEADER_BYTES = 8 * 1024;\n\nexport const decodeSessionReceiptHeader = (\n\theader: string | null,\n): SessionReceiptPayload | null => {\n\tif (!header) return null;\n\tif (header.length > MAX_RECEIPT_HEADER_BYTES) return null;\n\ttry {\n\t\tconst padLen = (4 - (header.length % 4)) % 4;\n\t\tconst padded =\n\t\t\theader.replace(/-/g, \"+\").replace(/_/g, \"/\") + \"=\".repeat(padLen);\n\t\tconst json = Buffer.from(padded, \"base64\").toString(\"utf8\");\n\t\tconst parsed = JSON.parse(json) as Record<string, unknown>;\n\t\tif (\n\t\t\ttypeof parsed.channelId !== \"string\" ||\n\t\t\ttypeof parsed.challengeId !== \"string\" ||\n\t\t\t!isUintString(parsed.acceptedCumulative) ||\n\t\t\t!isUintString(parsed.spent)\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\t\t// Optional fields — silently strip non-conforming values so a number\n\t\t// txHash doesn't leak into PaymentResult (typed as `string | null`)\n\t\t// and a non-boolean `metered` doesn't bypass the strict-equality check\n\t\t// in pickSessionCloseAmount.\n\t\tconst out: SessionReceiptPayload = {\n\t\t\tchannelId: parsed.channelId,\n\t\t\tchallengeId: parsed.challengeId,\n\t\t\tacceptedCumulative: parsed.acceptedCumulative,\n\t\t\tspent: parsed.spent,\n\t\t};\n\t\tif (typeof parsed.txHash === \"string\") out.txHash = parsed.txHash;\n\t\tif (typeof parsed.metered === \"boolean\") out.metered = parsed.metered;\n\t\treturn out;\n\t} catch {\n\t\treturn null;\n\t}\n};\n\nconst readSessionReceipt = (response: Response): SessionReceiptPayload | null =>\n\tdecodeSessionReceiptHeader(\n\t\tresponse.headers.get(\"Payment-Receipt\") ??\n\t\t\tresponse.headers.get(\"payment-receipt\"),\n\t);\n\n// Sign close at MAX(receipt.acceptedCumulative, open-time deposit). Signing\n// below the server's settled amount is rejected by the escrow contract.\n// Exception: `metered: true` signals the seller is refunding below deposit.\nexport const pickSessionCloseAmount = (\n\treceipt: SessionReceiptPayload | null,\n\topenTimeCumulative: bigint,\n): bigint => {\n\tif (!receipt) return openTimeCumulative;\n\tconst accepted = BigInt(receipt.acceptedCumulative);\n\tconst spent = BigInt(receipt.spent);\n\tconst fromReceipt = accepted > spent ? accepted : spent;\n\tif (receipt.metered === true) return fromReceipt;\n\treturn fromReceipt > openTimeCumulative ? fromReceipt : openTimeCumulative;\n};\n\nconst isMeteredZeroReceipt = (receipt: SessionReceiptPayload | null): boolean =>\n\treceipt?.metered === true &&\n\tBigInt(receipt.acceptedCumulative) === 0n &&\n\tBigInt(receipt.spent) === 0n;\n\n// Race a non-cancellable promise against the caller's signal so abort takes\n// effect promptly even when the inner work doesn't accept a signal (mppx's\n// createCredential being the motivating case — Tempo RPC reads can stall).\n// The inner promise keeps running; only the caller's view is cancelled.\n//\n// Post-abort rejections are logged (not silently dropped) so real bugs in the\n// underlying work — permit nonce mismatches, session-manager corruption —\n// surface even when the caller already moved on.\nconst raceWithSignal = <T>(\n\tp: Promise<T>,\n\tsignal: AbortSignal | undefined,\n\tclient: ZeroClient,\n): Promise<T> => {\n\tif (!signal) return p;\n\tif (signal.aborted) {\n\t\t// Still attach a no-op handler so any in-flight inner work that later\n\t\t// rejects doesn't surface as UnhandledPromiseRejection.\n\t\tp.catch((err) => {\n\t\t\tclient.logger?.({\n\t\t\t\tlevel: \"warn\",\n\t\t\t\tmessage: \"Post-abort rejection from in-flight work (dropped to caller)\",\n\t\t\t\tmeta: { error: err instanceof Error ? err.message : String(err) },\n\t\t\t});\n\t\t});\n\t\treturn Promise.reject(new DOMException(\"Aborted\", \"AbortError\"));\n\t}\n\treturn new Promise<T>((resolve, reject) => {\n\t\tlet settled = false;\n\t\tconst onAbort = () => {\n\t\t\tsettled = true;\n\t\t\treject(new DOMException(\"Aborted\", \"AbortError\"));\n\t\t};\n\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t\tp.then(\n\t\t\t(v) => {\n\t\t\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t\t\t\tif (settled) return; // caller already saw abort\n\t\t\t\tsettled = true;\n\t\t\t\tresolve(v);\n\t\t\t},\n\t\t\t(e) => {\n\t\t\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t\t\t\tif (settled) {\n\t\t\t\t\tclient.logger?.({\n\t\t\t\t\t\tlevel: \"warn\",\n\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\"Post-abort rejection from in-flight work (dropped to caller)\",\n\t\t\t\t\t\tmeta: { error: e instanceof Error ? e.message : String(e) },\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsettled = true;\n\t\t\t\treject(e);\n\t\t\t},\n\t\t);\n\t});\n};\n\n// Drain a response body the caller won't consume so the keep-alive socket\n// returns to undici's pool. Same pattern as fetch.ts's cancelBody.\nconst cancelBody = (response: Response): void => {\n\ttry {\n\t\tresponse.body?.cancel().catch(() => {});\n\t} catch {\n\t\t// Defensive against impls that throw synchronously.\n\t}\n};\n\nconst resolveAccount = async (\n\tclient: ZeroClient,\n\toverrideAccount: LocalAccount | undefined,\n\tsignal: AbortSignal | undefined,\n): Promise<LocalAccount> => {\n\tif (overrideAccount) return overrideAccount;\n\tconst credentials = client.getCredentials();\n\tif (credentials.kind === \"account\") return credentials.account;\n\tif (credentials.kind === \"session\") {\n\t\treturn await client.resolveManagedAccount(signal);\n\t}\n\tthrow new ZeroAuthError(\n\t\t\"auth_no_credentials\",\n\t\t\"payments.pay() requires either a client constructed with `account` or a per-call `account` override.\",\n\t);\n};\n\nconst validateMaxPay = (maxPay: string | undefined): bigint | null => {\n\tconst normalized = maxPay?.trim();\n\tif (normalized === undefined) return null;\n\tif (!MAX_PAY_RE.test(normalized)) {\n\t\tthrow new ZeroPaymentError(\n\t\t\t`Invalid maxPay format: ${JSON.stringify(maxPay)}. Expected a decimal USDC string with up to 6 fractional digits, like \"0.10\". Scientific notation, currency suffixes, and >6-decimal precision are rejected.`,\n\t\t);\n\t}\n\treturn parseUnits(normalized, 6);\n};\n\ntype ChannelEntry = {\n\tchannelId: `0x${string}`;\n\tescrowContract: `0x${string}`;\n\tcumulativeAmount: bigint;\n\topened: boolean;\n};\n\nexport class Payments {\n\tprivate relayInitialized = false;\n\n\tconstructor(private readonly client: ZeroClient) {}\n\n\t/**\n\t * Settle an x402 payment for a single request.\n\t *\n\t * Routes through `@x402/fetch`, which handles the full 402 → sign →\n\t * retry round-trip. The settlement transaction hash (when present in\n\t * the `payment-response` header AND the facilitator reports success)\n\t * is extracted into the returned `payment` metadata.\n\t *\n\t * Aborts before signing if the server's challenge amount exceeds\n\t * `maxPay`. The cap is denominated in USDC (the asset of every Zero\n\t * payment today); the API will gain a `maxPayAsset` field if other\n\t * assets are added.\n\t *\n\t * MPP capabilities use `payMpp()` instead — `client.fetch` routes based\n\t * on the detected 402 protocol.\n\t */\n\tpay = async (input: PayInput): Promise<PayResult> => {\n\t\tconst maxPayUnits = validateMaxPay(input.maxPay);\n\t\t// `maxPay: '0'` means \"never pay\" — reject upfront so both protocols\n\t\t// honor the same contract. NOTE: a \"free-only\" discovery scan should\n\t\t// omit `maxPay` entirely (or use a small positive value); the prior\n\t\t// signing-time `>` check let free 0-amount x402 challenges through\n\t\t// silently while MPP rejected them.\n\t\tif (maxPayUnits === 0n) {\n\t\t\tthrow new ZeroPaymentError(\"maxPay='0' disallows any payment.\");\n\t\t}\n\t\tconst account = await resolveAccount(\n\t\t\tthis.client,\n\t\t\tinput.account,\n\t\t\tinput.signal,\n\t\t);\n\n\t\t// Null sentinels so we can detect the \"hook never ran\" path\n\t\t// post-settle and refuse to report a misleading amount: '0'.\n\t\tlet capturedAmount: string | null = null;\n\t\tlet capturedNetwork: string | undefined;\n\t\t// The balance gate can only abort the @x402 flow via `{ abort }`, which\n\t\t// surfaces as a generic library error in the catch below. Stash the\n\t\t// typed error here and re-throw it there so `client.fetch` can classify\n\t\t// it as insufficient_funds (NOT as payment_gated/402).\n\t\tlet preflightError: ZeroInsufficientFundsError | null = null;\n\n\t\tconst x402 = registerExactEvmScheme(new X402Client(), { signer: account });\n\n\t\tx402.onBeforePaymentCreation(async (context) => {\n\t\t\tconst selected = context.selectedRequirements;\n\t\t\tif (selected) {\n\t\t\t\tconst filled = withKnownEip712Domain(selected.asset, selected.extra);\n\t\t\t\tif (filled) selected.extra = filled;\n\t\t\t}\n\t\t\tconst requirement = selected ?? context.paymentRequired.accepts[0];\n\t\t\tif (!requirement) {\n\t\t\t\treturn {\n\t\t\t\t\tabort: true,\n\t\t\t\t\treason: \"x402 challenge had no payment requirements\",\n\t\t\t\t};\n\t\t\t}\n\t\t\tcapturedNetwork = (requirement as { network?: string }).network;\n\n\t\t\tconst rawAmount =\n\t\t\t\t(requirement as { amount?: string }).amount ??\n\t\t\t\t(requirement as { maxAmountRequired?: string }).maxAmountRequired;\n\t\t\tif (!rawAmount) {\n\t\t\t\treturn { abort: true, reason: \"x402 requirement had no amount field\" };\n\t\t\t}\n\t\t\tif (rawAmount.length > MAX_AMOUNT_DIGITS || !UINT_RE.test(rawAmount)) {\n\t\t\t\treturn {\n\t\t\t\t\tabort: true,\n\t\t\t\t\treason: `x402 requirement amount is not an unsigned integer string: ${JSON.stringify(rawAmount)}`,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst rawAmountUnits = BigInt(rawAmount);\n\t\t\tcapturedAmount = formatUnits(rawAmountUnits, 6);\n\n\t\t\tif (maxPayUnits !== null && rawAmountUnits > maxPayUnits) {\n\t\t\t\treturn {\n\t\t\t\t\tabort: true,\n\t\t\t\t\treason: `Payment of ${capturedAmount} USDC exceeds maxPay ${input.maxPay}`,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// GATE: BALANCE. A genuinely empty wallet must NOT look like the cap\n\t\t\t// payment-gating us (402). Read USDC on the settlement chain BEFORE\n\t\t\t// signing and abort as ZeroInsufficientFundsError. x402 exact-evm\n\t\t\t// settles on Base; testnet challenges arrive as \"base-sepolia\" OR\n\t\t\t// CAIP-2 \"eip155:84532\" — reuse networkToChain so both forms map.\n\t\t\tconst detected = networkToChain(capturedNetwork);\n\t\t\tconst balanceChain =\n\t\t\t\tdetected === \"base-sepolia\" ? \"base-sepolia\" : \"base\";\n\t\t\t// FAIL-OPEN: a balance-read RPC blip must NOT re-introduce the false\n\t\t\t// payment_gated this gate exists to remove. On read failure, proceed\n\t\t\t// to attempt payment (the chain/facilitator is still the backstop).\n\t\t\tlet balance: bigint | null = null;\n\t\t\ttry {\n\t\t\t\tbalance = await this.readUsdcBalance(account.address, balanceChain);\n\t\t\t} catch (readErr) {\n\t\t\t\tthis.client.logger?.({\n\t\t\t\t\tlevel: \"warn\",\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t\"Pre-flight balance read failed; proceeding to attempt payment\",\n\t\t\t\t\tmeta: {\n\t\t\t\t\t\tchain: balanceChain,\n\t\t\t\t\t\terror: readErr instanceof Error ? readErr.message : String(readErr),\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (balance !== null && balance < rawAmountUnits) {\n\t\t\t\tconst have = formatUnits(balance, 6);\n\t\t\t\tpreflightError = new ZeroInsufficientFundsError(\n\t\t\t\t\t`wallet has ${have} USDC on Base, needs ${capturedAmount}.`,\n\t\t\t\t\t{ have, need: capturedAmount },\n\t\t\t\t);\n\t\t\t\treturn { abort: true, reason: preflightError.message };\n\t\t\t}\n\t\t});\n\n\t\tconst configuredFetch = buildConfiguredFetch(this.client, {\n\t\t\ttimeoutMs: input.timeoutMs,\n\t\t});\n\t\tconst httpClient = new x402HTTPClient(x402).onPaymentRequired(\n\t\t\tcreateSIWxClientHook(account),\n\t\t);\n\t\t// Synthesize a PAYMENT-REQUIRED header for servers that deliver a v2\n\t\t// challenge in the response body (e.g. notify.melis.ai) so the @x402\n\t\t// client consumes it. Header-delivered and v1-body challenges pass through.\n\t\tconst wrappedFetch = wrapFetchWithPayment(\n\t\t\twithSynthesizedX402Header(configuredFetch),\n\t\t\thttpClient,\n\t\t);\n\n\t\tlet response: Response;\n\t\ttry {\n\t\t\tresponse = await wrappedFetch(input.url, {\n\t\t\t\tmethod: input.method ?? \"GET\",\n\t\t\t\theaders: input.headers,\n\t\t\t\tbody: input.body,\n\t\t\t\tsignal: input.signal,\n\t\t\t});\n\t\t} catch (err) {\n\t\t\t// The balance gate aborted: surface the typed insufficient-funds\n\t\t\t// reason rather than the library's generic abort error, which would\n\t\t\t// otherwise collapse to a misleading payment_gated 402.\n\t\t\tif (preflightError) throw preflightError;\n\t\t\tif (err instanceof ZeroError) throw err;\n\t\t\tthrow new ZeroPaymentError(\n\t\t\t\t`x402 payment failed: ${err instanceof Error ? err.message : String(err)}`,\n\t\t\t\t{ cause: err },\n\t\t\t);\n\t\t}\n\n\t\tlet txHash: string | null = null;\n\t\tconst settlementHeader =\n\t\t\tresponse.headers.get(\"payment-response\") ??\n\t\t\tresponse.headers.get(\"x-payment-response\");\n\t\tif (settlementHeader) {\n\t\t\ttry {\n\t\t\t\tconst settlement = decodePaymentResponseHeader(settlementHeader);\n\t\t\t\tif (\n\t\t\t\t\tsettlement.success &&\n\t\t\t\t\ttypeof settlement.transaction === \"string\" &&\n\t\t\t\t\tsettlement.transaction.length > 0\n\t\t\t\t) {\n\t\t\t\t\ttxHash = settlement.transaction;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tcapturedNetwork === undefined &&\n\t\t\t\t\ttypeof (settlement as { network?: unknown }).network === \"string\"\n\t\t\t\t) {\n\t\t\t\t\tcapturedNetwork = (settlement as { network: string }).network;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Best-effort\n\t\t\t}\n\t\t}\n\n\t\tconst amount = capturedAmount ?? \"unknown\";\n\n\t\treturn {\n\t\t\tresponse,\n\t\t\tpayment: {\n\t\t\t\tprotocol: \"x402\",\n\t\t\t\tchain: networkToChain(capturedNetwork),\n\t\t\t\ttxHash,\n\t\t\t\tamount,\n\t\t\t\tasset: \"USDC\",\n\t\t\t},\n\t\t};\n\t};\n\n\t/**\n\t * @internal — called by `client.fetch` after MPP protocol detection.\n\t *\n\t * Runs a single `mppx.fetch` against the Tempo payment-channel protocol.\n\t * In-band balance/bridge logic runs from mppx's `onChallenge` callback so\n\t * the lifecycle is a single HTTP round-trip from the SDK consumer's view\n\t * (no pre-probe — session facilitators that re-run inference per request\n\t * can't reconcile the extra state).\n\t *\n\t * Session-intent capabilities (long-lived channels) close their voucher\n\t * after the seller's 200; close failures throw `ZeroSessionCloseFailedError`\n\t * carrying the orphaned channel for out-of-band reconciliation.\n\t */\n\tpayMpp = async (input: PayInput): Promise<PayResult> => {\n\t\tconst maxPayUnits = validateMaxPay(input.maxPay);\n\t\t// Match pay()'s upfront `maxPay='0'` rejection; the session-intent\n\t\t// branch in particular has no challenge amount to fall back on.\n\t\tif (maxPayUnits === 0n) {\n\t\t\tthrow new ZeroPaymentError(\"maxPay='0' disallows any payment.\");\n\t\t}\n\t\tconst account = await resolveAccount(\n\t\t\tthis.client,\n\t\t\tinput.account,\n\t\t\tinput.signal,\n\t\t);\n\t\tconst configuredFetch = buildConfiguredFetch(this.client, {\n\t\t\ttimeoutMs: input.timeoutMs,\n\t\t});\n\n\t\t// Init to 'unknown' so a future mppx change that skips onChallenge\n\t\t// (e.g. cached credential, free response) surfaces the absence rather\n\t\t// than reporting a misleading '0'.\n\t\tlet capturedAmount = \"unknown\";\n\t\tlet capturedChallenge: Challenge.Challenge | undefined;\n\t\tlet channelEntry: ChannelEntry | undefined;\n\t\tlet openTimeCumulative: bigint | undefined;\n\n\t\tconst mppx = Mppx.create({\n\t\t\tpolyfill: false,\n\t\t\tfetch: configuredFetch,\n\t\t\tmethods: [\n\t\t\t\tmppxTempo({\n\t\t\t\t\taccount,\n\t\t\t\t\tmaxDeposit:\n\t\t\t\t\t\tinput.maxPay ?? resolveDefaultPrefund(input.displayCostAmount),\n\t\t\t\t\tonChannelUpdate: (entry) => {\n\t\t\t\t\t\t// Defensive: mppx is volatile (caret-pinned ^0.6.x); a future\n\t\t\t\t\t\t// minor that serializes cumulativeAmount as number would silently\n\t\t\t\t\t\t// poison BigInt comparisons in pickSessionCloseAmount. Coerce\n\t\t\t\t\t\t// to 0n AND log so a contract violation isn't invisible.\n\t\t\t\t\t\tlet cumulative: bigint;\n\t\t\t\t\t\tif (typeof entry.cumulativeAmount === \"bigint\") {\n\t\t\t\t\t\t\tcumulative = entry.cumulativeAmount;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcumulative = 0n;\n\t\t\t\t\t\t\tthis.client.logger?.({\n\t\t\t\t\t\t\t\tlevel: \"warn\",\n\t\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\t\t\"mppx emitted non-bigint cumulativeAmount; coerced to 0n\",\n\t\t\t\t\t\t\t\tmeta: { actualType: typeof entry.cumulativeAmount },\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Capture first open for the close-amount floor (mid-session\n\t\t\t\t\t\t// voucher updates would otherwise overwrite it).\n\t\t\t\t\t\tif (openTimeCumulative === undefined && entry.opened) {\n\t\t\t\t\t\t\topenTimeCumulative = cumulative;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// LATCH `opened`: once the channel is open on-chain, a later\n\t\t\t\t\t\t// `opened:false` emit (mppx teardown, error path) must not\n\t\t\t\t\t\t// reset it. Skipping completeMppSession on a channel that's\n\t\t\t\t\t\t// already funded would orphan it with no FetchResult metadata.\n\t\t\t\t\t\tconst wasOpened = channelEntry?.opened ?? false;\n\t\t\t\t\t\tchannelEntry = {\n\t\t\t\t\t\t\tchannelId: entry.channelId as `0x${string}`,\n\t\t\t\t\t\t\tescrowContract: entry.escrowContract as `0x${string}`,\n\t\t\t\t\t\t\tcumulativeAmount: cumulative,\n\t\t\t\t\t\t\topened: wasOpened || entry.opened,\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t],\n\t\t\tonChallenge: async (challenge) => {\n\t\t\t\tcapturedChallenge = challenge;\n\t\t\t\tcapturedAmount = await this.prepareTempoFunds(\n\t\t\t\t\taccount,\n\t\t\t\t\tchallenge,\n\t\t\t\t\tmaxPayUnits,\n\t\t\t\t\tinput.displayCostAmount,\n\t\t\t\t);\n\t\t\t\treturn undefined;\n\t\t\t},\n\t\t});\n\n\t\tlet response: Response;\n\t\ttry {\n\t\t\tresponse = await mppx.fetch(input.url, {\n\t\t\t\tmethod: input.method ?? \"GET\",\n\t\t\t\theaders: input.headers,\n\t\t\t\tbody: input.body,\n\t\t\t\tsignal: input.signal,\n\t\t\t});\n\t\t} catch (err) {\n\t\t\t// If the channel funded on-chain before the failure, wrap as\n\t\t\t// ZeroSessionCloseFailedError so orphan metadata reaches fetch.ts\n\t\t\t// rather than getting zeroed by errorFetchResult. Build orphan\n\t\t\t// metadata from the locally-known channelEntry + captured challenge.\n\t\t\tif (channelEntry?.opened) {\n\t\t\t\t// 502 (not 0) so naive dashboards keying on status don't\n\t\t\t\t// misclassify this as a network error — the channel is funded\n\t\t\t\t// on-chain, the failure is between us and the seller AFTER\n\t\t\t\t// payment landed. outcome=payment_close_failed is the precise\n\t\t\t\t// signal; status carries the \"bad gateway between buyer and\n\t\t\t\t// seller\" semantic for everything else.\n\t\t\t\tthrow this.buildOrphanError(\n\t\t\t\t\tchannelEntry,\n\t\t\t\t\tcapturedChallenge,\n\t\t\t\t\tcapturedAmount,\n\t\t\t\t\tnew Response(null, { status: 502 }),\n\t\t\t\t\t`MPP payment failed after channel open: ${err instanceof Error ? err.message : String(err)}`,\n\t\t\t\t\terr,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (err instanceof ZeroError) throw err;\n\t\t\tthrow new ZeroPaymentError(\n\t\t\t\t`MPP payment failed: ${err instanceof Error ? err.message : String(err)}`,\n\t\t\t\t{ cause: err },\n\t\t\t);\n\t\t}\n\n\t\t// Session lifecycle: close the channel before returning.\n\t\tif (capturedChallenge?.intent === \"session\" && channelEntry?.opened) {\n\t\t\treturn this.completeMppSession({\n\t\t\t\turl: input.url,\n\t\t\t\tmethod: input.method ?? \"GET\",\n\t\t\t\tchallenge: capturedChallenge,\n\t\t\t\tchannelEntry,\n\t\t\t\topenTimeCumulative: openTimeCumulative ?? channelEntry.cumulativeAmount,\n\t\t\t\tresponse,\n\t\t\t\tcapturedAmount,\n\t\t\t\tmppx,\n\t\t\t\tsignal: input.signal,\n\t\t\t\tconfiguredFetch,\n\t\t\t});\n\t\t}\n\n\t\t// Session-intent + opened-not-observed: log AND surface via PayResult\n\t\t// warnings so external reconciliation tooling using the typed\n\t\t// FETCH_WARNINGS constant actually sees the signal in FetchResult.warnings.\n\t\tconst sdkWarnings: string[] = [];\n\t\tif (capturedChallenge?.intent === \"session\" && !channelEntry?.opened) {\n\t\t\tthis.client.logger?.({\n\t\t\t\tlevel: \"warn\",\n\t\t\t\tmessage:\n\t\t\t\t\t\"MPP session challenge but onChannelUpdate never observed opened=true; recording as charge.\",\n\t\t\t});\n\t\t\tsdkWarnings.push(FETCH_WARNINGS.sessionOpenUnobserved);\n\t\t}\n\n\t\t// Charge / non-session: settlement tx hash lives in the receipt's\n\t\t// `reference` field. Log parse failures via the consumer's logger so a\n\t\t// non-spec receipt doesn't silently become a no-txHash row that the\n\t\t// recording gate excludes (charge mode has neither txHash nor session).\n\t\tlet txHash: string | null = null;\n\t\ttry {\n\t\t\tconst receipt = Receipt.fromResponse(response);\n\t\t\ttxHash = receipt.reference ?? null;\n\t\t} catch (err) {\n\t\t\tthis.client.logger?.({\n\t\t\t\tlevel: \"warn\",\n\t\t\t\tmessage: \"Failed to parse MPP charge receipt; txHash unknown\",\n\t\t\t\tmeta: { error: err instanceof Error ? err.message : String(err) },\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\tresponse,\n\t\t\t...(sdkWarnings.length > 0 && { warnings: sdkWarnings }),\n\t\t\tpayment: {\n\t\t\t\tprotocol: \"mpp\",\n\t\t\t\tchain: this.tempoChainLabel(capturedChallenge),\n\t\t\t\ttxHash,\n\t\t\t\tamount: capturedAmount,\n\t\t\t\tasset: \"USDC\",\n\t\t\t},\n\t\t};\n\t};\n\n\t// Construct a ZeroSessionCloseFailedError carrying orphan metadata derived\n\t// from the locally-known channelEntry. Used by post-open error paths so the\n\t// caller can reconcile the funded channel even when the failure happened\n\t// before completeMppSession had a chance to build its full session record.\n\tprivate buildOrphanError = (\n\t\tchannelEntry: ChannelEntry,\n\t\tchallenge: Challenge.Challenge | undefined,\n\t\tcapturedAmount: string,\n\t\tresponse: Response,\n\t\tmessage: string,\n\t\tcause: unknown,\n\t): ZeroSessionCloseFailedError => {\n\t\tconst req = (challenge?.request ?? {}) as Record<string, unknown>;\n\t\tconst methodDetails = req.methodDetails as\n\t\t\t| Record<string, unknown>\n\t\t\t| undefined;\n\t\tconst rawChainId = req.chainId ?? methodDetails?.chainId;\n\t\tconst coercedChain = coerceTempoChainId(rawChainId);\n\t\tconst chainId =\n\t\t\tcoercedChain?.id ?? (typeof rawChainId === \"number\" ? rawChainId : 0);\n\t\tconst recipientRaw = req.recipient;\n\t\tconst escrowRaw = methodDetails?.escrowContract;\n\t\t// `null` rather than the zero address — burn-address sentinels are\n\t\t// indistinguishable from real recipients to out-of-band reconciliation.\n\t\tconst recipient =\n\t\t\ttypeof recipientRaw === \"string\" && isAddress(recipientRaw)\n\t\t\t\t? (getAddress(recipientRaw) as `0x${string}`)\n\t\t\t\t: null;\n\t\tconst escrowContract =\n\t\t\ttypeof escrowRaw === \"string\" && isAddress(escrowRaw)\n\t\t\t\t? (getAddress(escrowRaw) as `0x${string}`)\n\t\t\t\t: channelEntry.escrowContract;\n\t\treturn new ZeroSessionCloseFailedError(message, {\n\t\t\tsession: {\n\t\t\t\tchannelId: channelEntry.channelId,\n\t\t\t\tescrowContract,\n\t\t\t\tchainId,\n\t\t\t\trecipient,\n\t\t\t\tcumulativeAmount: channelEntry.cumulativeAmount.toString(),\n\t\t\t},\n\t\t\tresponse,\n\t\t\tcapturedAmount,\n\t\t\tcause,\n\t\t});\n\t};\n\n\tprivate prepareTempoFunds = async (\n\t\taccount: LocalAccount,\n\t\tchallenge: Challenge.Challenge,\n\t\tmaxPayUnits: bigint | null,\n\t\tdisplayCostAmount: string | undefined,\n\t): Promise<string> => {\n\t\tconst challengeRequest = challenge.request as Record<string, unknown>;\n\n\t\tlet requiredRaw: bigint;\n\t\tif (challenge.intent === \"session\") {\n\t\t\t// `> 0n` rejects the '0' / falsy-but-truthy-string case that would\n\t\t\t// otherwise open a zero-deposit channel.\n\t\t\tconst suggested = isUintString(challengeRequest.suggestedDeposit)\n\t\t\t\t? BigInt(challengeRequest.suggestedDeposit)\n\t\t\t\t: 0n;\n\t\t\tif (suggested > 0n) {\n\t\t\t\trequiredRaw = suggested;\n\t\t\t} else if (maxPayUnits !== null) {\n\t\t\t\trequiredRaw = maxPayUnits;\n\t\t\t} else {\n\t\t\t\trequiredRaw = parseUnits(resolveDefaultPrefund(displayCostAmount), 6);\n\t\t\t}\n\t\t} else {\n\t\t\t// Charge mode: bound the same way x402's onBeforePaymentCreation\n\t\t\t// does — reject non-uint amount strings AND oversized digit counts\n\t\t\t// before BigInt allocation (denial-of-wallet defense).\n\t\t\tconst rawAmount = challengeRequest.amount;\n\t\t\tif (\n\t\t\t\ttypeof rawAmount !== \"string\" ||\n\t\t\t\trawAmount.length > MAX_AMOUNT_DIGITS ||\n\t\t\t\t!UINT_RE.test(rawAmount)\n\t\t\t) {\n\t\t\t\tthrow new ZeroPaymentError(\n\t\t\t\t\t`MPP charge challenge amount is not an unsigned integer string: ${JSON.stringify(rawAmount)}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\trequiredRaw = BigInt(rawAmount);\n\t\t}\n\n\t\t// Compare in micro-USDC; parseFloat would lose precision near the cap.\n\t\tif (maxPayUnits !== null && requiredRaw > maxPayUnits) {\n\t\t\tthrow new ZeroPaymentError(\n\t\t\t\t`Payment of ${formatUnits(requiredRaw, 6)} USDC exceeds maxPay ${formatUnits(maxPayUnits, 6)}`,\n\t\t\t);\n\t\t}\n\n\t\tconst capturedAmount = formatUnits(requiredRaw, 6);\n\n\t\t// Reject unknown chainIds BEFORE bridging — otherwise funds end up\n\t\t// on mainnet while the channel opens on the wrong chain.\n\t\tconst methodDetails = challengeRequest.methodDetails as\n\t\t\t| Record<string, unknown>\n\t\t\t| undefined;\n\t\tconst coerced = coerceTempoChainId(\n\t\t\tchallengeRequest.chainId ?? methodDetails?.chainId,\n\t\t);\n\t\tif (!coerced) {\n\t\t\tthrow new ZeroPaymentError(\n\t\t\t\t`MPP challenge has missing or unsupported chainId (expected ${TEMPO_CHAIN_ID} or ${TEMPO_TESTNET_CHAIN_ID})`,\n\t\t\t);\n\t\t}\n\n\t\tconst tempoBalance = await this.readUsdcBalance(\n\t\t\taccount.address,\n\t\t\tcoerced.chain,\n\t\t);\n\t\tif (tempoBalance < requiredRaw) {\n\t\t\tif (coerced.chain === \"tempo-testnet\") {\n\t\t\t\tconst have = formatUnits(tempoBalance, 6);\n\t\t\t\tthrow new ZeroInsufficientFundsError(\n\t\t\t\t\t`Insufficient pathUSD on Tempo testnet: have ${have}, need ${capturedAmount}. Fund via the Tempo testnet faucet: https://docs.tempo.xyz/quickstart/faucet`,\n\t\t\t\t\t{ have, need: capturedAmount },\n\t\t\t\t);\n\t\t\t}\n\t\t\t// Bridge the DELTA — bridging the full requiredRaw over-funds the\n\t\t\t// channel by `tempoBalance`, locking USDC until the channel settles.\n\t\t\tawait this.bridgeBaseToTempo(account, requiredRaw - tempoBalance, {\n\t\t\t\tisSessionDeposit: challenge.intent === \"session\",\n\t\t\t\tdepositTotal: capturedAmount,\n\t\t\t});\n\t\t}\n\n\t\treturn capturedAmount;\n\t};\n\n\tprivate bridgeBaseToTempo = async (\n\t\taccount: LocalAccount,\n\t\trequiredAmount: bigint,\n\t\t// Shapes the shortfall message only. For a session deposit the amount\n\t\t// asked for is an up-front channel pre-fund (larger than a single\n\t\t// charge), so we say so rather than implying the wallet owes that much\n\t\t// per call — otherwise a cheap cap reads as alarmingly expensive.\n\t\tdepositContext?: { isSessionDeposit: boolean; depositTotal: string },\n\t): Promise<string | null> => {\n\t\tthis.ensureRelayClient();\n\t\tconst baseBalance = await this.readUsdcBalance(account.address, \"base\");\n\t\tconst buffer = calculateBuffer(baseBalance);\n\t\tconst bridgeAmount = requiredAmount + buffer;\n\n\t\tif (baseBalance < bridgeAmount) {\n\t\t\tconst have = formatUnits(baseBalance, 6);\n\t\t\tconst need = formatUnits(bridgeAmount, 6);\n\t\t\tconst message = depositContext?.isSessionDeposit\n\t\t\t\t? `wallet has ${have} USDC on Base, but this capability pre-funds a ${depositContext.depositTotal} USDC MPP payment channel up front ` +\n\t\t\t\t\t\"(the channel is deposited before the call, so it asks for more than a single charge). \" +\n\t\t\t\t\t`Needs ${need} on Base to open it — fund the wallet, or pass a smaller \\`maxPay\\` (e.g. '0.05') to size the channel down to one cheap call.`\n\t\t\t\t: `wallet has ${have} USDC on Base, needs ${need} to fund this capability's MPP payment channel ` +\n\t\t\t\t\t`(${formatUnits(requiredAmount, 6)} + ${formatUnits(buffer, 6)} buffer). ` +\n\t\t\t\t\t\"Tip: pass a smaller `maxPay` (e.g. '0.05') to size a cheaper channel.\";\n\t\t\tthrow new ZeroInsufficientFundsError(message, { have, need });\n\t\t}\n\n\t\tthis.client.logger?.({\n\t\t\tlevel: \"info\",\n\t\t\tmessage: `Bridging ${formatUnits(bridgeAmount, 6)} USDC from Base to Tempo...`,\n\t\t});\n\n\t\tconst walletClient = createWalletClient({\n\t\t\taccount,\n\t\t\tchain: base,\n\t\t\ttransport: http(),\n\t\t});\n\n\t\tconst quote = await getRelayClient().actions.getQuote({\n\t\t\tchainId: BASE_CHAIN_ID,\n\t\t\ttoChainId: TEMPO_CHAIN_ID,\n\t\t\tcurrency: USDC_BASE,\n\t\t\ttoCurrency: USDC_TEMPO,\n\t\t\tamount: bridgeAmount.toString(),\n\t\t\ttradeType: \"EXACT_INPUT\",\n\t\t\tuser: account.address,\n\t\t\trecipient: account.address,\n\t\t\t// usePermit signs an EIP-712 Permit2 message — works for both\n\t\t\t// account mode and session mode (via managed-account adapter).\n\t\t\toptions: { usePermit: true },\n\t\t});\n\n\t\tlet bridgeTxHash: string | null = null;\n\t\tawait getRelayClient().actions.execute({\n\t\t\tquote,\n\t\t\twallet: adaptViemWallet(walletClient),\n\t\t\tonProgress: ({ txHashes }) => {\n\t\t\t\tif (txHashes?.length && !bridgeTxHash) {\n\t\t\t\t\tbridgeTxHash = txHashes[0]?.txHash ?? null;\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t\treturn bridgeTxHash;\n\t};\n\n\tprivate ensureRelayClient = (): void => {\n\t\tif (this.relayInitialized) return;\n\t\tcreateRelayClient({\n\t\t\tbaseApiUrl: MAINNET_RELAY_API,\n\t\t\tsource: \"zero-sdk\",\n\t\t\t// Both chains registered so post-bridge confirmation polling can\n\t\t\t// resolve Tempo's RPC; omitting Tempo would hang waiting for a\n\t\t\t// Tempo tx hash on the Base transport.\n\t\t\tchains: [\n\t\t\t\tconvertViemChainToRelayChain(base),\n\t\t\t\tconvertViemChainToRelayChain(tempoChain),\n\t\t\t],\n\t\t});\n\t\tthis.relayInitialized = true;\n\t};\n\n\tprivate readUsdcBalance = async (\n\t\taddress: `0x${string}`,\n\t\tchain: \"base\" | \"base-sepolia\" | \"tempo\" | \"tempo-testnet\",\n\t): Promise<bigint> => {\n\t\tconst { viemChain, token } = (() => {\n\t\t\tswitch (chain) {\n\t\t\t\tcase \"base\":\n\t\t\t\t\treturn { viemChain: base, token: USDC_BASE };\n\t\t\t\tcase \"base-sepolia\":\n\t\t\t\t\treturn {\n\t\t\t\t\t\tviemChain: baseSepolia,\n\t\t\t\t\t\ttoken: \"0x036CbD53842c5426634e7929541eC2318f3dCF7e\",\n\t\t\t\t\t};\n\t\t\t\tcase \"tempo\":\n\t\t\t\t\treturn { viemChain: tempoChain, token: USDC_TEMPO };\n\t\t\t\tcase \"tempo-testnet\":\n\t\t\t\t\treturn { viemChain: tempoTestnetChain, token: PATHUSD_TEMPO };\n\t\t\t}\n\t\t})();\n\t\tconst client = createPublicClient({ chain: viemChain, transport: http() });\n\t\treturn (await client.readContract({\n\t\t\taddress: token as `0x${string}`,\n\t\t\tabi: ERC20_BALANCE_ABI,\n\t\t\tfunctionName: \"balanceOf\",\n\t\t\targs: [address],\n\t\t})) as bigint;\n\t};\n\n\t// Single normalizer — string and number chainIds resolve consistently.\n\t// Delegates to exported helper so fetch.ts's orphan path agrees.\n\tprivate tempoChainLabel = (\n\t\tchallenge: Challenge.Challenge | undefined,\n\t): PaymentChain => {\n\t\tconst req = challenge?.request as Record<string, unknown> | undefined;\n\t\tconst methodDetails = req?.methodDetails as\n\t\t\t| Record<string, unknown>\n\t\t\t| undefined;\n\t\treturn tempoChainLabelFromId(req?.chainId ?? methodDetails?.chainId);\n\t};\n\n\tprivate completeMppSession = async (params: {\n\t\turl: string;\n\t\tmethod: string;\n\t\tchallenge: Challenge.Challenge;\n\t\tchannelEntry: ChannelEntry;\n\t\topenTimeCumulative: bigint;\n\t\tresponse: Response;\n\t\tcapturedAmount: string;\n\t\tmppx: ReturnType<typeof Mppx.create>;\n\t\tsignal: AbortSignal | undefined;\n\t\tconfiguredFetch: typeof fetch;\n\t}): Promise<PayResult> => {\n\t\tconst {\n\t\t\turl,\n\t\t\tmethod,\n\t\t\tchallenge,\n\t\t\tchannelEntry,\n\t\t\topenTimeCumulative,\n\t\t\tresponse,\n\t\t\tcapturedAmount,\n\t\t\tmppx,\n\t\t\tsignal,\n\t\t\tconfiguredFetch,\n\t\t} = params;\n\n\t\tconst challengeRequest = challenge.request as Record<string, unknown>;\n\t\tconst recipientRaw = challengeRequest.recipient;\n\t\tconst methodDetails = challengeRequest.methodDetails as\n\t\t\t| Record<string, unknown>\n\t\t\t| undefined;\n\t\tconst escrowRaw = methodDetails?.escrowContract;\n\t\t// isAddress (not truthiness) — \"0x\" / \"not-an-address\" would poison\n\t\t// orphan meta and break reconciliation tooling that calls viem.\n\t\tconst recipient =\n\t\t\ttypeof recipientRaw === \"string\" && isAddress(recipientRaw)\n\t\t\t\t? (getAddress(recipientRaw) as `0x${string}`)\n\t\t\t\t: null;\n\t\tconst challengeEscrow =\n\t\t\ttypeof escrowRaw === \"string\" && isAddress(escrowRaw)\n\t\t\t\t? (getAddress(escrowRaw) as `0x${string}`)\n\t\t\t\t: null;\n\t\tconst coercedChainId = coerceTempoChainId(\n\t\t\tchallengeRequest.chainId ?? methodDetails?.chainId,\n\t\t);\n\n\t\tconst { channelId, escrowContract } = channelEntry;\n\n\t\t// Channel is funded — wrap as orphan rather than ZeroPaymentError\n\t\t// (which fetch.ts funnels through errorFetchResult, dropping the\n\t\t// channelId reconciliation handle).\n\t\tconst buildOrphanFromChannelEntry = (\n\t\t\tmessage: string,\n\t\t): ZeroSessionCloseFailedError =>\n\t\t\tthis.buildOrphanError(\n\t\t\t\tchannelEntry,\n\t\t\t\tchallenge,\n\t\t\t\tcapturedAmount,\n\t\t\t\tresponse,\n\t\t\t\tmessage,\n\t\t\t\tundefined,\n\t\t\t);\n\t\tif (!recipient || !challengeEscrow) {\n\t\t\tthrow buildOrphanFromChannelEntry(\n\t\t\t\t`MPP session challenge has missing or malformed recipient/escrowContract; channel ${channelId} is open and requires reconciliation.`,\n\t\t\t);\n\t\t}\n\t\tif (!coercedChainId) {\n\t\t\tthrow buildOrphanFromChannelEntry(\n\t\t\t\t`MPP session challenge has unsupported chainId (expected ${TEMPO_CHAIN_ID} or ${TEMPO_TESTNET_CHAIN_ID}); channel ${channelId} is open and requires reconciliation.`,\n\t\t\t);\n\t\t}\n\n\t\tconst receipt = readSessionReceipt(response);\n\t\tlet closeAmount = pickSessionCloseAmount(receipt, openTimeCumulative);\n\t\t// Rescue when one anchor is 0 but the other isn't (common: receipt\n\t\t// missing on dynamic-priced sellers).\n\t\tif (\n\t\t\tcloseAmount === 0n &&\n\t\t\tchannelEntry.cumulativeAmount > 0n &&\n\t\t\t!isMeteredZeroReceipt(receipt)\n\t\t) {\n\t\t\tcloseAmount = channelEntry.cumulativeAmount;\n\t\t}\n\t\t// Orphan-record cumulativeAmount uses the seller's authoritative\n\t\t// `acceptedCumulative` when available. The buyer's locally-computed\n\t\t// closeAmount is the right value to SIGN, but the wrong value to\n\t\t// PERSIST for reconciliation — a rejected close means the contract\n\t\t// won't honor closeAmount.\n\t\tconst reconcileAmount =\n\t\t\treceipt && isUintString(receipt.acceptedCumulative)\n\t\t\t\t? receipt.acceptedCumulative\n\t\t\t\t: closeAmount.toString();\n\t\tconst orphanedSession: PaymentSessionMeta = {\n\t\t\tchannelId,\n\t\t\tescrowContract,\n\t\t\tchainId: coercedChainId.id,\n\t\t\trecipient,\n\t\t\tcumulativeAmount: reconcileAmount,\n\t\t};\n\t\tconst closeFailed = (\n\t\t\tmessage: string,\n\t\t\tcause?: unknown,\n\t\t): ZeroSessionCloseFailedError =>\n\t\t\tnew ZeroSessionCloseFailedError(message, {\n\t\t\t\tsession: orphanedSession,\n\t\t\t\tresponse,\n\t\t\t\tcapturedAmount,\n\t\t\t\tcause,\n\t\t\t});\n\n\t\t// Refuse ambiguous zero close: without an explicit metered receipt it\n\t\t// usually means the seller omitted settlement state or mppx emitted a\n\t\t// stale channel update. A metered zero receipt is authoritative and\n\t\t// must be honored so no-result calls can close at $0.\n\t\tif (closeAmount === 0n && !isMeteredZeroReceipt(receipt)) {\n\t\t\tthrow closeFailed(\n\t\t\t\t`Refusing to sign zero close credential for channel ${channelId} — neither receipt nor channelEntry produced a nonzero cumulativeAmount. Query escrow directly to recover; check logger for an earlier 'non-bigint cumulativeAmount' warning.`,\n\t\t\t);\n\t\t}\n\n\t\t// Synthetic 402 carrying the original challenge — mppx.createCredential\n\t\t// takes a Response. Can't re-POST for a fresh challenge (dynamic-priced\n\t\t// sellers would re-charge).\n\t\tconst closeChallengeResponse = new Response(\"\", {\n\t\t\tstatus: 402,\n\t\t\theaders: { \"WWW-Authenticate\": Challenge.serialize(challenge) },\n\t\t});\n\n\t\tlet closeCredential: string;\n\t\ttry {\n\t\t\t// mppx.createCredential takes no signal; race so caller-abort\n\t\t\t// reaches the await even when Tempo RPC stalls.\n\t\t\tcloseCredential = await raceWithSignal(\n\t\t\t\tmppx.createCredential(closeChallengeResponse, {\n\t\t\t\t\taction: \"close\",\n\t\t\t\t\tchannelId,\n\t\t\t\t\tcumulativeAmountRaw: closeAmount.toString(),\n\t\t\t\t} as never),\n\t\t\t\tsignal,\n\t\t\t\tthis.client,\n\t\t\t);\n\t\t} catch (err) {\n\t\t\tthrow closeFailed(\n\t\t\t\t`Session close credential build failed for channel ${channelId}: ${err instanceof Error ? err.message : String(err)}`,\n\t\t\t\terr,\n\t\t\t);\n\t\t}\n\n\t\t// Replay method (else GET/PUT/DELETE 405 on close); drop body + headers\n\t\t// to avoid re-running LLM inference / re-firing idempotency keys.\n\t\tlet closeResponse: Response;\n\t\ttry {\n\t\t\tcloseResponse = await configuredFetch(url, {\n\t\t\t\tmethod: method.toUpperCase(),\n\t\t\t\theaders: { authorization: closeCredential },\n\t\t\t\tsignal,\n\t\t\t});\n\t\t} catch (err) {\n\t\t\t// Channel is on-chain funded — wrap as orphan so caller can reconcile.\n\t\t\tthrow closeFailed(\n\t\t\t\t`Session close request failed for channel ${channelId}: ${err instanceof Error ? err.message : String(err)}`,\n\t\t\t\terr,\n\t\t\t);\n\t\t}\n\n\t\tif (!closeResponse.ok) {\n\t\t\t// Snippet is best-effort error context; bounded so a dribbling\n\t\t\t// seller can't pin the orphan signal. .unref() so the timer\n\t\t\t// doesn't pin Node's loop in short-lived CLI processes.\n\t\t\tconst errBody = await Promise.race([\n\t\t\t\tcloseResponse.text().catch(() => \"\"),\n\t\t\t\tnew Promise<string>((resolve) => {\n\t\t\t\t\tconst t = setTimeout(() => resolve(\"\"), 1000);\n\t\t\t\t\tt.unref();\n\t\t\t\t}),\n\t\t\t]);\n\t\t\t// Drain BEFORE throwing — the race bounds wait but not the stream.\n\t\t\tcancelBody(closeResponse);\n\t\t\tthrow closeFailed(\n\t\t\t\t`Seller rejected close credential (status ${closeResponse.status}${errBody ? `: ${errBody.slice(0, 200)}` : \"\"}) for channel ${channelId}`,\n\t\t\t);\n\t\t}\n\n\t\t// Session lifecycles only land an on-chain tx at close; without\n\t\t// pulling txHash here the recording gate excludes the run entirely.\n\t\tconst closeReceipt = readSessionReceipt(closeResponse);\n\t\tcancelBody(closeResponse);\n\t\t// 0x prefix check mirrors the x402 settlement guard; consumers can\n\t\t// trust payment.txHash to startsWith('0x') or be null.\n\t\tconst rawCloseTx = closeReceipt?.txHash;\n\t\tconst closeTxHash =\n\t\t\ttypeof rawCloseTx === \"string\" && /^0x[0-9a-fA-F]+$/.test(rawCloseTx)\n\t\t\t\t? rawCloseTx\n\t\t\t\t: null;\n\t\treturn {\n\t\t\tresponse,\n\t\t\tpayment: {\n\t\t\t\tprotocol: \"mpp\",\n\t\t\t\tchain: this.tempoChainLabel(challenge),\n\t\t\t\ttxHash: closeTxHash,\n\t\t\t\tamount: capturedAmount,\n\t\t\t\tasset: \"USDC\",\n\t\t\t\tsession: {\n\t\t\t\t\tchannelId,\n\t\t\t\t\tescrowContract,\n\t\t\t\t\tchainId: coercedChainId.id,\n\t\t\t\t\trecipient,\n\t\t\t\t\tcumulativeAmount:\n\t\t\t\t\t\tcloseReceipt && isUintString(closeReceipt.acceptedCumulative)\n\t\t\t\t\t\t\t? closeReceipt.acceptedCumulative\n\t\t\t\t\t\t\t: closeAmount.toString(),\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t};\n}\n","import { createHash } from \"node:crypto\";\nimport type { LocalAccount } from \"viem\";\nimport type { ZeroClient } from \"./client\";\nimport {\n\tZeroApiError,\n\tZeroAuthError,\n\tZeroError,\n\tZeroInsufficientFundsError,\n\tZeroPaymentError,\n\tZeroSessionCloseFailedError,\n\tZeroTimeoutError,\n} from \"./errors\";\nimport { normalizeTransportEnvelopeRequest } from \"./input-envelope\";\nimport {\n\tFETCH_SKIP_REASONS,\n\tFETCH_WARNINGS,\n\ttype PaymentResult,\n\tpaymentHasAnchor,\n\ttempoChainLabelFromId,\n} from \"./namespaces/payments\";\nimport { buildConfiguredFetch } from \"./transport/configured-fetch\";\nimport { looksLikeX402Body } from \"./x402-challenge\";\n\n// Cap the 402 probe so an adversarial multi-gigabyte body can't OOM\n// the host. 1MB is well above any realistic x402 v1 challenge (even\n// hundreds of accepts × ~500 bytes each) and comfortably above the\n// CLI's effective ceiling.\n/** Returns true when `id` is a short search-attribution token (`z_xxx.N`). */\nexport const isShortToken = (id: string): boolean =>\n\tid.startsWith(\"z_\") && id.indexOf(\".\", 2) !== -1;\n\nconst MAX_402_PROBE_BYTES = 1024 * 1024;\n\n// Cap on response bodies, sized for legitimate paid responses (DeFi\n// protocol lists etc.). Over-cap bodies are truncated; JSON.parse on a\n// truncated body throws and we fall through to the raw clipped text.\nconst MAX_RESPONSE_BYTES = 10 * 1024 * 1024;\n\nexport type FetchOptions = {\n\tmethod?: string;\n\theaders?: Record<string, string>;\n\t// When `method` is omitted, presence of `body` (even empty) infers POST.\n\t// Pass `method` explicitly when building options via conditional spreads\n\t// to avoid an accidental GET→POST flip.\n\tbody?: string | Uint8Array;\n\t// Hard cap on a single paid call, in USDC. The server's challenge\n\t// amount is checked against this BEFORE signing — over-cap calls abort.\n\tmaxPay?: string;\n\t// Capability uid (`cap_…`), slug, or attribution token (`z_xxx.N` from a\n\t// search result). Without one, no run is recorded (useful for ad-hoc URLs).\n\t// Prefer the token when available — it embeds the searchId and result rank.\n\tcapabilityId?: string;\n\t/**\n\t * @deprecated Pass the `z_xxx.N` token from `search()` as `capabilityId`\n\t * instead — it embeds the searchId. This field is kept for back-compat.\n\t */\n\tsearchId?: string;\n\t// How the agent arrived at this fetch (from_search | direct_slug |\n\t// direct_url). Passed straight through to runs.create and stored on the\n\t// run's metadata so direct execution can be told apart from search-driven\n\t// runs server-side. Advisory; does not affect recording behavior.\n\tfetchOrigin?: \"from_search\" | \"direct_slug\" | \"direct_url\";\n\t// Per-call account override — useful for multi-tenant servers signing\n\t// as different wallets without rebuilding the client.\n\taccount?: LocalAccount;\n\tsignal?: AbortSignal;\n\t// Per-call override of the client-level `timeout` (default 180s), in\n\t// milliseconds. Covers the capability call only — the initial probe and\n\t// the paid retry each get this budget per HTTP leg (so wall-clock can\n\t// exceed it; see configured-fetch). Run recording against the Zero API\n\t// stays on the client-level timeout. On expiry the call throws\n\t// ZeroTimeoutError.\n\ttimeoutMs?: number;\n\t// Anonymized request body shape (field names + types, no values). The\n\t// caller knows the request before the call, so this is a simple\n\t// pass-through into runs.create — used by the body_schema refinement\n\t// pipeline to learn capability request shapes over time.\n\trequestSchema?: Record<string, unknown>;\n\t// Hard cap on the response body bytes returned via bodyRaw / body. The\n\t// default is conservative for partner SDK use (10 MB). Consumers that\n\t// stream binary media — e.g. the CLI writing audio/video to disk —\n\t// should raise this. When the cap is hit, FetchResult.warnings carries\n\t// FETCH_WARNINGS.bodyTruncated and bodyRaw is the clipped prefix.\n\tmaxResponseBytes?: number;\n\t// Adaptive prefund hint for MPP session-intent capabilities. When the\n\t// seller doesn't suggest a deposit and maxPay isn't set, the SDK sizes\n\t// the channel to 10× this value (floored at 1 USDC, capped at 100 USDC)\n\t// so a single expensive call doesn't under-fund and fail. The CLI threads\n\t// it from the search-cache entry.\n\tdisplayCostAmount?: string;\n\t// Callback to compute response-derived run metadata after the body is\n\t// read but before runs.create. Today the only post-body field the SDK\n\t// can't infer is responseSchema (caller decides shape conventions).\n\t// Error-snippet hashing is handled internally — the SDK computes it\n\t// once and uses the same value for both runs.create and FetchResult.\n\t//\n\t// Runs sync; a thrown callback is swallowed and recording proceeds.\n\tderiveRunMetadata?: (response: {\n\t\tstatus: number;\n\t\tok: boolean;\n\t\tbodyRaw: string | null;\n\t\tbodyEncoding?: \"base64\";\n\t}) => {\n\t\tresponseSchema?: Record<string, unknown>;\n\t};\n};\n\nexport type FetchOutcome =\n\t| \"success\"\n\t| \"payment_failed\"\n\t// The payer wallet can't cover the call — a wallet-funding condition, NOT\n\t// the capability failing. No run is recorded (it must never be charged as\n\t// a 402/payment_gated); surfaced only as this outcome so the wallet funnel\n\t// stays measurable via analytics without polluting cap reliability.\n\t| \"insufficient_funds\"\n\t| \"payment_rejected\"\n\t// MPP: the seller's call returned 200 but the session-close voucher was\n\t// rejected — payment metadata is present (channel orphaned) but the\n\t// caller needs to reconcile out-of-band via payment.session.\n\t| \"payment_close_failed\"\n\t| \"server_error\"\n\t| \"network_error\";\n\nexport type UpstreamError = {\n\tstatus: number;\n\tmessage?: string;\n\tsnippetHash: string;\n\tsnippetLength: number;\n\t// A conservative, agent-actionable next step for a client-side (4xx)\n\t// rejection — populated only for the high-confidence, caller-fixable\n\t// shapes (wrong HTTP method, unparseable JSON body, unrecognized/extra\n\t// fields, content-type mismatch, missing required field). Absent for 5xx\n\t// (not the caller's fault) and for anything we can't confidently\n\t// classify: a wrong hint is worse than none.\n\tfixHint?: string;\n};\n\nexport type FetchResult = {\n\trunId: string | null;\n\tok: boolean;\n\tstatus: number | null;\n\tlatencyMs: number;\n\tpayment: PaymentResult | null;\n\toutcome: FetchOutcome;\n\tbody: unknown;\n\tbodyRaw: string | null;\n\tbodyEncoding?: \"base64\";\n\terror?: string;\n\tupstreamError?: UpstreamError;\n\t// \"We tried to POST /v1/runs and it failed\" — only populated after a\n\t// runs.create attempt or when recording was requested but no credentials\n\t// were configured. Empty/absent when no recording was requested.\n\trunTrackingSkipped?: string[];\n\t// Protocol-level signals the SDK observed but couldn't fully resolve:\n\t// - paid_but_still_402_not_recorded: settlement landed but upstream\n\t// still returned 402; payment.txHash is set, no run row created\n\t// - payment_settlement_unconfirmed: payments.pay returned but no\n\t// on-chain anchor (txHash null, no session)\n\t// - payment_amount_unknown: pre-payment hook never observed an amount\n\t// - mpp_session_close_failed: seller's response was 200 but the\n\t// close voucher was rejected; payment.session carries channelId for\n\t// out-of-band reconciliation, no run row created\n\t// Reconciliation tooling should check `warnings` alongside `payment`.\n\twarnings?: string[];\n\t// Present only when the SDK attempted auto-resolution (opts.capabilityId\n\t// was absent and credentials were available). Absent when the caller\n\t// supplied capabilityId explicitly or when credentials were not configured.\n\tcapabilityResolution?: {\n\t\tresolved: boolean;\n\t\tcapabilityId?: string;\n\t\tcapabilitySlug?: string;\n\t\tmatchedVia?: string;\n\t};\n};\n\ntype PaymentRequirement = {\n\tprotocol: \"x402\" | \"mpp\" | \"unknown\";\n\traw: unknown;\n};\n\nconst TEXT_CONTENT_TYPES = [\n\t\"application/json\",\n\t\"application/xml\",\n\t\"application/javascript\",\n\t\"application/ecmascript\",\n\t\"application/x-www-form-urlencoded\",\n\t\"text/\",\n\t\"+json\",\n\t\"+xml\",\n] as const;\n\n// Per RFC 7235, WWW-Authenticate is `<scheme> [<params>]`. Match the\n// scheme token (case-insensitive); substring matching false-positives any\n// `Bearer realm=\"payment...\"`.\nconst MPP_SCHEME_TOKENS = new Set([\"payment\", \"mpp\"]);\n\n// Split a WWW-Authenticate header on challenge-separator commas, ignoring\n// commas inside quoted-string parameter values (RFC 7235 §2.1) — a naive\n// `header.split(\",\")` misdetects schemes inside `Bearer realm=\"x, y\"`.\n// Pragmatic: tracks quote depth + backslash escapes; not a full RFC 9110\n// parser, sufficient for scheme-marker detection.\nconst splitWwwAuthenticateChallenges = (header: string): string[] => {\n\tconst chunks: string[] = [];\n\tlet buf = \"\";\n\tlet inQuotes = false;\n\tfor (let i = 0; i < header.length; i++) {\n\t\tconst ch = header[i];\n\t\tif (inQuotes) {\n\t\t\tif (ch === \"\\\\\" && i + 1 < header.length) {\n\t\t\t\tbuf += ch + header[i + 1];\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch === '\"') inQuotes = false;\n\t\t\tbuf += ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === '\"') {\n\t\t\tinQuotes = true;\n\t\t\tbuf += ch;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \",\") {\n\t\t\tchunks.push(buf);\n\t\t\tbuf = \"\";\n\t\t\tcontinue;\n\t\t}\n\t\tbuf += ch;\n\t}\n\tif (buf.length > 0) chunks.push(buf);\n\treturn chunks;\n};\n\nconst isTextContentType = (contentType: string | null): boolean => {\n\tif (!contentType) return true; // assume text when unset\n\tconst lower = contentType.toLowerCase();\n\treturn TEXT_CONTENT_TYPES.some((marker) => lower.includes(marker));\n};\n\n// API keys routinely live in query strings; strip query + fragment so\n// logging via consumer-supplied loggers (Sentry, Datadog) doesn't\n// exfiltrate secrets.\nconst redactUrl = (url: string): string => {\n\ttry {\n\t\tconst u = new URL(url);\n\t\treturn `${u.origin}${u.pathname}`;\n\t} catch {\n\t\treturn \"<invalid url>\";\n\t}\n};\n\n// Detect request-body echo-back in capability errors (Express/Fastify\n// default handlers, validation libs commonly do this) so caller secrets\n// in the body don't leak through FetchResult.error. Sliding window\n// catches re-serialized bodies. Threshold 16 chars balances false-\n// positive avoidance (common 8-char fragments like emails / field\n// names collide routinely) against secret detection (most modern\n// API keys / tokens are 24+ chars). Scan capped at 64KB so a large\n// erroring body can't drive O(N×M) per non-2xx.\nconst ECHO_DETECT_MIN_LEN = 16;\nconst ECHO_DETECT_MAX_SCAN = 64 * 1024;\nconst requestBodyEchoed = (\n\tcandidate: string,\n\trequestBody: string | Uint8Array | undefined,\n): boolean => {\n\tif (requestBody === undefined) return false;\n\tconst asString =\n\t\ttypeof requestBody === \"string\"\n\t\t\t? requestBody\n\t\t\t: new TextDecoder(\"utf-8\", { fatal: false }).decode(\n\t\t\t\t\trequestBody.byteLength > ECHO_DETECT_MAX_SCAN\n\t\t\t\t\t\t? requestBody.subarray(0, ECHO_DETECT_MAX_SCAN)\n\t\t\t\t\t\t: requestBody,\n\t\t\t\t);\n\tif (asString.length < ECHO_DETECT_MIN_LEN) return false;\n\tconst scanLen = Math.min(asString.length, ECHO_DETECT_MAX_SCAN);\n\tfor (let i = 0; i + ECHO_DETECT_MIN_LEN <= scanLen; i++) {\n\t\tif (candidate.includes(asString.slice(i, i + ECHO_DETECT_MIN_LEN))) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n// Drain a response body the caller won't consume so the keep-alive\n// socket can be reused. Without this, sustained traffic against\n// early-return paths fills the pool and outbound HTTP flakes with\n// ECONNRESET. Best-effort: a stream already drained by the v1 body\n// probe rejects with \"locked\" — fine, just swallow it.\nconst cancelBody = (response: Response): void => {\n\ttry {\n\t\tresponse.body?.cancel().catch(() => {});\n\t} catch {\n\t\t// Defensive against impls that throw synchronously.\n\t}\n};\n\nconst detectPaymentRequirement = async (\n\tresponse: Response,\n): Promise<PaymentRequirement | null> => {\n\tif (response.status !== 402) return null;\n\n\t// Precedence: x402 v2 header → x402 v1 body → MPP. Payable protocols\n\t// win over the MPP refuse-path so dual-advertise caps (those that\n\t// support BOTH x402 and MPP — common in production) settle through\n\t// the path we can actually pay.\n\n\t// x402 v2: base64 JSON in PAYMENT-REQUIRED header\n\tconst x402Header =\n\t\tresponse.headers.get(\"payment-required\") ??\n\t\tresponse.headers.get(\"x-payment-required\");\n\tif (x402Header) {\n\t\tcancelBody(response);\n\t\ttry {\n\t\t\tconst decoded = JSON.parse(\n\t\t\t\tBuffer.from(x402Header, \"base64\").toString(\"utf8\"),\n\t\t\t);\n\t\t\treturn { protocol: \"x402\", raw: decoded };\n\t\t} catch {\n\t\t\treturn { protocol: \"x402\", raw: { encoded: x402Header } };\n\t\t}\n\t}\n\n\t// x402 v1/v2: challenge in the JSON response body. Content-length as\n\t// early-exit; clip mid-stream as defense against missing/wrong header.\n\t// (v2 bodies — e.g. notify.melis.ai — are settled by synthesizing the\n\t// PAYMENT-REQUIRED header in `payments.ts` before the @x402 client reads it.)\n\tconst declaredLen = Number.parseInt(\n\t\tresponse.headers.get(\"content-length\") ?? \"\",\n\t\t10,\n\t);\n\tconst bodyFits =\n\t\t!Number.isFinite(declaredLen) || declaredLen <= MAX_402_PROBE_BYTES;\n\t// Read the original body directly (no clone) — the caller never\n\t// re-reads it (throws on MPP / unknown, fresh fetch on x402). Avoids\n\t// the tee that would replace response.body with a branch and obscure\n\t// `cancelBody` semantics for later detect paths.\n\tif (bodyFits) {\n\t\ttry {\n\t\t\tconst text = await readClippedText(response, MAX_402_PROBE_BYTES);\n\t\t\tif (text) {\n\t\t\t\tconst parsed = JSON.parse(text) as unknown;\n\t\t\t\tif (looksLikeX402Body(parsed)) {\n\t\t\t\t\treturn { protocol: \"x402\", raw: parsed };\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// Body may be empty, non-JSON, or exceeded the clip threshold.\n\t\t}\n\t}\n\n\t// MPP: WWW-Authenticate: <scheme> ... — RFC 7235 §4.1 allows multiple\n\t// challenges in one header comma-separated. Splitter is quoted-string\n\t// aware so `Bearer realm=\"My, Payment area\"` does NOT false-positive.\n\tconst wwwAuth = response.headers.get(\"www-authenticate\");\n\tif (wwwAuth) {\n\t\tconst schemes = splitWwwAuthenticateChallenges(wwwAuth).map(\n\t\t\t(challenge) => challenge.trim().split(/\\s+/)[0]?.toLowerCase() ?? \"\",\n\t\t);\n\t\tif (schemes.some((scheme) => MPP_SCHEME_TOKENS.has(scheme))) {\n\t\t\tcancelBody(response);\n\t\t\treturn { protocol: \"mpp\", raw: { \"www-authenticate\": wwwAuth } };\n\t\t}\n\t}\n\n\tcancelBody(response);\n\treturn { protocol: \"unknown\", raw: {} };\n};\n\n// Read up to `max` bytes from a Response body, cancelling the stream\n// at the threshold. A null body (204, 304, HEAD, `new Response()`) is\n// treated as an empty payload — no stream, no cap concern.\nconst readClippedBytes = async (\n\tresponse: Response,\n\tmax: number,\n): Promise<Uint8Array> => {\n\tif (response.body === null) return new Uint8Array(0);\n\tconst reader = response.body.getReader();\n\tconst chunks: Uint8Array[] = [];\n\tlet total = 0;\n\ttry {\n\t\twhile (total < max) {\n\t\t\tconst { done, value } = await reader.read();\n\t\t\tif (done) break;\n\t\t\tif (!value) continue;\n\t\t\tchunks.push(value);\n\t\t\ttotal += value.byteLength;\n\t\t}\n\t} finally {\n\t\ttry {\n\t\t\tawait reader.cancel();\n\t\t} catch {\n\t\t\t// Best-effort cancel\n\t\t}\n\t}\n\tconst merged = new Uint8Array(Math.min(total, max));\n\tlet offset = 0;\n\tfor (const c of chunks) {\n\t\tconst take = Math.min(c.byteLength, max - offset);\n\t\tmerged.set(c.subarray(0, take), offset);\n\t\toffset += take;\n\t\tif (offset >= max) break;\n\t}\n\treturn merged;\n};\n\n// A partial UTF-8 sequence at the clip edge is fine — JSON.parse rejects\n// those, which is what we want for the 402 probe path.\nconst readClippedText = async (\n\tresponse: Response,\n\tmax: number,\n): Promise<string> => {\n\tconst bytes = await readClippedBytes(response, max);\n\treturn new TextDecoder().decode(bytes);\n};\n\nconst parseResponseBody = async (\n\tresponse: Response,\n\tmax: number,\n): Promise<{\n\tbody: unknown;\n\tbodyRaw: string | null;\n\tbodyEncoding?: \"base64\";\n\ttruncated: boolean;\n}> => {\n\tconst contentType = response.headers.get(\"content-type\");\n\t// Read one byte over the cap so we can distinguish \"fit exactly\" from\n\t// \"clipped at the cap\". A naive `bytes.byteLength === max` would\n\t// false-positive bodies that happen to be exactly `max` long.\n\tconst bytes = await readClippedBytes(response, max + 1);\n\tconst truncated = bytes.byteLength > max;\n\tconst view = truncated ? bytes.subarray(0, max) : bytes;\n\tconst buf = Buffer.from(view.buffer, view.byteOffset, view.byteLength);\n\tif (!isTextContentType(contentType)) {\n\t\tconst base64 = buf.toString(\"base64\");\n\t\treturn {\n\t\t\tbody: base64,\n\t\t\tbodyRaw: base64,\n\t\t\tbodyEncoding: \"base64\",\n\t\t\ttruncated,\n\t\t};\n\t}\n\tconst text = buf.toString(\"utf8\");\n\tif (contentType?.toLowerCase().includes(\"json\")) {\n\t\ttry {\n\t\t\treturn { body: JSON.parse(text), bodyRaw: text, truncated };\n\t\t} catch {\n\t\t\t// Server claimed JSON but body isn't valid (or was truncated).\n\t\t}\n\t}\n\treturn { body: text, bodyRaw: text, truncated };\n};\n\nconst UPSTREAM_ERROR_FIELDS = [\n\t\"error\",\n\t\"message\",\n\t\"detail\",\n\t\"reason\",\n\t\"error_description\",\n] as const;\nconst UPSTREAM_ERROR_MAX_LEN = 200;\nconst ERROR_SNIPPET_BYTES = 500;\n\nconst clampUpstreamMessage = (value: string): string | undefined => {\n\tconst trimmed = value.trim();\n\tif (!trimmed) return undefined;\n\treturn trimmed.length > UPSTREAM_ERROR_MAX_LEN\n\t\t? `${trimmed.slice(0, UPSTREAM_ERROR_MAX_LEN)}…`\n\t\t: trimmed;\n};\n\nconst tryParseJson = (text: string): unknown => {\n\ttry {\n\t\treturn JSON.parse(text);\n\t} catch {\n\t\treturn null;\n\t}\n};\n\nconst extractUpstreamErrorMessage = (body: string): string | undefined => {\n\tconst parsed = tryParseJson(body);\n\tif (parsed === null || typeof parsed !== \"object\") {\n\t\treturn clampUpstreamMessage(body);\n\t}\n\tconst record = parsed as Record<string, unknown>;\n\tfor (const field of UPSTREAM_ERROR_FIELDS) {\n\t\tconst value = record[field];\n\t\tif (typeof value === \"string\" && value.length > 0) {\n\t\t\treturn clampUpstreamMessage(value);\n\t\t}\n\t\tif (value && typeof value === \"object\") {\n\t\t\tconst nested = (value as Record<string, unknown>).message;\n\t\t\tif (typeof nested === \"string\" && nested.length > 0) {\n\t\t\t\treturn clampUpstreamMessage(nested);\n\t\t\t}\n\t\t}\n\t}\n\treturn undefined;\n};\n\n/** A quoted / labelled field name pulled from a seller's rejection text. */\nconst extractFieldName = (message: string): string | undefined => {\n\t// Common shapes: \"missing required field: prompt\", \"field 'query' is\n\t// required\", '\"query\" is required', \"param query missing\". Message is\n\t// already clamped to 200 chars upstream, so these are bounded.\n\tconst patterns = [\n\t\t/(?:field|param(?:eter)?|property|key)[:\\s]+[\"'`]?([a-z0-9_.[\\]-]+)[\"'`]?/i,\n\t\t/[\"'`]([a-z0-9_.[\\]-]+)[\"'`]\\s*(?:is\\s+)?(?:required|missing|expected)/i,\n\t\t// Quotes REQUIRED here — an unquoted token after \"required\"/\"missing\"\n\t\t// is usually a generic noun (\"required parameters\", \"missing fields\"),\n\t\t// not a field name. Only trust it when the seller quoted it.\n\t\t/(?:required|missing|expected)[:\\s]+[\"'`]([a-z0-9_.[\\]-]+)[\"'`]/i,\n\t];\n\tfor (const p of patterns) {\n\t\tconst match = message.match(p);\n\t\tif (match?.[1]) return match[1];\n\t}\n\treturn undefined;\n};\n\n/** The allowed HTTP method a seller names in a 405 rejection. */\nconst extractAllowedMethod = (text: string): string | undefined => {\n\t// Shapes seen in prod: '\"allowed\":[\"GET\"]', \"Use GET for /path\",\n\t// \"allowed methods: GET, POST\".\n\tconst listed = text.match(\n\t\t/allowed[^[]*\\[\\s*[\"'`]?(GET|POST|PUT|PATCH|DELETE|HEAD)/i,\n\t);\n\tif (listed?.[1]) return listed[1].toUpperCase();\n\tconst useVerb = text.match(/\\buse\\s+(GET|POST|PUT|PATCH|DELETE|HEAD)\\b/i);\n\tif (useVerb?.[1]) return useVerb[1].toUpperCase();\n\treturn undefined;\n};\n\n/**\n * Field names a structured validation body flags as unrecognized — the Zod\n * `{ issues: [{ code: \"unrecognized_keys\", keys: [...] }] }` shape Zero's own\n * withzero caps emit. Walks any nested `keys: [...]` array so we pull the real\n * field names, not the JSON structure keys a raw-text regex would grab.\n */\nconst extractUnrecognizedKeys = (bodyRaw: string | null): string[] => {\n\tif (!bodyRaw) return [];\n\tconst parsed = tryParseJson(bodyRaw);\n\tif (parsed === null || typeof parsed !== \"object\") return [];\n\tconst out: string[] = [];\n\tconst visit = (node: unknown): void => {\n\t\tif (!node || typeof node !== \"object\") return;\n\t\tconst o = node as Record<string, unknown>;\n\t\tif (Array.isArray(o.keys)) {\n\t\t\tfor (const k of o.keys) if (typeof k === \"string\") out.push(k);\n\t\t}\n\t\tfor (const v of Object.values(o)) {\n\t\t\tif (Array.isArray(v)) v.forEach(visit);\n\t\t\telse if (v && typeof v === \"object\") visit(v);\n\t\t}\n\t};\n\tvisit(parsed);\n\treturn [...new Set(out)].slice(0, 8);\n};\n\n/**\n * Best-effort, conservative next action for a client-side (4xx) rejection.\n * Only fires for the high-confidence, agent-fixable shapes observed in real\n * agent-eval runs: a wrong HTTP method, an unparseable JSON body, unrecognized\n * (extra) fields, a content-type mismatch, or a missing required field.\n * Returns undefined for 5xx (not the caller's fault) and for anything it can't\n * confidently classify — a wrong hint is worse than none.\n */\nexport const computeFixHint = (\n\tstatus: number,\n\tmessage: string | undefined,\n\tbodyRaw?: string | null,\n): string | undefined => {\n\tif (status < 400 || status >= 500) return undefined;\n\t// Match against message + raw body: the caller-useful detail often lives\n\t// in a nested `issues[].message`, not the top-level `error` code (e.g.\n\t// {\"error\":\"invalid_body\", issues:[{message:\"Unrecognized key(s) …\"}]}).\n\tconst hay = `${message ?? \"\"} ${bodyRaw ?? \"\"}`.toLowerCase();\n\n\t// Wrong HTTP method — retry with the method the seller allows.\n\tif (status === 405 || /method not allowed|method_not_allowed/.test(hay)) {\n\t\tconst allowed = extractAllowedMethod(`${bodyRaw ?? \"\"} ${message ?? \"\"}`);\n\t\treturn allowed\n\t\t\t? `the endpoint expects ${allowed}, not the method you used — retry with -X ${allowed}`\n\t\t\t: \"the endpoint rejected this HTTP method — check the capability's method (`zero get <slug>`) and retry with the right -X\";\n\t}\n\n\t// Unparseable request body — the most common integrator bug (unescaped\n\t// HTML/quotes in -d).\n\tif (\n\t\t/invalid json|not valid json|malformed|unexpected token|json ?parse|could not parse|failed to parse|jsondecode/.test(\n\t\t\thay,\n\t\t)\n\t) {\n\t\treturn \"the request body isn't valid JSON — check quoting/escaping (single-quote the -d value or use @file), then retry\";\n\t}\n\n\t// Unrecognized / unexpected fields (Zod unrecognized_keys, \"additional\n\t// properties not allowed\", etc). Name them from the structured body.\n\tif (\n\t\t/unrecognized[_ ]?key|unexpected key|unknown (field|key|propert)|additional (?:propert|field)|not allowed in object/.test(\n\t\t\thay,\n\t\t)\n\t) {\n\t\tconst keys = extractUnrecognizedKeys(bodyRaw ?? null);\n\t\treturn keys.length\n\t\t\t? `remove the unexpected field(s) ${keys.map((k) => `'${k}'`).join(\", \")} from the request body, then retry`\n\t\t\t: \"the request body has fields the capability doesn't accept — send only the documented fields, then retry\";\n\t}\n\n\t// Content-type mismatch (415, or an explicit complaint).\n\tif (\n\t\tstatus === 415 ||\n\t\t/content-?type|unsupported media|media type/.test(hay)\n\t) {\n\t\treturn \"set the Content-Type header to what the capability expects (usually application/json), then retry\";\n\t}\n\n\t// Missing / required field — name it if the seller does.\n\tif (\n\t\t/required|missing|must (include|provide|have|contain)|is expected/.test(hay)\n\t) {\n\t\tconst field = extractFieldName(message ?? \"\");\n\t\treturn field\n\t\t\t? `add the required field '${field}' to the request body, then retry`\n\t\t\t: \"the request is missing one or more required fields — check the capability schema (`zero get <slug>`), then retry\";\n\t}\n\n\treturn undefined;\n};\n\nconst buildUpstreamError = (\n\tstatus: number,\n\tbodyRaw: string | null,\n\tbodyEncoding: \"base64\" | undefined,\n): UpstreamError | undefined => {\n\t// !ok scope: 1xx/3xx/4xx/5xx. Mirrors the pre-cutover CLI behavior —\n\t// 3xx bodies (surfaced without a redirect-follow) still cluster by\n\t// snippet hash, just like 4xx/5xx.\n\tif (status >= 200 && status < 300) return undefined;\n\tif (bodyRaw === null || bodyRaw.length === 0) return undefined;\n\tif (bodyEncoding === \"base64\") return undefined;\n\tconst snippet = bodyRaw.slice(0, ERROR_SNIPPET_BYTES);\n\tconst message = extractUpstreamErrorMessage(bodyRaw);\n\tconst fixHint = computeFixHint(status, message, bodyRaw);\n\treturn {\n\t\tstatus,\n\t\tmessage,\n\t\tsnippetHash: createHash(\"sha256\").update(snippet).digest(\"hex\"),\n\t\tsnippetLength: snippet.length,\n\t\t...(fixHint && { fixHint }),\n\t};\n};\n\nconst computeOutcome = (\n\tstatus: number,\n\tpayment: PaymentResult | null,\n\twarnings: string[],\n): FetchOutcome => {\n\t// MPP session-close failures arrive with the seller's 200 response but\n\t// `mpp_session_close_failed` in warnings — surface that distinction in\n\t// outcome so dashboards filtering on `outcome === 'success'` don't count\n\t// orphans as clean.\n\tif (warnings.includes(FETCH_WARNINGS.mppSessionCloseFailed))\n\t\treturn \"payment_close_failed\";\n\tif (status === 402 && payment !== null) return \"payment_rejected\";\n\tif (status === 402) return \"payment_failed\";\n\tif (status >= 400) return \"server_error\";\n\treturn \"success\";\n};\n\nconst errorFetchResult = (\n\tstartedAt: number,\n\terror: string,\n\tskipReason: string,\n\tcapabilityIdRequested: boolean,\n\toutcome: FetchOutcome,\n\tstatus: number | null = null,\n): FetchResult => {\n\tconst result: FetchResult = {\n\t\trunId: null,\n\t\tok: false,\n\t\tstatus,\n\t\tlatencyMs: Date.now() - startedAt,\n\t\tpayment: null,\n\t\toutcome,\n\t\tbody: null,\n\t\tbodyRaw: null,\n\t\terror,\n\t};\n\t// Only surface runTrackingSkipped when recording was requested.\n\tif (capabilityIdRequested) result.runTrackingSkipped = [skipReason];\n\treturn result;\n};\n\n// Picks the client that should attribute the runs.create. Mirrors the\n// gate in the main recording path so a future credential kind (e.g.\n// delegated-signing) is honored everywhere at once.\nconst resolveRecordingClient = (\n\tclient: ZeroClient,\n\topts: FetchOptions,\n): { recordingClient: ZeroClient; canRecord: boolean } => {\n\tconst credentials = client.getCredentials();\n\tconst recordingClient = opts.account\n\t\t? client.withAccount(opts.account)\n\t\t: client;\n\tconst canRecord =\n\t\topts.account !== undefined ||\n\t\tcredentials.kind === \"account\" ||\n\t\tcredentials.kind === \"session\";\n\treturn { recordingClient, canRecord };\n};\n\n// Best-effort runs.create for a FetchResult we've already constructed in\n// an error path. Capability reliability dashboards rely on these rows —\n// without them a capability that's down (DNS, malformed 402, balance\n// exhausted) accumulates zero failed-run signal while paid runs keep\n// recording. A recording failure must NOT fail the fetch: the caller\n// already has the error on `result.error`.\nconst recordErrorFetchRun = async (\n\tclient: ZeroClient,\n\topts: FetchOptions,\n\tresult: FetchResult,\n\tcapabilityIdOverride?: string,\n): Promise<void> => {\n\tconst effectiveCapId = capabilityIdOverride ?? opts.capabilityId;\n\tif (effectiveCapId === undefined) return;\n\tconst { recordingClient, canRecord } = resolveRecordingClient(client, opts);\n\tif (!canRecord) return;\n\t// Auto-resolved runs are always direct_url — they only fire when no\n\t// capabilityId was supplied (the direct_url path by definition).\n\t// Short tokens (z_xxx.N) are always from_search; let that win over any\n\t// caller-supplied fetchOrigin so partners don't need to know the format.\n\tconst fetchOriginForRecord =\n\t\topts.capabilityId === undefined\n\t\t\t? \"direct_url\"\n\t\t\t: isShortToken(effectiveCapId)\n\t\t\t\t? \"from_search\"\n\t\t\t\t: opts.fetchOrigin;\n\ttry {\n\t\tconst created = await recordingClient.runs.create({\n\t\t\tcapabilityId: effectiveCapId,\n\t\t\t...(opts.searchId && { searchId: opts.searchId }),\n\t\t\t...(fetchOriginForRecord && { fetchOrigin: fetchOriginForRecord }),\n\t\t\t...(result.status !== null && { status: result.status }),\n\t\t\tlatencyMs: result.latencyMs,\n\t\t\t...(opts.requestSchema && { requestSchema: opts.requestSchema }),\n\t\t});\n\t\tresult.runId = created.runId;\n\t\tdelete result.runTrackingSkipped;\n\t} catch {\n\t\t// Stay silent — error already on result.error.\n\t}\n};\n\n// A per-leg timeout (probe or paid retry) throws ZeroTimeoutError so callers\n// can drive retry/cancel logic on the typed error — we deliberately DON'T\n// swallow it into a FetchResult. But the throw used to leave no trace: the\n// capability accrued zero failure signal, and a paid leg that timed out\n// AFTER the on-chain payment settled became silent \"dead money\" (no run row\n// for the spend). This records a status-null (→ \"network\") run as a\n// best-effort side-effect before re-throwing, so the timeout shows up in the\n// cap's reliability signal and the spend leaves an auditable trail. The\n// record is fire-and-forget (recordErrorFetchRun swallows its own errors);\n// the original ZeroTimeoutError is always re-thrown by the caller.\nconst recordTimeoutRun = async (\n\tclient: ZeroClient,\n\topts: FetchOptions,\n\terr: ZeroTimeoutError,\n\tstartedAt: number,\n\tcapabilityIdRequested: boolean,\n\tcapabilityIdOverride?: string,\n): Promise<void> => {\n\tconst result = errorFetchResult(\n\t\tstartedAt,\n\t\terr.message,\n\t\t\"timeout\",\n\t\tcapabilityIdRequested,\n\t\t\"network_error\",\n\t);\n\tawait recordErrorFetchRun(client, opts, result, capabilityIdOverride);\n};\n\n// Leading non-whitespace (BOM-skipped) byte is `{` or `[` ⇒ JSON-shaped.\n// Mirrors the CLI's `sniffJsonShape` (fetch-command.ts) so CLI and raw-SDK\n// callers infer the same content-type for byte bodies.\nconst sniffJsonShapeBytes = (buf: Uint8Array): boolean => {\n\tlet i = 0;\n\tif (\n\t\tbuf.length >= 3 &&\n\t\tbuf[0] === 0xef &&\n\t\tbuf[1] === 0xbb &&\n\t\tbuf[2] === 0xbf\n\t) {\n\t\ti = 3;\n\t}\n\twhile (\n\t\ti < buf.length &&\n\t\t(buf[i] === 0x20 || buf[i] === 0x09 || buf[i] === 0x0a || buf[i] === 0x0d)\n\t) {\n\t\ti++;\n\t}\n\tif (i >= buf.length) return false;\n\treturn buf[i] === 0x7b /* { */ || buf[i] === 0x5b /* [ */;\n};\n\n// Default a request `Content-Type` when a body is present and the caller set\n// none. Strict providers (e.g. Locus MPP's express.json()) leave `req.body`\n// undefined unless Content-Type is application/json, then crash reading a\n// field off it (\"Cannot read properties of undefined (reading 'symbol')\") —\n// a confusing, provider-dependent failure for raw `client.fetch` callers,\n// since lenient providers tolerate the omission. The CLI already infers this\n// (fetch-command.ts); doing it here gives every SDK consumer the same default.\n// A caller-supplied Content-Type (any casing) always wins. Returns a fresh\n// object so the probe and paid-retry legs never share a mutable reference.\nconst withDefaultContentType = (\n\theaders: Record<string, string> | undefined,\n\tbody: FetchOptions[\"body\"],\n): Record<string, string> | undefined => {\n\tif (!headers && body === undefined) return undefined;\n\tconst next: Record<string, string> = headers ? { ...headers } : {};\n\tif (body === undefined) return next;\n\tconst hasContentType = Object.keys(next).some(\n\t\t(k) => k.toLowerCase() === \"content-type\",\n\t);\n\tif (!hasContentType) {\n\t\tnext[\"content-type\"] =\n\t\t\ttypeof body === \"string\" || sniffJsonShapeBytes(body)\n\t\t\t\t? \"application/json\"\n\t\t\t\t: \"application/octet-stream\";\n\t}\n\treturn next;\n};\n\nexport const clientFetch = async (\n\tclient: ZeroClient,\n\turl: string,\n\topts: FetchOptions = {},\n): Promise<FetchResult> => {\n\tconst startedAt = Date.now();\n\tconst capabilityIdRequested = opts.capabilityId !== undefined;\n\t// When the body is Zero's HTTP-transport envelope (`{ input: { type:\"http\",\n\t// method, queryParams, body } }`), normalize it to a real wire request: the\n\t// verb is carried from `input.method` (not inferred from body-presence), GET\n\t// queryParams move onto the URL, and the inner body becomes the wire body.\n\t// The envelope is never a wire format, so this is unconditional + protocol-\n\t// agnostic. Non-envelope requests pass through unchanged.\n\tconst normalized = normalizeTransportEnvelopeRequest(url, {\n\t\tmethod: opts.method,\n\t\tbody: opts.body,\n\t});\n\tconst requestUrl = normalized.url;\n\tconst requestBody = normalized.body;\n\tconst method =\n\t\tnormalized.method ?? (requestBody !== undefined ? \"POST\" : \"GET\");\n\t// Auto-resolve: fire a server-side URL→capability lookup concurrently with\n\t// the probe when no capabilityId was supplied and credentials are available.\n\t// Applies to the \"direct_url\" path — bare URLs that missed the local cache\n\t// but may still be attributable via the catalog. Running in parallel with\n\t// the probe hides the resolve latency entirely. Fail-open: any error → miss.\n\tconst { canRecord: canRecordForResolve } = resolveRecordingClient(\n\t\tclient,\n\t\topts,\n\t);\n\tconst resolvePromise =\n\t\t!capabilityIdRequested && canRecordForResolve\n\t\t\t? client.capabilities\n\t\t\t\t\t.resolveByUrl(redactUrl(requestUrl), method)\n\t\t\t\t\t.catch(() => null)\n\t\t\t: Promise.resolve(null);\n\t// Shallow-clone headers so AsyncLocalStorage / request-context\n\t// middleware mid-call mutation doesn't make the probe and paid-retry\n\t// legs send divergent values. Body intentionally not cloned —\n\t// Uint8Array clone is expensive and mid-call body mutation is an\n\t// anti-pattern.\n\tconst probeHeaders = withDefaultContentType(opts.headers, requestBody);\n\tconst requestInit = {\n\t\tmethod,\n\t\theaders: probeHeaders,\n\t\tbody: requestBody,\n\t\tsignal: opts.signal,\n\t};\n\n\t// Initial probe through configured-fetch so defaultHeaders /\n\t// fetchOptions / timeout apply consistently to probe and paid retry.\n\tconst configuredFetch = buildConfiguredFetch(client, {\n\t\ttimeoutMs: opts.timeoutMs,\n\t});\n\n\tlet response: Response;\n\tlet payment: PaymentResult | null = null;\n\tconst skipReasons: string[] = [];\n\tconst warnings: string[] = [];\n\n\t// Probe manually (not via @x402/fetch wrapper) so we can detect the\n\t// protocol BEFORE engaging the x402 stack — lets us fail cleanly on\n\t// MPP with a helpful error instead of an opaque @x402 stack trace.\n\ttry {\n\t\tresponse = await configuredFetch(requestUrl, requestInit);\n\t} catch (err) {\n\t\t// Typed transport errors propagate so consumers can drive\n\t\t// retry-on-timeout / cancel-detection without string-matching\n\t\t// FetchResult.error. Generic network failures funnel.\n\t\t// A probe-leg timeout still records a status-null run (best-effort)\n\t\t// before re-throwing so the cap accrues failure signal — without it,\n\t\t// slow-but-broken caps look invisible to reliability dashboards.\n\t\tif (err instanceof ZeroTimeoutError) {\n\t\t\t// Don't await resolvePromise — the probe failed before the resolve\n\t\t\t// could meaningfully complete; blocking here would stall the throw.\n\t\t\t// The resolve finishes in the background; its .catch(() => null) ensures\n\t\t\t// no unhandled rejection.\n\t\t\tawait recordTimeoutRun(\n\t\t\t\tclient,\n\t\t\t\topts,\n\t\t\t\terr,\n\t\t\t\tstartedAt,\n\t\t\t\tcapabilityIdRequested,\n\t\t\t);\n\t\t\tthrow err;\n\t\t}\n\t\tif (err instanceof ZeroError) throw err;\n\t\tconst errMessage = err instanceof Error ? err.message : String(err);\n\t\tconst result = errorFetchResult(\n\t\t\tstartedAt,\n\t\t\terrMessage,\n\t\t\t\"fetch_failed_before_response\",\n\t\t\tcapabilityIdRequested,\n\t\t\t\"network_error\",\n\t\t);\n\t\tawait recordErrorFetchRun(client, opts, result);\n\t\treturn result;\n\t}\n\n\tif (response.status === 402) {\n\t\tconst requirement = await detectPaymentRequirement(response);\n\t\tif (requirement?.protocol === \"x402\" || requirement?.protocol === \"mpp\") {\n\t\t\t// All methods (including POST/PUT/PATCH/DELETE) flow through to\n\t\t\t// the paid retry — both protocols expect capabilities to handle\n\t\t\t// ≥2 sends, and paid POST is common (RPC-style endpoints).\n\t\t\tconst payCall =\n\t\t\t\trequirement.protocol === \"x402\"\n\t\t\t\t\t? client.payments.pay\n\t\t\t\t\t: client.payments.payMpp;\n\t\t\ttry {\n\t\t\t\tconst paid = await payCall({\n\t\t\t\t\turl: requestUrl,\n\t\t\t\t\tmethod,\n\t\t\t\t\t// Fresh clone for the paid retry — same rationale as\n\t\t\t\t\t// the probe-side clone above. Re-derives the default\n\t\t\t\t\t// Content-Type so the paid leg matches the probe.\n\t\t\t\t\theaders: withDefaultContentType(opts.headers, requestBody),\n\t\t\t\t\tbody: requestBody,\n\t\t\t\t\tmaxPay: opts.maxPay,\n\t\t\t\t\taccount: opts.account,\n\t\t\t\t\tsignal: opts.signal,\n\t\t\t\t\ttimeoutMs: opts.timeoutMs,\n\t\t\t\t\t...(opts.displayCostAmount && {\n\t\t\t\t\t\tdisplayCostAmount: opts.displayCostAmount,\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t\tresponse = paid.response;\n\t\t\t\tpayment = paid.payment;\n\t\t\t\t// Merge SDK-side payment-path warnings (e.g. session_open_unobserved)\n\t\t\t\t// into the outer warnings array. Without this, partners using the\n\t\t\t\t// typed FETCH_WARNINGS constant for reconciliation would never see\n\t\t\t\t// signals the payment layer emits.\n\t\t\t\tif (paid.warnings) warnings.push(...paid.warnings);\n\t\t\t} catch (err) {\n\t\t\t\t// Session-close failed: the payment landed (channel was opened\n\t\t\t\t// and used) but the close voucher was rejected. Surface the\n\t\t\t\t// orphaned channel via `payment.session` so consumers can\n\t\t\t\t// reconcile out-of-band — funneling this through errorFetchResult\n\t\t\t\t// would zero payment and drop the channelId.\n\t\t\t\tif (err instanceof ZeroSessionCloseFailedError) {\n\t\t\t\t\tresponse = err.response;\n\t\t\t\t\tpayment = {\n\t\t\t\t\t\tprotocol: \"mpp\",\n\t\t\t\t\t\tchain: tempoChainLabelFromId(err.session.chainId),\n\t\t\t\t\t\ttxHash: null,\n\t\t\t\t\t\tamount: err.capturedAmount,\n\t\t\t\t\t\tasset: \"USDC\",\n\t\t\t\t\t\tsession: err.session,\n\t\t\t\t\t};\n\t\t\t\t\twarnings.push(FETCH_WARNINGS.mppSessionCloseFailed);\n\t\t\t\t} else if (err instanceof ZeroInsufficientFundsError) {\n\t\t\t\t\t// The wallet can't cover the call — a funding condition, NOT\n\t\t\t\t\t// the capability gating us. Do NOT record a run: a 402 here\n\t\t\t\t\t// would mislabel the cap as payment_gated and corrupt its\n\t\t\t\t\t// reliability signal. Return the typed outcome so the wallet\n\t\t\t\t\t// funnel stays visible via fetch_executed.outcome analytics.\n\t\t\t\t\treturn errorFetchResult(\n\t\t\t\t\t\tstartedAt,\n\t\t\t\t\t\terr.message,\n\t\t\t\t\t\tFETCH_SKIP_REASONS.insufficientFunds,\n\t\t\t\t\t\tcapabilityIdRequested,\n\t\t\t\t\t\t\"insufficient_funds\",\n\t\t\t\t\t\tnull,\n\t\t\t\t\t);\n\t\t\t\t} else if (\n\t\t\t\t\terr instanceof ZeroPaymentError ||\n\t\t\t\t\terr instanceof ZeroAuthError\n\t\t\t\t) {\n\t\t\t\t\t// The 402 reached the seller and the payment genuinely failed\n\t\t\t\t\t// (paid-then-402, unparseable challenge, settlement error,\n\t\t\t\t\t// max-pay exceeded) — record at status=402 so the cap's\n\t\t\t\t\t// reliability reflects it. Wallet-empty is handled above.\n\t\t\t\t\tconst result = errorFetchResult(\n\t\t\t\t\t\tstartedAt,\n\t\t\t\t\t\terr.message,\n\t\t\t\t\t\t\"payment_failed\",\n\t\t\t\t\t\tcapabilityIdRequested,\n\t\t\t\t\t\t\"payment_failed\",\n\t\t\t\t\t\t402,\n\t\t\t\t\t);\n\t\t\t\t\tawait recordErrorFetchRun(client, opts, result);\n\t\t\t\t\treturn result;\n\t\t\t\t} else if (err instanceof ZeroTimeoutError) {\n\t\t\t\t\t// Paid-leg timeout: the on-chain payment may have already\n\t\t\t\t\t// settled, but we aborted before the seller's response. We\n\t\t\t\t\t// have no txHash to attach (the call was cut mid-flight), so\n\t\t\t\t\t// record a status-null run — honest \"attempted, timed out,\n\t\t\t\t\t// unconfirmed\" — so the spend leaves an auditable trail and\n\t\t\t\t\t// the cap's reliability reflects the failure. Then re-throw\n\t\t\t\t\t// to preserve the typed-error retry/cancel contract.\n\t\t\t\t\tawait recordTimeoutRun(\n\t\t\t\t\t\tclient,\n\t\t\t\t\t\topts,\n\t\t\t\t\t\terr,\n\t\t\t\t\t\tstartedAt,\n\t\t\t\t\t\tcapabilityIdRequested,\n\t\t\t\t\t);\n\t\t\t\t\tthrow err;\n\t\t\t\t} else {\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (requirement?.protocol === \"unknown\") {\n\t\t\t// 402 with neither x402 nor MPP markers — the SDK can't pay it.\n\t\t\t// Surface as a typed `payment_failed` FetchResult (not a throw) so\n\t\t\t// consumer dashboards bucket it correctly and we still attempt a\n\t\t\t// run record at status=402.\n\t\t\tconst result = errorFetchResult(\n\t\t\t\tstartedAt,\n\t\t\t\t\"Capability returned 402 with an unrecognized payment protocol. \" +\n\t\t\t\t\t\"Neither x402 nor MPP markers were detected in the response headers or body.\",\n\t\t\t\t\"unrecognized_402_protocol\",\n\t\t\t\tcapabilityIdRequested,\n\t\t\t\t\"payment_failed\",\n\t\t\t\t402,\n\t\t\t);\n\t\t\tawait recordErrorFetchRun(client, opts, result);\n\t\t\treturn result;\n\t\t}\n\t\t// If requirement is null (status changed by the time detect ran),\n\t\t// fall through and treat as a normal response.\n\t}\n\n\tconst latencyMs = Date.now() - startedAt;\n\tconst maxResponseBytes = opts.maxResponseBytes ?? MAX_RESPONSE_BYTES;\n\tlet body: unknown;\n\tlet bodyRaw: string | null;\n\tlet bodyEncoding: \"base64\" | undefined;\n\ttry {\n\t\tconst parsed = await parseResponseBody(response, maxResponseBytes);\n\t\tbody = parsed.body;\n\t\tbodyRaw = parsed.bodyRaw;\n\t\tbodyEncoding = parsed.bodyEncoding;\n\t\tif (parsed.truncated) warnings.push(FETCH_WARNINGS.bodyTruncated);\n\t} catch (err) {\n\t\t// Caller-abort during body read propagates as typed error;\n\t\t// generic body-read failures funnel into FetchResult — but\n\t\t// CRITICAL: preserve `payment` and any settlement warning when\n\t\t// the paid retry already settled. errorFetchResult drops both,\n\t\t// which would orphan the on-chain transfer (caller sees no\n\t\t// txHash, no warning, no way to reconcile).\n\t\tif (err instanceof Error && err.name === \"AbortError\") {\n\t\t\tthrow new ZeroApiError(\"Request aborted by caller\", {\n\t\t\t\tstatus: 0,\n\t\t\t\tcause: err,\n\t\t\t});\n\t\t}\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\t// Build skipReasons + settlement-classifier warnings BEFORE the\n\t\t// result so outcome/warnings reflect them. APPEND to the outer\n\t\t// `warnings` — the close-fail funnel may have already pushed\n\t\t// `mpp_session_close_failed`; a fresh local array would drop it.\n\t\tconst skips: string[] = [];\n\t\tconst settledLocally = paymentHasAnchor(payment);\n\t\tif (settledLocally && response.status === 402) {\n\t\t\twarnings.push(FETCH_WARNINGS.paidButStill402NotRecorded);\n\t\t\tskips.push(FETCH_WARNINGS.paidButStill402NotRecorded);\n\t\t}\n\t\tif (payment !== null && !settledLocally) {\n\t\t\twarnings.push(FETCH_WARNINGS.paymentSettlementUnconfirmed);\n\t\t\tskips.push(FETCH_WARNINGS.paymentSettlementUnconfirmed);\n\t\t}\n\t\tif (payment !== null && payment.amount === \"unknown\") {\n\t\t\twarnings.push(FETCH_WARNINGS.paymentAmountUnknown);\n\t\t}\n\t\tskips.push(FETCH_SKIP_REASONS.bodyReadFailed);\n\t\tconst result: FetchResult = {\n\t\t\trunId: null,\n\t\t\tok: false,\n\t\t\tstatus: response.status,\n\t\t\tlatencyMs: Date.now() - startedAt,\n\t\t\tpayment,\n\t\t\toutcome: computeOutcome(response.status, payment, warnings),\n\t\t\tbody: null,\n\t\t\tbodyRaw: null,\n\t\t\terror: message,\n\t\t};\n\t\tif (capabilityIdRequested) result.runTrackingSkipped = skips;\n\t\tif (warnings.length > 0) result.warnings = warnings;\n\t\treturn result;\n\t}\n\n\t// Classify the payment state before deciding to record:\n\t// - settled: on-chain anchor exists. For x402 that's payment.txHash.\n\t// For MPP session lifecycles the on-chain anchor lands at close;\n\t// payment.session is the equivalent (channel-level record).\n\t// - settlement unconfirmed: payment object present but no anchor.\n\t// - paid_but_still_402 (settled + status 402): settlement landed\n\t// but upstream still rejected (lag / facilitator race). Don't\n\t// record; surface a warning for reconciliation.\n\tconst settled = paymentHasAnchor(payment);\n\tconst paidButStill402 = settled && response.status === 402;\n\tconst settlementUnconfirmed = payment !== null && !settled;\n\n\tif (paidButStill402) warnings.push(FETCH_WARNINGS.paidButStill402NotRecorded);\n\tif (settlementUnconfirmed)\n\t\twarnings.push(FETCH_WARNINGS.paymentSettlementUnconfirmed);\n\tif (payment !== null && payment.amount === \"unknown\") {\n\t\twarnings.push(FETCH_WARNINGS.paymentAmountUnknown);\n\t}\n\n\t// Record the run when we have a capability AND can sign the request.\n\t// Best-effort — a recording failure must NOT fail the fetch since\n\t// the consumer already got their (possibly paid) response.\n\t//\n\t// When the caller passed a per-call `opts.account` override, the run\n\t// must be recorded AS that account — otherwise multi-tenant\n\t// attribution lands on the wrong wallet (and may 401 if the client\n\t// itself has no creds).\n\tlet runId: string | null = null;\n\t// Don't record on close-fail — the API schema can't yet distinguish a\n\t// healthy session from a dirty orphan. The orphan signal lives on\n\t// result.warnings + payment.session for in-process reconciliation.\n\tconst closeFailed = warnings.includes(FETCH_WARNINGS.mppSessionCloseFailed);\n\t// Compute upstreamError once and use the same snippetHash/snippetLength for\n\t// the run row AND the FetchResult — guarantees the analytics-event hash\n\t// and the row hash join cleanly, and avoids re-hashing the same bytes.\n\tconst upstreamErrorForRecord = buildUpstreamError(\n\t\tresponse.status,\n\t\tbodyRaw,\n\t\tbodyEncoding,\n\t);\n\t// Populate skipReasons for deliberate-skip cases too — the field's\n\t// documented purpose is \"why isn't my run row populated?\" so a\n\t// consumer should see the reason regardless of whether we actually\n\t// attempted runs.create. Note: payment_settlement_unconfirmed is NOT\n\t// a skip reason — we record the row anyway (CLI parity, pre-cutover\n\t// behavior). The warning still surfaces via the upstream\n\t// settlementUnconfirmed push so consumers can filter on it; without\n\t// recording, paid charge-mode calls where the seller doesn't return\n\t// the settlement header drop entirely from the reliability signal.\n\tif (capabilityIdRequested) {\n\t\tif (paidButStill402)\n\t\t\tskipReasons.push(FETCH_WARNINGS.paidButStill402NotRecorded);\n\t\telse if (closeFailed)\n\t\t\tskipReasons.push(FETCH_SKIP_REASONS.mppSessionCloseFailedNotRecorded);\n\t}\n\t// Await the concurrent resolve to obtain an effectiveCapabilityId for the\n\t// direct_url path. Safe here — the response body is already consumed above.\n\tconst resolvedCap = await resolvePromise;\n\tconst effectiveCapabilityId = opts.capabilityId ?? resolvedCap?.capabilityId;\n\t// Only populate capabilityResolution when auto-resolve was actually attempted\n\t// (no caller capabilityId + credentials available). Absent when the caller\n\t// supplied capabilityId or when credentials were not configured.\n\tconst capabilityResolution =\n\t\t!capabilityIdRequested && canRecordForResolve\n\t\t\t? resolvedCap !== null\n\t\t\t\t? {\n\t\t\t\t\t\tresolved: true as const,\n\t\t\t\t\t\tcapabilityId: resolvedCap.capabilityId,\n\t\t\t\t\t\tcapabilitySlug: resolvedCap.capabilitySlug,\n\t\t\t\t\t\tmatchedVia: resolvedCap.matchedVia,\n\t\t\t\t\t}\n\t\t\t\t: { resolved: false as const }\n\t\t\t: undefined;\n\t// `!== undefined` (not the alias) so TS narrows for runs.create below.\n\tif (effectiveCapabilityId !== undefined && !paidButStill402 && !closeFailed) {\n\t\tconst { recordingClient, canRecord } = resolveRecordingClient(client, opts);\n\t\tif (!canRecord) {\n\t\t\tskipReasons.push(\"no_credentials\");\n\t\t} else {\n\t\t\t// Omit cost columns when amount is the \"unknown\" sentinel —\n\t\t\t// persisting that string poisons reconciliation (parseFloat\n\t\t\t// returns NaN; the API's analytics gate silently drops the\n\t\t\t// row). txHash is still recorded for out-of-band recovery.\n\t\t\tconst knownAmount = payment !== null && payment.amount !== \"unknown\";\n\t\t\t// Recording runs WITHOUT the caller's signal — a late abort\n\t\t\t// would orphan an already-paid run. Tradeoff: shutdown signals\n\t\t\t// don't propagate here; consumers need a drain grace window.\n\t\t\ttry {\n\t\t\t\t// Hook errors are swallowed so a buggy callback can't sink the\n\t\t\t\t// run row — the call already paid; the caller still wants the\n\t\t\t\t// response.\n\t\t\t\tlet derived:\n\t\t\t\t\t| {\n\t\t\t\t\t\t\tresponseSchema?: Record<string, unknown>;\n\t\t\t\t\t }\n\t\t\t\t\t| undefined;\n\t\t\t\tif (opts.deriveRunMetadata) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tderived = opts.deriveRunMetadata({\n\t\t\t\t\t\t\tstatus: response.status,\n\t\t\t\t\t\t\tok: response.ok,\n\t\t\t\t\t\t\tbodyRaw,\n\t\t\t\t\t\t\t...(bodyEncoding && { bodyEncoding }),\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Best-effort — swallow and proceed.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst result = await recordingClient.runs.create({\n\t\t\t\t\tcapabilityId: effectiveCapabilityId,\n\t\t\t\t\tsearchId: opts.searchId,\n\t\t\t\t\t// Auto-resolved runs are always direct_url — they only fire when\n\t\t\t\t\t// no capabilityId was supplied (the direct_url path by definition).\n\t\t\t\t\t...(opts.capabilityId === undefined\n\t\t\t\t\t\t? { fetchOrigin: \"direct_url\" as const }\n\t\t\t\t\t\t: opts.fetchOrigin && { fetchOrigin: opts.fetchOrigin }),\n\t\t\t\t\tstatus: response.status,\n\t\t\t\t\tlatencyMs,\n\t\t\t\t\t...(opts.requestSchema && { requestSchema: opts.requestSchema }),\n\t\t\t\t\t...(derived?.responseSchema && {\n\t\t\t\t\t\tresponseSchema: derived.responseSchema,\n\t\t\t\t\t}),\n\t\t\t\t\t...(upstreamErrorForRecord && {\n\t\t\t\t\t\terrorSnippetHash: upstreamErrorForRecord.snippetHash,\n\t\t\t\t\t\terrorSnippetLength: upstreamErrorForRecord.snippetLength,\n\t\t\t\t\t}),\n\t\t\t\t\t...(payment && {\n\t\t\t\t\t\t...(knownAmount && {\n\t\t\t\t\t\t\tcostAmount: payment.amount,\n\t\t\t\t\t\t\tcostAsset: payment.asset,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tpaymentProtocol: payment.protocol,\n\t\t\t\t\t\tpaymentChain: payment.chain,\n\t\t\t\t\t\tpaymentTxHash: payment.txHash ?? undefined,\n\t\t\t\t\t\tpaymentMode: payment.session ? \"session\" : \"charge\",\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t\trunId = result.runId;\n\t\t\t} catch (err) {\n\t\t\t\tconst errorMessage = err instanceof Error ? err.message : String(err);\n\t\t\t\t// Format: `run_create_failed:<code>: <message>` when the\n\t\t\t\t// underlying error has a typed code, else plain\n\t\t\t\t// `run_create_failed: <message>`. Consumers can split on\n\t\t\t\t// `:` to machine-parse \"timeout vs 4xx\" without the SDK\n\t\t\t\t// exposing a separate runTrackingError field. The\n\t\t\t\t// recording failure is intentionally swallowed (the paid\n\t\t\t\t// response must reach the caller).\n\t\t\t\tconst code = err instanceof ZeroError ? err.code : undefined;\n\t\t\t\tconst skipMsg = code\n\t\t\t\t\t? `run_create_failed:${code}: ${errorMessage}`\n\t\t\t\t\t: `run_create_failed: ${errorMessage}`;\n\t\t\t\tskipReasons.push(skipMsg);\n\t\t\t\tclient.logger?.({\n\t\t\t\t\tlevel: \"warn\",\n\t\t\t\t\tmessage: \"Failed to record run for fetch\",\n\t\t\t\t\tmeta: {\n\t\t\t\t\t\turl: redactUrl(url),\n\t\t\t\t\t\tcapabilityId: effectiveCapabilityId,\n\t\t\t\t\t\terror: errorMessage,\n\t\t\t\t\t\terrorCode: code,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tconst result: FetchResult = {\n\t\trunId,\n\t\tok: response.ok,\n\t\tstatus: response.status,\n\t\tlatencyMs,\n\t\tpayment,\n\t\toutcome: computeOutcome(response.status, payment, warnings),\n\t\tbody,\n\t\tbodyRaw,\n\t};\n\tif (bodyEncoding) result.bodyEncoding = bodyEncoding;\n\tif (!response.ok) {\n\t\t// Source error text from `bodyRaw` (the raw string) not `body`\n\t\t// (which is the JSON-parsed object for JSON content-types). Skip\n\t\t// base64-encoded binary (noise > \"HTTP <status>\"). Redact when\n\t\t// the response echoes the request body — protects caller secrets\n\t\t// (apiKey, bearer token) in the body from leaking via logger\n\t\t// integrations wired to result.error.\n\t\tconst candidate =\n\t\t\tbodyRaw !== null && bodyRaw.length > 0 && bodyEncoding !== \"base64\"\n\t\t\t\t? bodyRaw.slice(0, 240)\n\t\t\t\t: null;\n\t\tresult.error =\n\t\t\tcandidate !== null && !requestBodyEchoed(candidate, opts.body)\n\t\t\t\t? candidate\n\t\t\t\t: `HTTP ${response.status}`;\n\t\tif (upstreamErrorForRecord) result.upstreamError = upstreamErrorForRecord;\n\t}\n\t// runTrackingSkipped only when recording was requested.\n\tif (capabilityIdRequested && skipReasons.length > 0) {\n\t\tresult.runTrackingSkipped = skipReasons;\n\t}\n\tif (warnings.length > 0) result.warnings = warnings;\n\tif (capabilityResolution !== undefined)\n\t\tresult.capabilityResolution = capabilityResolution;\n\treturn result;\n};\n\n// clientFetch returns FetchResult on non-2xx and most failures so\n// consumers get one shape covering status, body, and payment metadata\n// together. Only MPP / unknown-protocol cases throw — they represent\n// \"cannot attempt this call at all\".\n","{\n\t\"name\": \"@zeroxyz/sdk\",\n\t\"version\": \"0.12.0\",\n\t\"description\": \"TypeScript SDK for Zero — search, fetch, and pay for AI capabilities (x402 + MPP).\",\n\t\"keywords\": [\n\t\t\"zero\",\n\t\t\"zeroxyz\",\n\t\t\"x402\",\n\t\t\"mpp\",\n\t\t\"ai-agents\",\n\t\t\"crypto-payments\",\n\t\t\"stablecoin\",\n\t\t\"usdc\"\n\t],\n\t\"homepage\": \"https://zero.xyz\",\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/piedotorg/zero.git\",\n\t\t\"directory\": \"packages/sdk\"\n\t},\n\t\"license\": \"MIT\",\n\t\"type\": \"module\",\n\t\"main\": \"./dist/index.cjs\",\n\t\"module\": \"./dist/index.js\",\n\t\"types\": \"./dist/index.d.ts\",\n\t\"exports\": {\n\t\t\".\": {\n\t\t\t\"import\": {\n\t\t\t\t\"types\": \"./dist/index.d.ts\",\n\t\t\t\t\"default\": \"./dist/index.js\"\n\t\t\t},\n\t\t\t\"require\": {\n\t\t\t\t\"types\": \"./dist/index.d.cts\",\n\t\t\t\t\"default\": \"./dist/index.cjs\"\n\t\t\t}\n\t\t},\n\t\t\"./testing\": {\n\t\t\t\"import\": {\n\t\t\t\t\"types\": \"./dist/testing.d.ts\",\n\t\t\t\t\"default\": \"./dist/testing.js\"\n\t\t\t},\n\t\t\t\"require\": {\n\t\t\t\t\"types\": \"./dist/testing.d.cts\",\n\t\t\t\t\"default\": \"./dist/testing.cjs\"\n\t\t\t}\n\t\t}\n\t},\n\t\"files\": [\n\t\t\"dist\",\n\t\t\"testing\",\n\t\t\"README.md\",\n\t\t\"CHANGELOG.md\",\n\t\t\"LICENSE\"\n\t],\n\t\"sideEffects\": false,\n\t\"engines\": {\n\t\t\"node\": \">=20.3.0\"\n\t},\n\t\"publishConfig\": {\n\t\t\"access\": \"public\"\n\t},\n\t\"scripts\": {\n\t\t\"build\": \"tsup\",\n\t\t\"dev\": \"tsup --watch\",\n\t\t\"prepare\": \"pnpm run build\",\n\t\t\"typecheck\": \"tsc\",\n\t\t\"test\": \"vitest run --project unit\",\n\t\t\"test:unit\": \"vitest run --project unit\",\n\t\t\"test:integration\": \"vitest run --project integration\",\n\t\t\"test:online\": \"vitest run --project online\",\n\t\t\"check:publint\": \"publint\",\n\t\t\"check:attw\": \"attw --pack .\",\n\t\t\"check:pack\": \"pnpm run build && pnpm run check:publint && pnpm run check:attw\"\n\t},\n\t\"dependencies\": {\n\t\t\"@relayprotocol/relay-sdk\": \"^5.2.1\",\n\t\t\"@x402/core\": \"~2.9.0\",\n\t\t\"@x402/evm\": \"~2.9.0\",\n\t\t\"@x402/extensions\": \"~2.9.0\",\n\t\t\"@x402/fetch\": \"~2.9.0\",\n\t\t\"mppx\": \"^0.6.9\",\n\t\t\"tslib\": \"^2.8.1\",\n\t\t\"viem\": \"^2.47.10\",\n\t\t\"zod\": \"^4.3.5\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@arethetypeswrong/cli\": \"0.18.2\",\n\t\t\"@types/node\": \"^25.0.7\",\n\t\t\"@zero/test-fixtures\": \"workspace:*\",\n\t\t\"publint\": \"^0.3.16\",\n\t\t\"tsup\": \"^8.5.1\",\n\t\t\"typescript\": \"^5.9.3\",\n\t\t\"vitest\": \"^4.0.17\"\n\t}\n}\n","import pkg from \"../package.json\" with { type: \"json\" };\n\n// tsup inlines the JSON content into both the ESM and CJS bundles at build\n// time, so the `with { type: \"json\" }` syntax never reaches the consumer.\n// Single source of truth — `npm version` / `pnpm version` updates this\n// automatically as a side effect of bumping package.json.\nexport const SDK_VERSION: string = pkg.version;\n","import { z } from \"zod\";\n\n// Wire shapes for the auth.md agent-account lifecycle (AuthKit Agents).\n// These were captured against a LIVE AuthKit Agents environment (staging,\n// 2026-07-06) — they are the nested WorkOS product shapes, which differ from\n// the flat field names in the public auth.md protocol reference.\n\nexport const agentAuthMetadataSchema = z\n\t.object({\n\t\ttoken_endpoint: z.string().optional(),\n\t\tagent_auth: z\n\t\t\t.object({\n\t\t\t\tidentity_endpoint: z.string(),\n\t\t\t\tclaim_endpoint: z.string().optional(),\n\t\t\t})\n\t\t\t.loose(),\n\t})\n\t.loose();\n\nexport type AgentAuthEndpoints = {\n\tauthorizationServer: string;\n\tidentityEndpoint: string;\n\tclaimEndpoint: string | null;\n\ttokenEndpoint: string;\n};\n\n// POST /agent/identity — both registration ({type: \"anonymous\"}) and assertion\n// refresh ({type: \"refresh\", refresh_token}) return this identity envelope.\nexport const identityEnvelopeSchema = z\n\t.object({\n\t\tid: z.string(),\n\t\tidentity: z\n\t\t\t.object({\n\t\t\t\tassertion: z.string(),\n\t\t\t\texpires_at: z.string().optional(),\n\t\t\t\trefresh_token: z.object({ value: z.string() }).loose().optional(),\n\t\t\t})\n\t\t\t.loose(),\n\t\tclaim: z\n\t\t\t.object({\n\t\t\t\ttoken: z.string().optional(),\n\t\t\t\texpires_at: z.string().optional(),\n\t\t\t})\n\t\t\t.loose()\n\t\t\t.optional(),\n\t})\n\t.loose()\n\t.transform((raw) => ({\n\t\tregistrationId: raw.id,\n\t\tidentityAssertion: raw.identity.assertion,\n\t\tassertionExpires: raw.identity.expires_at ?? null,\n\t\trefreshToken: raw.identity.refresh_token?.value ?? null,\n\t\tclaimToken: raw.claim?.token ?? null,\n\t\tclaimTokenExpires: raw.claim?.expires_at ?? null,\n\t}));\n\nexport type AgentRegistration = z.infer<typeof identityEnvelopeSchema>;\n\nexport const agentTokenResponseSchema = z\n\t.object({ access_token: z.string() })\n\t.loose()\n\t.transform((raw) => ({ accessToken: raw.access_token }));\n\nexport type AgentToken = z.infer<typeof agentTokenResponseSchema>;\n\n// POST /agent/identity/claim — mints a claim attempt. The response carries\n// ONLY the hosted verification URI: the pairing code is shown to the HUMAN on\n// that page, and they read it back to the agent (the reverse of RFC 8628).\nexport const startClaimResponseSchema = z\n\t.object({\n\t\tattempt: z\n\t\t\t.object({\n\t\t\t\tverification_uri: z.string(),\n\t\t\t\texpires_at: z.string().optional(),\n\t\t\t})\n\t\t\t.loose(),\n\t})\n\t.loose()\n\t.transform((raw) => ({\n\t\tverificationUri: raw.attempt.verification_uri,\n\t\texpiresAt: raw.attempt.expires_at ?? null,\n\t}));\n\nexport type AgentClaimAttempt = z.infer<typeof startClaimResponseSchema>;\n\n// POST /agent/identity/claim/complete — returns the verified identity\n// envelope exactly once (fresh assertion + rotated refresh token).\nexport const completeClaimResponseSchema = z\n\t.object({\n\t\tidentity: z\n\t\t\t.object({\n\t\t\t\tassertion: z.string(),\n\t\t\t\texpires_at: z.string().optional(),\n\t\t\t\trefresh_token: z.object({ value: z.string() }).loose().optional(),\n\t\t\t})\n\t\t\t.loose(),\n\t})\n\t.loose()\n\t.transform((raw) => ({\n\t\tidentityAssertion: raw.identity.assertion,\n\t\tassertionExpires: raw.identity.expires_at ?? null,\n\t\trefreshToken: raw.identity.refresh_token?.value ?? null,\n\t}));\n\nexport type AgentVerifiedIdentity = z.infer<typeof completeClaimResponseSchema>;\n\nexport type CompleteClaimResult =\n\t// The human hasn't confirmed on the hosted page yet — wait and retry.\n\t| { status: \"not_confirmed\" }\n\t// Wrong pairing code — ask the human to re-read it.\n\t| { status: \"invalid_code\" }\n\t// The attempt/claim window closed or the claim is dead — restart.\n\t| { status: \"expired\"; code: string }\n\t| ({ status: \"ok\" } & AgentVerifiedIdentity);\n\n// Zero's own exchange — the WorkOS-exchange shape plus the wallet address of\n// the implicitly provisioned wallet (optional so older API deploys parse).\nexport const agentZeroSessionSchema = z\n\t.object({\n\t\taccessToken: z.string(),\n\t\trefreshToken: z.string(),\n\t\texpiresIn: z.number(),\n\t\tuser: z.object({ id: z.string() }).loose(),\n\t\twalletAddress: z.string().optional(),\n\t})\n\t.loose();\n\nexport type AgentZeroSession = z.infer<typeof agentZeroSessionSchema>;\n\nexport type AgentSignupResult = {\n\tregistration: AgentRegistration;\n\tsession: AgentZeroSession;\n};\n","import { z } from \"zod\";\nimport type { ZeroClient } from \"../client\";\n\nconst refreshResponseSchema = z.object({\n\taccessToken: z.string(),\n\trefreshToken: z.string(),\n});\n\n// Mutates credentials on success and fires onRefreshed. Returns false\n// on any failure.\n//\n// Bypasses request() because (1) refresh must not itself trigger\n// refresh-on-401 (infinite loop on revoked tokens) and (2) the endpoint\n// is unauthenticated. Composes caller signal with AbortSignal.timeout\n// so caller-abort AND timeout both cancel a hung refresh.\nexport const tryRefreshSession = async (\n\tclient: ZeroClient,\n\tcallerSignal?: AbortSignal,\n): Promise<boolean> => {\n\tconst credentials = client.getCredentials();\n\tif (credentials.kind !== \"session\") return false;\n\t// Exchanged / runner sessions have no refresh path. Posting an empty RT\n\t// would 401 on the server, pollute logs, and (depending on the server's\n\t// token-theft heuristics) flag the session — short-circuit instead.\n\tif (!credentials.refreshToken) return false;\n\n\tconst url = `${client.baseUrl.replace(/\\/$/, \"\")}/v1/auth/refresh`;\n\tconst timeoutSignal = AbortSignal.timeout(client.timeout);\n\tconst signal = callerSignal\n\t\t? AbortSignal.any([callerSignal, timeoutSignal])\n\t\t: timeoutSignal;\n\tlet response: Response;\n\ttry {\n\t\tresponse = await client.fetchImpl(url, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"content-type\": \"application/json\" },\n\t\t\tbody: JSON.stringify({ refreshToken: credentials.refreshToken }),\n\t\t\tsignal,\n\t\t});\n\t} catch {\n\t\treturn false;\n\t}\n\tif (!response.ok) return false;\n\n\tlet body: unknown;\n\ttry {\n\t\tbody = await response.json();\n\t} catch {\n\t\treturn false;\n\t}\n\tconst parsed = refreshResponseSchema.safeParse(body);\n\tif (!parsed.success) return false;\n\n\tawait client.applyRefreshedTokens({\n\t\taccessToken: parsed.data.accessToken,\n\t\trefreshToken: parsed.data.refreshToken,\n\t});\n\treturn true;\n};\n\nexport const buildSessionAuthHeaders = (\n\taccessToken: string,\n): Record<string, string> => ({\n\tauthorization: `Bearer ${accessToken}`,\n});\n","import { createHash } from \"node:crypto\";\nimport type { LocalAccount } from \"viem\";\n\n// Canonical message format the Zero API expects for EIP-191 wallet auth.\n// Identical to the CLI's contract — DO NOT change without coordinating a\n// server-side change, or signed requests will start rejecting.\n// Format: METHOD:PATH:SHA256(body):timestamp:nonce\nconst buildCanonicalMessage = (\n\tmethod: string,\n\tpathWithQuery: string,\n\tbody: string | undefined,\n\ttimestamp: string,\n\tnonce: string,\n): string => {\n\tconst bodyHash = createHash(\"sha256\")\n\t\t.update(body ?? \"\")\n\t\t.digest(\"hex\");\n\treturn `${method}:${pathWithQuery}:${bodyHash}:${timestamp}:${nonce}`;\n};\n\nexport type AccountAuthHeaders = {\n\t\"x-zero-address\": string;\n\t\"x-zero-timestamp\": string;\n\t\"x-zero-nonce\": string;\n\t\"x-zero-signature\": string;\n};\n\nexport const buildAccountAuthHeaders = async (\n\taccount: LocalAccount,\n\tmethod: string,\n\tpathWithQuery: string,\n\tbody: string | undefined,\n): Promise<AccountAuthHeaders> => {\n\tconst timestamp = Math.floor(Date.now() / 1000).toString();\n\tconst nonce = crypto.randomUUID();\n\tconst message = buildCanonicalMessage(\n\t\tmethod,\n\t\tpathWithQuery,\n\t\tbody,\n\t\ttimestamp,\n\t\tnonce,\n\t);\n\tconst signature = await account.signMessage({ message });\n\treturn {\n\t\t\"x-zero-address\": account.address,\n\t\t\"x-zero-timestamp\": timestamp,\n\t\t\"x-zero-nonce\": nonce,\n\t\t\"x-zero-signature\": signature,\n\t};\n};\n","import type { ZodType } from \"zod\";\nimport { buildSessionAuthHeaders } from \"../auth/session\";\nimport type { ZeroClient } from \"../client\";\nimport { ZeroApiError, ZeroError, ZeroValidationError } from \"../errors\";\nimport { SDK_VERSION } from \"../version\";\nimport { buildConfiguredFetch } from \"./configured-fetch\";\nimport { buildAccountAuthHeaders } from \"./eip191\";\n\nexport type HttpMethod = \"GET\" | \"POST\" | \"PATCH\" | \"DELETE\";\n\nexport type QueryValue = string | number | boolean | undefined;\n\nexport type RequestOptions = {\n\tmethod: HttpMethod;\n\tpath: string;\n\tbody?: unknown;\n\tquery?: Record<string, QueryValue>;\n\tsignal?: AbortSignal;\n};\n\n// 5xx responses retry; 4xx do not. 408 (request timeout) is treated as a\n// transient too — the server told us to retry. Anything else surfaces as a\n// `ZeroApiError` so the caller can decide.\nconst RETRYABLE_STATUS = new Set([408, 502, 503, 504]);\n\n// Abortable sleep so backoff honors caller signals; without this, a\n// mid-backoff cancel blocks until the timer fires.\nconst sleep = (ms: number, signal?: AbortSignal): Promise<void> =>\n\tnew Promise<void>((resolve, reject) => {\n\t\tif (signal?.aborted) {\n\t\t\treject(new DOMException(\"Aborted\", \"AbortError\"));\n\t\t\treturn;\n\t\t}\n\t\tconst timer = setTimeout(() => {\n\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\tresolve();\n\t\t}, ms);\n\t\tconst onAbort = (): void => {\n\t\t\tclearTimeout(timer);\n\t\t\treject(new DOMException(\"Aborted\", \"AbortError\"));\n\t\t};\n\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t});\n\n// The path-with-query is the canonical string used both for the request URL\n// and for EIP-191 signing. Keeping the two in lockstep is what guarantees\n// the server can verify the signature — drift here is silent and brutal.\nconst buildPathWithQuery = (\n\tpath: string,\n\tquery: Record<string, QueryValue> | undefined,\n): string => {\n\tconst normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n\tif (!query) return normalizedPath;\n\tconst params = new URLSearchParams();\n\tfor (const [key, value] of Object.entries(query)) {\n\t\tif (value !== undefined) params.set(key, String(value));\n\t}\n\tconst qs = params.toString();\n\treturn qs ? `${normalizedPath}?${qs}` : normalizedPath;\n};\n\nconst joinUrl = (baseUrl: string, pathWithQuery: string): string => {\n\tconst base = baseUrl.endsWith(\"/\") ? baseUrl.slice(0, -1) : baseUrl;\n\treturn `${base}${pathWithQuery}`;\n};\n\n// Headers are rebuilt for each network attempt (not memoized) so that\n// (a) a refresh-mid-request picks up the rotated access token on the replay\n// and (b) every EIP-191 signature has a fresh timestamp + nonce.\nconst buildHeaders = async (\n\tclient: ZeroClient,\n\tmethod: HttpMethod,\n\tpathWithQuery: string,\n\thasBody: boolean,\n\tbodyStr: string | undefined,\n): Promise<Record<string, string>> => {\n\tconst headers: Record<string, string> = { ...client.defaultHeaders };\n\tif (hasBody) headers[\"content-type\"] = \"application/json\";\n\theaders[\"x-zero-sdk-version\"] = SDK_VERSION;\n\tif (client.apiVersion) headers[\"x-zero-api-version\"] = client.apiVersion;\n\n\tconst credentials = client.getCredentials();\n\tif (credentials.kind === \"session\") {\n\t\tObject.assign(headers, buildSessionAuthHeaders(credentials.accessToken));\n\t} else if (credentials.kind === \"account\") {\n\t\tconst signed = await buildAccountAuthHeaders(\n\t\t\tcredentials.account,\n\t\t\tmethod,\n\t\t\tpathWithQuery,\n\t\t\tbodyStr,\n\t\t);\n\t\tObject.assign(headers, signed);\n\t}\n\treturn headers;\n};\n\nconst parseErrorBody = async (response: Response): Promise<unknown> => {\n\ttry {\n\t\treturn await response.clone().json();\n\t} catch {\n\t\ttry {\n\t\t\treturn await response.text();\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n};\n\nconst errorMessageFromBody = (body: unknown, status: number): string => {\n\tif (\n\t\tbody !== null &&\n\t\ttypeof body === \"object\" &&\n\t\t\"error\" in body &&\n\t\ttypeof (body as { error: unknown }).error === \"string\"\n\t) {\n\t\treturn (body as { error: string }).error;\n\t}\n\treturn `HTTP ${status}`;\n};\n\nexport const request = async <T>(\n\tclient: ZeroClient,\n\topts: RequestOptions,\n\tschema: ZodType<T>,\n): Promise<T> => {\n\tconst pathWithQuery = buildPathWithQuery(opts.path, opts.query);\n\tconst url = joinUrl(client.baseUrl, pathWithQuery);\n\tconst hasBody = opts.body !== undefined;\n\t// EIP-712 uint256 fields arrive as bigint; serialize as decimal strings —\n\t// server coerces back before signing (round-trips the EIP-712 hash).\n\tconst bodyStr = hasBody\n\t\t? JSON.stringify(opts.body, (_k, v) =>\n\t\t\t\ttypeof v === \"bigint\" ? v.toString() : v,\n\t\t\t)\n\t\t: undefined;\n\n\t// configured-fetch owns timeout + signal lifetime + AbortError mapping.\n\t// This file adds schema validation, retry-on-5xx, 401-refresh-replay,\n\t// and run-id correlation.\n\t//\n\t// Per-leg timeout: each configuredFetch invocation gets its own\n\t// client.timeout. With refresh-replay + retry loop, worst-case\n\t// wall-clock per `request()` call is ~2 × (maxRetries + 1) ×\n\t// client.timeout. Consumers needing a hard deadline must enforce it\n\t// with their own AbortController.\n\tconst configuredFetch = buildConfiguredFetch(client);\n\n\tconst performOnce = async (): Promise<Response> =>\n\t\tconfiguredFetch(url, {\n\t\t\tmethod: opts.method,\n\t\t\theaders: await buildHeaders(\n\t\t\t\tclient,\n\t\t\t\topts.method,\n\t\t\t\tpathWithQuery,\n\t\t\t\thasBody,\n\t\t\t\tbodyStr,\n\t\t\t),\n\t\t\tbody: bodyStr,\n\t\t\tsignal: opts.signal,\n\t\t});\n\n\t// Refresh-on-401 fires at most once per user-facing request, never on\n\t// retries that follow it. Matches the CLI's contract: a stale access\n\t// token costs one refresh round-trip; a revoked refresh token surfaces\n\t// the original 401 to the caller.\n\t//\n\t// We delegate to client.refreshSessionOnce() rather than calling\n\t// tryRefreshSession directly so concurrent requests share a single\n\t// in-flight rotation. Without that dedup, N parallel 401s would each\n\t// fire their own refresh, the first would rotate the refresh token, and\n\t// the others would present the now-revoked token — which the server\n\t// treats as token theft (RFC 6819) and responds to by killing the entire\n\t// session family.\n\tlet refreshAttempted = false;\n\tconst executeWithRefresh = async (): Promise<Response> => {\n\t\tconst response = await performOnce();\n\t\tif (response.status !== 401 || refreshAttempted) return response;\n\t\tconst credentials = client.getCredentials();\n\t\tif (credentials.kind !== \"session\") return response;\n\t\trefreshAttempted = true;\n\t\tconst refreshed = await client.refreshSessionOnce(opts.signal);\n\t\tif (!refreshed) return response;\n\t\treturn await performOnce();\n\t};\n\n\tlet lastNetworkError: unknown;\n\tfor (let attempt = 0; attempt <= client.maxRetries; attempt++) {\n\t\tlet response: Response;\n\t\ttry {\n\t\t\tresponse = await executeWithRefresh();\n\t\t} catch (e) {\n\t\t\t// Timeout / caller-abort already arrive as typed ZeroError\n\t\t\t// subclasses from configured-fetch. Don't retry them and don't\n\t\t\t// repackage — surface as-is.\n\t\t\tif (e instanceof ZeroError) throw e;\n\t\t\tlastNetworkError = e;\n\t\t\tif (attempt < client.maxRetries) {\n\t\t\t\ttry {\n\t\t\t\t\tawait sleep(2 ** attempt * 200, opts.signal);\n\t\t\t\t} catch (sleepErr) {\n\t\t\t\t\tthrow new ZeroApiError(\"Request aborted by caller\", {\n\t\t\t\t\t\tstatus: 0,\n\t\t\t\t\t\tcause: sleepErr,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthrow new ZeroApiError(\"Network request failed\", {\n\t\t\t\tstatus: 0,\n\t\t\t\tcause: e,\n\t\t\t});\n\t\t}\n\n\t\tif (response.ok) {\n\t\t\t// Read text up-front so a schema mismatch can carry the body\n\t\t\t// for debugging. text() errors propagate as network errors —\n\t\t\t// a chunked-body drop must not get misclassified as schema.\n\t\t\tlet text: string;\n\t\t\ttry {\n\t\t\t\ttext = await response.text();\n\t\t\t} catch (e) {\n\t\t\t\tthrow new ZeroApiError(\"Response body read failed\", {\n\t\t\t\t\tstatus: response.status,\n\t\t\t\t\tcause: e,\n\t\t\t\t});\n\t\t\t}\n\t\t\tlet json: unknown;\n\t\t\ttry {\n\t\t\t\tjson = JSON.parse(text);\n\t\t\t} catch {\n\t\t\t\t// Server returned non-JSON; schema rejects below.\n\t\t\t}\n\t\t\tconst parsed = schema.safeParse(json);\n\t\t\tif (!parsed.success) {\n\t\t\t\t// Generic message — custom .refine messages and the raw\n\t\t\t\t// body can carry secrets, so neither lands in .message\n\t\t\t\t// where logger integrations capture it. Both stay on\n\t\t\t\t// .cause / .body for opt-in inspection.\n\t\t\t\tthrow new ZeroValidationError(\n\t\t\t\t\t`Response did not match expected schema for ${opts.method} ${opts.path}`,\n\t\t\t\t\t{ cause: parsed.error, body: text },\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn parsed.data;\n\t\t}\n\n\t\tif (RETRYABLE_STATUS.has(response.status) && attempt < client.maxRetries) {\n\t\t\ttry {\n\t\t\t\tawait sleep(2 ** attempt * 200, opts.signal);\n\t\t\t} catch (sleepErr) {\n\t\t\t\tthrow new ZeroApiError(\"Request aborted by caller\", {\n\t\t\t\t\tstatus: 0,\n\t\t\t\t\tcause: sleepErr,\n\t\t\t\t});\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst errorBody = await parseErrorBody(response);\n\t\tconst requestId = response.headers.get(\"x-request-id\") ?? undefined;\n\t\tthrow new ZeroApiError(errorMessageFromBody(errorBody, response.status), {\n\t\t\tstatus: response.status,\n\t\t\trequestId,\n\t\t\tbody: errorBody,\n\t\t});\n\t}\n\n\tthrow new ZeroApiError(\"Exhausted retries\", {\n\t\tstatus: 0,\n\t\tcause: lastNetworkError,\n\t});\n};\n","import type { z } from \"zod\";\nimport type { ZeroClient } from \"../client\";\nimport { ZeroAgentAuthError } from \"../errors\";\nimport {\n\ttype AgentAuthEndpoints,\n\ttype AgentClaimAttempt,\n\ttype AgentRegistration,\n\ttype AgentSignupResult,\n\ttype AgentToken,\n\ttype AgentZeroSession,\n\tagentAuthMetadataSchema,\n\tagentTokenResponseSchema,\n\tagentZeroSessionSchema,\n\ttype CompleteClaimResult,\n\tcompleteClaimResponseSchema,\n\tidentityEnvelopeSchema,\n\tstartClaimResponseSchema,\n} from \"../schemas/agent\";\nimport { request } from \"../transport/http\";\n\n// The auth.md agent-account lifecycle (AuthKit Agents): anonymous\n// registration, assertion → token exchange, and the human claim ceremony.\n// WorkOS hosts the protocol surface on the AuthKit domain, resolved via the\n// RFC 9728/8414 discovery chain: the API's protected-resource metadata lists\n// its authorization servers, and the one whose metadata carries an\n// `agent_auth` block is the AuthKit domain. Those cross-host calls go\n// through the client's raw fetch (the Zero session transport doesn't apply\n// there); only the final exchange hits the Zero API.\n\n// RFC 7523 — exchanges a service-signed identity assertion for an access token.\nconst JWT_BEARER_GRANT_TYPE = \"urn:ietf:params:oauth:grant-type:jwt-bearer\";\n\nconst trimSlash = (value: string): string => value.replace(/\\/$/, \"\");\n\n// undici's bare \"fetch failed\" hides the interesting part (ECONNREFUSED, DNS,\n// TLS) in err.cause — surface it with the URL so a misconfigured base URL is\n// diagnosable from the error message.\nconst wrapNetworkError = (url: string, err: unknown): ZeroAgentAuthError => {\n\tconst cause = (err as { cause?: unknown })?.cause;\n\tconst causeMessage =\n\t\tcause instanceof Error\n\t\t\t? (((cause as NodeJS.ErrnoException).code ?? cause.message) as string)\n\t\t\t: err instanceof Error\n\t\t\t\t? err.message\n\t\t\t\t: String(err);\n\treturn new ZeroAgentAuthError(`Could not reach ${url} (${causeMessage})`, {\n\t\tstatus: 0,\n\t\tcause: err,\n\t});\n};\n\nexport class AuthAgent {\n\tprivate endpointsPromise: Promise<AgentAuthEndpoints> | null = null;\n\n\tconstructor(private readonly client: ZeroClient) {}\n\n\t// Fully autonomous signup: register anonymously at the AuthKit domain,\n\t// exchange the identity assertion for a WorkOS access token, exchange that\n\t// for a Zero session. The claim token and identity assertion are returned\n\t// exactly once — the caller persists them.\n\tsignup = async (): Promise<AgentSignupResult> => {\n\t\tconst registration = await this.register();\n\t\tconst token = await this.exchangeAssertion(registration.identityAssertion);\n\t\tconst session = await this.exchangeAtZero(token.accessToken);\n\t\treturn { registration, session };\n\t};\n\n\tregister = async (): Promise<AgentRegistration> => {\n\t\tconst endpoints = await this.endpoints();\n\t\treturn this.postJson(\n\t\t\tendpoints.identityEndpoint,\n\t\t\t{ type: \"anonymous\" },\n\t\t\tidentityEnvelopeSchema,\n\t\t);\n\t};\n\n\texchangeAssertion = async (\n\t\tidentityAssertion: string,\n\t): Promise<AgentToken> => {\n\t\tconst endpoints = await this.endpoints();\n\t\treturn this.postForm(\n\t\t\tendpoints.tokenEndpoint,\n\t\t\t{ grant_type: JWT_BEARER_GRANT_TYPE, assertion: identityAssertion },\n\t\t\tagentTokenResponseSchema,\n\t\t);\n\t};\n\n\t// POST /v1/auth/agent/exchange — WorkOS agent access token → Zero session\n\t// pair (+ the implicitly provisioned wallet address). The post-claim token\n\t// goes through here too: the server binds the claiming human.\n\texchangeAtZero = (\n\t\taccessToken: string,\n\t\topts: { signal?: AbortSignal } = {},\n\t): Promise<AgentZeroSession> =>\n\t\trequest(\n\t\t\tthis.client,\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tpath: \"/v1/auth/agent/exchange\",\n\t\t\t\tbody: { accessToken },\n\t\t\t\tsignal: opts.signal,\n\t\t\t},\n\t\t\tagentZeroSessionSchema,\n\t\t);\n\n\t// Mint a claim attempt. The human opens the returned verification URI,\n\t// signs in as `email`, and the page shows THEM a pairing code to read back\n\t// to the agent — completeClaim() submits it.\n\tstartClaim = async (input: {\n\t\tclaimToken: string;\n\t\temail: string;\n\t}): Promise<AgentClaimAttempt> => {\n\t\tconst endpoints = await this.endpoints();\n\t\tif (!endpoints.claimEndpoint) {\n\t\t\tthrow new ZeroAgentAuthError(\n\t\t\t\t\"The authorization server advertises no claim endpoint.\",\n\t\t\t\t{ status: 0 },\n\t\t\t);\n\t\t}\n\t\treturn this.postJson(\n\t\t\tendpoints.claimEndpoint,\n\t\t\t{\n\t\t\t\ttype: \"service_auth\",\n\t\t\t\tclaim_token: input.claimToken,\n\t\t\t\tlogin_hint: input.email,\n\t\t\t},\n\t\t\tstartClaimResponseSchema,\n\t\t);\n\t};\n\n\t// Submit the pairing code the human read off the hosted page. Terminal\n\t// states map to a typed result; anything unexpected throws.\n\tcompleteClaim = async (input: {\n\t\tclaimToken: string;\n\t\tuserCode: string;\n\t}): Promise<CompleteClaimResult> => {\n\t\tconst endpoints = await this.endpoints();\n\t\tif (!endpoints.claimEndpoint) {\n\t\t\tthrow new ZeroAgentAuthError(\n\t\t\t\t\"The authorization server advertises no claim endpoint.\",\n\t\t\t\t{ status: 0 },\n\t\t\t);\n\t\t}\n\t\ttry {\n\t\t\tconst identity = await this.postJson(\n\t\t\t\t`${endpoints.claimEndpoint}/complete`,\n\t\t\t\t{ claim_token: input.claimToken, user_code: input.userCode },\n\t\t\t\tcompleteClaimResponseSchema,\n\t\t\t);\n\t\t\treturn { status: \"ok\", ...identity };\n\t\t} catch (err) {\n\t\t\tif (err instanceof ZeroAgentAuthError && err.serverCode) {\n\t\t\t\tif (err.serverCode === \"claim_not_confirmed\") {\n\t\t\t\t\treturn { status: \"not_confirmed\" };\n\t\t\t\t}\n\t\t\t\tif (err.serverCode === \"invalid_user_code\") {\n\t\t\t\t\treturn { status: \"invalid_code\" };\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\t[\n\t\t\t\t\t\t\"user_code_expired\",\n\t\t\t\t\t\t\"claim_expired\",\n\t\t\t\t\t\t\"claim_revoked\",\n\t\t\t\t\t\t\"already_claimed\",\n\t\t\t\t\t\t\"claim_denied\",\n\t\t\t\t\t].includes(err.serverCode)\n\t\t\t\t) {\n\t\t\t\t\treturn { status: \"expired\", code: err.serverCode };\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\t};\n\n\t// Resolve (and cache) the agent-auth endpoints via discovery.\n\tendpoints = (): Promise<AgentAuthEndpoints> => {\n\t\tif (!this.endpointsPromise) {\n\t\t\tthis.endpointsPromise = this.discover().catch((err) => {\n\t\t\t\t// A failed discovery must not poison the cache — retry next call.\n\t\t\t\tthis.endpointsPromise = null;\n\t\t\t\tthrow err;\n\t\t\t});\n\t\t}\n\t\treturn this.endpointsPromise;\n\t};\n\n\tprivate discover = async (): Promise<AgentAuthEndpoints> => {\n\t\tconst resource = await this.getJson<{\n\t\t\tauthorization_servers?: string[];\n\t\t}>(\n\t\t\t`${trimSlash(this.client.baseUrl)}/.well-known/oauth-protected-resource`,\n\t\t);\n\t\tlet lastError: unknown = null;\n\t\tfor (const server of resource.authorization_servers ?? []) {\n\t\t\ttry {\n\t\t\t\tconst raw = await this.getJson<unknown>(\n\t\t\t\t\t`${trimSlash(server)}/.well-known/oauth-authorization-server`,\n\t\t\t\t);\n\t\t\t\tconst metadata = agentAuthMetadataSchema.parse(raw);\n\t\t\t\treturn {\n\t\t\t\t\tauthorizationServer: trimSlash(server),\n\t\t\t\t\tidentityEndpoint: metadata.agent_auth.identity_endpoint,\n\t\t\t\t\tclaimEndpoint: metadata.agent_auth.claim_endpoint ?? null,\n\t\t\t\t\ttokenEndpoint:\n\t\t\t\t\t\tmetadata.token_endpoint ?? `${trimSlash(server)}/oauth2/token`,\n\t\t\t\t};\n\t\t\t} catch (err) {\n\t\t\t\tlastError = err;\n\t\t\t}\n\t\t}\n\t\tthrow new ZeroAgentAuthError(\n\t\t\t\"No authorization server with an agent_auth block found — agent registration is not enabled for this service.\",\n\t\t\t{ status: 0, cause: lastError },\n\t\t);\n\t};\n\n\tprivate getJson = async <T>(url: string): Promise<T> => {\n\t\tconst response = await this.client.fetchImpl(url).catch((err) => {\n\t\t\tthrow wrapNetworkError(url, err);\n\t\t});\n\t\tif (!response.ok) {\n\t\t\tthrow new ZeroAgentAuthError(`GET ${url} failed (${response.status})`, {\n\t\t\t\tstatus: response.status,\n\t\t\t});\n\t\t}\n\t\treturn (await response.json()) as T;\n\t};\n\n\tprivate postJson = <T>(\n\t\turl: string,\n\t\tbody: Record<string, unknown>,\n\t\tschema: z.ZodType<T>,\n\t): Promise<T> =>\n\t\tthis.post(url, \"application/json\", JSON.stringify(body), schema);\n\n\tprivate postForm = <T>(\n\t\turl: string,\n\t\tfields: Record<string, string>,\n\t\tschema: z.ZodType<T>,\n\t): Promise<T> =>\n\t\tthis.post(\n\t\t\turl,\n\t\t\t\"application/x-www-form-urlencoded\",\n\t\t\tnew URLSearchParams(fields).toString(),\n\t\t\tschema,\n\t\t);\n\n\tprivate post = async <T>(\n\t\turl: string,\n\t\tcontentType: string,\n\t\tbody: string,\n\t\tschema: z.ZodType<T>,\n\t): Promise<T> => {\n\t\tconst response = await this.client\n\t\t\t.fetchImpl(url, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: { \"content-type\": contentType },\n\t\t\t\tbody,\n\t\t\t})\n\t\t\t.catch((err) => {\n\t\t\t\tthrow wrapNetworkError(url, err);\n\t\t\t});\n\t\tconst text = await response.text();\n\t\tlet parsed: unknown = null;\n\t\ttry {\n\t\t\tparsed = text ? JSON.parse(text) : null;\n\t\t} catch {\n\t\t\t// Non-JSON body — surfaced via the thrown error below.\n\t\t}\n\t\tif (!response.ok) {\n\t\t\tconst errBody = parsed as { code?: unknown; error?: unknown } | null;\n\t\t\tconst code = errBody?.code ?? errBody?.error;\n\t\t\tthrow new ZeroAgentAuthError(\n\t\t\t\t`Agent auth request to ${url} failed (${response.status}${\n\t\t\t\t\ttypeof code === \"string\" ? `: ${code}` : \"\"\n\t\t\t\t})`,\n\t\t\t\t{ status: response.status, body: parsed ?? text },\n\t\t\t);\n\t\t}\n\t\treturn schema.parse(parsed);\n\t};\n}\n","import { z } from \"zod\";\n\nexport const userWalletDtoSchema = z.object({\n\twalletAddress: z.string(),\n\tsource: z.enum([\"self_custody\", \"privy_embedded\"]),\n\tisPrimary: z.boolean(),\n\tlinkedAt: z.union([z.string(), z.date()]).nullable().optional(),\n\timportedAt: z.union([z.string(), z.date()]).nullable().optional(),\n\tdelegationGranted: z.boolean(),\n\tsignerQuorumId: z.string().nullable(),\n\t// Per-transaction USDC cap in base units (6 dp). null = unlimited, 0 = free-only.\n\tmaxTransactionUsdcBaseUnits: z.number().int().nullable(),\n});\n\n// `welcomeBonus` is null when the user has no provisioned wallet (no\n// welcome-bonus row exists to derive a status from).\nexport const welcomeBonusSummarySchema = z.object({\n\tstatus: z.string(),\n\tamountUsd: z.number(),\n});\n\n// The internal (web-app facing) user, as returned by GET /v1/users/me. Fields\n// beyond id/email are optional so a partial user payload still parses (e.g. the\n// device-login poll user); /me populates them all.\nexport const internalUserDtoSchema = z.object({\n\tid: z.string(),\n\temail: z.string().nullable(),\n\tcreatedAt: z.union([z.string(), z.date()]).optional(),\n\tlastLoginAt: z.union([z.string(), z.date()]).nullable().optional(),\n\tonboardingCompleted: z.boolean().optional(),\n\tdelegationGranted: z.boolean().optional(),\n\twallets: z.array(userWalletDtoSchema).optional(),\n\tbalance: z\n\t\t.object({ amount: z.string(), asset: z.string() })\n\t\t.nullable()\n\t\t.optional(),\n\twelcomeBonus: welcomeBonusSummarySchema.nullable().optional(),\n});\n\n// The public (agent-facing) profile, as returned by GET /v1/users/me/profile and\n// the MCP get_profile tool. Trimmed relative to the internal user — identity +\n// primary wallet address + balance + welcome-bonus, no per-wallet metadata.\nexport const publicUserDtoSchema = z.object({\n\tuser: z.object({\n\t\tid: z.string(),\n\t\temail: z.string().nullable(),\n\t}),\n\twalletAddress: z.string().nullable(),\n\tbalance: z.object({ amount: z.string(), asset: z.string() }).nullable(),\n\twelcomeBonus: welcomeBonusSummarySchema.nullable(),\n});\n\nexport const signResponseSchema = z.object({\n\tsignature: z.string().regex(/^0x[0-9a-fA-F]+$/, \"must be 0x-prefixed hex\"),\n\twalletAddress: z\n\t\t.string()\n\t\t.regex(/^0x[0-9a-fA-F]{40}$/, \"must be 0x-prefixed 40-char hex address\"),\n});\n\nexport type InternalUserDto = z.infer<typeof internalUserDtoSchema>;\nexport type PublicUserDto = z.infer<typeof publicUserDtoSchema>;\nexport type UserWalletDto = z.infer<typeof userWalletDtoSchema>;\nexport type WelcomeBonusSummary = z.infer<typeof welcomeBonusSummarySchema>;\nexport type SignResponse = z.infer<typeof signResponseSchema>;\n","import { z } from \"zod\";\nimport { internalUserDtoSchema } from \"./auth\";\n\nexport const deviceStartResponseSchema = z.object({\n\tdeviceCode: z.string(),\n\tuserCode: z.string(),\n\tverificationUri: z.string(),\n\tpollInterval: z.number(),\n\texpiresAt: z.number(),\n});\nexport type DeviceStartResponse = z.infer<typeof deviceStartResponseSchema>;\n\n// RFC 8628: /poll returns HTTP 200 with `{ error }` for pending/expired\n// signals; any non-2xx is a real upstream failure (e.g. Redis down) and\n// must surface as a thrown ZeroApiError, not coast into the success branch\n// where undefined tokens would land on disk.\nexport const devicePollResponseSchema = z.union([\n\t// userCode + verificationUri are optional: older API deployments don't\n\t// echo them on pending.\n\tz.object({\n\t\terror: z.literal(\"authorization_pending\"),\n\t\tuserCode: z.string().optional(),\n\t\tverificationUri: z.string().optional(),\n\t}),\n\tz.object({ error: z.literal(\"expired_token\") }),\n\tz.object({\n\t\taccessToken: z.string(),\n\t\trefreshToken: z.string(),\n\t\texpiresIn: z.number(),\n\t\tuser: internalUserDtoSchema,\n\t}),\n]);\n\nexport type DevicePollResult =\n\t| { status: \"pending\"; userCode?: string; verificationUri?: string }\n\t| { status: \"expired\" }\n\t| {\n\t\t\tstatus: \"ok\";\n\t\t\taccessToken: string;\n\t\t\trefreshToken: string;\n\t\t\texpiresIn: number;\n\t\t\tuser: z.infer<typeof internalUserDtoSchema>;\n\t };\n\nexport const sessionExchangeResponseSchema = z.object({\n\ttoken: z.string(),\n\texpiresAt: z.number(),\n});\nexport type SessionExchangeResponse = z.infer<\n\ttypeof sessionExchangeResponseSchema\n>;\n","import type { ZeroClient } from \"../client\";\nimport {\n\ttype DevicePollResult,\n\ttype DeviceStartResponse,\n\tdevicePollResponseSchema,\n\tdeviceStartResponseSchema,\n} from \"../schemas/device\";\nimport { request } from \"../transport/http\";\n\n// RFC 8628 device-authorization primitives. Used by CLI / TV / non-browser\n// flows where the device prints a URL + user code and waits for an\n// authenticated browser to confirm.\nexport class AuthDevice {\n\tconstructor(private readonly client: ZeroClient) {}\n\n\tstart = (opts: { signal?: AbortSignal } = {}): Promise<DeviceStartResponse> =>\n\t\trequest(\n\t\t\tthis.client,\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tpath: \"/v1/auth/device/start\",\n\t\t\t\tsignal: opts.signal,\n\t\t\t},\n\t\t\tdeviceStartResponseSchema,\n\t\t);\n\n\tpoll = async (\n\t\tdeviceCode: string,\n\t\topts: { signal?: AbortSignal } = {},\n\t): Promise<DevicePollResult> => {\n\t\tconst parsed = await request(\n\t\t\tthis.client,\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tpath: \"/v1/auth/device/poll\",\n\t\t\t\tbody: { deviceCode },\n\t\t\t\tsignal: opts.signal,\n\t\t\t},\n\t\t\tdevicePollResponseSchema,\n\t\t);\n\t\tif (\"error\" in parsed) {\n\t\t\treturn parsed.error === \"authorization_pending\"\n\t\t\t\t? {\n\t\t\t\t\t\tstatus: \"pending\",\n\t\t\t\t\t\tuserCode: parsed.userCode,\n\t\t\t\t\t\tverificationUri: parsed.verificationUri,\n\t\t\t\t\t}\n\t\t\t\t: { status: \"expired\" };\n\t\t}\n\t\treturn {\n\t\t\tstatus: \"ok\",\n\t\t\taccessToken: parsed.accessToken,\n\t\t\trefreshToken: parsed.refreshToken,\n\t\t\texpiresIn: parsed.expiresIn,\n\t\t\tuser: parsed.user,\n\t\t};\n\t};\n}\n","import {\n\tbytesToHex,\n\tgetAddress,\n\ttype Hex,\n\ttype SignableMessage,\n\ttype TypedDataDefinition,\n} from \"viem\";\nimport { z } from \"zod\";\nimport type { ZeroClient } from \"../client\";\nimport { ZeroApiError, ZeroAuthError, ZeroPaymentError } from \"../errors\";\nimport {\n\ttype InternalUserDto,\n\tinternalUserDtoSchema,\n\ttype PublicUserDto,\n\tpublicUserDtoSchema,\n\tsignResponseSchema,\n\ttype UserWalletDto,\n\tuserWalletDtoSchema,\n} from \"../schemas/auth\";\nimport {\n\ttype SessionExchangeResponse,\n\tsessionExchangeResponseSchema,\n} from \"../schemas/device\";\nimport { request } from \"../transport/http\";\nimport { AuthAgent } from \"./auth-agent\";\nimport { AuthDevice } from \"./auth-device\";\n\nconst userWalletsSchema = z.array(userWalletDtoSchema);\n\nexport type SignMessageInput = { message: SignableMessage };\nexport type SignTypedDataInput = TypedDataDefinition;\n// Caller owns serialize/re-serialize (Tempo's is async + chain-specific);\n// the server only signs the supplied unsigned-tx hex.\nexport type SignTransactionInput = { unsignedTransaction: Hex };\n\n// When set, throws if the server signed as a different wallet. Used by the\n// managed-account adapter so an in-flight x402 payment doesn't end up with a\n// `from` that doesn't match the recovered signature.\nexport type SignOptions = { expectedAddress?: string };\n\n// API accepts strings only; coerce { raw } variants to hex.\nconst normalizeMessage = (message: SignableMessage): string => {\n\tif (typeof message === \"string\") return message;\n\tif (typeof message.raw === \"string\") return message.raw;\n\treturn bytesToHex(message.raw);\n};\n\n// Sign endpoints' 402 (runner budget today; possibly rate-limit / subscription\n// later) → ZeroPaymentError so caller can branch on type, not status.\nconst repackageSignFailure = (err: unknown, op: string): never => {\n\tif (err instanceof ZeroApiError && err.status === 402) {\n\t\tconst body = err.body as { error?: unknown } | null;\n\t\tconst detail =\n\t\t\tbody && typeof body.error === \"string\" ? `: ${body.error}` : \"\";\n\t\tthrow new ZeroPaymentError(\n\t\t\t`Sign endpoint refused ${op} (HTTP 402)${detail}`,\n\t\t\t{ cause: err },\n\t\t);\n\t}\n\tthrow err;\n};\n\nexport class Auth {\n\treadonly agent: AuthAgent;\n\treadonly device: AuthDevice;\n\n\tconstructor(private readonly client: ZeroClient) {\n\t\tthis.agent = new AuthAgent(client);\n\t\tthis.device = new AuthDevice(client);\n\t}\n\n\t// The internal (web-app facing) user profile. Richer than profile(): full\n\t// wallet list with per-wallet delegation/signer/limit metadata.\n\tme = (opts: { signal?: AbortSignal } = {}): Promise<InternalUserDto> =>\n\t\trequest(\n\t\t\tthis.client,\n\t\t\t{ method: \"GET\", path: \"/v1/users/me\", signal: opts.signal },\n\t\t\tinternalUserDtoSchema,\n\t\t);\n\n\t// The public (agent-facing) profile — identity + primary wallet address +\n\t// balance + welcome-bonus, no per-wallet metadata. Same shape the MCP\n\t// get_profile tool returns; rendered by `zero auth whoami`.\n\tprofile = (opts: { signal?: AbortSignal } = {}): Promise<PublicUserDto> =>\n\t\trequest(\n\t\t\tthis.client,\n\t\t\t{ method: \"GET\", path: \"/v1/users/me/profile\", signal: opts.signal },\n\t\t\tpublicUserDtoSchema,\n\t\t);\n\n\t// The user's wallets only. Lightweight sibling of `me()` for callers that\n\t// just need wallet addresses (e.g. managed-account resolution on the pay\n\t// path) — avoids the heavier internal-profile computation behind `me()`.\n\twallets = (opts: { signal?: AbortSignal } = {}): Promise<UserWalletDto[]> =>\n\t\trequest(\n\t\t\tthis.client,\n\t\t\t{ method: \"GET\", path: \"/v1/users/me/wallets\", signal: opts.signal },\n\t\t\tuserWalletsSchema,\n\t\t);\n\n\t// Exchange an ephemeral session code (e.g. runner / sandbox handoff) for\n\t// a session access token. The returned token has no refresh path — pair\n\t// with `refreshToken: \"\"` when constructing the client.\n\texchangeSessionCode = (\n\t\tcode: string,\n\t\topts: { signal?: AbortSignal } = {},\n\t): Promise<SessionExchangeResponse> =>\n\t\trequest(\n\t\t\tthis.client,\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tpath: \"/v1/session/exchange\",\n\t\t\t\tbody: { code },\n\t\t\t\tsignal: opts.signal,\n\t\t\t},\n\t\t\tsessionExchangeResponseSchema,\n\t\t);\n\n\t// Server-side revoke of the refresh token. Throws ZeroApiError on any\n\t// non-2xx — callers that have already cleared local state (e.g. CLI\n\t// logout) typically want to swallow with `.catch(() => {})` so a flaky\n\t// server doesn't surface as a user-visible failure for a sign-out that\n\t// already succeeded locally. Response body is opaque; schema is\n\t// `z.unknown()` and the resolved value is discarded.\n\tlogout = async (\n\t\trefreshToken: string,\n\t\topts: { signal?: AbortSignal } = {},\n\t): Promise<void> => {\n\t\tawait request(\n\t\t\tthis.client,\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tpath: \"/v1/auth/logout\",\n\t\t\t\tbody: { refreshToken },\n\t\t\t\tsignal: opts.signal,\n\t\t\t},\n\t\t\tz.unknown(),\n\t\t);\n\t};\n\n\t// Force a session refresh. Routes through refreshSessionOnce() so a\n\t// proactive call doesn't race a 401-driven transport refresh —\n\t// concurrent POSTs with the same refresh token kill the session\n\t// family (RFC 6819 token-theft response).\n\trefresh = async (): Promise<void> => {\n\t\tconst credentials = this.client.getCredentials();\n\t\tif (credentials.kind !== \"session\") {\n\t\t\tthrow new ZeroAuthError(\n\t\t\t\t\"auth_no_credentials\",\n\t\t\t\t\"refresh() requires the client to be constructed with a session — got credentials.kind=\" +\n\t\t\t\t\tcredentials.kind,\n\t\t\t);\n\t\t}\n\t\tconst ok = await this.client.refreshSessionOnce();\n\t\tif (!ok) {\n\t\t\tthrow new ZeroAuthError(\n\t\t\t\t\"auth_session_expired\",\n\t\t\t\t\"Session refresh failed. The refresh token may be revoked or expired.\",\n\t\t\t);\n\t\t}\n\t};\n\n\tsignMessage = async (\n\t\tinput: SignMessageInput,\n\t\topts: SignOptions = {},\n\t): Promise<Hex> => {\n\t\tconst credentials = this.client.getCredentials();\n\t\tif (credentials.kind === \"account\") {\n\t\t\treturn await credentials.account.signMessage({ message: input.message });\n\t\t}\n\t\tif (credentials.kind === \"session\") {\n\t\t\ttry {\n\t\t\t\tconst parsed = await request(\n\t\t\t\t\tthis.client,\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\tpath: \"/v1/users/me/sign-message\",\n\t\t\t\t\t\tbody: { message: normalizeMessage(input.message) },\n\t\t\t\t\t},\n\t\t\t\t\tsignResponseSchema,\n\t\t\t\t);\n\t\t\t\tthis.assertSignerMatches(parsed.walletAddress, opts.expectedAddress);\n\t\t\t\treturn parsed.signature as Hex;\n\t\t\t} catch (err) {\n\t\t\t\trepackageSignFailure(err, \"signMessage\");\n\t\t\t}\n\t\t}\n\t\tthrow new ZeroAuthError(\n\t\t\t\"auth_no_credentials\",\n\t\t\t\"signMessage() requires the client to be constructed with `account` or `session`.\",\n\t\t);\n\t};\n\n\t// Managed-only: BYO accounts sign locally via viem's account.signTransaction.\n\tsignTransaction = async (\n\t\tinput: SignTransactionInput,\n\t\topts: SignOptions = {},\n\t): Promise<Hex> => {\n\t\tconst credentials = this.client.getCredentials();\n\t\tif (credentials.kind === \"session\") {\n\t\t\ttry {\n\t\t\t\tconst parsed = await request(\n\t\t\t\t\tthis.client,\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\tpath: \"/v1/users/me/sign-transaction\",\n\t\t\t\t\t\tbody: { unsignedTransaction: input.unsignedTransaction },\n\t\t\t\t\t},\n\t\t\t\t\tsignResponseSchema,\n\t\t\t\t);\n\t\t\t\tthis.assertSignerMatches(parsed.walletAddress, opts.expectedAddress);\n\t\t\t\treturn parsed.signature as Hex;\n\t\t\t} catch (err) {\n\t\t\t\trepackageSignFailure(err, \"signTransaction\");\n\t\t\t}\n\t\t}\n\t\t// Distinct codes so callers can tell \"unsupported op\" from \"log in\".\n\t\tif (credentials.kind === \"account\") {\n\t\t\tthrow new ZeroAuthError(\n\t\t\t\t\"auth_error\",\n\t\t\t\t\"signTransaction() is a managed-signing operation and is not supported in account mode. Sign locally with viem's account.signTransaction instead.\",\n\t\t\t);\n\t\t}\n\t\tthrow new ZeroAuthError(\n\t\t\t\"auth_no_credentials\",\n\t\t\t\"signTransaction() requires session credentials (managed signing).\",\n\t\t);\n\t};\n\n\tsignTypedData = async (\n\t\tinput: SignTypedDataInput,\n\t\topts: SignOptions = {},\n\t): Promise<Hex> => {\n\t\tconst credentials = this.client.getCredentials();\n\t\tif (credentials.kind === \"account\") {\n\t\t\tif (!credentials.account.signTypedData) {\n\t\t\t\tthrow new ZeroAuthError(\n\t\t\t\t\t\"auth_error\",\n\t\t\t\t\t\"The configured viem account does not implement signTypedData.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn await credentials.account.signTypedData(input);\n\t\t}\n\t\tif (credentials.kind === \"session\") {\n\t\t\ttry {\n\t\t\t\tconst parsed = await request(\n\t\t\t\t\tthis.client,\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\tpath: \"/v1/users/me/sign-typed-data\",\n\t\t\t\t\t\tbody: { typedData: input },\n\t\t\t\t\t},\n\t\t\t\t\tsignResponseSchema,\n\t\t\t\t);\n\t\t\t\tthis.assertSignerMatches(parsed.walletAddress, opts.expectedAddress);\n\t\t\t\treturn parsed.signature as Hex;\n\t\t\t} catch (err) {\n\t\t\t\trepackageSignFailure(err, \"signTypedData\");\n\t\t\t}\n\t\t}\n\t\tthrow new ZeroAuthError(\n\t\t\t\"auth_no_credentials\",\n\t\t\t\"signTypedData() requires the client to be constructed with `account` or `session`.\",\n\t\t);\n\t};\n\n\t// Compare against the caller's pinned address (not shared cache) so\n\t// concurrent pay()s can't race past each other. Mismatch → clear + throw;\n\t// the caller's retry rebuilds against the new wallet.\n\tprivate assertSignerMatches = (\n\t\tserverAddr: string,\n\t\texpectedAddr: string | undefined,\n\t): void => {\n\t\tif (!expectedAddr) return;\n\t\tconst canonicalServer = getAddress(serverAddr);\n\t\tconst canonicalExpected = getAddress(expectedAddr);\n\t\tif (canonicalExpected === canonicalServer) return;\n\t\tthis.client.clearManagedAccount();\n\t\tthrow new ZeroAuthError(\n\t\t\t\"auth_error\",\n\t\t\t`Managed signing wallet changed (caller expected ${canonicalExpected}, server signed as ${canonicalServer}). Cache cleared — retry to rebuild against the current wallet.`,\n\t\t);\n\t};\n}\n","import { z } from \"zod\";\n\n// Closed enum so callers get typed completions and the schema rejects\n// future server-side additions until the SDK catches up — preferable to\n// silently accepting unknown values that downstream code can't branch on.\nexport const BUG_REPORT_CATEGORIES = [\n\t\"search_relevance\",\n\t\"ranking_issue\",\n\t\"missing_capability\",\n\t\"wrong_schema\",\n\t\"misleading_description\",\n\t\"broken_execution\",\n\t\"payment_failure\",\n\t\"billing_anomaly\",\n\t\"cli_bug\",\n\t\"security\",\n\t\"other\",\n] as const;\nexport type BugReportCategory = (typeof BUG_REPORT_CATEGORIES)[number];\n\nexport const createBugReportResponseSchema = z.object({\n\tbugReportId: z.string(),\n\tstatus: z.string(),\n\tdeduped: z.boolean(),\n\tcategory: z.enum(BUG_REPORT_CATEGORIES).nullable(),\n\ttitle: z.string().nullable(),\n\tattached: z.object({\n\t\tcapabilityId: z.number().nullable(),\n\t\trunId: z.number().nullable(),\n\t\tsearchId: z.number().nullable(),\n\t}),\n});\n\n// Inputs are typed but not Zod-validated — we control these shapes since\n// they come from the SDK consumer, not from an untrusted network response.\nexport type CreateBugReportInput = {\n\tdescription: string;\n\tcategory?: BugReportCategory;\n\ttitle?: string;\n\tseverity?: number;\n\treproduction?: string;\n\tcapabilityId?: string;\n\trunId?: string;\n\tsearchId?: string;\n\t// Arbitrary caller-supplied context. The field is named `cliContext` for\n\t// historical wire reasons (CLI was the first caller); SDK consumers can\n\t// pass anything JSON-serializable. Passed through opaquely.\n\tcliContext?: Record<string, unknown>;\n\tidempotencyKey?: string;\n};\n\nexport type CreateBugReportResponse = z.infer<\n\ttypeof createBugReportResponseSchema\n>;\n","import { createHash } from \"node:crypto\";\nimport type { ZeroClient } from \"../client\";\nimport {\n\ttype CreateBugReportInput,\n\ttype CreateBugReportResponse,\n\tcreateBugReportResponseSchema,\n} from \"../schemas/bug-reports\";\nimport { request } from \"../transport/http\";\n\nconst TEN_MIN_MS = 10 * 60 * 1000;\n\n// Auto-derive an idempotency key when the caller doesn't supply one. Buckets\n// timestamps to the nearest 10 minutes so an accidental retry within that\n// window dedupes naturally, but a deliberate re-file an hour later goes\n// through. The bucket also includes the contextSeed (e.g. most-recent run uid)\n// so the key changes when context changes.\nconst autoIdempotencyKey = (\n\tdescription: string,\n\tcontextSeed: string | null | undefined,\n): string => {\n\tconst bucket = Math.floor(Date.now() / TEN_MIN_MS);\n\tconst seed = `${description}|${contextSeed ?? \"\"}|${bucket}`;\n\treturn `auto-${createHash(\"sha256\").update(seed).digest(\"hex\").slice(0, 16)}`;\n};\n\nexport class BugReports {\n\tconstructor(private readonly client: ZeroClient) {}\n\n\t// POST /v1/bug-reports. Wallet-attributed server-side; the SDK client's\n\t// active credential drives attribution (account-mode → EIP-191 from the\n\t// wallet, session-mode → Bearer + server resolves the user's wallet).\n\t// When `idempotencyKey` is omitted, one is auto-derived from the description\n\t// and (optional) contextSeed, bucketed to 10-minute windows so accidental\n\t// retries within the window dedup naturally.\n\tcreate = (\n\t\tinput: CreateBugReportInput & { contextSeed?: string },\n\t\topts: { signal?: AbortSignal } = {},\n\t): Promise<CreateBugReportResponse> => {\n\t\tconst { contextSeed, ...rest } = input;\n\t\tconst withKey: CreateBugReportInput = {\n\t\t\t...rest,\n\t\t\tidempotencyKey:\n\t\t\t\tinput.idempotencyKey ??\n\t\t\t\tautoIdempotencyKey(input.description, contextSeed),\n\t\t};\n\t\treturn request(\n\t\t\tthis.client,\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tpath: \"/v1/bug-reports\",\n\t\t\t\tbody: withKey,\n\t\t\t\tsignal: opts.signal,\n\t\t\t},\n\t\t\tcreateBugReportResponseSchema,\n\t\t);\n\t};\n}\n","import { z } from \"zod\";\n\nexport const ratingSchema = z.object({\n\tscore: z.string(),\n\tsuccessRate: z.string(),\n\treviews: z.number(),\n\tstars: z.string().nullable().optional(),\n\tstate: z.enum([\"unrated\", \"rated\"]).optional(),\n});\n\nexport type Rating = z.infer<typeof ratingSchema>;\n","import { z } from \"zod\";\nimport { ratingSchema } from \"./shared\";\n\n// One accepted payment option in the resolved `pricing` (ZERO-199 P-B).\nconst pricingOptionSchema = z.object({\n\tkind: z.string(),\n\tprotocol: z.string(),\n\tnetwork: z.string().nullable(),\n\tamountUsd: z.string().nullable(),\n\tper: z.string(),\n\tconfidence: z.string(),\n\tdepositUsd: z.string().optional(),\n});\n\nexport const capabilityResponseSchema = z.object({\n\tuid: z.string(),\n\tslug: z.string(),\n\tname: z.string(),\n\tdescription: z.string(),\n\turl: z.string(),\n\turlTemplate: z.string().nullable().optional(),\n\tmethod: z.string(),\n\theaders: z.record(z.string(), z.string()).nullable(),\n\tbodySchema: z.record(z.string(), z.unknown()).nullable(),\n\tresponseSchema: z.record(z.string(), z.unknown()).nullable(),\n\texample: z.object({ request: z.unknown(), response: z.unknown() }).nullable(),\n\t// The bare, schema-validated request body to send — `.request` unwrapped\n\t// from the transcript envelope and checked against the current bodySchema.\n\t// Null when there's no usable example or it's stale vs the schema; `example`\n\t// is retained for the response sample. Optional for back-compat with older\n\t// servers that don't emit it.\n\texampleRequest: z.record(z.string(), z.unknown()).nullable().optional(),\n\ttags: z.array(z.string()).nullable(),\n\texampleAgentPrompt: z.string().nullable().optional(),\n\twhatItDoes: z.string().nullable().optional(),\n\tresultDescription: z.string().nullable().optional(),\n\tfailureModes: z.array(z.string()).nullable().optional(),\n\twhenToPreferThis: z.string().nullable().optional(),\n\t// Agent-facing execution guide (markdown). Covers usage patterns, input\n\t// field guidance, cross-cap composition, and known failure modes.\n\t// Named after MCP tool convention: description = what it is, instructions = how to use it.\n\tinstructions: z.string().nullable().optional(),\n\tdisplayCostAmount: z.string(),\n\tdisplayCostAsset: z.string(),\n\t// Whether the upstream advertises variable/usage-based pricing, and the raw\n\t// hint string (e.g. \"$0.01/result\"). The server emits both; without them an\n\t// agent sees a single scalar with no signal that the price scales with input\n\t// (ZERO-199). Optional so an older API deploy still parses.\n\tpriceDynamic: z.boolean().optional(),\n\tpriceHint: z.string().nullable().optional(),\n\t// ZERO-199: the authoritative price classification. Only `proven_free` may be\n\t// rendered \"Free\"; `unknown_unparsed` is a parse miss (never free); a parse\n\t// miss must not become \"0\"→Free. Optional so older deploys still parse.\n\tpriceStatus: z\n\t\t.enum([\n\t\t\t\"priced\",\n\t\t\t\"proven_free\",\n\t\t\t\"free_handshake\",\n\t\t\t\"unknown_unparsed\",\n\t\t\t\"unprobed\",\n\t\t])\n\t\t.optional(),\n\t// ZERO-147 — provenance of displayCostAmount (settled | probe | registry |\n\t// unknown). `settled` means the shown price is reconciled from real charges.\n\tpriceSource: z.string().nullable().optional(),\n\trequiresHandshake: z.boolean().optional(),\n\treviewCount: z.number(),\n\trating: ratingSchema,\n\tpriceObserved: z\n\t\t.object({\n\t\t\tminCents: z.string().nullable(),\n\t\t\tmedianCents: z.string().nullable(),\n\t\t\tmaxCents: z.string().nullable(),\n\t\t\t// Deprecated alias for maxCents; kept for back-compat with older\n\t\t\t// API versions that still emit it.\n\t\t\tp95Cents: z.string().nullable(),\n\t\t\tsampleCount: z.number(),\n\t\t\tvaries: z.boolean(),\n\t\t\tfailureChargeRate: z.number().nullable(),\n\t\t})\n\t\t.nullable()\n\t\t.optional(),\n\tpaymentMethods: z\n\t\t.array(\n\t\t\tz.object({\n\t\t\t\tuid: z.string(),\n\t\t\t\tprotocol: z.string(),\n\t\t\t\tmethodType: z.string(),\n\t\t\t\tchain: z.string().nullable(),\n\t\t\t\tmode: z.string(),\n\t\t\t\tcostAmount: z.string(),\n\t\t\t\tcostPer: z.string(),\n\t\t\t\tpriority: z.number(),\n\t\t\t\t// ZERO-199 rail-union fields (optional; older deploys omit them).\n\t\t\t\tasset: z.string().nullable().optional(),\n\t\t\t\tunit: z.string().optional(),\n\t\t\t\tdepositMicros: z.number().nullable().optional(),\n\t\t\t\tplanRef: z.string().nullable().optional(),\n\t\t\t}),\n\t\t)\n\t\t.nullable(),\n\t// Recommended channel deposit for a `mode='session'` cap (the seller's\n\t// advertised `suggestedDeposit`). Without it an agent can't size an MPP\n\t// session channel. The server emits it; optional for older-deploy parsing\n\t// (ZERO-199).\n\tsessionDeposit: z\n\t\t.object({ amountUsd: z.string(), asset: z.string() })\n\t\t.nullable()\n\t\t.optional(),\n\t// ZERO-199 P-B — the single resolved price. Prefer `pricing.summary`/`kind`\n\t// over re-deriving from the legacy fields. Optional so older deploys parse.\n\tpricing: z\n\t\t.object({\n\t\t\tkind: z.string(),\n\t\t\tsummary: z.string(),\n\t\t\tprimary: pricingOptionSchema.nullable(),\n\t\t\taccepted: z.array(pricingOptionSchema),\n\t\t})\n\t\t.optional(),\n\tavailabilityStatus: z\n\t\t.enum([\"healthy\", \"unknown\", \"down\"])\n\t\t.nullable()\n\t\t.optional(),\n\t/**\n\t * @deprecated The API no longer emits `displayStatus`; it has been replaced\n\t * by the consolidated 3-value {@link capabilityResponseSchema.shape.availabilityStatus}.\n\t * Kept as an optional field for one release for back-compat (ZERO-89 soft\n\t * migration) and will be removed in the next major version.\n\t */\n\tdisplayStatus: z\n\t\t.enum([\"healthy\", \"stable\", \"degraded\", \"unhealthy\", \"unknown\"])\n\t\t.optional(),\n\tactivationCount: z.number().optional(),\n\tlastUsedAt: z.string().nullable().optional(),\n\tlastSuccessfullyRanAt: z.string().nullable().optional(),\n});\n\nexport type CapabilityResponse = z.infer<typeof capabilityResponseSchema>;\n\nexport type GetCapabilityOptions = {\n\t/**\n\t * @deprecated Pass the `z_xxx.N` token from `search()` as the `id` argument\n\t * instead — it embeds the searchId. This field is kept for back-compat with\n\t * callers that still pass uid + searchId separately.\n\t */\n\tsearchId?: string;\n\tsignal?: AbortSignal;\n};\n\n// Result of POST /v1/capabilities/resolve. `capabilityId` is the cap_* uid\n// (ready to pass straight to runs.create); `matchedVia` tells the caller\n// whether the hit was an exact-URL or urlTemplate match (a confidence signal).\nexport const resolveCapabilityResponseSchema = z.object({\n\tcapabilityId: z.string(),\n\tcapabilitySlug: z.string(),\n\tmatchedVia: z.enum([\"exact\", \"template\"]),\n});\n\nexport type ResolveCapabilityResponse = z.infer<\n\ttypeof resolveCapabilityResponseSchema\n>;\n","import type { ZeroClient } from \"../client\";\nimport { ZeroApiError } from \"../errors\";\nimport {\n\ttype CapabilityResponse,\n\tcapabilityResponseSchema,\n\ttype GetCapabilityOptions,\n\ttype ResolveCapabilityResponse,\n\tresolveCapabilityResponseSchema,\n} from \"../schemas/capabilities\";\nimport { request } from \"../transport/http\";\n\nexport class Capabilities {\n\tconstructor(private readonly client: ZeroClient) {}\n\n\tget = (\n\t\tid: string,\n\t\topts: GetCapabilityOptions = {},\n\t): Promise<CapabilityResponse> =>\n\t\trequest(\n\t\t\tthis.client,\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tpath: `/v1/capabilities/${encodeURIComponent(id)}`,\n\t\t\t\tquery: opts.searchId ? { searchId: opts.searchId } : undefined,\n\t\t\t\tsignal: opts.signal,\n\t\t\t},\n\t\t\tcapabilityResponseSchema,\n\t\t);\n\n\t// Resolve a raw endpoint URL + method back to the capability that owns it,\n\t// for the `zero fetch <url>` case where the client has no local search\n\t// context to match against (a memoized/cross-session URL). Returns null on\n\t// 404 — i.e. no match or an ambiguous multi-match, both of which the server\n\t// reports as 404 (resolveByUrl fails closed rather than mis-attribute).\n\t// The URL travels in the POST body so it stays out of access logs and is\n\t// never stored; the caller uses the returned capabilityId to record an\n\t// attributed run without the URL ever touching the run row (ZERO-335).\n\tresolveByUrl = async (\n\t\turl: string,\n\t\tmethod: string,\n\t\topts: { signal?: AbortSignal } = {},\n\t): Promise<ResolveCapabilityResponse | null> => {\n\t\ttry {\n\t\t\treturn await request(\n\t\t\t\tthis.client,\n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tpath: \"/v1/capabilities/resolve\",\n\t\t\t\t\tbody: { url, method },\n\t\t\t\t\tsignal: opts.signal,\n\t\t\t\t},\n\t\t\t\tresolveCapabilityResponseSchema,\n\t\t\t);\n\t\t} catch (err) {\n\t\t\tif (err instanceof ZeroApiError && err.status === 404) return null;\n\t\t\tthrow err;\n\t\t}\n\t};\n}\n","import { z } from \"zod\";\n\n// Mirrors the API's /v1/runs and /v1/reviews shapes.\n\nexport const createRunResponseSchema = z.object({\n\trunId: z.string(),\n});\n\nexport const runListItemSchema = z.object({\n\tuid: z.string(),\n\tcapabilityUid: z.string(),\n\tcapabilitySlug: z.string(),\n\tcapabilityName: z.string(),\n\tstatus: z.number().nullable(),\n\tlatencyMs: z.number().nullable(),\n\tcost: z\n\t\t.object({ amount: z.string(), asset: z.string().nullable() })\n\t\t.nullable(),\n\tpayment: z\n\t\t.object({\n\t\t\tprotocol: z.string(),\n\t\t\tchain: z.string().nullable(),\n\t\t\ttxHash: z.string().nullable(),\n\t\t\tmode: z.string().nullable(),\n\t\t})\n\t\t.nullable(),\n\tcreatedAt: z.coerce.date(),\n\treviewed: z.boolean(),\n});\n\nexport const listRunsResponseSchema = z.object({\n\truns: z.array(runListItemSchema),\n\tnextCursor: z.string().nullable(),\n});\n\nexport const runDetailSchema = z.object({\n\trunId: z.string(),\n\tstatus: z.number().nullable(),\n\tlatencyMs: z.number().nullable(),\n\terrorClass: z.string().nullable(),\n\tcreatedAt: z.coerce.date(),\n\tcost: z\n\t\t.object({ amount: z.string(), asset: z.string().nullable() })\n\t\t.nullable(),\n\tpayment: z\n\t\t.object({\n\t\t\tprotocol: z.string(),\n\t\t\tchain: z.string().nullable(),\n\t\t\ttxHash: z.string().nullable(),\n\t\t\tmode: z.string().nullable(),\n\t\t})\n\t\t.nullable(),\n\tcapability: z.object({\n\t\tuid: z.string(),\n\t\tslug: z.string(),\n\t\tname: z.string(),\n\t\turl: z.string(),\n\t\tmethod: z.string(),\n\t\twhatItDoes: z.string().nullable(),\n\t\ttags: z.array(z.string()),\n\t}),\n\treviewed: z.boolean(),\n});\n\nexport const createReviewResponseSchema = z.object({\n\treviewId: z.string(),\n\trecorded: z.boolean(),\n\tupdated: z.boolean().optional(),\n});\n\nexport const batchReviewResponseSchema = z.object({\n\tresults: z.array(\n\t\tz.union([\n\t\t\tz.object({\n\t\t\t\trunId: z.string(),\n\t\t\t\tok: z.literal(true),\n\t\t\t\treviewId: z.string(),\n\t\t\t\tupdated: z.boolean(),\n\t\t\t}),\n\t\t\tz.object({\n\t\t\t\trunId: z.string(),\n\t\t\t\tok: z.literal(false),\n\t\t\t\tstatus: z.number(),\n\t\t\t\terror: z.string(),\n\t\t\t}),\n\t\t]),\n\t),\n\tsummary: z.object({\n\t\ttotal: z.number(),\n\t\tok: z.number(),\n\t\tfailed: z.number(),\n\t}),\n});\n\nexport type RunListItem = z.infer<typeof runListItemSchema>;\nexport type RunDetail = z.infer<typeof runDetailSchema>;\nexport type ListRunsResponse = z.infer<typeof listRunsResponseSchema>;\nexport type CreateRunResponse = z.infer<typeof createRunResponseSchema>;\nexport type CreateReviewResponse = z.infer<typeof createReviewResponseSchema>;\nexport type BatchReviewResponse = z.infer<typeof batchReviewResponseSchema>;\n\n// Inputs are typed but not Zod-validated — we control these shapes since\n// they come from the SDK consumer, not from an untrusted network response.\n\nexport type CreateRunInput = {\n\tcapabilityId: string;\n\tpaymentMethodId?: string;\n\t/**\n\t * @deprecated Pass the `z_xxx.N` token from `search()` as `capabilityId`\n\t * instead — it embeds the searchId. This field is kept for back-compat.\n\t */\n\tsearchId?: string;\n\tstatus?: number;\n\tlatencyMs?: number;\n\tcostAmount?: string;\n\tcostAsset?: string;\n\tpaymentProtocol?: string;\n\tpaymentChain?: string;\n\tpaymentTxHash?: string;\n\tpaymentMode?: string;\n\terrorSnippetHash?: string;\n\terrorSnippetLength?: number;\n\trequestSchema?: Record<string, unknown>;\n\tresponseSchema?: Record<string, unknown>;\n\t// How the agent arrived at this fetch — stored on the run's metadata so\n\t// \"direct execution\" (direct_url / direct_slug) can be distinguished from\n\t// search-driven runs server-side. Advisory client signal; honest funnel\n\t// origin (never fabricated). See fetch-command.ts.\n\tfetchOrigin?: \"from_search\" | \"direct_slug\" | \"direct_url\";\n};\n\nexport type CreateReviewInput = {\n\trunId: string;\n\tsuccess: boolean;\n\taccuracy: number;\n\tvalue: number;\n\treliability: number;\n\tcontent?: string;\n};\n\nexport type ListRunsParams = {\n\tcapabilityId?: string;\n\tunreviewed?: boolean;\n\tlimit?: number;\n\tcursor?: string;\n};\n","import type { ZeroClient } from \"../client\";\nimport { ZeroApiError } from \"../errors\";\nimport {\n\ttype BatchReviewResponse,\n\tbatchReviewResponseSchema,\n\ttype CreateReviewInput,\n\ttype CreateReviewResponse,\n\ttype CreateRunInput,\n\ttype CreateRunResponse,\n\tcreateReviewResponseSchema,\n\tcreateRunResponseSchema,\n\ttype ListRunsParams,\n\ttype ListRunsResponse,\n\tlistRunsResponseSchema,\n\ttype RunDetail,\n\trunDetailSchema,\n} from \"../schemas/runs\";\nimport { request } from \"../transport/http\";\n\nexport class Runs {\n\tconstructor(private readonly client: ZeroClient) {}\n\n\tcreate = (\n\t\tinput: CreateRunInput,\n\t\topts: { signal?: AbortSignal } = {},\n\t): Promise<CreateRunResponse> =>\n\t\trequest(\n\t\t\tthis.client,\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tpath: \"/v1/runs\",\n\t\t\t\tbody: input,\n\t\t\t\tsignal: opts.signal,\n\t\t\t},\n\t\t\tcreateRunResponseSchema,\n\t\t);\n\n\tlist = (\n\t\tparams: ListRunsParams = {},\n\t\topts: { signal?: AbortSignal } = {},\n\t): Promise<ListRunsResponse> => {\n\t\t// `limit: 0` means \"caller computed no more pages needed\". The\n\t\t// server schema is min(1) so we short-circuit client-side.\n\t\t// Requires a cursor: without one, echoing `nextCursor: null` is\n\t\t// indistinguishable from end-of-stream and would silently break\n\t\t// pagination loops.\n\t\tif (params.limit === 0) {\n\t\t\tif (opts.signal?.aborted) {\n\t\t\t\treturn Promise.reject(\n\t\t\t\t\tnew ZeroApiError(\"Request aborted by caller\", { status: 0 }),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (params.cursor === undefined) {\n\t\t\t\treturn Promise.reject(\n\t\t\t\t\tnew ZeroApiError(\n\t\t\t\t\t\t\"runs.list({ limit: 0 }) requires a cursor — without one the empty page is indistinguishable from end-of-stream\",\n\t\t\t\t\t\t{ status: 0 },\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn Promise.resolve({\n\t\t\t\truns: [],\n\t\t\t\tnextCursor: params.cursor,\n\t\t\t});\n\t\t}\n\t\t// `!== undefined` rather than truthy so explicit `unreviewed: false`\n\t\t// reaches the wire — truthy filters silently drop it and the\n\t\t// server applies its default, losing caller intent.\n\t\tconst query: Record<string, string | number | boolean | undefined> = {};\n\t\tif (params.capabilityId !== undefined)\n\t\t\tquery.capabilityId = params.capabilityId;\n\t\tif (params.unreviewed !== undefined) query.unreviewed = params.unreviewed;\n\t\tif (params.limit !== undefined) query.limit = params.limit;\n\t\tif (params.cursor !== undefined) query.cursor = params.cursor;\n\t\treturn request(\n\t\t\tthis.client,\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tpath: \"/v1/runs\",\n\t\t\t\tquery,\n\t\t\t\tsignal: opts.signal,\n\t\t\t},\n\t\t\tlistRunsResponseSchema,\n\t\t);\n\t};\n\n\tget = (\n\t\trunId: string,\n\t\topts: { signal?: AbortSignal } = {},\n\t): Promise<RunDetail> =>\n\t\trequest(\n\t\t\tthis.client,\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tpath: `/v1/runs/${runId}`,\n\t\t\t\tsignal: opts.signal,\n\t\t\t},\n\t\t\trunDetailSchema,\n\t\t);\n\n\treview = (\n\t\tinput: CreateReviewInput,\n\t\topts: { signal?: AbortSignal } = {},\n\t): Promise<CreateReviewResponse> =>\n\t\trequest(\n\t\t\tthis.client,\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tpath: \"/v1/reviews\",\n\t\t\t\tbody: input,\n\t\t\t\tsignal: opts.signal,\n\t\t\t},\n\t\t\tcreateReviewResponseSchema,\n\t\t);\n\n\t// Bulk review submission. The CLI's bulk JSONL parser stays CLI-side —\n\t// SDK consumers pass already-parsed structured input.\n\tcreateReviewsBatch = (\n\t\treviews: CreateReviewInput[],\n\t\topts: { signal?: AbortSignal } = {},\n\t): Promise<BatchReviewResponse> =>\n\t\trequest(\n\t\t\tthis.client,\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tpath: \"/v1/reviews/batch\",\n\t\t\t\tbody: { reviews },\n\t\t\t\tsignal: opts.signal,\n\t\t\t},\n\t\t\tbatchReviewResponseSchema,\n\t\t);\n}\n","import { createPublicClient, formatUnits, http, type PublicClient } from \"viem\";\nimport { z } from \"zod\";\nimport {\n\ttype BalanceChainId,\n\tbaseChain,\n\tERC20_BALANCE_ABI,\n\ttempoChain,\n\tUSDC_BASE,\n\tUSDC_DECIMALS,\n\tUSDC_TEMPO,\n} from \"../chains\";\nimport type { ZeroClient } from \"../client\";\nimport { ZeroWalletError } from \"../errors\";\nimport { type UserWalletDto, userWalletDtoSchema } from \"../schemas/auth\";\nimport { request } from \"../transport/http\";\n\nconst fundingUrlResponseSchema = z.object({ url: z.string() });\n\nconst userWalletListSchema = z.array(userWalletDtoSchema);\n\nexport type BalanceReadError = {\n\tchain: BalanceChainId;\n\tmessage: string;\n};\n\nexport type WalletBalance = {\n\tamount: string;\n\tasset: \"USDC\";\n\t// Populated only by chain-aggregating reads (i.e. `chain: \"total\"`, the\n\t// default) when at least one chain succeeded but at least one failed.\n\t// `amount` reflects only the successful chains. Absent on full success\n\t// and on per-chain reads (which throw on failure).\n\terrors?: BalanceReadError[];\n};\n\nexport type BalanceOptions = {\n\t// `total` (default) sums Base + Tempo, matching the CLI's `wallet balance`\n\t// output. Per-chain breakdowns are available via the explicit chain ids.\n\tchain?: BalanceChainId | \"total\";\n\t// Override the wallet to query — defaults to the configured account's\n\t// address. Useful for read-only checks of an arbitrary on-chain wallet.\n\taddress?: `0x${string}`;\n\tsignal?: AbortSignal;\n};\n\nexport type FundingUrlOptions = {\n\tamount?: string;\n\tprovider?: \"stripe\" | \"coinbase\";\n\tsignal?: AbortSignal;\n};\n\nexport type ImportWalletOptions = {\n\t// 64 hex chars, 0x prefix optional — the server accepts both.\n\tprivateKey: string;\n\tmakePrimary?: boolean;\n\tsignal?: AbortSignal;\n};\n\nexport type SetPrimaryWalletOptions = {\n\twalletAddress: string;\n\tsignal?: AbortSignal;\n};\n\nexport type RemoveWalletOptions = {\n\twalletAddress: string;\n\tsignal?: AbortSignal;\n};\n\n// Lazy per-chain public clients. Constructed on first read and cached on\n// the namespace instance so each tenant (sub-client from withAccount) gets\n// its own pair, but repeat balance reads share them.\ntype Clients = { base?: PublicClient; tempo?: PublicClient };\n\nconst errorMessage = (reason: unknown): string =>\n\treason instanceof Error ? reason.message : String(reason);\n\nexport class Wallet {\n\tprivate readonly clients: Clients = {};\n\n\tconstructor(private readonly client: ZeroClient) {}\n\n\t// The configured account's address, or null when the client runs in\n\t// session/no-credential mode. Local read — never hits the network.\n\tprivate get configuredAddress(): `0x${string}` | null {\n\t\tconst credentials = this.client.getCredentials();\n\t\tif (credentials.kind !== \"account\") return null;\n\t\treturn credentials.account.address;\n\t}\n\n\t// The wallet address this client acts as. Account mode resolves locally\n\t// (no network). Session mode resolves the user's managed (Privy-embedded)\n\t// wallet, provisioning one on first call if the user has none yet. Throws\n\t// on network/auth failure — callers that want a null-fallback should wrap\n\t// in try/catch (the CLI does this in `resolveManagedWalletAddress`).\n\taddress = async (\n\t\topts: { signal?: AbortSignal } = {},\n\t): Promise<`0x${string}`> => {\n\t\tconst configured = this.configuredAddress;\n\t\tif (configured) return configured;\n\t\tconst wallets = await this.list(opts);\n\t\tconst primary = wallets.find(\n\t\t\t(w) => w.source === \"privy_embedded\" && w.isPrimary,\n\t\t);\n\t\tif (primary) return primary.walletAddress as `0x${string}`;\n\t\tconst provisioned = await this.provision(opts);\n\t\treturn provisioned.walletAddress as `0x${string}`;\n\t};\n\n\tbalance = async (opts: BalanceOptions = {}): Promise<WalletBalance> => {\n\t\tconst target = opts.address ?? this.configuredAddress;\n\t\tif (!target) {\n\t\t\tthrow new ZeroWalletError(\n\t\t\t\t\"balance() requires either an `address` option or a client constructed with an account\",\n\t\t\t);\n\t\t}\n\t\tconst chain = opts.chain ?? \"total\";\n\t\tif (chain !== \"total\") {\n\t\t\t// Per-chain reads have no partial-success mode — there's only one\n\t\t\t// chain to read, so failure is failure.\n\t\t\tconst raw = await this.readChainBalance(chain, target);\n\t\t\treturn { amount: formatUnits(raw, USDC_DECIMALS), asset: \"USDC\" };\n\t\t}\n\n\t\t// Aggregating read: degrade gracefully when one chain's RPC is down.\n\t\t// A Promise.all here would propagate the first failure and discard the\n\t\t// other chain's result, which is wasteful and brittle.\n\t\tconst chains: BalanceChainId[] = [\"base\", \"tempo\"];\n\t\tconst settled = await Promise.allSettled(\n\t\t\tchains.map((c) => this.readChainBalance(c, target)),\n\t\t);\n\n\t\tlet sum = 0n;\n\t\tconst errors: BalanceReadError[] = [];\n\t\tfor (let i = 0; i < settled.length; i++) {\n\t\t\tconst result = settled[i];\n\t\t\tconst chainName = chains[i];\n\t\t\tif (!result || !chainName) continue; // unreachable; satisfies noUncheckedIndexedAccess\n\t\t\tif (result.status === \"fulfilled\") {\n\t\t\t\tsum += result.value;\n\t\t\t} else {\n\t\t\t\terrors.push({ chain: chainName, message: errorMessage(result.reason) });\n\t\t\t}\n\t\t}\n\n\t\tif (errors.length === settled.length) {\n\t\t\tthrow new ZeroWalletError(\n\t\t\t\t`balance() failed for every chain: ${errors\n\t\t\t\t\t.map((e) => `${e.chain} (${e.message})`)\n\t\t\t\t\t.join(\", \")}`,\n\t\t\t);\n\t\t}\n\n\t\tconst balance: WalletBalance = {\n\t\t\tamount: formatUnits(sum, USDC_DECIMALS),\n\t\t\tasset: \"USDC\",\n\t\t};\n\t\tif (errors.length > 0) balance.errors = errors;\n\t\treturn balance;\n\t};\n\n\t// All wallets linked to the authenticated session user. Session-only.\n\tlist = (opts: { signal?: AbortSignal } = {}): Promise<UserWalletDto[]> =>\n\t\trequest(\n\t\t\tthis.client,\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tpath: \"/v1/users/me/wallets\",\n\t\t\t\tsignal: opts.signal,\n\t\t\t},\n\t\t\tuserWalletListSchema,\n\t\t);\n\n\t// Provision a managed (Privy-embedded) wallet for the session user.\n\t// Idempotent server-side — repeat calls return the existing wallet.\n\tprovision = (opts: { signal?: AbortSignal } = {}): Promise<UserWalletDto> =>\n\t\trequest(\n\t\t\tthis.client,\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tpath: \"/v1/users/me/wallets/provision\",\n\t\t\t\tsignal: opts.signal,\n\t\t\t},\n\t\t\tuserWalletDtoSchema,\n\t\t);\n\n\t// Link an existing self-custody wallet to the session user by private key.\n\t// Session-only. 409s when the wallet is already linked (to this or another\n\t// profile — the error message says which).\n\timport = (opts: ImportWalletOptions): Promise<UserWalletDto> =>\n\t\trequest(\n\t\t\tthis.client,\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tpath: \"/v1/users/me/wallets/import\",\n\t\t\t\tbody: {\n\t\t\t\t\tprivateKey: opts.privateKey,\n\t\t\t\t\t...(opts.makePrimary !== undefined\n\t\t\t\t\t\t? { makePrimary: opts.makePrimary }\n\t\t\t\t\t\t: {}),\n\t\t\t\t},\n\t\t\t\tsignal: opts.signal,\n\t\t\t},\n\t\t\tuserWalletDtoSchema,\n\t\t);\n\n\t// Make one of the session user's linked wallets the primary payer.\n\t// Session-only. 404s when the address isn't linked to the user.\n\tsetPrimary = (opts: SetPrimaryWalletOptions): Promise<UserWalletDto> =>\n\t\trequest(\n\t\t\tthis.client,\n\t\t\t{\n\t\t\t\tmethod: \"PATCH\",\n\t\t\t\tpath: \"/v1/users/me/wallets/primary\",\n\t\t\t\tbody: { walletAddress: opts.walletAddress },\n\t\t\t\tsignal: opts.signal,\n\t\t\t},\n\t\t\tuserWalletDtoSchema,\n\t\t);\n\n\t// Unlink a wallet from the session user. Session-only. 409s on the primary\n\t// wallet or a non-zero balance (the error message says which); 404s when\n\t// the address isn't linked. Responds 204 — resolves to void.\n\tremove = async (opts: RemoveWalletOptions): Promise<void> => {\n\t\tawait request(\n\t\t\tthis.client,\n\t\t\t{\n\t\t\t\tmethod: \"DELETE\",\n\t\t\t\tpath: `/v1/users/me/wallets/${opts.walletAddress}`,\n\t\t\t\tsignal: opts.signal,\n\t\t\t},\n\t\t\tz.undefined(),\n\t\t);\n\t};\n\n\t// Routes by identity: account mode signs EIP-191 against /v1/wallet/fund-url,\n\t// session mode hits /v1/users/me/fund-url (Bearer-authed, wallet resolved\n\t// server-side). Both honor `provider` (coinbase | stripe).\n\tfundingUrl = async (opts: FundingUrlOptions = {}): Promise<string> => {\n\t\tconst credentials = this.client.getCredentials();\n\t\tconst path =\n\t\t\tcredentials.kind === \"account\"\n\t\t\t\t? \"/v1/wallet/fund-url\"\n\t\t\t\t: credentials.kind === \"session\"\n\t\t\t\t\t? \"/v1/users/me/fund-url\"\n\t\t\t\t\t: null;\n\t\tif (!path) {\n\t\t\tthrow new ZeroWalletError(\n\t\t\t\t\"fundingUrl() requires a client constructed with an account or session credentials\",\n\t\t\t);\n\t\t}\n\t\tconst query: Record<string, string | undefined> = {\n\t\t\tprovider: opts.provider ?? \"coinbase\",\n\t\t};\n\t\tif (opts.amount) query.amount = opts.amount;\n\t\tconst { url } = await request(\n\t\t\tthis.client,\n\t\t\t{ method: \"GET\", path, query, signal: opts.signal },\n\t\t\tfundingUrlResponseSchema,\n\t\t);\n\t\treturn url;\n\t};\n\n\tprivate getPublicClient = (chain: BalanceChainId): PublicClient => {\n\t\tif (chain === \"base\") {\n\t\t\tif (!this.clients.base) {\n\t\t\t\tthis.clients.base = createPublicClient({\n\t\t\t\t\tchain: baseChain,\n\t\t\t\t\ttransport: http(),\n\t\t\t\t}) as PublicClient;\n\t\t\t}\n\t\t\treturn this.clients.base;\n\t\t}\n\t\tif (!this.clients.tempo) {\n\t\t\tthis.clients.tempo = createPublicClient({\n\t\t\t\t// biome-ignore lint/suspicious/noExplicitAny: tempo is a custom chain object that viem's stricter Chain type rejects shape-wise but accepts at runtime\n\t\t\t\tchain: tempoChain as any,\n\t\t\t\ttransport: http(),\n\t\t\t}) as PublicClient;\n\t\t}\n\t\treturn this.clients.tempo;\n\t};\n\n\t/**\n\t * @internal\n\t *\n\t * Per-chain USDC balance read. Exposed (rather than private) so unit\n\t * tests can stub it without standing up a real viem public client —\n\t * viem's `http()` transport doesn't go through `client.fetchImpl`, so\n\t * the standard mock-fetch trick doesn't cover this path.\n\t */\n\treadChainBalance = async (\n\t\tchain: BalanceChainId,\n\t\taddress: `0x${string}`,\n\t): Promise<bigint> => {\n\t\tconst publicClient = this.getPublicClient(chain);\n\t\tconst tokenAddress = chain === \"base\" ? USDC_BASE : USDC_TEMPO;\n\t\tconst balance = await publicClient.readContract({\n\t\t\taddress: tokenAddress as `0x${string}`,\n\t\t\tabi: ERC20_BALANCE_ABI,\n\t\t\tfunctionName: \"balanceOf\",\n\t\t\targs: [address],\n\t\t});\n\t\treturn balance as bigint;\n\t};\n}\n","import type { LocalAccount } from \"viem\";\nimport type { SessionCredentialsInput } from \"./auth/credentials\";\n\n// Forward type alias to avoid a circular import. Public consumers should\n// never set this — see the @internal field on ClientOptions.\n// biome-ignore lint/suspicious/noExplicitAny: see comment\ntype ZeroClientLike = any;\n\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\nexport type LogEvent = {\n\tlevel: LogLevel;\n\tmessage: string;\n\tmeta?: Record<string, unknown>;\n};\n\nexport type Logger = (event: LogEvent) => void;\n\n// Override for /v1/auth/refresh. When set, the SDK calls this instead of\n// posting directly — for sharing a deduped refresh primitive across sibling\n// clients (parallel refreshes with the same RT trip RFC 6819 token-theft and\n// kill the session family). Returns null on refresh failure.\nexport type RefreshSessionFn = (\n\tsignal?: AbortSignal,\n) => Promise<{ accessToken: string; refreshToken: string } | null>;\n\nexport type ClientOptions = {\n\t// Auth — at most one of these may be set. Both absent means the client\n\t// can only call unauthenticated routes (e.g. `search`).\n\tsession?: SessionCredentialsInput;\n\taccount?: LocalAccount;\n\n\trefresh?: RefreshSessionFn;\n\n\t// Transport\n\tbaseUrl?: string;\n\ttimeout?: number;\n\tmaxRetries?: number;\n\tfetch?: typeof fetch;\n\tfetchOptions?: Omit<RequestInit, \"method\" | \"body\" | \"headers\">;\n\tdefaultHeaders?: Record<string, string>;\n\tapiVersion?: string;\n\n\t// Observability\n\tlogger?: Logger;\n\n\t/**\n\t * @internal\n\t *\n\t * Wiring slot used by `withAccount` to share the parent client's\n\t * account cache. Never set from public construction.\n\t */\n\t_sharedAccountCache?: Map<string, ZeroClientLike>;\n};\n\nexport const DEFAULT_BASE_URL = \"https://api.zero.xyz\";\n// Per-HTTP-leg timeout (probe + paid retry each get this budget; not a\n// wall-clock deadline). Sized from prod: across 30d of successful runs,\n// p50=0.9s / p99=29s, but the slow tail is all legit generative media —\n// Grok video (~95s), MiniMax music (~136s), Nano Banana / GPT-5 Image\n// (~80s). A 60s default false-timed-out that tail AFTER payment settled,\n// burning real money with no run recorded. 180s covers the full observed\n// working range (max legit success 136.8s) with headroom. It's nearly\n// free because the timeout is a ceiling, not a wait: fast calls still\n// return in ms. Callers needing tighter/looser bounds use the per-call\n// `timeout` (client) or `timeoutMs` (fetch) override.\nexport const DEFAULT_TIMEOUT_MS = 180_000;\nexport const DEFAULT_MAX_RETRIES = 2;\n","import type { LocalAccount } from \"viem\";\n\nexport type OnSessionRefreshed = (next: {\n\taccessToken: string;\n\trefreshToken: string;\n}) => void | Promise<void>;\n\nexport type SessionCredentialsInput = {\n\taccessToken: string;\n\trefreshToken: string;\n\tonRefreshed?: OnSessionRefreshed;\n};\n\n// Discriminated union used internally by transport + namespaces to dispatch\n// auth headers and signing. Constructor input is `SessionCredentialsInput` or\n// `Account`; the client normalizes to one of these shapes.\nexport type SessionCredentials = {\n\tkind: \"session\";\n\taccessToken: string;\n\trefreshToken: string;\n\tonRefreshed: OnSessionRefreshed;\n};\n\nexport type AccountCredentials = {\n\tkind: \"account\";\n\taccount: LocalAccount;\n};\n\nexport type NoCredentials = {\n\tkind: \"none\";\n};\n\nexport type Credentials =\n\t| SessionCredentials\n\t| AccountCredentials\n\t| NoCredentials;\n\nexport const noopRefresh: OnSessionRefreshed = async () => {};\n","import { z } from \"zod\";\nimport { ratingSchema } from \"./shared\";\n\nexport const searchResultSchema = z.object({\n\tid: z.string(),\n\t// Opaque attribution token (format: `z_{shortId}.{position}`). Optional\n\t// so old API deploys that don't emit it still parse cleanly. Pass as\n\t// capabilityId to client.fetch() for exact search attribution.\n\ttoken: z.string().nullable().optional(),\n\tposition: z.number(),\n\tslug: z.string(),\n\tname: z.string(),\n\tcanonicalName: z.string().nullable().optional(),\n\tbrandName: z.string().nullable().optional(),\n\tdescription: z.string(),\n\twhatItDoes: z.string().nullable().optional(),\n\t// HTTP verb the capability expects. Surfaced on the search row so a caller\n\t// can tell GET from POST without a `capabilities.get()` round-trip — enough\n\t// to `fetch()` a no-body GET directly. POST bodies still need `get()` for\n\t// the `bodySchema`. Optional (not required) so a response that omits it —\n\t// an older API deploy — still parses rather than failing the whole search.\n\tmethod: z.string().optional(),\n\turl: z.string(),\n\turlTemplate: z.string().nullable().optional(),\n\tcost: z.object({ amount: z.string(), asset: z.string() }),\n\t// ZERO-199 — the server-resolved price. Prefer `pricing.summary` over\n\t// deriving a label from `cost.amount` (which flattens usage-priced caps).\n\t// Optional: absent on older API deploys.\n\tpricing: z.object({ kind: z.string(), summary: z.string() }).optional(),\n\t// Payment protocol (x402 | mpp) for this result. The server emits it; the SDK\n\t// previously stripped it, leaving an agent unable to tell which handshake to\n\t// engage from a search row. Optional/nullable so older deploys still parse\n\t// (ZERO-199).\n\tprotocol: z.string().nullable().optional(),\n\treviewCount: z.number().optional(),\n\trating: ratingSchema,\n\t// All-time activation count (non-deleted runs), mirroring capabilities.ts.\n\t// Optional so a response from an older API deploy still parses (ZERO-385).\n\tactivationCount: z.number().optional(),\n\tavailabilityStatus: z\n\t\t.enum([\"healthy\", \"unknown\", \"down\"])\n\t\t.nullable()\n\t\t.optional(),\n\t/**\n\t * @deprecated The API no longer emits `displayStatus`; it has been replaced\n\t * by the consolidated 3-value {@link searchResultSchema.shape.availabilityStatus}.\n\t * Kept as an optional field for one release for back-compat (ZERO-89 soft\n\t * migration) and will be removed in the next major version.\n\t */\n\tdisplayStatus: z\n\t\t.enum([\"healthy\", \"stable\", \"degraded\", \"unhealthy\", \"unknown\"])\n\t\t.optional(),\n});\n\nexport const searchResponseSchema = z.object({\n\tsearchId: z.string(),\n\ttotal: z.number().optional().default(0),\n\toffset: z.number().optional().default(0),\n\thasMore: z.boolean().optional().default(false),\n\tcapabilities: z.array(searchResultSchema),\n});\n\nexport type SearchResult = z.infer<typeof searchResultSchema>;\nexport type SearchResponse = z.infer<typeof searchResponseSchema>;\n\nexport type SearchOptions = {\n\toffset?: number;\n\tlimit?: number;\n\tmaxCost?: string;\n\tprotocol?: \"x402\" | \"mpp\";\n\tfreeOnly?: boolean;\n\t// Optional hard filter. Omit it to use the default (healthy + unknown, with\n\t// healthy ranked first); pass \"healthy\" to return only-healthy. Response\n\t// statuses are 3-value, but this REQUEST filter still accepts \"degraded\" as\n\t// a DEPRECATED no-op (matches zero rows) for one release so callers passing\n\t// `--status degraded` keep working.\n\tavailabilityStatus?: \"healthy\" | \"unknown\" | \"degraded\" | \"down\";\n\tincludeAll?: boolean;\n\tsource?: string;\n\texcludeSource?: string;\n\tsignal?: AbortSignal;\n};\n","import { getAddress, type Hex, type LocalAccount } from \"viem\";\nimport { mnemonicToAccount, privateKeyToAccount } from \"viem/accounts\";\nimport {\n\ttype Credentials,\n\tnoopRefresh,\n\ttype SessionCredentialsInput,\n} from \"./auth/credentials\";\nimport { createManagedAccount } from \"./auth/managed-account\";\nimport { tryRefreshSession } from \"./auth/session\";\nimport { ZeroApiError, ZeroAuthError, ZeroConfigurationError } from \"./errors\";\nimport { clientFetch, type FetchOptions, type FetchResult } from \"./fetch\";\nimport { Auth } from \"./namespaces/auth\";\nimport { BugReports } from \"./namespaces/bug-reports\";\nimport { Capabilities } from \"./namespaces/capabilities\";\nimport { Payments } from \"./namespaces/payments\";\nimport { Runs } from \"./namespaces/runs\";\nimport { Wallet } from \"./namespaces/wallet\";\nimport {\n\ttype ClientOptions,\n\tDEFAULT_BASE_URL,\n\tDEFAULT_MAX_RETRIES,\n\tDEFAULT_TIMEOUT_MS,\n\ttype Logger,\n} from \"./options\";\nimport {\n\ttype SearchOptions,\n\ttype SearchResponse,\n\tsearchResponseSchema,\n} from \"./schemas/search\";\nimport { request } from \"./transport/http\";\n\nconst normalizeCredentials = (\n\tsession: SessionCredentialsInput | undefined,\n\taccount: LocalAccount | undefined,\n): Credentials => {\n\tif (session && account) {\n\t\tthrow new ZeroConfigurationError(\n\t\t\t\"ClientOptions accepts at most one of `session` or `account`, not both. The two auth modes are non-composable.\",\n\t\t);\n\t}\n\tif (session) {\n\t\treturn {\n\t\t\tkind: \"session\",\n\t\t\taccessToken: session.accessToken,\n\t\t\trefreshToken: session.refreshToken,\n\t\t\tonRefreshed: session.onRefreshed ?? noopRefresh,\n\t\t};\n\t}\n\tif (account) {\n\t\treturn { kind: \"account\", account };\n\t}\n\treturn { kind: \"none\" };\n};\n\nexport class ZeroClient {\n\treadonly baseUrl: string;\n\treadonly timeout: number;\n\treadonly maxRetries: number;\n\treadonly apiVersion: string | undefined;\n\treadonly defaultHeaders: Record<string, string>;\n\treadonly fetchImpl: typeof fetch;\n\treadonly fetchOptions: ClientOptions[\"fetchOptions\"];\n\treadonly logger: Logger | undefined;\n\n\t// Private — read via getCredentials(), mutate only via applyRefreshedTokens().\n\t// Keeping a single mutator funnel is what lets the transport replay\n\t// requests with a fresh access token after a 401 → refresh.\n\tprivate credentials: Credentials;\n\n\t// Shared in-flight refresh promise. When N concurrent requests all 401 on\n\t// an expired access token, only the first triggers the network refresh;\n\t// the rest await the same promise. Without this dedup, the first refresh\n\t// rotates the refresh token, the rest present the now-revoked token, and\n\t// the server (RFC 6819) treats that as token theft and kills the entire\n\t// session family. Cleared in finally() so the NEXT expiry can refresh\n\t// again.\n\tprivate refreshInFlight: Promise<boolean> | null = null;\n\n\t// First paid call hits /v1/users/me/wallets to find the wallet; cached after.\n\t// Gen counter handles the logout race; AC owns /me's signal so it's\n\t// decoupled from any single caller and clearManagedAccount can abort it.\n\tprivate managedAccount: LocalAccount | null = null;\n\tprivate managedAccountInFlight: Promise<LocalAccount> | null = null;\n\tprivate managedAccountAC: AbortController | null = null;\n\tprivate managedAccountGen = 0;\n\n\t// Multi-tenant servers calling `client.fetch(url, { account: tenantAccount })`\n\t// on every request would otherwise construct a new ZeroClient (with\n\t// five namespace instances) per call. Keyed by lowercased account\n\t// address so equivalent accounts hit the same sub-client.\n\t//\n\t// Shared across base + sub-clients so `base.clearAccountCache()`\n\t// reaches sub-fragments (e.g. `base.withAccount(a).withAccount(b)`).\n\t// Without sharing, those fragments leak past base.clearAccountCache().\n\t//\n\t// Lifetime = base client's lifetime. Sub-clients hold a reference back\n\t// to their account via `credentials.account`, so even a WeakMap variant\n\t// could not GC entries until the base client is dropped. Long-running\n\t// multi-tenant servers should call `clearAccountCache(account?)` on\n\t// tenant churn to release per-tenant memory.\n\tprivate withAccountCache: Map<string, ZeroClient>;\n\n\t// Namespace surfaces. Eagerly instantiated in the constructor because they\n\t// hold only a reference to `this` — no heavy work happens until a method\n\t// is called. Lazy getters would tree-shake better but break the discoverable\n\t// `client.<tab>` ergonomics that make resource-namespaced SDKs pleasant.\n\treadonly auth: Auth;\n\treadonly bugReports: BugReports;\n\treadonly capabilities: Capabilities;\n\treadonly payments: Payments;\n\treadonly runs: Runs;\n\treadonly wallet: Wallet;\n\n\tprivate readonly refreshOverride: ClientOptions[\"refresh\"];\n\n\tconstructor(options: ClientOptions = {}) {\n\t\tthis.credentials = normalizeCredentials(options.session, options.account);\n\t\tthis.baseUrl = options.baseUrl ?? DEFAULT_BASE_URL;\n\t\tthis.timeout = options.timeout ?? DEFAULT_TIMEOUT_MS;\n\t\tthis.maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES;\n\t\tthis.apiVersion = options.apiVersion;\n\t\tthis.defaultHeaders = options.defaultHeaders ?? {};\n\t\t// Late-binding default so vi.spyOn(globalThis, \"fetch\") + otel-style\n\t\t// runtime monkey-patches affect requests made AFTER the patch. A\n\t\t// `.bind(globalThis)` here would freeze the un-patched reference at\n\t\t// construction. Explicit `options.fetch` opts the caller out.\n\t\tthis.fetchImpl = options.fetch ?? ((...args) => globalThis.fetch(...args));\n\t\tthis.fetchOptions = options.fetchOptions;\n\t\tthis.logger = options.logger;\n\t\tthis.refreshOverride = options.refresh;\n\t\t// `_sharedAccountCache` is set by withAccount on sub-clients so\n\t\t// they share the base's cache. Public construction starts fresh.\n\t\tthis.withAccountCache =\n\t\t\toptions._sharedAccountCache ?? new Map<string, ZeroClient>();\n\n\t\tthis.auth = new Auth(this);\n\t\tthis.bugReports = new BugReports(this);\n\t\tthis.capabilities = new Capabilities(this);\n\t\tthis.payments = new Payments(this);\n\t\tthis.runs = new Runs(this);\n\t\tthis.wallet = new Wallet(this);\n\t}\n\n\t// Convenience factory: derives a viem account from a raw 0x-prefixed\n\t// private key and constructs a client in account mode. Equivalent to\n\t// `new ZeroClient({ account: privateKeyToAccount(pk), ...opts })`.\n\tstatic fromPrivateKey = (\n\t\tprivateKey: Hex,\n\t\topts: Omit<ClientOptions, \"session\" | \"account\"> = {},\n\t): ZeroClient =>\n\t\tnew ZeroClient({ ...opts, account: privateKeyToAccount(privateKey) });\n\n\t// Convenience factory: derives a viem account from a BIP-39 mnemonic and\n\t// constructs a client in account mode. The default derivation path is\n\t// viem's default (m/44'/60'/0'/0/0).\n\tstatic fromMnemonic = (\n\t\tmnemonic: string,\n\t\topts: Omit<ClientOptions, \"session\" | \"account\"> = {},\n\t): ZeroClient =>\n\t\tnew ZeroClient({ ...opts, account: mnemonicToAccount(mnemonic) });\n\n\t/**\n\t * @internal\n\t *\n\t * Live credential accessor for transport + auth modules. Returns the\n\t * discriminated union (not a snapshot) so auth-dispatch always sees the\n\t * freshest access token after rotation. Exposed publicly only to bridge\n\t * the SDK's module boundary — consumers should not call this directly,\n\t * and the shape is not part of the stable surface.\n\t */\n\tgetCredentials = (): Credentials => this.credentials;\n\n\t/**\n\t * @internal\n\t *\n\t * Single in-flight refresh helper. Concurrent callers share one\n\t * invocation. Used by the transport's 401 path; consumers should call\n\t * `client.auth.refresh()` for explicit rotation.\n\t *\n\t * Only the FIRST caller's signal participates in the in-flight\n\t * refresh — combining signals retroactively isn't possible.\n\t */\n\trefreshSessionOnce = (signal?: AbortSignal): Promise<boolean> => {\n\t\tif (!this.refreshInFlight) {\n\t\t\tconst refresh = this.refreshOverride\n\t\t\t\t? this.runRefreshOverride(this.refreshOverride, signal)\n\t\t\t\t: tryRefreshSession(this, signal);\n\t\t\tthis.refreshInFlight = refresh.finally(() => {\n\t\t\t\tthis.refreshInFlight = null;\n\t\t\t});\n\t\t}\n\t\treturn this.refreshInFlight;\n\t};\n\n\tprivate runRefreshOverride = async (\n\t\tfn: NonNullable<ClientOptions[\"refresh\"]>,\n\t\tsignal?: AbortSignal,\n\t): Promise<boolean> => {\n\t\tconst credentials = this.credentials;\n\t\tif (credentials.kind !== \"session\") return false;\n\t\tlet result: { accessToken: string; refreshToken: string } | null;\n\t\ttry {\n\t\t\tresult = await fn(signal);\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t\tif (!result) return false;\n\t\tawait this.applyRefreshedTokens(result);\n\t\treturn true;\n\t};\n\n\t// The single mutation funnel for credential rotation. Updates the\n\t// in-memory tokens first, then awaits the consumer's persistence callback.\n\t// Callback errors are caught and routed to client.logger if present, but\n\t// do NOT propagate — a persistence failure is not a network error and\n\t// must not trigger the transport's retry loop. The in-memory tokens are\n\t// still considered the source of truth for the current process.\n\tapplyRefreshedTokens = async (next: {\n\t\taccessToken: string;\n\t\trefreshToken: string;\n\t}): Promise<void> => {\n\t\tif (this.credentials.kind !== \"session\") return;\n\t\tthis.credentials = {\n\t\t\t...this.credentials,\n\t\t\taccessToken: next.accessToken,\n\t\t\trefreshToken: next.refreshToken,\n\t\t};\n\t\ttry {\n\t\t\tawait this.credentials.onRefreshed(next);\n\t\t} catch (error) {\n\t\t\tthis.logger?.({\n\t\t\t\tlevel: \"error\",\n\t\t\t\tmessage:\n\t\t\t\t\t\"onRefreshed callback threw — tokens rotated in-memory but consumer persistence failed. The current process will use the new tokens; a process restart may replay a stale refresh token.\",\n\t\t\t\tmeta: {\n\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t};\n\n\t// Silent setter for sibling-client sync: updates in-memory tokens without\n\t// firing onRefreshed (which would recurse if both clients share a\n\t// callback). No-op outside session mode.\n\tsetSessionTokens = (tokens: {\n\t\taccessToken: string;\n\t\trefreshToken: string;\n\t}): void => {\n\t\tif (this.credentials.kind !== \"session\") return;\n\t\tthis.credentials = {\n\t\t\t...this.credentials,\n\t\t\taccessToken: tokens.accessToken,\n\t\t\trefreshToken: tokens.refreshToken,\n\t\t};\n\t};\n\n\t// Returns a new client bound to a different session, inheriting\n\t// transport config but with its own credential slot. Refreshes on the\n\t// sub-client never mutate the base — critical for multi-tenant servers\n\t// where one tenant's expired token must not cascade to others.\n\t//\n\t// withSession is a trust boundary: it does NOT share the base's\n\t// withAccount cache. Sharing would let the first sibling's transport\n\t// snapshot (headers/fetchOptions/logger) leak to every later sibling\n\t// calling withAccount(a) for the same address. withSession is also\n\t// not itself cached — sessions are typically one-per-request, and\n\t// caching by token would keep secrets in memory longer than needed.\n\twithSession = (session: SessionCredentialsInput): ZeroClient =>\n\t\tnew ZeroClient({\n\t\t\tsession,\n\t\t\tbaseUrl: this.baseUrl,\n\t\t\ttimeout: this.timeout,\n\t\t\tmaxRetries: this.maxRetries,\n\t\t\tapiVersion: this.apiVersion,\n\t\t\tdefaultHeaders: { ...this.defaultHeaders },\n\t\t\tfetch: this.fetchImpl,\n\t\t\tfetchOptions: this.fetchOptions ? { ...this.fetchOptions } : undefined,\n\t\t\tlogger: this.logger,\n\t\t});\n\n\t// Returns a new client bound to a different viem account. Mirrors\n\t// withSession for the self-custody auth path — multi-tenant servers\n\t// holding many private keys get isolated signing state without\n\t// sharing namespace caches (e.g., the Wallet namespace's per-instance\n\t// public RPC clients).\n\t//\n\t// Sub-clients are cached per account address (see `withAccountCache`\n\t// above for the lifetime). Call `clearAccountCache()` on tenant churn.\n\t//\n\t// `defaultHeaders` and `fetchOptions` are SHALLOW SNAPSHOTS taken at\n\t// sub-client construction:\n\t// - Mutating them on a SUB-client persists across cached calls for\n\t// the same account (use `opts.headers` per call instead).\n\t// - Mutating them on the BASE post-construction does NOT reach\n\t// already-cached sub-clients. A caller that swaps an\n\t// `x-zero-api-version` header on the base for a rollout would\n\t// silently miss every cached tenant. Rebuild the base + sub-cache\n\t// to apply such changes uniformly, or pass `opts.headers` per call.\n\t// This snapshot concern is orthogonal to 401 refresh: account-mode\n\t// sub-clients have no session tokens to refresh, and session refresh\n\t// mutates `credentials` (not `defaultHeaders` / `fetchOptions`) via the\n\t// `applyRefreshedTokens` funnel.\n\t//\n\t// Cache invalidates on signer rotation (same address, new\n\t// LocalAccount object) so a rotated signer doesn't silently keep\n\t// signing as the old one. Multi-tenant servers using a KMS/vault\n\t// pattern that constructs a fresh LocalAccount per request should\n\t// hoist the LocalAccount to a per-tenant cache to preserve cache\n\t// hit rate — re-deriving the account each call defeats the cache\n\t// by design (we cannot tell from outside whether the signing\n\t// function is equivalent).\n\twithAccount = (account: LocalAccount): ZeroClient => {\n\t\tconst key = account.address.toLowerCase();\n\t\tconst cached = this.withAccountCache.get(key);\n\t\tif (cached) {\n\t\t\tconst cachedCreds = cached.getCredentials();\n\t\t\tif (cachedCreds.kind === \"account\" && cachedCreds.account === account) {\n\t\t\t\treturn cached;\n\t\t\t}\n\t\t\t// Identity changed — fall through and rebuild.\n\t\t}\n\t\tconst sub = new ZeroClient({\n\t\t\taccount,\n\t\t\tbaseUrl: this.baseUrl,\n\t\t\ttimeout: this.timeout,\n\t\t\tmaxRetries: this.maxRetries,\n\t\t\tapiVersion: this.apiVersion,\n\t\t\tdefaultHeaders: { ...this.defaultHeaders },\n\t\t\tfetch: this.fetchImpl,\n\t\t\tfetchOptions: this.fetchOptions ? { ...this.fetchOptions } : undefined,\n\t\t\tlogger: this.logger,\n\t\t\t_sharedAccountCache: this.withAccountCache,\n\t\t});\n\t\tthis.withAccountCache.set(key, sub);\n\t\treturn sub;\n\t};\n\n\t/**\n\t * Evict cached `withAccount` sub-clients. Pass an account to drop a\n\t * single tenant's entry; omit the argument to clear the entire cache.\n\t * Call on tenant churn (session expiry, deprovisioning) — without\n\t * eviction the cache grows for the base client's lifetime.\n\t */\n\tclearAccountCache = (account?: LocalAccount): void => {\n\t\tif (account) {\n\t\t\tthis.withAccountCache.delete(account.address.toLowerCase());\n\t\t\treturn;\n\t\t}\n\t\tthis.withAccountCache.clear();\n\t};\n\n\t/** @internal — used by payments.pay() in session mode. Cached, dedupes concurrent lookups. */\n\tresolveManagedAccount = (signal?: AbortSignal): Promise<LocalAccount> => {\n\t\tif (this.managedAccount) return Promise.resolve(this.managedAccount);\n\t\tif (this.managedAccountInFlight) {\n\t\t\treturn this.raceWithSignal(this.managedAccountInFlight, signal);\n\t\t}\n\t\tif (this.credentials.kind !== \"session\") {\n\t\t\treturn Promise.reject(\n\t\t\t\tnew ZeroAuthError(\n\t\t\t\t\t\"auth_no_credentials\",\n\t\t\t\t\t\"resolveManagedAccount() requires session credentials.\",\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\t// Gen snapshot: a concurrent clearManagedAccount drops this resolution\n\t\t// rather than caching the prior session's wallet for the next pay().\n\t\tconst startedAtGen = this.managedAccountGen;\n\t\tconst ac = new AbortController();\n\t\tthis.managedAccountAC = ac;\n\t\tthis.managedAccountInFlight = (async () => {\n\t\t\tconst wallets = await this.auth.wallets({ signal: ac.signal });\n\t\t\t// Managed signing only works against the Privy wallet (the key the\n\t\t\t// API holds). A self-custody fallback would produce a from/signature\n\t\t\t// mismatch the on-chain verifier rejects — refuse rather than sign-wrong.\n\t\t\tconst primary =\n\t\t\t\twallets.find((w) => w.isPrimary && w.source === \"privy_embedded\") ??\n\t\t\t\twallets.find((w) => w.source === \"privy_embedded\");\n\t\t\tif (!primary) {\n\t\t\t\tthrow new ZeroAuthError(\n\t\t\t\t\t\"auth_error\",\n\t\t\t\t\t\"Session user has no Privy-embedded wallet provisioned. Managed signing requires one. Construct the client with `account` to sign locally instead.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (this.managedAccountGen !== startedAtGen) {\n\t\t\t\tthrow new ZeroAuthError(\n\t\t\t\t\t\"auth_session_expired\",\n\t\t\t\t\t\"Session cleared during managed-account resolution. Retry to rebuild against the current session.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\t// getAddress() validates before the address reaches EIP-3009 `from`.\n\t\t\tconst acc = createManagedAccount(this, getAddress(primary.walletAddress));\n\t\t\tthis.managedAccount = acc;\n\t\t\treturn acc;\n\t\t})().finally(() => {\n\t\t\tif (this.managedAccountGen === startedAtGen) {\n\t\t\t\tthis.managedAccountInFlight = null;\n\t\t\t\tthis.managedAccountAC = null;\n\t\t\t}\n\t\t});\n\t\treturn this.raceWithSignal(this.managedAccountInFlight, signal);\n\t};\n\n\t// Per-caller signal gate: each caller can reject on their own abort\n\t// without cancelling the shared underlying promise.\n\tprivate raceWithSignal = <T>(\n\t\tp: Promise<T>,\n\t\tsignal: AbortSignal | undefined,\n\t): Promise<T> => {\n\t\tif (!signal) return p;\n\t\tconst abortErr = (cause: unknown): ZeroApiError =>\n\t\t\tnew ZeroApiError(\"Request aborted by caller\", { status: 0, cause });\n\t\tif (signal.aborted)\n\t\t\treturn Promise.reject(\n\t\t\t\tabortErr(new DOMException(\"Aborted\", \"AbortError\")),\n\t\t\t);\n\t\treturn new Promise<T>((resolve, reject) => {\n\t\t\tconst onAbort = () =>\n\t\t\t\treject(abortErr(new DOMException(\"Aborted\", \"AbortError\")));\n\t\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\tp.then(\n\t\t\t\t(v) => {\n\t\t\t\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\tresolve(v);\n\t\t\t\t},\n\t\t\t\t(e) => {\n\t\t\t\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\treject(e);\n\t\t\t\t},\n\t\t\t);\n\t\t});\n\t};\n\n\t/** Drop the cached managed-signing account and abort any in-flight /me lookup. */\n\tclearManagedAccount = (): void => {\n\t\tthis.managedAccount = null;\n\t\tthis.managedAccountAC?.abort();\n\t\tthis.managedAccountInFlight = null;\n\t\tthis.managedAccountAC = null;\n\t\tthis.managedAccountGen++;\n\t};\n\n\t/** @internal — Read cached managed account without triggering resolution. */\n\tpeekManagedAccount = (): LocalAccount | null => this.managedAccount;\n\n\t// `search` is a flat method, not a namespace — it's the hot path most\n\t// consumers hit first, and Stripe/Anthropic/OpenAI all keep their primary\n\t// entry point flat for the same reason.\n\tsearch = (\n\t\tquery: string,\n\t\topts: SearchOptions = {},\n\t): Promise<SearchResponse> => {\n\t\tconst { signal, ...rest } = opts;\n\t\t// Pass-through: no implicit maxCost — the SDK forwards exactly what the\n\t\t// caller asked for. Consumers that want drain protection (the CLI does,\n\t\t// defaulting to $30) pass their own `maxCost`. No implicit status\n\t\t// injection either: search defaults to healthy + unknown (down excluded)\n\t\t// with healthy ranked first. Pass `availabilityStatus: \"healthy\"` to\n\t\t// hard-filter to only-healthy, or `includeAll` for the full set.\n\t\treturn request(\n\t\t\tthis,\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tpath: \"/v1/search\",\n\t\t\t\tbody: { query, ...rest },\n\t\t\t\tsignal,\n\t\t\t},\n\t\t\tsearchResponseSchema,\n\t\t);\n\t};\n\n\t// Paid fetch — search → get → fetch is Zero's canonical loop. The hot\n\t// path is flat on the client, same rationale as `search` above.\n\t// Orchestration lives in fetch.ts so this class stays readable.\n\tfetch = (url: string, opts: FetchOptions = {}): Promise<FetchResult> =>\n\t\tclientFetch(this, url, opts);\n\n\t// Poll the API server's /health endpoint until it responds OK. Useful for\n\t// warming up a cold container before spawning a subprocess that needs the\n\t// API ready. Resolves when healthy, resolves (silently) when maxAttempts\n\t// is exhausted — never throws, so callers proceed regardless of outcome.\n\tping = async (\n\t\topts: {\n\t\t\tmaxAttempts?: number;\n\t\t\ttimeoutMs?: number;\n\t\t\tretryDelayMs?: number;\n\t\t} = {},\n\t): Promise<void> => {\n\t\tconst { maxAttempts = 20, timeoutMs = 2000, retryDelayMs = 500 } = opts;\n\t\tconst healthUrl = `${this.baseUrl}/health`;\n\t\tfor (let i = 0; i < maxAttempts; i++) {\n\t\t\ttry {\n\t\t\t\tconst res = await this.fetchImpl(healthUrl, {\n\t\t\t\t\tsignal: AbortSignal.timeout(timeoutMs),\n\t\t\t\t});\n\t\t\t\tif (res.ok) return;\n\t\t\t} catch {\n\t\t\t\t// network error / timeout — retry\n\t\t\t}\n\t\t\tif (i < maxAttempts - 1) {\n\t\t\t\tawait new Promise((r) => setTimeout(r, retryDelayMs));\n\t\t\t}\n\t\t}\n\t};\n\n\t// No-op today. Reserved for an explicit drain/cancel handle once\n\t// long-running consumers need one — do NOT rely on this to abort\n\t// in-flight requests or flush recording. Consumers needing\n\t// shutdown semantics should manage their own AbortController.\n\tclose = async (): Promise<void> => {};\n}\n"]}