@4mica/sdk 1.2.17 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +59 -25
- package/dist/index.cjs +5513 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +2730 -0
- package/dist/{src/abi/core4mica.d.ts → index.d.ts} +1032 -1
- package/dist/index.js +5439 -0
- package/dist/index.js.map +1 -0
- package/dist/models-B15ouNYG.d.cts +386 -0
- package/dist/models-B15ouNYG.d.ts +386 -0
- package/dist/server.cjs +172 -0
- package/dist/server.cjs.map +1 -0
- package/dist/server.d.cts +119 -0
- package/dist/server.d.ts +119 -0
- package/dist/server.js +165 -0
- package/dist/server.js.map +1 -0
- package/package.json +52 -43
- package/dist/package.json +0 -80
- package/dist/src/abi/core4mica.js +0 -2200
- package/dist/src/abi/erc20.d.ts +0 -151
- package/dist/src/abi/erc20.js +0 -201
- package/dist/src/auth.d.ts +0 -62
- package/dist/src/auth.js +0 -218
- package/dist/src/bls.d.ts +0 -6
- package/dist/src/bls.js +0 -247
- package/dist/src/chain.d.ts +0 -2
- package/dist/src/chain.js +0 -26
- package/dist/src/client/index.d.ts +0 -71
- package/dist/src/client/index.js +0 -120
- package/dist/src/client/recipient.d.ts +0 -129
- package/dist/src/client/recipient.js +0 -257
- package/dist/src/client/shared.d.ts +0 -11
- package/dist/src/client/shared.js +0 -17
- package/dist/src/client/user.d.ts +0 -109
- package/dist/src/client/user.js +0 -151
- package/dist/src/config.d.ts +0 -103
- package/dist/src/config.js +0 -197
- package/dist/src/constants.d.ts +0 -4
- package/dist/src/constants.js +0 -7
- package/dist/src/contract.d.ts +0 -55
- package/dist/src/contract.js +0 -312
- package/dist/src/debug.d.ts +0 -2
- package/dist/src/debug.js +0 -5
- package/dist/src/errors.d.ts +0 -58
- package/dist/src/errors.js +0 -81
- package/dist/src/guarantee.d.ts +0 -25
- package/dist/src/guarantee.js +0 -272
- package/dist/src/http.d.ts +0 -11
- package/dist/src/http.js +0 -57
- package/dist/src/index.d.ts +0 -17
- package/dist/src/index.js +0 -33
- package/dist/src/models.d.ts +0 -261
- package/dist/src/models.js +0 -360
- package/dist/src/networks.d.ts +0 -40
- package/dist/src/networks.js +0 -57
- package/dist/src/payment.d.ts +0 -82
- package/dist/src/payment.js +0 -67
- package/dist/src/rpc.d.ts +0 -38
- package/dist/src/rpc.js +0 -161
- package/dist/src/serde.d.ts +0 -5
- package/dist/src/serde.js +0 -33
- package/dist/src/signing.d.ts +0 -170
- package/dist/src/signing.js +0 -311
- package/dist/src/utils.d.ts +0 -11
- package/dist/src/utils.js +0 -90
- package/dist/src/validation.d.ts +0 -32
- package/dist/src/validation.js +0 -84
- package/dist/src/wallet/cdp.d.ts +0 -13
- package/dist/src/wallet/cdp.js +0 -78
- package/dist/src/wallet/index.d.ts +0 -2
- package/dist/src/wallet/index.js +0 -5
- package/dist/src/x402/index.d.ts +0 -90
- package/dist/src/x402/index.js +0 -243
- package/dist/src/x402/models.d.ts +0 -75
- package/dist/src/x402/models.js +0 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/errors/index.ts","../src/http.ts","../src/serde.ts","../src/utils/index.ts","../src/auth/index.ts","../src/debug.ts","../src/bls/index.ts","../src/guarantee/index.ts","../src/constants/index.ts","../src/models/index.ts","../src/payment/index.ts","../src/client/recipient.ts","../src/client/user.ts","../src/abi/clearinghouse.ts","../src/abi/core4mica.ts","../src/chain.ts","../src/contract/index.ts","../src/networks/index.ts","../src/rpc/index.ts","../src/validation/index.ts","../src/signing/index.ts","../src/client/index.ts","../src/config/index.ts","../src/wallet/cdp.ts","../src/server/base64.ts","../src/server/envelope.ts","../src/x402/index.ts"],"names":["tokens","toBytes","SigningScheme","txReceipt","body","encodeAbiParameters","typed","signature","env","result","keccak256","base"],"mappings":"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","file":"index.js","sourcesContent":["/** Base class for all 4Mica SDK errors. Sets `error.name` to the subclass name. */\nexport class FourMicaError extends Error {\n constructor(message: string) {\n super(message);\n this.name = this.constructor.name;\n }\n}\n\n/** Thrown when the SDK configuration is invalid (e.g. missing required fields or bad URL). */\nexport class ConfigError extends FourMicaError {}\n\n/** Thrown when a 4Mica core RPC call fails. Includes the HTTP status and raw response body. */\nexport class RpcError extends FourMicaError {\n readonly status?: number;\n readonly body?: unknown;\n\n constructor(message: string, options?: { status?: number; body?: unknown }) {\n super(message);\n this.status = options?.status;\n this.body = options?.body;\n }\n}\n\n/** Thrown when the SDK client fails to initialise (e.g. chain ID mismatch). */\nexport class ClientInitializationError extends FourMicaError {}\n\n/** Thrown when signing a payment claim fails (e.g. unsupported scheme, address mismatch). */\nexport class SigningError extends FourMicaError {}\n\n/** Thrown when an on-chain contract call fails or returns an unexpected result. */\nexport class ContractError extends FourMicaError {}\n\n/** Thrown when BLS certificate verification fails (e.g. domain mismatch, invalid encoding). */\nexport class VerificationError extends FourMicaError {}\n\n/** Thrown when an x402 HTTP payment flow encounters an error. */\nexport class X402Error extends FourMicaError {}\n\n/** Base class for authentication-related errors. */\nexport class AuthError extends FourMicaError {}\n\n/** Thrown when the auth URL is invalid or unreachable. */\nexport class AuthUrlError extends AuthError {}\n\n/** Thrown when a network-level error occurs during authentication. */\nexport class AuthTransportError extends AuthError {}\n\n/** Thrown when the auth server response cannot be decoded. */\nexport class AuthDecodeError extends AuthError {}\n\n/** Thrown when the auth server returns an error response. Includes HTTP status and body. */\nexport class AuthApiError extends AuthError {\n readonly status?: number;\n readonly body?: unknown;\n\n constructor(message: string, options?: { status?: number; body?: unknown }) {\n super(message);\n this.status = options?.status;\n this.body = options?.body;\n }\n}\n\n/** Thrown when auth configuration is invalid. */\nexport class AuthConfigError extends AuthError {}\n\n/** Thrown when an authenticated operation is attempted without auth being configured. */\nexport class AuthMissingConfigError extends AuthConfigError {}\n","export type FetchFn = (\n input: RequestInfo | URL,\n init?: RequestInit,\n) => Promise<Response>;\n\ntype DecodeErrorFactory = (message: string, response: Response) => Error;\ntype HttpErrorFactory = (\n message: string,\n response: Response,\n body: unknown,\n) => Error;\n\nexport function normalizeBaseUrl(endpoint: string): string {\n return endpoint.endsWith(\"/\") ? endpoint.slice(0, -1) : endpoint;\n}\n\nexport function extractErrorMessage(payload: unknown): string {\n if (payload && typeof payload === \"object\") {\n const record = payload as Record<string, unknown>;\n const error = record.error;\n const msg = record.message;\n return (\n (typeof error === \"string\" && error) ||\n (typeof msg === \"string\" && msg) ||\n JSON.stringify(record, (_k, v) => v)\n );\n }\n if (typeof payload === \"string\" && payload.trim()) {\n return payload.trim();\n }\n return \"unknown error\";\n}\n\nexport async function requestJson<T>(\n fetchFn: FetchFn,\n url: string,\n init: RequestInit,\n options: {\n decodeError: DecodeErrorFactory;\n httpError: HttpErrorFactory;\n allowEmptyOk?: boolean;\n },\n): Promise<T> {\n const response = await fetchFn(url, init);\n\n let text = \"\";\n try {\n text = await response.text();\n } catch (err) {\n throw options.decodeError(\n `invalid response from ${response.url}: ${String(err)}`,\n response,\n );\n }\n\n let payload: unknown = null;\n let parsed = false;\n let parseError: unknown;\n if (text) {\n try {\n payload = JSON.parse(text) as unknown;\n parsed = true;\n } catch (err) {\n payload = text;\n parseError = err;\n }\n }\n\n if (!response.ok) {\n const message = `${response.status}: ${extractErrorMessage(payload)}`;\n throw options.httpError(message, response, payload);\n }\n\n if (!text && !options.allowEmptyOk) {\n throw options.decodeError(\n `invalid JSON response from ${response.url}: empty response body`,\n response,\n );\n }\n\n if (text && !parsed) {\n const detail =\n parseError instanceof Error ? parseError.message : String(parseError);\n throw options.decodeError(\n `invalid JSON response from ${response.url}: ${detail}`,\n response,\n );\n }\n\n return payload as T;\n}\n","export type RecordValue = Record<string, unknown>;\n\nexport const isRecord = (value: unknown): value is RecordValue =>\n Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n\nexport function getAny<T>(raw: RecordValue, ...keys: string[]): T | undefined {\n for (const key of keys) {\n if (key in raw) return raw[key] as T;\n }\n return undefined;\n}\n\nexport function readString(\n value: unknown,\n label: string,\n onError: (label: string) => Error,\n): string {\n if (typeof value === \"string\" && value.trim()) {\n return value;\n }\n throw onError(label);\n}\n\nexport function readNumber(\n value: unknown,\n label: string,\n onError: (label: string) => Error,\n): number {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === \"string\" && value.trim()) {\n const parsed = Number(value);\n if (Number.isFinite(parsed)) {\n return parsed;\n }\n }\n throw onError(label);\n}\n","import { getAddress, type Hex, isAddress } from \"viem\";\n\nexport class ValidationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"ValidationError\";\n }\n}\n\nexport function validateUrl(raw: string): string {\n let url: URL;\n try {\n url = new URL(raw);\n } catch {\n throw new ValidationError(`invalid URL: ${raw}`);\n }\n if (!url.protocol || !url.host) {\n throw new ValidationError(`invalid URL: ${raw}`);\n }\n return raw;\n}\n\nexport function normalizePrivateKey(raw: string): string {\n const key = raw.startsWith(\"0x\") ? raw.slice(2) : raw;\n if (!/^[0-9a-fA-F]{64}$/.test(key)) {\n throw new ValidationError(\"invalid private key (expected 32 byte hex)\");\n }\n return `0x${key.toLowerCase()}`;\n}\n\nexport function normalizeAddress(raw: string): string {\n const candidate = String(raw);\n if (isAddress(candidate)) {\n return getAddress(candidate);\n }\n const lower = candidate.toLowerCase();\n if (isAddress(lower)) {\n return getAddress(lower);\n }\n throw new ValidationError(`invalid address: ${raw}`);\n}\n\nexport function ensureHexPrefix(value: string): Hex {\n return (value.startsWith(\"0x\") ? value : `0x${value}`) as Hex;\n}\n\nfunction parseNumericString(raw: string): bigint {\n const text = raw.trim();\n const n = BigInt(text);\n if (n < 0n) {\n throw new ValidationError(\"u256 cannot be negative\");\n }\n return n;\n}\n\nexport function parseU256(value: number | bigint | string): bigint {\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) {\n throw new ValidationError(\"invalid integer\");\n }\n if (!Number.isSafeInteger(value)) {\n throw new ValidationError(\n \"integer value exceeds safe precision; use bigint or hex string for large values\",\n );\n }\n if (value < 0) {\n throw new ValidationError(\"u256 cannot be negative\");\n }\n return BigInt(value);\n }\n if (typeof value === \"bigint\") {\n if (value < 0) {\n throw new ValidationError(\"u256 cannot be negative\");\n }\n return value;\n }\n if (typeof value === \"string\") {\n return parseNumericString(value);\n }\n throw new ValidationError(`unsupported numeric type: ${typeof value}`);\n}\n\nexport function serializeU256(value: number | bigint | string): string {\n return `0x${parseU256(value).toString(16)}`;\n}\n\nexport function hexFromBytes(bytes: Uint8Array): Hex {\n return `0x${Buffer.from(bytes).toString(\"hex\")}`;\n}\n","import type { Account } from \"viem\";\nimport type {\n AuthNonceResponse,\n AuthTokens,\n SiweTemplate,\n} from \"@/auth/models\";\nimport {\n AuthApiError,\n AuthConfigError,\n AuthDecodeError,\n AuthError,\n AuthMissingConfigError,\n AuthTransportError,\n AuthUrlError,\n SigningError,\n} from \"@/errors\";\nimport { normalizeBaseUrl, requestJson } from \"@/http\";\nimport type { FetchFn } from \"@/rpc\";\nimport { isRecord, type RecordValue, readNumber, readString } from \"@/serde\";\nimport { ValidationError, validateUrl } from \"@/utils\";\n\nexport type {\n AuthNonceResponse,\n AuthTokens,\n SiweTemplate,\n} from \"@/auth/models\";\n\nconst missingField = (label: string) =>\n new AuthDecodeError(`invalid auth response: missing ${label}`);\n\nconst parseTokens = (payload: RecordValue): AuthTokens => {\n const accessToken = readString(\n payload.access_token ?? payload.accessToken,\n \"access_token\",\n missingField,\n );\n const refreshToken = readString(\n payload.refresh_token ?? payload.refreshToken,\n \"refresh_token\",\n missingField,\n );\n const expiresIn = readNumber(\n payload.expires_in ?? payload.expiresIn,\n \"expires_in\",\n missingField,\n );\n return { accessToken, refreshToken, expiresIn };\n};\n\nconst parseSiweTemplate = (payload: RecordValue): SiweTemplate => {\n const domain = readString(payload.domain, \"siwe.domain\", missingField);\n const uri = readString(payload.uri, \"siwe.uri\", missingField);\n const chainId = readNumber(\n payload.chain_id ?? payload.chainId,\n \"siwe.chain_id\",\n missingField,\n );\n const statement = readString(\n payload.statement,\n \"siwe.statement\",\n missingField,\n );\n const expiration = readString(\n payload.expiration,\n \"siwe.expiration\",\n missingField,\n );\n const issuedAt = readString(\n payload.issued_at ?? payload.issuedAt,\n \"siwe.issued_at\",\n missingField,\n );\n return { domain, uri, chainId, statement, expiration, issuedAt };\n};\n\nconst parseNonceResponse = (payload: unknown): AuthNonceResponse => {\n if (!isRecord(payload)) {\n throw new AuthDecodeError(\"invalid auth response: nonce payload\");\n }\n const nonce = readString(payload.nonce, \"nonce\", missingField);\n if (!isRecord(payload.siwe)) {\n throw new AuthDecodeError(\"invalid auth response: missing siwe template\");\n }\n return { nonce, siwe: parseSiweTemplate(payload.siwe) };\n};\n\nexport function buildSiweMessage(input: {\n domain: string;\n address: string;\n statement: string;\n uri: string;\n chainId: number | string;\n nonce: string;\n issuedAt: string;\n expiration: string;\n}): string {\n const chainId = String(input.chainId);\n return `${input.domain} wants you to sign in with your Ethereum account:\\n${input.address}\\n\\n${input.statement}\\n\\nURI: ${input.uri}\\nVersion: 1\\nChain ID: ${chainId}\\nNonce: ${input.nonce}\\nIssued At: ${input.issuedAt}\\nExpiration Time: ${input.expiration}`;\n}\n\nexport class AuthClient {\n private baseUrl: string;\n private fetchFn: FetchFn;\n\n constructor(endpoint: string, fetchFn: FetchFn = fetch) {\n try {\n const validated = validateUrl(endpoint);\n this.baseUrl = normalizeBaseUrl(validated);\n } catch (err) {\n if (err instanceof ValidationError) {\n throw new AuthUrlError(err.message);\n }\n throw err;\n }\n this.fetchFn = fetchFn;\n }\n\n async getNonce(address: string): Promise<AuthNonceResponse> {\n const payload = await this.post(\"/auth/nonce\", { address });\n return parseNonceResponse(payload);\n }\n\n async verify(\n address: string,\n message: string,\n signature: string,\n ): Promise<AuthTokens> {\n const payload = await this.post(\"/auth/verify\", {\n address,\n message,\n signature,\n });\n if (!isRecord(payload)) {\n throw new AuthDecodeError(\"invalid auth response: verify payload\");\n }\n return parseTokens(payload);\n }\n\n async refresh(refreshToken: string): Promise<AuthTokens> {\n const payload = await this.post(\"/auth/refresh\", {\n refresh_token: refreshToken,\n });\n if (!isRecord(payload)) {\n throw new AuthDecodeError(\"invalid auth response: refresh payload\");\n }\n return parseTokens(payload);\n }\n\n async logout(refreshToken: string): Promise<void> {\n await this.post(\"/auth/logout\", { refresh_token: refreshToken });\n }\n\n private async post(\n path: string,\n body: Record<string, unknown>,\n ): Promise<unknown> {\n return this.request(path, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(body),\n });\n }\n\n private async request(path: string, init: RequestInit): Promise<unknown> {\n try {\n return await requestJson<unknown>(\n this.fetchFn,\n `${this.baseUrl}${path}`,\n init,\n {\n decodeError: (message) => new AuthDecodeError(message),\n httpError: (message, response, body) =>\n new AuthApiError(message, {\n status: response.status,\n body,\n }),\n allowEmptyOk: true,\n },\n );\n } catch (err) {\n if (err instanceof AuthError) {\n throw err;\n }\n throw new AuthTransportError(`auth request failed: ${String(err)}`);\n }\n }\n}\n\nexport class AuthSession {\n private authClient: AuthClient;\n private signer: Account;\n private refreshMarginSecs: number;\n private tokens?: {\n accessToken: string;\n refreshToken: string;\n expiresAt: number;\n };\n private inFlight?: Promise<string>;\n private loginPromise?: Promise<AuthTokens>;\n\n constructor(options: {\n authUrl: string;\n signer: Account;\n refreshMarginSecs?: number;\n fetchFn?: FetchFn;\n }) {\n if (!options.authUrl) {\n throw new AuthMissingConfigError(\"missing auth_url\");\n }\n this.authClient = new AuthClient(options.authUrl, options.fetchFn);\n this.signer = options.signer;\n\n const margin = options.refreshMarginSecs ?? 60;\n if (!Number.isFinite(margin) || margin < 0) {\n throw new AuthConfigError(\"refresh margin must be non-negative\");\n }\n this.refreshMarginSecs = margin;\n }\n\n async accessToken(): Promise<string> {\n if (this.tokens && !this.isExpiringSoon()) {\n return this.tokens.accessToken;\n }\n if (this.inFlight) {\n return this.inFlight;\n }\n this.inFlight = this.refreshOrLogin();\n try {\n return await this.inFlight;\n } finally {\n this.inFlight = undefined;\n }\n }\n\n async login(): Promise<AuthTokens> {\n if (this.loginPromise) {\n return this.loginPromise;\n }\n this.loginPromise = this.performLogin();\n try {\n return await this.loginPromise;\n } finally {\n this.loginPromise = undefined;\n }\n }\n\n async logout(): Promise<void> {\n if (!this.tokens?.refreshToken) {\n return;\n }\n await this.authClient.logout(this.tokens.refreshToken);\n this.tokens = undefined;\n }\n\n private async refreshOrLogin(): Promise<string> {\n if (this.tokens?.refreshToken) {\n try {\n const tokens = await this.refreshTokens();\n return tokens.accessToken;\n } catch (err) {\n if (err instanceof AuthApiError && err.status === 401) {\n const tokens = await this.login();\n return tokens.accessToken;\n }\n throw err;\n }\n }\n const tokens = await this.login();\n return tokens.accessToken;\n }\n\n private async performLogin(): Promise<AuthTokens> {\n const address = this.signer.address;\n const nonce = await this.authClient.getNonce(address);\n const message = buildSiweMessage({\n domain: nonce.siwe.domain,\n address,\n statement: nonce.siwe.statement,\n uri: nonce.siwe.uri,\n chainId: nonce.siwe.chainId,\n nonce: nonce.nonce,\n issuedAt: nonce.siwe.issuedAt,\n expiration: nonce.siwe.expiration,\n });\n if (!this.signer.signMessage) {\n throw new SigningError(\"signMessage is not supported for this account\");\n }\n const signature = await this.signer.signMessage({ message });\n const tokens = await this.authClient.verify(address, message, signature);\n this.cacheTokens(tokens);\n return tokens;\n }\n\n private async refreshTokens(): Promise<AuthTokens> {\n if (!this.tokens?.refreshToken) {\n throw new AuthMissingConfigError(\"missing refresh token\");\n }\n const tokens = await this.authClient.refresh(this.tokens.refreshToken);\n this.cacheTokens(tokens);\n return tokens;\n }\n\n private cacheTokens(tokens: AuthTokens): void {\n const now = Date.now() / 1000;\n this.tokens = {\n accessToken: tokens.accessToken,\n refreshToken: tokens.refreshToken,\n expiresAt: now + tokens.expiresIn,\n };\n }\n\n private isExpiringSoon(): boolean {\n if (!this.tokens) {\n return true;\n }\n const now = Date.now() / 1000;\n return now + this.refreshMarginSecs >= this.tokens.expiresAt;\n }\n}\n","// Guarded env access so the SDK imports cleanly on runtimes without `process`\n// (e.g. edge/workers). Debug flags are opt-in and default to off there.\nconst env: Record<string, string | undefined> =\n (globalThis as { process?: { env?: Record<string, string | undefined> } })\n .process?.env ?? {};\n\nexport const DEBUG_BLS = env.DEBUG_BLS === \"1\";\nexport const DEBUG_CERTS = env.DEBUG_CERTS === \"1\";\n","import { toBytes } from \"viem\";\nimport type { BlsField, BlsModule, BlsSignatureInput } from \"@/bls/models\";\nimport { DEBUG_BLS } from \"@/debug\";\nimport { VerificationError } from \"@/errors\";\n\nlet curvesCache: BlsModule | null = null;\nlet curvesPromise: Promise<BlsModule> | null = null;\n\nfunction splitFp(value: bigint): [Uint8Array, Uint8Array] {\n const be48 = value.toString(16).padStart(96, \"0\");\n const bytes = toBytes(`0x${be48}`);\n const hi = new Uint8Array(32);\n hi.set(bytes.slice(0, 16), 16);\n const lo = bytes.slice(16);\n return [hi, lo];\n}\n\nconst isBlsModule = (mod: unknown): mod is BlsModule =>\n mod !== null &&\n typeof mod === \"object\" &&\n \"bls12_381\" in mod &&\n typeof (mod as Record<string, unknown>).bls12_381 === \"object\";\n\n/**\n * Lazily load the optional `@noble/curves` BLS module via a runtime-neutral\n * dynamic import. Kept lazy (no top-level await) so importing the SDK stays\n * side-effect free and works on Node, Bun, Deno, and edge runtimes.\n */\nconst loadCurvesAsync = async (): Promise<BlsModule> => {\n if (curvesCache) return curvesCache;\n if (curvesPromise) return curvesPromise;\n curvesPromise = (async () => {\n let mod: unknown;\n try {\n // @noble/curves v2 exposes the subpath with an explicit `.js` extension.\n mod = await import(\"@noble/curves/bls12-381.js\");\n } catch {\n throw new VerificationError(\n \"BLS decoding requires @noble/curves; install it to enable remuneration\",\n );\n }\n const candidate =\n mod &&\n typeof mod === \"object\" &&\n \"default\" in mod &&\n isBlsModule((mod as { default: unknown }).default)\n ? (mod as { default: BlsModule }).default\n : mod;\n if (!isBlsModule(candidate)) {\n throw new VerificationError(\n \"BLS decoding: unexpected module shape from @noble/curves\",\n );\n }\n return candidate;\n })();\n curvesCache = await curvesPromise;\n return curvesCache;\n};\n\nconst normalizeSignature = (\n input: unknown,\n): { hex: string; bytes: Uint8Array } => {\n if (DEBUG_BLS) {\n const type =\n input && typeof input === \"object\"\n ? `object(keys=${Object.keys(input as Record<string, unknown>)\n .slice(0, 6)\n .join(\",\")})`\n : typeof input;\n console.log(` debug bls: normalizeSignature input=${type}`);\n }\n if (typeof input === \"string\") {\n const raw = input.startsWith(\"0x\") ? input.slice(2) : input;\n const bytes = toBytes(`0x${raw}`);\n return { hex: raw, bytes };\n }\n if (input instanceof Uint8Array) {\n const hex = Buffer.from(input).toString(\"hex\");\n return { hex, bytes: input };\n }\n if (typeof Buffer !== \"undefined\" && Buffer.isBuffer(input)) {\n const hex = input.toString(\"hex\");\n return { hex, bytes: new Uint8Array(input) };\n }\n if (input instanceof ArrayBuffer) {\n const bytes = new Uint8Array(input);\n const hex = Buffer.from(bytes).toString(\"hex\");\n return { hex, bytes };\n }\n if (ArrayBuffer.isView(input)) {\n const bytes = new Uint8Array(\n input.buffer,\n input.byteOffset,\n input.byteLength,\n );\n const hex = Buffer.from(bytes).toString(\"hex\");\n return { hex, bytes };\n }\n if (Array.isArray(input)) {\n const bytes = Uint8Array.from(input);\n const hex = Buffer.from(bytes).toString(\"hex\");\n return { hex, bytes };\n }\n if (input && typeof input === \"object\") {\n const record = input as Record<string, unknown>;\n if (Array.isArray(record.data)) {\n const arr = record.data as unknown[];\n if (\n arr.some(\n (b) =>\n typeof b !== \"number\" || b < 0 || b > 255 || !Number.isInteger(b),\n )\n ) {\n throw new VerificationError(\n \"signature data array contains invalid byte values\",\n );\n }\n const bytes = Uint8Array.from(arr as number[]);\n const hex = Buffer.from(bytes).toString(\"hex\");\n return { hex, bytes };\n }\n if (\"bytes\" in record) {\n return normalizeSignature(record.bytes);\n }\n if (\"signature\" in record) {\n return normalizeSignature(record.signature);\n }\n }\n const label =\n input && typeof input === \"object\"\n ? `object(keys=${Object.keys(input as Record<string, unknown>)\n .slice(0, 6)\n .join(\",\")})`\n : typeof input;\n throw new VerificationError(\n `expected signature hex string or bytes, got ${label}`,\n );\n};\n\nconst signatureToWordsWith = (\n curves: BlsModule,\n signatureHex: BlsSignatureInput,\n): Uint8Array[] => {\n const toBigint = (field: BlsField): bigint => {\n if (\n typeof field === \"bigint\" ||\n typeof field === \"number\" ||\n typeof field === \"string\"\n ) {\n return BigInt(field);\n }\n if (\n field &&\n typeof field === \"object\" &&\n \"value\" in field &&\n field.value !== undefined\n ) {\n const value = field.value;\n if (\n typeof value === \"bigint\" ||\n typeof value === \"number\" ||\n typeof value === \"string\"\n ) {\n return BigInt(value);\n }\n }\n throw new VerificationError(\"invalid BLS field element\");\n };\n\n const readFp2 = (value: unknown): [BlsField, BlsField] => {\n if (!value || typeof value !== \"object\") {\n throw new VerificationError(\"invalid BLS field element\");\n }\n const record = value as Record<string, unknown>;\n if (Array.isArray(record.c) && record.c.length >= 2) {\n return [record.c[0] as BlsField, record.c[1] as BlsField];\n }\n if (\"c0\" in record && \"c1\" in record) {\n return [record.c0 as BlsField, record.c1 as BlsField];\n }\n if (Array.isArray((record as { coeffs?: unknown }).coeffs)) {\n const coeffs = (record as { coeffs?: unknown }).coeffs as unknown[];\n if (coeffs.length >= 2)\n return [coeffs[0] as BlsField, coeffs[1] as BlsField];\n }\n throw new VerificationError(\"invalid BLS field element\");\n };\n\n try {\n const sig = normalizeSignature(signatureHex);\n const g2 = curves.bls12_381.G2;\n const pointCtor = g2.Point ?? g2.ProjectivePoint;\n if (!pointCtor?.fromHex) {\n throw new VerificationError(\"unsupported @noble/curves BLS export\");\n }\n let point: ReturnType<NonNullable<typeof pointCtor>[\"fromHex\"]>;\n try {\n point = pointCtor.fromHex(sig.bytes);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n if (message.includes(\"hex string expected\")) {\n point = pointCtor.fromHex(sig.hex);\n } else {\n throw err;\n }\n }\n const affine = point.toAffine();\n const [x0, x1] = readFp2(affine.x);\n const [y0, y1] = readFp2(affine.y);\n const coords = [x0, x1, y0, y1].map((fp) => toBigint(fp));\n const words: Uint8Array[] = [];\n coords.forEach((coord) => {\n const [hi, lo] = splitFp(coord);\n words.push(hi, lo);\n });\n return words;\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n throw new VerificationError(`invalid BLS signature: ${message}`);\n }\n};\n\n/**\n * Expand a compressed G2 signature into the tuple expected by the contract.\n * This mirrors the Python helper and requires the optional `@noble/curves` dependency.\n *\n * Synchronous variant: usable only after {@link signatureToWordsAsync} (or any\n * async remuneration path) has loaded `@noble/curves`. Prefer\n * {@link signatureToWordsAsync}, which is runtime-neutral and used internally.\n *\n * @throws {@link VerificationError} if `@noble/curves` has not been loaded yet.\n */\nexport function signatureToWords(signatureHex: string): Uint8Array[] {\n if (!curvesCache) {\n throw new VerificationError(\n \"BLS module not loaded synchronously; use signatureToWordsAsync instead\",\n );\n }\n return signatureToWordsWith(curvesCache, signatureHex);\n}\n\nexport async function signatureToWordsAsync(\n signatureHex: string,\n): Promise<Uint8Array[]> {\n const curves = await loadCurvesAsync();\n return signatureToWordsWith(curves, signatureHex);\n}\n","import {\n decodeAbiParameters,\n encodeAbiParameters,\n type Hex,\n toBytes,\n} from \"viem\";\nimport { VerificationError } from \"@/errors\";\nimport type {\n PaymentGuaranteeClaims,\n PaymentGuaranteeValidationPolicyV2,\n} from \"@/models\";\nimport { ensureHexPrefix, hexFromBytes, parseU256 } from \"@/utils\";\n\nconst CLAIMS_ENCODED_BYTES = 32 * 9;\n// Minimum bytes for a valid outer envelope: uint64 + bytes offset + bytes length\nconst MIN_ENVELOPE_BYTES = 32 * 2 + 32;\nconst CLAIM_TYPES = [\n { type: \"bytes32\" }, // domain\n { type: \"uint256\" }, // cycle_id\n { type: \"uint256\" }, // req_id\n { type: \"address\" }, // client (user)\n { type: \"address\" }, // recipient\n { type: \"uint256\" }, // amount\n { type: \"address\" }, // asset\n { type: \"uint64\" }, // timestamp\n { type: \"uint64\" }, // version\n] as const;\n\n// V2 adds: validation_registry_address, validation_request_hash, validation_chain_id,\n// validator_address, validator_agent_id, min_validation_score,\n// validation_subject_hash, job_hash, required_validation_tag (dynamic string)\nconst CLAIM_TYPES_V2 = [\n { type: \"bytes32\" }, // domain\n { type: \"uint256\" }, // cycle_id\n { type: \"uint256\" }, // req_id\n { type: \"address\" }, // client (user)\n { type: \"address\" }, // recipient\n { type: \"uint256\" }, // amount\n { type: \"address\" }, // asset\n { type: \"uint64\" }, // timestamp\n { type: \"uint64\" }, // version\n { type: \"address\" }, // validation_registry_address\n { type: \"bytes32\" }, // validation_request_hash\n { type: \"uint64\" }, // validation_chain_id\n { type: \"address\" }, // validator_address\n { type: \"uint256\" }, // validator_agent_id\n { type: \"uint8\" }, // min_validation_score\n { type: \"bytes32\" }, // validation_subject_hash\n { type: \"bytes32\" }, // job_hash\n { type: \"string\" }, // required_validation_tag (dynamic)\n] as const;\n\nconst CLAIM_TYPES_V2_TUPLE = [\n {\n type: \"tuple\",\n components: [\n { name: \"domain\", type: \"bytes32\" },\n { name: \"cycleId\", type: \"uint256\" },\n { name: \"reqId\", type: \"uint256\" },\n { name: \"user\", type: \"address\" },\n { name: \"recipient\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n { name: \"asset\", type: \"address\" },\n { name: \"timestamp\", type: \"uint64\" },\n { name: \"claimsVersion\", type: \"uint64\" },\n { name: \"validationRegistryAddress\", type: \"address\" },\n { name: \"validationRequestHash\", type: \"bytes32\" },\n { name: \"validationChainId\", type: \"uint64\" },\n { name: \"validatorAddress\", type: \"address\" },\n { name: \"validatorAgentId\", type: \"uint256\" },\n { name: \"minValidationScore\", type: \"uint8\" },\n { name: \"validationSubjectHash\", type: \"bytes32\" },\n { name: \"jobHash\", type: \"bytes32\" },\n { name: \"requiredValidationTag\", type: \"string\" },\n ],\n },\n] as const;\n\nfunction ensureDomainBytes(domain: string | Uint8Array): Uint8Array {\n const bytes = typeof domain === \"string\" ? toBytes(domain) : domain;\n if (bytes.length !== 32) {\n throw new VerificationError(\"domain separator must be 32 bytes\");\n }\n return bytes;\n}\n\nfunction normalizeHexBytes(data: string | Uint8Array): Hex {\n if (typeof data === \"string\") {\n return ensureHexPrefix(data);\n }\n return hexFromBytes(data);\n}\n\n/**\n * ABI-encode a {@link PaymentGuaranteeClaims} object into a hex string.\n *\n * Produces the outer `(uint64 version, bytes innerClaims)` envelope format expected\n * by the Core4Mica contract. Supports V1 (9 fields) and V2 (18 fields with validation policy).\n *\n * @param claims - Decoded claims to encode. Must have `version` set to `1` or `2`.\n * @returns `0x`-prefixed hex string of the ABI-encoded envelope.\n * @throws {@link VerificationError} if `version` is not `1` or `2`, the domain is not 32 bytes,\n * or V2 claims are missing `validationPolicy`.\n */\nexport function encodeGuaranteeClaims(claims: PaymentGuaranteeClaims): string {\n if (claims.version === 1) {\n const domain = ensureDomainBytes(claims.domain);\n const encoded = encodeAbiParameters(CLAIM_TYPES, [\n hexFromBytes(domain),\n parseU256(claims.cycleId),\n parseU256(claims.reqId),\n claims.userAddress as Hex,\n claims.recipientAddress as Hex,\n parseU256(claims.amount),\n claims.assetAddress as Hex,\n BigInt(claims.timestamp),\n BigInt(claims.version),\n ]);\n return encodeAbiParameters(\n [{ type: \"uint64\" }, { type: \"bytes\" }],\n [BigInt(claims.version), encoded],\n );\n }\n\n if (claims.version === 2) {\n if (!claims.validationPolicy) {\n throw new VerificationError(\n \"V2 guarantee claims missing validationPolicy\",\n );\n }\n const p = claims.validationPolicy;\n const domain = ensureDomainBytes(claims.domain);\n const encoded = encodeAbiParameters(CLAIM_TYPES_V2_TUPLE, [\n {\n domain: hexFromBytes(domain),\n cycleId: parseU256(claims.cycleId),\n reqId: parseU256(claims.reqId),\n user: claims.userAddress as Hex,\n recipient: claims.recipientAddress as Hex,\n amount: parseU256(claims.amount),\n asset: claims.assetAddress as Hex,\n timestamp: BigInt(claims.timestamp),\n claimsVersion: BigInt(claims.version),\n validationRegistryAddress: p.validationRegistryAddress as Hex,\n validationRequestHash: ensureHexPrefix(p.validationRequestHash),\n validationChainId: BigInt(p.validationChainId),\n validatorAddress: p.validatorAddress as Hex,\n validatorAgentId: p.validatorAgentId,\n minValidationScore: p.minValidationScore,\n validationSubjectHash: ensureHexPrefix(p.validationSubjectHash),\n jobHash: ensureHexPrefix(p.jobHash),\n requiredValidationTag: p.requiredValidationTag,\n },\n ]);\n return encodeAbiParameters(\n [{ type: \"uint64\" }, { type: \"bytes\" }],\n [BigInt(claims.version), encoded],\n );\n }\n\n throw new VerificationError(\n `unsupported guarantee claims version: ${claims.version}`,\n );\n}\n\n/**\n * Decode ABI-encoded guarantee claims into a {@link PaymentGuaranteeClaims} object.\n *\n * Accepts either the modern `(uint64 version, bytes innerClaims)` envelope or the legacy\n * unwrapped V1 format (raw 288-byte ABI encoding without an outer envelope).\n *\n * @param data - Hex string or raw bytes of the ABI-encoded claims.\n * @returns Decoded {@link PaymentGuaranteeClaims} with `version` set to `1` or `2`.\n * @throws {@link VerificationError} if the data is too short, the inner length is wrong,\n * or the encoded version number is unsupported.\n */\nexport function decodeGuaranteeClaims(\n data: string | Uint8Array,\n): PaymentGuaranteeClaims {\n const hex = normalizeHexBytes(data);\n const byteLen = (hex.length - 2) / 2;\n\n // Try to decode as unwrapped V1 (legacy)\n if (byteLen === CLAIMS_ENCODED_BYTES) {\n return decodeV1Claims(hex);\n }\n\n // Decode outer envelope to get version\n if (byteLen < MIN_ENVELOPE_BYTES) {\n throw new VerificationError(\n `unexpected guarantee claims length: ${byteLen} bytes`,\n );\n }\n\n const [version, wrapped] = decodeAbiParameters(\n [{ type: \"uint64\" }, { type: \"bytes\" }],\n hex,\n );\n\n if (version === 1n) {\n const innerHex = wrapped as Hex;\n const innerByteLen = (innerHex.length - 2) / 2;\n if (innerByteLen !== CLAIMS_ENCODED_BYTES) {\n throw new VerificationError(\n `unexpected V1 claims inner length: ${innerByteLen} bytes`,\n );\n }\n return decodeV1Claims(innerHex);\n }\n\n if (version === 2n) {\n return decodeV2Claims(wrapped as Hex);\n }\n\n throw new VerificationError(\n `unsupported guarantee claims version: ${version}`,\n );\n}\n\nfunction decodeV1Claims(encoded: Hex): PaymentGuaranteeClaims {\n let decoded: ReturnType<typeof decodeAbiParameters<typeof CLAIM_TYPES>>;\n try {\n decoded = decodeAbiParameters(CLAIM_TYPES, encoded);\n } catch (err) {\n throw new VerificationError(\n `failed to decode V1 guarantee claims: ${String(err)}`,\n );\n }\n const [\n domain,\n cycleId,\n reqId,\n user,\n recipient,\n amount,\n asset,\n timestamp,\n claimsVersion,\n ] = decoded;\n\n if (claimsVersion !== 1n) {\n throw new VerificationError(\n `unsupported guarantee claims version: ${claimsVersion}`,\n );\n }\n\n return {\n domain: toBytes(domain as Hex),\n userAddress: user as string,\n recipientAddress: recipient as string,\n cycleId: parseU256(cycleId),\n reqId: parseU256(reqId),\n amount: parseU256(amount),\n assetAddress: asset as string,\n timestamp: Number(timestamp),\n version: Number(claimsVersion),\n };\n}\n\nfunction decodeV2Claims(encoded: Hex): PaymentGuaranteeClaims {\n try {\n const [decoded] = decodeAbiParameters(CLAIM_TYPES_V2_TUPLE, encoded);\n return buildDecodedV2Claims(decoded);\n } catch (tupleErr) {\n try {\n const decoded = decodeAbiParameters(CLAIM_TYPES_V2, encoded);\n return buildDecodedV2Claims({\n domain: decoded[0],\n cycleId: decoded[1],\n reqId: decoded[2],\n user: decoded[3],\n recipient: decoded[4],\n amount: decoded[5],\n asset: decoded[6],\n timestamp: decoded[7],\n claimsVersion: decoded[8],\n validationRegistryAddress: decoded[9],\n validationRequestHash: decoded[10],\n validationChainId: decoded[11],\n validatorAddress: decoded[12],\n validatorAgentId: decoded[13],\n minValidationScore: decoded[14],\n validationSubjectHash: decoded[15],\n jobHash: decoded[16],\n requiredValidationTag: decoded[17],\n });\n } catch (flatErr) {\n throw new VerificationError(\n `failed to decode V2 guarantee claims: ${String(tupleErr)}; fallback decode failed: ${String(flatErr)}`,\n );\n }\n }\n}\n\nfunction buildDecodedV2Claims(decoded: {\n domain: unknown;\n cycleId: unknown;\n reqId: unknown;\n user: unknown;\n recipient: unknown;\n amount: unknown;\n asset: unknown;\n timestamp: unknown;\n claimsVersion: unknown;\n validationRegistryAddress: unknown;\n validationRequestHash: unknown;\n validationChainId: unknown;\n validatorAddress: unknown;\n validatorAgentId: unknown;\n minValidationScore: unknown;\n validationSubjectHash: unknown;\n jobHash: unknown;\n requiredValidationTag: unknown;\n}): PaymentGuaranteeClaims {\n const {\n domain,\n cycleId,\n reqId,\n user,\n recipient,\n amount,\n asset,\n timestamp,\n claimsVersion,\n validationRegistryAddress,\n validationRequestHash,\n validationChainId,\n validatorAddress,\n validatorAgentId,\n minValidationScore,\n validationSubjectHash,\n jobHash,\n requiredValidationTag,\n } = decoded;\n if (claimsVersion !== 2n) {\n throw new VerificationError(\n `expected V2 claims version, got: ${claimsVersion}`,\n );\n }\n\n const validationPolicy: PaymentGuaranteeValidationPolicyV2 = {\n validationRegistryAddress: validationRegistryAddress as string,\n validationRequestHash: validationRequestHash as string,\n validationChainId: Number(validationChainId as bigint | number | string),\n validatorAddress: validatorAddress as string,\n validatorAgentId: parseU256(validatorAgentId as bigint | number | string),\n minValidationScore: Number(minValidationScore as bigint | number | string),\n validationSubjectHash: validationSubjectHash as string,\n jobHash: jobHash as string,\n requiredValidationTag: requiredValidationTag as string,\n };\n\n return {\n domain: toBytes(domain as Hex),\n userAddress: user as string,\n recipientAddress: recipient as string,\n cycleId: parseU256(cycleId as bigint | number | string),\n reqId: parseU256(reqId as bigint | number | string),\n amount: parseU256(amount as bigint | number | string),\n assetAddress: asset as string,\n timestamp: Number(timestamp as bigint | number | string),\n version: Number(claimsVersion),\n validationPolicy,\n };\n}\n","export const ADMIN_API_KEY_HEADER = \"x-api-key\";\nexport const ADMIN_API_KEY_PREFIX = \"ak_\";\nexport const ADMIN_SCOPE_SUSPEND_USERS = \"user_suspension:write\";\nexport const ADMIN_SCOPE_MANAGE_KEYS = \"admin_api_keys:manage\";\n","import { toBytes } from \"viem\";\nimport { getAny } from \"@/serde\";\nimport {\n ensureHexPrefix,\n normalizeAddress,\n parseU256,\n ValidationError,\n} from \"@/utils\";\n\nexport {\n ADMIN_API_KEY_HEADER,\n ADMIN_API_KEY_PREFIX,\n ADMIN_SCOPE_MANAGE_KEYS,\n ADMIN_SCOPE_SUSPEND_USERS,\n} from \"@/constants\";\n\n/** Signing scheme used when producing a payment guarantee signature. */\nexport enum SigningScheme {\n /** EIP-712 typed-data signing (default, preferred). */\n EIP712 = \"eip712\",\n /** EIP-191 personal_sign (for wallets that do not support typed data). */\n EIP191 = \"eip191\",\n}\n\n/** ECDSA signature and the scheme used to produce it. */\nexport interface PaymentSignature {\n /** 65-byte ECDSA signature as a `0x`-prefixed hex string. */\n signature: string;\n scheme: SigningScheme;\n}\n\n/**\n * V1 payment guarantee request claims. Signed by the payer and submitted to the\n * core RPC to obtain a BLS guarantee certificate.\n *\n * Build with the static {@link PaymentGuaranteeRequestClaims.new} factory which\n * normalises addresses and parses `uint256` values.\n */\nexport class PaymentGuaranteeRequestClaims {\n userAddress: string;\n recipientAddress: string;\n reqId: bigint;\n amount: bigint;\n timestamp: number;\n assetAddress: string;\n\n constructor(init: {\n userAddress: string;\n recipientAddress: string;\n reqId?: bigint;\n amount: bigint;\n timestamp: number;\n assetAddress: string;\n }) {\n this.userAddress = init.userAddress;\n this.recipientAddress = init.recipientAddress;\n this.reqId = init.reqId ?? 0n;\n this.amount = init.amount;\n this.timestamp = init.timestamp;\n this.assetAddress = init.assetAddress;\n }\n\n static new(\n userAddress: string,\n recipientAddress: string,\n amount: number | bigint | string,\n timestamp: number,\n erc20Token?: string | null,\n reqId?: number | bigint | string,\n ): PaymentGuaranteeRequestClaims {\n const asset = erc20Token ?? \"0x0000000000000000000000000000000000000000\";\n return new PaymentGuaranteeRequestClaims({\n userAddress: normalizeAddress(userAddress),\n recipientAddress: normalizeAddress(recipientAddress),\n reqId: reqId !== undefined ? parseU256(reqId) : 0n,\n amount: parseU256(amount),\n timestamp: Number(timestamp),\n assetAddress: normalizeAddress(asset),\n });\n }\n}\n\n/** On-chain validation policy fields carried in a V2 payment guarantee certificate. */\nexport interface PaymentGuaranteeValidationPolicyV2 {\n validationRegistryAddress: string;\n validationRequestHash: string;\n validationChainId: number;\n validatorAddress: string;\n validatorAgentId: bigint;\n minValidationScore: number;\n validationSubjectHash: string;\n jobHash: string;\n requiredValidationTag: string;\n}\n\n/**\n * V2 payment guarantee request claims — extends V1 with a full on-chain validation policy.\n *\n * Compute `validationSubjectHash` via `computeValidationSubjectHash(baseClaims)` and\n * `validationRequestHash` via `computeValidationRequestHash(partialV2)` before constructing.\n * The `jobHash` must be provided and included in the validation request hash.\n *\n * @throws {@link ValidationError} if `minValidationScore` is outside [1, 100].\n */\nexport class PaymentGuaranteeRequestClaimsV2 extends PaymentGuaranteeRequestClaims {\n validationRegistryAddress: string;\n validationRequestHash: string;\n validationChainId: number;\n validatorAddress: string;\n validatorAgentId: bigint;\n minValidationScore: number;\n validationSubjectHash: string;\n jobHash: string;\n requiredValidationTag: string;\n\n constructor(init: {\n userAddress: string;\n recipientAddress: string;\n reqId?: bigint;\n amount: bigint;\n timestamp: number;\n assetAddress: string;\n validationRegistryAddress: string;\n validationRequestHash: string;\n validationChainId: number;\n validatorAddress: string;\n validatorAgentId: bigint;\n minValidationScore: number;\n validationSubjectHash: string;\n jobHash: string;\n requiredValidationTag: string;\n }) {\n super(init);\n if (init.minValidationScore < 1 || init.minValidationScore > 100) {\n throw new ValidationError(\n `minValidationScore must be in [1, 100], got ${init.minValidationScore}`,\n );\n }\n this.validationRegistryAddress = normalizeAddress(\n init.validationRegistryAddress,\n );\n this.validationRequestHash = ensureHexPrefix(\n init.validationRequestHash,\n ).toLowerCase();\n this.validationChainId = init.validationChainId;\n this.validatorAddress = normalizeAddress(init.validatorAddress);\n this.validatorAgentId = init.validatorAgentId;\n this.minValidationScore = init.minValidationScore;\n this.validationSubjectHash = ensureHexPrefix(\n init.validationSubjectHash,\n ).toLowerCase();\n this.jobHash = ensureHexPrefix(init.jobHash).toLowerCase();\n this.requiredValidationTag = init.requiredValidationTag;\n }\n}\n\n/**\n * Decoded payment guarantee claims, as returned by `decodeGuaranteeClaims`.\n * `version` is `1` for V1 certificates and `2` for V2 certificates.\n * V2 certificates additionally carry a `validationPolicy`.\n */\nexport interface PaymentGuaranteeClaims {\n domain: Uint8Array;\n userAddress: string;\n recipientAddress: string;\n cycleId: bigint;\n reqId: bigint;\n amount: bigint;\n assetAddress: string;\n timestamp: number;\n version: number;\n validationPolicy?: PaymentGuaranteeValidationPolicyV2;\n}\n\n/**\n * BLS guarantee certificate returned by `issuePaymentGuarantee`.\n * Both fields are `0x`-prefixed hex strings.\n */\nexport interface BLSCert {\n /** ABI-encoded `(uint64 version, bytes innerClaims)` envelope as a hex string. */\n claims: string;\n /** BLS12-381 G2 signature as a hex string. */\n signature: string;\n}\n\n/** On-chain collateral position for a single asset, returned by `getUser`. */\nexport interface UserInfo {\n /** Asset address (`0x000...` for ETH). */\n asset: string;\n /** Total deposited collateral available for payments (in token base units). */\n collateral: bigint;\n /** Amount of a pending withdrawal request (0 if none). */\n withdrawalRequestAmount: bigint;\n /** Unix timestamp when the withdrawal request was made (0 if none). */\n withdrawalRequestTimestamp: number;\n}\n\nexport class UserSuspensionStatus {\n constructor(\n public userAddress: string,\n public suspended: boolean,\n public updatedAt: number,\n ) {}\n\n static fromRpc(raw: Record<string, unknown>): UserSuspensionStatus {\n return new UserSuspensionStatus(\n (getAny(raw, \"user_address\", \"userAddress\") ?? \"\") as string,\n Boolean(getAny(raw, \"suspended\")),\n Number(getAny(raw, \"updated_at\", \"updatedAt\") ?? 0),\n );\n }\n}\n\nexport class AdminApiKeyInfo {\n constructor(\n public id: string,\n public name: string,\n public scopes: string[],\n public createdAt: number,\n public revokedAt?: number | null,\n ) {}\n\n static fromRpc(raw: Record<string, unknown>): AdminApiKeyInfo {\n const revoked = getAny(raw, \"revoked_at\", \"revokedAt\");\n return new AdminApiKeyInfo(\n (getAny(raw, \"id\") ?? \"\") as string,\n (getAny(raw, \"name\") ?? \"\") as string,\n ((getAny(raw, \"scopes\") ?? []) as string[]).map(String),\n Number(getAny(raw, \"created_at\", \"createdAt\") ?? 0),\n revoked === undefined || revoked === null ? null : Number(revoked),\n );\n }\n}\n\nexport class AdminApiKeySecret {\n constructor(\n public id: string,\n public name: string,\n public scopes: string[],\n public createdAt: number,\n public apiKey: string,\n ) {}\n\n static fromRpc(raw: Record<string, unknown>): AdminApiKeySecret {\n return new AdminApiKeySecret(\n (getAny(raw, \"id\") ?? \"\") as string,\n (getAny(raw, \"name\") ?? \"\") as string,\n ((getAny(raw, \"scopes\") ?? []) as string[]).map(String),\n Number(getAny(raw, \"created_at\", \"createdAt\") ?? 0),\n (getAny(raw, \"api_key\", \"apiKey\") ?? \"\") as string,\n );\n }\n}\n\n/**\n * Off-chain clearing settlement action a participant performs against the\n * ClearingHouse contract for a given cycle.\n */\nexport type ClearingSettlementActionKind =\n | \"pay_net_debit\"\n | \"claim_net_credit\"\n | \"mark_defaulted\";\n\n/** Role a participant holds in a settlement cycle. */\nexport type ClearingParticipantRole =\n | \"NET_CREDITOR\"\n | \"NET_DEBTOR\"\n | \"BALANCED\"\n | string;\n\n/**\n * A participant's committed position in a settlement cycle, with the Merkle\n * proof needed to settle on-chain. Returned by `getClearingParticipantProof`.\n */\nexport class ClearingParticipantProof {\n constructor(\n /** On-chain `bytes32` cycle identifier. */\n public cycleId: string,\n /** Core database cycle identifier. */\n public cycleIdText: string,\n public assetAddress: string,\n public participant: string,\n public role: ClearingParticipantRole,\n /** Amount used with the participant's role-specific ClearingHouse call. */\n public amount: bigint,\n public netDebit: bigint,\n public netCredit: bigint,\n public leaf: string,\n public merkleRoot: string,\n public proof: string[],\n ) {}\n\n static fromRpc(raw: Record<string, unknown>): ClearingParticipantProof {\n const proofRaw = getAny(raw, \"proof\") ?? [];\n return new ClearingParticipantProof(\n (getAny(raw, \"cycle_id\", \"cycleId\") ?? \"\") as string,\n (getAny(raw, \"cycle_id_text\", \"cycleIdText\") ?? \"\") as string,\n (getAny(raw, \"asset_address\", \"assetAddress\") ?? \"\") as string,\n (getAny(raw, \"participant\") ?? \"\") as string,\n (getAny(raw, \"role\") ?? \"\") as ClearingParticipantRole,\n parseU256((getAny(raw, \"amount\") ?? 0) as number | bigint | string),\n parseU256(\n (getAny(raw, \"net_debit\", \"netDebit\") ?? 0) as number | bigint | string,\n ),\n parseU256(\n (getAny(raw, \"net_credit\", \"netCredit\") ?? 0) as\n | number\n | bigint\n | string,\n ),\n (getAny(raw, \"leaf\") ?? \"\") as string,\n (getAny(raw, \"merkle_root\", \"merkleRoot\") ?? \"\") as string,\n (Array.isArray(proofRaw) ? proofRaw : []).map(String),\n );\n }\n}\n\n/**\n * A prepared ClearingHouse contract call for a participant, including the amount\n * and Merkle proof. Returned by `getClearingSettlementAction` and its helpers.\n */\nexport class ClearingSettlementActionResponse {\n constructor(\n /** ClearingHouse contract address. */\n public contractAddress: string,\n /** Contract function to call (`payNetDebit`, `claimNetCredit`, `markDefaulted`). */\n public functionName: string,\n public action: ClearingSettlementActionKind,\n /** On-chain `bytes32` cycle identifier. */\n public cycleId: string,\n /** Core database cycle identifier. */\n public cycleIdText: string,\n public assetAddress: string,\n /** Participant whose committed Merkle leaf is proven. */\n public participant: string,\n /** Alias for `participant` when `action = mark_defaulted`. */\n public debtor: string | null,\n /** Amount argument for the selected ClearingHouse function. */\n public amount: bigint,\n /** Native value to attach — non-zero only for native-asset debtor payments. */\n public payableValue: bigint,\n public proof: string[],\n ) {}\n\n static fromRpc(\n raw: Record<string, unknown>,\n ): ClearingSettlementActionResponse {\n const proofRaw = getAny(raw, \"proof\") ?? [];\n const debtor = getAny(raw, \"debtor\");\n return new ClearingSettlementActionResponse(\n (getAny(raw, \"contract_address\", \"contractAddress\") ?? \"\") as string,\n (getAny(raw, \"function_name\", \"functionName\") ?? \"\") as string,\n (getAny(raw, \"action\") ??\n \"claim_net_credit\") as ClearingSettlementActionKind,\n (getAny(raw, \"cycle_id\", \"cycleId\") ?? \"\") as string,\n (getAny(raw, \"cycle_id_text\", \"cycleIdText\") ?? \"\") as string,\n (getAny(raw, \"asset_address\", \"assetAddress\") ?? \"\") as string,\n (getAny(raw, \"participant\") ?? \"\") as string,\n typeof debtor === \"string\" ? debtor : null,\n parseU256((getAny(raw, \"amount\") ?? 0) as number | bigint | string),\n parseU256(\n (getAny(raw, \"payable_value\", \"payableValue\") ?? 0) as\n | number\n | bigint\n | string,\n ),\n (Array.isArray(proofRaw) ? proofRaw : []).map(String),\n );\n }\n}\n\nexport class AssetBalanceInfo {\n constructor(\n public userAddress: string,\n public assetAddress: string,\n public total: bigint,\n public locked: bigint,\n public version: number,\n public updatedAt: number,\n ) {}\n\n static fromRpc(raw: Record<string, unknown>): AssetBalanceInfo {\n return new AssetBalanceInfo(\n (getAny(raw, \"user_address\", \"userAddress\") ?? \"\") as string,\n (getAny(raw, \"asset_address\", \"assetAddress\") ?? \"\") as string,\n parseU256((getAny(raw, \"total\") ?? 0) as number | bigint | string),\n parseU256((getAny(raw, \"locked\") ?? 0) as number | bigint | string),\n Number(getAny(raw, \"version\") ?? 0),\n Number(getAny(raw, \"updated_at\", \"updatedAt\") ?? 0),\n );\n }\n}\n\nexport class RecipientPaymentInfo {\n constructor(\n public userAddress: string,\n public recipientAddress: string,\n public txHash: string,\n public amount: bigint,\n public verified: boolean,\n public finalized: boolean,\n public failed: boolean,\n public createdAt: number,\n ) {}\n\n static fromRpc(raw: Record<string, unknown>): RecipientPaymentInfo {\n return new RecipientPaymentInfo(\n (getAny(raw, \"user_address\", \"userAddress\") ?? \"\") as string,\n (getAny(raw, \"recipient_address\", \"recipientAddress\") ?? \"\") as string,\n (getAny(raw, \"tx_hash\", \"txHash\") ?? \"\") as string,\n parseU256((getAny(raw, \"amount\") ?? 0) as number | bigint | string),\n Boolean(getAny(raw, \"verified\")),\n Boolean(getAny(raw, \"finalized\")),\n Boolean(getAny(raw, \"failed\")),\n Number(getAny(raw, \"created_at\", \"createdAt\") ?? 0),\n );\n }\n}\n\nexport interface SupportedTokenInfo {\n symbol: string;\n address: string;\n decimals?: number;\n}\n\nexport class SupportedTokensResponse {\n constructor(\n public chainId: number,\n public tokens: SupportedTokenInfo[],\n ) {}\n\n static fromRpc(raw: Record<string, unknown>): SupportedTokensResponse {\n const tokensRaw = getAny(raw, \"tokens\");\n const tokens: SupportedTokenInfo[] = [];\n if (Array.isArray(tokensRaw)) {\n for (const token of tokensRaw as Record<string, unknown>[]) {\n const address = getAny(token, \"address\");\n if (typeof address !== \"string\" || address.length === 0) continue;\n const decimals = getAny(token, \"decimals\");\n tokens.push({\n symbol: String(getAny(token, \"symbol\") ?? \"\"),\n address,\n decimals:\n decimals === undefined || decimals === null\n ? undefined\n : Number(decimals),\n });\n }\n }\n return new SupportedTokensResponse(\n Number(getAny(raw, \"chain_id\", \"chainId\") ?? 0),\n tokens,\n );\n }\n}\n\nexport class CorePublicParameters {\n constructor(\n public publicKey: Uint8Array,\n public contractAddress: string,\n public ethereumHttpRpcUrl: string,\n public eip712Name: string,\n public eip712Version: string,\n public chainId: number,\n public maxAcceptedGuaranteeVersion: number = 1,\n public acceptedGuaranteeVersions: number[] = [],\n public activeGuaranteeDomainSeparator: string = \"\",\n /** Allowlist of trusted validation registry addresses configured in core (may be empty). */\n public trustedValidationRegistries: string[] = [],\n public validationHashCanonicalizationVersion: string = \"4MICA_VALIDATION_REQUEST_V1\",\n ) {}\n\n static fromRpc(payload: Record<string, unknown>): CorePublicParameters {\n const pkRaw = payload.public_key ?? payload.publicKey;\n const pk =\n typeof pkRaw === \"string\"\n ? toBytes(pkRaw)\n : pkRaw instanceof Uint8Array\n ? pkRaw\n : Array.isArray(pkRaw)\n ? Uint8Array.from(pkRaw as ArrayLike<number>)\n : new Uint8Array();\n const registriesRaw =\n payload.trusted_validation_registries ??\n payload.trustedValidationRegistries;\n const trustedValidationRegistries = Array.isArray(registriesRaw)\n ? (registriesRaw as unknown[]).map(String)\n : [];\n return new CorePublicParameters(\n pk,\n String(payload.contract_address ?? payload.contractAddress ?? \"\"),\n String(payload.ethereum_http_rpc_url ?? payload.ethereumHttpRpcUrl ?? \"\"),\n (payload.eip712_name ?? payload.eip712Name ?? \"4Mica\") as string,\n (payload.eip712_version ?? payload.eip712Version ?? \"1\") as string,\n Number(payload.chain_id ?? payload.chainId),\n Number(\n payload.max_accepted_guarantee_version ??\n payload.maxAcceptedGuaranteeVersion ??\n 1,\n ),\n Array.isArray(\n payload.accepted_guarantee_versions ??\n payload.acceptedGuaranteeVersions,\n )\n ? (\n (payload.accepted_guarantee_versions ??\n payload.acceptedGuaranteeVersions) as unknown[]\n ).map((version) => Number(version))\n : [],\n String(\n payload.active_guarantee_domain_separator ??\n payload.activeGuaranteeDomainSeparator ??\n \"\",\n ),\n trustedValidationRegistries,\n String(\n payload.validation_hash_canonicalization_version ??\n payload.validationHashCanonicalizationVersion ??\n \"4MICA_VALIDATION_REQUEST_V1\",\n ),\n );\n }\n}\n","import { SigningError } from \"@/errors\";\nimport {\n type PaymentGuaranteeRequestClaims,\n PaymentGuaranteeRequestClaimsV2,\n type PaymentSignature,\n type SigningScheme,\n} from \"@/models\";\nimport type {\n PaymentPayload,\n PaymentPayloadClaims,\n PaymentPayloadClaimsV2,\n} from \"@/payment/models\";\nimport { serializeU256 } from \"@/utils\";\n\nexport type {\n PaymentPayload,\n PaymentPayloadClaims,\n PaymentPayloadClaimsV2,\n} from \"@/payment/models\";\n\n/**\n * Serialize V1 payment claims to the wire format expected by the core RPC.\n *\n * @param claims - V1 payment guarantee request claims.\n * @returns JSON-serialisable object with snake_case keys and hex-encoded `uint256` fields.\n */\nexport function serializePaymentClaims(\n claims: PaymentGuaranteeRequestClaims,\n): PaymentPayloadClaims {\n return {\n version: \"v1\",\n user_address: claims.userAddress.toLowerCase(),\n recipient_address: claims.recipientAddress.toLowerCase(),\n req_id: serializeU256(claims.reqId),\n amount: serializeU256(claims.amount),\n asset_address: claims.assetAddress.toLowerCase(),\n timestamp: claims.timestamp,\n };\n}\n\n/**\n * Serialize V2 payment claims to the wire format expected by the core RPC.\n *\n * Extends the V1 serialisation with the nine additional validation policy fields.\n *\n * @param claims - V2 payment guarantee request claims with validation policy.\n * @returns JSON-serialisable object with snake_case keys and hex-encoded `uint256` fields.\n */\nexport function serializePaymentClaimsV2(\n claims: PaymentGuaranteeRequestClaimsV2,\n): PaymentPayloadClaimsV2 {\n return {\n ...serializePaymentClaims(claims),\n version: \"v2\",\n validation_registry_address: claims.validationRegistryAddress.toLowerCase(),\n validation_request_hash: claims.validationRequestHash.toLowerCase(),\n validation_chain_id: claims.validationChainId,\n validator_address: claims.validatorAddress.toLowerCase(),\n validator_agent_id: serializeU256(claims.validatorAgentId),\n min_validation_score: claims.minValidationScore,\n validation_subject_hash: claims.validationSubjectHash.toLowerCase(),\n job_hash: claims.jobHash.toLowerCase(),\n required_validation_tag: claims.requiredValidationTag,\n };\n}\n\n/**\n * Build a {@link PaymentPayload} from V2 claims and a {@link PaymentSignature}.\n *\n * @param claims - V2 payment guarantee request claims.\n * @param signature - Pre-built signature object (includes the scheme).\n */\nexport function buildPaymentPayload(\n claims: PaymentGuaranteeRequestClaimsV2,\n signature: PaymentSignature,\n): PaymentPayload;\n/**\n * Build a {@link PaymentPayload} from V2 claims, a raw signature hex string, and a scheme.\n *\n * @param claims - V2 payment guarantee request claims.\n * @param signature - 65-byte ECDSA signature as a `0x`-prefixed hex string.\n * @param scheme - Signing scheme used to produce the signature.\n */\nexport function buildPaymentPayload(\n claims: PaymentGuaranteeRequestClaimsV2,\n signature: string,\n scheme: SigningScheme,\n): PaymentPayload;\n/**\n * Build a {@link PaymentPayload} from V1 claims and a {@link PaymentSignature}.\n *\n * @param claims - V1 payment guarantee request claims.\n * @param signature - Pre-built signature object (includes the scheme).\n */\nexport function buildPaymentPayload(\n claims: PaymentGuaranteeRequestClaims,\n signature: PaymentSignature,\n): PaymentPayload;\n/**\n * Build a {@link PaymentPayload} from V1 claims, a raw signature hex string, and a scheme.\n *\n * @param claims - V1 payment guarantee request claims.\n * @param signature - 65-byte ECDSA signature as a `0x`-prefixed hex string.\n * @param scheme - Signing scheme used to produce the signature.\n * @throws {@link SigningError} if `signature` is a string but no `scheme` is provided.\n */\nexport function buildPaymentPayload(\n claims: PaymentGuaranteeRequestClaims,\n signature: string,\n scheme: SigningScheme,\n): PaymentPayload;\nexport function buildPaymentPayload(\n claims: PaymentGuaranteeRequestClaims | PaymentGuaranteeRequestClaimsV2,\n signature: PaymentSignature | string,\n scheme?: SigningScheme,\n): PaymentPayload {\n const signed =\n typeof signature === \"string\"\n ? (() => {\n if (!scheme) {\n throw new SigningError(\n \"scheme is required when providing a signature string\",\n );\n }\n return { signature, scheme };\n })()\n : signature;\n const serialized =\n claims instanceof PaymentGuaranteeRequestClaimsV2\n ? serializePaymentClaimsV2(claims)\n : serializePaymentClaims(claims);\n return {\n claims: serialized,\n signature: signed.signature,\n scheme: signed.scheme,\n };\n}\n","import type { Hex } from \"viem\";\nimport type { Client } from \"@/client/index\";\nimport type { TxReceiptWaitOptions } from \"@/contract\";\nimport { VerificationError } from \"@/errors\";\nimport { decodeGuaranteeClaims } from \"@/guarantee\";\nimport {\n AssetBalanceInfo,\n type BLSCert,\n ClearingParticipantProof,\n ClearingSettlementActionResponse,\n type PaymentGuaranteeClaims,\n type PaymentGuaranteeRequestClaims,\n type PaymentGuaranteeRequestClaimsV2,\n RecipientPaymentInfo,\n type SigningScheme,\n} from \"@/models\";\nimport { buildPaymentPayload } from \"@/payment\";\nimport { ensureHexPrefix, normalizeAddress } from \"@/utils\";\n\n/**\n * Recipient-side operations: guarantee issuance/verification and cycle-based\n * clearing settlement.\n */\nexport class RecipientClient {\n constructor(private client: Client) {}\n\n private get recipientAddress(): string {\n return normalizeAddress(this.client.signer.signer.address);\n }\n\n get guaranteeDomain(): string {\n return this.client.guaranteeDomain;\n }\n\n /**\n * Issue a BLS-signed payment guarantee certificate via the core RPC.\n *\n * The returned {@link BLSCert} can be stored and later settled via the\n * cycle-clearing flow ({@link claimNetCredit}).\n *\n * @param claims - Signed payment claims (V1 or V2).\n * @param signature - ECDSA signature hex string from the payer.\n * @param scheme - Signing scheme used to produce the signature.\n * @returns BLS certificate with ABI-encoded claims and BLS signature.\n * @throws {@link RpcError} if the core service rejects the request.\n */\n async issuePaymentGuarantee(\n claims: PaymentGuaranteeRequestClaims | PaymentGuaranteeRequestClaimsV2,\n signature: string,\n scheme: SigningScheme,\n ): Promise<BLSCert> {\n const payload = buildPaymentPayload(claims, signature, scheme);\n const cert = await this.client.rpc.issueGuarantee(payload);\n const record = cert as Record<string, unknown>;\n const certClaims = typeof record.claims === \"string\" ? record.claims : \"\";\n const signatureOut =\n typeof record.signature === \"string\" ? record.signature : \"\";\n return { claims: certClaims, signature: signatureOut };\n }\n\n /**\n * Verify and decode a BLS guarantee certificate.\n *\n * Decodes the ABI-encoded claims and validates the domain separator against\n * the on-chain configuration. For V2 certificates, the active V2 domain is\n * fetched from the contract and verified to be enabled.\n *\n * @param cert - BLS certificate (hex-encoded claims + hex-encoded signature).\n * @returns Decoded {@link PaymentGuaranteeClaims}, including validation policy for V2.\n * @throws {@link VerificationError} on domain mismatch, invalid length, or disabled version.\n */\n async verifyPaymentGuarantee(cert: BLSCert): Promise<PaymentGuaranteeClaims> {\n const claims = decodeGuaranteeClaims(cert.claims);\n let expectedDomain: string;\n if (claims.version === 2) {\n const { domainSeparator, enabled } =\n await this.client.gateway.getGuaranteeVersionConfig(2);\n if (!enabled) {\n throw new VerificationError(\n \"guarantee version 2 is not enabled on-chain\",\n );\n }\n expectedDomain = domainSeparator;\n } else {\n expectedDomain = this.guaranteeDomain;\n }\n const domainHex = expectedDomain.startsWith(\"0x\")\n ? expectedDomain.slice(2)\n : Buffer.from(expectedDomain).toString(\"hex\");\n if (domainHex.length !== 64) {\n throw new VerificationError(\n `guarantee domain separator has invalid length: expected 32 bytes, got ${domainHex.length / 2}`,\n );\n }\n const claimsHex = Buffer.from(claims.domain).toString(\"hex\");\n if (claimsHex !== domainHex) {\n throw new VerificationError(\"guarantee domain mismatch\");\n }\n return claims;\n }\n\n /**\n * Fetch this recipient's committed position + Merkle proof for a cycle.\n *\n * @param cycleId - On-chain `bytes32` cycle identifier.\n */\n async getClearingParticipantProof(\n cycleId: string,\n ): Promise<ClearingParticipantProof> {\n const raw = await this.client.rpc.getClearingParticipantProof(\n cycleId,\n this.recipientAddress,\n );\n return ClearingParticipantProof.fromRpc(raw);\n }\n\n /**\n * Fetch the prepared `claimNetCredit` action for this recipient in a cycle.\n *\n * @param cycleId - On-chain `bytes32` cycle identifier.\n */\n async getClearingClaimNetCreditAction(\n cycleId: string,\n ): Promise<ClearingSettlementActionResponse> {\n const raw = await this.client.rpc.getClearingClaimNetCreditAction(\n cycleId,\n this.recipientAddress,\n );\n return ClearingSettlementActionResponse.fromRpc(raw);\n }\n\n /**\n * Claim this recipient's committed net credit for a settlement cycle on-chain.\n *\n * Fetches the prepared clearing action (contract address, amount, and Merkle\n * proof) from core, then submits `claimNetCredit` to the ClearingHouse.\n *\n * @param cycleId - On-chain `bytes32` cycle identifier.\n * @param waitOptions - Optional timeout/polling overrides for receipt polling.\n * @throws {@link ContractError} if the contract call fails.\n */\n async claimNetCredit(cycleId: string, waitOptions?: TxReceiptWaitOptions) {\n const action = await this.getClearingClaimNetCreditAction(cycleId);\n return this.client.gateway.claimNetCredit(\n action.contractAddress,\n ensureHexPrefix(action.cycleId) as Hex,\n action.amount,\n action.proof.map((p) => ensureHexPrefix(p) as Hex),\n waitOptions,\n );\n }\n\n /** List all on-chain payments received by this recipient. */\n async listRecipientPayments(): Promise<RecipientPaymentInfo[]> {\n const payments = await this.client.rpc.listRecipientPayments(\n this.recipientAddress,\n );\n return payments.map((p) => RecipientPaymentInfo.fromRpc(p));\n }\n\n /**\n * Fetch the collateral balance a user has locked for a specific asset.\n *\n * @param userAddress - Address of the payer.\n * @param assetAddress - ERC20 token address, or zero address for ETH.\n * @returns Balance info, or `null` if no record exists.\n */\n async getUserAssetBalance(\n userAddress: string,\n assetAddress: string,\n ): Promise<AssetBalanceInfo | null> {\n const balance = await this.client.rpc.getUserAssetBalance(\n userAddress,\n assetAddress,\n );\n return balance ? AssetBalanceInfo.fromRpc(balance) : null;\n }\n}\n","import type { Hex } from \"viem\";\nimport type { Client } from \"@/client/index\";\nimport type { TxReceiptWaitOptions } from \"@/contract\";\nimport {\n ClearingSettlementActionResponse,\n type PaymentGuaranteeRequestClaims,\n type PaymentGuaranteeRequestClaimsV2,\n type PaymentSignature,\n SigningScheme,\n type UserInfo,\n} from \"@/models\";\nimport { ensureHexPrefix, normalizeAddress, parseU256 } from \"@/utils\";\n\n/** Payer-side operations: collateral management, payment signing, withdrawals. */\nexport class UserClient {\n constructor(private client: Client) {}\n\n /** 32-byte V1 guarantee domain separator (hex-prefixed). */\n get guaranteeDomain(): string {\n return this.client.guaranteeDomain;\n }\n\n private get userAddress(): string {\n return normalizeAddress(this.client.signer.signer.address);\n }\n\n /**\n * Approve the Core4Mica contract to spend an ERC20 token on your behalf.\n * Call this before {@link deposit} for ERC20 deposits.\n *\n * @param token - ERC20 token contract address.\n * @param amount - Amount to approve (in token base units).\n * @param waitOptions - Optional timeout/polling overrides for receipt polling.\n */\n async approveErc20(\n token: string,\n amount: number | bigint | string,\n waitOptions?: TxReceiptWaitOptions,\n ) {\n return this.client.gateway.approveErc20(token, amount, waitOptions);\n }\n\n /**\n * Deposit collateral into the Core4Mica contract.\n *\n * @param amount - Amount to deposit (in wei for ETH, base units for ERC20).\n * @param erc20Token - ERC20 token address. Omit to deposit ETH.\n * Call {@link approveErc20} first when depositing ERC20.\n * @param waitOptions - Optional timeout/polling overrides.\n */\n async deposit(\n amount: number | bigint | string,\n erc20Token?: string,\n waitOptions?: TxReceiptWaitOptions,\n ) {\n return this.client.gateway.deposit(amount, erc20Token, waitOptions);\n }\n\n /**\n * Fetch all asset positions for the current signer.\n *\n * @returns Array of positions — one entry per deposited asset, including\n * locked collateral and any pending withdrawal.\n * @throws {@link ContractError} if the contract call fails.\n */\n async getUser(opts?: { blockNumber?: bigint }): Promise<UserInfo[]> {\n const assets = await this.client.gateway.getUserAssets(opts);\n return assets.map(\n (a) =>\n ({\n asset: a.asset,\n collateral: parseU256(a.collateral),\n withdrawalRequestAmount: parseU256(a.withdrawalRequestAmount),\n withdrawalRequestTimestamp: Number(a.withdrawalRequestTimestamp),\n }) satisfies UserInfo,\n );\n }\n\n /**\n * Sign a payment guarantee request with the configured signer.\n *\n * @param claims - V1 or V2 payment claims. Build V1 with\n * {@link PaymentGuaranteeRequestClaims.new}; build V2 with\n * {@link PaymentGuaranteeRequestClaimsV2} (requires validation policy fields).\n * @param scheme - Signing scheme. Defaults to `EIP712`.\n * Use `EIP191` for wallets that do not support typed data.\n * @returns 65-byte ECDSA signature plus the scheme used.\n * @throws {@link SigningError} if the signer address does not match `claims.userAddress`\n * or the signing scheme is not supported by the account.\n */\n async signPayment(\n claims: PaymentGuaranteeRequestClaims | PaymentGuaranteeRequestClaimsV2,\n scheme: SigningScheme = SigningScheme.EIP712,\n ): Promise<PaymentSignature> {\n return this.client.signer.signRequest(this.client.params, claims, scheme);\n }\n\n /**\n * Fetch the prepared `payNetDebit` action for the current signer in a cycle.\n *\n * @param cycleId - On-chain `bytes32` cycle identifier.\n */\n async getClearingPayNetDebitAction(\n cycleId: string,\n ): Promise<ClearingSettlementActionResponse> {\n const raw = await this.client.rpc.getClearingPayNetDebitAction(\n cycleId,\n this.userAddress,\n );\n return ClearingSettlementActionResponse.fromRpc(raw);\n }\n\n /**\n * Pay the current signer's committed net debit for a settlement cycle on-chain.\n *\n * Fetches the prepared clearing action (contract address, amount, native value,\n * and Merkle proof) from core, then submits `payNetDebit` to the ClearingHouse.\n *\n * @param cycleId - On-chain `bytes32` cycle identifier.\n * @param waitOptions - Optional timeout/polling overrides.\n * @throws {@link ContractError} if the contract call fails.\n */\n async payNetDebit(cycleId: string, waitOptions?: TxReceiptWaitOptions) {\n const action = await this.getClearingPayNetDebitAction(cycleId);\n return this.client.gateway.payNetDebit(\n action.contractAddress,\n ensureHexPrefix(action.cycleId) as Hex,\n action.amount,\n action.proof.map((p) => ensureHexPrefix(p) as Hex),\n action.payableValue,\n waitOptions,\n );\n }\n\n /**\n * Fetch the prepared `markDefaulted` action against a debtor in a cycle.\n *\n * @param cycleId - On-chain `bytes32` cycle identifier.\n * @param debtor - Address of the defaulted debtor.\n */\n async getClearingMarkDefaultedAction(\n cycleId: string,\n debtor: string,\n ): Promise<ClearingSettlementActionResponse> {\n const raw = await this.client.rpc.getClearingMarkDefaultedAction(\n cycleId,\n normalizeAddress(debtor),\n );\n return ClearingSettlementActionResponse.fromRpc(raw);\n }\n\n /**\n * Mark a debtor defaulted after the clearing payment finality deadline.\n *\n * @param cycleId - On-chain `bytes32` cycle identifier.\n * @param debtor - Address of the defaulted debtor.\n * @param waitOptions - Optional timeout/polling overrides.\n * @throws {@link ContractError} if the contract call fails.\n */\n async markDefaulted(\n cycleId: string,\n debtor: string,\n waitOptions?: TxReceiptWaitOptions,\n ) {\n const action = await this.getClearingMarkDefaultedAction(cycleId, debtor);\n return this.client.gateway.markDefaulted(\n action.contractAddress,\n ensureHexPrefix(action.cycleId) as Hex,\n normalizeAddress(action.debtor ?? action.participant) as Hex,\n action.amount,\n action.proof.map((p) => ensureHexPrefix(p) as Hex),\n waitOptions,\n );\n }\n\n /**\n * Initiate a collateral withdrawal request. The withdrawal is subject to an\n * on-chain timelock before it can be finalised.\n *\n * @param amount - Amount to withdraw (base units / wei).\n * @param erc20Token - ERC20 token address. Omit to withdraw ETH.\n * @param waitOptions - Optional timeout/polling overrides.\n */\n async requestWithdrawal(\n amount: number | bigint | string,\n erc20Token?: string,\n waitOptions?: TxReceiptWaitOptions,\n ) {\n return this.client.gateway.requestWithdrawal(\n amount,\n erc20Token,\n waitOptions,\n );\n }\n\n /**\n * Cancel a pending withdrawal request before the timelock expires.\n *\n * @param erc20Token - ERC20 token address. Omit to cancel an ETH withdrawal.\n * @param waitOptions - Optional timeout/polling overrides.\n */\n async cancelWithdrawal(\n erc20Token?: string,\n waitOptions?: TxReceiptWaitOptions,\n ) {\n return this.client.gateway.cancelWithdrawal(erc20Token, waitOptions);\n }\n\n /**\n * Finalise a withdrawal after the timelock has elapsed.\n *\n * @param erc20Token - ERC20 token address. Omit to finalise an ETH withdrawal.\n * @param waitOptions - Optional timeout/polling overrides.\n */\n async finalizeWithdrawal(\n erc20Token?: string,\n waitOptions?: TxReceiptWaitOptions,\n ) {\n return this.client.gateway.finalizeWithdrawal(erc20Token, waitOptions);\n }\n}\n","/**\n * Minimal ABI for the 4Mica ClearingHouse settlement functions.\n *\n * A settlement cycle nets each participant's obligations into a single net-debit\n * or net-credit committed to an on-chain Merkle root. Participants settle by\n * submitting their leaf + proof to one of these functions. The contract address\n * and proof are provided by core via `getClearingSettlementAction`.\n */\nexport const clearingHouseAbi = [\n {\n type: \"function\",\n name: \"payNetDebit\",\n stateMutability: \"payable\",\n inputs: [\n { name: \"cycleId\", type: \"bytes32\" },\n { name: \"netDebit\", type: \"uint256\" },\n { name: \"proof\", type: \"bytes32[]\" },\n ],\n outputs: [],\n },\n {\n type: \"function\",\n name: \"claimNetCredit\",\n stateMutability: \"nonpayable\",\n inputs: [\n { name: \"cycleId\", type: \"bytes32\" },\n { name: \"netCredit\", type: \"uint256\" },\n { name: \"proof\", type: \"bytes32[]\" },\n ],\n outputs: [],\n },\n {\n type: \"function\",\n name: \"markDefaulted\",\n stateMutability: \"nonpayable\",\n inputs: [\n { name: \"cycleId\", type: \"bytes32\" },\n { name: \"debtor\", type: \"address\" },\n { name: \"netDebit\", type: \"uint256\" },\n { name: \"proof\", type: \"bytes32[]\" },\n ],\n outputs: [],\n },\n] as const;\n","import type { Abi } from \"viem\";\n\nexport const core4micaAbi = [\n {\n type: \"constructor\",\n inputs: [\n {\n name: \"manager\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"verificationKey\",\n type: \"tuple\",\n internalType: \"struct BLS.G1Point\",\n components: [\n {\n name: \"x_a\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"x_b\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"y_a\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"y_b\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n },\n {\n name: \"stablecoins_\",\n type: \"address[]\",\n internalType: \"address[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"fallback\",\n stateMutability: \"payable\",\n },\n {\n type: \"receive\",\n stateMutability: \"payable\",\n },\n {\n type: \"function\",\n name: \"GUARANTEE_VERIFICATION_KEY\",\n inputs: [],\n outputs: [\n {\n name: \"x_a\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"x_b\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"y_a\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"y_b\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"INITIAL_GUARANTEE_VERSION\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint64\",\n internalType: \"uint64\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"MAX_YIELD_FEE_BPS\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"RECONCILIATION_DUST_TOLERANCE_SCALED\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"aaveAddressesProvider\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n internalType: \"contract IPoolAddressesProvider\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"authority\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"cancelWithdrawal\",\n inputs: [],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"cancelWithdrawal\",\n inputs: [\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"claimProtocolYield\",\n inputs: [\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"to\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"amount\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"claimSurplusATokens\",\n inputs: [\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"to\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"scaledAmount\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"collateral\",\n inputs: [\n {\n name: \"userAddr\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"collateral\",\n inputs: [\n {\n name: \"userAddr\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"configureAave\",\n inputs: [\n {\n name: \"poolAddressesProvider\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"aTokens\",\n type: \"address[]\",\n internalType: \"address[]\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"configureGuaranteeVersion\",\n inputs: [\n {\n name: \"version\",\n type: \"uint64\",\n internalType: \"uint64\",\n },\n {\n name: \"verificationKey\",\n type: \"tuple\",\n internalType: \"struct BLS.G1Point\",\n components: [\n {\n name: \"x_a\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"x_b\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"y_a\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"y_b\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n },\n {\n name: \"domainSeparator\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"decoder\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"enabled\",\n type: \"bool\",\n internalType: \"bool\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"contractScaledATokenBalance\",\n inputs: [\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"deposit\",\n inputs: [],\n outputs: [],\n stateMutability: \"payable\",\n },\n {\n type: \"function\",\n name: \"depositStablecoin\",\n inputs: [\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"amount\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"finalizeWithdrawal\",\n inputs: [\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"finalizeWithdrawal\",\n inputs: [],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"getERC20Tokens\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address[]\",\n internalType: \"address[]\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"getGuaranteeVersionConfig\",\n inputs: [\n {\n name: \"version\",\n type: \"uint64\",\n internalType: \"uint64\",\n },\n ],\n outputs: [\n {\n name: \"verificationKey\",\n type: \"tuple\",\n internalType: \"struct BLS.G1Point\",\n components: [\n {\n name: \"x_a\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"x_b\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"y_a\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"y_b\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n },\n {\n name: \"domainSeparator\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"decoder\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"enabled\",\n type: \"bool\",\n internalType: \"bool\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"getPaymentStatus\",\n inputs: [\n {\n name: \"tabId\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"paid\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"remunerated\",\n type: \"bool\",\n internalType: \"bool\",\n },\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"getUser\",\n inputs: [\n {\n name: \"userAddr\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [\n {\n name: \"assetCollateral\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"withdrawalRequestTimestamp\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"withdrawalRequestAmount\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"getUser\",\n inputs: [\n {\n name: \"userAddr\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [\n {\n name: \"assetCollateral\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"withdrawalRequestTimestamp\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"withdrawalRequestAmount\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"getUserAllAssets\",\n inputs: [\n {\n name: \"userAddr\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"tuple[]\",\n internalType: \"struct Core4Mica.UserAssetInfo[]\",\n components: [\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"collateral\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"withdrawalRequestTimestamp\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"withdrawalRequestAmount\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"grossYield\",\n inputs: [\n {\n name: \"user\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"guaranteeCapacity\",\n inputs: [\n {\n name: \"user\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"guaranteeDomainSeparator\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"isConsumingScheduledOp\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"bytes4\",\n internalType: \"bytes4\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"pause\",\n inputs: [],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"paused\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n internalType: \"bool\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"payTabInERC20Token\",\n inputs: [\n {\n name: \"tabId\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"amount\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"recipient\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"payments\",\n inputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"paid\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"remunerated\",\n type: \"bool\",\n internalType: \"bool\",\n },\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"principalBalance\",\n inputs: [\n {\n name: \"user\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"protocolScaledBalance\",\n inputs: [\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"protocolYieldShare\",\n inputs: [\n {\n name: \"user\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"reconciliationDustToleranceScaled\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"pure\",\n },\n {\n type: \"function\",\n name: \"recordPayment\",\n inputs: [\n {\n name: \"tabId\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"amount\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"remunerate\",\n inputs: [\n {\n name: \"guaranteeData\",\n type: \"bytes\",\n internalType: \"bytes\",\n },\n {\n name: \"signature\",\n type: \"tuple\",\n internalType: \"struct BLS.G2Point\",\n components: [\n {\n name: \"x_c0_a\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"x_c0_b\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"x_c1_a\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"x_c1_b\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"y_c0_a\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"y_c0_b\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"y_c1_a\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"y_c1_b\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"remunerationGracePeriod\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"requestWithdrawal\",\n inputs: [\n {\n name: \"amount\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"requestWithdrawal\",\n inputs: [\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"amount\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"setAuthority\",\n inputs: [\n {\n name: \"newAuthority\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"setGuaranteeVerificationKey\",\n inputs: [\n {\n name: \"verificationKey\",\n type: \"tuple\",\n internalType: \"struct BLS.G1Point\",\n components: [\n {\n name: \"x_a\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"x_b\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"y_a\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"y_b\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"setRemunerationGracePeriod\",\n inputs: [\n {\n name: \"_gracePeriod\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"setSynchronizationDelay\",\n inputs: [\n {\n name: \"_synchronizationDelay\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"setTabExpirationTime\",\n inputs: [\n {\n name: \"_expirationTime\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"setTimingParameters\",\n inputs: [\n {\n name: \"_remunerationGracePeriod\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"_tabExpirationTime\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"_synchronizationDelay\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"_withdrawalGracePeriod\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"setWithdrawalGracePeriod\",\n inputs: [\n {\n name: \"_gracePeriod\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"setYieldFeeBps\",\n inputs: [\n {\n name: \"feeBps\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"stablecoinAToken\",\n inputs: [\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"surplusScaledBalance\",\n inputs: [\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"synchronizationDelay\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"tabExpirationTime\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"totalUserScaledBalance\",\n inputs: [\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"unpause\",\n inputs: [],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"userNetYield\",\n inputs: [\n {\n name: \"user\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"verifyAndDecodeGuarantee\",\n inputs: [\n {\n name: \"guarantee\",\n type: \"bytes\",\n internalType: \"bytes\",\n },\n {\n name: \"signature\",\n type: \"tuple\",\n internalType: \"struct BLS.G2Point\",\n components: [\n {\n name: \"x_c0_a\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"x_c0_b\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"x_c1_a\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"x_c1_b\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"y_c0_a\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"y_c0_b\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"y_c1_a\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"y_c1_b\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"tuple\",\n internalType: \"struct Guarantee\",\n components: [\n {\n name: \"domain\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"tabId\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"reqId\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"client\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"recipient\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"amount\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"totalAmount\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"timestamp\",\n type: \"uint64\",\n internalType: \"uint64\",\n },\n {\n name: \"version\",\n type: \"uint64\",\n internalType: \"uint64\",\n },\n ],\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"withdrawableBalance\",\n inputs: [\n {\n name: \"user\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"withdrawalGracePeriod\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"withdrawalRequests\",\n inputs: [\n {\n name: \"\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n outputs: [\n {\n name: \"timestamp\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"amount\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"yieldFeeBps\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"event\",\n name: \"AaveConfigured\",\n inputs: [\n {\n name: \"provider\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"pool\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"AuthorityUpdated\",\n inputs: [\n {\n name: \"authority\",\n type: \"address\",\n indexed: false,\n internalType: \"address\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"CollateralDeposited\",\n inputs: [\n {\n name: \"user\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"asset\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"amount\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"CollateralWithdrawn\",\n inputs: [\n {\n name: \"user\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"asset\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"amount\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"GuaranteeVersionUpdated\",\n inputs: [\n {\n name: \"version\",\n type: \"uint64\",\n indexed: true,\n internalType: \"uint64\",\n },\n {\n name: \"verificationKey\",\n type: \"tuple\",\n indexed: false,\n internalType: \"struct BLS.G1Point\",\n components: [\n {\n name: \"x_a\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"x_b\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"y_a\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"y_b\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n },\n {\n name: \"domainSeparator\",\n type: \"bytes32\",\n indexed: false,\n internalType: \"bytes32\",\n },\n {\n name: \"decoder\",\n type: \"address\",\n indexed: false,\n internalType: \"address\",\n },\n {\n name: \"enabled\",\n type: \"bool\",\n indexed: false,\n internalType: \"bool\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"Paused\",\n inputs: [\n {\n name: \"account\",\n type: \"address\",\n indexed: false,\n internalType: \"address\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"PaymentRecorded\",\n inputs: [\n {\n name: \"tabId\",\n type: \"uint256\",\n indexed: true,\n internalType: \"uint256\",\n },\n {\n name: \"asset\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"amount\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"ProtocolYieldClaimed\",\n inputs: [\n {\n name: \"asset\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"to\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"amount\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"RecipientRemunerated\",\n inputs: [\n {\n name: \"tabId\",\n type: \"uint256\",\n indexed: true,\n internalType: \"uint256\",\n },\n {\n name: \"asset\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"amount\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"RemunerationGracePeriodUpdated\",\n inputs: [\n {\n name: \"newGracePeriod\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"StablecoinAssetUpdated\",\n inputs: [\n {\n name: \"asset\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"enabled\",\n type: \"bool\",\n indexed: false,\n internalType: \"bool\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"SurplusATokensClaimed\",\n inputs: [\n {\n name: \"asset\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"to\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"scaledAmount\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n {\n name: \"nominalAmount\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"SynchronizationDelayUpdated\",\n inputs: [\n {\n name: \"newExpirationTime\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"TabExpirationTimeUpdated\",\n inputs: [\n {\n name: \"newExpirationTime\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"TabPaid\",\n inputs: [\n {\n name: \"tabId\",\n type: \"uint256\",\n indexed: true,\n internalType: \"uint256\",\n },\n {\n name: \"asset\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"user\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"recipient\",\n type: \"address\",\n indexed: false,\n internalType: \"address\",\n },\n {\n name: \"amount\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"Unpaused\",\n inputs: [\n {\n name: \"account\",\n type: \"address\",\n indexed: false,\n internalType: \"address\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"VerificationKeyUpdated\",\n inputs: [\n {\n name: \"newVerificationKey\",\n type: \"tuple\",\n indexed: false,\n internalType: \"struct BLS.G1Point\",\n components: [\n {\n name: \"x_a\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"x_b\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"y_a\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n {\n name: \"y_b\",\n type: \"bytes32\",\n internalType: \"bytes32\",\n },\n ],\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"WithdrawalCanceled\",\n inputs: [\n {\n name: \"user\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"asset\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"WithdrawalGracePeriodUpdated\",\n inputs: [\n {\n name: \"newGracePeriod\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"WithdrawalRequested\",\n inputs: [\n {\n name: \"user\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"asset\",\n type: \"address\",\n indexed: true,\n internalType: \"address\",\n },\n {\n name: \"when\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n {\n name: \"amount\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"event\",\n name: \"YieldFeeBpsUpdated\",\n inputs: [\n {\n name: \"oldFeeBps\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n {\n name: \"newFeeBps\",\n type: \"uint256\",\n indexed: false,\n internalType: \"uint256\",\n },\n ],\n anonymous: false,\n },\n {\n type: \"error\",\n name: \"AaveNotConfigured\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"AaveProviderReconfigurationBlocked\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"AccessManagedInvalidAuthority\",\n inputs: [\n {\n name: \"authority\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"AccessManagedRequiredDelay\",\n inputs: [\n {\n name: \"caller\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"delay\",\n type: \"uint32\",\n internalType: \"uint32\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"AccessManagedUnauthorized\",\n inputs: [\n {\n name: \"caller\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"AmountZero\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"DirectTransferNotAllowed\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"DoubleSpendingDetected\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"EnforcedPause\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"ExpectedPause\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"FeeTooHigh\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"GracePeriodNotElapsed\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"IllegalValue\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"InsufficientAvailable\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"InvalidAToken\",\n inputs: [\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"aToken\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"InvalidAsset\",\n inputs: [\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"InvalidGuaranteeDomain\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"InvalidRecipient\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"InvalidSignature\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"MissingGuaranteeDecoder\",\n inputs: [\n {\n name: \"version\",\n type: \"uint64\",\n internalType: \"uint64\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"NoWithdrawalRequested\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"ReconciliationLoss\",\n inputs: [\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"tracked\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"observed\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"ReentrancyGuardReentrantCall\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"SafeERC20FailedOperation\",\n inputs: [\n {\n name: \"token\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"StablecoinWithdrawShortfall\",\n inputs: [\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"requested\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"actual\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"SurplusClaimExceedsAvailable\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"TabAlreadyPaid\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"TabExpired\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"TabNotYetOverdue\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"TabPreviouslyRemunerated\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"TransferFailed\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"TreasuryClaimExceedsAvailable\",\n inputs: [],\n },\n {\n type: \"error\",\n name: \"UnsupportedAsset\",\n inputs: [\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"UnsupportedGuaranteeVersion\",\n inputs: [\n {\n name: \"version\",\n type: \"uint64\",\n internalType: \"uint64\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"UnsupportedTreasuryAsset\",\n inputs: [\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"UserScaledBalanceUnderflow\",\n inputs: [\n {\n name: \"asset\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"user\",\n type: \"address\",\n internalType: \"address\",\n },\n {\n name: \"deduction\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n {\n name: \"balance\",\n type: \"uint256\",\n internalType: \"uint256\",\n },\n ],\n },\n {\n type: \"error\",\n name: \"ZeroAddress\",\n inputs: [],\n },\n] as const satisfies Abi;\n","import type { Chain } from \"viem\";\nimport {\n base,\n baseSepolia,\n mainnet,\n polygon,\n polygonAmoy,\n sepolia,\n} from \"viem/chains\";\n\nconst CHAINS: Record<number, Chain> = {\n 1: mainnet,\n 11155111: sepolia,\n 8453: base,\n 84532: baseSepolia,\n 137: polygon,\n 80002: polygonAmoy,\n};\n\nexport function getChain(chainId: number, rpcUrl: string): Chain {\n const chain = CHAINS[chainId];\n if (chain) return chain;\n\n return {\n id: chainId,\n name: `local-${chainId}`,\n nativeCurrency: { name: \"Ether\", symbol: \"ETH\", decimals: 18 },\n rpcUrls: {\n default: { http: [rpcUrl] },\n public: { http: [rpcUrl] },\n },\n };\n}\n","import {\n type Account,\n createPublicClient,\n createWalletClient,\n erc20Abi,\n getContract,\n type Hex,\n http,\n parseGwei,\n} from \"viem\";\nimport { clearingHouseAbi } from \"@/abi/clearinghouse\";\nimport { core4micaAbi } from \"@/abi/core4mica\";\nimport { getChain } from \"@/chain\";\nimport type {\n ClearingHouseContract,\n CoreContract,\n Erc20Contract,\n TPublicClient,\n TWalletClient,\n TxReceiptWaitOptions,\n} from \"@/contract/models\";\nimport { ContractError } from \"@/errors\";\nimport { parseU256 } from \"@/utils\";\n\nexport type { TxReceiptWaitOptions } from \"@/contract/models\";\n\n/**\n * Extract a human-readable message from a viem contract error, falling back\n * to the raw message if no structured reason is available.\n */\nfunction wrapViemError(error: unknown, context: string): ContractError {\n if (error instanceof ContractError) return error;\n if (error instanceof Error) {\n const e = error as unknown as Record<string, unknown>;\n const cause = e[\"cause\"] as Record<string, unknown> | undefined;\n const reason =\n cause?.[\"reason\"] ??\n cause?.[\"message\"] ??\n e[\"shortMessage\"] ??\n error.message;\n const details = e[\"details\"] ?? cause?.[\"details\"];\n const suffix = details ? ` (${details})` : \"\";\n return new ContractError(`${context}: ${reason}${suffix}`);\n }\n return new ContractError(`${context}: ${String(error)}`);\n}\n\nconst DEFAULT_CLEARING_GAS_LIMIT = 1_000_000n;\nconst DEFAULT_MAX_FEE_PER_GAS = parseGwei(\"0.1\");\nconst DEFAULT_MAX_PRIORITY_FEE_PER_GAS = parseGwei(\"0.1\");\nconst DEFAULT_RECEIPT_TIMEOUT_MS = 60_000;\nconst DEFAULT_RECEIPT_POLLING_INTERVAL_MS = 2_000;\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport class ContractGateway {\n readonly publicClient: TPublicClient;\n readonly walletClient: TWalletClient;\n readonly contract: CoreContract;\n private erc20Cache = new Map<string, Erc20Contract>();\n private clearingHouseCache = new Map<string, ClearingHouseContract>();\n private txQueue: Promise<void> = Promise.resolve();\n\n private constructor(\n publicClient: TPublicClient,\n walletClient: TWalletClient,\n contract: CoreContract,\n ) {\n this.publicClient = publicClient;\n this.walletClient = walletClient;\n this.contract = contract;\n }\n\n static async create(\n rpcUrl: string,\n signer: Account,\n contractAddress: Hex,\n chainId: number,\n ) {\n const chain = getChain(chainId, rpcUrl);\n\n const publicClient = createPublicClient({\n transport: http(rpcUrl),\n pollingInterval: 2_000,\n });\n\n const rpcChainId = await publicClient.getChainId();\n if (rpcChainId !== Number(chainId)) {\n throw new ContractError(\n `Connected to chain ${rpcChainId}, expected ${chainId}`,\n );\n }\n\n const walletClient = createWalletClient({\n transport: http(rpcUrl),\n account: signer,\n chain,\n });\n\n const contract = getContract({\n address: contractAddress,\n abi: core4micaAbi,\n client: {\n public: publicClient,\n wallet: walletClient,\n },\n });\n\n return new ContractGateway(publicClient, walletClient, contract);\n }\n\n private erc20(token: string): Erc20Contract {\n if (!this.erc20Cache.has(token)) {\n this.erc20Cache.set(\n token,\n getContract({\n address: token as Hex,\n abi: erc20Abi,\n client: { public: this.publicClient, wallet: this.walletClient },\n }),\n );\n }\n return this.erc20Cache.get(token)!;\n }\n\n private clearingHouse(address: string): ClearingHouseContract {\n if (!this.clearingHouseCache.has(address)) {\n this.clearingHouseCache.set(\n address,\n getContract({\n address: address as Hex,\n abi: clearingHouseAbi,\n client: { public: this.publicClient, wallet: this.walletClient },\n }),\n );\n }\n return this.clearingHouseCache.get(address)!;\n }\n\n private enqueueTx<T>(fn: () => Promise<T>): Promise<T> {\n // Serialize transaction submissions to avoid nonce collisions.\n const run = this.txQueue.then(fn, fn);\n this.txQueue = run.then(\n () => undefined,\n () => undefined,\n );\n return run;\n }\n\n private defaultFeeParams() {\n return {\n maxFeePerGas: DEFAULT_MAX_FEE_PER_GAS,\n maxPriorityFeePerGas: DEFAULT_MAX_PRIORITY_FEE_PER_GAS,\n } as const;\n }\n\n private splitWaitOptions(waitOptions?: TxReceiptWaitOptions): {\n receipt: { timeout?: number; pollingInterval?: number };\n gas?: bigint;\n } {\n if (!waitOptions) {\n return { receipt: { timeout: DEFAULT_RECEIPT_TIMEOUT_MS } };\n }\n const { gas, timeout, pollingInterval } = waitOptions;\n return {\n gas,\n receipt: {\n ...(timeout !== undefined ? { timeout } : {}),\n ...(pollingInterval !== undefined ? { pollingInterval } : {}),\n },\n };\n }\n\n async getGuaranteeDomain(): Promise<string> {\n return this.contract.read.guaranteeDomainSeparator();\n }\n\n async getGuaranteeVersionConfig(\n version: number,\n ): Promise<{ domainSeparator: string; decoder: string; enabled: boolean }> {\n const [, domainSeparator, decoder, enabled] =\n await this.contract.read.getGuaranteeVersionConfig([BigInt(version)]);\n return {\n domainSeparator: domainSeparator as string,\n decoder: decoder as string,\n enabled,\n };\n }\n\n async approveErc20(\n token: string,\n amount: number | bigint | string,\n waitOptions?: TxReceiptWaitOptions,\n ) {\n const { receipt } = this.splitWaitOptions(waitOptions);\n const erc20 = this.erc20(token);\n const spender = this.contract.address;\n const targetAllowance = parseU256(amount);\n const account = this.walletClient.account;\n\n if (account) {\n const currentAllowance = (await (erc20 as Erc20Contract).read.allowance([\n account.address,\n spender,\n ])) as bigint;\n if (currentAllowance >= targetAllowance) {\n return undefined;\n }\n }\n\n const sendApprove = async (value: bigint) => {\n const hash = await this.enqueueTx(() =>\n erc20.write.approve([spender, value], this.defaultFeeParams()),\n );\n const txReceipt = await this.publicClient.waitForTransactionReceipt({\n hash,\n ...receipt,\n });\n if (txReceipt.status !== \"success\") {\n throw new ContractError(`approve transaction reverted: ${hash}`);\n }\n return txReceipt;\n };\n\n let txReceipt: Awaited<ReturnType<typeof sendApprove>>;\n try {\n txReceipt = await sendApprove(targetAllowance);\n } catch (error) {\n // Some ERC20s (e.g. USDT) require resetting allowance to zero before\n // setting a new non-zero value.\n if (targetAllowance === 0n) {\n throw wrapViemError(error, \"ERC20 approve failed\");\n }\n try {\n await sendApprove(0n);\n txReceipt = await sendApprove(targetAllowance);\n } catch (retryError) {\n throw wrapViemError(\n retryError,\n \"ERC20 approve failed after allowance reset\",\n );\n }\n }\n\n if (account) {\n const actual = await this.waitForErc20Allowance(\n erc20,\n account.address,\n spender,\n targetAllowance,\n receipt,\n );\n if (actual < targetAllowance) {\n throw new ContractError(\n `ERC20 allowance verification failed: on-chain allowance is ${actual} but expected ${targetAllowance}. ` +\n `Try calling approveErc20 again.`,\n );\n }\n }\n\n return txReceipt;\n }\n\n private async waitForErc20Allowance(\n erc20: Erc20Contract,\n owner: string,\n spender: string,\n targetAllowance: bigint,\n receiptOptions: { timeout?: number; pollingInterval?: number },\n ): Promise<bigint> {\n const timeout = receiptOptions.timeout ?? DEFAULT_RECEIPT_TIMEOUT_MS;\n const pollingInterval =\n receiptOptions.pollingInterval ?? DEFAULT_RECEIPT_POLLING_INTERVAL_MS;\n const deadline = Date.now() + timeout;\n let actual = 0n;\n\n while (Date.now() <= deadline) {\n actual = (await erc20.read.allowance([\n owner as Hex,\n spender as Hex,\n ])) as bigint;\n if (actual >= targetAllowance) {\n return actual;\n }\n await sleep(\n Math.min(pollingInterval, Math.max(0, deadline - Date.now())),\n );\n }\n return actual;\n }\n\n async deposit(\n amount: number | bigint | string,\n erc20Token?: string,\n waitOptions?: TxReceiptWaitOptions,\n ) {\n const { receipt } = this.splitWaitOptions(waitOptions);\n const parsedAmount = parseU256(amount);\n let hash: Hex;\n\n if (erc20Token) {\n // Pre-check allowance to surface a clear error before hitting the contract.\n const account = this.walletClient.account;\n if (account) {\n const erc20 = this.erc20(erc20Token);\n const allowance = await (erc20 as Erc20Contract).read.allowance([\n account.address,\n this.contract.address,\n ]);\n if ((allowance as bigint) < parsedAmount) {\n throw new ContractError(\n `Insufficient ERC20 allowance: ${allowance} approved but ${parsedAmount} required. ` +\n `Call approveErc20(\"${erc20Token}\", ${parsedAmount}) before depositing.`,\n );\n }\n }\n\n try {\n hash = await this.enqueueTx(() =>\n this.contract.write.depositStablecoin(\n [erc20Token as Hex, parsedAmount],\n this.defaultFeeParams(),\n ),\n );\n } catch (error) {\n throw wrapViemError(error, \"depositStablecoin failed\");\n }\n } else {\n try {\n hash = await this.enqueueTx(() =>\n this.contract.write.deposit({\n value: parsedAmount,\n ...this.defaultFeeParams(),\n }),\n );\n } catch (error) {\n throw wrapViemError(error, \"deposit failed\");\n }\n }\n\n return this.publicClient.waitForTransactionReceipt({ hash, ...receipt });\n }\n\n async getUserAssets(opts?: { blockNumber?: bigint }) {\n const account = this.walletClient.account;\n if (!account) {\n throw new ContractError(\"wallet client has no account configured\");\n }\n const addr = account.address;\n const result = await this.contract.read.getUserAllAssets([addr], opts);\n return result.map((a) => ({\n asset: a.asset,\n collateral: a.collateral,\n withdrawalRequestTimestamp: a.withdrawalRequestTimestamp,\n withdrawalRequestAmount: a.withdrawalRequestAmount,\n }));\n }\n\n async requestWithdrawal(\n amount: number | bigint | string,\n erc20Token?: string,\n waitOptions?: TxReceiptWaitOptions,\n ) {\n const { receipt } = this.splitWaitOptions(waitOptions);\n const value = parseU256(amount);\n\n let hash: Hex;\n if (erc20Token) {\n hash = await this.enqueueTx(() =>\n this.contract.write.requestWithdrawal(\n [erc20Token as Hex, value],\n this.defaultFeeParams(),\n ),\n );\n } else {\n hash = await this.enqueueTx(() =>\n this.contract.write.requestWithdrawal([value], this.defaultFeeParams()),\n );\n }\n\n return this.publicClient.waitForTransactionReceipt({ hash, ...receipt });\n }\n\n async cancelWithdrawal(\n erc20Token?: string,\n waitOptions?: TxReceiptWaitOptions,\n ) {\n const { receipt } = this.splitWaitOptions(waitOptions);\n let hash: Hex;\n if (erc20Token) {\n hash = await this.enqueueTx(() =>\n this.contract.write.cancelWithdrawal(\n [erc20Token as Hex],\n this.defaultFeeParams(),\n ),\n );\n } else {\n hash = await this.enqueueTx(() =>\n this.contract.write.cancelWithdrawal(this.defaultFeeParams()),\n );\n }\n\n return this.publicClient.waitForTransactionReceipt({ hash, ...receipt });\n }\n\n async finalizeWithdrawal(\n erc20Token?: string,\n waitOptions?: TxReceiptWaitOptions,\n ) {\n const { receipt } = this.splitWaitOptions(waitOptions);\n let hash: Hex;\n if (erc20Token) {\n hash = await this.enqueueTx(() =>\n this.contract.write.finalizeWithdrawal(\n [erc20Token as Hex],\n this.defaultFeeParams(),\n ),\n );\n } else {\n hash = await this.enqueueTx(() =>\n this.contract.write.finalizeWithdrawal(this.defaultFeeParams()),\n );\n }\n\n return this.publicClient.waitForTransactionReceipt({ hash, ...receipt });\n }\n\n /**\n * Claim a net credit committed for a settlement cycle (`claimNetCredit`).\n *\n * @param contractAddress - ClearingHouse contract address (from the clearing action).\n * @param cycleId - On-chain `bytes32` cycle identifier.\n * @param netCredit - Net credit amount committed for the caller.\n * @param proof - Merkle proof of the caller's committed leaf.\n */\n async claimNetCredit(\n contractAddress: string,\n cycleId: Hex,\n netCredit: bigint,\n proof: Hex[],\n waitOptions?: TxReceiptWaitOptions,\n ) {\n const { gas, receipt } = this.splitWaitOptions(waitOptions);\n const ch = this.clearingHouse(contractAddress);\n const hash = await this.enqueueTx(() =>\n ch.write.claimNetCredit([cycleId, netCredit, proof], {\n gas: gas ?? DEFAULT_CLEARING_GAS_LIMIT,\n ...this.defaultFeeParams(),\n }),\n );\n return this.publicClient.waitForTransactionReceipt({ hash, ...receipt });\n }\n\n /**\n * Pay a net debit committed for a settlement cycle (`payNetDebit`).\n *\n * @param payableValue - Native value to attach (non-zero only for native-asset debtors).\n */\n async payNetDebit(\n contractAddress: string,\n cycleId: Hex,\n netDebit: bigint,\n proof: Hex[],\n payableValue: bigint,\n waitOptions?: TxReceiptWaitOptions,\n ) {\n const { gas, receipt } = this.splitWaitOptions(waitOptions);\n const ch = this.clearingHouse(contractAddress);\n const hash = await this.enqueueTx(() =>\n ch.write.payNetDebit([cycleId, netDebit, proof], {\n value: payableValue,\n gas: gas ?? DEFAULT_CLEARING_GAS_LIMIT,\n ...this.defaultFeeParams(),\n }),\n );\n return this.publicClient.waitForTransactionReceipt({ hash, ...receipt });\n }\n\n /**\n * Mark a debtor defaulted after the clearing payment finality deadline\n * (`markDefaulted`).\n */\n async markDefaulted(\n contractAddress: string,\n cycleId: Hex,\n debtor: Hex,\n netDebit: bigint,\n proof: Hex[],\n waitOptions?: TxReceiptWaitOptions,\n ) {\n const { gas, receipt } = this.splitWaitOptions(waitOptions);\n const ch = this.clearingHouse(contractAddress);\n const hash = await this.enqueueTx(() =>\n ch.write.markDefaulted([cycleId, debtor, netDebit, proof], {\n gas: gas ?? DEFAULT_CLEARING_GAS_LIMIT,\n ...this.defaultFeeParams(),\n }),\n );\n return this.publicClient.waitForTransactionReceipt({ hash, ...receipt });\n }\n}\n","import type { NetworkInfo } from \"@/networks/models\";\n\nexport type { NetworkInfo } from \"@/networks/models\";\n\n/**\n * Hosted 4Mica network deployments, keyed by human-readable shorthand.\n *\n * Pass the shorthand (or the CAIP-2 string) to {@link ConfigBuilder.network}\n * to select a network without writing a URL.\n *\n * @example\n * ```ts\n * import { Client, ConfigBuilder, NETWORKS } from \"@4mica/sdk\";\n *\n * // By shorthand\n * const cfg = new ConfigBuilder()\n * .network(\"base\")\n * .walletPrivateKey(\"0x...\")\n * .build();\n *\n * // Inspect available networks\n * console.log(NETWORKS[\"base\"].caip2); // \"eip155:8453\"\n * ```\n */\nexport const NETWORKS: Record<string, NetworkInfo> = {\n base: {\n caip2: \"eip155:8453\",\n rpcUrl: \"https://base.api.4mica.xyz/\",\n publicRpcUrl: \"https://base-rpc.publicnode.com\",\n },\n \"base-sepolia\": {\n caip2: \"eip155:84532\",\n rpcUrl: \"https://base.sepolia.api.4mica.xyz/\",\n publicRpcUrl: \"https://base-sepolia-rpc.publicnode.com\",\n },\n \"ethereum-sepolia\": {\n caip2: \"eip155:11155111\",\n rpcUrl: \"https://ethereum.sepolia.api.4mica.xyz/\",\n publicRpcUrl: \"https://ethereum-sepolia-rpc.publicnode.com\",\n },\n} as const;\n\nconst NETWORKS_BY_CAIP2: Record<string, NetworkInfo> = Object.fromEntries(\n Object.values(NETWORKS).map((n) => [n.caip2, n]),\n);\n\n/**\n * Resolve a network shorthand or CAIP-2 identifier to a core API URL.\n * Returns `undefined` if the identifier is not a known hosted network.\n */\nexport function resolveNetworkRpcUrl(network: string): string | undefined {\n return NETWORKS[network]?.rpcUrl ?? NETWORKS_BY_CAIP2[network]?.rpcUrl;\n}\n\n/**\n * Resolve a CAIP-2 identifier to a reliable public Ethereum RPC URL.\n * Returns `undefined` for unknown networks.\n */\nexport function resolvePublicRpcUrl(caip2: string): string | undefined {\n return NETWORKS_BY_CAIP2[caip2]?.publicRpcUrl;\n}\n","import { ADMIN_API_KEY_HEADER } from \"@/constants\";\nimport { RpcError } from \"@/errors\";\nimport { normalizeBaseUrl, requestJson } from \"@/http\";\nimport {\n AdminApiKeyInfo,\n AdminApiKeySecret,\n type ClearingSettlementActionKind,\n CorePublicParameters,\n SupportedTokensResponse,\n UserSuspensionStatus,\n} from \"@/models\";\nimport type { BearerTokenProvider, FetchFn } from \"@/rpc/models\";\n\nexport type { BearerTokenProvider, FetchFn } from \"@/rpc/models\";\n\nconst SDK_CLIENT_HEADER_VALUE = `ts-sdk-4mica/${__SDK_VERSION__}`;\n\nexport class RpcProxy {\n private baseUrl: string;\n private adminApiKey?: string;\n private bearerToken?: string;\n private bearerTokenProvider?: BearerTokenProvider;\n private fetchFn: FetchFn;\n\n constructor(\n endpoint: string,\n adminApiKey?: string,\n fetchFn: FetchFn = fetch,\n ) {\n this.baseUrl = normalizeBaseUrl(endpoint);\n this.adminApiKey = adminApiKey;\n this.fetchFn = fetchFn;\n }\n\n async aclose(): Promise<void> {\n // no-op for symmetry with Python SDK\n }\n\n withBearerToken(token: string): RpcProxy {\n this.bearerToken = token;\n return this;\n }\n\n withTokenProvider(provider: BearerTokenProvider): RpcProxy {\n this.bearerTokenProvider = provider;\n return this;\n }\n\n private async headers(): Promise<Record<string, string>> {\n const headers: Record<string, string> = {\n \"x-4mica-sdk\": SDK_CLIENT_HEADER_VALUE,\n };\n if (this.adminApiKey) {\n headers[ADMIN_API_KEY_HEADER] = this.adminApiKey;\n }\n const token = await this.resolveBearerToken();\n if (token) {\n headers[\"Authorization\"] = token;\n }\n return headers;\n }\n\n private async resolveBearerToken(): Promise<string | undefined> {\n let token = this.bearerToken;\n if (!token && this.bearerTokenProvider) {\n token = await this.bearerTokenProvider();\n }\n if (!token) {\n return undefined;\n }\n const trimmed = token.trim();\n if (/^bearer\\s+/i.test(trimmed)) {\n return trimmed;\n }\n return `Bearer ${trimmed}`;\n }\n\n private async get<T>(path: string): Promise<T> {\n return requestJson<T>(\n this.fetchFn,\n `${this.baseUrl}${path}`,\n {\n headers: await this.headers(),\n method: \"GET\",\n },\n {\n decodeError: (message) => new RpcError(message),\n httpError: (message, response, body) =>\n new RpcError(message, {\n status: response.status,\n body,\n }),\n },\n );\n }\n\n private async post<T>(path: string, body: unknown): Promise<T> {\n return requestJson<T>(\n this.fetchFn,\n `${this.baseUrl}${path}`,\n {\n headers: {\n \"content-type\": \"application/json\",\n ...(await this.headers()),\n },\n method: \"POST\",\n body: JSON.stringify(body),\n },\n {\n decodeError: (message) => new RpcError(message),\n httpError: (message, response, body) =>\n new RpcError(message, {\n status: response.status,\n body,\n }),\n },\n );\n }\n\n async getPublicParams(): Promise<CorePublicParameters> {\n const data = await this.get<Record<string, unknown>>(\"/core/public-params\");\n return CorePublicParameters.fromRpc(data);\n }\n\n async getSupportedTokens(): Promise<SupportedTokensResponse> {\n const data = await this.get<Record<string, unknown>>(\"/core/tokens\");\n return SupportedTokensResponse.fromRpc(data);\n }\n\n async issueGuarantee(body: unknown): Promise<Record<string, unknown>> {\n return this.post<Record<string, unknown>>(\"/core/guarantees\", body);\n }\n\n /**\n * Fetch a participant's committed position + Merkle proof for a settlement cycle.\n *\n * @param cycleId - On-chain `bytes32` cycle identifier.\n * @param participant - Participant address.\n */\n async getClearingParticipantProof(\n cycleId: string,\n participant: string,\n ): Promise<Record<string, unknown>> {\n return this.get<Record<string, unknown>>(\n `/core/cycles/${cycleId}/participants/${participant}/clearing-proof`,\n );\n }\n\n /**\n * Fetch a prepared ClearingHouse settlement action for a participant.\n *\n * @param cycleId - On-chain `bytes32` cycle identifier.\n * @param participant - Participant address.\n * @param action - `pay_net_debit`, `claim_net_credit`, or `mark_defaulted`.\n */\n async getClearingSettlementAction(\n cycleId: string,\n participant: string,\n action: ClearingSettlementActionKind,\n ): Promise<Record<string, unknown>> {\n return this.get<Record<string, unknown>>(\n `/core/cycles/${cycleId}/participants/${participant}/clearing-action?action=${encodeURIComponent(action)}`,\n );\n }\n\n /** Prepared `payNetDebit` action for a net-debtor participant. */\n async getClearingPayNetDebitAction(\n cycleId: string,\n debtor: string,\n ): Promise<Record<string, unknown>> {\n return this.getClearingSettlementAction(cycleId, debtor, \"pay_net_debit\");\n }\n\n /** Prepared `claimNetCredit` action for a net-creditor participant. */\n async getClearingClaimNetCreditAction(\n cycleId: string,\n creditor: string,\n ): Promise<Record<string, unknown>> {\n return this.getClearingSettlementAction(\n cycleId,\n creditor,\n \"claim_net_credit\",\n );\n }\n\n /** Prepared `markDefaulted` action for a debtor past the payment deadline. */\n async getClearingMarkDefaultedAction(\n cycleId: string,\n debtor: string,\n ): Promise<Record<string, unknown>> {\n return this.getClearingSettlementAction(cycleId, debtor, \"mark_defaulted\");\n }\n\n async listRecipientPayments(\n recipientAddress: string,\n ): Promise<Record<string, unknown>[]> {\n return this.get<Record<string, unknown>[]>(\n `/core/recipients/${recipientAddress}/payments`,\n );\n }\n\n async getUserAssetBalance(\n userAddress: string,\n assetAddress: string,\n ): Promise<Record<string, unknown> | null> {\n return this.get<Record<string, unknown> | null>(\n `/core/users/${userAddress}/assets/${assetAddress}`,\n );\n }\n\n async updateUserSuspension(\n userAddress: string,\n suspended: boolean,\n ): Promise<UserSuspensionStatus> {\n const data = await this.post<Record<string, unknown>>(\n `/core/users/${userAddress}/suspension`,\n {\n suspended,\n },\n );\n return UserSuspensionStatus.fromRpc(data);\n }\n\n async createAdminApiKey(body: unknown): Promise<AdminApiKeySecret> {\n const data = await this.post<Record<string, unknown>>(\n \"/core/admin/api-keys\",\n body,\n );\n return AdminApiKeySecret.fromRpc(data);\n }\n\n async listAdminApiKeys(): Promise<AdminApiKeyInfo[]> {\n const data = await this.get<Record<string, unknown>[]>(\n \"/core/admin/api-keys\",\n );\n return data.map((entry) => AdminApiKeyInfo.fromRpc(entry));\n }\n\n async revokeAdminApiKey(keyId: string): Promise<AdminApiKeyInfo> {\n const data = await this.post<Record<string, unknown>>(\n `/core/admin/api-keys/${keyId}/revoke`,\n {},\n );\n return AdminApiKeyInfo.fromRpc(data);\n }\n}\n","import { encodeAbiParameters, type Hex, keccak256 } from \"viem\";\nimport type {\n PaymentGuaranteeRequestClaims,\n PaymentGuaranteeRequestClaimsV2,\n} from \"@/models\";\nimport { ensureHexPrefix } from \"@/utils\";\n\n/** Binding domain string used as a prefix when hashing validation subjects. */\nexport const VALIDATION_SUBJECT_BINDING_DOMAIN = \"4MICA_VALIDATION_SUBJECT_V1\";\n\n/** Binding domain string used as a prefix when hashing validation requests. */\nexport const VALIDATION_REQUEST_BINDING_DOMAIN = \"4MICA_VALIDATION_REQUEST_V2\";\n\n/**\n * Compute the `validationSubjectHash` for a V2 payment guarantee request.\n *\n * Binds the payment subject (req, user, recipient, amount, asset, timestamp) to\n * a keccak256 hash prefixed by {@link VALIDATION_SUBJECT_BINDING_DOMAIN} so that\n * on-chain validators can verify which payment the validation refers to.\n *\n * @param claims - V1 base claims (the subject fields are the same for V1 and V2).\n * @returns 32-byte keccak256 hash as a `0x`-prefixed hex string.\n */\nexport function computeValidationSubjectHash(\n claims: PaymentGuaranteeRequestClaims,\n): Hex {\n const bindingDomain = keccak256(\n new TextEncoder().encode(VALIDATION_SUBJECT_BINDING_DOMAIN),\n );\n const encoded = encodeAbiParameters(\n [\n { type: \"bytes32\" },\n { type: \"uint256\" },\n { type: \"address\" },\n { type: \"address\" },\n { type: \"uint256\" },\n { type: \"address\" },\n { type: \"uint64\" },\n ],\n [\n bindingDomain,\n claims.reqId,\n claims.userAddress as Hex,\n claims.recipientAddress as Hex,\n claims.amount,\n claims.assetAddress as Hex,\n BigInt(claims.timestamp),\n ],\n );\n return keccak256(encoded);\n}\n\n/**\n * Compute the `validationRequestHash` for a V2 payment guarantee request.\n *\n * Binds the full validation policy (chain, registry, validator, score threshold,\n * subject hash, required tag, job hash) to a keccak256 hash prefixed by\n * {@link VALIDATION_REQUEST_BINDING_DOMAIN}. This hash is included in the V2 claims\n * that are BLS-signed by the core service, allowing on-chain verification that the\n * validation policy was not tampered with.\n *\n * @param claims - V2 claims with all validation policy fields populated.\n * The `validationSubjectHash` field must already be computed via\n * {@link computeValidationSubjectHash} before calling this function.\n * @returns 32-byte keccak256 hash as a `0x`-prefixed hex string.\n */\nexport function computeValidationRequestHash(\n claims: PaymentGuaranteeRequestClaimsV2,\n): Hex {\n const bindingDomain = keccak256(\n new TextEncoder().encode(VALIDATION_REQUEST_BINDING_DOMAIN),\n );\n const tagHash = keccak256(\n new TextEncoder().encode(claims.requiredValidationTag),\n );\n const encoded = encodeAbiParameters(\n [\n { type: \"bytes32\" },\n { type: \"uint256\" },\n { type: \"address\" },\n { type: \"address\" },\n { type: \"uint256\" },\n { type: \"bytes32\" },\n { type: \"uint8\" },\n { type: \"bytes32\" },\n { type: \"bytes32\" },\n ],\n [\n bindingDomain,\n BigInt(claims.validationChainId),\n claims.validationRegistryAddress as Hex,\n claims.validatorAddress as Hex,\n claims.validatorAgentId,\n ensureHexPrefix(claims.validationSubjectHash),\n claims.minValidationScore,\n tagHash,\n ensureHexPrefix(claims.jobHash),\n ],\n );\n return keccak256(encoded);\n}\n","import { type Account, encodeAbiParameters, type Hex } from \"viem\";\n\nexport {\n computeValidationRequestHash,\n computeValidationSubjectHash,\n} from \"@/validation\";\n\nimport { SigningError } from \"@/errors\";\nimport {\n type CorePublicParameters,\n type PaymentGuaranteeRequestClaims,\n PaymentGuaranteeRequestClaimsV2,\n type PaymentSignature,\n SigningScheme,\n} from \"@/models\";\nimport { isRecord } from \"@/serde\";\nimport type {\n GuaranteeSigningContextOptions,\n GuaranteeTypedDataValidationOptions,\n} from \"@/signing/models\";\nimport { ensureHexPrefix, normalizeAddress, ValidationError } from \"@/utils\";\n\nexport type {\n GuaranteeSigningContextOptions,\n GuaranteeTypedDataValidationOptions,\n} from \"@/signing/models\";\n\nexport const GUARANTEE_EIP712_TYPES = {\n EIP712Domain: [\n { name: \"name\", type: \"string\" },\n { name: \"version\", type: \"string\" },\n { name: \"chainId\", type: \"uint256\" },\n ],\n SolGuaranteeRequestClaimsV1: [\n { name: \"user\", type: \"address\" },\n { name: \"recipient\", type: \"address\" },\n { name: \"reqId\", type: \"uint256\" },\n { name: \"amount\", type: \"uint256\" },\n { name: \"asset\", type: \"address\" },\n { name: \"timestamp\", type: \"uint64\" },\n ],\n} as const;\n\nexport const GUARANTEE_EIP712_TYPES_V2 = {\n EIP712Domain: [\n { name: \"name\", type: \"string\" },\n { name: \"version\", type: \"string\" },\n { name: \"chainId\", type: \"uint256\" },\n ],\n SolGuaranteeRequestClaimsV2: [\n { name: \"user\", type: \"address\" },\n { name: \"recipient\", type: \"address\" },\n { name: \"reqId\", type: \"uint256\" },\n { name: \"amount\", type: \"uint256\" },\n { name: \"asset\", type: \"address\" },\n { name: \"timestamp\", type: \"uint64\" },\n { name: \"validationRegistryAddress\", type: \"address\" },\n { name: \"validationRequestHash\", type: \"bytes32\" },\n { name: \"validationChainId\", type: \"uint256\" },\n { name: \"validatorAddress\", type: \"address\" },\n { name: \"validatorAgentId\", type: \"uint256\" },\n { name: \"minValidationScore\", type: \"uint8\" },\n { name: \"validationSubjectHash\", type: \"bytes32\" },\n { name: \"jobHash\", type: \"bytes32\" },\n { name: \"requiredValidationTag\", type: \"string\" },\n ],\n} as const;\n\nexport type GuaranteeTypedData = {\n types: typeof GUARANTEE_EIP712_TYPES;\n primaryType: \"SolGuaranteeRequestClaimsV1\";\n domain: {\n name: string;\n version: string;\n chainId: number;\n };\n message: {\n user: Hex;\n recipient: Hex;\n reqId: bigint;\n amount: bigint;\n asset: Hex;\n timestamp: bigint;\n };\n};\n\nexport type GuaranteeTypedDataV2 = {\n types: typeof GUARANTEE_EIP712_TYPES_V2;\n primaryType: \"SolGuaranteeRequestClaimsV2\";\n domain: {\n name: string;\n version: string;\n chainId: number;\n };\n message: {\n user: Hex;\n recipient: Hex;\n reqId: bigint;\n amount: bigint;\n asset: Hex;\n timestamp: bigint;\n validationRegistryAddress: Hex;\n validationRequestHash: Hex;\n validationChainId: bigint;\n validatorAddress: Hex;\n validatorAgentId: bigint;\n minValidationScore: number;\n validationSubjectHash: Hex;\n jobHash: Hex;\n requiredValidationTag: string;\n };\n};\n\nconst fieldsMatch = (\n actual: unknown,\n expected: readonly { name: string; type: string }[],\n): boolean => {\n if (!Array.isArray(actual) || actual.length !== expected.length) return false;\n const norm = (list: readonly { name: string; type: string }[]) =>\n list.map((item) => `${item.name}:${item.type}`).sort();\n const actualSet = new Set(norm(actual));\n return norm(expected).every((key) => actualSet.has(key));\n};\n\nconst parseChainId = (value: unknown): number => {\n if (typeof value === \"bigint\") return Number(value);\n if (typeof value === \"number\") return value;\n if (typeof value === \"string\" && value.trim()) return Number(value);\n return Number.NaN;\n};\n\nconst ensureBigIntish = (value: unknown, label: string): void => {\n try {\n BigInt(value as bigint | number | string);\n } catch {\n throw new ValidationError(`${label} must be a numeric value`);\n }\n};\n\nexport function validateGuaranteeTypedData(\n payload: {\n domain: Record<string, unknown>;\n types: Record<string, Array<{ name: string; type: string }>>;\n message: Record<string, unknown>;\n },\n options: GuaranteeTypedDataValidationOptions = {},\n): void {\n if (!isRecord(payload)) {\n throw new ValidationError(\"typed data payload is required\");\n }\n if (!isRecord(payload.domain)) {\n throw new ValidationError(\"domain is required\");\n }\n if (!isRecord(payload.types)) {\n throw new ValidationError(\"types are required\");\n }\n if (!isRecord(payload.message)) {\n throw new ValidationError(\"message is required\");\n }\n\n const types = payload.types;\n if (\n !fieldsMatch(\n types.SolGuaranteeRequestClaimsV1,\n GUARANTEE_EIP712_TYPES.SolGuaranteeRequestClaimsV1,\n )\n ) {\n throw new ValidationError(\n \"Unexpected struct fields for SolGuaranteeRequestClaimsV1\",\n );\n }\n\n const message = payload.message;\n const requiredFields = [\n \"user\",\n \"recipient\",\n \"reqId\",\n \"amount\",\n \"asset\",\n \"timestamp\",\n ];\n if (requiredFields.some((field) => !(field in message))) {\n throw new ValidationError(\n \"message is missing required SolGuaranteeRequestClaimsV1 fields\",\n );\n }\n\n const user = normalizeAddress(message.user as string);\n const recipient = normalizeAddress(message.recipient as string);\n normalizeAddress(message.asset as string);\n\n if (options.expectedSigner) {\n if (normalizeAddress(options.expectedSigner) !== user) {\n throw new ValidationError(\"message.user must match signer address\");\n }\n }\n if (options.expectedRecipient) {\n if (normalizeAddress(options.expectedRecipient) !== recipient) {\n throw new ValidationError(\n \"message.recipient must match expected recipient\",\n );\n }\n }\n\n ensureBigIntish(message.reqId, \"reqId\");\n ensureBigIntish(message.amount, \"amount\");\n ensureBigIntish(message.timestamp, \"timestamp\");\n\n if (options.expectedChainId !== undefined) {\n const domainChainId = parseChainId(payload.domain.chainId);\n if (!Number.isFinite(domainChainId)) {\n throw new ValidationError(\n \"domain.chainId is required for typed data signatures\",\n );\n }\n if (Number(domainChainId) !== Number(options.expectedChainId)) {\n throw new ValidationError(\n `domain.chainId mismatch; expected ${options.expectedChainId}, got ${domainChainId}`,\n );\n }\n }\n}\n\nexport function validateGuaranteeSigningContext(\n params: CorePublicParameters,\n claims: PaymentGuaranteeRequestClaims,\n options: GuaranteeSigningContextOptions = {},\n): void {\n if (options.signerAddress) {\n const signer = normalizeAddress(options.signerAddress);\n const user = normalizeAddress(claims.userAddress);\n if (signer !== user) {\n throw new ValidationError(\n `address mismatch: signer ${options.signerAddress} != claims.user_address ${claims.userAddress}`,\n );\n }\n }\n\n if (options.signerChainId !== undefined) {\n const signerChainId = Number(options.signerChainId);\n if (!Number.isFinite(signerChainId)) {\n throw new ValidationError(\"signer chain id is invalid\");\n }\n if (Number(params.chainId) !== signerChainId) {\n throw new ValidationError(\n `chain id mismatch: expected ${params.chainId}, got ${signerChainId}`,\n );\n }\n }\n}\n\nexport function buildGuaranteeTypedData(\n params: CorePublicParameters,\n claims: PaymentGuaranteeRequestClaims,\n): GuaranteeTypedData {\n return {\n types: GUARANTEE_EIP712_TYPES,\n primaryType: \"SolGuaranteeRequestClaimsV1\",\n domain: {\n name: params.eip712Name,\n version: params.eip712Version,\n chainId: params.chainId,\n },\n message: {\n user: claims.userAddress as Hex,\n recipient: claims.recipientAddress as Hex,\n reqId: claims.reqId,\n amount: claims.amount,\n asset: claims.assetAddress as Hex,\n timestamp: BigInt(claims.timestamp),\n },\n } as const;\n}\n\nexport function buildGuaranteeTypedDataV2(\n params: CorePublicParameters,\n claims: PaymentGuaranteeRequestClaimsV2,\n): GuaranteeTypedDataV2 {\n return {\n types: GUARANTEE_EIP712_TYPES_V2,\n primaryType: \"SolGuaranteeRequestClaimsV2\",\n domain: {\n name: params.eip712Name,\n version: params.eip712Version,\n chainId: params.chainId,\n },\n message: {\n user: claims.userAddress as Hex,\n recipient: claims.recipientAddress as Hex,\n reqId: claims.reqId,\n amount: claims.amount,\n asset: claims.assetAddress as Hex,\n timestamp: BigInt(claims.timestamp),\n validationRegistryAddress: claims.validationRegistryAddress as Hex,\n validationRequestHash: ensureHexPrefix(claims.validationRequestHash),\n validationChainId: BigInt(claims.validationChainId),\n validatorAddress: claims.validatorAddress as Hex,\n validatorAgentId: claims.validatorAgentId,\n minValidationScore: claims.minValidationScore,\n validationSubjectHash: ensureHexPrefix(claims.validationSubjectHash),\n jobHash: ensureHexPrefix(claims.jobHash),\n requiredValidationTag: claims.requiredValidationTag,\n },\n } as const;\n}\n\nexport function encodeGuaranteeEip191V2(\n claims: PaymentGuaranteeRequestClaimsV2,\n): string {\n return encodeAbiParameters(\n [\n { type: \"address\" },\n { type: \"address\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"address\" },\n { type: \"uint64\" },\n { type: \"address\" },\n { type: \"bytes32\" },\n { type: \"uint256\" },\n { type: \"address\" },\n { type: \"uint256\" },\n { type: \"uint8\" },\n { type: \"bytes32\" },\n { type: \"bytes32\" },\n { type: \"string\" },\n ],\n [\n claims.userAddress as Hex,\n claims.recipientAddress as Hex,\n claims.reqId,\n claims.amount,\n claims.assetAddress as Hex,\n BigInt(claims.timestamp),\n claims.validationRegistryAddress as Hex,\n (claims.validationRequestHash.startsWith(\"0x\")\n ? claims.validationRequestHash\n : `0x${claims.validationRequestHash}`) as Hex,\n BigInt(claims.validationChainId),\n claims.validatorAddress as Hex,\n claims.validatorAgentId,\n claims.minValidationScore,\n (claims.validationSubjectHash.startsWith(\"0x\")\n ? claims.validationSubjectHash\n : `0x${claims.validationSubjectHash}`) as Hex,\n (claims.jobHash.startsWith(\"0x\")\n ? claims.jobHash\n : `0x${claims.jobHash}`) as Hex,\n claims.requiredValidationTag,\n ],\n );\n}\n\nexport function encodeGuaranteeEip191(\n claims: PaymentGuaranteeRequestClaims,\n): string {\n const payload = encodeAbiParameters(\n [\n { type: \"address\" },\n { type: \"address\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"address\" },\n { type: \"uint64\" },\n ],\n [\n claims.userAddress as Hex,\n claims.recipientAddress as Hex,\n claims.reqId,\n claims.amount,\n claims.assetAddress as Hex,\n BigInt(claims.timestamp),\n ],\n );\n return payload;\n}\n\nexport class PaymentSigner {\n readonly signer: Account;\n\n constructor(signer: Account) {\n this.signer = signer;\n }\n\n async signRequest(\n params: CorePublicParameters,\n claims: PaymentGuaranteeRequestClaims | PaymentGuaranteeRequestClaimsV2,\n scheme: SigningScheme = SigningScheme.EIP712,\n ): Promise<PaymentSignature> {\n try {\n validateGuaranteeSigningContext(params, claims, {\n signerAddress: this.signer.address,\n });\n const isV2 = claims instanceof PaymentGuaranteeRequestClaimsV2;\n\n if (scheme === SigningScheme.EIP712) {\n if (!this.signer.signTypedData) {\n throw new SigningError(\n \"signTypedData is not supported for this account\",\n );\n }\n if (isV2) {\n const typed = buildGuaranteeTypedDataV2(params, claims);\n const signature = await this.signer.signTypedData({\n domain: typed.domain,\n types: {\n SolGuaranteeRequestClaimsV2:\n typed.types.SolGuaranteeRequestClaimsV2,\n },\n primaryType: typed.primaryType,\n message: typed.message,\n });\n return { signature, scheme };\n }\n const typed = buildGuaranteeTypedData(params, claims);\n const signature = await this.signer.signTypedData({\n domain: typed.domain,\n types: {\n SolGuaranteeRequestClaimsV1:\n typed.types.SolGuaranteeRequestClaimsV1,\n },\n primaryType: typed.primaryType,\n message: typed.message,\n });\n return { signature, scheme };\n }\n\n if (scheme === SigningScheme.EIP191) {\n if (!this.signer.signMessage) {\n throw new SigningError(\n \"signMessage is not supported for this account\",\n );\n }\n const message = isV2\n ? encodeGuaranteeEip191V2(claims)\n : encodeGuaranteeEip191(claims);\n const signature = await this.signer.signMessage({ message });\n return { signature, scheme };\n }\n\n throw new SigningError(`unsupported signing scheme: ${scheme}`);\n } catch (err: unknown) {\n if (err instanceof ValidationError) {\n throw new SigningError(err.message);\n }\n const message = err instanceof Error ? err.message : String(err);\n throw new SigningError(message);\n }\n }\n}\n","import type { AuthTokens } from \"@/auth\";\nimport { AuthSession } from \"@/auth\";\nimport { RecipientClient } from \"@/client/recipient\";\nimport { UserClient } from \"@/client/user\";\nimport type { Config } from \"@/config\";\nimport { ContractGateway } from \"@/contract\";\nimport { AuthMissingConfigError } from \"@/errors\";\nimport type { CorePublicParameters } from \"@/models\";\nimport { resolvePublicRpcUrl } from \"@/networks\";\nimport { RpcProxy } from \"@/rpc\";\nimport { PaymentSigner } from \"@/signing\";\n\n/**\n * Top-level SDK client. Holds a live connection to the 4Mica core RPC and the\n * on-chain Core4Mica contract. Obtain an instance via {@link Client.new}.\n *\n * @example\n * ```ts\n * const cfg = new ConfigBuilder().walletPrivateKey(\"0x...\").build();\n * const client = await Client.new(cfg);\n * try {\n * // client.user – payer-side operations\n * // client.recipient – recipient-side operations\n * } finally {\n * await client.aclose();\n * }\n * ```\n */\nexport class Client {\n /** Low-level RPC proxy to the 4Mica core service. */\n readonly rpc: RpcProxy;\n /** Chain and contract parameters fetched from the core service at startup. */\n readonly params: CorePublicParameters;\n /** viem-backed gateway for on-chain calls (deposit, claimNetCredit, …). */\n readonly gateway: ContractGateway;\n /** 32-byte domain separator used to verify V1 BLS guarantee certificates. */\n readonly guaranteeDomain: string;\n /** Payer-side operations: deposit, sign, withdraw. */\n readonly user: UserClient;\n /** Recipient-side operations: tabs, guarantees, remuneration. */\n readonly recipient: RecipientClient;\n /** Payment signing wrapper around the configured viem Account. */\n readonly signer: PaymentSigner;\n private authSession?: AuthSession;\n\n private constructor(\n rpc: RpcProxy,\n params: CorePublicParameters,\n gateway: ContractGateway,\n guaranteeDomain: string,\n signer: PaymentSigner,\n authSession?: AuthSession,\n ) {\n this.rpc = rpc;\n this.params = params;\n this.gateway = gateway;\n this.guaranteeDomain = guaranteeDomain;\n this.signer = signer;\n this.authSession = authSession;\n this.user = new UserClient(this);\n this.recipient = new RecipientClient(this);\n }\n\n /**\n * Create and fully initialise a Client.\n *\n * Fetches public parameters from the core service, validates that the\n * Ethereum RPC is on the expected chain, and sets up SIWE auth if configured.\n *\n * @param cfg - Validated configuration produced by {@link ConfigBuilder.build}.\n * @throws {@link ConfigError} if the configuration is invalid.\n * @throws {@link RpcError} if the core service is unreachable.\n * @throws {@link ContractError} if the Ethereum RPC returns the wrong chain ID.\n */\n static async new(cfg: Config): Promise<Client> {\n const rpc = new RpcProxy(cfg.rpcUrl, cfg.adminApiKey);\n const params = await rpc.getPublicParams();\n const gateway = await Client.buildGateway(cfg, params);\n\n const guaranteeDomain = await gateway.getGuaranteeDomain();\n const signer = new PaymentSigner(cfg.signer);\n\n const authEnabled =\n cfg.authUrl !== undefined || cfg.authRefreshMarginSecs !== undefined;\n const authSession =\n cfg.bearerToken || !authEnabled\n ? undefined\n : new AuthSession({\n authUrl: cfg.authUrl ?? cfg.rpcUrl,\n signer: cfg.signer,\n refreshMarginSecs: cfg.authRefreshMarginSecs ?? 60,\n });\n\n if (cfg.bearerToken) {\n rpc.withBearerToken(cfg.bearerToken);\n } else if (authSession) {\n rpc.withTokenProvider(() => authSession.accessToken());\n }\n return new Client(\n rpc,\n params,\n gateway,\n guaranteeDomain,\n signer,\n authSession,\n );\n }\n\n private static async buildGateway(\n cfg: Config,\n params: CorePublicParameters,\n ): Promise<ContractGateway> {\n const ethRpcUrl =\n cfg.ethereumHttpRpcUrl ??\n params.ethereumHttpRpcUrl ??\n resolvePublicRpcUrl(`eip155:${params.chainId}`);\n const contractAddress = cfg.contractAddress ?? params.contractAddress;\n return ContractGateway.create(\n ethRpcUrl,\n cfg.signer,\n contractAddress as `0x${string}`,\n params.chainId,\n );\n }\n\n /**\n * Release client resources. Safe to call multiple times.\n * Use in a `finally` block to ensure cleanup after use.\n */\n async aclose(): Promise<void> {\n await this.rpc.aclose();\n }\n\n /**\n * Perform an explicit SIWE login and return the resulting tokens.\n *\n * Not required for normal operation — the first authenticated RPC call\n * triggers auth automatically. Call this to pre-warm the session.\n *\n * @throws {@link AuthMissingConfigError} if auth was not enabled in the config.\n */\n async login(): Promise<AuthTokens> {\n if (!this.authSession) {\n throw new AuthMissingConfigError(\"auth is not enabled\");\n }\n return this.authSession.login();\n }\n}\n\nexport { RecipientClient } from \"@/client/recipient\";\nexport { UserClient } from \"@/client/user\";\n","import { type Account, privateKeyToAccount } from \"viem/accounts\";\nimport type { Config } from \"@/config/models\";\nimport { ConfigError } from \"@/errors\";\nimport { resolveNetworkRpcUrl } from \"@/networks\";\nimport {\n normalizeAddress,\n normalizePrivateKey,\n ValidationError,\n validateUrl,\n} from \"@/utils\";\n\nexport type { Config } from \"@/config/models\";\n\n/**\n * Fluent builder for {@link Config}.\n *\n * @example\n * ```ts\n * const cfg = new ConfigBuilder()\n * .walletPrivateKey('0x...')\n * .build();\n * ```\n *\n * All fields can also be supplied from environment variables via {@link fromEnv}.\n */\nexport class ConfigBuilder {\n private _rpcUrl: string | undefined =\n \"https://ethereum.sepolia.api.4mica.xyz/\";\n private _walletPrivateKey: string | undefined;\n private _signer: Account | undefined;\n private _ethereumHttpRpcUrl?: string;\n private _contractAddress?: string;\n private _adminApiKey?: string;\n private _bearerToken?: string;\n private _authEnabled = true;\n private _authUrl?: string;\n private _authRefreshMarginSecs?: number;\n\n /** Set the 4Mica core RPC URL directly. Use {@link network} to select a hosted network by name instead. Defaults to `https://ethereum.sepolia.api.4mica.xyz/`. */\n rpcUrl(value: string): ConfigBuilder {\n this._rpcUrl = value;\n return this;\n }\n\n /**\n * Select a hosted 4Mica network by shorthand or CAIP-2 identifier.\n * Resolves to the corresponding core API URL.\n * Mutually exclusive with {@link rpcUrl} — last call wins.\n *\n * Supported values: `\"base\"` / `\"eip155:8453\"`, `\"base-sepolia\"` / `\"eip155:84532\"`,\n * `\"ethereum-sepolia\"` / `\"eip155:11155111\"`.\n *\n * @throws {@link ConfigError} if the network is not recognised.\n *\n * @example\n * ```ts\n * new ConfigBuilder().network(\"base\").walletPrivateKey(\"0x...\").build();\n * new ConfigBuilder().network(\"eip155:8453\").walletPrivateKey(\"0x...\").build();\n * ```\n */\n network(value: string): ConfigBuilder {\n const url = resolveNetworkRpcUrl(value);\n if (!url) {\n throw new ConfigError(\n `unknown network \"${value}\". Use a known shorthand (e.g. \"base\") or CAIP-2 id, or call rpcUrl() directly.`,\n );\n }\n this._rpcUrl = url;\n return this;\n }\n\n /** Set the wallet private key (hex string). Mutually exclusive with {@link signer}. */\n walletPrivateKey(value: string): ConfigBuilder {\n this._walletPrivateKey = value;\n return this;\n }\n\n /** Set a pre-built viem `Account` directly. Mutually exclusive with {@link walletPrivateKey}. */\n signer(value: Account): ConfigBuilder {\n this._signer = value;\n return this;\n }\n\n /** Override the Ethereum HTTP RPC URL used for on-chain calls. */\n ethereumHttpRpcUrl(value: string): ConfigBuilder {\n this._ethereumHttpRpcUrl = value;\n return this;\n }\n\n /** Override the Core4Mica contract address. */\n contractAddress(value: string): ConfigBuilder {\n this._contractAddress = value;\n return this;\n }\n\n /** Set an admin API key for privileged RPC endpoints. */\n adminApiKey(value: string): ConfigBuilder {\n this._adminApiKey = value;\n return this;\n }\n\n /** Set a static bearer token for authenticated RPC calls. Disables SIWE auth. */\n bearerToken(value: string): ConfigBuilder {\n this._bearerToken = value;\n return this;\n }\n\n /** Enable SIWE authentication using the default RPC URL as the auth endpoint. Auth is enabled by default; this is a no-op unless you previously called a method that disabled it. */\n enableAuth(): ConfigBuilder {\n this._authEnabled = true;\n return this;\n }\n\n /** Set a custom SIWE authentication endpoint and enable auth. */\n authUrl(value: string): ConfigBuilder {\n this._authUrl = value;\n this._authEnabled = true;\n return this;\n }\n\n /** Set the number of seconds before token expiry at which the session proactively refreshes. Enables auth. */\n authRefreshMarginSecs(value: number): ConfigBuilder {\n this._authRefreshMarginSecs = value;\n this._authEnabled = true;\n return this;\n }\n\n /**\n * Load configuration from environment variables.\n *\n * Recognised variables:\n * - `4MICA_NETWORK` — shorthand or CAIP-2 id (e.g. `base`); takes precedence over `4MICA_RPC_URL`\n * - `4MICA_RPC_URL`\n * - `4MICA_WALLET_PRIVATE_KEY`\n * - `4MICA_ETHEREUM_HTTP_RPC_URL`\n * - `4MICA_CONTRACT_ADDRESS`\n * - `4MICA_ADMIN_API_KEY`\n * - `4MICA_BEARER_TOKEN`\n * - `4MICA_AUTH_URL`\n * - `4MICA_AUTH_REFRESH_MARGIN_SECS`\n *\n * @param source - Environment source to read from. Defaults to `process.env`\n * when available (Node/Bun) and an empty object otherwise. Runtime adapters\n * (`@4mica/sdk-node`, `@4mica/sdk-deno`, …) pass their runtime's env here so\n * the core stays free of any hard `process` reference.\n */\n fromEnv(source?: Record<string, string | undefined>): ConfigBuilder {\n const env =\n source ??\n (globalThis as { process?: { env?: Record<string, string | undefined> } })\n .process?.env ??\n {};\n if (env[\"4MICA_NETWORK\"]) this.network(env[\"4MICA_NETWORK\"]);\n else if (env[\"4MICA_RPC_URL\"]) this._rpcUrl = env[\"4MICA_RPC_URL\"];\n if (env[\"4MICA_WALLET_PRIVATE_KEY\"])\n this._walletPrivateKey = env[\"4MICA_WALLET_PRIVATE_KEY\"];\n if (env[\"4MICA_ETHEREUM_HTTP_RPC_URL\"])\n this._ethereumHttpRpcUrl = env[\"4MICA_ETHEREUM_HTTP_RPC_URL\"];\n if (env[\"4MICA_CONTRACT_ADDRESS\"])\n this._contractAddress = env[\"4MICA_CONTRACT_ADDRESS\"];\n if (env[\"4MICA_ADMIN_API_KEY\"])\n this._adminApiKey = env[\"4MICA_ADMIN_API_KEY\"];\n if (env[\"4MICA_BEARER_TOKEN\"])\n this._bearerToken = env[\"4MICA_BEARER_TOKEN\"];\n if (env[\"4MICA_AUTH_URL\"]) {\n this._authUrl = env[\"4MICA_AUTH_URL\"];\n this._authEnabled = true;\n }\n if (env[\"4MICA_AUTH_REFRESH_MARGIN_SECS\"]) {\n this._authRefreshMarginSecs = Number(\n env[\"4MICA_AUTH_REFRESH_MARGIN_SECS\"],\n );\n this._authEnabled = true;\n }\n return this;\n }\n\n /**\n * Validate all settings and return an immutable {@link Config}.\n *\n * @throws {@link ConfigError} if required fields are missing, URLs are invalid,\n * or the auth refresh margin is not a finite non-negative number.\n */\n build(): Config {\n if (!this._signer && !this._walletPrivateKey) {\n throw new ConfigError(\"missing signer or wallet_private_key\");\n }\n if (!this._rpcUrl) {\n throw new ConfigError(\"missing rpc_url\");\n }\n\n try {\n const rpcUrl = validateUrl(this._rpcUrl);\n const walletPrivateKey = this._walletPrivateKey\n ? normalizePrivateKey(this._walletPrivateKey)\n : undefined;\n\n const signer: Account =\n this._signer ?? privateKeyToAccount(walletPrivateKey! as `0x${string}`);\n\n const ethereumHttpRpcUrl = this._ethereumHttpRpcUrl\n ? validateUrl(this._ethereumHttpRpcUrl)\n : undefined;\n const contractAddress = this._contractAddress\n ? normalizeAddress(this._contractAddress)\n : undefined;\n const authUrl = this._authUrl ? validateUrl(this._authUrl) : undefined;\n const refreshMargin =\n this._authRefreshMarginSecs !== undefined\n ? this._authRefreshMarginSecs\n : 60;\n if (!Number.isFinite(refreshMargin) || refreshMargin < 0) {\n throw new ValidationError(\"invalid auth refresh margin\");\n }\n const authEnabled = this._authEnabled;\n\n return {\n rpcUrl,\n signer,\n ethereumHttpRpcUrl,\n contractAddress,\n adminApiKey: this._adminApiKey,\n bearerToken: this._bearerToken,\n authUrl: authEnabled ? (authUrl ?? rpcUrl) : undefined,\n authRefreshMarginSecs: authEnabled ? refreshMargin : undefined,\n };\n } catch (err) {\n if (err instanceof ValidationError) {\n throw new ConfigError(err.message);\n }\n throw err;\n }\n }\n}\n","import {\n type Account,\n type Hex,\n hashMessage,\n hashTypedData,\n hexToSignature,\n keccak256,\n type SerializeTransactionFn,\n type SignableMessage,\n serializeTransaction,\n type TransactionSerializable,\n type TypedDataDefinition,\n} from \"viem\";\nimport { toAccount } from \"viem/accounts\";\nimport type { CdpAccountConfig } from \"@/wallet/models\";\n\n/** Creates a viem Account backed by a Coinbase CDP MPC wallet (private key never leaves CDP). */\nexport async function createCdpAccount(\n config: CdpAccountConfig,\n): Promise<Account> {\n const { CdpClient } = await import(\"@coinbase/cdp-sdk\");\n\n const cdp = new CdpClient({\n apiKeyId: config.apiKeyId,\n apiKeySecret: config.apiKeySecret,\n walletSecret: config.walletSecret,\n });\n\n const evmAccount = await cdp.evm.getOrCreateAccount({ name: config.name });\n const address = evmAccount.address as Hex;\n\n async function signMessage({\n message,\n }: {\n message: SignableMessage;\n }): Promise<Hex> {\n if (typeof message === \"string\") {\n // CDP's signMessage applies the EIP-191 prefix internally.\n const result = await cdp.evm.signMessage({ address, message });\n return result.signature as Hex;\n }\n const hash = hashMessage(message);\n const result = await cdp.evm.signHash({ address, hash });\n return result.signature as Hex;\n }\n\n async function signTypedData(parameters: TypedDataDefinition): Promise<Hex> {\n // Always hash locally with viem (guaranteed correct EIP-712 encoding including\n // non-standard types like uint64) and sign only the hash via CDP.\n // CDP's native signTypedData can silently produce a wrong hash for custom types,\n // which would pass without error but fail signature verification on the core side.\n const hash = hashTypedData(parameters);\n const result = await cdp.evm.signHash({ address, hash });\n return result.signature as Hex;\n }\n\n async function signTransaction(\n transaction: TransactionSerializable,\n options?: { serializer?: SerializeTransactionFn },\n ): Promise<Hex> {\n const serializer = options?.serializer ?? serializeTransaction;\n const hash = keccak256(serializer(transaction) as Hex);\n const result = await cdp.evm.signHash({ address, hash });\n const { r, s, yParity } = hexToSignature(result.signature as Hex);\n return serializer(transaction, { r, s, yParity }) as Hex;\n }\n\n // viem's signTypedData generic cannot be satisfied by a hand-rolled adapter without casting — same pattern as hdKeyToAccount.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return toAccount({\n address,\n signMessage,\n signTypedData,\n signTransaction,\n } as any) as Account;\n}\n","/**\n * Edge-safe base64 helpers.\n *\n * Uses only Web-standard `atob`/`btoa` + `TextEncoder`/`TextDecoder`, which are\n * available on Node (>=16), Bun, Deno, browsers, and edge/worker runtimes — so\n * the server paywall path never depends on Node's `Buffer`.\n */\n\nexport function base64ToBytes(b64: string): Uint8Array {\n const binary = atob(b64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i += 1) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n\nexport function bytesToBase64(bytes: Uint8Array): string {\n let binary = \"\";\n for (let i = 0; i < bytes.length; i += 1) {\n binary += String.fromCharCode(bytes[i] as number);\n }\n return btoa(binary);\n}\n\nexport function base64ToUtf8(b64: string): string {\n return new TextDecoder().decode(base64ToBytes(b64));\n}\n\nexport function utf8ToBase64(text: string): string {\n return bytesToBase64(new TextEncoder().encode(text));\n}\n","import { X402Error } from \"@/errors\";\nimport { base64ToUtf8 } from \"@/server/base64\";\nimport type { X402PaymentEnvelope } from \"@/server/models\";\n\n/**\n * Decode a base64 `X-PAYMENT` header into its x402 payment envelope.\n *\n * Runtime-neutral and edge-safe (no `Buffer`). Shared by the payer-side\n * {@link X402Flow} and the server-side paywall so both agree on the wire format.\n *\n * @throws {@link X402Error} if the header is missing or not valid base64 JSON.\n */\nexport function parsePaymentHeader(header: string): X402PaymentEnvelope {\n if (!header || typeof header !== \"string\") {\n throw new X402Error(\"missing payment header\");\n }\n try {\n const decoded = base64ToUtf8(header);\n return JSON.parse(decoded) as X402PaymentEnvelope;\n } catch (err) {\n throw new X402Error(`invalid payment header: ${String(err)}`);\n }\n}\n","import { X402Error } from \"@/errors\";\nimport {\n PaymentGuaranteeRequestClaims,\n PaymentGuaranteeRequestClaimsV2,\n type PaymentSignature,\n SigningScheme,\n} from \"@/models\";\nimport { buildPaymentPayload } from \"@/payment\";\nimport type { FetchFn } from \"@/rpc\";\nimport { parsePaymentHeader } from \"@/server/envelope\";\nimport { normalizeAddress, parseU256 } from \"@/utils\";\nimport {\n computeValidationRequestHash,\n computeValidationSubjectHash,\n} from \"@/validation\";\nimport type {\n PaymentRequirementsExtra,\n PaymentRequirementsV1,\n PaymentRequirementsV2,\n TabResponse,\n X402PaymentEnvelopeV1,\n X402PaymentEnvelopeV2,\n X402PaymentRequired,\n X402ResourceInfo,\n X402SettledPayment,\n X402SignedPayment,\n} from \"@/x402/models\";\n\nexport * from \"@/x402/models\";\n\ntype ValidationPolicyExtra = Required<\n Pick<\n PaymentRequirementsExtra,\n | \"validationRegistryAddress\"\n | \"validationChainId\"\n | \"validatorAddress\"\n | \"validatorAgentId\"\n | \"minValidationScore\"\n | \"jobHash\"\n >\n> &\n PaymentRequirementsExtra;\n\nfunction hasValidationPolicy(\n extra: PaymentRequirementsExtra | undefined,\n): extra is ValidationPolicyExtra {\n return !!(\n extra?.validationRegistryAddress &&\n extra?.validatorAddress &&\n extra?.validatorAgentId !== undefined &&\n extra?.minValidationScore !== undefined &&\n extra?.validationChainId !== undefined &&\n extra?.jobHash\n );\n}\n\n/**\n * Minimal signing interface required by {@link X402Flow}.\n * Implemented by {@link UserClient} from the main SDK client.\n */\nexport interface FlowSigner {\n signPayment(\n claims: PaymentGuaranteeRequestClaims | PaymentGuaranteeRequestClaimsV2,\n scheme: SigningScheme,\n ): Promise<PaymentSignature>;\n}\n\n/**\n * Handles the x402 HTTP 402 payment protocol for 4Mica.\n *\n * Orchestrates the full client-side x402 flow: resolving a tab from the recipient's\n * tab endpoint, building and signing payment claims (V1 or V2), and optionally settling\n * the payment against a facilitator service.\n *\n * @example\n * ```ts\n * const flow = X402Flow.fromClient(client);\n * const signed = await flow.signPayment(paymentRequirements, userAddress);\n * // attach signed.header as the X-PAYMENT header on the protected request\n * ```\n */\nexport class X402Flow {\n private fetchFn: FetchFn;\n\n /**\n * @param signer - Payment signer, typically `client.user`.\n * @param fetchFn - HTTP fetch implementation. Defaults to global `fetch`.\n */\n constructor(\n private signer: FlowSigner,\n fetchFn: FetchFn = fetch,\n ) {\n this.fetchFn = fetchFn;\n }\n\n /**\n * Convenience factory — creates an `X402Flow` from the user sub-client of a `Client`.\n *\n * @param client - Any object with a `.user` property implementing {@link FlowSigner}.\n */\n static fromClient(client: { user: FlowSigner }): X402Flow {\n return new X402Flow(client.user);\n }\n\n /**\n * Sign an x402 V1 payment.\n *\n * Resolves a tab from `paymentRequirements.extra.tabEndpoint`, builds V1 claims,\n * signs them with EIP-712, and returns the base64-encoded payment header together\n * with the raw payload and signature.\n *\n * @param paymentRequirements - V1 payment requirements from the `402 Payment Required` response.\n * @param userAddress - Address of the paying user.\n * @returns Signed payment ready to attach as the `X-PAYMENT` request header.\n * @throws {@link X402Error} if the scheme is not a 4Mica scheme or the tab endpoint fails.\n */\n async signPayment(\n paymentRequirements: PaymentRequirementsV1,\n userAddress: string,\n ): Promise<X402SignedPayment> {\n X402Flow.validateScheme(paymentRequirements.scheme);\n const tab = await this.requestTab(1, paymentRequirements, userAddress);\n\n const claims = this.buildClaims(paymentRequirements, tab, userAddress);\n const signature = await this.signer.signPayment(\n claims,\n SigningScheme.EIP712,\n );\n const paymentPayload = buildPaymentPayload(claims, signature);\n\n const envelope: X402PaymentEnvelopeV1 = {\n x402Version: 1,\n scheme: paymentRequirements.scheme,\n network: paymentRequirements.network,\n payload: paymentPayload,\n };\n const header = Buffer.from(JSON.stringify(envelope)).toString(\"base64\");\n return { header, payload: paymentPayload, signature };\n }\n\n /**\n * Sign an x402 V2 payment, optionally including a V2 validation policy.\n *\n * If `accepted.extra` contains all required validation policy fields\n * (`validationRegistryAddress`, `validatorAddress`, `validatorAgentId`,\n * `minValidationScore`, `validationChainId`, `jobHash`), the claims are built as V2 with\n * the computed `validationSubjectHash` and `validationRequestHash`. Otherwise\n * falls back to V1 claims.\n *\n * @param paymentRequired - The original `402 Payment Required` response object.\n * @param accepted - The accepted V2 payment requirements.\n * @param userAddress - Address of the paying user.\n * @returns Signed payment ready to attach as the `X-PAYMENT` request header.\n * @throws {@link X402Error} if the scheme is not a 4Mica scheme or the tab endpoint fails.\n */\n async signPaymentV2(\n paymentRequired: X402PaymentRequired,\n accepted: PaymentRequirementsV2,\n userAddress: string,\n ): Promise<X402SignedPayment> {\n X402Flow.validateScheme(accepted.scheme);\n const isV2Claims = hasValidationPolicy(accepted.extra);\n const tab = await this.requestTab(\n isV2Claims ? 2 : 1,\n accepted,\n userAddress,\n paymentRequired.resource,\n );\n\n const claims = isV2Claims\n ? this.buildClaimsV2(accepted, tab, userAddress)\n : this.buildClaims(accepted, tab, userAddress);\n\n const signature = await this.signer.signPayment(\n claims,\n SigningScheme.EIP712,\n );\n const paymentPayload = buildPaymentPayload(claims, signature);\n\n const envelope: X402PaymentEnvelopeV2 = {\n x402Version: 2,\n accepted: accepted,\n payload: paymentPayload,\n resource: paymentRequired.resource,\n };\n const header = Buffer.from(JSON.stringify(envelope)).toString(\"base64\");\n return { header, payload: paymentPayload, signature };\n }\n\n /**\n * Submit a signed payment to a facilitator for on-chain settlement.\n *\n * Sends a POST request to `{facilitatorUrl}/settle` with the payment header,\n * decoded payload, and payment requirements. Use this when the protected resource\n * requires facilitator-confirmed settlement before granting access.\n *\n * @param payment - Signed payment returned by {@link signPayment} or {@link signPaymentV2}.\n * @param paymentRequirements - V1 payment requirements included in the settlement request.\n * @param facilitatorUrl - Base URL of the facilitator service.\n * @returns The original payment plus the raw settlement response from the facilitator.\n * @throws {@link X402Error} if the facilitator returns a non-2xx response.\n */\n async settlePayment(\n payment: X402SignedPayment,\n paymentRequirements: PaymentRequirementsV1,\n facilitatorUrl: string,\n ): Promise<X402SettledPayment> {\n const url = `${facilitatorUrl.replace(/\\/$/, \"\")}/settle`;\n const paymentPayload = X402Flow.decodePaymentHeader(payment.header);\n const x402Version =\n typeof paymentPayload === \"object\" &&\n paymentPayload &&\n \"x402Version\" in paymentPayload\n ? (paymentPayload as { x402Version?: number }).x402Version\n : undefined;\n const response = await this.fetchFn(url, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n ...(x402Version ? { x402Version } : {}),\n paymentHeader: payment.header,\n paymentPayload,\n paymentRequirements,\n }),\n });\n const data = await response.text();\n if (!response.ok) {\n throw new X402Error(\n `settlement failed with status ${response.status}: ${data}`,\n );\n }\n const settlement = data ? JSON.parse(data) : {};\n return { payment, settlement };\n }\n protected async requestTab(\n guaranteeVersion: number,\n paymentRequirements: PaymentRequirementsV1 | PaymentRequirementsV2,\n userAddress: string,\n resource?: X402ResourceInfo,\n ): Promise<TabResponse> {\n const tabEndpoint = paymentRequirements.extra?.tabEndpoint;\n if (!tabEndpoint || typeof tabEndpoint !== \"string\") {\n throw new X402Error(\"missing tabEndpoint in paymentRequirements.extra\");\n }\n const resp = await this.fetchFn(tabEndpoint, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n guaranteeVersion,\n userAddress,\n paymentRequirements,\n resource,\n }),\n });\n if (!resp.ok) {\n const text = await resp.text();\n throw new X402Error(`tab resolution failed: ${resp.status} ${text}`);\n }\n const body = await resp.json();\n return {\n userAddress: body.userAddress ?? body.user_address,\n nextReqId:\n body.nextReqId ?? body.next_req_id ?? body.reqId ?? body.req_id,\n };\n }\n\n protected buildClaims(\n requirements: PaymentRequirementsV1 | PaymentRequirementsV2,\n tab: TabResponse,\n userAddress: string,\n ): PaymentGuaranteeRequestClaims {\n const reqId =\n tab.nextReqId !== undefined && tab.nextReqId !== null\n ? parseU256(tab.nextReqId)\n : 0n;\n const amount = parseU256(\n \"maxAmountRequired\" in requirements\n ? requirements.maxAmountRequired\n : requirements.amount,\n );\n if (tab.userAddress.toLowerCase() !== userAddress.toLowerCase()) {\n throw new X402Error(\n `user mismatch in paymentRequirements: found ${tab.userAddress}, expected ${userAddress}`,\n );\n }\n const timestamp = Math.floor(Date.now() / 1000);\n return PaymentGuaranteeRequestClaims.new(\n userAddress,\n normalizeAddress(requirements.payTo),\n amount,\n timestamp,\n requirements.asset,\n reqId,\n );\n }\n\n protected buildClaimsV2(\n requirements: PaymentRequirementsV2,\n tab: TabResponse,\n userAddress: string,\n ): PaymentGuaranteeRequestClaimsV2 {\n const base = this.buildClaims(requirements, tab, userAddress);\n const extra = requirements.extra!;\n\n const validationSubjectHash = computeValidationSubjectHash(base);\n\n const partialClaims = new PaymentGuaranteeRequestClaimsV2({\n userAddress: base.userAddress,\n recipientAddress: base.recipientAddress,\n reqId: base.reqId,\n amount: base.amount,\n timestamp: base.timestamp,\n assetAddress: base.assetAddress,\n validationRegistryAddress: extra.validationRegistryAddress!,\n validationRequestHash: \"0x\" + \"00\".repeat(32),\n validationChainId: extra.validationChainId!,\n validatorAddress: extra.validatorAddress!,\n validatorAgentId: parseU256(extra.validatorAgentId!),\n minValidationScore: extra.minValidationScore!,\n validationSubjectHash,\n jobHash: extra.jobHash!,\n requiredValidationTag: extra.requiredValidationTag ?? \"\",\n });\n\n const validationRequestHash = computeValidationRequestHash(partialClaims);\n\n return new PaymentGuaranteeRequestClaimsV2({\n ...partialClaims,\n validationRequestHash,\n });\n }\n\n private static validateScheme(scheme: string): void {\n if (!scheme.toLowerCase().includes(\"4mica\")) {\n throw new X402Error(`invalid scheme: ${scheme}`);\n }\n }\n\n private static decodePaymentHeader(\n header: string,\n ): X402PaymentEnvelopeV1 | X402PaymentEnvelopeV2 {\n // Shared, edge-safe decoder (no Buffer) — see ../server/envelope.\n return parsePaymentHeader(header);\n }\n\n // payment payload construction is centralized in ../payment\n}\n"]}
|