veriq-client 0.1.0 → 0.1.2

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors.ts","../src/presets.ts","../src/schema.ts","../src/rpc.ts","../src/transport.ts","../src/client.ts","../src/format.ts","../src/pretty.ts"],"names":["ERROR_CODES","CLIENT_CODES","DEFAULT_URL","ERROR_MEANINGS","ERROR_HINTS","_VeriqError","code","message","opts","nameForCode","rid","receiptIdFrom","__name","VeriqError","_InvalidProofError","InvalidProofError","_RootUnavailableError","RootUnavailableError","_UnsupportedVerificationError","UnsupportedVerificationError","_PrivacyUnavailableError","PrivacyUnavailableError","_PolicyUnsatisfiableError","PolicyUnsatisfiableError","_ProviderTimeoutError","ProviderTimeoutError","_AllProvidersFailedError","AllProvidersFailedError","_InvalidRequestError","InvalidRequestError","_InternalError","InternalError","_EngineUnreachableError","EngineUnreachableError","_VeriqSchemaError","issues","VeriqSchemaError","ERROR_CLASSES","ALL_CODES","name","c","errorNameForCode","n","data","errorFromRpc","err","Cls","isVeriqError","verifiedFinalized","verifiedCompare","privateVerified","devUnverified","presets","HEX","hex","bytes","z","u64","Hex32Schema","VerificationStatusSchema","RootSourceSchema","VerifierLocationSchema","MechanismSchema","TransportKindSchema","ComparisonSchema","IdentitySchema","BlockSchema","BootstrapSchema","VerificationSchema","PrivacySchema","AttemptOutcomeSchema","RoutingAttemptSchema","RoutingSchema","FreshnessSchema","WarningSchema","TrustReceiptSchema","VerificationPolicySchema","BlockPolicySchema","PolicySchema","OUTCOME_LABEL","normalizeAttempt","raw","a","outcome","reason","AttemptSchema","RpcErrorSchema","ReadResultSchema","ReceiptRecordSchema","ReceiptListSchema","BreakerStateSchema","ProviderHealthSchema","LightClientStatusSchema","EngineHealthShape","isObj","v","normalizeHealth","providers","providerCount","bootstrap","rootSource","EngineHealthSchema","CapabilitiesSchema","valueAt","input","path","cur","key","show","formatIssues","error","root","issue","got","what","nextId","safeUrl","url","unreachable","ctx","detail","cause","at","send","init","label","controller","timedOut","timer","onAbort","started","res","body","rpcCall","method","params","e","httpGet","parseWith","schema","blockTag","index","createTransport","client","policy","strict","last","record","r","verifiedPath","tag","request","eip1193","transport","DEFAULT_ENGINE_URL","ADDRESS_RE","SLOT_RE","attemptsFromReceipt","receipt","invalid","assertAddress","address","assertSlot","slot","assertPolicy","createVeriq","options","fetchFn","readTimeout","p","shortTimeout","read","signal","id","limit","list","WEI","formatEth","wei","decimals","unit","neg","abs","whole","frac","grouped","shortHash","head","tail","h","formatNumber","rootSourceLabel","source","split","statusTone","status","formatValue","value","receiptRows","attempts","rows","total","s","tried","provider","w","formatReceipt","healthRows","lc","lag","engine","PALETTE","env","supportsColor","painter","on","tone","text","bold","rgb","box","title","lines","paint","width","l","top","bottom","LABEL","prettyReceipt","gap","prettyHealth","health","header","widths","i","fmt","cells","plain","bad","prettyError"],"mappings":"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","file":"index.cjs","sourcesContent":["/** JSON-RPC error codes, mirroring `ErrorCode` in backend/crates/core/src/error.rs. */\r\nexport const ERROR_CODES = {\r\n INVALID_PROOF: -32010,\r\n ROOT_UNAVAILABLE: -32011,\r\n UNSUPPORTED_VERIFICATION: -32012,\r\n PRIVACY_UNAVAILABLE: -32013,\r\n POLICY_UNSATISFIABLE: -32014,\r\n PROVIDER_TIMEOUT: -32015,\r\n ALL_PROVIDERS_FAILED: -32016,\r\n INVALID_REQUEST: -32602,\r\n INTERNAL_ERROR: -32603,\r\n} as const\r\n\r\n/** Client-side codes (not sent by the engine). */\r\nexport const CLIENT_CODES = { ENGINE_UNREACHABLE: -1, SCHEMA_MISMATCH: -2 } as const\r\n\r\nexport type EngineErrorName = keyof typeof ERROR_CODES\r\nexport type VeriqErrorName = EngineErrorName | keyof typeof CLIENT_CODES | 'UNKNOWN'\r\n\r\nconst DEFAULT_URL = 'http://127.0.0.1:8547'\r\n\r\n/** What each code means, in one line. */\r\nexport const ERROR_MEANINGS: Record<EngineErrorName, string> = {\r\n INVALID_PROOF: 'Every attempted proof failed verification against the pinned state root.',\r\n ROOT_UNAVAILABLE: 'No trusted root: the light client is not synced and dev mode is off.',\r\n UNSUPPORTED_VERIFICATION: 'This method or block tag cannot be proven under the chosen policy.',\r\n PRIVACY_UNAVAILABLE: 'Privacy is required but no private-transport provider is healthy. Nothing was sent.',\r\n POLICY_UNSATISFIABLE: 'The policy contradicts itself, e.g. \"latest\" blocks with verification required.',\r\n PROVIDER_TIMEOUT: 'The shared deadline ran out before any provider returned a valid proof.',\r\n ALL_PROVIDERS_FAILED: 'Every eligible provider failed or was cooling down.',\r\n INVALID_REQUEST: 'The request parameters are malformed (bad address, slot or policy).',\r\n INTERNAL_ERROR: 'The engine could not complete the request because an internal service is unavailable.',\r\n}\r\n\r\n/** What to do about it, in one line. */\r\nexport const ERROR_HINTS: Record<VeriqErrorName, string> = {\r\n INVALID_PROOF: 'Every provider sent a proof that does not match the finalized root. Add an honest provider or wait for cooldowns.',\r\n ROOT_UNAVAILABLE: \"The light client hasn't synced a finalized root yet. Wait ~1 min or check /health.\",\r\n UNSUPPORTED_VERIFICATION: \"Veriq can't prove this method or block tag. Use blockTag 'finalized' or verification 'preferred'.\",\r\n PRIVACY_UNAVAILABLE: \"No private-transport provider is healthy. Use privacy 'preferred' or 'off'.\",\r\n POLICY_UNSATISFIABLE: \"latest + verification=required can't be proven. Use blockPolicy 'finalized'.\",\r\n PROVIDER_TIMEOUT: 'No valid proof arrived before the deadline. Raise timeoutMs or check provider health.',\r\n ALL_PROVIDERS_FAILED: 'Every provider failed or is cooling down. Check veriq health for breaker states.',\r\n INVALID_REQUEST: 'Check the address (0x + 40 hex), slot (0x + up to 64 hex) and policy fields.',\r\n INTERNAL_ERROR: 'Retry shortly; if the error persists, check the engine health endpoint.',\r\n ENGINE_UNREACHABLE: `No Veriq engine at ${DEFAULT_URL}. Start it with: cd backend && cargo run -p veriq-server`,\r\n SCHEMA_MISMATCH: 'The engine answered with a shape this SDK does not understand. Make sure SDK and engine versions match.',\r\n UNKNOWN: 'Unexpected engine error. Check the engine logs.',\r\n}\r\n\r\nexport interface VeriqErrorOptions {\r\n data?: unknown\r\n receiptId?: string\r\n hint?: string\r\n cause?: unknown\r\n}\r\n\r\n/**\r\n * Base class for every error the SDK throws. Fail-closed: a failed guarantee is an error,\r\n * never a weaker answer.\r\n * @example\r\n * try { await veriq.readBalance({ address }) }\r\n * catch (e) { if (isVeriqError(e)) console.error(e.codeName, e.hint) }\r\n */\r\nexport class VeriqError extends Error {\r\n /** JSON-RPC engine code or a negative client code. */\r\n readonly code: number\r\n /** Stable name such as \"POLICY_UNSATISFIABLE\". */\r\n readonly codeName: VeriqErrorName\r\n /** One-line advice on what to do next. */\r\n readonly hint: string\r\n readonly data?: unknown\r\n /** Request id of the receipt, when the engine stored one. */\r\n readonly receiptId?: string\r\n\r\n constructor(code: number, message: string, opts: VeriqErrorOptions = {}) {\r\n super(message, opts.cause === undefined ? undefined : { cause: opts.cause })\r\n this.name = new.target.name\r\n this.code = code\r\n this.codeName = nameForCode(code)\r\n this.hint = opts.hint ?? ERROR_HINTS[this.codeName]\r\n if (opts.data !== undefined) this.data = opts.data\r\n const rid = opts.receiptId ?? receiptIdFrom(opts.data)\r\n if (rid !== undefined) this.receiptId = rid\r\n }\r\n\r\n /** What the code means (for engine codes). */\r\n get meaning(): string {\r\n return this.codeName in ERROR_MEANINGS ? ERROR_MEANINGS[this.codeName as EngineErrorName] : this.message\r\n }\r\n\r\n /** `VeriqError[-32014 POLICY_UNSATISFIABLE]: message — hint` */\r\n override toString(): string {\r\n return `VeriqError[${this.code} ${this.codeName}]: ${this.message} — ${this.hint}`\r\n }\r\n}\r\n\r\nexport class InvalidProofError extends VeriqError {}\r\nexport class RootUnavailableError extends VeriqError {}\r\nexport class UnsupportedVerificationError extends VeriqError {}\r\nexport class PrivacyUnavailableError extends VeriqError {}\r\nexport class PolicyUnsatisfiableError extends VeriqError {}\r\nexport class ProviderTimeoutError extends VeriqError {}\r\nexport class AllProvidersFailedError extends VeriqError {}\r\nexport class InvalidRequestError extends VeriqError {}\r\nexport class InternalError extends VeriqError {}\r\n/** The engine could not be reached (network failure, nothing listening). */\r\nexport class EngineUnreachableError extends VeriqError {}\r\n/** The engine's answer did not match the receipt schema. `issues` lists readable paths. */\r\nexport class VeriqSchemaError extends VeriqError {\r\n readonly issues: string[]\r\n constructor(issues: string[], opts: VeriqErrorOptions = {}) {\r\n super(CLIENT_CODES.SCHEMA_MISMATCH, issues.join('; '), opts)\r\n this.issues = issues\r\n }\r\n}\r\n\r\ntype ErrorClass = new (code: number, message: string, opts?: VeriqErrorOptions) => VeriqError\r\n\r\n/** Code -> error class. */\r\nexport const ERROR_CLASSES: Record<number, ErrorClass> = {\r\n [ERROR_CODES.INVALID_PROOF]: InvalidProofError,\r\n [ERROR_CODES.ROOT_UNAVAILABLE]: RootUnavailableError,\r\n [ERROR_CODES.UNSUPPORTED_VERIFICATION]: UnsupportedVerificationError,\r\n [ERROR_CODES.PRIVACY_UNAVAILABLE]: PrivacyUnavailableError,\r\n [ERROR_CODES.POLICY_UNSATISFIABLE]: PolicyUnsatisfiableError,\r\n [ERROR_CODES.PROVIDER_TIMEOUT]: ProviderTimeoutError,\r\n [ERROR_CODES.ALL_PROVIDERS_FAILED]: AllProvidersFailedError,\r\n [ERROR_CODES.INVALID_REQUEST]: InvalidRequestError,\r\n [ERROR_CODES.INTERNAL_ERROR]: InternalError,\r\n [CLIENT_CODES.ENGINE_UNREACHABLE]: EngineUnreachableError,\r\n}\r\n\r\nconst ALL_CODES: Record<string, number> = { ...ERROR_CODES, ...CLIENT_CODES }\r\n\r\nfunction nameForCode(code: number): VeriqErrorName {\r\n for (const [name, c] of Object.entries(ALL_CODES)) if (c === code) return name as VeriqErrorName\r\n return 'UNKNOWN'\r\n}\r\n\r\n/** \"POLICY_UNSATISFIABLE\" for -32014, undefined for unknown codes. */\r\nexport function errorNameForCode(code: number): EngineErrorName | undefined {\r\n const n = nameForCode(code)\r\n return n in ERROR_CODES ? (n as EngineErrorName) : undefined\r\n}\r\n\r\nfunction receiptIdFrom(data: unknown): string | undefined {\r\n if (data && typeof data === 'object' && 'receiptId' in data && typeof data.receiptId === 'string') return data.receiptId\r\n return undefined\r\n}\r\n\r\n/** Build the right subclass from a JSON-RPC error object. */\r\nexport function errorFromRpc(err: { code: number; message: string; data?: unknown }): VeriqError {\r\n const Cls = ERROR_CLASSES[err.code] ?? VeriqError\r\n return new Cls(err.code, err.message, { data: err.data })\r\n}\r\n\r\n/**\r\n * Type guard for any SDK error.\r\n * @example\r\n * if (isVeriqError(e) && e instanceof PolicyUnsatisfiableError) showFinalizedHint()\r\n */\r\nexport function isVeriqError(e: unknown): e is VeriqError {\r\n return e instanceof VeriqError\r\n}\r\n","import type { Policy } from './types'\r\n\r\n/**\r\n * Only proven answers, pinned to finalized blocks. The default.\r\n * @example createVeriq({ policy: verifiedFinalized })\r\n */\r\nexport const verifiedFinalized: Policy = Object.freeze({\r\n verification: 'required',\r\n privacy: 'off',\r\n consistency: 'single',\r\n blockPolicy: 'finalized',\r\n timeoutMs: 8000,\r\n})\r\n\r\n/**\r\n * Like verifiedFinalized, and also asks a second provider at the same block (recorded as agree / divergent).\r\n * @example veriq.withPolicy(verifiedCompare)\r\n */\r\nexport const verifiedCompare: Policy = Object.freeze({ ...verifiedFinalized, consistency: 'compare' })\r\n\r\n/**\r\n * Verified and private: only private-transport providers. Fails with PRIVACY_UNAVAILABLE rather than sending direct.\r\n * @example veriq.readBalance({ address, policy: privateVerified })\r\n */\r\nexport const privateVerified: Policy = Object.freeze({ ...verifiedFinalized, privacy: 'required' })\r\n\r\n/**\r\n * For local development without a synced light client: returns `unverified` receipts instead of failing.\r\n * @example createVeriq({ policy: devUnverified })\r\n */\r\nexport const devUnverified: Policy = Object.freeze({\r\n verification: 'preferred',\r\n privacy: 'off',\r\n consistency: 'single',\r\n blockPolicy: 'finalized',\r\n timeoutMs: 8000,\r\n})\r\n\r\n/**\r\n * All presets by name.\r\n * @example presets.verifiedFinalized\r\n */\r\nexport const presets = { verifiedFinalized, verifiedCompare, privateVerified, devUnverified } as const\r\nexport type PresetName = keyof typeof presets\r\n","import { z } from 'zod'\r\n\r\n/*\r\n * Mirrors backend/crates/core/src/receipt.rs and backend/crates/core/src/policy.rs field for field.\r\n * Change both in the same PR. B256 serializes as 0x-hex, u64/u32 as JSON numbers,\r\n * Option<T> as null, enums as kebab-case strings.\r\n */\r\n\r\nconst HEX = 'expected 0x-hex'\r\nconst hex = (bytes?: number) =>\r\n z\r\n .string({ required_error: HEX, invalid_type_error: HEX })\r\n .regex(bytes ? new RegExp(`^0x[0-9a-fA-F]{${bytes * 2}}$`) : /^0x[0-9a-fA-F]+$/, bytes ? `expected 0x-hex (${bytes} bytes)` : HEX)\r\n\r\nconst u64 = z.number({ required_error: 'expected a number' }).int().nonnegative()\r\n\r\n/** 32-byte hash (B256). */\r\nexport const Hex32Schema = hex(32)\r\n\r\n// ---------------------------------------------------------------- enums\r\n\r\nexport const VerificationStatusSchema = z.enum(['verified', 'unverified', 'unsupported'])\r\nexport const RootSourceSchema = z.enum(['local-light-client', 'fixture', 'untrusted-rpc'])\r\nexport const VerifierLocationSchema = z.enum(['local-engine', 'remote-engine', 'browser'])\r\nexport const MechanismSchema = z.enum(['account-proof', 'storage-proof', 'code-hash'])\r\nexport const TransportKindSchema = z.enum(['direct', 'ohttp', 'anyone-socks'])\r\nexport const ComparisonSchema = z.enum(['not-run', 'agree', 'divergent'])\r\n\r\n// ---------------------------------------------------------------- receipt.rs\r\n\r\nexport const IdentitySchema = z.object({\r\n requestId: z.string(),\r\n method: z.string(),\r\n requestBinding: z.string(),\r\n resultBinding: z.string(),\r\n})\r\n\r\nexport const BlockSchema = z.object({\r\n number: u64,\r\n hash: Hex32Schema,\r\n stateRoot: Hex32Schema,\r\n finalized: z.boolean(),\r\n})\r\n\r\nexport const BootstrapSchema = z.object({\r\n source: z.string().nullable().default(null),\r\n checkpoint: z.string().nullable().default(null),\r\n checkpointSource: z.string().nullable().default(null),\r\n})\r\n\r\nexport const VerificationSchema = z.object({\r\n status: VerificationStatusSchema,\r\n rootSource: RootSourceSchema,\r\n verifierLocation: VerifierLocationSchema,\r\n mechanisms: z.array(MechanismSchema),\r\n bootstrap: BootstrapSchema,\r\n})\r\n\r\nexport const PrivacySchema = z.object({\r\n transport: TransportKindSchema,\r\n mechanism: z.string().nullable().default(null),\r\n})\r\n\r\n/** `AttemptOutcome` in receipt.rs. */\r\nexport const AttemptOutcomeSchema = z.enum(['success', 'transport-failure', 'provider-error', 'invalid-proof'])\r\n\r\n/** `RoutingAttempt` in receipt.rs: one provider tried for this read. */\r\nexport const RoutingAttemptSchema = z.object({\r\n provider: z.string(),\r\n outcome: AttemptOutcomeSchema,\r\n elapsedMs: u64,\r\n failureReason: z.string().nullish(),\r\n})\r\n\r\nexport const RoutingSchema = z.object({\r\n comparison: ComparisonSchema,\r\n providersTried: u64,\r\n providerLabel: z.string().nullable().default(null),\r\n // #[serde(default)] in receipt.rs: older receipts without attempts still parse.\r\n attempts: z.array(RoutingAttemptSchema).default([]),\r\n})\r\n\r\nexport const FreshnessSchema = z.object({\r\n observedAt: u64,\r\n ageSeconds: u64,\r\n pinned: z.boolean(),\r\n})\r\n\r\nexport const WarningSchema = z.object({ code: z.string(), message: z.string() })\r\n\r\n/** The Trust Receipt attached to every engine answer (`Receipt` in receipt.rs). */\r\nexport const TrustReceiptSchema = z.object({\r\n identity: IdentitySchema,\r\n block: BlockSchema,\r\n verification: VerificationSchema,\r\n privacy: PrivacySchema,\r\n routing: RoutingSchema,\r\n freshness: FreshnessSchema,\r\n warnings: z.array(WarningSchema).default([]),\r\n})\r\n\r\n// ---------------------------------------------------------------- policy.rs (+ README \"Policies\")\r\n\r\n/** `VerificationPolicy` in policy.rs. */\r\nexport const VerificationPolicySchema = z.enum(['required', 'preferred', 'disabled'])\r\n/** `BlockPolicy` in policy.rs. */\r\nexport const BlockPolicySchema = z.enum(['finalized', 'latest'])\r\n\r\n/**\r\n * Full request policy. Only `verification` and `blockPolicy` exist in policy.rs today;\r\n * `privacy`, `consistency` and `timeoutMs` follow the README.\r\n */\r\nexport const PolicySchema = z.object({\r\n verification: VerificationPolicySchema,\r\n privacy: z.enum(['required', 'preferred', 'off']),\r\n consistency: z.enum(['single', 'compare']),\r\n blockPolicy: BlockPolicySchema,\r\n timeoutMs: z.number().int().min(1).max(120_000),\r\n})\r\n\r\n// ---------------------------------------------------------------- engine envelopes\r\n// Not part of the locked receipt: what the engine wraps around it.\r\n\r\n/** One provider attempt. `outcome` is \"ok\", an error name such as INVALID_PROOF, or \"transport_error\". */\r\n/** receipt.rs `AttemptOutcome` -> the display label used across the SDK and dashboard. */\r\nexport const OUTCOME_LABEL: Record<string, string> = {\r\n success: 'ok',\r\n 'invalid-proof': 'INVALID_PROOF',\r\n 'transport-failure': 'transport_error',\r\n 'provider-error': 'PROVIDER_ERROR',\r\n}\r\n\r\n/**\r\n * Accepts both attempt forms the engine writes: receipt.rs `RoutingAttempt`\r\n * ({ outcome: \"invalid-proof\", failureReason }) and the display form ({ outcome: \"INVALID_PROOF\", reason }).\r\n */\r\nfunction normalizeAttempt(raw: unknown): unknown {\r\n if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) return raw\r\n const a = raw as Record<string, unknown>\r\n const outcome = typeof a.outcome === 'string' ? (OUTCOME_LABEL[a.outcome] ?? a.outcome) : a.outcome\r\n const reason = a.reason ?? a.failureReason\r\n return { provider: a.provider, outcome, elapsedMs: a.elapsedMs, ...(reason != null ? { reason } : {}) }\r\n}\r\n\r\nexport const AttemptSchema = z.preprocess(\r\n normalizeAttempt,\r\n z.object({\r\n provider: z.string(),\r\n outcome: z.string(),\r\n elapsedMs: z.number().nonnegative(),\r\n reason: z.string().nullish(),\r\n }),\r\n)\r\n\r\nexport const RpcErrorSchema = z.object({\r\n code: z.number().int(),\r\n message: z.string(),\r\n data: z.unknown().optional(),\r\n})\r\n\r\n/** Result of veriq_readBalance / veriq_readStorage. `value` is a hex quantity. */\r\nexport const ReadResultSchema = z.object({\r\n value: hex(),\r\n receipt: TrustReceiptSchema,\r\n attempts: z.array(AttemptSchema).default([]),\r\n})\r\n\r\n/** A stored receipt row (GET /receipts, GET /receipts/:id). Failed reads carry `error` instead of `receipt`. */\r\nexport const ReceiptRecordSchema = z.object({\r\n id: z.string(),\r\n createdAt: z.number(),\r\n method: z.string(),\r\n params: z.object({ address: z.string().optional(), slot: z.string().optional() }),\r\n value: z.string().nullish(),\r\n blockNumber: u64.nullish(),\r\n receipt: TrustReceiptSchema.nullish(),\r\n error: RpcErrorSchema.nullish(),\r\n attempts: z.array(AttemptSchema).default([]),\r\n})\r\n\r\nexport const ReceiptListSchema = z.object({ receipts: z.array(ReceiptRecordSchema) })\r\n\r\nexport const BreakerStateSchema = z.enum(['closed', 'open', 'half-open'])\r\n\r\nexport const ProviderHealthSchema = z.object({\r\n name: z.string(),\r\n chainOk: z.boolean(),\r\n proofSupport: z.boolean(),\r\n eip1898: z.boolean(),\r\n transport: TransportKindSchema.default('direct'),\r\n breaker: z.object({\r\n state: BreakerStateSchema,\r\n cooldownUntil: z.number().nullish(),\r\n reason: z.string().nullish(),\r\n }),\r\n successRate: z.number().min(0).max(1).nullish(),\r\n lastError: z.string().nullish(),\r\n})\r\n\r\n/** `LightClientStatus` in backend/crates/light-client, plus optional head/checkpoint info. */\r\nexport const LightClientStatusSchema = z.object({\r\n synced: z.boolean(),\r\n finalizedNumber: u64.nullish(),\r\n finalizedHash: Hex32Schema.nullish(),\r\n lagSeconds: u64.nullish(),\r\n lastUpdateUnix: u64.nullish(),\r\n headNumber: u64.nullish(),\r\n checkpoint: z.string().nullish(),\r\n checkpointSource: z.string().nullish(),\r\n})\r\n\r\nconst EngineHealthShape = z.object({\r\n ok: z.boolean().default(true),\r\n chainId: z.number().int().optional(),\r\n bind: z.string().optional(),\r\n /** null while the engine has no root (light client not synced). */\r\n rootSource: RootSourceSchema.nullable(),\r\n devMode: z.boolean().default(false),\r\n /** Per-provider health. Empty when the engine only reports a count. */\r\n providers: z.array(ProviderHealthSchema),\r\n providerCount: z.number().int().nonnegative(),\r\n lightClient: LightClientStatusSchema,\r\n /** Why the engine is degraded, e.g. ROOT_UNAVAILABLE. */\r\n error: z.object({ code: z.string(), message: z.string() }).nullish(),\r\n})\r\n\r\nconst isObj = (v: unknown): v is Record<string, unknown> => typeof v === 'object' && v !== null && !Array.isArray(v)\r\n\r\n/**\r\n * The engine's GET /health (backend/crates/server/src/http.rs) is flat:\r\n * { status: \"ok\"|\"degraded\", synced, rootSource?, finalizedNumber?, finalizedHash?, headNumber?, lagSeconds?,\r\n * providers: <count>, bootstrap?, bind, error?, message? }\r\n * This turns it into EngineHealth. The nested shape is accepted unchanged.\r\n */\r\nfunction normalizeHealth(raw: unknown): unknown {\r\n if (!isObj(raw)) return raw\r\n const providers = Array.isArray(raw.providers) ? raw.providers : []\r\n const providerCount = typeof raw.providers === 'number' ? raw.providers : providers.length\r\n if (isObj(raw.lightClient)) return { rootSource: null, providerCount, ...raw, providers }\r\n const bootstrap = isObj(raw.bootstrap) ? raw.bootstrap : {}\r\n const rootSource = typeof raw.rootSource === 'string' ? raw.rootSource : null\r\n return {\r\n ok: raw.status === undefined ? true : raw.status === 'ok',\r\n ...(typeof raw.bind === 'string' ? { bind: raw.bind } : {}),\r\n rootSource,\r\n devMode: rootSource === 'untrusted-rpc',\r\n providers,\r\n providerCount,\r\n lightClient: {\r\n synced: raw.synced === true,\r\n finalizedNumber: raw.finalizedNumber ?? null,\r\n finalizedHash: raw.finalizedHash ?? null,\r\n lagSeconds: raw.lagSeconds ?? null,\r\n lastUpdateUnix: raw.lastUpdateUnix ?? null,\r\n headNumber: raw.headNumber ?? null,\r\n checkpoint: bootstrap.checkpoint ?? null,\r\n checkpointSource: bootstrap.checkpointSource ?? null,\r\n },\r\n error: typeof raw.error === 'string' ? { code: raw.error, message: typeof raw.message === 'string' ? raw.message : '' } : null,\r\n }\r\n}\r\n\r\n/** GET /health (normalized; see normalizeHealth). */\r\nexport const EngineHealthSchema = z.preprocess(normalizeHealth, EngineHealthShape)\r\n\r\n/** veriq_getCapabilities */\r\nexport const CapabilitiesSchema = z\r\n .object({\r\n methods: z.array(z.string()),\r\n verifiedMethods: z.array(z.string()).default([]),\r\n blockPolicies: z.array(BlockPolicySchema).default(['finalized']),\r\n privacy: z.boolean().default(false),\r\n })\r\n .passthrough()\r\n\r\n// ---------------------------------------------------------------- readable issues\r\n\r\nfunction valueAt(input: unknown, path: (string | number)[]): unknown {\r\n let cur: unknown = input\r\n for (const key of path) {\r\n if (cur === null || typeof cur !== 'object') return undefined\r\n cur = (cur as Record<string | number, unknown>)[key]\r\n }\r\n return cur\r\n}\r\n\r\nfunction show(v: unknown): string {\r\n if (v === undefined) return 'undefined'\r\n if (typeof v === 'string') return JSON.stringify(v.length > 24 ? `${v.slice(0, 24)}…` : v)\r\n if (v === null || typeof v !== 'object') return String(v)\r\n return Array.isArray(v) ? 'array' : 'object'\r\n}\r\n\r\n/** \"receipt.block.stateRoot: expected 0x-hex, got undefined\" */\r\nexport function formatIssues(error: z.ZodError, input: unknown, root: string): string[] {\r\n return error.issues.map((issue) => {\r\n const path = [root, ...issue.path].join('.')\r\n const got = show(valueAt(input, issue.path))\r\n let what = issue.message\r\n if (issue.code === 'invalid_type' && issue.message === 'Required') what = `expected ${issue.expected}`\r\n else if (issue.code === 'invalid_type' && issue.message.startsWith('Expected')) what = `expected ${issue.expected}`\r\n else if (issue.code === 'invalid_enum_value') what = `expected one of ${issue.options.join(' | ')}`\r\n return `${path}: ${what}, got ${got}`\r\n })\r\n}\r\n","import { CLIENT_CODES, EngineUnreachableError, ERROR_CODES, ProviderTimeoutError, VeriqSchemaError, errorFromRpc } from './errors'\r\nimport { formatIssues } from './schema'\r\nimport type { z } from 'zod'\r\n\r\nexport interface RpcContext {\r\n url: string\r\n fetch: typeof fetch\r\n debug: boolean\r\n}\r\n\r\nexport interface CallOptions {\r\n timeoutMs: number\r\n signal?: AbortSignal\r\n}\r\n\r\nlet nextId = 1\r\n\r\n/** URL without query string or fragment, safe to show and log. */\r\nexport function safeUrl(url: string): string {\r\n return url.split(/[?#]/)[0] ?? url\r\n}\r\n\r\nfunction unreachable(ctx: RpcContext, detail: string, cause?: unknown): EngineUnreachableError {\r\n const at = safeUrl(ctx.url) || '/'\r\n return new EngineUnreachableError(CLIENT_CODES.ENGINE_UNREACHABLE, `Could not reach the Veriq engine at ${at}: ${detail}`, {\r\n hint: `No Veriq engine at ${at}. Start it with: cd backend && cargo run -p veriq-server`,\r\n cause,\r\n })\r\n}\r\n\r\nasync function send(ctx: RpcContext, input: string, init: RequestInit, opts: CallOptions, label: string): Promise<unknown> {\r\n const controller = new AbortController()\r\n let timedOut = false\r\n const timer = setTimeout(() => {\r\n timedOut = true\r\n controller.abort()\r\n }, opts.timeoutMs)\r\n const onAbort = () => controller.abort()\r\n opts.signal?.addEventListener('abort', onAbort, { once: true })\r\n const started = Date.now()\r\n try {\r\n let res: Response\r\n try {\r\n res = await ctx.fetch(input, { ...init, signal: controller.signal })\r\n } catch (err) {\r\n if (timedOut) {\r\n throw new ProviderTimeoutError(ERROR_CODES.PROVIDER_TIMEOUT, `No answer from the engine within ${opts.timeoutMs} ms (client-side timeout)`, {\r\n hint: 'The engine did not answer in time. Raise timeoutMs, or check that the engine is healthy with: veriq health',\r\n cause: err,\r\n })\r\n }\r\n if (opts.signal?.aborted) throw err\r\n throw unreachable(ctx, err instanceof Error ? err.message : String(err), err)\r\n }\r\n let body: unknown\r\n try {\r\n body = await res.json()\r\n } catch (err) {\r\n throw unreachable(ctx, `HTTP ${res.status} with a non-JSON body. Is this a Veriq engine?`, err)\r\n }\r\n if (!res.ok && !(body && typeof body === 'object' && 'error' in body)) {\r\n throw unreachable(ctx, `HTTP ${res.status}`)\r\n }\r\n return body\r\n } finally {\r\n clearTimeout(timer)\r\n opts.signal?.removeEventListener('abort', onAbort)\r\n // Never logs params, addresses or full URLs.\r\n if (ctx.debug) console.debug(`[veriq] ${label} ${Date.now() - started} ms`)\r\n }\r\n}\r\n\r\n/** One JSON-RPC call. Retries: none. Throws typed VeriqErrors. */\r\nexport async function rpcCall(ctx: RpcContext, method: string, params: unknown[], opts: CallOptions): Promise<unknown> {\r\n const body = await send(\r\n ctx,\r\n ctx.url || '/',\r\n {\r\n method: 'POST',\r\n headers: { 'content-type': 'application/json' },\r\n body: JSON.stringify({ jsonrpc: '2.0', id: nextId++, method, params }),\r\n },\r\n opts,\r\n method,\r\n )\r\n if (!body || typeof body !== 'object') throw new VeriqSchemaError([`response: expected a JSON-RPC object, got ${typeof body}`])\r\n if ('error' in body && body.error && typeof body.error === 'object') {\r\n const e = body.error as { code?: unknown; message?: unknown; data?: unknown }\r\n if (typeof e.code === 'number') {\r\n throw errorFromRpc({ code: e.code, message: typeof e.message === 'string' ? e.message : 'engine error', data: e.data })\r\n }\r\n }\r\n if (!('result' in body)) throw new VeriqSchemaError(['response.result: expected a value, got undefined'])\r\n return body.result\r\n}\r\n\r\n/** GET a JSON endpoint on the engine (e.g. /health). */\r\nexport function httpGet(ctx: RpcContext, path: string, opts: CallOptions): Promise<unknown> {\r\n return send(ctx, `${ctx.url}${path}`, { method: 'GET' }, opts, `GET ${path.split('?')[0]}`)\r\n}\r\n\r\n/** Parse with a Zod schema; a mismatch throws VeriqSchemaError with readable paths. */\r\nexport function parseWith<S extends z.ZodTypeAny>(schema: S, input: unknown, root: string): z.output<S> {\r\n const res = schema.safeParse(input)\r\n if (!res.success) throw new VeriqSchemaError(formatIssues(res.error, input, root))\r\n return res.data as z.output<S>\r\n}\r\n","// Type-only viem import: the transport has no runtime dependency on viem.\r\nimport type { EIP1193RequestFn, Transport } from 'viem'\r\nimport { ERROR_CODES, UnsupportedVerificationError } from './errors'\r\nimport type { VeriqClient } from './client'\r\nimport type { Policy, TrustReceipt } from './types'\r\n\r\nexport interface VeriqTransportOptions {\r\n /** Policy for verified reads. Default: the client's policy. */\r\n policy?: Policy\r\n /**\r\n * Reject block tags other than \"finalized\" before sending.\r\n * Default: true when the policy requires verification.\r\n */\r\n strict?: boolean\r\n /** Called with every receipt from a verified read. */\r\n onReceipt?: (receipt: TrustReceipt) => void\r\n}\r\n\r\n/** A viem Transport that also exposes the latest receipt. */\r\nexport type VeriqTransport = Transport<'veriq'> & { readonly lastReceipt: TrustReceipt | undefined }\r\n\r\ntype Params = readonly unknown[] | undefined\r\n\r\nfunction blockTag(params: Params, index: number): unknown {\r\n return params?.[index] ?? 'latest'\r\n}\r\n\r\n/**\r\n * Build a viem custom transport backed by a Veriq client.\r\n * @example\r\n * const transport = veriq.transport({ onReceipt: (r) => console.log(r.block.number) })\r\n * const client = createPublicClient({ chain: sepolia, transport })\r\n * await client.getBalance({ address, blockTag: 'finalized' })\r\n * transport.lastReceipt?.verification.status // 'verified'\r\n */\r\nexport function createTransport(client: VeriqClient, opts: VeriqTransportOptions = {}): VeriqTransport {\r\n const policy = opts.policy ?? client.policy\r\n const strict = opts.strict ?? policy.verification === 'required'\r\n let last: TrustReceipt | undefined\r\n\r\n const record = (r: TrustReceipt) => {\r\n last = r\r\n opts.onReceipt?.(r)\r\n }\r\n\r\n const verifiedPath = (method: string, tag: unknown) => {\r\n if (tag === 'finalized') return true\r\n if (strict) {\r\n throw new UnsupportedVerificationError(\r\n ERROR_CODES.UNSUPPORTED_VERIFICATION,\r\n `${method} at block \"${typeof tag === 'string' ? tag : 'custom'}\" can't be proven; only \"finalized\" can`,\r\n { hint: \"Pass blockTag: 'finalized' (viem defaults to 'latest').\" },\r\n )\r\n }\r\n return false\r\n }\r\n\r\n async function request({ method, params }: { method: string; params?: Params }): Promise<unknown> {\r\n if (method === 'eth_getBalance' && verifiedPath(method, blockTag(params, 1))) {\r\n const r = await client.readBalance({ address: String(params?.[0]), policy })\r\n record(r.receipt)\r\n return `0x${r.value.toString(16)}`\r\n }\r\n if (method === 'eth_getStorageAt' && verifiedPath(method, blockTag(params, 2))) {\r\n const r = await client.readStorage({ address: String(params?.[0]), slot: String(params?.[1]), policy })\r\n record(r.receipt)\r\n return r.value\r\n }\r\n // Everything else goes to the engine unchanged; it decides what it can serve.\r\n return client.request(method, params ? [...params] : [])\r\n }\r\n\r\n const eip1193 = request as unknown as EIP1193RequestFn\r\n const transport = (() => ({\r\n config: { key: 'veriq', name: 'Veriq', request: eip1193, retryCount: 0, type: 'veriq' as const },\r\n request: eip1193,\r\n value: {\r\n get lastReceipt() {\r\n return last\r\n },\r\n },\r\n })) as Transport<'veriq'>\r\n\r\n Object.defineProperty(transport, 'lastReceipt', { get: () => last, enumerable: true })\r\n return transport as VeriqTransport\r\n}\r\n","import { z } from 'zod'\r\nimport { ERROR_CODES, InvalidRequestError } from './errors'\r\nimport { verifiedFinalized } from './presets'\r\nimport { httpGet, parseWith, rpcCall, type RpcContext } from './rpc'\r\nimport {\r\n CapabilitiesSchema,\r\n EngineHealthSchema,\r\n PolicySchema,\r\n ProviderHealthSchema,\r\n ReadResultSchema,\r\n ReceiptListSchema,\r\n OUTCOME_LABEL,\r\n ReceiptRecordSchema,\r\n TrustReceiptSchema,\r\n formatIssues,\r\n} from './schema'\r\nimport { createTransport, type VeriqTransport, type VeriqTransportOptions } from './transport'\r\nimport type { Address, Attempt, Capabilities, EngineHealth, Hex, Policy, ProviderHealth, ReceiptRecord, TrustReceipt, VerifiedResult } from './types'\r\n\r\n/** Default engine URL. The engine only binds to localhost. */\r\nexport const DEFAULT_ENGINE_URL = 'http://127.0.0.1:8547'\r\n\r\nexport interface VeriqOptions {\r\n /** Engine URL. Default http://127.0.0.1:8547 */\r\n url?: string\r\n /** Default policy for reads. Default `verifiedFinalized`. */\r\n policy?: Policy\r\n /** Custom fetch (tests, proxies). Default: global fetch. */\r\n fetch?: typeof fetch\r\n /** Client-side timeout. Default: policy.timeoutMs + 1 s for reads, 5 s for health/receipts. */\r\n timeoutMs?: number\r\n /** Log method names and timings with console.debug. Never logs addresses or params. */\r\n debug?: boolean\r\n}\r\n\r\nexport interface ReadOptions {\r\n policy?: Policy\r\n signal?: AbortSignal\r\n}\r\n\r\n/** A Veriq client. Immutable: `withPolicy` returns a new one. */\r\nexport interface VeriqClient {\r\n readonly url: string\r\n readonly policy: Policy\r\n /**\r\n * Proven ETH balance (wei) at the pinned finalized block.\r\n * @example const { value, verified } = await veriq.readBalance({ address: '0x…' })\r\n */\r\n readBalance(args: { address: string } & ReadOptions): Promise<VerifiedResult<bigint>>\r\n /**\r\n * Proven storage slot value as 32-byte hex.\r\n * @example const { value } = await veriq.readStorage({ address, slot: '0x0' })\r\n */\r\n readStorage(args: { address: string; slot: string } & ReadOptions): Promise<VerifiedResult<Hex>>\r\n /**\r\n * A stored Trust Receipt by request id (veriq_getReceipt).\r\n * @example const receipt = await veriq.getReceipt(result.receipt.identity.requestId)\r\n */\r\n getReceipt(id: string): Promise<TrustReceipt>\r\n /**\r\n * The full stored row (value, attempts, error) from GET /receipts/:id.\r\n * @example const row = await veriq.getReceiptRecord(id)\r\n */\r\n getReceiptRecord(id: string): Promise<ReceiptRecord>\r\n /**\r\n * Newest receipts first (GET /receipts?limit=).\r\n * @example const rows = await veriq.listReceipts(50)\r\n */\r\n listReceipts(limit?: number): Promise<ReceiptRecord[]>\r\n /**\r\n * Engine, light client and provider health (GET /health).\r\n * @example const { lightClient } = await veriq.health()\r\n */\r\n health(): Promise<EngineHealth>\r\n /**\r\n * Per-provider capabilities and breaker state (veriq_getProviderHealth).\r\n * @example const providers = await veriq.providers()\r\n */\r\n providers(): Promise<ProviderHealth[]>\r\n /**\r\n * Which methods and policies the engine can satisfy (veriq_getCapabilities).\r\n * @example const { verifiedMethods } = await veriq.capabilities()\r\n */\r\n capabilities(): Promise<Capabilities>\r\n /**\r\n * viem transport. eth_getBalance / eth_getStorageAt go through the verified path.\r\n * @example createPublicClient({ chain: sepolia, transport: veriq.transport() })\r\n */\r\n transport(opts?: VeriqTransportOptions): VeriqTransport\r\n /**\r\n * New client with a different default policy.\r\n * @example const strict = veriq.withPolicy(verifiedCompare)\r\n */\r\n withPolicy(policy: Policy): VeriqClient\r\n /**\r\n * Raw JSON-RPC call to the engine.\r\n * @example await veriq.request('eth_chainId')\r\n */\r\n request(method: string, params?: unknown[]): Promise<unknown>\r\n}\r\n\r\nconst ADDRESS_RE = /^0x[0-9a-fA-F]{40}$/\r\nconst SLOT_RE = /^0x[0-9a-fA-F]{1,64}$/\r\n\r\n/** Receipt attempts (receipt.rs) in the display form used by VerifiedResult and the components. */\r\nexport function attemptsFromReceipt(receipt: TrustReceipt): Attempt[] {\r\n return receipt.routing.attempts.map((a) => ({\r\n provider: a.provider,\r\n outcome: OUTCOME_LABEL[a.outcome] ?? a.outcome,\r\n elapsedMs: a.elapsedMs,\r\n ...(a.failureReason ? { reason: a.failureReason } : {}),\r\n }))\r\n}\r\n\r\nfunction invalid(message: string): InvalidRequestError {\r\n return new InvalidRequestError(ERROR_CODES.INVALID_REQUEST, message)\r\n}\r\n\r\n/** Throws InvalidRequestError (no network call) for a malformed address. */\r\nexport function assertAddress(address: string): asserts address is Address {\r\n if (typeof address !== 'string' || !ADDRESS_RE.test(address)) {\r\n throw invalid('address must be 0x followed by 40 hex characters')\r\n }\r\n}\r\n\r\n/** Throws InvalidRequestError (no network call) for a malformed slot. */\r\nexport function assertSlot(slot: string): asserts slot is Hex {\r\n if (typeof slot !== 'string' || !SLOT_RE.test(slot)) throw invalid('slot must be 0x followed by 1 to 64 hex characters')\r\n}\r\n\r\n/**\r\n * Same field rules as the engine. Deliberately does NOT reject latest + required:\r\n * the engine answers POLICY_UNSATISFIABLE, so apps can show the real reason.\r\n */\r\nexport function assertPolicy(policy: Policy): void {\r\n const res = PolicySchema.safeParse(policy)\r\n if (!res.success) throw invalid(formatIssues(res.error, policy, 'policy').join('; '))\r\n}\r\n\r\n/**\r\n * Create a Veriq client.\r\n * @example\r\n * import { createVeriq } from 'veriq-client'\r\n * const veriq = createVeriq()\r\n * const { value, verified } = await veriq.readBalance({ address: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045' })\r\n */\r\nexport function createVeriq(options: VeriqOptions = {}): VeriqClient {\r\n const url = (options.url ?? DEFAULT_ENGINE_URL).replace(/\\/$/, '')\r\n const policy = options.policy ?? verifiedFinalized\r\n assertPolicy(policy)\r\n const fetchFn = options.fetch ?? ((input: RequestInfo | URL, init?: RequestInit) => globalThis.fetch(input, init))\r\n const ctx: RpcContext = { url, fetch: fetchFn, debug: options.debug ?? false }\r\n const readTimeout = (p: Policy) => options.timeoutMs ?? p.timeoutMs + 1000\r\n const shortTimeout = { timeoutMs: options.timeoutMs ?? 5000 }\r\n\r\n async function read(method: string, params: unknown[], p: Policy, signal?: AbortSignal) {\r\n assertPolicy(p)\r\n const raw = await rpcCall(ctx, method, [...params, p], { timeoutMs: readTimeout(p), ...(signal ? { signal } : {}) })\r\n const r = parseWith(ReadResultSchema, raw, 'result')\r\n // Prefer an explicit attempts list; otherwise use the ones recorded in the receipt.\r\n return { ...r, attempts: r.attempts.length ? r.attempts : attemptsFromReceipt(r.receipt) }\r\n }\r\n\r\n const client: VeriqClient = {\r\n url,\r\n policy,\r\n async readBalance({ address, policy: p = policy, signal }) {\r\n assertAddress(address)\r\n const r = await read('veriq_readBalance', [address], p, signal)\r\n return { value: BigInt(r.value), receipt: r.receipt, verified: r.receipt.verification.status === 'verified', attempts: r.attempts }\r\n },\r\n async readStorage({ address, slot, policy: p = policy, signal }) {\r\n assertAddress(address)\r\n assertSlot(slot)\r\n const r = await read('veriq_readStorage', [address, slot], p, signal)\r\n const value = `0x${BigInt(r.value).toString(16).padStart(64, '0')}` as Hex\r\n return { value, receipt: r.receipt, verified: r.receipt.verification.status === 'verified', attempts: r.attempts }\r\n },\r\n async getReceipt(id) {\r\n const raw = await rpcCall(ctx, 'veriq_getReceipt', [id], shortTimeout)\r\n // The engine may answer with the bare receipt or with a stored row around it.\r\n const receipt = raw && typeof raw === 'object' && 'receipt' in raw && !('identity' in raw) ? raw.receipt : raw\r\n return parseWith(TrustReceiptSchema, receipt, 'receipt')\r\n },\r\n async getReceiptRecord(id) {\r\n return parseWith(ReceiptRecordSchema, await httpGet(ctx, `/receipts/${encodeURIComponent(id)}`, shortTimeout), 'record')\r\n },\r\n async listReceipts(limit = 50) {\r\n return parseWith(ReceiptListSchema, await httpGet(ctx, `/receipts?limit=${limit}`, shortTimeout), 'receipts').receipts\r\n },\r\n async health() {\r\n return parseWith(EngineHealthSchema, await httpGet(ctx, '/health', shortTimeout), 'health')\r\n },\r\n async providers() {\r\n const raw = await rpcCall(ctx, 'veriq_getProviderHealth', [], shortTimeout)\r\n const list = raw && typeof raw === 'object' && 'providers' in raw ? raw.providers : raw\r\n return parseWith(z.array(ProviderHealthSchema), list, 'providers')\r\n },\r\n async capabilities() {\r\n return parseWith(CapabilitiesSchema, await rpcCall(ctx, 'veriq_getCapabilities', [], shortTimeout), 'capabilities')\r\n },\r\n transport: (opts) => createTransport(client, opts),\r\n withPolicy: (p) => createVeriq({ ...options, policy: p }),\r\n request: (method, params = []) => rpcCall(ctx, method, params, { timeoutMs: readTimeout(policy) }),\r\n }\r\n return Object.freeze(client)\r\n}\r\n","import type { Attempt, EngineHealth, Hex, RootSource, TrustReceipt, VerificationStatus } from './types'\r\n\r\nconst WEI = 10n ** 18n\r\n\r\n/**\r\n * Wei -> \"0.4213 ETH\". Truncates (never rounds up a proven value); tiny non-zero amounts show as \"<0.0001 ETH\".\r\n * @example formatEth(421337000000000000n) // \"0.4213 ETH\"\r\n */\r\nexport function formatEth(wei: bigint | string | number, opts: { decimals?: number; symbol?: boolean } = {}): string {\r\n const decimals = opts.decimals ?? 4\r\n const unit = opts.symbol === false ? '' : ' ETH'\r\n const v = typeof wei === 'bigint' ? wei : BigInt(wei)\r\n const neg = v < 0n\r\n const abs = neg ? -v : v\r\n const whole = abs / WEI\r\n const frac = (abs % WEI).toString().padStart(18, '0').slice(0, decimals).replace(/0+$/, '')\r\n if (whole === 0n && frac === '' && abs > 0n) return `${neg ? '>-' : '<'}0.${'0'.repeat(Math.max(0, decimals - 1))}1${unit}`\r\n const grouped = whole.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')\r\n return `${neg ? '-' : ''}${grouped}${frac ? `.${frac}` : ''}${unit}`\r\n}\r\n\r\n/**\r\n * Middle-truncate a hash or address: \"0x1234…cdef\".\r\n * @example shortHash('0x9a3f00000000000000000000000000000000000000000000000000000000c21e') // \"0x9a3f…c21e\"\r\n */\r\nexport function shortHash(hex: string, head = 4, tail = 4): string {\r\n const h = hex.startsWith('0x') ? head + 2 : head\r\n return hex.length <= h + tail + 1 ? hex : `${hex.slice(0, h)}…${hex.slice(-tail)}`\r\n}\r\n\r\n/** \"7,412,903\" */\r\nexport function formatNumber(n: number | bigint): string {\r\n return n.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')\r\n}\r\n\r\n/** Human label for a root source. */\r\nexport function rootSourceLabel(source: RootSource): string {\r\n switch (source) {\r\n case 'local-light-client':\r\n return 'local light client (Helios)'\r\n case 'fixture':\r\n return 'fixture (tests only)'\r\n case 'untrusted-rpc':\r\n return 'untrusted RPC (DEV MODE)'\r\n }\r\n}\r\n\r\n/** Anything prettyReceipt / formatReceipt can show: a bare receipt, or a read result with value + attempts. */\r\nexport type ReceiptInput = TrustReceipt | { receipt: TrustReceipt; value?: bigint | string; attempts?: Attempt[] }\r\n\r\nexport type RowTone = 'ok' | 'warn' | 'err' | 'lav' | 'muted' | 'ink'\r\n\r\n/** One line of a receipt. `status` rows carry the status + formatted value. */\r\nexport interface ReceiptRow {\r\n label: string\r\n value: string\r\n tone?: RowTone\r\n}\r\n\r\nfunction split(input: ReceiptInput): { receipt: TrustReceipt; value?: bigint | string; attempts: Attempt[] } {\r\n if ('identity' in input) return { receipt: input, attempts: [] }\r\n return { receipt: input.receipt, ...(input.value !== undefined ? { value: input.value } : {}), attempts: input.attempts ?? [] }\r\n}\r\n\r\nexport function statusTone(status: VerificationStatus): RowTone {\r\n return status === 'verified' ? 'ok' : status === 'unverified' ? 'warn' : 'lav'\r\n}\r\n\r\nfunction formatValue(receipt: TrustReceipt, value: bigint | string | undefined): string {\r\n if (value === undefined) return ''\r\n if (/storage/i.test(receipt.identity.method)) {\r\n const v = typeof value === 'bigint' ? value : BigInt(value)\r\n return v < 10n ** 15n ? v.toString() : shortHash(`0x${v.toString(16)}`)\r\n }\r\n return formatEth(value)\r\n}\r\n\r\n/** The rows shown by formatReceipt and prettyReceipt (shared so plain and colour output match). */\r\nexport function receiptRows(input: ReceiptInput): { status: VerificationStatus; value: string; rows: ReceiptRow[] } {\r\n const { receipt: r, value, attempts } = split(input)\r\n const rows: ReceiptRow[] = [\r\n { label: 'block', value: `#${formatNumber(r.block.number)} ${shortHash(r.block.hash)}${r.block.finalized ? '' : ' (not finalized)'}` },\r\n { label: 'stateRoot', value: shortHash(r.block.stateRoot) },\r\n { label: 'root', value: rootSourceLabel(r.verification.rootSource), tone: r.verification.rootSource === 'untrusted-rpc' ? 'warn' : 'ink' },\r\n ]\r\n const total = attempts.reduce((s, a) => s + a.elapsedMs, 0)\r\n const tried = attempts.length || r.routing.providersTried\r\n const provider = [\r\n r.routing.providerLabel ?? '—',\r\n `${tried} attempt${tried === 1 ? '' : 's'}`,\r\n ...(attempts.length ? [`${Math.round(total)} ms`] : []),\r\n ].join(' · ')\r\n rows.push({ label: 'provider', value: provider })\r\n for (const a of attempts) {\r\n if (a.outcome !== 'ok') rows.push({ label: 'rejected', value: `${a.provider} ${a.outcome}`, tone: 'err' })\r\n }\r\n if (r.routing.comparison !== 'not-run') rows.push({ label: 'compare', value: r.routing.comparison, tone: r.routing.comparison === 'agree' ? 'ok' : 'warn' })\r\n for (const w of r.warnings) rows.push({ label: 'warning', value: w.code, tone: 'warn' })\r\n return { status: r.verification.status, value: formatValue(r, value), rows }\r\n}\r\n\r\n/**\r\n * Plain multi-line text, no colours.\r\n * @example console.log(formatReceipt(await veriq.readBalance({ address })))\r\n */\r\nexport function formatReceipt(input: ReceiptInput): string {\r\n const { status, value, rows } = receiptRows(input)\r\n return [`${status.toUpperCase()}${value ? ` ${value}` : ''}`, ...rows.map((r) => `${r.label.padEnd(10)} ${r.value}`)].join('\\n')\r\n}\r\n\r\n/** Rows for `veriq health`. */\r\nexport function healthRows(h: EngineHealth): { engine: ReceiptRow[]; providers: string[][] } {\r\n const lc = h.lightClient\r\n const lag = lc.finalizedNumber != null && lc.headNumber != null ? `${lc.headNumber - lc.finalizedNumber} blocks behind head` : ''\r\n const engine: ReceiptRow[] = [\r\n {\r\n label: 'engine',\r\n value: `${h.ok ? 'online' : `degraded${h.error ? ` · ${h.error.code}` : ''}`}${h.bind ? ` · ${h.bind}` : ''}`,\r\n tone: h.ok ? 'ok' : 'warn',\r\n },\r\n {\r\n label: 'root',\r\n value: h.rootSource ? rootSourceLabel(h.rootSource) : 'none yet (light client not synced)',\r\n tone: !h.rootSource || h.devMode || h.rootSource === 'untrusted-rpc' ? 'warn' : 'ink',\r\n },\r\n { label: 'light', value: lc.synced ? 'synced' : 'not synced', tone: lc.synced ? 'ok' : 'warn' },\r\n { label: 'finalized', value: lc.finalizedNumber != null ? `#${formatNumber(lc.finalizedNumber)}${lag ? ` · ${lag}` : ''}` : '—' },\r\n ]\r\n const providers = h.providers.map((p) => [\r\n p.name,\r\n p.chainOk ? 'yes' : 'no',\r\n p.proofSupport ? 'yes' : 'no',\r\n p.eip1898 ? 'yes' : 'no',\r\n p.breaker.state,\r\n p.transport,\r\n ])\r\n if (h.providers.length === 0) engine.push({ label: 'providers', value: `${h.providerCount} configured`, tone: 'ink' })\r\n return { engine, providers }\r\n}\r\n\r\nexport type { Hex }\r\n","import { healthRows, receiptRows, type ReceiptInput, type RowTone } from './format'\r\nimport type { EngineHealth } from './types'\r\nimport type { VeriqError } from './errors'\r\n\r\n// Dashboard palette as 24-bit ANSI. \"ink\" uses the terminal's own foreground so it reads on light and dark themes.\r\nconst PALETTE: Record<RowTone | 'border' | 'title', [number, number, number] | null> = {\r\n ink: null,\r\n muted: [0x5b, 0x5b, 0x66],\r\n lav: [0x9c, 0x95, 0xd6],\r\n border: [0x9c, 0x95, 0xd6],\r\n title: [0x6b, 0x62, 0xb5],\r\n ok: [0x2f, 0x9e, 0x6e],\r\n warn: [0xb7, 0x79, 0x1f],\r\n err: [0xc2, 0x41, 0x5b],\r\n}\r\n\r\nexport interface PrettyOptions {\r\n /** Force colours on/off. Default: on for a TTY unless NO_COLOR is set. */\r\n color?: boolean\r\n}\r\n\r\nfunction env(name: string): string | undefined {\r\n const p = (globalThis as { process?: { env?: Record<string, string | undefined> } }).process\r\n return p?.env?.[name]\r\n}\r\n\r\n/** Colours on only for an interactive terminal without NO_COLOR. */\r\nexport function supportsColor(): boolean {\r\n if (env('NO_COLOR') !== undefined) return false\r\n if (env('FORCE_COLOR') !== undefined) return true\r\n const p = (globalThis as { process?: { stdout?: { isTTY?: boolean } } }).process\r\n return p?.stdout?.isTTY === true\r\n}\r\n\r\nfunction painter(on: boolean) {\r\n return (tone: keyof typeof PALETTE, text: string, bold = false): string => {\r\n const rgb = PALETTE[tone]\r\n if (!on || (!rgb && !bold)) return text\r\n return `${bold ? '\\x1b[1m' : ''}${rgb ? `\\x1b[38;2;${rgb[0]};${rgb[1]};${rgb[2]}m` : ''}${text}\\x1b[0m`\r\n }\r\n}\r\n\r\ninterface Line {\r\n plain: string\r\n painted: string\r\n}\r\n\r\nfunction box(title: string, lines: Line[], paint: ReturnType<typeof painter>): string {\r\n const width = Math.max(title.length + 6, ...lines.map((l) => l.plain.length)) + 4\r\n const top = `${paint('border', '╭─ ')}${paint('title', title, true)}${paint('border', ` ${'─'.repeat(width - title.length - 3)}╮`)}`\r\n const body = lines.map((l) => `${paint('border', '│')} ${l.painted}${' '.repeat(width - l.plain.length - 1)}${paint('border', '│')}`)\r\n const bottom = paint('border', `╰${'─'.repeat(width)}╯`)\r\n return [top, ...body, bottom].join('\\n')\r\n}\r\n\r\nconst LABEL = 11\r\n\r\n/**\r\n * The receipt as a rounded box in the dashboard colours. Plain text for NO_COLOR / non-TTY.\r\n * @example console.log(prettyReceipt(await veriq.readBalance({ address })))\r\n */\r\nexport function prettyReceipt(input: ReceiptInput, opts: PrettyOptions = {}): string {\r\n const paint = painter(opts.color ?? supportsColor())\r\n const { status, value, rows } = receiptRows(input)\r\n const tone: RowTone = status === 'verified' ? 'ok' : status === 'unverified' ? 'warn' : 'lav'\r\n const head = `● ${status.toUpperCase()}`\r\n const gap = ' '.repeat(Math.max(2, 22 - head.length))\r\n const lines: Line[] = [\r\n { plain: `${head}${gap}${value}`, painted: `${paint(tone, head, true)}${gap}${paint('ink', value, true)}` },\r\n ...rows.map((r) => ({\r\n plain: `${r.label.padEnd(LABEL)}${r.value}`,\r\n painted: `${paint('muted', r.label.padEnd(LABEL))}${paint(r.tone ?? 'ink', r.value)}`,\r\n })),\r\n ]\r\n return box('Veriq · Trust Receipt', lines, paint)\r\n}\r\n\r\n/**\r\n * Engine, light client and provider table for `veriq health`.\r\n * @example console.log(prettyHealth(await veriq.health()))\r\n */\r\nexport function prettyHealth(health: EngineHealth, opts: PrettyOptions = {}): string {\r\n const paint = painter(opts.color ?? supportsColor())\r\n const { engine, providers } = healthRows(health)\r\n const lines: Line[] = engine.map((r) => ({\r\n plain: `${r.label.padEnd(LABEL)}${r.value}`,\r\n painted: `${paint('muted', r.label.padEnd(LABEL))}${paint(r.tone ?? 'ink', r.value)}`,\r\n }))\r\n const header = ['provider', 'chain', 'proof', '1898', 'breaker', 'transport']\r\n const widths = header.map((h, i) => Math.max(h.length, ...providers.map((p) => (p[i] ?? '').length)) + 2)\r\n const fmt = (cells: string[]) => cells.map((c, i) => c.padEnd(widths[i] ?? 0)).join('').trimEnd()\r\n if (providers.length === 0) return box('Veriq · Engine health', lines, paint)\r\n lines.push({ plain: '', painted: '' })\r\n lines.push({ plain: fmt(header), painted: paint('muted', fmt(header)) })\r\n for (const p of providers) {\r\n const plain = fmt(p)\r\n const bad = p[1] === 'no' || p[2] === 'no' || p[4] !== 'closed'\r\n lines.push({ plain, painted: paint(bad ? 'err' : 'ink', plain) })\r\n }\r\n return box('Veriq · Engine health', lines, paint)\r\n}\r\n\r\n/**\r\n * Error name, code and hint, in the error colour.\r\n * @example console.error(prettyError(err))\r\n */\r\nexport function prettyError(err: VeriqError, opts: PrettyOptions = {}): string {\r\n const paint = painter(opts.color ?? supportsColor())\r\n return `${paint('err', `✕ ${err.name} [${err.code} ${err.codeName}]`, true)}\\n ${err.message}\\n ${paint('muted', `→ ${err.hint}`)}`\r\n}\r\n"]}
1
+ {"version":3,"sources":["../src/errors.ts","../src/presets.ts","../src/schema.ts","../src/rpc.ts","../src/transport.ts","../src/client.ts","../src/delegation.ts","../src/private.ts","../src/wasm.ts","../src/format.ts","../src/pretty.ts"],"names":["ERROR_CODES","CLIENT_CODES","DEFAULT_URL","ERROR_MEANINGS","ERROR_HINTS","_VeriqError","code","message","opts","nameForCode","rid","receiptIdFrom","__name","VeriqError","_InvalidProofError","InvalidProofError","_RootUnavailableError","RootUnavailableError","_UnsupportedVerificationError","UnsupportedVerificationError","_PrivacyUnavailableError","PrivacyUnavailableError","_PolicyUnsatisfiableError","PolicyUnsatisfiableError","_ProviderTimeoutError","ProviderTimeoutError","_AllProvidersFailedError","AllProvidersFailedError","_RootMismatchError","RootMismatchError","_InvalidRequestError","InvalidRequestError","_InternalError","InternalError","_ChainMismatchError","ChainMismatchError","_EngineUnreachableError","EngineUnreachableError","_VeriqSchemaError","issues","VeriqSchemaError","ERROR_CLASSES","ALL_CODES","name","c","errorNameForCode","n","data","errorFromRpc","err","Cls","isVeriqError","verifiedFinalized","verifiedCompare","privateVerified","devUnverified","presets","HEX","hex","bytes","z","u64","Hex32Schema","VerificationStatusSchema","RootSourceSchema","VerifierLocationSchema","MechanismSchema","TransportKindSchema","ComparisonSchema","IdentitySchema","BlockSchema","BootstrapSchema","VerificationSchema","PrivacySchema","AttemptOutcomeSchema","RoutingAttemptSchema","RoutingSchema","FreshnessSchema","WarningSchema","TrustReceiptSchema","VerificationPolicySchema","BlockPolicySchema","PolicySchema","OUTCOME_LABEL","normalizeAttempt","raw","a","outcome","reason","AttemptSchema","RpcErrorSchema","ReadResultSchema","RootInfoSchema","ReceiptRecordSchema","ReceiptListSchema","BreakerStateSchema","ProviderHealthSchema","LightClientStatusSchema","EngineHealthShape","isObj","v","normalizeHealth","providers","providerCount","bootstrap","rootSource","EngineHealthSchema","CapabilitiesSchema","DelegationStatusSchema","DelegationSecurityClassificationSchema","DelegationResultSchema","valueAt","input","path","cur","key","show","formatIssues","error","root","issue","got","what","nextId","safeUrl","url","unreachable","ctx","detail","cause","at","send","init","label","controller","timedOut","timer","onAbort","started","res","body","rpcCall","method","params","rpcEnvelope","e","httpGet","parseWith","schema","blockTag","index","createTransport","client","policy","strict","last","record","r","verifiedPath","tag","request","result","receipt","eip1193","transport","DEFAULT_ENGINE_URL","ADDRESS_RE","SLOT_RE","attemptsFromReceipt","invalid","assertAddress","address","assertSlot","slot","assertPolicy","createVeriq","options","fetchFn","readTimeout","p","shortTimeout","read","signal","id","limit","list","elapsedMs","rest","payload","veriq","EIP7702_PREFIX","DESIGNATOR_BYTE_LENGTH","DESIGNATOR_HEX_LENGTH","ZERO_ADDRESS","parseDelegationDesignator","lower","norm","delegate","isRevoked","classifyAccountCode","parsed","PRIVATE_NETWORKS","assertNetworkForChain","chainId","network","allowed","LABEL_RE","MAX_ROOT_REFRESHES","MAX_DETAIL","LOOPBACK","ALIGN_POLL_MS","HASH_RE","MECHANISMS","_UpstreamError","UpstreamError","validateOptions","seen","provider","loopbackHttp","secretsOf","secrets","u","part","value","b","sanitize","out","secret","blockRefused","sameValue","kind","rootMoved","createPrivateReader","timeoutMs","alignTimeoutMs","browserFinalized","lightClient","engineRoot","engineChain","verifierState","browserVerifier","source","pinRoot","canRunLocally","deadline","engine","browser","same","resolve","numberOnly","upstream","timeout","_","reject","call","text","atBlock","local","verifier","attempts","attemptLabel","lastError","refreshes","engineDown","proof","localValue","localOnly","localResult","warnings","now","word","codeResult","classified","isDelegated","delegateAddress","securityClassification","codeHash","VERIFIER_ABI_VERSION","_VerifierUnavailableError","VerifierUnavailableError","bytesOf","loadVerifier","exports","abiVersion","encoder","decoder","fn","ptr","packed","outPtr","outLen","stateRoot","WEI","formatEth","wei","decimals","unit","neg","abs","whole","frac","grouped","shortHash","head","tail","h","formatNumber","rootSourceLabel","split","statusTone","status","formatValue","receiptRows","rows","total","s","tried","w","formatReceipt","healthRows","lc","lag","PALETTE","env","supportsColor","painter","on","tone","bold","rgb","box","title","lines","paint","width","l","top","bottom","LABEL","prettyReceipt","gap","prettyHealth","health","header","widths","i","fmt","cells","plain","bad","prettyError"],"mappings":"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","file":"index.cjs","sourcesContent":["/** JSON-RPC error codes, mirroring `ErrorCode` in backend/crates/core/src/error.rs. */\r\nexport const ERROR_CODES = {\r\n INVALID_PROOF: -32010,\r\n ROOT_UNAVAILABLE: -32011,\r\n UNSUPPORTED_VERIFICATION: -32012,\r\n PRIVACY_UNAVAILABLE: -32013,\r\n POLICY_UNSATISFIABLE: -32014,\r\n PROVIDER_TIMEOUT: -32015,\r\n ALL_PROVIDERS_FAILED: -32016,\r\n ROOT_MISMATCH: -32017,\r\n INVALID_REQUEST: -32602,\r\n INTERNAL_ERROR: -32603,\r\n} as const\r\n\r\n/** Client-side codes (not sent by the engine). */\r\nexport const CLIENT_CODES = { ENGINE_UNREACHABLE: -1, SCHEMA_MISMATCH: -2, CHAIN_MISMATCH: -3 } as const\r\n\r\nexport type EngineErrorName = keyof typeof ERROR_CODES\r\nexport type VeriqErrorName = EngineErrorName | keyof typeof CLIENT_CODES | 'UNKNOWN'\r\n\r\nconst DEFAULT_URL = 'http://127.0.0.1:8547'\r\n\r\n/** What each code means, in one line. */\r\nexport const ERROR_MEANINGS: Record<EngineErrorName, string> = {\r\n INVALID_PROOF: 'Every attempted proof failed verification against the pinned state root.',\r\n ROOT_UNAVAILABLE: 'No trusted root: the light client is not synced and dev mode is off.',\r\n UNSUPPORTED_VERIFICATION: 'This method or block tag cannot be proven under the chosen policy.',\r\n PRIVACY_UNAVAILABLE: 'Privacy is required but no private-transport provider is healthy. Nothing was sent.',\r\n POLICY_UNSATISFIABLE: 'The policy contradicts itself, e.g. \"latest\" blocks with verification required.',\r\n PROVIDER_TIMEOUT: 'The shared deadline ran out before any provider returned a valid proof.',\r\n ALL_PROVIDERS_FAILED: 'Every eligible provider failed or was cooling down.',\r\n ROOT_MISMATCH: 'Two trusted light clients (engine and browser) report different roots for the same finalized block.',\r\n INVALID_REQUEST: 'The request parameters are malformed (bad address, slot or policy).',\r\n INTERNAL_ERROR: 'The engine could not complete the request because an internal service is unavailable.',\r\n}\r\n\r\n/** What to do about it, in one line. */\r\nexport const ERROR_HINTS: Record<VeriqErrorName, string> = {\r\n INVALID_PROOF: 'Every provider sent a proof that does not match the finalized root. Add an honest provider or wait for cooldowns.',\r\n ROOT_UNAVAILABLE: \"The light client hasn't synced a finalized root yet. Wait ~1 min or check /health.\",\r\n UNSUPPORTED_VERIFICATION: \"Veriq can't prove this method or block tag. Use blockTag 'finalized' or verification 'preferred'.\",\r\n PRIVACY_UNAVAILABLE: \"No private-transport provider is healthy. Use privacy 'preferred' or 'off'.\",\r\n POLICY_UNSATISFIABLE: \"latest + verification=required can't be proven. Use blockPolicy 'finalized'.\",\r\n PROVIDER_TIMEOUT: 'No valid proof arrived before the deadline. Raise timeoutMs or check provider health.',\r\n ALL_PROVIDERS_FAILED: 'Every provider failed or is cooling down. Check veriq health for breaker states.',\r\n ROOT_MISMATCH: 'Nothing was verified. One light client follows a wrong chain or a bad checkpoint: check both checkpoints and consensus APIs.',\r\n INVALID_REQUEST: 'Check the address (0x + 40 hex), slot (0x + up to 64 hex) and policy fields.',\r\n INTERNAL_ERROR: 'Retry shortly; if the error persists, check the engine health endpoint.',\r\n ENGINE_UNREACHABLE: `No Veriq engine at ${DEFAULT_URL}. Start it with: cd backend && cargo run -p veriq-server`,\r\n SCHEMA_MISMATCH: 'The engine answered with a shape this SDK does not understand. Make sure SDK and engine versions match.',\r\n CHAIN_MISMATCH: 'The engine serves another chain than this reader reads. Point the client at an engine started with the matching VERIQ_NETWORK.',\r\n UNKNOWN: 'Unexpected engine error. Check the engine logs.',\r\n}\r\n\r\nexport interface VeriqErrorOptions {\r\n data?: unknown\r\n receiptId?: string\r\n hint?: string\r\n cause?: unknown\r\n}\r\n\r\n/**\r\n * Base class for every error the SDK throws. Fail-closed: a failed guarantee is an error,\r\n * never a weaker answer.\r\n * @example\r\n * try { await veriq.readBalance({ address }) }\r\n * catch (e) { if (isVeriqError(e)) console.error(e.codeName, e.hint) }\r\n */\r\nexport class VeriqError extends Error {\r\n /** JSON-RPC engine code or a negative client code. */\r\n readonly code: number\r\n /** Stable name such as \"POLICY_UNSATISFIABLE\". */\r\n readonly codeName: VeriqErrorName\r\n /** One-line advice on what to do next. */\r\n readonly hint: string\r\n readonly data?: unknown\r\n /** Request id of the receipt, when the engine stored one. */\r\n readonly receiptId?: string\r\n\r\n constructor(code: number, message: string, opts: VeriqErrorOptions = {}) {\r\n super(message, opts.cause === undefined ? undefined : { cause: opts.cause })\r\n this.name = new.target.name\r\n this.code = code\r\n this.codeName = nameForCode(code)\r\n this.hint = opts.hint ?? ERROR_HINTS[this.codeName]\r\n if (opts.data !== undefined) this.data = opts.data\r\n const rid = opts.receiptId ?? receiptIdFrom(opts.data)\r\n if (rid !== undefined) this.receiptId = rid\r\n }\r\n\r\n /** What the code means (for engine codes). */\r\n get meaning(): string {\r\n return this.codeName in ERROR_MEANINGS ? ERROR_MEANINGS[this.codeName as EngineErrorName] : this.message\r\n }\r\n\r\n /** `VeriqError[-32014 POLICY_UNSATISFIABLE]: message — hint` */\r\n override toString(): string {\r\n return `VeriqError[${this.code} ${this.codeName}]: ${this.message} — ${this.hint}`\r\n }\r\n}\r\n\r\nexport class InvalidProofError extends VeriqError {}\r\nexport class RootUnavailableError extends VeriqError {}\r\nexport class UnsupportedVerificationError extends VeriqError {}\r\nexport class PrivacyUnavailableError extends VeriqError {}\r\nexport class PolicyUnsatisfiableError extends VeriqError {}\r\nexport class ProviderTimeoutError extends VeriqError {}\r\nexport class AllProvidersFailedError extends VeriqError {}\r\n/** The browser light client and the engine disagree about the same finalized block. */\r\nexport class RootMismatchError extends VeriqError {}\r\nexport class InvalidRequestError extends VeriqError {}\r\nexport class InternalError extends VeriqError {}\r\n/** The engine serves another chain than the one this client reads (S6). Nothing was read. */\r\nexport class ChainMismatchError extends VeriqError {}\r\n/** The engine could not be reached (network failure, nothing listening). */\r\nexport class EngineUnreachableError extends VeriqError {}\r\n/** The engine's answer did not match the receipt schema. `issues` lists readable paths. */\r\nexport class VeriqSchemaError extends VeriqError {\r\n readonly issues: string[]\r\n constructor(issues: string[], opts: VeriqErrorOptions = {}) {\r\n super(CLIENT_CODES.SCHEMA_MISMATCH, issues.join('; '), opts)\r\n this.issues = issues\r\n }\r\n}\r\n\r\ntype ErrorClass = new (code: number, message: string, opts?: VeriqErrorOptions) => VeriqError\r\n\r\n/** Code -> error class. */\r\nexport const ERROR_CLASSES: Record<number, ErrorClass> = {\r\n [ERROR_CODES.INVALID_PROOF]: InvalidProofError,\r\n [ERROR_CODES.ROOT_UNAVAILABLE]: RootUnavailableError,\r\n [ERROR_CODES.UNSUPPORTED_VERIFICATION]: UnsupportedVerificationError,\r\n [ERROR_CODES.PRIVACY_UNAVAILABLE]: PrivacyUnavailableError,\r\n [ERROR_CODES.POLICY_UNSATISFIABLE]: PolicyUnsatisfiableError,\r\n [ERROR_CODES.PROVIDER_TIMEOUT]: ProviderTimeoutError,\r\n [ERROR_CODES.ALL_PROVIDERS_FAILED]: AllProvidersFailedError,\r\n [ERROR_CODES.ROOT_MISMATCH]: RootMismatchError,\r\n [ERROR_CODES.INVALID_REQUEST]: InvalidRequestError,\r\n [ERROR_CODES.INTERNAL_ERROR]: InternalError,\r\n [CLIENT_CODES.ENGINE_UNREACHABLE]: EngineUnreachableError,\r\n [CLIENT_CODES.CHAIN_MISMATCH]: ChainMismatchError,\r\n}\r\n\r\nconst ALL_CODES: Record<string, number> = { ...ERROR_CODES, ...CLIENT_CODES }\r\n\r\nfunction nameForCode(code: number): VeriqErrorName {\r\n for (const [name, c] of Object.entries(ALL_CODES)) if (c === code) return name as VeriqErrorName\r\n return 'UNKNOWN'\r\n}\r\n\r\n/** \"POLICY_UNSATISFIABLE\" for -32014, undefined for unknown codes. */\r\nexport function errorNameForCode(code: number): EngineErrorName | undefined {\r\n const n = nameForCode(code)\r\n return n in ERROR_CODES ? (n as EngineErrorName) : undefined\r\n}\r\n\r\nfunction receiptIdFrom(data: unknown): string | undefined {\r\n if (data && typeof data === 'object' && 'receiptId' in data && typeof data.receiptId === 'string') return data.receiptId\r\n return undefined\r\n}\r\n\r\n/** Build the right subclass from a JSON-RPC error object. */\r\nexport function errorFromRpc(err: { code: number; message: string; data?: unknown }): VeriqError {\r\n const Cls = ERROR_CLASSES[err.code] ?? VeriqError\r\n return new Cls(err.code, err.message, { data: err.data })\r\n}\r\n\r\n/**\r\n * Type guard for any SDK error.\r\n * @example\r\n * if (isVeriqError(e) && e instanceof PolicyUnsatisfiableError) showFinalizedHint()\r\n */\r\nexport function isVeriqError(e: unknown): e is VeriqError {\r\n return e instanceof VeriqError\r\n}\r\n","import type { Policy } from './types'\r\n\r\n/**\r\n * Only proven answers, pinned to finalized blocks. The default.\r\n * @example createVeriq({ policy: verifiedFinalized })\r\n */\r\nexport const verifiedFinalized: Policy = Object.freeze({\r\n verification: 'required',\r\n privacy: 'off',\r\n consistency: 'single',\r\n blockPolicy: 'finalized',\r\n timeoutMs: 8000,\r\n})\r\n\r\n/**\r\n * Like verifiedFinalized, and also asks a second provider at the same block (recorded as agree / divergent).\r\n * @example veriq.withPolicy(verifiedCompare)\r\n */\r\nexport const verifiedCompare: Policy = Object.freeze({ ...verifiedFinalized, consistency: 'compare' })\r\n\r\n/**\r\n * Verified and private: only private-transport providers. Fails with PRIVACY_UNAVAILABLE rather than sending direct.\r\n * @example veriq.readBalance({ address, policy: privateVerified })\r\n */\r\nexport const privateVerified: Policy = Object.freeze({ ...verifiedFinalized, privacy: 'required' })\r\n\r\n/**\r\n * For local development without a synced light client: returns `unverified` receipts instead of failing.\r\n * @example createVeriq({ policy: devUnverified })\r\n */\r\nexport const devUnverified: Policy = Object.freeze({\r\n verification: 'preferred',\r\n privacy: 'off',\r\n consistency: 'single',\r\n blockPolicy: 'finalized',\r\n timeoutMs: 8000,\r\n})\r\n\r\n/**\r\n * All presets by name.\r\n * @example presets.verifiedFinalized\r\n */\r\nexport const presets = { verifiedFinalized, verifiedCompare, privateVerified, devUnverified } as const\r\nexport type PresetName = keyof typeof presets\r\n","import { z } from 'zod'\r\n\r\n/*\r\n * Mirrors backend/crates/core/src/receipt.rs and backend/crates/core/src/policy.rs field for field.\r\n * Change both in the same PR. B256 serializes as 0x-hex, u64/u32 as JSON numbers,\r\n * Option<T> as null, enums as kebab-case strings.\r\n */\r\n\r\nconst HEX = 'expected 0x-hex'\r\nconst hex = (bytes?: number) =>\r\n z\r\n .string({ required_error: HEX, invalid_type_error: HEX })\r\n .regex(bytes ? new RegExp(`^0x[0-9a-fA-F]{${bytes * 2}}$`) : /^0x[0-9a-fA-F]+$/, bytes ? `expected 0x-hex (${bytes} bytes)` : HEX)\r\n\r\nconst u64 = z.number({ required_error: 'expected a number' }).int().nonnegative()\r\n\r\n/** 32-byte hash (B256). */\r\nexport const Hex32Schema = hex(32)\r\n\r\n// ---------------------------------------------------------------- enums\r\n\r\nexport const VerificationStatusSchema = z.enum(['verified', 'unverified', 'unsupported'])\r\nexport const RootSourceSchema = z.enum(['local-light-client', 'fixture', 'untrusted-rpc'])\r\nexport const VerifierLocationSchema = z.enum(['local-engine', 'remote-engine', 'browser'])\r\nexport const MechanismSchema = z.enum(['account-proof', 'storage-proof', 'code-hash'])\r\nexport const TransportKindSchema = z.enum(['direct', 'ohttp', 'anyone-socks', 'anon-rpc'])\r\nexport const ComparisonSchema = z.enum(['not-run', 'agree', 'divergent'])\r\n\r\n// ---------------------------------------------------------------- receipt.rs\r\n\r\nexport const IdentitySchema = z.object({\r\n requestId: z.string(),\r\n method: z.string(),\r\n requestBinding: z.string(),\r\n resultBinding: z.string(),\r\n})\r\n\r\nexport const BlockSchema = z.object({\r\n number: u64,\r\n hash: Hex32Schema,\r\n stateRoot: Hex32Schema,\r\n finalized: z.boolean(),\r\n /** S6: the chain this block is on. Absent in receipts from engines before mainnet support. */\r\n chainId: u64.optional(),\r\n})\r\n\r\nexport const BootstrapSchema = z.object({\r\n source: z.string().nullable().default(null),\r\n checkpoint: z.string().nullable().default(null),\r\n checkpointSource: z.string().nullable().default(null),\r\n})\r\n\r\nexport const VerificationSchema = z.object({\r\n status: VerificationStatusSchema,\r\n rootSource: RootSourceSchema,\r\n verifierLocation: VerifierLocationSchema,\r\n mechanisms: z.array(MechanismSchema),\r\n bootstrap: BootstrapSchema,\r\n})\r\n\r\nexport const PrivacySchema = z.object({\r\n transport: TransportKindSchema,\r\n mechanism: z.string().nullable().default(null),\r\n})\r\n\r\n/** `AttemptOutcome` in receipt.rs. */\r\nexport const AttemptOutcomeSchema = z.enum(['success', 'transport-failure', 'provider-error', 'invalid-proof'])\r\n\r\n/** `RoutingAttempt` in receipt.rs: one provider tried for this read. */\r\nexport const RoutingAttemptSchema = z.object({\r\n provider: z.string(),\r\n outcome: AttemptOutcomeSchema,\r\n elapsedMs: u64,\r\n failureReason: z.string().nullish(),\r\n})\r\n\r\nexport const RoutingSchema = z.object({\r\n comparison: ComparisonSchema,\r\n providersTried: u64,\r\n providerLabel: z.string().nullable().default(null),\r\n // #[serde(default)] in receipt.rs: older receipts without attempts still parse.\r\n attempts: z.array(RoutingAttemptSchema).default([]),\r\n})\r\n\r\nexport const FreshnessSchema = z.object({\r\n observedAt: u64,\r\n ageSeconds: u64,\r\n pinned: z.boolean(),\r\n})\r\n\r\nexport const WarningSchema = z.object({ code: z.string(), message: z.string() })\r\n\r\n/** The Trust Receipt attached to every engine answer (`Receipt` in receipt.rs). */\r\nexport const TrustReceiptSchema = z.object({\r\n identity: IdentitySchema,\r\n block: BlockSchema,\r\n verification: VerificationSchema,\r\n privacy: PrivacySchema,\r\n routing: RoutingSchema,\r\n freshness: FreshnessSchema,\r\n warnings: z.array(WarningSchema).default([]),\r\n})\r\n\r\n// ---------------------------------------------------------------- policy.rs (+ README \"Policies\")\r\n\r\n/** `VerificationPolicy` in policy.rs. */\r\nexport const VerificationPolicySchema = z.enum(['required', 'preferred', 'disabled'])\r\n/** `BlockPolicy` in policy.rs. */\r\nexport const BlockPolicySchema = z.enum(['finalized', 'latest'])\r\n\r\n/**\r\n * Full request policy. Only `verification` and `blockPolicy` exist in policy.rs today;\r\n * `privacy`, `consistency` and `timeoutMs` follow the README.\r\n */\r\nexport const PolicySchema = z.object({\r\n verification: VerificationPolicySchema,\r\n privacy: z.enum(['required', 'preferred', 'off']),\r\n consistency: z.enum(['single', 'compare']),\r\n blockPolicy: BlockPolicySchema,\r\n timeoutMs: z.number().int().min(1).max(120_000),\r\n})\r\n\r\n// ---------------------------------------------------------------- engine envelopes\r\n// Not part of the locked receipt: what the engine wraps around it.\r\n\r\n/** One provider attempt. `outcome` is \"ok\", an error name such as INVALID_PROOF, or \"transport_error\". */\r\n/** receipt.rs `AttemptOutcome` -> the display label used across the SDK and dashboard. */\r\nexport const OUTCOME_LABEL: Record<string, string> = {\r\n success: 'ok',\r\n 'invalid-proof': 'INVALID_PROOF',\r\n 'transport-failure': 'transport_error',\r\n 'provider-error': 'PROVIDER_ERROR',\r\n}\r\n\r\n/**\r\n * Accepts both attempt forms the engine writes: receipt.rs `RoutingAttempt`\r\n * ({ outcome: \"invalid-proof\", failureReason }) and the display form ({ outcome: \"INVALID_PROOF\", reason }).\r\n */\r\nfunction normalizeAttempt(raw: unknown): unknown {\r\n if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) return raw\r\n const a = raw as Record<string, unknown>\r\n const outcome = typeof a.outcome === 'string' ? (OUTCOME_LABEL[a.outcome] ?? a.outcome) : a.outcome\r\n const reason = a.reason ?? a.failureReason\r\n return { provider: a.provider, outcome, elapsedMs: a.elapsedMs, ...(reason != null ? { reason } : {}) }\r\n}\r\n\r\nexport const AttemptSchema = z.preprocess(\r\n normalizeAttempt,\r\n z.object({\r\n provider: z.string(),\r\n outcome: z.string(),\r\n elapsedMs: z.number().nonnegative(),\r\n reason: z.string().nullish(),\r\n }),\r\n)\r\n\r\nexport const RpcErrorSchema = z.object({\r\n code: z.number().int(),\r\n message: z.string(),\r\n data: z.unknown().optional(),\r\n})\r\n\r\n/** Result of veriq_readBalance / veriq_readStorage. `value` is a hex quantity. */\r\nexport const ReadResultSchema = z.object({\r\n value: hex(),\r\n receipt: TrustReceiptSchema,\r\n attempts: z.array(AttemptSchema).default([]),\r\n})\r\n\r\n/** `veriq_getRoot`: the finalized block the engine verifies against right now. */\r\nexport const RootInfoSchema = z.object({\r\n number: z.number().int().nonnegative(),\r\n hash: Hex32Schema,\r\n stateRoot: Hex32Schema,\r\n rootSource: z.string(),\r\n verified: z.boolean(),\r\n /** S6: the engine's chain. Absent from older engines. */\r\n chainId: z.number().int().positive().optional(),\r\n})\r\n\r\n/** A stored receipt row (GET /receipts, GET /receipts/:id). Failed reads carry `error` instead of `receipt`. */\r\nexport const ReceiptRecordSchema = z.object({\r\n id: z.string(),\r\n createdAt: z.number(),\r\n method: z.string(),\r\n params: z.object({ address: z.string().optional(), slot: z.string().optional() }),\r\n value: z.string().nullish(),\r\n blockNumber: u64.nullish(),\r\n receipt: TrustReceiptSchema.nullish(),\r\n error: RpcErrorSchema.nullish(),\r\n attempts: z.array(AttemptSchema).default([]),\r\n})\r\n\r\nexport const ReceiptListSchema = z.object({ receipts: z.array(ReceiptRecordSchema) })\r\n\r\nexport const BreakerStateSchema = z.enum(['closed', 'open', 'half-open'])\r\n\r\nexport const ProviderHealthSchema = z.object({\r\n name: z.string(),\r\n chainOk: z.boolean(),\r\n proofSupport: z.boolean(),\r\n eip1898: z.boolean(),\r\n transport: TransportKindSchema.default('direct'),\r\n breaker: z.object({\r\n state: BreakerStateSchema,\r\n cooldownUntil: z.number().nullish(),\r\n reason: z.string().nullish(),\r\n }),\r\n successRate: z.number().min(0).max(1).nullish(),\r\n lastError: z.string().nullish(),\r\n})\r\n\r\n/** `LightClientStatus` in backend/crates/light-client, plus optional head/checkpoint info. */\r\nexport const LightClientStatusSchema = z.object({\r\n synced: z.boolean(),\r\n finalizedNumber: u64.nullish(),\r\n finalizedHash: Hex32Schema.nullish(),\r\n lagSeconds: u64.nullish(),\r\n lastUpdateUnix: u64.nullish(),\r\n headNumber: u64.nullish(),\r\n checkpoint: z.string().nullish(),\r\n checkpointSource: z.string().nullish(),\r\n})\r\n\r\nconst EngineHealthShape = z.object({\r\n ok: z.boolean().default(true),\r\n chainId: z.number().int().optional(),\r\n bind: z.string().optional(),\r\n /** null while the engine has no root (light client not synced). */\r\n rootSource: RootSourceSchema.nullable(),\r\n devMode: z.boolean().default(false),\r\n /** Per-provider health. Empty when the engine only reports a count. */\r\n providers: z.array(ProviderHealthSchema),\r\n providerCount: z.number().int().nonnegative(),\r\n lightClient: LightClientStatusSchema,\r\n /** Why the engine is degraded, e.g. ROOT_UNAVAILABLE. */\r\n error: z.object({ code: z.string(), message: z.string() }).nullish(),\r\n})\r\n\r\nconst isObj = (v: unknown): v is Record<string, unknown> => typeof v === 'object' && v !== null && !Array.isArray(v)\r\n\r\n/**\r\n * The engine's GET /health (backend/crates/server/src/http.rs) is flat:\r\n * { status: \"ok\"|\"degraded\", synced, rootSource?, finalizedNumber?, finalizedHash?, headNumber?, lagSeconds?,\r\n * providers: <count>, bootstrap?, bind, error?, message? }\r\n * This turns it into EngineHealth. The nested shape is accepted unchanged.\r\n */\r\nfunction normalizeHealth(raw: unknown): unknown {\r\n if (!isObj(raw)) return raw\r\n const providers = Array.isArray(raw.providers) ? raw.providers : []\r\n const providerCount = typeof raw.providers === 'number' ? raw.providers : providers.length\r\n if (isObj(raw.lightClient)) return { rootSource: null, providerCount, ...raw, providers }\r\n const bootstrap = isObj(raw.bootstrap) ? raw.bootstrap : {}\r\n const rootSource = typeof raw.rootSource === 'string' ? raw.rootSource : null\r\n return {\r\n ok: raw.status === undefined ? true : raw.status === 'ok',\r\n ...(typeof raw.bind === 'string' ? { bind: raw.bind } : {}),\r\n rootSource,\r\n devMode: rootSource === 'untrusted-rpc',\r\n providers,\r\n providerCount,\r\n lightClient: {\r\n synced: raw.synced === true,\r\n finalizedNumber: raw.finalizedNumber ?? null,\r\n finalizedHash: raw.finalizedHash ?? null,\r\n lagSeconds: raw.lagSeconds ?? null,\r\n lastUpdateUnix: raw.lastUpdateUnix ?? null,\r\n headNumber: raw.headNumber ?? null,\r\n checkpoint: bootstrap.checkpoint ?? null,\r\n checkpointSource: bootstrap.checkpointSource ?? null,\r\n },\r\n error: typeof raw.error === 'string' ? { code: raw.error, message: typeof raw.message === 'string' ? raw.message : '' } : null,\r\n }\r\n}\r\n\r\n/** GET /health (normalized; see normalizeHealth). */\r\nexport const EngineHealthSchema = z.preprocess(normalizeHealth, EngineHealthShape)\r\n\r\n/** veriq_getCapabilities */\r\nexport const CapabilitiesSchema = z\r\n .object({\r\n methods: z.array(z.string()),\r\n verifiedMethods: z.array(z.string()).default([]),\r\n blockPolicies: z.array(BlockPolicySchema).default(['finalized']),\r\n privacy: z.boolean().default(false),\r\n })\r\n .passthrough()\r\n\r\n// ---------------------------------------------------------------- EIP-7702 Delegation Guard\r\n\r\nexport const DelegationStatusSchema = z.union([\r\n z.object({\r\n status: z.enum(['normal-eoa', 'contract', 'revoked', 'invalid-designator']),\r\n }),\r\n z.object({\r\n status: z.literal('delegated'),\r\n delegate: hex(20),\r\n }),\r\n z.enum(['normal-eoa', 'delegated', 'contract', 'revoked', 'invalid-designator']),\r\n])\r\n\r\nexport const DelegationSecurityClassificationSchema = z.enum([\r\n 'normal-eoa',\r\n 'smart-contract',\r\n 'delegation-detected',\r\n 'delegation-revoked',\r\n 'unverified-delegate',\r\n 'delegate-code-verified',\r\n 'potential-risk',\r\n 'security-assessment-unavailable',\r\n])\r\n\r\nexport const DelegationResultSchema = z.object({\r\n address: hex(20),\r\n status: DelegationStatusSchema,\r\n isDelegated: z.boolean(),\r\n delegateAddress: hex(20).nullish(),\r\n codeHash: Hex32Schema,\r\n delegateCodeHash: Hex32Schema.nullish(),\r\n securityClassification: DelegationSecurityClassificationSchema,\r\n blockNumber: u64.optional(),\r\n verified: z.boolean().default(true),\r\n receipt: TrustReceiptSchema,\r\n})\r\n\r\n// ---------------------------------------------------------------- readable issues\r\n\r\nfunction valueAt(input: unknown, path: (string | number)[]): unknown {\r\n let cur: unknown = input\r\n for (const key of path) {\r\n if (cur === null || typeof cur !== 'object') return undefined\r\n cur = (cur as Record<string | number, unknown>)[key]\r\n }\r\n return cur\r\n}\r\n\r\nfunction show(v: unknown): string {\r\n if (v === undefined) return 'undefined'\r\n if (typeof v === 'string') return JSON.stringify(v.length > 24 ? `${v.slice(0, 24)}…` : v)\r\n if (v === null || typeof v !== 'object') return String(v)\r\n return Array.isArray(v) ? 'array' : 'object'\r\n}\r\n\r\n/** \"receipt.block.stateRoot: expected 0x-hex, got undefined\" */\r\nexport function formatIssues(error: z.ZodError, input: unknown, root: string): string[] {\r\n return error.issues.map((issue) => {\r\n const path = [root, ...issue.path].join('.')\r\n const got = show(valueAt(input, issue.path))\r\n let what = issue.message\r\n if (issue.code === 'invalid_type' && issue.message === 'Required') what = `expected ${issue.expected}`\r\n else if (issue.code === 'invalid_type' && issue.message.startsWith('Expected')) what = `expected ${issue.expected}`\r\n else if (issue.code === 'invalid_enum_value') what = `expected one of ${issue.options.join(' | ')}`\r\n return `${path}: ${what}, got ${got}`\r\n })\r\n}\r\n","import { CLIENT_CODES, EngineUnreachableError, ERROR_CODES, ProviderTimeoutError, VeriqSchemaError, errorFromRpc } from './errors'\r\nimport { formatIssues } from './schema'\r\nimport type { z } from 'zod'\r\n\r\nexport interface RpcContext {\r\n url: string\r\n fetch: typeof fetch\r\n debug: boolean\r\n}\r\n\r\nexport interface CallOptions {\r\n timeoutMs: number\r\n signal?: AbortSignal\r\n}\r\n\r\nlet nextId = 1\r\n\r\n/** URL without query string or fragment, safe to show and log. */\r\nexport function safeUrl(url: string): string {\r\n return url.split(/[?#]/)[0] ?? url\r\n}\r\n\r\nfunction unreachable(ctx: RpcContext, detail: string, cause?: unknown): EngineUnreachableError {\r\n const at = safeUrl(ctx.url) || '/'\r\n return new EngineUnreachableError(CLIENT_CODES.ENGINE_UNREACHABLE, `Could not reach the Veriq engine at ${at}: ${detail}`, {\r\n hint: `No Veriq engine at ${at}. Start it with: cd backend && cargo run -p veriq-server`,\r\n cause,\r\n })\r\n}\r\n\r\nasync function send(ctx: RpcContext, input: string, init: RequestInit, opts: CallOptions, label: string): Promise<unknown> {\r\n const controller = new AbortController()\r\n let timedOut = false\r\n const timer = setTimeout(() => {\r\n timedOut = true\r\n controller.abort()\r\n }, opts.timeoutMs)\r\n const onAbort = () => controller.abort()\r\n opts.signal?.addEventListener('abort', onAbort, { once: true })\r\n const started = Date.now()\r\n try {\r\n let res: Response\r\n try {\r\n res = await ctx.fetch(input, { ...init, signal: controller.signal })\r\n } catch (err) {\r\n if (timedOut) {\r\n throw new ProviderTimeoutError(ERROR_CODES.PROVIDER_TIMEOUT, `No answer from the engine within ${opts.timeoutMs} ms (client-side timeout)`, {\r\n hint: 'The engine did not answer in time. Raise timeoutMs, or check that the engine is healthy with: veriq health',\r\n cause: err,\r\n })\r\n }\r\n if (opts.signal?.aborted) throw err\r\n throw unreachable(ctx, err instanceof Error ? err.message : String(err), err)\r\n }\r\n let body: unknown\r\n try {\r\n body = await res.json()\r\n } catch (err) {\r\n throw unreachable(ctx, `HTTP ${res.status} with a non-JSON body. Is this a Veriq engine?`, err)\r\n }\r\n if (!res.ok && !(body && typeof body === 'object' && 'error' in body)) {\r\n throw unreachable(ctx, `HTTP ${res.status}`)\r\n }\r\n return body\r\n } finally {\r\n clearTimeout(timer)\r\n opts.signal?.removeEventListener('abort', onAbort)\r\n // Never logs params, addresses or full URLs.\r\n if (ctx.debug) console.debug(`[veriq] ${label} ${Date.now() - started} ms`)\r\n }\r\n}\r\n\r\n/** A JSON-RPC success: `result`, plus the engine's top-level `veriq` receipt when it sent one. */\r\nexport interface RpcEnvelope {\r\n result: unknown\r\n /** Unparsed. Standard eth_* reads carry their Trust Receipt here (rpc.rs `success_response`). */\r\n veriq?: unknown\r\n}\r\n\r\n/** One JSON-RPC call. Retries: none. Throws typed VeriqErrors. */\r\nexport async function rpcCall(ctx: RpcContext, method: string, params: unknown[], opts: CallOptions): Promise<unknown> {\r\n return (await rpcEnvelope(ctx, method, params, opts)).result\r\n}\r\n\r\n/** Like rpcCall, but keeps the top-level `veriq` member next to `result`. */\r\nexport async function rpcEnvelope(ctx: RpcContext, method: string, params: unknown[], opts: CallOptions): Promise<RpcEnvelope> {\r\n const body = await send(\r\n ctx,\r\n ctx.url || '/',\r\n {\r\n method: 'POST',\r\n headers: { 'content-type': 'application/json' },\r\n body: JSON.stringify({ jsonrpc: '2.0', id: nextId++, method, params }),\r\n },\r\n opts,\r\n method,\r\n )\r\n if (!body || typeof body !== 'object') throw new VeriqSchemaError([`response: expected a JSON-RPC object, got ${typeof body}`])\r\n if ('error' in body && body.error && typeof body.error === 'object') {\r\n const e = body.error as { code?: unknown; message?: unknown; data?: unknown }\r\n if (typeof e.code === 'number') {\r\n throw errorFromRpc({ code: e.code, message: typeof e.message === 'string' ? e.message : 'engine error', data: e.data })\r\n }\r\n }\r\n if (!('result' in body)) throw new VeriqSchemaError(['response.result: expected a value, got undefined'])\r\n return 'veriq' in body && body.veriq != null ? { result: body.result, veriq: body.veriq } : { result: body.result }\r\n}\r\n\r\n/** GET a JSON endpoint on the engine (e.g. /health). */\r\nexport function httpGet(ctx: RpcContext, path: string, opts: CallOptions): Promise<unknown> {\r\n return send(ctx, `${ctx.url}${path}`, { method: 'GET' }, opts, `GET ${path.split('?')[0]}`)\r\n}\r\n\r\n/** Parse with a Zod schema; a mismatch throws VeriqSchemaError with readable paths. */\r\nexport function parseWith<S extends z.ZodTypeAny>(schema: S, input: unknown, root: string): z.output<S> {\r\n const res = schema.safeParse(input)\r\n if (!res.success) throw new VeriqSchemaError(formatIssues(res.error, input, root))\r\n return res.data as z.output<S>\r\n}\r\n","// Type-only viem import: the transport has no runtime dependency on viem.\r\nimport type { EIP1193RequestFn, Transport } from 'viem'\r\nimport { ERROR_CODES, UnsupportedVerificationError } from './errors'\r\nimport type { VeriqClient } from './client'\r\nimport type { Policy, TrustReceipt } from './types'\r\n\r\nexport interface VeriqTransportOptions {\r\n /** Policy for verified reads. Default: the client's policy. */\r\n policy?: Policy\r\n /**\r\n * Reject block tags other than \"finalized\" before sending.\r\n * Default: true when the policy requires verification.\r\n */\r\n strict?: boolean\r\n /** Called with every receipt from a verified read, including eth_getTransactionCount and eth_getCode. */\r\n onReceipt?: (receipt: TrustReceipt) => void\r\n}\r\n\r\n/** A viem Transport that also exposes the latest receipt. */\r\nexport type VeriqTransport = Transport<'veriq'> & { readonly lastReceipt: TrustReceipt | undefined }\r\n\r\ntype Params = readonly unknown[] | undefined\r\n\r\nfunction blockTag(params: Params, index: number): unknown {\r\n return params?.[index] ?? 'latest'\r\n}\r\n\r\n/**\r\n * Build a viem custom transport backed by a Veriq client.\r\n * @example\r\n * const transport = veriq.transport({ onReceipt: (r) => console.log(r.block.number) })\r\n * const client = createPublicClient({ chain: sepolia, transport })\r\n * await client.getBalance({ address, blockTag: 'finalized' })\r\n * transport.lastReceipt?.verification.status // 'verified'\r\n */\r\nexport function createTransport(client: VeriqClient, opts: VeriqTransportOptions = {}): VeriqTransport {\r\n const policy = opts.policy ?? client.policy\r\n const strict = opts.strict ?? policy.verification === 'required'\r\n let last: TrustReceipt | undefined\r\n\r\n const record = (r: TrustReceipt) => {\r\n last = r\r\n opts.onReceipt?.(r)\r\n }\r\n\r\n const verifiedPath = (method: string, tag: unknown) => {\r\n if (tag === 'finalized') return true\r\n if (strict) {\r\n throw new UnsupportedVerificationError(\r\n ERROR_CODES.UNSUPPORTED_VERIFICATION,\r\n `${method} at block \"${typeof tag === 'string' ? tag : 'custom'}\" can't be proven; only \"finalized\" can`,\r\n { hint: \"Pass blockTag: 'finalized' (viem defaults to 'latest').\" },\r\n )\r\n }\r\n return false\r\n }\r\n\r\n async function request({ method, params }: { method: string; params?: Params }): Promise<unknown> {\r\n if (method === 'eth_getBalance' && verifiedPath(method, blockTag(params, 1))) {\r\n const r = await client.readBalance({ address: String(params?.[0]), policy })\r\n record(r.receipt)\r\n return `0x${r.value.toString(16)}`\r\n }\r\n if (method === 'eth_getStorageAt' && verifiedPath(method, blockTag(params, 2))) {\r\n const r = await client.readStorage({ address: String(params?.[0]), slot: String(params?.[1]), policy })\r\n record(r.receipt)\r\n return r.value\r\n }\r\n // Proven by the engine too; their receipt arrives in the top-level `veriq` member.\r\n if ((method === 'eth_getTransactionCount' || method === 'eth_getCode') && verifiedPath(method, blockTag(params, 1))) {\r\n const { result, receipt } = await client.requestWithReceipt(method, params ? [...params] : [])\r\n if (receipt) record(receipt)\r\n return result\r\n }\r\n // Everything else goes to the engine unchanged; it decides what it can serve.\r\n // Keep a receipt if the engine attached one.\r\n const { result, receipt } = await client.requestWithReceipt(method, params ? [...params] : [])\r\n if (receipt) record(receipt)\r\n return result\r\n }\r\n\r\n const eip1193 = request as unknown as EIP1193RequestFn\r\n const transport = (() => ({\r\n config: { key: 'veriq', name: 'Veriq', request: eip1193, retryCount: 0, type: 'veriq' as const },\r\n request: eip1193,\r\n value: {\r\n get lastReceipt() {\r\n return last\r\n },\r\n },\r\n })) as Transport<'veriq'>\r\n\r\n Object.defineProperty(transport, 'lastReceipt', { get: () => last, enumerable: true })\r\n return transport as VeriqTransport\r\n}\r\n","import { z } from 'zod'\r\nimport { ERROR_CODES, InvalidRequestError } from './errors'\r\nimport { verifiedFinalized } from './presets'\r\nimport { httpGet, parseWith, rpcCall, rpcEnvelope, type RpcContext } from './rpc'\r\nimport {\r\n CapabilitiesSchema,\r\n EngineHealthSchema,\r\n PolicySchema,\r\n ProviderHealthSchema,\r\n ReadResultSchema,\r\n ReceiptListSchema,\r\n OUTCOME_LABEL,\r\n ReceiptRecordSchema,\r\n RootInfoSchema,\r\n TrustReceiptSchema,\r\n DelegationResultSchema,\r\n formatIssues,\r\n} from './schema'\r\nimport { createTransport, type VeriqTransport, type VeriqTransportOptions } from './transport'\r\nimport type {\r\n Address,\r\n Attempt,\r\n Capabilities,\r\n EngineHealth,\r\n Hex,\r\n Policy,\r\n ProviderHealth,\r\n ReceiptRecord,\r\n TrustReceipt,\r\n VerifiedResult,\r\n DelegationResult,\r\n} from './types'\r\n\r\n/** Default engine URL. The engine only binds to localhost. */\r\nexport const DEFAULT_ENGINE_URL = 'http://127.0.0.1:8547'\r\n\r\nexport interface VeriqOptions {\r\n /** Engine URL. Default http://127.0.0.1:8547 */\r\n url?: string\r\n /** Default policy for reads. Default `verifiedFinalized`. */\r\n policy?: Policy\r\n /** Custom fetch (tests, proxies). Default: global fetch. */\r\n fetch?: typeof fetch\r\n /** Client-side timeout. Default: policy.timeoutMs + 1 s for reads, 5 s for health/receipts. */\r\n timeoutMs?: number\r\n /** Log method names and timings with console.debug. Never logs addresses or params. */\r\n debug?: boolean\r\n}\r\n\r\nexport interface ReadOptions {\r\n policy?: Policy\r\n signal?: AbortSignal\r\n}\r\n\r\n/** A Veriq client. Immutable: `withPolicy` returns a new one. */\r\nexport interface VeriqClient {\r\n readonly url: string\r\n readonly policy: Policy\r\n /**\r\n * Proven ETH balance (wei) at the pinned finalized block.\r\n * @example const { value, verified } = await veriq.readBalance({ address: '0x…' })\r\n */\r\n readBalance(args: { address: string } & ReadOptions): Promise<VerifiedResult<bigint>>\r\n /**\r\n * Proven storage slot value as 32-byte hex.\r\n * @example const { value } = await veriq.readStorage({ address, slot: '0x0' })\r\n */\r\n readStorage(args: { address: string; slot: string } & ReadOptions): Promise<VerifiedResult<Hex>>\r\n /**\r\n * Proven EIP-7702 delegation detection result and Trust Receipt.\r\n * @example const res = await veriq.getDelegation({ address: '0x…' })\r\n */\r\n getDelegation(args: { address: string } & ReadOptions): Promise<DelegationResult>\r\n /**\r\n * A stored Trust Receipt by request id (veriq_getReceipt).\r\n * @example const receipt = await veriq.getReceipt(result.receipt.identity.requestId)\r\n */\r\n getReceipt(id: string): Promise<TrustReceipt>\r\n /**\r\n * The full stored row (value, attempts, error) from GET /receipts/:id.\r\n * @example const row = await veriq.getReceiptRecord(id)\r\n */\r\n getReceiptRecord(id: string): Promise<ReceiptRecord>\r\n /**\r\n * Newest receipts first (GET /receipts?limit=).\r\n * @example const rows = await veriq.listReceipts(50)\r\n */\r\n listReceipts(limit?: number): Promise<ReceiptRecord[]>\r\n /**\r\n * Engine, light client and provider health (GET /health).\r\n * @example const { lightClient } = await veriq.health()\r\n */\r\n health(): Promise<EngineHealth>\r\n /**\r\n * Per-provider capabilities and breaker state (veriq_getProviderHealth).\r\n * @example const providers = await veriq.providers()\r\n */\r\n providers(): Promise<ProviderHealth[]>\r\n /**\r\n * Which methods and policies the engine can satisfy (veriq_getCapabilities).\r\n * @example const { verifiedMethods } = await veriq.capabilities()\r\n */\r\n capabilities(): Promise<Capabilities>\r\n /**\r\n * The finalized block the engine verifies against (veriq_getRoot). A client that fetches\r\n * its own proofs (Anon-RPC) asks the provider for exactly this block.\r\n * @example const { number, hash } = await veriq.getRoot()\r\n */\r\n getRoot(): Promise<RootInfo>\r\n /**\r\n * Verify an eth_getProof result the client fetched itself (veriq_verifyProof). Used by\r\n * `createPrivateReader`; the engine checks it against its own pinned root.\r\n */\r\n verifyProof(input: ClientProofInput, policy?: Policy): Promise<VerifiedResult<Hex>>\r\n /**\r\n * viem transport. eth_getBalance / eth_getStorageAt go through the verified path; every receipt lands in lastReceipt.\r\n * @example createPublicClient({ chain: sepolia, transport: veriq.transport() })\r\n */\r\n transport(opts?: VeriqTransportOptions): VeriqTransport\r\n /**\r\n * New client with a different default policy.\r\n * @example const strict = veriq.withPolicy(verifiedCompare)\r\n */\r\n withPolicy(policy: Policy): VeriqClient\r\n /**\r\n * Raw JSON-RPC call to the engine.\r\n * @example await veriq.request('eth_chainId')\r\n */\r\n request(method: string, params?: unknown[]): Promise<unknown>\r\n /**\r\n * Raw JSON-RPC call that also returns the Trust Receipt the engine attaches to\r\n * verified standard reads (eth_getBalance, eth_getStorageAt, eth_getTransactionCount,\r\n * eth_getCode at \"finalized\"). `receipt` is undefined for methods that carry none.\r\n * @example const { result, receipt } = await veriq.requestWithReceipt('eth_getCode', [address, 'finalized'])\r\n */\r\n requestWithReceipt(method: string, params?: unknown[]): Promise<RawResult>\r\n}\r\n\r\n/** veriq_getRoot result. */\r\nexport type RootInfo = z.output<typeof RootInfoSchema>\r\n\r\n/** veriq_verifyProof input: a proof the client fetched (through Anon-RPC) at `blockHash`. */\r\nexport interface ClientProofInput {\r\n kind: 'balance' | 'nonce' | 'storage' | 'code'\r\n address: string\r\n slot?: string\r\n /** The block from `getRoot()` the proof was fetched for. */\r\n blockHash: string\r\n /** The raw eth_getProof result. */\r\n proof: unknown\r\n /** The raw eth_getCode result (kind `code`). */\r\n code?: unknown\r\n /** Provider label (never a URL). */\r\n provider: string\r\n /** Anonymizing network, e.g. `nox`. */\r\n network: string\r\n elapsedMs?: number\r\n /**\r\n * The same finalized block, as a light client in the browser reported it (S4.2). The engine\r\n * refuses the proof with ROOT_MISMATCH unless it is exactly its own pinned block.\r\n */\r\n browserRoot?: BrowserRoot\r\n /**\r\n * S5: `browser` when the client checked this proof itself first (the engine checks it again and\r\n * marks the receipt `verifierLocation: \"browser\"`); `unavailable` when its verifier did not load.\r\n */\r\n verifier?: 'browser' | 'unavailable'\r\n}\r\n\r\n/** A finalized block from a light client running in the browser (e.g. Helios over Nox). */\r\nexport interface BrowserRoot {\r\n number: number\r\n hash: string\r\n stateRoot: string\r\n}\r\n\r\n/** `requestWithReceipt` result: the JSON-RPC `result` and the validated receipt, if any. */\r\nexport interface RawResult {\r\n result: unknown\r\n receipt: TrustReceipt | undefined\r\n}\r\n\r\nconst ADDRESS_RE = /^0x[0-9a-fA-F]{40}$/\r\nconst SLOT_RE = /^0x[0-9a-fA-F]{1,64}$/\r\n\r\n/** Receipt attempts (receipt.rs) in the display form used by VerifiedResult and the components. */\r\nexport function attemptsFromReceipt(receipt: TrustReceipt): Attempt[] {\r\n return receipt.routing.attempts.map((a) => ({\r\n provider: a.provider,\r\n outcome: OUTCOME_LABEL[a.outcome] ?? a.outcome,\r\n elapsedMs: a.elapsedMs,\r\n ...(a.failureReason ? { reason: a.failureReason } : {}),\r\n }))\r\n}\r\n\r\nfunction invalid(message: string): InvalidRequestError {\r\n return new InvalidRequestError(ERROR_CODES.INVALID_REQUEST, message)\r\n}\r\n\r\n/** Throws InvalidRequestError (no network call) for a malformed address. */\r\nexport function assertAddress(address: string): asserts address is Address {\r\n if (typeof address !== 'string' || !ADDRESS_RE.test(address)) {\r\n throw invalid('address must be 0x followed by 40 hex characters')\r\n }\r\n}\r\n\r\n/** Throws InvalidRequestError (no network call) for a malformed slot. */\r\nexport function assertSlot(slot: string): asserts slot is Hex {\r\n if (typeof slot !== 'string' || !SLOT_RE.test(slot)) throw invalid('slot must be 0x followed by 1 to 64 hex characters')\r\n}\r\n\r\n/**\r\n * Same field rules as the engine. Deliberately does NOT reject latest + required:\r\n * the engine answers POLICY_UNSATISFIABLE, so apps can show the real reason.\r\n */\r\nexport function assertPolicy(policy: Policy): void {\r\n const res = PolicySchema.safeParse(policy)\r\n if (!res.success) throw invalid(formatIssues(res.error, policy, 'policy').join('; '))\r\n}\r\n\r\n/**\r\n * Create a Veriq client.\r\n * @example\r\n * import { createVeriq } from 'veriq-client'\r\n * const veriq = createVeriq()\r\n * const { value, verified } = await veriq.readBalance({ address: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045' })\r\n */\r\nexport function createVeriq(options: VeriqOptions = {}): VeriqClient {\r\n const url = (options.url ?? DEFAULT_ENGINE_URL).replace(/\\/$/, '')\r\n const policy = options.policy ?? verifiedFinalized\r\n assertPolicy(policy)\r\n const fetchFn = options.fetch ?? ((input: RequestInfo | URL, init?: RequestInit) => globalThis.fetch(input, init))\r\n const ctx: RpcContext = { url, fetch: fetchFn, debug: options.debug ?? false }\r\n const readTimeout = (p: Policy) => options.timeoutMs ?? p.timeoutMs + 1000\r\n const shortTimeout = { timeoutMs: options.timeoutMs ?? 5000 }\r\n\r\n async function read(method: string, params: unknown[], p: Policy, signal?: AbortSignal) {\r\n assertPolicy(p)\r\n const raw = await rpcCall(ctx, method, [...params, p], { timeoutMs: readTimeout(p), ...(signal ? { signal } : {}) })\r\n const r = parseWith(ReadResultSchema, raw, 'result')\r\n // Prefer an explicit attempts list; otherwise use the ones recorded in the receipt.\r\n return { ...r, attempts: r.attempts.length ? r.attempts : attemptsFromReceipt(r.receipt) }\r\n }\r\n\r\n const client: VeriqClient = {\r\n url,\r\n policy,\r\n async readBalance({ address, policy: p = policy, signal }) {\r\n assertAddress(address)\r\n const r = await read('veriq_readBalance', [address], p, signal)\r\n return { value: BigInt(r.value), receipt: r.receipt, verified: r.receipt.verification.status === 'verified', attempts: r.attempts }\r\n },\r\n async readStorage({ address, slot, policy: p = policy, signal }) {\r\n assertAddress(address)\r\n assertSlot(slot)\r\n const r = await read('veriq_readStorage', [address, slot], p, signal)\r\n const value = `0x${BigInt(r.value).toString(16).padStart(64, '0')}` as Hex\r\n return { value, receipt: r.receipt, verified: r.receipt.verification.status === 'verified', attempts: r.attempts }\r\n },\r\n async getDelegation({ address, policy: p = policy, signal }) {\r\n assertAddress(address)\r\n assertPolicy(p)\r\n const raw = await rpcCall(ctx, 'veriq_getDelegation', [address, p], { timeoutMs: readTimeout(p), ...(signal ? { signal } : {}) })\r\n return parseWith(DelegationResultSchema, raw, 'delegation')\r\n },\r\n async getReceipt(id) {\r\n const raw = await rpcCall(ctx, 'veriq_getReceipt', [id], shortTimeout)\r\n // The engine may answer with the bare receipt or with a stored row around it.\r\n const receipt = raw && typeof raw === 'object' && 'receipt' in raw && !('identity' in raw) ? raw.receipt : raw\r\n return parseWith(TrustReceiptSchema, receipt, 'receipt')\r\n },\r\n async getReceiptRecord(id) {\r\n return parseWith(ReceiptRecordSchema, await httpGet(ctx, `/receipts/${encodeURIComponent(id)}`, shortTimeout), 'record')\r\n },\r\n async listReceipts(limit = 50) {\r\n return parseWith(ReceiptListSchema, await httpGet(ctx, `/receipts?limit=${limit}`, shortTimeout), 'receipts').receipts\r\n },\r\n async health() {\r\n return parseWith(EngineHealthSchema, await httpGet(ctx, '/health', shortTimeout), 'health')\r\n },\r\n async providers() {\r\n const raw = await rpcCall(ctx, 'veriq_getProviderHealth', [], shortTimeout)\r\n const list = raw && typeof raw === 'object' && 'providers' in raw ? raw.providers : raw\r\n return parseWith(z.array(ProviderHealthSchema), list, 'providers')\r\n },\r\n async getRoot() {\r\n return parseWith(RootInfoSchema, await rpcCall(ctx, 'veriq_getRoot', [], shortTimeout), 'root')\r\n },\r\n async verifyProof(input, p = policy) {\r\n assertPolicy(p)\r\n assertAddress(input.address)\r\n if (input.kind === 'storage') {\r\n if (input.slot === undefined) throw invalid('a storage proof needs a slot')\r\n assertSlot(input.slot)\r\n }\r\n // A new object: the caller's input is never changed. `slot` is sent only for storage.\r\n const { slot, elapsedMs, ...rest } = input\r\n const payload = {\r\n ...rest,\r\n ...(input.kind === 'storage' ? { slot } : {}),\r\n ...(elapsedMs === undefined ? {} : { elapsedMs }),\r\n }\r\n const raw = await rpcCall(ctx, 'veriq_verifyProof', [payload, p], { timeoutMs: readTimeout(p) })\r\n const r = parseWith(ReadResultSchema, raw, 'result')\r\n return { value: r.value as Hex, receipt: r.receipt, verified: r.receipt.verification.status === 'verified', attempts: attemptsFromReceipt(r.receipt) }\r\n },\r\n async capabilities() {\r\n return parseWith(CapabilitiesSchema, await rpcCall(ctx, 'veriq_getCapabilities', [], shortTimeout), 'capabilities')\r\n },\r\n transport: (opts) => createTransport(client, opts),\r\n withPolicy: (p) => createVeriq({ ...options, policy: p }),\r\n request: (method, params = []) => rpcCall(ctx, method, params, { timeoutMs: readTimeout(policy) }),\r\n async requestWithReceipt(method, params = []) {\r\n const { result, veriq } = await rpcEnvelope(ctx, method, params, { timeoutMs: readTimeout(policy) })\r\n // Same contract as veriq_* reads: a receipt that does not match the schema is an error, never dropped.\r\n return { result, receipt: veriq === undefined ? undefined : parseWith(TrustReceiptSchema, veriq, 'veriq') }\r\n },\r\n }\r\n return Object.freeze(client)\r\n}\r\n","import type { Address, Hex } from './types'\r\n\r\n/** The 3-byte EIP-7702 delegation prefix `0xef0100`. */\r\nexport const EIP7702_PREFIX = '0xef0100'\r\n\r\n/** Total byte length of a valid EIP-7702 delegation designator: 3 prefix + 20 address = 23 bytes. */\r\nexport const DESIGNATOR_BYTE_LENGTH = 23\r\n\r\n/** Total length in hex chars including '0x' prefix: 2 + 46 = 48 chars. */\r\nexport const DESIGNATOR_HEX_LENGTH = 48\r\n\r\nexport const ZERO_ADDRESS: Address = '0x0000000000000000000000000000000000000000'\r\n\r\nexport type DelegationCodeStatus =\r\n | { status: 'normal-eoa' }\r\n | { status: 'delegated'; delegate: Address }\r\n | { status: 'contract' }\r\n | { status: 'revoked' }\r\n | { status: 'invalid-designator' }\r\n\r\nexport interface ParsedDesignator {\r\n isDesignator: boolean\r\n delegate: Address | null\r\n isRevoked: boolean\r\n isMalformed: boolean\r\n}\r\n\r\n/**\r\n * Parse an EIP-7702 delegation designator from hex-encoded bytecode.\r\n *\r\n * Rules:\r\n * - Empty code (`0x` or `\"\"`) is not a designator.\r\n * - Bytecode starting with `0xef0100`:\r\n * - Exactly 23 bytes (48 hex chars including `0x`): valid designator.\r\n * If delegate is 0x00..00, it is a revoked/cleared delegation.\r\n * - Any other length: malformed designator.\r\n * - Any other non-empty bytecode: not a designator (standard contract code).\r\n */\r\nexport function parseDelegationDesignator(code: string): ParsedDesignator {\r\n const lower = code.toLowerCase()\r\n const norm = (lower.startsWith('0x') ? lower : `0x${lower}`) as Hex\r\n if (norm === '0x' || norm.length <= 2) {\r\n return { isDesignator: false, delegate: null, isRevoked: false, isMalformed: false }\r\n }\r\n\r\n if (!norm.startsWith(EIP7702_PREFIX)) {\r\n return { isDesignator: false, delegate: null, isRevoked: false, isMalformed: false }\r\n }\r\n\r\n // Starts with 0xef0100\r\n if (norm.length !== DESIGNATOR_HEX_LENGTH) {\r\n return { isDesignator: false, delegate: null, isRevoked: false, isMalformed: true }\r\n }\r\n\r\n const delegate = `0x${norm.slice(8)}` as Address\r\n const isRevoked = delegate === ZERO_ADDRESS\r\n\r\n return {\r\n isDesignator: !isRevoked,\r\n delegate: isRevoked ? null : delegate,\r\n isRevoked,\r\n isMalformed: false,\r\n }\r\n}\r\n\r\n/**\r\n * Classify account code according to EIP-7702.\r\n */\r\nexport function classifyAccountCode(code: string): {\r\n status: DelegationCodeStatus\r\n isDelegated: boolean\r\n delegateAddress: Address | null\r\n} {\r\n const parsed = parseDelegationDesignator(code)\r\n\r\n if (parsed.isMalformed) {\r\n return {\r\n status: { status: 'invalid-designator' },\r\n isDelegated: false,\r\n delegateAddress: null,\r\n }\r\n }\r\n\r\n if (parsed.isRevoked) {\r\n return {\r\n status: { status: 'revoked' },\r\n isDelegated: false,\r\n delegateAddress: null,\r\n }\r\n }\r\n\r\n if (parsed.isDesignator && parsed.delegate) {\r\n return {\r\n status: { status: 'delegated', delegate: parsed.delegate },\r\n isDelegated: true,\r\n delegateAddress: parsed.delegate,\r\n }\r\n }\r\n\r\n const norm = code.startsWith('0x') ? code : `0x${code}`\r\n if (norm === '0x' || norm.length <= 2) {\r\n return {\r\n status: { status: 'normal-eoa' },\r\n isDelegated: false,\r\n delegateAddress: null,\r\n }\r\n }\r\n\r\n return {\r\n status: { status: 'contract' },\r\n isDelegated: false,\r\n delegateAddress: null,\r\n }\r\n}\r\n","/**\r\n * Private reads: the provider request goes through a fetch you supply (Anon-RPC), the proof is\r\n * verified by the engine against its own Helios root. The engine never contacts the provider\r\n * for these reads, so the provider sees the anonymizing network's exit, not your IP.\r\n *\r\n * @example\r\n * import { AnonRpcWorker } from '@anon-rpc/browser-harness'\r\n * const nox = new AnonRpcWorker({ address: NOX_SEPOLIA, preExisting: { rpcProvider } })\r\n * const reader = createPrivateReader(veriq, {\r\n * fetch: nox.fetch,\r\n * network: 'nox',\r\n * providers: [{ label: 'publicnode', url: 'https://ethereum-sepolia-rpc.publicnode.com' }],\r\n * })\r\n * const { value, receipt } = await reader.readBalance({ address })\r\n * receipt.privacy.transport // 'anon-rpc'\r\n */\r\nimport type { BrowserRoot, RootInfo, VeriqClient } from './client'\r\nimport { assertAddress, assertSlot, attemptsFromReceipt } from './client'\r\nimport {\r\n ERROR_CODES,\r\n AllProvidersFailedError,\r\n CLIENT_CODES,\r\n ChainMismatchError,\r\n EngineUnreachableError,\r\n InternalError,\r\n InvalidProofError,\r\n InvalidRequestError,\r\n PrivacyUnavailableError,\r\n RootMismatchError,\r\n RootUnavailableError,\r\n VeriqError,\r\n} from './errors'\r\nimport { TrustReceiptSchema } from './schema'\r\nimport type { Address, DelegationResult, DelegationSecurityClassification, Hex, Policy, TrustReceipt, VerifiedResult } from './types'\r\nimport type { BrowserVerifier } from './wasm'\r\nimport { classifyAccountCode } from './delegation'\r\n\r\n/** A provider the private reader may ask, through the anonymizing fetch. */\r\nexport interface PrivateProvider {\r\n /** Shown in receipts and logs (1-64 of letters, digits, `_`, `-`, `.`). Never the URL. */\r\n label: string\r\n /** HTTPS JSON-RPC endpoint. It must allow browser requests (CORS) and serve `eth_getProof`. */\r\n url: string\r\n}\r\n\r\nexport interface PrivateReaderOptions {\r\n /** The anonymizing fetch, e.g. `AnonRpcWorker.fetch` from `@anon-rpc/browser-harness`. */\r\n fetch: (input: string, init?: RequestInit) => Promise<Response>\r\n /** Network name recorded in the receipt (`privacy.mechanism`), e.g. `'nox'`. Same rules as a label. */\r\n network: string\r\n /** Tried in order; the next one is used when a provider fails or sends a bad proof. */\r\n providers: PrivateProvider[]\r\n /** Per provider request. Default 30 s (mixnets add per-hop delay). */\r\n timeoutMs?: number\r\n /** Tests only: allow `http://` to localhost / 127.0.0.1 / [::1]. Every other URL must be HTTPS. */\r\n allowInsecureLoopback?: boolean\r\n /**\r\n * A light client in the browser (S4.2, e.g. Helios synced over Nox). When it is synced, the\r\n * read uses its finalized block and the engine's `veriq_getRoot` must be the very same block:\r\n * a different hash or state root for that number is a ROOT_MISMATCH and nothing is read.\r\n * While it is not synced (`null`), the engine's root is used alone and the receipt has no\r\n * BROWSER_LIGHT_CLIENT marker.\r\n */\r\n lightClient?: BrowserLightClient\r\n /**\r\n * How long the two light clients may disagree about *which* block is finalized (one is a\r\n * few seconds behind at an epoch boundary) before the read gives up. Default 30 s.\r\n */\r\n alignTimeoutMs?: number\r\n /**\r\n * S5: check every proof in the browser first (the WebAssembly build of the engine's verifier,\r\n * see `loadVerifier`). A proof that fails here never reaches the engine: the next provider is\r\n * asked. The engine still checks what it is sent and marks the receipt\r\n * `verifierLocation: \"browser\"`. A function is called once, on the first read (lazy load); if\r\n * it rejects, the engine verifies alone and the receipt carries BROWSER_VERIFIER_UNAVAILABLE.\r\n *\r\n * With a synced `lightClient` too, a read needs no engine at all: if the engine cannot be\r\n * reached, the value comes back with a receipt made in the browser (LOCAL_ONLY warning,\r\n * `identity.requestId` starting `local-`), which the engine never stored.\r\n */\r\n verifier?: BrowserVerifier | (() => Promise<BrowserVerifier>)\r\n /**\r\n * S6: the chain this reader reads (1 mainnet, 11155111 Sepolia). When set, `network` must be\r\n * one that serves it ({@link PRIVATE_NETWORKS}: Nox on Sepolia, Nym or Tor on mainnet),\r\n * else createPrivateReader throws PrivacyUnavailableError; and an engine whose\r\n * `veriq_getRoot` names another chain fails the read with ChainMismatchError.\r\n */\r\n chainId?: number\r\n}\r\n\r\n/**\r\n * Which anonymizing networks may carry private reads for a chain. The network follows the\r\n * chain; a reader never falls back to another one (or to a direct request).\r\n */\r\nexport const PRIVATE_NETWORKS: Readonly<Record<number, readonly string[]>> = {\r\n 1: ['nym', 'tor'],\r\n 11155111: ['nox'],\r\n}\r\n\r\n/** Throws PrivacyUnavailableError unless `network` serves `chainId`. */\r\nexport function assertNetworkForChain(chainId: number, network: string): void {\r\n const allowed = PRIVATE_NETWORKS[chainId]\r\n if (!allowed) {\r\n throw new PrivacyUnavailableError(ERROR_CODES.PRIVACY_UNAVAILABLE, `no private network is known for chain ${chainId}`)\r\n }\r\n if (!allowed.includes(network)) {\r\n throw new PrivacyUnavailableError(\r\n ERROR_CODES.PRIVACY_UNAVAILABLE,\r\n `\"${network}\" does not carry chain ${chainId}; use ${allowed.map((n) => `\"${n}\"`).join(' or ')}`,\r\n { hint: 'The private network follows the chain: Nox on Sepolia, Nym or Tor on mainnet. Nothing was sent.' },\r\n )\r\n }\r\n}\r\n\r\n/** A light client running in the browser that reports its latest finalized block. */\r\nexport interface BrowserLightClient {\r\n /** The finalized block, or `null` while not synced (or stale, or failed). */\r\n finalized(): Promise<BrowserRoot | null>\r\n}\r\n\r\nexport interface PrivateReader {\r\n readBalance(args: { address: string; policy?: Policy }): Promise<VerifiedResult<bigint>>\r\n readStorage(args: { address: string; slot: string; policy?: Policy }): Promise<VerifiedResult<Hex>>\r\n readNonce(args: { address: string; policy?: Policy }): Promise<VerifiedResult<bigint>>\r\n readCode(args: { address: string; policy?: Policy }): Promise<VerifiedResult<Hex>>\r\n getDelegation(args: { address: string; policy?: Policy }): Promise<DelegationResult>\r\n}\r\n\r\ntype Kind = 'balance' | 'nonce' | 'storage' | 'code'\r\n\r\n/** Same rule as the engine (crates/router/src/probe.rs `valid_provider_name`). */\r\nconst LABEL_RE = /^[A-Za-z0-9_.-]{1,64}$/\r\n/** How often one provider may re-fetch because the finalized block moved under it. */\r\nconst MAX_ROOT_REFRESHES = 1\r\n/** Upstream error text is cut to this length after secrets are removed. */\r\nconst MAX_DETAIL = 160\r\nconst LOOPBACK = new Set(['localhost', '127.0.0.1', '[::1]'])\r\n/** While the two light clients are at different finalized blocks, ask again this often. */\r\nconst ALIGN_POLL_MS = 1_500\r\nconst HASH_RE = /^0x[0-9a-fA-F]{64}$/\r\nconst MECHANISMS: Record<Kind, TrustReceipt['verification']['mechanisms']> = {\r\n balance: ['account-proof'],\r\n nonce: ['account-proof'],\r\n storage: ['account-proof', 'storage-proof'],\r\n code: ['account-proof', 'code-hash'],\r\n}\r\n\r\n/** JSON-RPC or transport error from the provider. The message is already sanitised. */\r\nclass UpstreamError extends Error {\r\n constructor(\r\n message: string,\r\n readonly code: number | undefined,\r\n ) {\r\n super(message)\r\n }\r\n}\r\n\r\nconst invalid = (message: string) => new InvalidRequestError(ERROR_CODES.INVALID_REQUEST, message)\r\n\r\nfunction validateOptions(opts: PrivateReaderOptions): void {\r\n if (!Array.isArray(opts.providers) || opts.providers.length === 0) {\r\n throw invalid('createPrivateReader needs at least one provider')\r\n }\r\n if (typeof opts.network !== 'string' || !LABEL_RE.test(opts.network)) {\r\n throw invalid(\"network must be 1-64 letters, digits, '_', '-' or '.'\")\r\n }\r\n const seen = new Set<string>()\r\n opts.providers.forEach((provider, index) => {\r\n // A bad label is never echoed: it could be a URL or a key pasted in the wrong field.\r\n if (typeof provider.label !== 'string' || !LABEL_RE.test(provider.label)) {\r\n throw invalid(`providers[${index}].label must be 1-64 letters, digits, '_', '-' or '.'`)\r\n }\r\n if (seen.has(provider.label)) throw invalid(`provider label \"${provider.label}\" is used twice`)\r\n seen.add(provider.label)\r\n let url: URL\r\n try {\r\n url = new URL(provider.url)\r\n } catch {\r\n throw invalid(`provider \"${provider.label}\": url is not a valid URL`)\r\n }\r\n const loopbackHttp = url.protocol === 'http:' && LOOPBACK.has(url.hostname)\r\n if (url.protocol !== 'https:' && !(opts.allowInsecureLoopback && loopbackHttp)) {\r\n throw invalid(`provider \"${provider.label}\": url must be https`)\r\n }\r\n })\r\n}\r\n\r\n/** Pieces of each provider URL that may carry a key: the URL, its path segments, query values, credentials. */\r\nfunction secretsOf(providers: PrivateProvider[]): string[] {\r\n const secrets = new Set<string>()\r\n for (const { url } of providers) {\r\n secrets.add(url)\r\n try {\r\n const u = new URL(url)\r\n secrets.add(`${u.origin}${u.pathname}`)\r\n for (const part of u.pathname.split('/')) if (part.length >= 8) secrets.add(part)\r\n for (const value of u.searchParams.values()) if (value.length >= 8) secrets.add(value)\r\n if (u.username) secrets.add(u.username)\r\n if (u.password) secrets.add(u.password)\r\n } catch {\r\n // validateOptions already rejected it\r\n }\r\n }\r\n // Longest first, so a URL is replaced before the key inside it.\r\n return [...secrets].sort((a, b) => b.length - a.length)\r\n}\r\n\r\n/** Upstream text with provider URLs, keys and any other URL removed, then truncated. */\r\nfunction sanitize(message: string, secrets: string[]): string {\r\n let out = message\r\n for (const secret of secrets) out = out.split(secret).join('<redacted>')\r\n out = out.replace(/\\b[a-z][a-z0-9+.-]*:\\/\\/[^\\s\"'<>]+/gi, '<url>')\r\n out = out.replace(/\\s+/g, ' ').trim()\r\n return out.length > MAX_DETAIL ? `${out.slice(0, MAX_DETAIL)}…` : out\r\n}\r\n\r\n/** The provider did not like the block (hash form, or does not have it yet): try by number. */\r\nfunction blockRefused(err: unknown): boolean {\r\n if (!(err instanceof UpstreamError)) return false\r\n return err.code === -32602 || err.code === -32000 || /unknown block|header not found|block not found/i.test(err.message)\r\n}\r\n\r\n/** The browser and the engine proved the same value (words compared as numbers). */\r\nfunction sameValue(kind: Kind, a: string, b: string): boolean {\r\n if (kind === 'code') return a.toLowerCase() === b.toLowerCase()\r\n try {\r\n return BigInt(a) === BigInt(b)\r\n } catch {\r\n return false\r\n }\r\n}\r\n\r\n/** The finalized block moved between getRoot and verifyProof (rpc.rs adds this hint). */\r\nfunction rootMoved(err: unknown): boolean {\r\n return err instanceof InvalidRequestError && /veriq_getRoot/.test(err.message)\r\n}\r\n\r\nexport function createPrivateReader(client: VeriqClient, opts: PrivateReaderOptions): PrivateReader {\r\n validateOptions(opts)\r\n if (opts.chainId !== undefined) assertNetworkForChain(opts.chainId, opts.network)\r\n const timeoutMs = opts.timeoutMs ?? 30_000\r\n const providers = opts.providers.map((p) => ({ ...p }))\r\n const secrets = secretsOf(providers)\r\n const alignTimeoutMs = opts.alignTimeoutMs ?? 30_000\r\n\r\n /** The light client's answer; an error or a malformed block counts as \"not synced\". */\r\n async function browserFinalized(lightClient: BrowserLightClient): Promise<BrowserRoot | null> {\r\n let root: BrowserRoot | null\r\n try {\r\n root = await lightClient.finalized()\r\n } catch {\r\n return null\r\n }\r\n if (!root) return null\r\n if (!Number.isSafeInteger(root.number) || !HASH_RE.test(root.hash) || !HASH_RE.test(root.stateRoot)) return null\r\n return { number: root.number, hash: root.hash, stateRoot: root.stateRoot }\r\n }\r\n\r\n /** `veriq_getRoot`, refusing an engine on another chain than `opts.chainId`. */\r\n async function engineRoot(): Promise<RootInfo> {\r\n const root = await client.getRoot()\r\n // Engines from before S6 do not say; they only ever served Sepolia.\r\n const engineChain = root.chainId ?? 11155111\r\n if (opts.chainId !== undefined && engineChain !== opts.chainId) {\r\n throw new ChainMismatchError(\r\n CLIENT_CODES.CHAIN_MISMATCH,\r\n `the engine serves chain ${engineChain}, this reader reads chain ${opts.chainId}; nothing was read`,\r\n )\r\n }\r\n return root\r\n }\r\n\r\n /** The browser verifier, loaded once; `null` with the reason if it did not load. */\r\n let verifierState: Promise<{ verifier: BrowserVerifier } | { unavailable: string }> | null = null\r\n function browserVerifier() {\r\n const source = opts.verifier\r\n if (!source) return Promise.resolve(null)\r\n verifierState ??= (async () => {\r\n try {\r\n return { verifier: typeof source === 'function' ? await source() : source }\r\n } catch (err) {\r\n return { unavailable: err instanceof Error ? err.message : String(err) }\r\n }\r\n })()\r\n return verifierState\r\n }\r\n\r\n /**\r\n * The block to fetch at. With a synced browser light client, both roots must name the same\r\n * block; if they are at different heights, wait (bounded) for the slower one to catch up.\r\n * `engineDown`: the engine is unreachable, and the browser light client and verifier can\r\n * carry the read alone.\r\n */\r\n async function pinRoot(canRunLocally: boolean): Promise<{ root: RootInfo; browser?: BrowserRoot; engineDown?: true }> {\r\n const lightClient = opts.lightClient\r\n if (!lightClient) return { root: await engineRoot() }\r\n const deadline = Date.now() + alignTimeoutMs\r\n for (;;) {\r\n const [engine, browser] = await Promise.all([\r\n engineRoot().then(\r\n (root) => ({ root }),\r\n (error: unknown) => ({ error }),\r\n ),\r\n browserFinalized(lightClient),\r\n ])\r\n if ('error' in engine) {\r\n if (engine.error instanceof EngineUnreachableError && browser && canRunLocally) {\r\n return { root: { ...browser, rootSource: 'local-light-client', verified: true }, browser, engineDown: true }\r\n }\r\n throw engine.error\r\n }\r\n const root = engine.root\r\n if (!browser) return { root }\r\n if (browser.number === root.number) {\r\n const same = (a: string, b: string) => a.toLowerCase() === b.toLowerCase()\r\n if (!same(browser.hash, root.hash) || !same(browser.stateRoot, root.stateRoot)) {\r\n throw new RootMismatchError(\r\n ERROR_CODES.ROOT_MISMATCH,\r\n `finalized block #${root.number}: the browser light client has ${browser.hash} (state root ` +\r\n `${browser.stateRoot}), the engine has ${root.hash} (state root ${root.stateRoot}); nothing was read`,\r\n )\r\n }\r\n return { root, browser }\r\n }\r\n if (Date.now() >= deadline) {\r\n throw new RootUnavailableError(\r\n ERROR_CODES.ROOT_UNAVAILABLE,\r\n `the browser light client is at finalized block #${browser.number} and the engine at #${root.number}; ` +\r\n `they did not agree within ${Math.round(alignTimeoutMs / 1000)} s`,\r\n { hint: 'One light client is not following finality. Check the engine /health and the browser light client status.' },\r\n )\r\n }\r\n await new Promise((resolve) => setTimeout(resolve, ALIGN_POLL_MS))\r\n }\r\n }\r\n\r\n /** Providers that rejected the EIP-1898 `{ blockHash }` form (-32602): ask them by number. */\r\n const numberOnly = new Set<string>()\r\n let nextId = 1\r\n\r\n async function upstream(provider: PrivateProvider, method: string, params: unknown[]): Promise<unknown> {\r\n const id = nextId++\r\n const controller = new AbortController()\r\n let timer: ReturnType<typeof setTimeout> | undefined\r\n const timeout = new Promise<never>((_, reject) => {\r\n timer = setTimeout(() => {\r\n controller.abort()\r\n reject(new UpstreamError(`no answer within ${timeoutMs} ms`, undefined))\r\n }, timeoutMs)\r\n })\r\n const call = (async () => {\r\n let res: Response\r\n let body: { id?: unknown; result?: unknown; error?: { code?: unknown; message?: unknown } }\r\n try {\r\n res = await opts.fetch(provider.url, {\r\n method: 'POST',\r\n headers: { 'content-type': 'application/json' },\r\n body: JSON.stringify({ jsonrpc: '2.0', id, method, params }),\r\n signal: controller.signal,\r\n })\r\n body = (await res.json()) as typeof body\r\n } catch (err) {\r\n const text = err instanceof Error ? err.message : String(err)\r\n throw new UpstreamError(sanitize(text || 'request failed', secrets), undefined)\r\n }\r\n if (body && typeof body === 'object' && body.error) {\r\n const message = typeof body.error.message === 'string' ? body.error.message : 'provider error'\r\n const code = typeof body.error.code === 'number' ? body.error.code : undefined\r\n throw new UpstreamError(sanitize(message, secrets), code)\r\n }\r\n if (!body || typeof body !== 'object' || !('result' in body)) {\r\n throw new UpstreamError(`HTTP ${res.status} without a JSON-RPC result`, undefined)\r\n }\r\n if (body.id !== id) throw new UpstreamError('JSON-RPC answer has the wrong id', undefined)\r\n return body.result\r\n })()\r\n try {\r\n return await Promise.race([call, timeout])\r\n } finally {\r\n clearTimeout(timer)\r\n }\r\n }\r\n\r\n /**\r\n * `method(...params, block)` at exactly the pinned block: by hash (EIP-1898) first, then by\r\n * number. A provider that rejects the hash form (-32602) is asked by number from then on; one\r\n * that does not have the block yet (-32000, \"unknown block\") is not remembered.\r\n */\r\n async function atBlock(provider: PrivateProvider, method: string, params: unknown[], root: RootInfo) {\r\n if (!numberOnly.has(provider.label)) {\r\n try {\r\n return await upstream(provider, method, [...params, { blockHash: root.hash }])\r\n } catch (err) {\r\n if (!blockRefused(err)) throw err\r\n if ((err as UpstreamError).code === -32602) numberOnly.add(provider.label)\r\n }\r\n }\r\n return upstream(provider, method, [...params, `0x${root.number.toString(16)}`])\r\n }\r\n\r\n async function read(kind: Kind, address: string, slot: string | undefined, policy: Policy | undefined) {\r\n assertAddress(address)\r\n if (kind === 'storage') {\r\n if (slot === undefined) throw invalid('readStorage needs a slot')\r\n assertSlot(slot)\r\n }\r\n const local = await browserVerifier()\r\n const verifier = local && 'verifier' in local ? local.verifier : null\r\n /** Every provider tried, for a receipt made in the browser. */\r\n const attempts: TrustReceipt['routing']['attempts'] = []\r\n const attemptLabel = (p: PrivateProvider) => `${p.label}@anon-rpc:${opts.network}`\r\n let lastError: unknown\r\n for (const provider of providers) {\r\n // Per provider: a moving finalized block may make it fetch again, up to the budget.\r\n for (let refreshes = 0; ; refreshes++) {\r\n // engine/root errors stop the read\r\n const { root, browser, engineDown } = await pinRoot(verifier !== null)\r\n const started = Date.now()\r\n let proof: unknown\r\n let code: unknown\r\n try {\r\n proof = await atBlock(provider, 'eth_getProof', [address, slot === undefined ? [] : [slot]], root)\r\n if (kind === 'code') code = await atBlock(provider, 'eth_getCode', [address], root)\r\n } catch (err) {\r\n lastError = err\r\n attempts.push({ provider: attemptLabel(provider), outcome: 'transport-failure', elapsedMs: Date.now() - started, failureReason: 'provider request failed' })\r\n break // transport or provider failure: next provider\r\n }\r\n\r\n // S5: the browser checks the proof against the same root before the engine sees it.\r\n let localValue: string | null = null\r\n if (verifier) {\r\n const outcome = verifier.verifyRead({ stateRoot: root.stateRoot, address, kind, ...(slot === undefined ? {} : { slot }), proof, ...(kind === 'code' ? { code } : {}) })\r\n if (!outcome.ok) {\r\n if (outcome.code === 'INVALID_PROOF') {\r\n lastError = new InvalidProofError(ERROR_CODES.INVALID_PROOF, `${provider.label}: rejected in the browser, the engine was not asked: ${outcome.error}`)\r\n attempts.push({ provider: attemptLabel(provider), outcome: 'invalid-proof', elapsedMs: Date.now() - started, failureReason: 'INVALID_PROOF: provider attempt failed' })\r\n break // a lying provider: next one\r\n }\r\n throw new InvalidRequestError(ERROR_CODES.INVALID_REQUEST, `the browser verifier refused the read: ${outcome.error}`)\r\n }\r\n localValue = outcome.value\r\n }\r\n const elapsedMs = Date.now() - started\r\n const input = {\r\n kind,\r\n address,\r\n ...(slot === undefined ? {} : { slot }),\r\n blockHash: root.hash,\r\n proof,\r\n ...(kind === 'code' ? { code } : {}),\r\n provider: provider.label,\r\n network: opts.network,\r\n elapsedMs,\r\n ...(browser ? { browserRoot: browser } : {}),\r\n ...(verifier ? { verifier: 'browser' as const } : opts.verifier ? { verifier: 'unavailable' as const } : {}),\r\n }\r\n const localOnly = () => {\r\n attempts.push({ provider: attemptLabel(provider), outcome: 'success', elapsedMs })\r\n return localResult(verifier!, input, localValue!, root, attempts, policy)\r\n }\r\n if (engineDown) return localOnly()\r\n try {\r\n const result = await client.verifyProof(input, policy)\r\n if (localValue !== null && !sameValue(kind, localValue, result.value)) {\r\n throw new InternalError(\r\n ERROR_CODES.INTERNAL_ERROR,\r\n 'the browser verifier and the engine proved different values from the same proof; nothing was returned',\r\n )\r\n }\r\n return result\r\n } catch (err) {\r\n if (err instanceof EngineUnreachableError && localValue !== null && browser) return localOnly()\r\n lastError = err\r\n if (err instanceof InvalidProofError) {\r\n attempts.push({ provider: attemptLabel(provider), outcome: 'invalid-proof', elapsedMs, failureReason: 'INVALID_PROOF: provider attempt failed' })\r\n }\r\n if (rootMoved(err)) {\r\n if (refreshes < MAX_ROOT_REFRESHES) continue // same provider, new root\r\n // Another provider would race the same moving block; stop and say why.\r\n throw new InvalidRequestError(\r\n ERROR_CODES.INVALID_REQUEST,\r\n `the finalized block moved again while fetching through ${opts.network}; nothing was verified`,\r\n { cause: err, hint: 'Retry the read. The provider or network is slower than the finalized block moves.' },\r\n )\r\n }\r\n if (err instanceof InvalidProofError) break // a lying provider: next one\r\n throw err // policy, root, engine: not a provider problem\r\n }\r\n }\r\n }\r\n if (lastError instanceof VeriqError) throw lastError\r\n const detail = lastError instanceof Error ? lastError.message : 'no answer'\r\n throw new AllProvidersFailedError(\r\n ERROR_CODES.ALL_PROVIDERS_FAILED,\r\n `no provider answered through ${opts.network} (${providers.length} tried): ${detail}`,\r\n { hint: 'The anonymizing network may still be connecting, or the providers refuse browser requests (CORS).' },\r\n )\r\n }\r\n\r\n /**\r\n * A read verified entirely in this browser: its light client's root, its verifier, no engine.\r\n * Same receipt shape as the engine's; bindings computed by the same Rust code.\r\n */\r\n function localResult(\r\n verifier: BrowserVerifier,\r\n input: Record<string, unknown> & { provider: string },\r\n value: string,\r\n root: RootInfo,\r\n attempts: TrustReceipt['routing']['attempts'],\r\n policy: Policy | undefined,\r\n ): VerifiedResult<Hex> {\r\n const method = 'veriq_verifyProof'\r\n const params = policy ? [input, policy] : [input]\r\n const warnings = [\r\n {\r\n code: 'LOCAL_ONLY',\r\n message: `the engine could not be reached: this value was verified in the browser against its own light client (synced over ${opts.network}); the engine did not see or store this receipt`,\r\n },\r\n {\r\n code: 'BROWSER_LIGHT_CLIENT',\r\n message: `a light client in the browser, synced over ${opts.network}, produced this finalized block and state root`,\r\n },\r\n ]\r\n if (policy?.consistency === 'compare') {\r\n warnings.push({ code: 'COMPARE_UNAVAILABLE', message: 'a client-fetched proof comes from one provider; nothing was compared' })\r\n }\r\n const now = Math.floor(Date.now() / 1000)\r\n const receipt = TrustReceiptSchema.parse({\r\n identity: {\r\n requestId: `local-${Date.now().toString(16)}-${Math.floor(Math.random() * 0xffffff).toString(16).padStart(6, '0')}`,\r\n method,\r\n requestBinding: verifier.binding(method, params),\r\n resultBinding: verifier.binding(method, value),\r\n },\r\n block: {\r\n number: root.number,\r\n hash: root.hash,\r\n stateRoot: root.stateRoot,\r\n finalized: true,\r\n ...(opts.chainId !== undefined ? { chainId: opts.chainId } : {}),\r\n },\r\n verification: {\r\n status: 'verified',\r\n rootSource: 'local-light-client',\r\n verifierLocation: 'browser',\r\n mechanisms: MECHANISMS[input.kind as Kind],\r\n bootstrap: { source: 'browser-light-client', checkpoint: null, checkpointSource: null },\r\n },\r\n privacy: { transport: 'anon-rpc', mechanism: opts.network },\r\n routing: { comparison: 'not-run', providersTried: attempts.length, providerLabel: `${input.provider}@anon-rpc:${opts.network}`, attempts },\r\n freshness: { observedAt: now, ageSeconds: 0, pinned: true },\r\n warnings,\r\n })\r\n return { value: value as Hex, receipt, verified: true, attempts: attemptsFromReceipt(receipt) }\r\n }\r\n\r\n const word = (r: VerifiedResult<Hex>): VerifiedResult<bigint> => ({ ...r, value: BigInt(r.value) })\r\n return {\r\n readBalance: async ({ address, policy }) => word(await read('balance', address, undefined, policy)),\r\n readNonce: async ({ address, policy }) => word(await read('nonce', address, undefined, policy)),\r\n readStorage: async ({ address, slot, policy }) => {\r\n const r = await read('storage', address, slot, policy)\r\n return { ...r, value: `0x${BigInt(r.value).toString(16).padStart(64, '0')}` as Hex }\r\n },\r\n readCode: ({ address, policy }) => read('code', address, undefined, policy),\r\n getDelegation: async ({ address, policy }) => {\r\n assertAddress(address)\r\n const codeResult = await read('code', address, undefined, policy)\r\n const classified = classifyAccountCode(codeResult.value)\r\n const isDelegated = classified.isDelegated\r\n const delegateAddress = classified.delegateAddress\r\n const receipt: TrustReceipt = {\r\n ...codeResult.receipt,\r\n warnings: [...codeResult.receipt.warnings],\r\n }\r\n\r\n let securityClassification: DelegationSecurityClassification\r\n if (classified.status.status === 'normal-eoa') {\r\n securityClassification = 'normal-eoa'\r\n } else if (classified.status.status === 'delegated') {\r\n securityClassification = 'delegation-detected'\r\n if (delegateAddress) {\r\n receipt.warnings.push({\r\n code: 'EIP7702_DELEGATION_DETECTED',\r\n message: `EIP-7702 delegation active: calls execute code from ${delegateAddress}`,\r\n })\r\n }\r\n } else if (classified.status.status === 'revoked') {\r\n securityClassification = 'delegation-revoked'\r\n receipt.warnings.push({\r\n code: 'EIP7702_DELEGATION_REVOKED',\r\n message: 'EIP-7702 delegation cleared: account was previously delegated but is now empty',\r\n })\r\n } else if (classified.status.status === 'contract') {\r\n securityClassification = 'smart-contract'\r\n } else {\r\n securityClassification = 'potential-risk'\r\n receipt.warnings.push({\r\n code: 'EIP7702_INVALID_DESIGNATOR',\r\n message: 'Account code begins with 0xef0100 but has invalid length or malformed encoding',\r\n })\r\n }\r\n\r\n const codeHash = (codeResult.receipt.identity.resultBinding || `0x${'0'.repeat(64)}`) as Hex\r\n\r\n return {\r\n address: address as Address,\r\n status: classified.status,\r\n isDelegated,\r\n delegateAddress,\r\n codeHash,\r\n securityClassification,\r\n blockNumber: codeResult.receipt.block.number,\r\n verified: codeResult.verified,\r\n receipt,\r\n }\r\n },\r\n }\r\n}\r\n","/**\r\n * The Veriq proof verifier compiled to WebAssembly (backend/crates/verifier-wasm), for checking\r\n * proofs in the browser (S5). It runs the same Rust code as the engine's own reads.\r\n *\r\n * The .wasm ships with this package as `veriq-client/verifier.wasm` (~205 KB, ~78 KB gzip).\r\n * Load it once, lazily:\r\n *\r\n * @example\r\n * import wasmUrl from 'veriq-client/verifier.wasm?url' // Vite; any URL or bytes work\r\n * const verifier = await loadVerifier(wasmUrl)\r\n * verifier.verifyRead({ stateRoot, address, kind: 'balance', proof }) // { ok: true, value: '0x…' }\r\n */\r\nimport { ERROR_CODES, VeriqError } from './errors'\r\n\r\n/** The ABI this SDK speaks (crates/verifier-wasm `ABI_VERSION`). */\r\nexport const VERIFIER_ABI_VERSION = 2\r\n\r\nexport interface VerifyReadInput {\r\n /** The trusted state root the proof must chain to. */\r\n stateRoot: string\r\n address: string\r\n kind: 'balance' | 'nonce' | 'storage' | 'code'\r\n slot?: string\r\n /** The raw `eth_getProof` result. */\r\n proof: unknown\r\n /** The raw `eth_getCode` result (kind `code`). */\r\n code?: unknown\r\n}\r\n\r\n/** `value`: a `0x` quantity (balance, nonce, storage) or the bytecode (code). */\r\nexport type VerifyReadOutcome =\r\n | { ok: true; value: string }\r\n | { ok: false; code: 'INVALID_PROOF' | 'INVALID_REQUEST' | 'INTERNAL_ERROR' | string; error: string }\r\n\r\nexport interface BrowserVerifier {\r\n /** Check one read exactly as the engine does. Never throws for a bad proof: see `ok`. */\r\n verifyRead(input: VerifyReadInput): VerifyReadOutcome\r\n /** The engine's receipt binding: keccak256(method || canonical JSON), lowercase hex. */\r\n binding(method: string, value: unknown): string\r\n readonly abiVersion: number\r\n}\r\n\r\n/** Something the verifier can be loaded from. */\r\nexport type VerifierSource = string | URL | Response | ArrayBuffer | ArrayBufferView | WebAssembly.Module\r\n\r\ninterface Exports {\r\n memory: WebAssembly.Memory\r\n veriq_alloc(len: number): number\r\n veriq_free(ptr: number, len: number): void\r\n veriq_abi_version(): number\r\n veriq_verify_read(ptr: number, len: number): bigint\r\n veriq_binding(ptr: number, len: number): bigint\r\n}\r\n\r\n/** The WebAssembly verifier could not be loaded or does not speak this SDK's ABI. */\r\nexport class VerifierUnavailableError extends VeriqError {\r\n constructor(message: string, cause?: unknown) {\r\n super(ERROR_CODES.INTERNAL_ERROR, message, {\r\n cause,\r\n hint: 'The browser verifier did not load; the engine still verifies every proof.',\r\n })\r\n }\r\n}\r\n\r\nasync function bytesOf(source: VerifierSource): Promise<ArrayBuffer | ArrayBufferView | WebAssembly.Module> {\r\n if (typeof source === 'string' || source instanceof URL) {\r\n const res = await fetch(source)\r\n if (!res.ok) throw new Error(`HTTP ${res.status}`)\r\n return res.arrayBuffer()\r\n }\r\n if (typeof Response !== 'undefined' && source instanceof Response) return source.arrayBuffer()\r\n return source as ArrayBuffer | ArrayBufferView | WebAssembly.Module\r\n}\r\n\r\n/** Load and check the verifier. Rejects with {@link VerifierUnavailableError}. */\r\nexport async function loadVerifier(source: VerifierSource): Promise<BrowserVerifier> {\r\n let exports: Exports\r\n try {\r\n const bytes = await bytesOf(source)\r\n const instance =\r\n bytes instanceof WebAssembly.Module\r\n ? await WebAssembly.instantiate(bytes, {})\r\n : (await WebAssembly.instantiate(bytes as BufferSource, {})).instance\r\n exports = instance.exports as unknown as Exports\r\n } catch (err) {\r\n const reason = err instanceof Error ? err.message : String(err)\r\n throw new VerifierUnavailableError(`the browser verifier could not be loaded: ${reason}`, err)\r\n }\r\n const abiVersion = typeof exports.veriq_abi_version === 'function' ? exports.veriq_abi_version() : 1\r\n if (abiVersion !== VERIFIER_ABI_VERSION || typeof exports.veriq_verify_read !== 'function') {\r\n throw new VerifierUnavailableError(`the browser verifier speaks ABI ${abiVersion}, this SDK needs ${VERIFIER_ABI_VERSION}`)\r\n }\r\n\r\n const encoder = new TextEncoder()\r\n const decoder = new TextDecoder()\r\n function call(fn: (ptr: number, len: number) => bigint, request: unknown): Record<string, unknown> {\r\n const input = encoder.encode(JSON.stringify(request))\r\n const ptr = exports.veriq_alloc(input.length)\r\n new Uint8Array(exports.memory.buffer, ptr, input.length).set(input)\r\n let packed: bigint\r\n try {\r\n packed = fn(ptr, input.length)\r\n } finally {\r\n exports.veriq_free(ptr, input.length)\r\n }\r\n const outPtr = Number(packed >> 32n)\r\n const outLen = Number(packed & 0xffffffffn)\r\n // Copy before freeing; memory.buffer may be replaced if the module grows its memory.\r\n const text = decoder.decode(new Uint8Array(exports.memory.buffer, outPtr, outLen).slice())\r\n exports.veriq_free(outPtr, outLen)\r\n return JSON.parse(text) as Record<string, unknown>\r\n }\r\n\r\n return {\r\n abiVersion,\r\n verifyRead(input) {\r\n const { stateRoot, address, kind, slot, proof, code } = input\r\n const out = call(exports.veriq_verify_read, { stateRoot, address, kind, slot, proof, code })\r\n if (out.ok === true && typeof out.value === 'string') return { ok: true, value: out.value }\r\n return { ok: false, code: String(out.code ?? 'INTERNAL_ERROR'), error: String(out.error ?? 'verification failed') }\r\n },\r\n binding(method, value) {\r\n const out = call(exports.veriq_binding, { method, value })\r\n if (out.ok !== true || typeof out.binding !== 'string') throw new VerifierUnavailableError(`binding failed: ${String(out.error)}`)\r\n return out.binding\r\n },\r\n }\r\n}\r\n","import type { Attempt, EngineHealth, Hex, RootSource, TrustReceipt, VerificationStatus } from './types'\r\n\r\nconst WEI = 10n ** 18n\r\n\r\n/**\r\n * Wei -> \"0.4213 ETH\". Truncates (never rounds up a proven value); tiny non-zero amounts show as \"<0.0001 ETH\".\r\n * @example formatEth(421337000000000000n) // \"0.4213 ETH\"\r\n */\r\nexport function formatEth(wei: bigint | string | number, opts: { decimals?: number; symbol?: boolean } = {}): string {\r\n const decimals = opts.decimals ?? 4\r\n const unit = opts.symbol === false ? '' : ' ETH'\r\n const v = typeof wei === 'bigint' ? wei : BigInt(wei)\r\n const neg = v < 0n\r\n const abs = neg ? -v : v\r\n const whole = abs / WEI\r\n const frac = (abs % WEI).toString().padStart(18, '0').slice(0, decimals).replace(/0+$/, '')\r\n if (whole === 0n && frac === '' && abs > 0n) return `${neg ? '>-' : '<'}0.${'0'.repeat(Math.max(0, decimals - 1))}1${unit}`\r\n const grouped = whole.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')\r\n return `${neg ? '-' : ''}${grouped}${frac ? `.${frac}` : ''}${unit}`\r\n}\r\n\r\n/**\r\n * Middle-truncate a hash or address: \"0x1234…cdef\".\r\n * @example shortHash('0x9a3f00000000000000000000000000000000000000000000000000000000c21e') // \"0x9a3f…c21e\"\r\n */\r\nexport function shortHash(hex: string, head = 4, tail = 4): string {\r\n const h = hex.startsWith('0x') ? head + 2 : head\r\n return hex.length <= h + tail + 1 ? hex : `${hex.slice(0, h)}…${hex.slice(-tail)}`\r\n}\r\n\r\n/** \"7,412,903\" */\r\nexport function formatNumber(n: number | bigint): string {\r\n return n.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')\r\n}\r\n\r\n/** Human label for a root source. */\r\nexport function rootSourceLabel(source: RootSource): string {\r\n switch (source) {\r\n case 'local-light-client':\r\n return 'local light client (Helios)'\r\n case 'fixture':\r\n return 'fixture (tests only)'\r\n case 'untrusted-rpc':\r\n return 'untrusted RPC (DEV MODE)'\r\n }\r\n}\r\n\r\n/** Anything prettyReceipt / formatReceipt can show: a bare receipt, or a read result with value + attempts. */\r\nexport type ReceiptInput = TrustReceipt | { receipt: TrustReceipt; value?: bigint | string; attempts?: Attempt[] }\r\n\r\nexport type RowTone = 'ok' | 'warn' | 'err' | 'lav' | 'muted' | 'ink'\r\n\r\n/** One line of a receipt. `status` rows carry the status + formatted value. */\r\nexport interface ReceiptRow {\r\n label: string\r\n value: string\r\n tone?: RowTone\r\n}\r\n\r\nfunction split(input: ReceiptInput): { receipt: TrustReceipt; value?: bigint | string; attempts: Attempt[] } {\r\n if ('identity' in input) return { receipt: input, attempts: [] }\r\n return { receipt: input.receipt, ...(input.value !== undefined ? { value: input.value } : {}), attempts: input.attempts ?? [] }\r\n}\r\n\r\nexport function statusTone(status: VerificationStatus): RowTone {\r\n return status === 'verified' ? 'ok' : status === 'unverified' ? 'warn' : 'lav'\r\n}\r\n\r\nfunction formatValue(receipt: TrustReceipt, value: bigint | string | undefined): string {\r\n if (value === undefined) return ''\r\n if (/storage/i.test(receipt.identity.method)) {\r\n const v = typeof value === 'bigint' ? value : BigInt(value)\r\n return v < 10n ** 15n ? v.toString() : shortHash(`0x${v.toString(16)}`)\r\n }\r\n return formatEth(value)\r\n}\r\n\r\n/** The rows shown by formatReceipt and prettyReceipt (shared so plain and colour output match). */\r\nexport function receiptRows(input: ReceiptInput): { status: VerificationStatus; value: string; rows: ReceiptRow[] } {\r\n const { receipt: r, value, attempts } = split(input)\r\n const rows: ReceiptRow[] = [\r\n { label: 'block', value: `#${formatNumber(r.block.number)} ${shortHash(r.block.hash)}${r.block.finalized ? '' : ' (not finalized)'}` },\r\n { label: 'stateRoot', value: shortHash(r.block.stateRoot) },\r\n { label: 'root', value: rootSourceLabel(r.verification.rootSource), tone: r.verification.rootSource === 'untrusted-rpc' ? 'warn' : 'ink' },\r\n ]\r\n const total = attempts.reduce((s, a) => s + a.elapsedMs, 0)\r\n const tried = attempts.length || r.routing.providersTried\r\n const provider = [\r\n r.routing.providerLabel ?? '—',\r\n `${tried} attempt${tried === 1 ? '' : 's'}`,\r\n ...(attempts.length ? [`${Math.round(total)} ms`] : []),\r\n ].join(' · ')\r\n rows.push({ label: 'provider', value: provider })\r\n for (const a of attempts) {\r\n if (a.outcome !== 'ok') rows.push({ label: 'rejected', value: `${a.provider} ${a.outcome}`, tone: 'err' })\r\n }\r\n if (r.routing.comparison !== 'not-run') rows.push({ label: 'compare', value: r.routing.comparison, tone: r.routing.comparison === 'agree' ? 'ok' : 'warn' })\r\n for (const w of r.warnings) rows.push({ label: 'warning', value: w.code, tone: 'warn' })\r\n return { status: r.verification.status, value: formatValue(r, value), rows }\r\n}\r\n\r\n/**\r\n * Plain multi-line text, no colours.\r\n * @example console.log(formatReceipt(await veriq.readBalance({ address })))\r\n */\r\nexport function formatReceipt(input: ReceiptInput): string {\r\n const { status, value, rows } = receiptRows(input)\r\n return [`${status.toUpperCase()}${value ? ` ${value}` : ''}`, ...rows.map((r) => `${r.label.padEnd(10)} ${r.value}`)].join('\\n')\r\n}\r\n\r\n/** Rows for `veriq health`. */\r\nexport function healthRows(h: EngineHealth): { engine: ReceiptRow[]; providers: string[][] } {\r\n const lc = h.lightClient\r\n const lag = lc.finalizedNumber != null && lc.headNumber != null ? `${lc.headNumber - lc.finalizedNumber} blocks behind head` : ''\r\n const engine: ReceiptRow[] = [\r\n {\r\n label: 'engine',\r\n value: `${h.ok ? 'online' : `degraded${h.error ? ` · ${h.error.code}` : ''}`}${h.bind ? ` · ${h.bind}` : ''}`,\r\n tone: h.ok ? 'ok' : 'warn',\r\n },\r\n {\r\n label: 'root',\r\n value: h.rootSource ? rootSourceLabel(h.rootSource) : 'none yet (light client not synced)',\r\n tone: !h.rootSource || h.devMode || h.rootSource === 'untrusted-rpc' ? 'warn' : 'ink',\r\n },\r\n { label: 'light', value: lc.synced ? 'synced' : 'not synced', tone: lc.synced ? 'ok' : 'warn' },\r\n { label: 'finalized', value: lc.finalizedNumber != null ? `#${formatNumber(lc.finalizedNumber)}${lag ? ` · ${lag}` : ''}` : '—' },\r\n ]\r\n const providers = h.providers.map((p) => [\r\n p.name,\r\n p.chainOk ? 'yes' : 'no',\r\n p.proofSupport ? 'yes' : 'no',\r\n p.eip1898 ? 'yes' : 'no',\r\n p.breaker.state,\r\n p.transport,\r\n ])\r\n if (h.providers.length === 0) engine.push({ label: 'providers', value: `${h.providerCount} configured`, tone: 'ink' })\r\n return { engine, providers }\r\n}\r\n\r\nexport type { Hex }\r\n","import { healthRows, receiptRows, type ReceiptInput, type RowTone } from './format'\r\nimport type { EngineHealth } from './types'\r\nimport type { VeriqError } from './errors'\r\n\r\n// Dashboard palette as 24-bit ANSI. \"ink\" uses the terminal's own foreground so it reads on light and dark themes.\r\nconst PALETTE: Record<RowTone | 'border' | 'title', [number, number, number] | null> = {\r\n ink: null,\r\n muted: [0x5b, 0x5b, 0x66],\r\n lav: [0x9c, 0x95, 0xd6],\r\n border: [0x9c, 0x95, 0xd6],\r\n title: [0x6b, 0x62, 0xb5],\r\n ok: [0x2f, 0x9e, 0x6e],\r\n warn: [0xb7, 0x79, 0x1f],\r\n err: [0xc2, 0x41, 0x5b],\r\n}\r\n\r\nexport interface PrettyOptions {\r\n /** Force colours on/off. Default: on for a TTY unless NO_COLOR is set. */\r\n color?: boolean\r\n}\r\n\r\nfunction env(name: string): string | undefined {\r\n const p = (globalThis as { process?: { env?: Record<string, string | undefined> } }).process\r\n return p?.env?.[name]\r\n}\r\n\r\n/** Colours on only for an interactive terminal without NO_COLOR. */\r\nexport function supportsColor(): boolean {\r\n if (env('NO_COLOR') !== undefined) return false\r\n if (env('FORCE_COLOR') !== undefined) return true\r\n const p = (globalThis as { process?: { stdout?: { isTTY?: boolean } } }).process\r\n return p?.stdout?.isTTY === true\r\n}\r\n\r\nfunction painter(on: boolean) {\r\n return (tone: keyof typeof PALETTE, text: string, bold = false): string => {\r\n const rgb = PALETTE[tone]\r\n if (!on || (!rgb && !bold)) return text\r\n return `${bold ? '\\x1b[1m' : ''}${rgb ? `\\x1b[38;2;${rgb[0]};${rgb[1]};${rgb[2]}m` : ''}${text}\\x1b[0m`\r\n }\r\n}\r\n\r\ninterface Line {\r\n plain: string\r\n painted: string\r\n}\r\n\r\nfunction box(title: string, lines: Line[], paint: ReturnType<typeof painter>): string {\r\n const width = Math.max(title.length + 6, ...lines.map((l) => l.plain.length)) + 4\r\n const top = `${paint('border', '╭─ ')}${paint('title', title, true)}${paint('border', ` ${'─'.repeat(width - title.length - 3)}╮`)}`\r\n const body = lines.map((l) => `${paint('border', '│')} ${l.painted}${' '.repeat(width - l.plain.length - 1)}${paint('border', '│')}`)\r\n const bottom = paint('border', `╰${'─'.repeat(width)}╯`)\r\n return [top, ...body, bottom].join('\\n')\r\n}\r\n\r\nconst LABEL = 11\r\n\r\n/**\r\n * The receipt as a rounded box in the dashboard colours. Plain text for NO_COLOR / non-TTY.\r\n * @example console.log(prettyReceipt(await veriq.readBalance({ address })))\r\n */\r\nexport function prettyReceipt(input: ReceiptInput, opts: PrettyOptions = {}): string {\r\n const paint = painter(opts.color ?? supportsColor())\r\n const { status, value, rows } = receiptRows(input)\r\n const tone: RowTone = status === 'verified' ? 'ok' : status === 'unverified' ? 'warn' : 'lav'\r\n const head = `● ${status.toUpperCase()}`\r\n const gap = ' '.repeat(Math.max(2, 22 - head.length))\r\n const lines: Line[] = [\r\n { plain: `${head}${gap}${value}`, painted: `${paint(tone, head, true)}${gap}${paint('ink', value, true)}` },\r\n ...rows.map((r) => ({\r\n plain: `${r.label.padEnd(LABEL)}${r.value}`,\r\n painted: `${paint('muted', r.label.padEnd(LABEL))}${paint(r.tone ?? 'ink', r.value)}`,\r\n })),\r\n ]\r\n return box('Veriq · Trust Receipt', lines, paint)\r\n}\r\n\r\n/**\r\n * Engine, light client and provider table for `veriq health`.\r\n * @example console.log(prettyHealth(await veriq.health()))\r\n */\r\nexport function prettyHealth(health: EngineHealth, opts: PrettyOptions = {}): string {\r\n const paint = painter(opts.color ?? supportsColor())\r\n const { engine, providers } = healthRows(health)\r\n const lines: Line[] = engine.map((r) => ({\r\n plain: `${r.label.padEnd(LABEL)}${r.value}`,\r\n painted: `${paint('muted', r.label.padEnd(LABEL))}${paint(r.tone ?? 'ink', r.value)}`,\r\n }))\r\n const header = ['provider', 'chain', 'proof', '1898', 'breaker', 'transport']\r\n const widths = header.map((h, i) => Math.max(h.length, ...providers.map((p) => (p[i] ?? '').length)) + 2)\r\n const fmt = (cells: string[]) => cells.map((c, i) => c.padEnd(widths[i] ?? 0)).join('').trimEnd()\r\n if (providers.length === 0) return box('Veriq · Engine health', lines, paint)\r\n lines.push({ plain: '', painted: '' })\r\n lines.push({ plain: fmt(header), painted: paint('muted', fmt(header)) })\r\n for (const p of providers) {\r\n const plain = fmt(p)\r\n const bad = p[1] === 'no' || p[2] === 'no' || p[4] !== 'closed'\r\n lines.push({ plain, painted: paint(bad ? 'err' : 'ink', plain) })\r\n }\r\n return box('Veriq · Engine health', lines, paint)\r\n}\r\n\r\n/**\r\n * Error name, code and hint, in the error colour.\r\n * @example console.error(prettyError(err))\r\n */\r\nexport function prettyError(err: VeriqError, opts: PrettyOptions = {}): string {\r\n const paint = painter(opts.color ?? supportsColor())\r\n return `${paint('err', `✕ ${err.name} [${err.code} ${err.codeName}]`, true)}\\n ${err.message}\\n ${paint('muted', `→ ${err.hint}`)}`\r\n}\r\n"]}